🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 先把目标定清楚:让 MCP 工具真的跑起来
MCP 是 Model Context Protocol 的缩写,你可以把它理解成「模型和外部工具之间的 USB 接口」:模型负责理解意图,MCP 服务端负责真正去读文件、查数据库、调接口。Qwen3.7 Flash 这类模型本身不会读你本地的 README,但只要挂上一个 MCP 工具,它就能把「统计 README 里 API 出现次数」这种活派给工具执行。
这篇要交付的东西很具体:克隆一个支持 OpenAI 兼容接口的 MCP 示例仓库,用 TaoToken 创建 Key,把 Base URL 写成https://taotoken.net/api,模型设为qwen3.7-flash,启动服务端后在客户端调用一个工具,完成「统计 README 中 API 出现次数」。文末会给出启动命令、可直接粘贴的 JSON-RPC 测试请求,以及返回体里 token 计数字段长什么样。
适合谁看:已经写过一点 Python、想快速验证 MCP 链路是否通的人;手里有 OpenAI 兼容客户端、想换成 TaoToken 接入的人;以及被各种 MCP 配置绕晕、只想先跑通一个最小闭环的人。全程不需要你改模型权重,也不需要理解协议全部细节,跟着敲命令就行。
2. 环境准备与示例仓库克隆
2.1 依赖与版本
我用的环境是 Python 3.11 + pip 24,MCP 的 Python SDK 对 3.10 以上支持比较稳。先建一个干净目录,避免和已有项目混在一起:
mkdir -p ~/mcp-demo && cd ~/mcp-demo python3 -m venv .venv source .venv/bin/activate python -V pip install -U pip接着装 MCP 官方 Python SDK 和 OpenAI 客户端。示例仓库里会用到这两个:
pip install "mcp>=1.2.0" "openai>=1.40.0"2.2 克隆示例仓库
这里用一个结构清晰的 MCP 示例仓库,它自带一个readme_counter工具,正好对应我们的任务。仓库地址按你实际拿到的为准,命令形态如下:
git clone https://github.com/your-org/mcp-openai-compatible-demo.git cd mcp-openai-compatible-demo ls -la目录里通常有这几个关键文件:server.py(MCP 服务端,注册工具)、client.py(调用方)、config.json(模型与 Base URL 配置)、README.md(就是我们要统计的目标文件)。先看一眼服务端注册了什么工具:
grep -n "def \|@server.tool\|@mcp.tool" server.py你会看到类似count_api_mentions的函数名,它接收一个文件路径参数,返回出现次数。这就是后面 JSON-RPC 要调用的工具名。
2.3 确认 README 存在
统计对象得先存在,否则工具会返回文件不存在的错误:
wc -l README.md grep -o "API" README.md | wc -l第二条命令是「人工基准值」,先记下这个数字,等会儿和 MCP 工具返回的结果对照。如果 README 里 API 出现 0 次,可以临时往里面补几行测试文本,方便验证。
3. 用 TaoToken 创建 Key 并写入 MCP 配置
3.1 注册与创建 Key
打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content= ,完成注册后进入控制台。创建 Key 的入口在 https://taotoken.net/console/api-keys?utm_campaign=generate ,点「新建密钥」,复制那串sk-开头的字符串。注意它只完整显示一次,先存到本地环境变量里,别直接写进会提交到 Git 的文件。
export TAOTOKEN_API_KEY="sk-你的密钥" echo $TAOTOKEN_API_KEY | head -c 83.2 写入 MCP 配置
示例仓库的config.json一般长这样,把base_url和model两处改掉即可:
{ "mcpServers": { "readme-tools": { "command": "python", "args": ["server.py"], "env": { "OPENAI_API_KEY": "sk-你的密钥", "OPENAI_BASE_URL": "https://taotoken.net/api", "MODEL_NAME": "qwen3.7-flash" } } } }如果你用的是支持 MCP 的桌面客户端,配置结构基本一致,把command指向你的 Python 解释器绝对路径更稳,比如~/.venv/bin/python。Base URL 一定写成https://taotoken.net/api,不要多加/v1后缀,OpenAI 兼容层会自动补路径。
注意:Key 建议通过环境变量注入,而不是硬编码在 JSON 里。上面写法是为了演示直观,生产环境请改成读取
os.environ。
3.3 验证配置能被读到
启动前先做一次静态检查,确认 JSON 没写坏:
python -c "import json;print(json.load(open('config.json'))['mcpServers']['readme-tools']['env']['MODEL_NAME'])"输出qwen3.7-flash就说明配置解析正常。这一步能省掉后面一半的排障时间。
4. 启动服务端并调用工具
4.1 启动命令
MCP 服务端走的是标准输入输出(stdio)传输,直接前台运行:
python server.py正常启动后终端会停在等待输入的状态,不打印多余日志。如果你想看详细握手过程,可以加调试环境变量:
MCP_DEBUG=1 python server.py4.2 JSON-RPC 测试请求
MCP 底层是 JSON-RPC 2.0。你可以用管道把请求喂给服务端,验证工具是否注册成功。先发一个tools/list:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | python server.py返回体里会列出工具名和入参 schema。确认有count_api_mentions后,再发调用请求:
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"count_api_mentions","arguments":{"path":"README.md","keyword":"API"}}}' | python server.py预期返回类似:
{ "jsonrpc": "2.0", "id": 2, "result": { "content": [ { "type": "text", "text": "API 出现次数: 37" } ], "isError": false } }把37和你第 2.3 节用grep数出来的基准值对一下,一致就说明工具逻辑没问题。
4.3 走模型链路:让 Qwen3.7 Flash 决定调用
上面是绕过模型直接调工具。真正要验证的是「模型 + MCP」闭环。用client.py发起一次对话,提示词写成:
python client.py --prompt "统计 README 中 API 出现次数"客户端会把工具列表塞进请求,模型判断需要调用count_api_mentions,服务端执行后把结果回传,模型再组织成自然语言。返回里除了答案,还会带 usage 字段。
4.4 token 计数字段
OpenAI 兼容返回体的 usage 结构如下,这是你核算成本的关键:
{ "usage": { "prompt_tokens": 412, "completion_tokens": 58, "total_tokens": 470 } }prompt_tokens包含系统提示、工具 schema 和你的问题;completion_tokens是模型输出。MCP 工具本身的执行不计 token,只有模型往返才计费。如果返回里 usage 为 0 或缺失,先检查是不是请求打到了非兼容端点。
5. 失败分支、成本与模型选择
5.1 常见报错对照
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 401 Unauthorized | Key 未注入或写错 | 重设TAOTOKEN_API_KEY,确认无空格 |
| 404 Not Found | Base URL 多写了/v1 | 改回https://taotoken.net/api |
| 工具未出现在 tools/list | 服务端未注册或启动失败 | 看server.py是否有@mcp.tool装饰器 |
| 返回文件不存在 | 工作目录不对 | 用绝对路径传path参数 |
| usage 全为 0 | 请求未走兼容层 | 核对客户端 base_url 配置 |
5.2 成本与模型选择
qwen3.7-flash定位是轻量快速档,适合这种「判断要不要调工具 + 组织一句话答案」的场景,token 消耗低、延迟小。如果你的任务变成多轮复杂推理或长文档摘要,可以换更强的模型,但单价会上去。具体价格、上下文长度、限流策略以官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content= 和控制台说明为准,本文不写死数字。
想长期跑 MCP 类任务、频繁调试的,可以看下 Coding Plan 页面 https://taotoken.net/coding-plan?utm_campaign=generate ,按套餐走通常比单次调用划算。接入文档在 https://taotoken.net/doc?utm_campaign=generate ,遇到参数细节先查这里。
5.3 一个容易踩的坑
MCP 服务端用 stdio 时,任何print调试语句都会污染 JSON-RPC 流,导致客户端解析失败。调试信息一律走sys.stderr,或者干脆用日志文件。我试过在工具函数里随手print了一下,结果客户端直接报协议错误,排查了十几分钟才反应过来。
最后一步收尾:把config.json里的 Key 换成环境变量引用,提交前用git diff确认没有密钥泄漏,这个最小闭环就算真正跑通了。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度