MCPGen
MCPGen
OpenAPI 사양으로부터 보안 및 정책을 준수하는 MCP 서버를 생성합니다.
MCPGen은 OpenAPI 사양을 기본적으로 안전한 도구 서버로 변환하는 프로덕션 지향 MVP Python 프레임워크입니다. FastAPI 데모 서버나 MCP 스타일의 stdio 서버를 생성할 수 있으며, 향후 정책 작업이 명시적으로 활성화하지 않는 한 쓰기 작업을 차단합니다.
문제점
AI 애플리케이션은 종종 많은 API, 데이터베이스 및 내부 시스템에 대한 액세스가 필요합니다. 프레임워크가 없으면 팀은 동일한 통합을 반복해서 다시 구축하고, 모델에 너무 많은 도구를 노출하며, 위험 분류, 감사 로그, 쓰기 작업 가드레일과 같은 안전 제어를 건너뛰는 경향이 있습니다.
MCP 서버는 AI 시스템이 도구를 사용할 수 있게 해주지만, 빠른 프로토타입은 검토 없이 DELETE, POST, PATCH 또는 PUT과 같은 위험한 작업을 실수로 노출할 수 있습니다.
해결책
MCPGen은 OpenAPI YAML 또는 JSON 파일을 읽고 다음을 생성합니다:
구조화된 도구 설명자
안전하게 노출된 도구 목록
보류된 도구 보고서
입력 스키마
정책을 준수하는 FastAPI 또는 MCP 서버
드라이런(dry-run) 미리보기
안전한
GET실행JSONL 감사 로그
키워드 폴백이 포함된 의미론적 도구 라우팅
기본 동작은 의도적으로 보수적입니다. 즉, 저위험 GET 도구만 노출됩니다.
기능
OpenAPI YAML/JSON 파싱
엔드포인트로부터 도구 생성
위험 분류:
GET= 낮음POST,PUT,PATCH= 중간DELETE= 높음
기본적으로 안전한 필터링
경로/쿼리 매개변수 및 JSON 요청 본문으로부터 입력 스키마 생성
키워드 폴백이 포함된 의미론적 도구 라우팅
FastAPI 모드
tools/list및tools/call을 지원하는 MCP stdio 모드드라이런 요청 미리보기
저위험
GET도구에 대해서만 안전한 실제 실행중앙 정책 엔진
JSONL 감사 로깅
CLI 명령어:
generate,inspectmcpgen.yaml을 통한 구성
아키텍처 흐름
OpenAPI spec
-> parser
-> tool generator
-> risk classifier
-> safety filter
-> tools.json / tools.all.json / tools.embeddings.json / safety_report.json
-> generated FastAPI or MCP server
-> policy engine
-> semantic/keyword router
-> dry-run or safe GET execution
-> audit log빠른 시작
로컬 설치:
pip install -e .[dev]사양 검사:
mcpgen inspect --from examples/jsonplaceholder.openapi.yamlFastAPI 서버 생성:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode fastapi --output generated_jsonplaceholder실행:
cd generated_jsonplaceholder
export API_BASE_URL=https://jsonplaceholder.typicode.com
uvicorn server:app --reload --port 8001PowerShell:
cd generated_jsonplaceholder
$env:API_BASE_URL = "https://jsonplaceholder.typicode.com"
uvicorn server:app --reload --port 8001열기:
http://127.0.0.1:8001/
http://127.0.0.1:8001/docs
http://127.0.0.1:8001/tools
http://127.0.0.1:8001/safetyOpenAPI 입력 예시
데모 사양:
examples/jsonplaceholder.openapi.yaml포함 내용:
GET /usersGET /users/{id}GET /postsGET /posts/{id}POST /postsDELETE /posts/{id}
발췌:
paths:
/users/{id}:
get:
operationId: getUserById
summary: Get user by ID
parameters:
- name: id
in: path
required: true
schema:
type: integer생성된 도구 예시
생성된 안전한 도구:
{
"name": "get_user_by_id",
"description": "Get user by ID",
"method": "GET",
"path": "/users/{id}",
"risk_level": "low",
"enabled": true,
"operation_id": "getUserById",
"input_schema": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "User ID",
"x-mcpgen-location": "path"
}
},
"required": ["id"]
}
}create_post 및 delete_post와 같이 보류된 도구는 tools.all.json에 남아 있으며 safety_report.json에서 설명됩니다.
FastAPI 데모 명령어
프로젝트 루트에서:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode fastapi --output generated_jsonplaceholder
cd generated_jsonplaceholder
export API_BASE_URL=https://jsonplaceholder.typicode.com
uvicorn server:app --reload --port 8001PowerShell:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode fastapi --output generated_jsonplaceholder
cd generated_jsonplaceholder
$env:API_BASE_URL = "https://jsonplaceholder.typicode.com"
uvicorn server:app --reload --port 8001노출된 안전한 도구 나열:
curl http://127.0.0.1:8001/tools쿼리별 도구 라우팅:
curl -X POST http://127.0.0.1:8001/tools \
-H "Content-Type: application/json" \
-d "{\"query\":\"get user by id\"}"PowerShell 대응:
Invoke-RestMethod -Method Post http://127.0.0.1:8001/tools `
-ContentType "application/json" `
-Body '{"query":"get user by id"}'안전한 도구 드라이런:
curl -X POST http://127.0.0.1:8001/tools/get_user_by_id/dry-run \
-H "Content-Type: application/json" \
-d "{\"inputs\":{\"id\":1}}"안전한 GET 도구 실행:
curl -X POST http://127.0.0.1:8001/execute \
-H "Content-Type: application/json" \
-d "{\"tool_name\":\"get_user_by_id\",\"params\":{\"id\":1}}"PowerShell 대응:
Invoke-RestMethod -Method Post http://127.0.0.1:8001/execute `
-ContentType "application/json" `
-Body '{"tool_name":"get_user_by_id","params":{"id":1}}'차단된 POST 동작 표시:
curl -X POST http://127.0.0.1:8001/tools/create_post/dry-run \
-H "Content-Type: application/json" \
-d "{\"inputs\":{\"title\":\"Hello\",\"body\":\"Demo\",\"userId\":1}}"차단된 DELETE 동작 표시:
curl -X POST http://127.0.0.1:8001/tools/delete_post/dry-run \
-H "Content-Type: application/json" \
-d "{\"inputs\":{\"id\":1}}"감사 로그 표시:
cat logs/audit.logPowerShell 대응:
Get-Content logs\audit.logMCP 모드
MCP 스타일의 stdio 서버 생성:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode mcp --output generated_jsonplaceholder_mcp실행:
cd generated_jsonplaceholder_mcp
export API_BASE_URL=https://jsonplaceholder.typicode.com
python server.pyPowerShell:
cd generated_jsonplaceholder_mcp
$env:API_BASE_URL = "https://jsonplaceholder.typicode.com"
python server.pytools/list JSON-RPC 입력 예시:
{"jsonrpc":"2.0","id":1,"method":"tools/list"}tools/call 드라이런 입력 예시:
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_user_by_id","arguments":{"id":1}}}MCP 모드는 FastAPI 모드와 동일한 tools.json, 정책 엔진 및 감사 로깅을 사용합니다. 현재 MVP에서 tools/call은 기본적으로 드라이런됩니다. execution_mode: safe-execute를 사용하면 저위험 GET 도구만 실행할 수 있습니다.
의미론적 도구 라우팅
MCPGen은 생성 중에 tools.embeddings.json을 작성하며 다음 경우에 사용합니다:
routing_mode: semantic임베딩을 사용할 수 없거나 의미론적 순위 지정이 실패하면, MCPGen은 자동으로 키워드 라우팅으로 폴백합니다. 다음을 사용하여 키워드 라우팅을 강제할 수 있습니다:
routing_mode: keyword도구 텍스트는 도구 이름, 설명 및 선택적 태그를 결합합니다. 예시:
create_invoice create invoice for customer billing payments기본적으로 MCPGen은 결정론적 로컬 임베딩 폴백을 사용하여 모델 다운로드 없이 데모와 테스트가 작동하도록 합니다. sentence-transformers를 사용하려면 다음을 설정하세요:
export MCPGEN_EMBEDDING_BACKEND=sentence-transformersPowerShell:
$env:MCPGEN_EMBEDDING_BACKEND = "sentence-transformers"mcpgen.yaml에서 routing_mode를 변경하고 서버를 다시 생성하여 라우팅 모드를 비교하세요. 의미론적 모드는 벡터 유사도에 따라 순위를 매기고, 키워드 모드는 정규화된 토큰 중첩에 따라 순위를 매기며 일치하는 용어를 포함합니다.
안전 모델
MCPGen은 기본적으로 안전합니다:
저위험
GET도구만tools.json에 노출됩니다.중간 위험 쓰기 도구는 향후 구성에서 명시적으로 활성화하지 않는 한 보류됩니다.
고위험
DELETE도구는 항상 차단됩니다.실제 실행은 저위험
GET도구로 제한됩니다.쓰기 실행은 구현되지 않았습니다.
인증은 구현되지 않았습니다.
정책 결정은 다음을 반환합니다:
{
"allowed": false,
"status": "blocked",
"reason": "Medium-risk tool is not listed in enabled_tools.",
"risk_level": "medium",
"tool_name": "create_post"
}감사 로깅
감사 로그는 다음 위치에 기록되는 JSONL 레코드입니다:
logs/audit.log구성:
audit_enabled: true
audit_log_path: logs/audit.log
routing_mode: semantic각 이벤트에는 다음이 포함됩니다:
타임스탬프
도구 이름
메서드
경로
위험 수준
모드
상태
허용 여부
이유
소스
작업
작업에는 다음이 포함됩니다:
policy_evaluationdry_runexecution_startedexecution_successexecution_errorexecution_blocked
구성
기본 구성:
max_tools: 5
allowed_methods:
- GET
output_dir: generated_mcp_server
api_base_url: https://api.example.com
enabled_tools: []
execution_mode: dry-run
audit_enabled: true
audit_log_path: logs/audit.logJSONPlaceholder 데모의 경우 다음을 설정하세요:
api_base_url: https://jsonplaceholder.typicode.com현재 제한 사항
이 프레임워크는 프로덕션 준비가 완료된 것이 아니라 프로덕션 지향 MVP입니다.
환경 변수 준비 외의 인증이나 비밀 관리가 없습니다.
쓰기 실행이 없습니다.
확인 워크플로우 UI가 없습니다.
벡터 데이터베이스나 임베딩 캐시 최적화가 없습니다.
속도 제한이 없습니다.
데이터베이스 기반 감사 싱크가 없습니다.
공식 Python MCP SDK를 사용할 수 없는 경우 MCP 모드는 최소한의 stdio 스캐폴드를 사용합니다.
로드맵
공식 MCP SDK 통합
인증 및 비밀 관리
활성화된 중간 위험 도구에 대한 확인 워크플로우
속도 제한
요청/응답 유효성 검사
더 나은 OpenAPI 스키마 지원
플러그형 감사 싱크
더 나은 의미론적 라우팅 모델 및 임베딩 캐시 최적화
배포 템플릿
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/breezykalama/mcpgen'
If you have feedback or need assistance with the MCP directory API, please join our Discord server