MCP Server

Integrations

  • Manages environment variables for API keys and configuration settings through .env files

  • Provides a web API framework for hosting the MCP server, with endpoints for chat interactions and conversation management

  • Provides repository hosting for the MCP server code with instructions for cloning and contributing

MCP 서버 구현

외부 도구를 사용하여 대규모 언어 모델 기능을 향상시키기 위한 모델 컨텍스트 프로토콜(MCP)의 완전한 Flask 기반 구현입니다.

개요

이 저장소는 모델의 텍스트 출력에서 직접 도구를 호출하여 LLM 기능을 확장하는 방법인 모델 컨텍스트 프로토콜(MCP)을 처리하는 서버를 구축하는 방법을 보여줍니다. 함수 호출과 달리 MCP는 도구 정의를 컨텍스트 창에 직접 배치하고 모델의 자연어 응답을 구문 분석하여 도구 사용을 식별합니다.

특징

  • 🔧 완전한 MCP 구현 : 전체 구문 분석, 실행 및 응답 처리
  • 🌤️ 샘플 도구 : 매개변수 검증 기능이 있는 날씨 및 계산기 도구
  • 🔄 대화 흐름 : 여러 상호 작용에서 맥락을 유지합니다.
  • 🧩 정규식 기반 구문 분석 : 도구 호출을 위한 유연한 텍스트 구문 분석
  • 🚀 Flask API : 채팅 통합을 위한 REST API 엔드포인트

프로젝트 구조

지엑스피1

설치

  1. 저장소를 복제합니다.
    git clone https://github.com/yourusername/mcp-server.git cd mcp-server
  2. 가상 환경 만들기:
    python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
  3. 종속성 설치:
    pip install -r requirements.txt
  4. 환경 변수 설정:
    # Create a .env file with: LLM_API_KEY=your_llm_api_key_here WEATHER_API_KEY=your_weather_api_key_here FLASK_APP=app.py FLASK_ENV=development

용법

서버 실행

Flask 개발 서버를 시작합니다.

flask run

생산을 위해:

gunicorn app:app

API 엔드포인트

  • POST /chat : MCP로 채팅 메시지 처리
    curl -X POST http://localhost:5000/chat \ -H "Content-Type: application/json" \ -d '{ "messages": [ { "role": "user", "content": "What's the weather like in Boston?" } ] }'

독립형 예제

MCP가 어떻게 동작하는지 보려면 예제 스크립트를 실행하세요.

python mcp_example.py

작동 원리

  1. 도구 등록 : 도구는 매개변수와 실행 논리를 사용하여 등록됩니다.
  2. 도구 정의 주입 : XML 형식의 도구 설명이 프롬프트에 추가됩니다.
  3. LLM 응답 처리 : 정규식 패턴은 LLM 텍스트 출력에서 도구 호출을 식별합니다.
  4. 도구 실행 : 매개변수가 구문 분석되어 적절한 도구 핸들러로 전달됩니다.
  5. 결과 주입 : 도구 실행 결과가 응답에 다시 삽입됩니다.

MCP 대 함수 호출

특징엠씨피함수 호출
정의 위치프롬프트 텍스트에서API 매개변수에서
호출 형식자연어구조화된 JSON
구현텍스트 파싱API 통합
시계응답에서 볼 수 있음숨겨져 있을 수 있습니다
플랫폼 지원모든 텍스트 기반 LLMAPI 지원이 필요합니다

대화 예시

사용자 : 보스턴의 날씨는 어때요?

법학 석사 :

I'll check the weather for you. get_weather(location="Boston, MA", unit="fahrenheit")

처리 후 :

I'll check the weather for you. get_weather(location="Boston, MA", unit="fahrenheit") Result from get_weather: { "location": "Boston, MA", "temperature": 72, "unit": "fahrenheit", "conditions": "Partly Cloudy", "humidity": 68, "wind_speed": 5.8 }

나만의 도구 추가

  1. Tool 에서 상속받은 새로운 클래스를 만듭니다.
  2. 매개변수와 실행 논리를 정의합니다.
  3. MCP 핸들러에 등록

예:

class MyTool(Tool): def __init__(self): parameters = [ { "name": "param1", "type": "string", "description": "Description of param1", "required": True } ] super().__init__( name="my_tool", description="Description of my tool", parameters=parameters ) def execute(self, param1): # Tool logic here return {"result": "Processed " + param1}

MCP 구성 및 호출 흐름

  1. 도구 등록 :
    • MCP 도구는 핸들러에 등록됩니다.
    • 각 도구는 이름, 설명 및 매개변수 정의를 제공합니다.
  2. 도구 정의 주입 :
    • 도구 정의가 시스템 메시지에 추가되었습니다.
    • MCP의 형식은 XML 구조를 따릅니다.
  3. LLM 응답 처리 :
    • LLM은 도구 호출을 포함할 수 있는 응답을 생성합니다.
    • 패턴 매칭은 텍스트에서 도구 호출을 식별합니다.
    • 도구 매개변수는 구문 분석되어 도구 실행 메서드로 전달됩니다.
  4. 도구 실행 :
    • 도구는 제공된 매개변수로 실행됩니다.
    • 결과는 대화에 다시 주입됩니다.
  5. 대화 관리 :
    • 도구 결과가 포함된 처리된 응답은 대화 기록에 추가됩니다.
    • 향후 LLM 요청에는 컨텍스트를 위한 이 기록이 포함됩니다.

대화 예시

대화의 예는 다음과 같습니다.

사용자 : 보스턴의 날씨는 어때요?

시스템 : MCP 도구 정의를 포함한 프롬프트를 LLM으로 전송합니다.

LLM 응답 :

I'll check the weather for you. get_weather(location="Boston, MA", unit="fahrenheit")

MCP 핸들러 : 응답을 구문 분석하고 도구 호출을 찾고 날씨 도구를 실행합니다.

도구 실행 결과 :

Result from get_weather: { "location": "Boston, MA", "temperature": 72, "unit": "fahrenheit", "conditions": "Partly Cloudy", "humidity": 68, "wind_speed": 5.8 }

처리된 응답 (사용자에게 다시 전송):

I'll check the weather for you. get_weather(location="Boston, MA", unit="fahrenheit") Result from get_weather: { "location": "Boston, MA", "temperature": 72, "unit": "fahrenheit", "conditions": "Partly Cloudy", "humidity": 68, "wind_speed": 5.8 }

사용자 : 144의 제곱근을 계산할 수 있나요?

LLM 응답 :

I can calculate that for you. calculator(expression="sqrt(144)")

MCP 핸들러 : 응답 구문 분석, 계산기 도구 실행

도구 실행 결과 :

Result from calculator: { "expression": "sqrt(144)", "result": 12.0 }

처리된 응답 (사용자에게 다시 전송):

I can calculate that for you. calculator(expression="sqrt(144)") Result from calculator: { "expression": "sqrt(144)", "result": 12.0 } The square root of 144 is 12.

이는 LLM의 텍스트 기반 호출부터 실행 및 응답 처리까지 MCP 도구 사용의 전체 흐름을 보여줍니다.

특허

MIT

기여하다

기여를 환영합니다! 풀 리퀘스트를 제출해 주세요.

-
security - not tested
F
license - not found
-
quality - not tested

자연어를 통해 외부 도구 기능으로 LLM을 향상시키기 위해 모델 컨텍스트 프로토콜을 구현한 Flask 기반 서버로, 날씨 조회 및 계산과 같은 도구를 모델의 텍스트 출력에서 직접 호출할 수 있습니다.

  1. Overview
    1. Features
      1. Project Structure
        1. Installation
          1. Usage
            1. Running the Server
            2. API Endpoints
            3. Standalone Example
          2. How It Works
            1. MCP vs. Function Calling
              1. Example Conversation
                1. Adding Your Own Tools
                  1. MCP Configuration and Invocation Flow
                    1. Example Conversation
                      1. License
                        1. Contributing
                          ID: np0gzeg9av