Search

MCP 도구

대분류
인공지능/데이터
소분류
LLM 정리 노트
유형
MCP
부유형
MCP 핵심 개념/기능
주요 레퍼런스
https://wikidocs.net/268800
https://modelcontextprotocol.io/docs/concepts/tools#system-operations
최종 편집 일시
2025/03/31 23:11
생성 일시
2025/03/31 05:07
13 more properties

도구(Tools)

: 애플리케이션이 외부 데이터 소스나 시스템과 상호작용할 때 호출할 수 있는 함수 또는 작업 단위
AI 모델이 외부 시스템과 상호작용하고 실제 작업을 수행할 수 있게 된다.
MCP 서버에서는 이러한 도구들을 미리 정의하여, LLM이 특정 작업(예: 파일 읽기/쓰기, 데이터베이스 쿼리, 버전 관리 연동 등)을 수행할 필요가 있을 때 해당 도구를 호출하도록 지원한다.
기본적으로 모델 중심 제어를 위해 설계되었으며, AI 모델이 컨텍스트를 이해하고 자동으로 도구를 찾아 호출할 수 있다.
단, 신뢰성과 안전성을 위해 실제 도구 실행 시에는 항상 사용자의 승인이 필요

주요 특징

모듈화 및 확장성

다양한 외부 데이터 소스 및 기능을 각기 다른 도구로 분리하여 제공
필요에 따라 새로운 도구를 추가하거나 기존 도구를 수정할 수 있다.
→ 별도의 커스텀 통합 작업 없이도 기능 확장이 가능하다.

동적 작업 수행

LLM은 자신의 응답 생성 과정 중에 특정 도구를 호출하여, 사전 학습된 지식 외에 최신 데이터나 특정 작업 결과를 반영할 수 있다.
파일 시스템 MCP 서버의 경우 파일을 읽거나 저장하는 도구를 제공하여 LLM이 실시간으로 해당 데이터를 활용할 수 있다.

도구 구현

타입스크립트

파이썬

도구 작업

기능 선언

tools 기능을 선언
{ "capabilities": { "tools": { "listChanged": true } } }
TypeScript
복사
여기서 listChanged는 이 서버가 도구 목록 변경 알림을 지원하는지를 나타낸다.

도구 정의 구조

{ "name": "도구_이름", "description": "도구에 대한 설명", "inputSchema": { "type": "object", "properties": { "매개변수1": { "type": "string", "description": "매개변수 설명" } }, "required": ["필수_매개변수_목록"] } }
TypeScript
복사

주요 프로토콜 메시지

도구 목록 조회 (tools/list)

요청:
{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }
JSON
복사
응답:
{ "jsonrpc": "2.0", "id": 1, "result": { "tools": [ { "name": "example_tool", "description": "Example tool", "inputSchema": { "type": "object", "properties": { "param": { "type": "string" } } } } ] } }
JSON
복사

도구 실행 (tools/call)

요청:
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "example_tool", "arguments": { "param": "value" } } }
JSON
복사
응답:
{ "jsonrpc": "2.0", "id": 2, "result": { "content": [{ "type": "text", "text": "Tool execution result" }], "isError": false } }
TypeScript
복사

도구 유형과 예제

1. 시스템 도구

로컬 시스템과 상호 작용하는 도구
시스템 리소스나 파일 시스템과 상호작용
{ name: "execute_command", description: "Run a shell command", inputSchema: { type: "object", properties: { command: { type: "string" }, args: { type: "array", items: { type: "string" } } } } }
TypeScript
복사

2. API 도구

외부 API와 통합하는 도구
외부 API를 래핑
{ name: "github_create_issue", description: "Create a GitHub issue", inputSchema: { type: "object", properties: { title: { type: "string" }, body: { type: "string" }, labels: { type: "array", items: { type: "string" } } } } }
Python
복사

3. 데이터 처리 도구

데이터를 변환하거나 분석하는 도구
데이터 처리
{ name: "analyze_csv", description: "Analyze a CSV file", inputSchema: { type: "object", properties: { filepath: { type: "string" }, operations: { type: "array", items: { enum: ["sum", "average", "count"] } } } } }
Python
복사

오류 처리

도구 오류는 MCP 프로토콜 수준 오류가 아닌 결과 객체 내에서 보고되어야 한다.
이를 통해 LLM이 오류를 보고 잠재적으로 처리할 수 있다.
도구에서 오류가 발생하면:
1.
결과 isErrortrue에 설정
2.
content 배열 에 오류 세부 정보를 포함.
도구에 대한 올바른 오류 처리의 예시
타입스크립트
파이썬

프로토콜 오류

일반적인 통신 오류나 잘못된 요청은 JSON-RPC 오류로 처리:
{ "jsonrpc": "2.0", "id": 3, "error": { "code": -32602, "message": "Invalid tool name" } }
JSON
복사

도구 실행 오류

도구 실행 중 발생하는 오류는 결과 객체에 포함하여 반환:
{ "jsonrpc": "2.0", "id": 4, "result": { "content": [{ "type": "text", "text": "Failed to read file: Permission denied" }], "isError":true} }
JSON
복사

테스트 도구

MCP 도구에 대한 포괄적인 테스트 전략은 다음을 포함해야 한다.
기능 테스트
: 도구가 유효한 입력으로 올바르게 실행되는지 확인하고 잘못된 입력을 적절히 처리
통합 테스트
: 실제 종속성과 모의 종속성을 모두 사용하여 외부 시스템과의 테스트 도구 상호 작용
보안 테스트
: 인증, 권한 부여, 입력 정리 및 속도 제한을 검증
성능 테스트
: 부하, 시간 초과 처리 및 리소스 정리 시 동작 확인
오류 처리
: 도구가 MCP 프로토콜을 통해 오류를 적절히 보고하고 리소스를 정리하도록 보장

모범 사례

명확하고 설명이 포함된 이름과 설명 제공
매개변수에 대한 자세한 JSON 스키마 정의 사용
도구 설명에 예제를 포함하여 모델이 도구를 어떻게 사용해야 하는지 설명
적절한 오류 처리 및 유효성 검사 구현
긴 작업에 진행 상황 보고 사용
도구 작업을 집중적이고 원자적으로 유지
예상 반환 값 구조 문서화
적절한 타임아웃 구현
리소스 집약적인 작업에 대해 속도 제한 고려
디버깅 및 모니터링을 위한 도구 사용량 기록

보안 고려 사항

입력 유효성 검사

스키마에 대해 모든 매개변수의 유효성 검사
파일 경로 및 시스템 명령 살균하기
URL 및 외부 식별자 유효성 검사
매개변수 크기 및 범위 확인
명령어 삽입 방지

액세스 제어

필요한 경우 인증 구현
적절한 권한 확인 사용
도구 사용 감사
요금 제한 요청
남용을 막기 위한 모니터링

오류 처리

내부 오류를 고객에게 노출X
보안 관련 오류 로그
타임아웃을 적절히 처리하기
오류 발생 후 리소스 정리
반환 값 유효성 검사