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.
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"
📋 해결된 문제들
❌ 기존 문제점들
- 테스트 오류:
'list' object has no attribute 'tools' - asyncio 충돌:
Already running asyncio in this thread - MCP 엔드포인트 404:
/mcp경로 접근 불가 - 패키지 관리: 느린 pip, 복잡한 가상환경 관리
✅ 해결 방안
- API 호환성 개선: tools/resources 객체 타입 검사 추가
- 독립 서버 생성:
standalone_mcp_server.py로 asyncio 충돌 해결 - FastAPI 통합 개선: MCP 정보 엔드포인트 추가
- 현대적인 도구: 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
🤝 기여하기
- 저장소를 포크합니다
- 기능 브랜치를 만듭니다:
git checkout -b feature/amazing-feature - uv를 사용해 개발 환경을 설정합니다:
uv sync --dev - 코드 품질 도구를 실행합니다:
uv run black . && uv run ruff check . - 테스트를 실행합니다:
uv run pytest - 변경사항을 커밋합니다:
git commit -m 'Add amazing feature' - 브랜치에 푸시합니다:
git push origin feature/amazing-feature - Pull Request를 엽니다
📄 라이센스
이 프로젝트는 MIT 라이센스 하에 배포됩니다.
📞 지원
문제가 있거나 질문이 있으시면 이슈를 생성해 주세요.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。