안녕하세요, 자바파커입니다.
MCP(Model Context Protocol)가 무엇이고 어떻게 생겼는지는 MCP란? 구조부터 2026 스펙 대전환까지에서 정리했습니다. 이번 글은 그다음 질문을 다룹니다. 실제로 MCP 서버를 붙이면 무엇이 드는지, 그리고 앞으로 어디에 쓰면 좋은지입니다.
직접 MCP 서버를 만들어 Claude Code에 붙이고 재 봤습니다. 결과부터 말씀드리면 이렇습니다.
- 도구 40개짜리 MCP 서버는 도구 검색(tool search)을 끄면 요청마다 입력 토큰을 약 9,100개 더했습니다. 켜 두면 약 490개였습니다.
- 대신 도구 검색을 켜면 도구를 찾는 단계가 들어가, 질문에 따라 응답이 3~10초 느려졌습니다. 질문에 단서가 없으면 엉뚱한 곳을 먼저 뒤지기도 했습니다.
claude -p같은 헤드리스 실행에서는 MCP 도구도 따로 허용해야 호출됩니다.- 파이썬 MCP SDK는 2.x에서
FastMCP가MCPServer로 이름이 바뀌어, 1.x 예제 코드는 그대로 돌지 않습니다.
MCP를 쓰는 네 가지 자리
MCP 서버 하나를 만들면 여러 곳에서 씁니다. 2026년 11월 기준 Claude 쪽에서 MCP를 붙이는 자리는 넷입니다.
claude mcp add나 프로젝트의 .mcp.json으로 등록합니다.2026년 11월 MCP 스펙·확장·레지스트리 현황
- 현재 스펙은 2026-07-28판입니다. 세션과 초기화 핸드셰이크가 사라져 요청마다 독립적으로 처리되는 구조가 됐습니다. 폐기 예정 기능은 최소 12개월 유예한다는 정책도 함께 들어왔습니다. 자세한 변화는 이전 글에 정리했습니다.
- 공식 확장(extension)이 늘었습니다. 서버가 화면을 띄우는 MCP Apps, 오래 걸리는 작업을 비동기로 처리하는 Tasks, 회사 IdP로 접근을 통제하는 Enterprise-Managed Authorization, 서버가 에이전트 스킬을 제공하는 Skills 확장이 공식 문서에 올라 있습니다. 확장은 클라이언트마다 지원 범위가 다르고, 기본으로 켜지지 않습니다.
- 공식 레지스트리가 있습니다. registry.modelcontextprotocol.io에 서버를 등록하고 검색할 수 있고, 2026년 11월 11일 공개 API로 조회했을 때 버전을 포함한 등록 항목이 4만 건, 서버 이름으로 1만 5천 개를 넘었습니다(집계 도중 4만 건에서 멈춰 실제 수는 더 많습니다).
- SDK도 크게 바뀌었습니다. 파이썬 SDK는 2.x(10월 2.3.0), TypeScript SDK는 2.4.0(10월 23일)이 최신입니다. 파이썬 2.x에서는
FastMCP가MCPServer로 바뀌어from mcp.server.fastmcp import FastMCP가 오류를 냅니다.
MCP 서버 직접 만들기
사내 용어 사전을 흉내 낸 서버를 만들었습니다. 도구 3개를 stdio로 제공하고, 전체가 28줄입니다.
"""사내 용어 사전 MCP 서버 (실험용). 도구 3개를 stdio로 제공한다."""
from mcp.server.mcpserver import MCPServer # mcp 2.x (1.x에서는 FastMCP)
mcp = MCPServer("glossary")
TERMS = {
"배포 창": "운영 반영이 허용되는 시간대. 매주 화·목 14~16시.",
"핫픽스": "배포 창 밖에서 긴급 반영하는 수정. 팀장 승인 필요.",
"롤백 기준": "배포 후 30분 안에 오류율 2% 초과 시 즉시 이전 버전으로 되돌림.",
}
@mcp.tool()
def lookup_term(term: str) -> str:
"""사내 용어의 정의를 찾는다. 사내 규칙·절차 용어를 물으면 사용한다."""
return TERMS.get(term, f"'{term}'은(는) 사전에 없습니다.")
@mcp.tool()
def list_terms() -> list[str]:
"""사전에 등록된 사내 용어 목록을 돌려준다."""
return sorted(TERMS)
@mcp.tool()
def search_terms(keyword: str) -> list[str]:
"""정의에 키워드가 들어간 용어를 찾는다."""
return [t for t, d in TERMS.items() if keyword in d or keyword in t]
if __name__ == "__main__":
mcp.run() # stdioClaude Code에는 이렇게 붙입니다.
# 이 프로젝트에서만 (기본값: local)
claude mcp add glossary -- uv run --with mcp python glossary_server.py
# 팀과 공유: 프로젝트 루트의 .mcp.json에 기록
claude mcp add glossary --scope project -- uv run --with mcp python glossary_server.py
# 원격 서버
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp등록 범위는 셋입니다. local(기본값)과 user는 ~/.claude.json에 저장되고, project는 저장소의 .mcp.json에 저장돼 팀이 함께 씁니다. 같은 이름이 여러 곳에 있으면 local, project, user, 플러그인, claude.ai 커넥터 순으로 앞의 것이 이깁니다. 프로젝트의 .mcp.json에 있는 서버는 대화형으로 쓸 때 처음 한 번 사용자 승인을 받습니다. 다만 claude -p 같은 헤드리스 실행에서는 승인 없이 불러오므로, 남이 만든 저장소에서 헤드리스로 돌릴 때는 --strict-mcp-config로 막아 두는 편이 안전합니다.
측정 1: 서버를 붙이면 토큰이 얼마나 늘까
빈 프로젝트에서 "안녕이라고만 답해."라고 요청하고, 첫 요청의 입력 토큰(캐시 포함)을 비교했습니다. 서버는 위의 용어 사전(도구 3개)과, 실제 개발 도구 서버를 흉내 내 이슈·PR·배포 등 8개 영역에 조회·생성·수정·검색 도구를 붙인 서버(도구 40개)를 썼습니다.
ENABLE_TOOL_SEARCH=false로 끕니다.도구 검색이 켜져 있으면 MCP 도구는 이름만 알려 두고, 설명과 입력 형식은 필요할 때 ToolSearch로 불러옵니다. 꺼 두면 모든 도구의 설명이 매 요청에 들어갑니다. 참고로 도구 검색을 끄면 Claude Code의 기본 도구도 함께 처음부터 실려서, 서버가 없는 상태의 기준값 자체가 약 17,400토큰에서 약 33,500토큰으로 커졌습니다.
측정 2: 도구 검색의 대가
토큰이 줄어든 만큼 다른 비용이 생겼습니다. 두 서버(도구 43개)를 붙인 채 두 가지 질문을 각각 두 번씩 했습니다.
켬: 3턴, 약 8.8초, 입력 54,775토큰
켬: 5턴, 13~16초, 저장소를 먼저 뒤진 뒤 도구 검색
토큰만 보면 도구 검색은 켜 두는 쪽이 낫습니다. 끄면 MCP 도구뿐 아니라 Claude Code 기본 도구까지 처음부터 실려 기준값이 약 16,000토큰 커지기 때문입니다. 끄는 쪽의 이점은 속도와, 도구를 곧바로 찾는다는 점입니다. 켜 둔 채로 쓴다면 도구 설명에 "사내 규칙·절차 용어를 물으면 사용한다"처럼 언제 쓰는지를 분명히 적어 두면, 모델이 검색할 때 찾기 쉬워집니다.
실무에서 알아 둘 설정
- 헤드리스 실행은 도구 허용이 필요합니다.
claude -p로 돌렸을 때 처음에는 도구 호출이 권한 단계에서 거절됐습니다.--allowedTools mcp__glossary처럼 서버 단위로 허용하니 정상으로 호출됐습니다. - 출력이 큰 도구를 조심합니다. MCP 도구 출력이 1만 토큰을 넘으면 경고가 나오고, 기본 상한은 2만 5천 토큰입니다(
MAX_MCP_OUTPUT_TOKENS로 조정). 5만 자가 넘는 텍스트 결과는 파일로 저장됩니다. - 원격 서버로 비밀값이 새지 않게 막혀 있습니다.
.mcp.json의 원격 서버 주소와 헤더에서는ANTHROPIC_API_KEY같은 인증 변수가 빈 값으로 치환됩니다. 프로젝트 설정 파일에 적힌 서버가 내 키를 가져가지 못하게 하는 장치입니다. - 조직 단위 통제가 됩니다. 관리 설정의
managedMcpServers는 다른 모든 범위보다 우선합니다. 회사에서 허용한 서버만 쓰게 할 때 씁니다.
Claude API에서 MCP 쓰기
API에서는 MCP 클라이언트를 직접 만들지 않아도 됩니다. Messages API 요청에 서버 정보(mcp_servers)와 도구 설정(tools의 mcp_toolset)을 함께 넣으면 API가 서버에 연결해 도구를 호출합니다. 아래는 공식 문서 기준의 요청 모양입니다. 이번에는 API 키 없이 실험해서 직접 호출하지는 못했습니다.
{
"model": "claude-opus-5-5",
"max_tokens": 1024,
"messages": [{ "role": "user", "content": "열린 버그 목록을 보여 줘" }],
"mcp_servers": [
{
"type": "url",
"url": "https://example.com/mcp",
"name": "tracker",
"authorization_token": "YOUR_TOKEN"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "tracker",
"default_config": { "enabled": false },
"configs": { "search_issues": { "enabled": true } }
}
]
}- 베타 헤더
anthropic-beta: mcp-client-2025-11-20이 필요합니다. 새로 나온mcp-client-2026-09-15는 서버의 도구 목록을 기록해 두고 고정(pin)할 수 있어서, 서버가 대화 도중에 도구를 바꿔도 Claude가 받는 목록이 흔들리지 않습니다. - MCP 기능 중 도구 호출만 지원하고, 공개된 HTTP 서버만 연결됩니다. 로컬 stdio 서버는 직접 붙일 수 없습니다.
- 위 예처럼
default_config로 전부 끄고 필요한 도구만 켜는 허용 목록 방식, 반대로 일부만 끄는 차단 목록 방식이 모두 됩니다. 도구별defer_loading으로 도구 검색과 함께 쓸 수도 있습니다. - 무보존(ZDR) 대상이 아니어서 데이터는 일반 정책대로 보관됩니다.
MCP·스킬·CLI 선택 기준과 도입 점검
같은 일을 스킬이나 CLI로 할 수 있는 경우도 많습니다. 실험과 문서를 바탕으로 고르는 기준을 정리했습니다.
gh, kubectl처럼 이미 쓸 만한 명령줄 도구가 있을 때. 에이전트가 셸로 바로 부르면 되고 서버를 따로 띄울 필요가 없습니다.사내 시스템을 MCP로 열 계획이라면 다음을 점검해 볼 만합니다.
- 도구 수와 설명 길이: 이번 측정에서 도구 하나가 도구 검색 없이 약 230토큰이었습니다. 조회 위주로 꼭 필요한 도구만 열고, 설명에는 언제 쓰는지를 적습니다.
- 읽기와 쓰기 분리: 조회 도구와 변경 도구를 나누고, 변경 도구는 승인을 거치게 합니다. API에서는 허용 목록으로, Claude Code에서는 허용 설정으로 좁힙니다.
- 인증: 직원별로 서버마다 따로 인증하게 할지, 회사 IdP로 한 번에 통제할지 정합니다. Enterprise-Managed Authorization 확장은 IdP가 서버 접근을 정책으로 허용·회수하는 방식입니다.
- 출력 크기: 큰 표나 문서를 통째로 돌려주는 도구는 출력 상한에 걸립니다. 페이지 나누기와 요약을 서버 쪽에서 합니다.
- 도구 목록 고정: 서버가 배포될 때마다 도구가 바뀌면 에이전트 동작도 흔들립니다. API에서는 도구 목록 고정 기능을, 운영에서는 서버 버전 관리를 씁니다.
- 외부 서버 신뢰: 레지스트리에 있다고 안전한 것은 아닙니다. 로컬 stdio 서버는 내 컴퓨터에서 코드를 실행하는 것이고, 도구 설명문에 지시를 숨기는 공격도 있습니다. 이전 글의 보안 항목을 함께 보세요.
자주 묻는 질문 (FAQ)
MCP 서버를 많이 붙이면 느려지거나 비싸지나요?
도구 검색이 켜져 있으면 비용 증가는 작습니다. 이번 측정에서 도구 43개를 붙여도 요청당 약 530토큰이 늘었습니다. 대신 도구를 찾는 단계가 들어가 응답이 3~10초 느려졌습니다. 도구 검색을 끄면 도구 하나당 약 230토큰이 매 요청에 들어갑니다.
MCP와 스킬은 무엇이 다른가요?
MCP는 에이전트가 바깥 시스템의 도구와 데이터를 쓰게 하는 연결 규격이고, 스킬은 에이전트에게 일하는 절차와 지식을 알려 주는 파일 묶음입니다. 바깥 시스템에 접근해야 하면 MCP, 방법만 알려 주면 되면 스킬이 맞습니다. MCP의 Skills 확장을 쓰면 서버가 스킬을 함께 내려줄 수도 있습니다.
Claude API에서도 로컬 MCP 서버를 쓸 수 있나요?
API의 MCP 커넥터는 공개된 HTTP 서버만 연결합니다. 로컬 stdio 서버를 쓰려면 직접 MCP 클라이언트를 만들어 도구 결과를 API에 넘기거나, 서버를 HTTP로 띄워 공개해야 합니다.
파이썬으로 만든 예전 MCP 서버가 안 돌아요.
파이썬 MCP SDK 2.x에서 FastMCP가 MCPServer로 이름이 바뀌었습니다. 코드를 from mcp.server.mcpserver import MCPServer로 고치거나, 당분간 mcp<2로 버전을 고정하세요.
처음 써 볼 때
- 위 예제처럼 도구 2~3개짜리 서버를 만들어
claude mcp add로 붙입니다. /mcp에서 연결 상태와 도구 목록을 확인합니다.- 도구 설명에 "언제 쓰는지"를 적고, 단서 없는 질문으로도 도구를 찾는지 시험합니다.
- 팀과 함께 쓸 서버는
--scope project로.mcp.json에 기록하고, 변경 도구는 승인을 거치게 합니다.
참고: MCP 공식 문서 · Claude Code MCP 문서 · Claude API MCP 커넥터 · MCP 레지스트리
