模拟MCP服务器模板
克隆此仓库,添加您的工具文件,并在几分钟内运行一个模拟MCP服务器。
从这里开始
使用设置索引为工作流选择正确的路径:
直接链接:
连接MCP客户端
服务器使用流式HTTP传输。示例客户端配置提供在 mcp.json:
{
"mcpServers": {
"mock-mcp-server": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": {
"X-Api-Key": "your-api-key-here"
}
}
}
}MCP检查员 (基于浏览器的测试工具):
MCP_PROXY_AUTH_TOKEN=localdev npx @modelcontextprotocol/inspector打开: http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=localdev\ 将运输设置为 流式HTTP,URL到 http://localhost:8000/mcp,添加标题 X-Api-Key: test-key.
实体和工具
服务器为三个实体实现了完整的CRUD操作: 客户, 产品,以及 订单.
| 实体 | 工具 |
|---|---|
| 客户 | create_customer, update_customer, delete_customer, get_customer, list_customers |
| 产品中心 | create_product, update_product, delete_product, get_product, list_products |
| 订购 | create_order, update_order_status, add_products_to_order, remove_products_from_order, delete_order, get_order, list_orders, list_orders_by_customer |
资源
只读资源与工具一起提供:
| URI | 描述 |
|---|---|
customers://all | 所有客户 |
customers://{id} | 按ID列出的单个客户 |
customers://{id}/orders | 客户的所有订单 |
products://all | 所有产品 |
products://{id} | 按ID列出的单个产品 |
orders://all | 所有订单 |
orders://{id} | 按ID下单 |
orders://{id}/products | 订单中所有产品的完整产品对象 |
如何添加工具
工具按实体分组 app/tools/。每个实体文件都公开 TOOL_DEFINITIONS (模式列表)和 handle(name, params) (调度员)。要添加新工具,请执行以下操作:
- 将其定义添加到
TOOL_DEFINITIONS在相关实体文件中(或创建新的实体文件)。 - 添加一个处理程序函数并将其路由到
handle(). - 在中注册实体模块
app/api/mcp.py(添加到_entity_tool_modules).
建筑
app/
├── main.py # Starlette ASGI app — Streamable HTTP transport, auth check
├── core/
│ ├── config.py # Settings via pydantic-settings
│ └── server.py # MCP SDK Server singleton
├── api/mcp.py # Registers tools + resources; dispatches to entity modules
├── data/
│ └── store.py # Shared in-memory store with seed data (singleton)
├── models/
│ ├── customer.py # Customer dataclass
│ ├── product.py # Product dataclass
│ └── order.py # Order dataclass
├── resources/
│ ├── customers.py # Read-only customer resource handlers
│ ├── products.py # Read-only product resource handlers
│ └── orders.py # Read-only order resource handlers
└── tools/
├── customers.py # Customer CRUD tools
├── products.py # Product CRUD tools
└── orders.py # Order CRUD tools
tests/ # Async tests using anyio + MCP in-memory transport
.devcontainer/ # VS Code Dev Container (full dev deps)
.github/workflows/ # CI: tests, lint, security scans
Dockerfile # Production image (slim, runtime deps only)
mcp.json # Sample MCP client connection config运输
| 端点 | 方法 | 目的 |
|---|---|---|
/mcp | POST | 发送MCP JSON-RPC消息——响应可以通过SSE流式传输 |
/mcp | GET | 为服务器发起的消息打开长期SSE流 |
身份验证:在 X-Api-Key 头球钥匙丢失→ HTTP 401。
MCP日志记录
工具调用 server.request_context.session.send_log_message() 发出支持通知的MCP客户端中可见的结构化日志事件(例如MCP检查器 通知 选项卡)。
配置
复制 .env.example 到 .env 并根据需要进行调整:
| 变量 | 默认值 | 描述 |
|---|---|---|
APP_NAME | Mock MCP Server | 应用程序名称 |
HOST | 0.0.0.0 | 绑定地址 |
PORT | 8000 | 监听端口 |
API_KEY_HEADER | X-Api-Key | API密钥的HTTP标头名称 |
LOG_LEVEL | INFO | 日志记录级别(DEBUG, INFO, WARNING, ERROR) |
永不承诺 .env 拥有真正的证书。
CI/CD安全工作流
GitHub操作工作流 :
- tests.yml:单元测试和覆盖率
- ruff.yml:lint和格式检查
- trivy.yml:文件系统和容器漏洞扫描
- codeql.yml:CodeQL分析
声纳配置
声纳扫描仪设置在中定义 sonar-project.properties:
sonar.sources=app:扫描下的应用程序源文件app/sonar.tests=tests:标识下的测试文件tests/sonar.python.version=3.11:对项目Python版本进行引脚分析sonar.python.coverage.reportPaths=coverage.xml:导入pytest覆盖率结果
开发指南
项目编码/安全指南记录在 .
