1. 为什么要在 stock-scanner-mcp 里接统一 Key 通道
stock-scanner-mcp 是一个把股票分析能力封装成 MCP 工具的服务,底层用 FastAPI 暴露/mcp、/health、/docs这些端点,核心逻辑来自 stock-scanner 的 services 和 utils。它本身不生产模型能力,而是把「取行情、算指标、出评分、生成 AI 分析」这些动作包装成 MCP 工具函数,交给上层的 AI 客户端去调用。适合谁用?用 Python、FastAPI、Docker 搭股票分析服务的开发者,以及想让本地 MCP 服务稳定跑起来的折腾党。
问题出在模型通道这一层。stock-scanner-mcp 默认通过API_KEY、API_URL、API_MODEL三个环境变量去请求大模型,一旦你要换模型、换供应商,或者多个 MCP 服务共用一套额度,就得在每个容器里重复改环境变量。更麻烦的是,有些客户端只认 OpenAI 兼容格式,有些又走 Anthropic 风格,配置散落在settings.json、config.toml、docker-compose.yml里,排查起来很费劲。
我试过把模型调用统一收敛到 TaoToken 的 API 通道上,用一套 Key 同时服务 MCP 服务和本地编码工具。TaoToken 提供 OpenAI 兼容的接口,官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。这样 stock-scanner-mcp 只需要把API_URL指向统一通道,API_KEY换成 TaoToken 的 Key,模型名按需切换,不用再为每个供应商单独维护配置。
这篇就聚焦配置落地:给出settings.json与config.toml的可复制骨架、环境变量占位,以及启动后的连通性自检动作。技术部分会比拿 Key 部分长得多,因为真正卡人的往往是配置格式和请求验证。
2. TaoToken 前置准备:Key、模型名与通道地址
在动 stock-scanner-mcp 之前,先把 TaoToken 这边的三样东西准备好:API Key、模型名、通道地址。这三样对应到 MCP 服务里就是API_KEY、API_MODEL、API_URL。
先到控制台创建 API Key。打开 https://taotoken.net/api-keys ,新建一个 Key,复制出来形如sk-xxxxxxxx。这个 Key 就是后面所有配置里的API_KEY值。注意别把它提交到 Git,用环境变量或本地.env承载。
模型名取决于你想让 stock-scanner-mcp 用哪个模型做 AI 分析。TaoToken 的模型对话页在 https://taotoken.net/models ,可以在这里确认可用模型标识。填到API_MODEL里的就是模型 ID,比如某个通用对话模型或推理模型。股票分析场景里,AI 分析那一步对长文本和推理有要求,选一个上下文够长的模型会稳一些。
通道地址统一用 https://taotoken.net/api 。stock-scanner-mcp 的API_URL处理规则和 Cherry Studio 一致,填的是基础地址,不带/v1后缀,服务内部会自己拼接路径。这一点很关键,填错了会直接 404。
如果你后面还要接编码工具或 Agent,可以顺带了解 Coding Plan:https://taotoken.net/coding-plan 。它和本篇的 MCP 配置是两条线,但共用同一套 Key 体系,长期编码场景可以放一起规划。
注意:
API_URL只填到域名和/api,不要自己加/v1/chat/completions,否则会拼成双路径。
3. settings.json 骨架:MCP 客户端侧配置
settings.json是 MCP 客户端(比如 Cline、Cherry Studio 这类)读取服务定义的配置文件。stock-scanner-mcp 以 SSE 协议暴露/mcp,所以客户端侧要写的是服务地址和传输类型。下面是一个可复制的骨架,把占位符替换成你的实际值即可。
{ "mcpServers": { "stock-scanner-mcp": { "type": "sse", "url": "http://localhost:8000/mcp", "env": { "API_KEY": "sk-your-taotoken-key", "API_URL": "https://taotoken.net/api", "API_MODEL": "your-model-id" }, "disabled": false, "autoApprove": [] } } }几个字段说明。type填sse,因为 stock-scanner-mcp 走的是 SSE 传输,不是 stdio。url指向服务实际监听的地址,本机跑就是http://localhost:8000/mcp,Docker 映射到 8060 就是http://localhost:8060/mcp。env里的三个变量是给服务进程用的,如果你是在 Docker 里通过-e注入,这里的env可以留空或删掉,避免两处配置打架。
autoApprove建议先留空数组。股票分析工具会发起外部请求,自动批准所有工具调用有风险,手动确认更稳。等确认工具行为符合预期,再按需加白名单。
如果你用的是 Cline 这类把 MCP 配置放在独立文件的客户端,settings.json的路径通常在扩展的全局存储目录下。改完记得重启客户端,让配置重新加载。配置生效后,在工具列表里应该能看到 stock-scanner-mcp 暴露的函数,比如价格查询、评分、技术报告、AI 分析这几类。
提示:
env和 Docker 的-e同时存在时,以服务进程实际读到的为准。建议只保留一处,减少排查成本。
4. config.toml 骨架:服务端与容器侧配置
config.toml适合承载服务端和容器编排相关的配置,尤其是当你用 docker-compose 管理 stock-scanner-mcp 时。下面这份骨架把镜像、端口、卷、环境变量都列出来,直接改占位符就能用。
[service] name = "stock-scanner-mcp" image = "wbsu2003/stock-scanner-mcp" restart = "unless-stopped" [ports] host = 8060 container = 8000 [volumes] logs = "./logs:/app/utils/logs" [env] API_KEY = "sk-your-taotoken-key" API_URL = "https://taotoken.net/api" API_MODEL = "your-model-id" [healthcheck] path = "/health" interval = "30s" timeout = "5s" retries = 3这份 TOML 是给编排工具或你自己的加载逻辑用的,字段名可以按实际解析器调整。核心是[env]段:API_KEY填 TaoToken 的 Key,API_URL填 https://taotoken.net/api ,API_MODEL填模型 ID。[ports]里 host 8060 映射容器 8000,和前面settings.json里的 URL 对应上。
[volumes]把日志目录挂出来,stock-scanner-mcp 的日志写在/app/utils/logs,挂到宿主机方便排查。[healthcheck]指向/health,这是服务自带的健康检查端点,容器编排可以用它判断服务是否就绪。
如果你不用 TOML,而是直接写docker-compose.yml,等价内容是这样:
version: '3' services: stock-scanner-mcp: image: wbsu2003/stock-scanner-mcp container_name: stock-scanner-mcp restart: unless-stopped ports: - "8060:8000" volumes: - ./logs:/app/utils/logs environment: API_KEY: "sk-your-taotoken-key" API_URL: "https://taotoken.net/api" API_MODEL: "your-model-id"启动命令:
mkdir -p ./stock-scanner-mcp/logs cd ./stock-scanner-mcp docker-compose up -d源码方式跑的话,先装依赖再启动:
git clone https://github.com/wbsu2003/stock-scanner-mcp.git cd stock-scanner-mcp pip install -r requirements.txt export API_KEY="sk-your-taotoken-key" export API_URL="https://taotoken.net/api" export API_MODEL="your-model-id" python main.py源码方式默认监听 8000,和 Docker 的容器端口一致,只是少了映射层。
5. 验证请求与成功结果:连通性自检
配置写完,别急着在客户端里点工具,先做三层自检:服务活着、MCP 端点可达、模型通道能通。
第一层,健康检查。浏览器或 curl 访问/health:
curl -s http://localhost:8060/health正常会返回类似{"status":"ok"}的 JSON。如果连不上,先看容器是否在跑:
docker ps | grep stock-scanner-mcp docker logs --tail 50 stock-scanner-mcp日志里如果出现端口占用或依赖缺失,按报错处理。
第二层,MCP 端点。访问/mcp确认 SSE 通道建立:
curl -N http://localhost:8060/mcp-N关闭缓冲,能看到 SSE 事件流就说明端点正常。同时可以打开/docs看 FastAPI 自动生成的接口文档,确认工具函数都注册上了。
第三层,模型通道。这一步最关键,因为API_URL或API_MODEL填错,服务本身能起来,但 AI 分析工具一调用就报错。用 curl 直接打 TaoToken 的接口验证 Key 和模型名:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-your-taotoken-key" \ -H "Content-Type: application/json" \ -d '{ "model": "your-model-id", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'返回里带choices字段就说明 Key、模型名、通道地址三者都对。如果返回 401,检查 Key;返回 404,检查API_URL是否多写了/v1;返回模型不存在,检查API_MODEL是否和控制台里的一致。
三层都过之后,回到 MCP 客户端,在工具列表里找到 stock-scanner-mcp,调用一个不依赖模型的工具,比如价格查询,确认工具链路通。再调用 AI 分析类工具,确认模型通道通。成功的话,客户端会返回结构化的分析结果,日志里也能看到对应的请求记录。
6. 本篇常见错排查
配置过程中最容易踩的坑集中在地址拼接、环境变量覆盖、端口映射这三类。下面按现象列出来。
现象一:客户端连不上 MCP,提示 SSE 连接失败。先确认settings.json里的url和实际监听地址一致。Docker 映射 8060 就写 8060,源码跑 8000 就写 8000。再确认type是sse不是stdio。如果客户端和服务不在同一台机器,localhost要换成实际 IP。
现象二:服务起来了,但 AI 分析工具报 404。九成是API_URL填错。stock-scanner-mcp 的规则和 Cherry Studio 一致,只填基础地址 https://taotoken.net/api ,不要带/v1。服务内部会自己拼/v1/chat/completions。多写一层就变成双/v1,直接 404。
现象三:报 401 未授权。检查API_KEY是否完整复制,有没有多余空格或换行。Docker 的-e传参时,引号别漏。如果 Key 是在控制台刚创建的,确认没有误删。
现象四:模型名报错。API_MODEL必须和控制台里的模型 ID 完全一致,大小写、连字符都不能差。不确定就回模型对话页核对:https://taotoken.net/models 。
现象五:改了配置不生效。Docker 容器改环境变量后要重建,docker-compose up -d会检测变化并重建。客户端改settings.json后要重启客户端。两处都改了还不行,检查是不是env和-e同时存在,导致读到了旧值。
现象六:日志目录没权限。挂载./logs:/app/utils/logs时,宿主机目录要先建好,权限给足。否则容器内写日志失败,可能连带服务启动异常。
排障时优先看容器日志,docker logs --tail 100 stock-scanner-mcp基本能定位到具体是哪一层出的问题。MCP 接入相关的文档可以在 https://taotoken.net/doc 找到更细的说明,API Key 管理在 https://taotoken.net/api-keys 。
7. 把通道固定下来,后续换模型只改一个值
整套配置跑通之后,你会发现 stock-scanner-mcp 的模型依赖被收敛到了三个环境变量上。以后想换模型,只改API_MODEL一个值,重建容器即可,不用动 services 和 utils 里的任何代码。这正是把模型通道统一到 TaoToken 的价值:MCP 服务只管工具逻辑,模型供给交给统一入口。
如果你后面要接更多 MCP 服务,或者想让本地编码工具也走同一套 Key,可以看 Coding Plan:https://taotoken.net/coding-plan 。模型对话和调试在 https://taotoken.net/models ,控制台在 https://taotoken.net/console 。配置骨架已经给全,剩下的就是替换占位符、跑一遍三层自检。真正卡人的从来不是写配置,而是地址多一层、变量覆盖、端口没对上这些细节,按上面的排查顺序走一遍,基本都能定位。