FastMCP OpenAPI Demo

FastMCP OpenAPI Demo

A demonstration server that automatically generates Model Context Protocol (MCP) servers from OpenAPI specifications, providing seamless integration with FastAPI and supporting various transmission methods like STDIO, HTTP, and SSE.

Category
访问服务器

README

FastMCP OpenAPI 자동 생성 데모

이 프로젝트는 FastMCP를 사용하여 OpenAPI 스펙에서 자동으로 MCP(Model Context Protocol) 서버를 생성하고 Swagger UI를 제공하는 데모입니다.

🌟 주요 기능

  • OpenAPI 스펙 자동 변환: OpenAPI 3.0 스펙을 MCP 서버로 자동 변환
  • FastAPI 통합: FastAPI 앱을 MCP 서버로 자동 변환
  • Swagger UI 제공: 웹 브라우저에서 API 문서 확인 가능
  • 자동 테스트: 생성된 MCP 서버의 기능을 자동으로 테스트
  • 현대적인 도구: uv, pyproject.toml 사용

🚀 빠른 시작

1. uv 설치 (권장)

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# 또는 pip로 설치
pip install uv

2. 프로젝트 설정

# 프로젝트 클론 및 디렉토리 이동
git clone <repository-url>
cd fastmcp-openapi-demo

# uv로 가상환경 생성 및 의존성 설치
uv sync

# 또는 개발 의존성까지 포함해서 설치
uv sync --dev

3. 데모 실행

# 방법 1: uv run으로 직접 실행
uv run python run_demo.py

# 방법 2: 스크립트 명령어 사용
uv run fastmcp-demo

# 방법 3: 가상환경 활성화 후 실행
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate   # Windows
python run_demo.py

🛠️ 개발 환경 설정

코드 품질 도구

# 코드 포맷팅
uv run black .

# 린팅
uv run ruff check .
uv run ruff check . --fix  # 자동 수정

# 타입 체킹
uv run mypy .

# 테스트 실행
uv run pytest

새로운 의존성 추가

# 런타임 의존성 추가
uv add package-name

# 개발 의존성 추가
uv add --dev package-name

# 특정 버전 지정
uv add "fastapi>=0.104.0"

📋 해결된 문제들

❌ 기존 문제점들

  1. 테스트 오류: 'list' object has no attribute 'tools'
  2. asyncio 충돌: Already running asyncio in this thread
  3. MCP 엔드포인트 404: /mcp 경로 접근 불가
  4. 패키지 관리: 느린 pip, 복잡한 가상환경 관리

✅ 해결 방안

  1. API 호환성 개선: tools/resources 객체 타입 검사 추가
  2. 독립 서버 생성: standalone_mcp_server.py로 asyncio 충돌 해결
  3. FastAPI 통합 개선: MCP 정보 엔드포인트 추가
  4. 현대적인 도구: uv 사용으로 빠른 의존성 관리

🌐 웹 인터페이스

FastAPI 서버 실행 후 브라우저에서 다음 URL 접속:

  • 메인 페이지: http://localhost:8000
  • FastAPI Swagger UI: http://localhost:8000/docs ⭐ 권장
  • 커스텀 Swagger UI: http://localhost:8000/swagger
  • MCP 정보: http://localhost:8000/mcp/info
  • OpenAPI 스펙: http://localhost:8000/openapi.json

📋 파일 구조

.
├── pyproject.toml           # 프로젝트 설정 및 의존성
├── .python-version          # Python 버전 지정
├── uv.lock                  # 의존성 잠금 파일 (자동 생성)
├── openapi_mcp_server.py    # 메인 MCP 서버 구현
├── standalone_mcp_server.py # 독립 STDIO MCP 서버
├── test_mcp_client.py       # MCP 클라이언트 테스트
├── run_demo.py             # 데모 실행 스크립트
└── README.md               # 이 문서

🔧 구현 방법

1. OpenAPI 스펙에서 MCP 서버 생성

from fastmcp import FastMCP
from fastmcp.server.openapi import RouteMap, MCPType
import httpx

# HTTP 클라이언트 생성
client = httpx.AsyncClient(base_url="https://api.example.com")

# OpenAPI 스펙 로드
openapi_spec = {...}  # OpenAPI 3.0 스펙

# MCP 서버 생성
mcp = FastMCP.from_openapi(
    openapi_spec=openapi_spec,
    client=client,
    name="My API Server"
)

# 서버 실행
await mcp.run()

2. FastAPI 앱에서 MCP 서버 생성

from fastapi import FastAPI
from fastmcp import FastMCP

# FastAPI 앱 생성
app = FastAPI()

@app.get("/items")
def get_items():
    return [{"id": 1, "name": "Item 1"}]

# FastAPI를 MCP 서버로 변환
mcp = FastMCP.from_fastapi(app=app)

# 서버 실행
await mcp.run()

🧪 테스트

# 모든 테스트 실행
uv run pytest

# 특정 테스트 파일 실행
uv run pytest test_mcp_client.py

# 커버리지 포함 테스트
uv run pytest --cov=. --cov-report=html

🆚 uv vs pip 비교

기능 uv pip
속도 🚀 10-100배 빠름 🐌 느림
의존성 해결 ✅ 고급 알고리즘 ⚠️ 기본적
가상환경 ✅ 통합 관리 ❌ 별도 도구 필요
잠금 파일 ✅ uv.lock ❌ 없음
크로스 플랫폼 ✅ 일관된 경험 ⚠️ 플랫폼별 차이

💡 uv 사용 팁

# 프로젝트 초기화
uv init my-project
cd my-project

# Python 버전 설정
uv python pin 3.12

# 의존성 설치 (pyproject.toml 기반)
uv sync

# 스크립트 실행
uv run python script.py

# 패키지 추가/제거
uv add requests
uv remove requests

# 개발 서버 실행
uv run uvicorn app:app --reload

🤝 기여하기

  1. 저장소를 포크합니다
  2. 기능 브랜치를 만듭니다: git checkout -b feature/amazing-feature
  3. uv를 사용해 개발 환경을 설정합니다: uv sync --dev
  4. 코드 품질 도구를 실행합니다: uv run black . && uv run ruff check .
  5. 테스트를 실행합니다: uv run pytest
  6. 변경사항을 커밋합니다: git commit -m 'Add amazing feature'
  7. 브랜치에 푸시합니다: git push origin feature/amazing-feature
  8. Pull Request를 엽니다

📄 라이센스

이 프로젝트는 MIT 라이센스 하에 배포됩니다.

📞 지원

문제가 있거나 질문이 있으시면 이슈를 생성해 주세요.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选