MVP MCP server in Python with extensible transport layout.
Project description
mcp-py-service (MVP)
这是一个使用 Python 实现的最小可运行 MCP Server 示例,目录结构按“可扩展多场景(stdio / http)”设计,当前已提供 stdio 和 streamable-http 两种 MVP 启动方式。
1. 目录结构
mcp-py-service/
├─ src/
│ └─ mcp_py_service/
│ ├─ server.py # 业务工具定义(与传输层解耦)
│ ├─ main.py # 启动入口,按 transport 分发
│ └─ transports/
│ ├─ stdio.py # MVP 已实现
│ └─ http.py # MVP 已实现(streamable-http)
├─ examples/
│ └─ cursor-mcp.json # Cursor MCP 配置示例
├─ pyproject.toml
└─ README.md
这种结构可以保证后续新增 http/sse、鉴权、日志、场景化工具包时,不需要重构核心目录。
2. 安装依赖
cd test-mcp-service/mcp-py-service
pip install -e .
若网络/代理导致 pip install -e . 在“Installing build dependencies”阶段失败,可使用以下命令(方案 A):
pip install -e . --no-build-isolation
若仍因依赖下载受限失败,可先确认本地已安装 mcp,再执行:
pip install -e . --no-build-isolation --no-deps
3. 本地运行
3.1 stdio
python -m mcp_py_service.main --transport stdio
3.2 streamable-http
python -m mcp_py_service.main --transport http --host 127.0.0.1 --port 8000 --path /mcp
可选参数:
--json-response--stateless-http
当前 MVP 提供工具:
echo(text: str) -> stradd(a: float, b: float) -> floatqueryTestInfo(base_url: str | None = None) -> str:请求sy-backend-service免 Token 接口GET /tdengine/test/health(SecurityConfig中permitAll("/tdengine/test/**")),用于验证 Cursor → MCP → 业务 HTTP 全链路。默认基址http://127.0.0.1:8099/api,可通过环境变量SY_BACKEND_BASE_URL或工具参数base_url覆盖(需含 context-path,一般以/api结尾)。
4. Cursor MCP JSON 配置
参考 examples/cursor-mcp.json,也可直接使用:
{
"mcpServers": {
"mcp-py-service-mvp": {
"command": "python",
"args": [
"-m",
"mcp_py_service.main",
"--transport",
"stdio"
],
"cwd": "E:/project/2026/ai/openpoject/vibecoding-backend/test-mcp-service/mcp-py-service"
}
}
}
5. 后续扩展建议
- 在
server.py中拆分场景化工具模块(如tools/docs.py、tools/db.py) - 文档问答/知识库检索场景:把项目文档、接口文档、运维手册挂成 MCP 资源与工具,支持“查文档 + 总结 + 版本对比”
- 数据库查询与分析场景:提供只读 SQL 查询工具(带白名单/限流),用于排查数据、统计报表、数据核对
- 增加
transports/sse.py,补齐 SSE 场景 - 增加配置层(
config.py)和统一日志、错误码封装
6. HTTP 连通性验证示例
先启动服务:
python -m mcp_py_service.main --transport http --host 127.0.0.1 --port 8000 --path /mcp
新开一个终端执行:
python examples/http-client-demo.py --base-url http://127.0.0.1:8000 --path /mcp
说明:
- 脚本会先
GET /mcp做基础连通性检查 - 再发送一个最小
initializeJSON-RPC 请求模板(POST /mcp) - 返回状态码
< 400可认为端点基础可用 - 若出现 HTTP 406 且提示
Accept/text/event-stream:streamable HTTP 要求请求头包含正确Accept(示例脚本已内置;自建客户端时请对齐)
7. tools/list + tools/call 完整示例
先启动服务:
python -m mcp_py_service.main --transport http --host 127.0.0.1 --port 8000 --path /mcp
新开一个终端执行:
python examples/http-tools-demo.py --base-url http://127.0.0.1:8000 --path /mcp
打印完整请求/响应原文(调试模式):
python examples/http-tools-demo.py --base-url http://127.0.0.1:8000 --path /mcp --raw
该脚本会按顺序执行:
initializenotifications/initializedtools/listtools/call(调用echo和add)
说明:streamable HTTP 的响应常为 SSE(text/event-stream),脚本已解析 data: 行或逐行 JSON,勿用纯 json.loads(整段响应)。
若出现 Missing session ID:有状态模式下,initialize 的响应头会返回 mcp-session-id,后续请求必须在请求头中携带;http-tools-demo.py 已自动处理。若希望无会话(每请求独立),可启动服务时加 --stateless-http(行为与有状态不同,按需选用)。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_py_service-0.1.0.tar.gz.
File metadata
- Download URL: mcp_py_service-0.1.0.tar.gz
- Upload date:
- Size: 8.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e915d13349216633ee8c30977f09bf91ca732b2a613b8fde5a011ec8c8b7580
|
|
| MD5 |
fcfa74faa34def6e81aeea2e0b69d132
|
|
| BLAKE2b-256 |
9cf2631fc45863b62f417477787d7fa94e62c0713c9f2de46de0db02ef295df5
|
File details
Details for the file mcp_py_service-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_py_service-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f2d6835e7af11ae6b575527971197b393f6e48cf8dd2f128dc2a79c17b2a048
|
|
| MD5 |
2d43483ea9e448d3aeda412f0877f1cc
|
|
| BLAKE2b-256 |
5124e473380e29ff7be6584865c255b6e3d03c337b13caf7b792536476db8aae
|