결론부터
- 2026년 AI Agent 스택은 「GPT / Gemini / Claude 중 누가 더 강한가」로 고르지 않는다. 도구 계약을 모델 간에 재사용할 수 있는가로 고른다.
- JSON Schema가 진짜 벤더 횡단 계약이고, Function Calling은 각 모델이 호출을 내보내는 억양일 뿐이다.
- MCP는 그 Schema를 발견 가능한
tools/list와 실행 가능한tools/call로 바꾼다. MCP가 없으면 Schema는 문서일 뿐이다. - GPT, Gemini, Claude는 Host 쪽 추론 엔진으로 교체 가능하다. MCP Server, 검증기, worktree는 덮개를 닫지 않는 머신에서 돌린다.
- 먼저 Schema를 고정하고, 그다음 MCP를 연결하고, 마지막에 모델을 바꾼다. 순서를 뒤집으면 세 벌 tools가 영원히 어긋난다.
모델 능력은 분수령이 아니다. 분수령은 JSON Schema + Function Calling + MCP로 이루어진 도구 계약이다.
0. 결론부터
2026년 AI Agent 스택을 짜고 있다면 이 문장을 고정하라. GPT, Gemini, Claude는 교체 가능한 추론 층이다. 납품 가능 여부는 Function Calling이 내보내는 인자가 동일한 JSON Schema를 통과하는가, 그리고 그 Schema가 안정된 MCP Server로 노출되는가에 달렸다. 모델을 먼저 잠그고 도구를 나중에 붙이는 순서는 지난 2년 동안 가장 비싼 실수였다.
1. 문제가 남는 이유: 모델 먼저 고르면 실패하는 이유
티켓에서 가장 흔한 문장은 「최신 GPT / Claude / Gemini로 올렸는데 Agent가 일을 못 한다」이다. 병목은 모델이 둔해서가 아니라 도구 정의가 세 벌로 따로 쓰여 있기 때문이다. OpenAI tools, Gemini functionDeclarations, Claude tools / tool_use, 여기에 MCP inputSchema. 겉으로는 모두 Function Calling이지만 런타임에는 서로 표류하는 네 개의 계약이다.
옛 방식은 구체적으로 깨진다. Prompt를 워크플로로, 모델을 OS로, MCP를 「플러그인 하나 더」로 취급한다. 채팅은 매끄러운데 tools/call이 경로, enum, 필수 필드에 닿는 순간 400이 난다. 팀은 「어느 모델이 더 말을 잘 듣나」를 비교하고 Schema를 diff하지 않는다. 똑똑한 모델은 계약 분열을 고치지 못한다.
- Host는 IDE에 있고 MCP Server는 노트북에 있다. 덮개를 닫으면 Function Calling은 공회전한다.
- 같은 도구가 GPT 쪽에서는
repoPath, Claude 쪽에서는repo_path. JSON Schema에 단일 진실이 없다. - Gemini 함수 선언에서
additionalProperties: false가 빠져 모델이 필드를 발명하기 시작한다. - MCP
tools/list가 반환하는 Schema와 프로덕션 검증기의 git SHA가 다르다.
올바른 분리는 「추론할 수 있는가」와 「안전하게 실행할 수 있는가」를 가르는 것이다. 추론은 GPT, Gemini, Claude를 돌려도 된다. 실행은 동일한 JSON Schema와 상주 MCP 프로세스 하나에 올려야 한다. 머신 선택은 MCP Server 배포: Cloud Mac vs VPS vs 로컬을 본다.
2. 다섯 층: 모델, Function Calling, JSON Schema, MCP, Host
이 단어들을 백과처럼 나란히 늘어놓지 마라. 2026년에 돌아가는 Agent 스택은 다섯 층뿐이다. 한 층이 빠지면 다른 층이 메꾼 척하다가 프로덕션에서 무너진다.
2.1 추론 층: GPT / Gemini / Claude
GPT(OpenAI), Gemini(Google), Claude(Anthropic)의 일은 컨텍스트를 읽고, 도구를 부를지 결정하고, Schema에 맞는 인자를 만들고, 결과를 다음 턴에 접어 넣는 것이다. 파일시스템도 Git도 아니다. 지연, 컨텍스트 창, 가격, 안전 정책으로 고른다. 누가 더 OS처럼 보이는지로 고르지 않는다. 공식 입구: OpenAI Function Calling, Gemini function calling, Claude tool use.
2.2 Function Calling: 모델의 억양이지 버스가 아니다
Function Calling은 모델이 「어느 함수를, 어떤 인자로」라고 말하는 프로토콜이다. GPT는 tool_calls, Claude는 tool_use 블록, Gemini는 functionCall. 억양은 달라도 의미는 같다. Schema에 묶인 구조화 호출이다. 세 벤더마다 handler를 쓰면 분기마다 갈라진다. 억양 적응은 얇은 번역 층에 남기고, 비즈니스 로직은 정규화된 JSON만 본다.
2.3 JSON Schema: 벤더 횡단 계약
JSON Schema는 타입, 필수, enum, 범위, additionalProperties를 기술한다. OpenAI parameters, Claude input_schema, MCP inputSchema는 본질적으로 같은 파일의 투영이어야 한다. 계약은 git에 넣고, 합법/불법 페이로드로 검증기를 친다. Prompt로 「형식을 지켜 달라」고 부탁하지 않는다.
2.4 MCP: 계약을 발견 가능하고 실행 가능하게 만든다
Model Context Protocol은 Host가 tools/list와 tools/call을 어떻게 하는지를 정한다. 디스크, 비밀, 네트워크를 만지는 것은 MCP Server 프로세스다. Cursor / Claude Code / 자체 오케스트레이터는 모두 MCP Client일 뿐이다. MCP가 없으면 Schema는 문서에서 멈춘다. MCP가 있어도 덮개를 닫는 노트북 위라면 Function Calling은 밤에 집단 사망한다. Cursor 쪽은 Cursor MCP.
2.5 Host: 입구이지 능력 자체가 아니다
Host는 사람이 클릭하는 곳이다. IDE, CLI Agent, 채팅 앱. 입구는 경험을 정하고 실행 가능 여부는 정하지 않는다. Claude Code를 Host로, GPT를 예비 모델로 두는 것은 타당하다. 같은 MCP와 같은 Schema를 치는 한. 병렬 worktree에서는 Host를 저장소와 같은 머신에 둔다. 원격 Mac + worktree 단기 임대.
3. GPT vs Gemini vs Claude vs MCP: 다섯 차원 대조
모든 행의 표두는 같다. MCP는 네 번째 모델이 아니다. 발견과 실행 층이다. 같은 표에 넣는 이유는 「모델로 버스를 대체」하는 일을 막기 위해서다.
| 층/옵션 | 입구 | 실행 | 컨텍스트 | 비용 | 권한 경계 |
|---|---|---|---|---|---|
| GPT Function Calling | API / ChatGPT / 호환 IDE | tool_calls 생성. 디스크는 건드리지 않음 | 대화 + messages에 넣은 자료 | token 과금. 도구 루프가 청구서를 키움 | 비밀은 백엔드. 모델은 인자와 요약만 봄 |
| Gemini function calling | Gemini API / Studio / Vertex | functionCall 생성. 실행은 여전히 이쪽 | 멀티모달 컨텍스트는 강함. 필드는 Schema가 막음 | token / 프로젝트 할당량 | GCP IAM + 도구 샌드박스 |
| Claude tool use | API / Claude Code / Console | tool_use 생성. CLI Host는 이어서 shell을 돌릴 수 있음 | 긴 코드 세션에 강함. 파일시스템은 아님 | token. Agent 루프도 마찬가지로 비용 | 도구 허용 목록 + 사람 검토. MCP에서 한 층 더 |
| JSON Schema | 검증기 / codegen / 단일 소스 파일 | 불법 호출 거부. 비즈니스는 실행하지 않음 | 없음. 계약이지 기억이 아님 | 거의 제로(테스트 비용) | 위험한 필드를 계약에서 지우는 편이 긴 Prompt보다 낫다 |
| MCP Server | stdio / SSE / 원격 Host | Git, HTTP, DB, 파일을 실제로 실행 | 저장소, 비밀, 머신 상태 | 상주 머신 비용(Cloud Mac / VPS) | 프로세스 사용자, 경로 허용 목록, 송신 출구 |
표를 읽을 때 비대칭 결론을 기억하라. 세 모델은 추론과 억양으로 경쟁하고, MCP는 실행 경계로 경쟁한다. 「Claude로 바꾸기」로는 「덮개를 닫은 노트북의 MCP」가 고쳐지지 않는다. 「MCP를 넣기」만으로 합법 JSON이 자동 생성되지도 않는다. Schema 테스트가 필요하다.
4. 시나리오별 선택
입구와 실행 필요에 맞춰 조합을 고른다. 벤치마크 순위로 모델을 고르지 않는다.
| 층/옵션 | 입구 | 실행 | 컨텍스트 | 비용 | 권한 경계 |
|---|---|---|---|---|---|
| 개인 PoC, 이번 주 데모 | 로컬 IDE + 모델 하나 | stdio MCP, 도구 1~2개 | 저장소 하나 | API 청구가 주 | 로컬 사용자 권한. 프로덕션 비밀 금지 |
| 소규모 팀 일일 출고 | Claude Code 또는 Cursor를 Host | MCP Git + 테스트 runner | 여러 worktree | Cloud Mac 일일 임대로 검수 후 월간 | 도구 허용 목록. Agent의 프로덕션 DB 직결 금지 |
| GPT / Gemini / Claude 전환 필요 | 자체 오케스트레이션 + 통합 tool gateway | 동일 Schema를 세 Function Calling 방언으로 투영 | 공유 MCP | 번역 층 하나가 도구 삼분기를 이긴다 | 게이트웨이 인증. 모델은 원본 비밀을 못 봄 |
| iOS / Xcode / 서명 | Mac 위의 CLI Agent | 동일 머신 MCP + xcodebuild | 인증서, DerivedData, 시뮬레이터 | 전용 M4가 「Linux MCP + 다른 Mac」보다 싸다 | 키체인과 서명은 Mac에만 남김 |
| 7×24 당직 Agent | 원격 Host + 상주 MCP | launchd / compose로 유지 | 야간 작업, webhook | 덮개 닫힌 노트북 = 숨은 장애 | 송신 방화벽 + 감사 로그 |
5. 권장 조합
겹쳐도 된다. 아래 세 세트는 모두 git의 JSON Schema 단일 소스에서 각 벤더 Function Calling 선언과 MCP inputSchema를 생성한다.
조합 A|개인: Cursor 또는 Claude Code(Host) → 단일 모델(먼저 Claude 또는 GPT, 교체 가능) → 로컬 stdio MCP(Git 읽기 전용) → Schema 파일 + 검증 테스트 덮개를 닫으면 멈춘다. 주간 PoC 전용. 조합 B|출고 팀(권장): CLI Agent를 Host → GPT / Claude를 동일 gateway에서 전환 → Cloud Mac 위의 MCP Git Server + 테스트 도구 → Schema 단일 소스 → OpenAI tools / Claude input_schema / MCP inputSchema 생성 → 48시간 일일 임대: 노트북 덮개를 닫고 tools/call이 여전히 성공하는지 확인 조합 C|다중 모델 게이트웨이: 자체 orchestrator → Gemini는 멀티모달 입구, Claude/GPT는 코드 도구 루프 → 모든 functionCall / tool_use는 JSON Schema 검증 후 MCP tools/call → MCP는 저장소와 동일 머신. 모델 API는 공용 인터넷
코드 쪽 최소 계약 예(OpenAI parameters, Claude input_schema, MCP inputSchema로 투영할 때 필드명은 같게 유지):
{
"name": "git_status",
"description": "Return git status for a worktree path",
"parameters": {
"type": "object",
"properties": {
"repo_path": { "type": "string", "minLength": 1 },
"porcelain": { "type": "boolean", "default": true }
},
"required": ["repo_path"],
"additionalProperties": false
}
}
6. 흔한 함정
- 함정 1: GPT냐 Claude냐를 먼저 정하고 도구를 나중에 붙인다. 순서가 뒤집히면 세 벌 tools가 영구히 갈라진다.
- 함정 2: MCP를 네 번째 모델로 취급한다. MCP는 추론하지 않는다. 실행한다. Schema 없는 MCP는 타입이 없는 RPC다.
- 함정 3: Prompt로 JSON Schema를 대체한다.
additionalProperties: false가 「필드를 지어내지 마세요」보다 낫다. - 함정 4: Function Calling 성공을 비즈니스 성공으로 본다. 모델은 합법 JSON으로 잘못된 디렉터리를 지울 수 있다. 허용 목록은 MCP 프로세스에 있지 모델에 있지 않다.
- 함정 5: 로컬 stdio가 통하면 프로덕션으로 본다. 덮개 닫힘, Wi‑Fi 전환, 동료가 같은 MCP 배포를 재사용하지 못하는 것이 7×24의 적이다.
7. 적용 단계(7단계)
- Agent가 실제로 실행해야 할 동작 3개를 적는다(예: git status, 테스트 실행, 이슈 읽기). 첫날에 MCP tools 20개를 연결하지 않는다.
- 동작마다 JSON Schema 하나를 써서 git에 넣는다. 합법/불법 fixture 테스트를 추가한다.
- MCP Server를 구현하고
inputSchema는 위 파일을 직접 참조한다. 손으로 베끼지 않는다. - 벤더 적응 층을 하나 둔다. 같은 Schema를 OpenAI tools, Gemini functionDeclarations, Claude input_schema로 투영한다.
- Host 하나(Cursor 또는 Claude Code)로
tools/list→ Function Calling →tools/call→ 결과 접어 넣기까지 관통한다. - MCP를 덮개를 닫지 않는 머신(Cloud Mac 또는 VPS)으로 옮긴다. 노트북에는 Host만 남긴다. 8시간 덮개를 닫고 다시 측정한다.
- 두 번째 모델은 번역 층에만 붙인다. tools 파일을 복사하지 않는다. 같은 fixture로 회귀한다. 스킬 패키징은 Agent Skills 2026 가이드.
8. FAQ
Function Calling과 MCP는 같은 일인가?
아니다. Function Calling은 모델이 「도구를 쓰겠다」고 말하는 방식이고, MCP는 Host가 도구를 발견하고 실행하는 방식이다. MCP 없이도 handler를 쓸 수 있다. Function Calling이 없으면 모델은 자연어만 내보내고 당신이 명령을 복사하게 된다.
JSON Schema는 얼마나 엄격해야 하는가?
최소한 타입, required, enum, 그리고 additionalProperties: false를 다룬다. 경로 필드는 ..를 거부한다. 너무 엄하면 적응 비용이 늘고, 너무 느슨하면 안전 검사가 Prompt로 밀려나 반드시 샌다.
GPT, Gemini, Claude는 어떻게 나눌까?
입구와 모달리티로 나눈다. Gemini는 이미지/영상 입구, Claude는 긴 코드 세션, GPT는 이미 OpenAI 게이트웨이가 있는 팀에 맞다. 분담은 Host 라우팅에서 하고, 서로 다른 MCP Server 세 벌로는 하지 않는다.
Chat Completions만 쓰고 MCP를 빼도 되는가?
단일 앱, 단일 모델이면 된다. 두 번째 모델이나 두 번째 Host(IDE + CLI)가 나오는 순간 자체 handler가 N벌로 복제된다. MCP의 가치는 도구 프로세스를 한 번만 배포하는 것이다.
왜 이 스택을 Cloud Mac에 올려야 하는가?
툴체인에 Xcode, 키체인, iOS 시뮬레이터가 있으면 MCP와 Agent는 같은 머신에 상주해야 한다. 순수 Git/HTTP는 Linux VPS로 충분하다. Apple 납품에서 MCP를 Linux에, 빌드를 다른 Mac에 나누면 경로가 한 번 더 갈라진다.
9. 요약
2026 AI Agent 스택은 「가장 강한 모델 하나」가 아니다. JSON Schema 하나, Function Calling 적응 층 하나, MCP Server 하나, 교체 가능한 GPT/Gemini/Claude 추론 층이다. 누가 더 강한지는 변한다. 계약과 실행 경계는 매주 다시 쓰지 않는다.
적용 순서는 고정이다. Schema → MCP → Host 하나로 관통 → 모델 교체. 머신 순서도 고정이다. PoC는 로컬, 납품은 Cloud Mac 또는 VPS. 벤치마크는 봐도 되지만 계약 테스트를 대체하지 마라.