- 大模型是如何与 mcp 进行交互
- 与tool的交互逻辑
- 与resource的交互逻辑
- 与prompt的交互逻辑
- 两种mcp server的机制
- 如何自己开发一个 mcp server
- 如何使用三方的mcp server
- stdio 如何转 streamable-http
├── index.js # 启动文件,在这里可以选择你要使用的 mcp server
├── llm
│ └── askLLM.js # 调用大模型
└── mcp
├── sse
│ └── client.js
├── stdio
│ ├── compute
│ │ ├── client.js
│ │ └── server.js # 自己写的 mcp server
│ └── filesystem
│ └── client.js
└── streamable-http
└── client.js
npm run start
:开启对话服务,根目录下有个.env
文件用于设置环境变量,在src/index
里可以选择要测试的mcp 类型npm run sse
:基于stdio启动sse服务npm run inspector
:开启测试mcp server的可视化工具
-
各种
Transport
都可以通过requestInit
设置header
,比如补充鉴权的tokennew StreamableHTTPClientTransport(new URL('http://localhost:8000/sse'), { requestInit: { headers: { "Authorization": "Bearer xxx", } } })
-
在访问各种
client
各种接口时,都可以通过_meta
设置参数,比如:await client.listTools({ _meta: { newsId: "179", } }) await client.callTool({ name: tool.name, arguments: { ...JSON.parse(functionInfo.arguments), _meta: { newsId: '170' } } }); await client.listResources({ _meta: { newsId: "179", } }) await client.readResource({ uri: "", _meta: { newId: '179' })
protocol version not supported, supported lastest version is 2025-03-26
主要原因是mcp client 和 mcp server 使用的 mcp 协议版本不一致,前端的办法就是升级 或降级@modelcontextprotocol/sdk
的版本
MCP 协议:为什么 Streamable HTTP 是最佳选择?
stdio 是在本地拉取对应的代码在本地启动一个服务
sse 是在服务器上拉取对应的代码启动一个服务