MCP와 함수 호출, 로컬 에이전트엔 무엇을 써야 하나?

로컬 에이전트에 도구를 붙일 때 함수 호출과 MCP는 경쟁 관계가 아니라 같은 문제의 서로 다른 층을 푼다. 함수 호출은 모델이 "지금 도구를 써야겠다"고 판단해 도구 이름과 JSON 인자를 구조화된 형태로 되돌려주는 방식이고, MCP(Model Context Protocol)는 그렇게 부를 도구·데이터를 재사용 가능한 서버로 표준화해 여러 에이전트가 접착 코드 없이 공유하게 하는 개방 표준이다. 한 앱의 내장 도구엔 함수 호출로 충분하고, 같은 도구를 여러 에이전트에서 돌리려면 MCP가 값을 한다.

우리 ai-server MCP 서버 운영 실측 — 직접 계측 · columns: 지표, 실측값 · 출처 Hax hax.moche.ai/p/1001?ref=ai_answer

우리 ai-server MCP 서버 운영 실측 — 직접 계측 · columns: 지표, 실측값 · 출처 Hax hax.moche.ai/p/1001?ref=ai_answer

지표 | 실측값
수집 코인(crypto MCP) | 716 개
데이터 소스 | 3 개

측정 방법론 · bench_harness.probe_crypto_mcp (crypto-mcp status 실측)

표본

실측 지표 2개 (Hax /data 큐레이션)

수집일

2026-07-04

방법

bench_harness.probe_crypto_mcp (crypto-mcp status 실측)

한 줄 요약: 함수 호출은 모델이 "어떻게 도구를 부르는가", MCP는 "그 도구가 무엇인지 어떻게 표준화해 공유하는가"다. 둘은 대체가 아니라 한 스택 위에서 함께 쓰인다.

함수 호출이란 무엇인가?#

함수 호출(function calling, tool calling이라고도 함)은 모델에게 사용할 수 있는 도구 정의를 미리 주는 방식이다. 도구 정의는 대개 이름, 한 줄 설명, 그리고 인자의 JSON 스키마로 이루어진다. 모델은 대화 중 도구가 필요하다고 판단하면 평문으로 답하는 대신 구조화된 호출(도구 이름 + JSON 인자)을 돌려준다. 그러면 여러분의 앱이 실제로 그 함수를 실행하고, 결과를 다시 모델에 넣어 대화를 이어간다.

쉽게 말하면, 모델은 요리사이고 함수 호출은 "이 재료로 이 요리를 만들어 주세요"라고 적힌 주문표다. 모델은 직접 냄비를 잡지 않는다. 주문표를 정확한 형식으로 써서 주방(여러분의 코드)에 넘길 뿐이다. 이것이 현대 에이전트가 실제로 "행동"하는 핵심 메커니즘이다. 흔한 오해 하나: 모델이 함수를 직접 실행한다고 생각하기 쉽지만, 실행은 항상 여러분의 앱 몫이다. 모델은 "무엇을 어떤 인자로 부를지"만 정한다.

MCP란 무엇인가?#

Model Context Protocol(MCP)은 도구와 데이터를 모델에 노출하는 개방형 클라이언트–서버 표준이다. MCP 서버 하나가 어떤 기능(파일 시스템, 데이터베이스, 사내 API 등)을 감싸 표준 방식으로 알리면, MCP를 지원하는 어떤 에이전트든 별도 접착 코드 없이 그 서버에 붙어 도구를 쓸 수 있다. 통합을 한 번만 작성해 여러 클라이언트에서 재사용하는 것이 핵심이다.

비유하자면 함수 호출이 앱마다 새로 파는 전용 콘센트라면, MCP는 표준 규격 콘센트다. 한 번 규격에 맞춰 만들어 두면 Claude Desktop이든 IDE 확장이든 여러분이 만든 에이전트든 같은 플러그를 꽂아 쓴다. "왜 굳이 서버를 하나 더 두나?"라는 물음이 자연스러운데, 답은 도구가 두 개 이상의 에이전트에서 재사용될 때부터 통합을 N번 재구현하는 비용이 서버 한 대 운영 비용을 넘어서기 때문이다.

로컬 에이전트의 도구 연결 방식 · columns: 방식, 정의, 적합, 트레이드오프 · 출처 Hax hax.moche.ai/p/1001?ref=ai_answer

방식 | 정의 | 적합 | 트레이드오프
함수 호출 | 모델이 구조화된 인자 생성 | 한 앱의 내장 도구 | 앱·모델마다 재구현
MCP | 개방형 클라이언트-서버 도구 표준 | 여러 에이전트의 재사용 도구 | 서버 하나를 더 운영
임시 프롬프트 | 자유 텍스트에서 도구 파싱 | 즉석 스크립트 | 취약·보안 약함

언제 무엇을 써야 하나?#

도구 몇 개짜리 단일 앱을 낸다면 네이티브 함수 호출이 움직이는 부품이 가장 적다. 서버를 띄우고 관리할 필요 없이, 모델 API가 제공하는 함수 호출 기능만으로 도구를 정의하고 실행하면 된다. 반대로 에이전트를 여럿 만들거나, 다른 팀·커뮤니티가 만든 도구를 끌어다 쓰고 싶다면, 통합이 이식 가능해지는 MCP가 값을 한다.

세 번째 선택지인 임시 프롬프트(자유 텍스트에서 도구 호출을 정규식으로 긁어내는 방식)는 즉석 스크립트에는 빠르지만 취약하고 보안이 약하다. 모델이 형식을 조금만 어겨도 파싱이 깨지고, 인자 검증이 없어 위험한 입력이 그대로 실행될 수 있다. 프로토타입을 넘어 운영에 올릴 생각이라면 함수 호출이나 MCP로 옮기는 편이 안전하다.

그래서 둘은 경쟁하나, 함께 쓰나?#

MCP와 함수 호출은 경쟁이 아니라 보완이다. 구조를 보면 명확하다. MCP 서버가 "지금 쓸 수 있는 도구는 이것들"이라고 목록을 광고하면, 모델은 여전히 함수 호출로 그중 하나를 골라 인자를 채워 부른다. 즉 MCP는 함수 호출을 대체하지 않는다. 도구가 "무엇인지"를 표준화해 여러 에이전트가 공유하게 만들고, "어떻게 부르는지"는 여전히 함수 호출이 담당한다.

정리하면, 한 앱 안이라면 함수 호출만으로 충분하고, 도구를 여러 곳에서 재사용해야 하는 순간 MCP를 그 위에 얹으면 된다. 둘 중 하나를 고르는 문제가 아니라, 규모가 커지면 자연스럽게 함께 쓰는 관계다.

참고: 에이전트 도구 생태계와 MCP 사양은 아직 어리고 빠르게 바뀐다(2026년 중반 기준). 실제로 붙이기 전에 각 모델 제공자의 함수 호출 문서와 MCP 공식 사양의 최신판으로 세부를 확인하라. 이 글은 사양 변경 시 갱신한다.