Tool vs MCP — fundamental 차이와 공유 메커니즘
"Tool vs MCP"는 잘못된 대립. 둘은 경쟁 관계가 아니라 layer 다름. MCP가 function calling을 사용하는 형태. 이 노트는 가정 4 결정의 fundamental reference. tool 공유의 ecosystem 마찰을 정량 비교한다.
한 줄
Function calling = LLM의 능력 (tool 호출 mechanism). Tool = 실행 가능한 함수 단위. MCP = tool 정의를 server로 외부화하는 protocol. "non-MCP tool 공유"는 같은 stack 안에서는 OK이지만 cross-language·cross-product에서는 마찰 폭발.
가장 흔한 오해 — 그리고 fundamental 정리
오해: "Function calling과 MCP는 대안이다"
사실: 둘은 layer가 다르다. MCP가 function calling을 사용한다.
핵심 비유:
Function Calling = "함수를 호출하는 *문법*"
(LLM이 'X 함수에 Y 인자' 형태로 출력)
Tool = "함수 자체"
(실행 가능한 코드 단위)
MCP = "함수 모음을 host-server 사이에 주고받는 *protocol*"
(어디에 어떤 tool 있는지, 어떻게 호출하는지)
non-MCP tool = "함수를 AI app 안에 박는 형태"
(function calling은 똑같이 사용, 다만 tool 정의가 internal)
MCP tool = "함수를 별 server로 띄우는 형태"
(function calling은 똑같이 사용, 다만 tool 정의가 external)
→ MCP는 function calling을 대체하지 않음. tool 정의·발견·호출의 위치를 바꿈.
추상적 작동 구조 — 두 형태 비교
non-MCP tool (자체 정의)
특징:
- tool definitions이 AI app 코드 안에 있음
- AI app만 그 tool 정의를 알고 있음
- 다른 AI app이 같은 tool 사용하려면 코드 import 필요
MCP tool
특징:
- tool definitions이 별 server에 있음
- 어떤 AI app이든 protocol로 query해서 사용 가능
- server를 config 한 줄로 다른 AI app에 추가 가능
공유 메커니즘 비교 — 정량 분석
non-MCP tool 공유 — 3가지 방식
| 방식 | 어떻게 | 한계 |
|---|---|---|
| A. SDK package | npm/pip/cargo로 distribution | 같은 언어 stack만. cross-language 안 됨 |
| B. Plugin format | product specific format (VS Code ext, Cursor rules) | product silo. 다른 product에서 사용 불가 |
| C. HTTP API + 매번 wrapping | tool을 REST API로 노출, AI app이 wrapping | tool description·call format 매번 재발명 |
MCP tool 공유 — 1가지 방식
| 방식 | 어떻게 | 한계 |
|---|---|---|
| MCP server distribution | npm/pip/Docker로 server 배포 | (없음 — protocol 표준이라 cross-everything) |
공유 마찰 차원별 비교
| 차원 | non-MCP (자체 tool) | MCP |
|---|---|---|
| Distribution 자체 | 가능 (npm/pip/cargo) | 가능 (npm/pip/Docker) |
| Cross-language | ❌ | ✅ |
| Cross-product (Claude Code ↔ Cursor ↔ Goose) | ❌ silo | ✅ 표준 |
| Discovery 표준 | ❌ (각 product 자체) | ✅ (list_tools) |
| Auth/credential 표준 | ❌ | ✅ (OAuth, API key 표준화) |
| Versioning | 자체 | spec 표준 |
| Tool description format | vendor specific | 표준 JSON Schema |
| Capability negotiation | ❌ | ✅ |
| 학내 marketplace 형성 | 어려움 (silo) | ✅ |
| 다른 학내로 복제 | 자체 tool 재작성 | server 그대로 사용 |
→ 공유 마찰은 MCP가 압도적으로 적음. 이게 ecosystem 폭발의 이유.
약점 / 한계
non-MCP tool의 공유 약점
- 언어 silo — JS tool은 JS app만, Python tool은 Python app만
- product silo — VS Code ext는 VS Code만, Cursor rule은 Cursor만
- Discovery 재발명 — 어떤 tool 있는지를 매 product가 자체 정의
- Auth 매번 새로 — credentials 관리 표준 없음
- Versioning 자체 — breaking change 표시 표준 없음
- 사용자 학습 매번 — 다른 product 가면 다시 학습
→ 결과: ecosystem 형성 어려움. silo가 클 수 있지만 cross-silo 공유는 거의 불가.
non-MCP tool의 현실적 사례
| 사례 | silo 크기 | 한계 |
|---|---|---|
| VS Code extensions | 1.5만 개 | VS Code only |
| Cursor rules | 수천 개 | Cursor only |
| Cline custom tools | 수백 개 | Cline only |
| pi-mono Extension API | 소수 (npm) | TypeScript only |
| Aider edit format | N/A | Aider only |
→ silo 안에서 큰 ecosystem 가능. 하지만 cross-product 공유는 사실상 불가.
MCP의 token 부담 (이전 논의)
- tool definition이 verbose (200~500 tokens/tool)
- 70 extension = 14~35k tokens/turn
- → 답: lazy loading + skill index pattern (Anthropic)
대안 흐름 — non-MCP의 진화 시도
A. Open standard 시도들
- AGENTS.md — agent definition 표준 (cross-product)
- agentskills.io SKILL.md — skill 정의 표준
- Tool Use API (OpenAI 표준화 시도) — function calling spec 통일
- → 부분적 성공. 하지만 tool 자체가 아니라 agent/skill 메타데이터 표준
B. Tool gateway / proxy 패턴
- non-MCP tool을 MCP server로 wrapping
- 예: Anthropic의
mcp-server-devplugin (SKILL.md → MCP) - → "한 번 작성, 여러 형태로"
C. WebRL / AutoSkill (학술)
- tool을 trace에서 추출해서 표준화
- → production 미적용
D. ACP (Agent Client Protocol)
- agent ↔ client 상위 protocol
- MCP보다 한 layer 위
- → MCP와 보완 관계
학내 segment 적용
비개발자 다수 시나리오
non-MCP tool 공유 가능?
✅ 가능. 단, 같은 product 안에서만.
예: 학내 학생이 내 Cursor에서 작성한 custom rule을 다른 학내 학생의 Cursor에 공유.
한계:
- 학내 marketplace를 Cursor만 쓴다고 가정해야
- 다른 product (Claude Code, Goose, Continue 등) 사용 학생은 사용 불가
- 학내 전공별 차이 (공대는 Cursor, 인문대는 Claude Code 등)
MCP tool 공유:
✅ 어떤 product를 쓰든 사용 가능. 학내 marketplace에 MCP server 올리면 모두 사용.
→ 비개발자 다수 + 학내 marketplace 형성 의도 = MCP가 결정적으로 유리.
개발자 학생 + 비개발자 학생 혼합
non-MCP: 개발자 학생이 각 product마다 tool 작성. 비개발자는 그 product 사용 시만 사용 가능.
MCP: 개발자 학생이 MCP server 1번 작성. 비개발자는 어느 product든 config로 사용.
→ 혼합 segment에서 MCP가 사실상 필수. 개발자 1명의 노력이 99명에게 그대로 도달.
v1.0 결정에 영향 — 가정 4 답의 근거 강화
사용자가 주장하는 시나리오
"non-MCP + tool 기반에서 사용자 tool 자체를 공유하는 방식?"
답:
- ✅ 가능 (npm/pip로 distribute)
- ⚠️ 단, language stack silo에 갇힘
- ⚠️ product silo에 갇힘 (Cursor에서 만든 거 Claude Code에서 못 씀)
- ❌ Cross-language·cross-product 공유는 사실상 불가
MCP보다 어려운가?
같은 stack/product 안에서: 비슷 Cross-language: 훨씬 어려움 (사실상 불가) Cross-product: 훨씬 어려움 (사실상 불가) ecosystem 형성: 훨씬 어려움
학내 segment의 결정
| 결정 조건 | 적합 옵션 |
|---|---|
| 학내 사용자가 한 product만 쓸 것이라 가정 | non-MCP OK |
| 학내 사용자가 여러 product를 쓸 것이라 가정 | MCP 결정적으로 유리 |
| 다른 학내로 복제 의도 | MCP 결정적으로 유리 |
| 비개발자가 기존 ecosystem(70+ MCP server) 활용 | MCP 결정적으로 유리 |
종합 답
"non-MCP로 tool 공유 가능?" → 같은 stack/product 안에서는 OK. Cross-everything에서는 거의 불가.
"MCP보다 어려운가?" → ecosystem 형성·cross-product 공유 측면에서 훨씬 어려움. silo 안에서는 비슷.
v1.0의 결정 input:
- 학내 segment에 비개발자 다수 + 다른 product 사용 가능성 + 학내 marketplace 형성 의도가 있다면
- → MCP가 현재 시점 가장 강력한 답
- → 단, token 부담은 lazy loading + Skills 패턴으로 90% 해소
- → 결과: MCP + Skills 패턴 (옵션 4-5) 가 비개발자 segment + ecosystem 둘 다 만족
fundamentals 학습 자료 — 더 깊이 가려면
이 주제는 ai-era-fundamentals 새 프로젝트에서 protocol vs implementation, standard vs library 같은 fundamentals로 깊이 갈 가치 있음.
학습 자료:
- Anthropic — Introducing the Model Context Protocol
- MCP 공식 spec
- OpenAI Function Calling docs
- 이 주제의 deeper root: Lamport의 protocol 이론, distributed system fundamentals (Birman, Tanenbaum)
관련
- paradigm-comparison — 가정 4 (Tool = MCP 일원화?)
- references-goose — MCP 단일화 사례
- references-claude-code — Skills 패턴 사례
- references-pi-mono — non-MCP (Extension API) 사례
- research-to-production-gap — Anthropic Skills 패턴이 12% production 도달의 lever
- design-principles — 원칙 4 (Orthogonal Layers, Reversible Decisions)와 정렬
Sources
- Anthropic — Introducing the Model Context Protocol
- MCP 공식 spec
- Model Context Protocol — Wikipedia
- Function Calling vs MCP — Descope blog
- MCP vs Function Calling — Portkey
- Function Calling vs MCP — Gentoro
- MCP vs Function Calling — Obot AI
- Andre Landgraf — mcp-vs-function-calling repo
- Fast.io — Function Calling vs MCP for AI Agents
- OpenAI Function Calling docs