新闻详情

新闻详情

首页 / 资讯中心 / 详情

[AIAgent-MCP]从连不上到跑通:MCP Inspector 本地调试 MCP Server 实战记录(TaoToken 统一 Key 接入版)

发布时间:2026/9/29 9:56:44来源:尧图网络
[AIAgent-MCP]从连不上到跑通:MCP Inspector 本地调试 MCP Server 实战记录(TaoToken 统一 Key 接入版)
1. 为什么 MCP Inspector 连不上本地 ServerMCP Inspector 是官方给 MCP Server 做可视化调试的交互式工具说白了就是 MCP 世界的 Postman能列出 Server 暴露的 tools、resources、prompts填入参数直接调用看返回结果。适合正在写 MCP Server 的开发者、做 AI Agent 工具链的同学以及想把内部能力封装成 MCP 接口但不确定通不通的人。我最近在本地起了一个基于 FastMCP 的 Server用mcp.run(transportstreamable-http)启动命令行看着一切正常端口也监听了但 Inspector 里点 Connect 就是转圈Server 端日志刷出一堆和 session、CORS 相关的报错。换成 SSE 模式又是另一套问题。折腾一圈才理清问题不在 Inspector而在 Server 的 ASGI 组装方式——FastMCP 自带的run()把 app 包得太死跨域和 session header 没暴露出来Inspector 拿不到Mcp-Session-Id握手直接断。这篇就把从连不上到跑通的完整链路写清楚Starlette 怎么挂载 streamable_http_app、CORS 要放哪些 origin、Inspector 的 Transport Type 和 URL 怎么填、SSE 旧模式怎么切以及怎么用 TaoToken 的统一 Key 给 Server 里的模型调用兜底。全程可复制照着改就能复现。2. TaoToken 前置统一 Key 与 API 通道MCP Server 本身只是协议层真正干活时经常要调模型——比如一个summarizetool 内部要请求大模型。如果每个 tool 都自己配一套 key本地调试会非常乱。我的做法是让 Server 统一走 TaoToken 的 API 通道一个 Key 覆盖多家模型调试时只关心协议通不通不用来回换配置。TaoToken 在这里的角色是「统一入口」官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。你需要在控制台建一个 Key然后把它写进 Server 的环境变量或配置文件。注意 API 地址不带 UTM 参数直接写https://taotoken.net/api即可。拿 Key 的入口在控制台创建后复制那串sk-开头的字符串。建议不要硬编码进server.py用.env或系统环境变量注入后面 Inspector 调试时改配置不用动代码。如果你后面要做长期编码或 Agent 循环调用可以看下 Coding Plan只是验证模型连通性用模型对话页面点几下就够了。3. 可复制配置Starlette CORS 骨架核心改动就一处别用mcp.run()改成手动组装 Starlette app把streamable_http_app()挂到路由上再套一层CORSMiddleware。下面是我实测能跑通的server.py骨架。# server.py import os from contextlib import asynccontextmanager from starlette.applications import Starlette from starlette.middleware.cors import CORSMiddleware from starlette.routing import Mount from mcp.server.fastmcp import FastMCP import uvicorn mcp FastMCP(demo-server) mcp.tool() def add(a: int, b: int) - int: 两数相加用于验证 tool 调用链路 return a b mcp.tool() def summarize(text: str) - str: 调用 TaoToken 统一通道做摘要示例占位 # 实际请求走 https://taotoken.net/api return freceived {len(text)} chars asynccontextmanager async def lifespan(app): async with mcp.session_manager.run(): yield app Starlette( routes[ Mount(/, appmcp.streamable_http_app()), ], lifespanlifespan, ) app CORSMiddleware( app, allow_origins[ http://localhost:6274, http://127.0.0.1:6274, ], allow_methods[GET, POST, DELETE, OPTIONS], allow_headers[*], expose_headers[Mcp-Session-Id], ) if __name__ __main__: uvicorn.run(app, host127.0.0.1, port8000)几个关键点必须对上错一个就连不上配置项值作用Mount 路径/挂streamable_http_app()实际端点变成/mcpallow_originslocalhost:6274和127.0.0.1:6274Inspector 默认端口expose_headersMcp-Session-Id浏览器要读到这个头allow_methods含 DELETE关闭 session 用lifespanmcp.session_manager.run()不写会报 session 未初始化启动命令uv run server.py # 或 python server.py看到Uvicorn running on http://127.0.0.1:8000就说明 Server 起来了。此时先别急着开 Inspector用 curl 探一下端点是否活着curl -i -X POST http://127.0.0.1:8000/mcp \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -d {jsonrpc:2.0,id:1,method:initialize,params:{protocolVersion:2024-11-05,capabilities:{},clientInfo:{name:curl,version:1.0}}}返回里带Mcp-Session-Id响应头说明协议层通了。这一步能省掉后面一半的排查时间。4. 验证请求Inspector 连接与 Run Tool先启动 Inspectornpx modelcontextprotocol/inspector如果浏览器打不开命令行里设一下 hostset HOST127.0.0.1 npx modelcontextprotocol/inspector启动后 URL 会变成127.0.0.1:6274浏览器就能访问了。进入界面后按下面填Transport TypeStreamable HTTPURLhttp://127.0.0.1:8000/mcpConnection TypeDirect点 Connect。连上后右侧出现资源面板因为示例 Server 只定义了 tools点 Tools 面板再点 List Tools就能看到add和summarize。选中add右侧出现参数表单填a3、b4点 Run Tool返回7就说明整条链路通了。如果要用 SSE 旧模式Server 端把 Mount 那行换掉app Starlette( routes[ Mount(/, appmcp.sse_app()), ], )注意 SSE 模式不需要lifespan去掉即可。Inspector 里 Transport Type 选SSEURL 填http://127.0.0.1:8000/sse其余操作一样。不过 SSE 是旧实现新项目建议直接用 Streamable HTTP。5. 本篇常见错排查连不上、Server 日志报 session 相关错误八成是没写lifespan或者用了mcp.run()而不是手动挂载。streamable_http_app()依赖 session manager 的生命周期必须用lifespan包住。浏览器控制台报 CORS检查allow_origins是否同时包含localhost:6274和127.0.0.1:6274。只写一个另一个访问方式就会被拦。连上了但 List Tools 为空确认 tool 是用mcp.tool()装饰的且函数有类型注解和 docstring。缺类型注解时 FastMCP 可能无法生成参数 schema。Run Tool 报 400 或参数校验失败Inspector 表单是按 schema 生成的如果 schema 里参数是必填但你没填会直接报错。对照右侧描述补全。端口冲突8000 被占用时换端口但 Inspector 里的 URL 也要同步改别只改一边。curl 能通、Inspector 不通基本锁定在 CORS 和expose_headers。Mcp-Session-Id没暴露浏览器读不到后续请求就带不上 session。6. 继续调试与接入跑通之后日常调试就是改 tool、重启 Server、Inspector 里重新 List Tools 再 Run。Server 里如果涉及模型调用统一走 TaoToken 的 API 通道Key 在控制台管理接入细节看接入文档。需要验证模型返回是否正常直接用模型对话页面测要做长期编码或 Agent 循环Coding Plan 更合适。API Keys 页面负责建 Key 和轮换别把 Key 写进代码提交到仓库。实测下来MCP Inspector 最大的价值是省掉了自己写 MCP Client 的成本——协议握手、session 管理、参数表单它都替你做了你只需要专注 Server 端逻辑。把 Starlette 挂载和 CORS 这两处配对后面基本不会再卡在连接上。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

本地 AI 智能体 OpenClaw 配置教程,简化环境搭建流程 2026/9/29 9:56:40

本地 AI 智能体 OpenClaw 配置教程,简化环境搭建流程

OpenClaw Windows 部署实操|搭建本地 AI 智能体,简化办公自动化配置 核心亮点:可视化操作|自动配置运行环境|内置全部依赖组件|支持自然语言下达任务|28 万 Tokens 额度 Windows 版本 3.1.0 下载…

阅读更多 →
OpenClaw 到底不安全在哪?把 Skill、shell、powershell 风险讲透,也别自己吓自己 2026/9/29 9:56:40

OpenClaw 到底不安全在哪?把 Skill、shell、powershell 风险讲透,也别自己吓自己

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
异构OCR+大模型推理中枢:老旧笔记本离线部署实战 2026/9/29 9:56:40

异构OCR+大模型推理中枢:老旧笔记本离线部署实战

1. 项目概述:为什么一个“异构OCR大模型推理中枢”的本地部署值得花两周时间折腾我去年底在给一家做票据自动化处理的客户做技术咨询时,被问到一个问题:“你们能不能让一台带核显的老笔记本,既识别发票上的手写金额,又…

阅读更多 →
Flowable工作流集成LLM作为原生节点的工程实践 2026/9/29 9:56:40

Flowable工作流集成LLM作为原生节点的工程实践

1. 项目概述:让工作流真正“思考”起来Flowable 工作流引擎在企业级业务系统中跑了十几年,它像一台精密的瑞士钟表——每个节点准时触发、每条连线严丝合缝、每个审批环节有据可查。但问题来了:当流程走到“客户投诉分析”这一步,…

阅读更多 →
Android Monkey测试实战:从命令参数到崩溃定位的稳定性测试全解析 2026/9/29 9:56:40

Android Monkey测试实战:从命令参数到崩溃定位的稳定性测试全解析

做App稳定性测试这些年,Monkey测试始终是我心里最朴素也最实用的一件武器。很多新人觉得它不过是一条adb shell monkey命令,随机乱点一通,能跑出崩溃就算完事。可真到了线上用户反馈“打开就闪退”、评分区一片一星的时候,回头复盘…

阅读更多 →
速通redis基础 2026/9/29 9:56:20

速通redis基础

认识Nosql了解redis安装redis这里安装是在Linux中安装,提供两种方法,一种就是自己手动配置redis,另一种就是通过ailiyun 的yum在线仓库直接下载,不用下载gcc这个编译器方法一:第一步:先装 epel 扩展源&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉