mcp/ · N5 执行环节 MCP 插件包
N5「执行」环节的 MCP 主轨(E8 评分核心)。一个 Server 暴露 3 个工具,百宝箱插件层注册后,由 N5 的两个「插件」节点调用。
文件清单
| 文件 | 作用 |
|---|---|
mock_server.py |
MCP Server 本体 v0.3(fetch_courses / fetch_jobs / fetch_weather;三传输可切) |
test_client.py |
联调自测:拉起 Server → 完整 MCP 握手 → 逐工具调用 → 结构校验 |
requirements.txt |
依赖(mcp 包,钉死 <2:2.x 改名 MCPServer 不兼容,实测踩坑) |
README.md |
本文件:启动 / 自测 / 平台接入三条路线 |
快速开始(3 步 · 5 分钟)
# ① 建虚拟环境(首次)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
# ② 装依赖
pip install -r requirements.txt
# ③ 体检(不联网)
python mock_server.py --selftest
# 期望最后一行:selftest ALL PASS(7 用例 + 2 结构红线)
# 联调(拉起 Server 走完整 MCP 协议链,= 平台将来干的事)
python test_client.py
# 期望最后一行:ALL PASS:MCP 全链路(握手/列工具/调用/结构)通过
test_client 通过 = Server 侧无问题。百宝箱注册后仍连不上,问题必在"平台→你机器"这一段网络(见下面平台接入),不在代码。
运行配置(环境变量,全部可选)
| 变量 | 默认 | 说明 |
|---|---|---|
MCP_TRANSPORT |
streamable-http |
sse → 挂 /sse;stdio → 标准输入输出(一键部署用,无端口) |
MCP_HOST |
0.0.0.0 |
对外可访问 |
MCP_PORT |
8000 |
端口冲突时换(实测:本机 8000 被残留静态服务占用) |
三种传输均已 test_client 全链路验证(2026-09-18)。
百宝箱平台接入(面板实测 2026-09-18 · 详细手册 = docs/15 附录 D)
路径:百宝箱 → 插件 → 新建插件 → 左侧「创建 MCP 服务」。面板「MCP 创建方式」两条路,对应三种玩法:
路线 A:先跑通结构(10 分钟,探路日配套)
- 插件市场找官方通用 MCP 插件建测试插件,把 N5「插件」节点的入参引用/输出引用名跑通(A.2 归一化吃的是输出结构)
- 本 Server 接入后工作流层零改动
路线 B:自部署 MCP(探路日先端到端)
- 面板选「自部署 MCP」→ 填公网 URL
- 本机起 Server(streamable-http →
/mcp;平台报协议错换MCP_TRANSPORT=sse→/sse) - 公网化:内网穿透(cpolar/ngrok,
ngrok http 8000)或免费云部署(Render/HF Space) - ⚠ 免费档坑:穿透重启 URL 变、限流、答辩现场网络——只做探路,不做演示依赖
路线 C:百宝箱一键部署(★推荐正式版)
- 面板选「百宝箱一键部署 MCP」+ 安装方式 uvx——平台把 stdio Server 托管到支付宝小程序云,免穿透免服务器
- 前置:包发布到 PyPI(
pyproject.toml已落库并本机验证:pip install .→ 入口mock-career-mcp可拉起 stdio 服务;剩python -m build+twine upload,步骤见 docs/15 附录 D.2),本机先uvx a02-mock-career-mcp验证 - 面板 MCP 服务配置 JSON:
{
"mcpServers": {
"a02-career": {
"command": "uvx",
"args": ["a02-mock-career-mcp"],
"env": {}
}
}
}
- Server 已支持 stdio(v0.3,stdio 联调 ALL PASS);stdio 模式严禁 print 到 stdout(协议流污染,代码已禁,改代码别破坏)
- ⚠ 30 天无调用自动释放云资源(面板黄条原文:状态重置"未发布",所有关联应用无法调用)→ 每周跑一次 N5 试运行保活,写进阶段门检查单
踩坑实录(test_client 联调发现):mcp SDK 的 stdio_client 拉子进程不继承自定义环境变量——StdioServerParameters 必须显式传 env={...},否则子进程拿不到 MCP_TRANSPORT 跑错模式。
验收清单(docs/15 §3 附加验收 · 平台侧)
-
python mock_server.py --selftestALL PASS -
python test_client.pyALL PASS - 百宝箱插件详情页能看到 3 个工具,逐个「测试」通过(截图存 E8 素材)
- N5 试运行用例 #1:两个插件节点返回真实(演示)数据,entries 非 fallback
- 用例 #4 拔 Server:降级表现记录回 docs/15 §0.2 ③(阻断 → 录屏备份;不阻断 → 现场拔线演示)
红线(E8 合规)
- 所有职位字段带**(演示)**后缀,绝不冒充真实岗位
- 课程 URL 只用 N4 兜底池已人工核验的站点级链接,不编深链
- 返回统一
{status:"success", data:[...], latency_ms}骨架——N5 A.2 归一化按此取数
升级真实 API(Day 14-18)
只改 mock_server.py 里 COURSES/JOBS 的取数逻辑(本地列表 → HTTP 请求合规公开 API),工具签名与返回结构不变——插件层、N5 工作流层零改动。「Server 端替换、插件层不动」的解耦设计,答辩讲这个。
Release files for a02-mock-career-mcp 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| a02_mock_career_mcp-0.3.0.tar.gz | 7.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| a02_mock_career_mcp-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.8 kB
Release files / a02_mock_career_mcp-0.3.0.tar.gz
| Download URL | a02_mock_career_mcp-0.3.0.tar.gz |
|---|---|
| Size | 7.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e31762dc0189c5aa86ef198916713f497722e3c4fee8c234770897010ad85382
|
|
BLAKE2b-256 checksum How to use checksums |
9d868ee82ff5ae066acfa3db2ffd1301e9eb100f9206bf4fe5c3a1b447c4b91e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Release files / a02_mock_career_mcp-0.3.0-py3-none-any.whl
| Download URL | a02_mock_career_mcp-0.3.0-py3-none-any.whl |
|---|---|
| Size | 8.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
15b81344491dbf5f01d8a408b80fedf9812bed81e6fa4c532779097cf77464ce
|
|
BLAKE2b-256 checksum How to use checksums |
97f5a867c9821e287679a5e51c634cbd952baf14255dada56acdc6e82ad6f43a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|