MCP模拟服务器模板

一个基于MCP Python SDK构建的模拟服务器模板,用于生成合成数据,无需真实API调用。

  • by ericdummer
  • Python
  • 混合部署
  • 1 星标
  • 更新于
在 GitHub 查看 ericdummer/mock-mcp-server-template

使用说明

模拟MCP服务器模板

用于构建模拟的通用模板 MCP(模型上下文协议) 服务器使用官方 MCP Python SDK.返回真实的合成数据-不进行真实的API调用。

克隆此仓库,添加您的工具文件,并在几分钟内运行一个模拟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) (调度员)。要添加新工具,请执行以下操作:

  1. 将其定义添加到 TOOL_DEFINITIONS 在相关实体文件中(或创建新的实体文件)。
  2. 添加一个处理程序函数并将其路由到 handle().
  3. 在中注册实体模块 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操作工作流 .github/workers:

声纳配置

声纳扫描仪设置在中定义 sonar-project.properties:

  • sonar.sources=app:扫描下的应用程序源文件 app/
  • sonar.tests=tests:标识下的测试文件 tests/
  • sonar.python.version=3.11:对项目Python版本进行引脚分析
  • sonar.python.coverage.reportPaths=coverage.xml:导入pytest覆盖率结果

开发指南

项目编码/安全指南记录在 .github/copilot-instructions.md.