Language/Python

Python으로 MCP Server 만들기

건담아빠 2025. 3. 7. 16:23

 

프로젝트 생성

$ mkdir mcp-python-250309

 

소스코드

python

  • server.py

대충 로그 찍어두고 서버 기동하자

from mcp.server.fastmcp import FastMCP
import logging
import sys

# 로깅 설정
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.StreamHandler(sys.stdout)
    ]
)

logger = logging.getLogger("mcp-server")

# Create an MCP server
# mcp = FastMCP("MCP 서버")
mcp = FastMCP(name="MCP 서버", debug=True)

# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    message = f"Add {a} and {b}"
    logger.info(message)  # 로거를 통한 로그 출력
    return a + b

@mcp.tool()
def echo_tool(message: str) -> str:
    """Echo a message as a tool"""
    log_message = f"Tool echo: {message}"
    logger.info(log_message)  # 로거를 통한 로그 출력
    return message

@mcp.prompt()
def echo_prompt(message: str) -> str:
    """Create an echo prompt"""
    log_message = f"Prompt echo: {message}"
    logger.info(log_message)
    return f"Please process this message: {message}"

# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    log_message = f"Greeting for: {name}"
    logger.info(log_message)
    return f"Hello, {name}!"

@mcp.resource("echo://{message}")
def echo_resource(message: str) -> str:
    """Echo a message as a resource"""
    log_message = f"Resource echo: {message}"
    logger.info(log_message)
    return f"Resource echo: {message}"


if __name__ == "__main__":
    logger.info("Starting MCP server...")
    # transport 옵션을 변경해봅니다
    mcp.run(transport="sse")

 

도커

  • requirements.txt
mcp
  • Dockerfile
FROM python:3.13-slim

# pip 업그레이드
# RUN pip install --no-cache-dir --upgrade pip

WORKDIR /app

COPY docker/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["python", "server.py"]
  • docker-compose.yml
services:
  mcp-python-250309:
    build: .
    image: gundam/mcp-python-250309:1.0.0
    container_name: mcp-python-250309
    ports:
      - "8000:8000"
    volumes:
      - ./src:/app
    restart: unless-stopped
    networks:
      - mcp-network
    environment:
      - PYTHONUNBUFFERED=1
      - LOG_LEVEL=DEBUG
      - FASTMCP_PORT=8000
      - FASTMCP_TRANSPORT=sse
      - FASTMCP_DEBUG=true
      - FASTMCP_HOST=0.0.0.0
networks:
  mcp-network:
    driver: bridge

 

프로젝트 실행

  • 실행
# 이미지 빌드 및 컨테이너 시작 및 백그라운드
$ docker-compose up -d --build

# 로그 확인 (백그라운드 실행 시)
$ docker-compose logs -f

# 서버 중지
$ docker-compose down

# 동시 실행
$ docker-compose down & docker-compose up -d --build & docker-compose logs -f
  • 콘솔

docker-compose down & docker-compose up -d --build & docker-compose logs -f

 

Curser IDE에서 실행 및 테스트

MCP Server 추가 (sse)

MCP Server 추가 > mcp-python-250309

 

Chat해서 확인해 보기

2+6은? (mcp-python-250309)

2+6은? (mcp-python-250309)

 

잘된다..!!

 

 

첨고)

https://github.com/jlowin/fastmcp/issues/69

https://github.com/punkpeye/fastmcp?tab=readme-ov-file

https://github.com/modelcontextprotocol/python-sdk/pull/83

https://github.com/modelcontextprotocol/python-sdk/tree/main