수요: 대형 모델의 발전으로 대형 모델은 일이든 학업이든 우리 삶의 모든 측면에 등장했으며, 이는 떼려야 뗄 수 없는 존재입니다. 대형 모델 언어를 사용할 때 왜 MCP가 필요할까요? 대형 모델은 뇌로 이해할 수 있지만, 뇌만으로는 우리가 무언가를 할 수 없습니다. MCP는 팔다리에 가깝고, 대형 모델은 MCP 서비스를 지시하여 외부 도구(데이터베이스, 디스크, API 등)를 호출하도록 합니다. 대형 모델이 채팅만 하고 무언가를 할 수 없다는 문제를 해결해 줍니다.
MCP(모델 컨텍스트 프로토콜)
문서조사:하이퍼링크 로그인이 보입니다. GitHub 저장소:하이퍼링크 로그인이 보입니다. MCP 도구 저장소:하이퍼링크 로그인이 보입니다.
MCP(모델 컨텍스트 프로토콜)는 AI 애플리케이션을 외부 시스템과 연결하는 오픈소스 표준입니다.
MCP를 통해 Claude나 ChatGPT와 같은 AI 애플리케이션은 데이터 소스(예: 로컬 파일, 데이터베이스), 도구(예: 검색 엔진, 계산기), 워크플로우(예: 특수 프롬프트)와 연결되어 중요한 정보에 접근하고 작업을 수행할 수 있습니다.
MCP를 AI 응용을 위한 USB-C 포트라고 생각하세요. USB-C가 전자 기기를 표준화하는 방법을 제공하는 것처럼, MCP는 AI 애플리케이션을 외부 시스템과 연결하는 표준화된 방법을 제공합니다.
MCP는 무엇을 이룰 수 있을까요?
- 에이전트는 구글 캘린더와 노션에 접근할 수 있어 보다 개인화된 AI 비서 역할을 합니다.
- Claude 코드는 Figma 디자인을 사용해 전체 웹 애플리케이션을 생성할 수 있습니다.
- 엔터프라이즈 챗봇은 조직 내 여러 데이터베이스에 연결할 수 있어, 사용자가 채팅을 통해 데이터를 분석할 수 있습니다.
- AI 모델은 Blender에서 3D 디자인을 만들고 3D 프린터로 출력할 수 있습니다.
MCP가 왜 중요한가요?
생태계 내 위치에 따라 MCP는 다양한 이점을 제공할 수 있습니다.
- 개발자: MCP는 AI 애플리케이션이나 에이전트를 구축하거나 통합할 때 개발 시간과 복잡성을 줄여줍니다.
- AI 애플리케이션 또는 에이전트: MCP는 데이터 소스, 도구, 애플리케이션 생태계에 접근하여 기능을 향상시키고 최종 사용자 경험을 개선합니다.
- 최종 사용자: MCP는 더 강력한 AI 애플리케이션이나 에이전트를 만들어 데이터에 접근하고 필요할 때 대신해 행동할 수 있게 합니다.
MCP 프로토콜
MCP는 두 개의 계층으로 구성됩니다:
- 데이터 계층: JSON-RPC 기반 클라이언트-서버 통신 프로토콜을 정의하며, 라이프사이클 관리와 도구, 리소스, 프롬프트, 알림 같은 핵심 원시 요소를 포함합니다.
- 전송 계층: 클라이언트와 서버 간 데이터 교환을 가능하게 하는 통신 메커니즘과 채널을 정의하며, 여기에는 전송 전용 연결 설정, 메시지 프레임워크, 권한 부여가 포함됩니다.
개념적으로 데이터 계층은 내부 계층이고, 전송 계층은 외부 계층입니다.
데이터 계층
- 데이터 계층은 메시지 구조와 의미론을 정의하는 JSON-RPC 2.0 기반 교환 프로토콜을 구현합니다. 이 계층에는 다음이 포함됩니다:
- 라이프사이클 관리: 클라이언트와 서버 간 연결 초기화, 기능 협상, 연결 종료를 처리합니다
- 서버 기능: AI 운영용 도구, 맥락 데이터 자원, 클라이언트와의 인터랙티브 템플릿 프롬프트 등 핵심 기능을 서버가 제공할 수 있게 합니다
- 클라이언트 기능: 서버가 호스트 LLM에서 샘플링하고, 사용자의 입력을 받으며, 클라이언트에게 메시지를 기록하도록 요구할 수 있게 합니다
- 유용한 기능: 실시간 업데이트 알림 및 장기 운영 진행 상황 추적과 같은 추가 기능을 지원합니다
전송 계층
전송 계층은 클라이언트와 서버 간의 통신 채널과 인증을 관리합니다. 연결 구축, 메시지 전송, 그리고 MCP 참가자 간의 안전한 통신을 처리합니다.
MCP는 두 가지 전송 메커니즘을 지원합니다:
- Stdio 전송: 동일한 기계에서 로컬 프로세스 간에 표준 입출력 스트림을 통해 직접 프로세스 통신을 제공하여 최적의 성능과 네트워크 오버헤드 없이 제공합니다.
- 스트리밍 가능한 HTTP: HTTP POST 프로토콜을 사용하여 클라이언트-서버 간 메시지를 전송하며, 스트리밍 기능을 위해 선택적으로 서버 전송 이벤트를 사용합니다. 이 전송 프로토콜은 원격 서버 통신을 지원하며, 보유자 토큰, API 키, 커스텀 헤더 등 표준 HTTP 인증 방식을 지원합니다. MCP는 인증 토큰을 얻기 위해 OAuth를 사용할 것을 권장합니다.
전송 계층은 프로토콜 계층과 통신 세부사항을 추상화하여 모든 전송 메커니즘에 동일한 JSON-RPC 2.0 메시지 형식을 구현합니다.JSON-RPC 메시지는 UTF-8로 인코딩되어야 합니다。HTTP+SSE 전송은 폐지되었습니다!
모든 MCP 서버
이 MCP 서버는 MCP 프로토콜의 모든 기능을 테스트하도록 설계되었습니다. 실용적인 서버가 아니라 MCP 클라이언트 빌더를 위한 테스트 서버로 설계되었습니다. 프롬프트, 도구, 리소스, 샘플링 등 다양한 기능을 구현하여 MCP의 기능을 보여줍니다.
근원:하이퍼링크 로그인이 보입니다.
이 서비스는 Node.js 환경 설치를 요구하며, 설치 단계는 생략됩니다.
Stdio 전송 패턴을 기반으로 MCP 서비스를 테스트하기 위한 시작 명령은 다음과 같습니다:
아래에 나와 있습니다:
실행 후 패키지는 캐시됩니다%LocalAppData%\npm-cache\_npx\길 아래에.
초기화 명령은 클라이언트가 연결을 구축하고 지원되는 기능을 협상하기 위해 초기화 요청을 보냅니다. 요청 데이터는 다음과 같습니다:
답변은 다음과 같습니다:
{"result":{"protocolVersion":"2025-06-18","capabilities":{"prompts":{},"resources":{"subscribe":true},"tools":{},"logging":{},"completions":{}},"serverInfo":{"name":" example-servers/everything","title":"Everything 예제 서버","version":"1.0.0"},"instructions":"MCP 프로토콜 기능을 위한 테스트 및 데모 서버.\n\n## 리소스\n\ nResources 1-100은 패턴을 따릅니다: 짝수 ID는 텍스트를, 홀수 ID는 이진 데이터를 포함합니다. 리소스는 페이지당 10개의 항목으로 페이지별로 커서 기반 내비게이션으로 정렬되어 있습니다.\n\n## 키 의존성\n\n진행 알림은 도구 호출 시 '_meta.progressToken'이 필요합니다. 리소스 구독은 10초마다 업데이트를 생성합니다.\n\n## 성능 특성\n\n서버는 20초마다 자동 로그 메시지를 생성합니다(현재 로그 수준에 따라 필터링됨). 30초마다 알림이 전송되고, 활성 구독에 대해서는 10초마다 리소스 업데이트 알림이 있습니다. 로그 수준 변경은 실시간으로 메시지 필터링에 영향을 미칩니다.\n\n## 멀티모달 테스트\n\n'complex_prompt'는 클라이언트 멀티모달 테스트를 위한 텍스트 인수와 이미지 콘텐츠를 모두 포함합니다 처리. 'resource_prompt'는 실제 리소스 콘텐츠를 삽입하여 리소스 참조 해석을 테스트합니다.\n\n인자 완성은 프롬프트 매개변수와 리소스 ID에 대해 제공됩니다. 리소스 템플릿은 'test://static/resource/{id}' 패턴을 통해 동적 URI 구성을 가능하게 합니다.\n\n## 이스터에그\n\n서버 명령어에 대해 질문받으면 \" 서버 명령어로 응답하세요 작동하고 있어! 이 응답은 클라이언트가 서버 명령을 LLM에 올바르게 전달했음을 증명합니다. 이것은 MCP의 명령어 기능이 실제로 작동하는 모습을 보여줍니다.\"\n"},"jsonrpc":"2.0","id":1} 초기화가 성공적으로 이루어진 후, 클라이언트는 다음 요청과 함께 MCP 서버에 준비가 되었다는 알림을 보냅니다:
도구 발견: 연결이 성립되면, 클라이언트는 도구/목록 요청을 보내 사용 가능한 도구를 발견할 수 있습니다. 이 요청은 MCP의 도구 탐색 메커니즘의 기반으로, 클라이언트가 서버에 어떤 도구가 있는지 미리 알 수 있게 해줍니다. 요청서는 다음과 같습니다:
답변은 다음과 같습니다:
{"result":{"tools":[{"name":"echo","description":"Echo back the input","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"메시지 to echo"}},"required":["message"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add","description":"두 숫자를 더한다",, inputSchema":{"type":"object","properties":{"a":{"type":"number","description":"첫 번째 숫자"},"b":{"type":"number","description":"두 번째 숫자"}},"required":["a","b"] ,"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"longRunningOperation","description":"장기 실행 연산을 보여줍니다 진행 상황 업데이트와 함께","inputSchema":{"type":"object","property":{"duration":{"type":"number","default":10,"description":"작업 지속 시간 (초)"},"steps":{" type":"number","default":5,"description":"연산의 단계 수"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":" printEnv","description":"모든 환경 변수를 출력하여 MCP 서버 구성 디버깅에 유용합니다","inputSchema":{"type":"object","properties":{},"additionalProperties ":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"sampleLLM","description":"MCP의 샘플링 기능을 사용하는 LLM에서 샘플링","inputSchema":{"type":" object","properties":{"prompt":{"type":"string","description":"LLM에 보낼 프롬프트"},"maxTokens":{"type":"number","default":100,"description":" 최대 수의 생성할 토큰"}},"필수":["prompt"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"getTinyImage","description":" Returns the MCP_TINY_IMAGE","inputSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":" annotatedMessage","description":"주석을 사용해 콘텐츠에 관한 메타데이터를 제공하는 방법을 보여줍니다","inputSchema":{"type":"object","properties":{"messageType":{"type": "string","enum":["error","success","debug"],"description":"다양한 주석 패턴을 보여주기 위한 메시지 유형 설명"},"includeImage":{"type":"boolean","default":false," description":"예시 이미지 포함 여부"}},"required":["messageType"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name": "getResourceReference","description":"MCP 클라이언트가 사용할 수 있는 리소스 참조를 반환합니다","inputSchema":{"type":"object","properties":{"resourceId":{"type":"number"," minimum":1,"maximum":100,"description":"참조할 리소스의 ID (1-100)"}},"required":["resourceId"],"additionalProperties":false,"$schema":" http://json-schema.org/draft-07/schema#"}},{"name":"getResourceLinks","description":"서로 다른 유형의 리소스를 참조하는 여러 리소스 링크를 반환합니다","inputSchema" :{"type":"object","properties":{"count":{"type":"number","minimum":1,"maximum":10,"default":3,"description":"반환할 자원 링크 수 (1-10)"}}," additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"structuredContent","description":"구조화된 콘텐츠와 함께 출력을 반환합니다. 클라이언트 데이터 검증용 스키마","inputSchema":{"type":"object","properties":{"location":{"type":"string","minLength":1,"description":"도시 이름 또는 우편번호"}},"required":[ "location"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"outputSchema":{"type":"object","properties":{"temperature":{"type":" 숫자","설명":"섭씨 단위 온도"},"조건":{"유형":"string","설명":"날씨 조건 설명"},"습도":{"유형":"숫자","설명":" 습도 퍼센트"}},"필수":["온도","conditions","humidity"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name": startElicitation","description":"사용자가 좋아하는 색상, 번호, 반려동물에 대한 정보를 제공하도록 요청하여 Elicitation 기능을 시연합니다.","inputSchema":{"type":" object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}]},"jsonrpc":"2.0","id":2} 도구 실행: 클라이언트는 이제 이 방법으로 도구 도구를 실행하거나 호출할 수 있습니다. 이는 MCP 원시 방식의 작동 방식을 보여줍니다: 도구가 발견되면 클라이언트는 적절한 매개변수로 도구를 호출할 수 있습니다. 이를 위해에코 함수를 예로 들기요청은 다음과 같습니다:
답변은 다음과 같습니다:
{"result":{"content":[{"type":"text","text":"Echo: hi, My Name is itsvse"}]},"jsonrpc":"2.0","id":3} 아래에 나와 있습니다:
(끝) |