使用说明
动态mcp服务器
动态MCP(模型上下文协议)服务器使用MCP流式HTTP传输(SSE+JSON-RPC over HTTP)演示运行时工具突变。
特性
- 动态工具演变:根据用户交互创建和修改工具
- 基于会话:每个客户端都获得一个具有隔离工具状态的唯一会话
- 渐进式工具解锁:使用初始“问候”工具后,新工具可用
- HTTP流:根据MCP流式HTTP规范使用服务器发送事件(SSE)
- 实时通知:工具列表更改时会通知客户端
运作原理
- 初始状态:服务器启动时仅提供“问候”工具
- 工具解锁:呼叫“问候”后,将提供三个附加工具:
calculate:执行基本的数学运算get_status:显示服务器统计信息和可用工具followup:执行后续行动
- 会话管理:每个客户端会话都维护自己的工具状态和调用计数
跑步
node ./src/index.js
服务器侦听位置: http://localhost:3000/mcp
提出请求
初始化(必须是第一个,获取会话id):
curl -i \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{}}}' \
http://localhost:3000/mcp
复制 mcp-session-id 响应中的标题。
列出工具:
curl -N \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: <session id>" \
-H "Mcp-Protocol-Version: 2025-03-26" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
http://localhost:3000/mcp
调用工具(例如问候语):
curl -N \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: <session id>" \
-H "Mcp-Protocol-Version: 2025-03-26" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"greet","arguments":{"name":"Alice"}}}' \
http://localhost:3000/mcp
为异步通知打开专用的SSE流(可选):
curl -N \
-H "Accept: text/event-stream" \
-H "Mcp-Session-Id: <session id>" \
-H "Mcp-Protocol-Version: 2025-03-26" \
http://localhost:3000/mcp
备注
- 工具演变:每个会话仅从“问候”工具开始。问候后,其他工具会解锁。
- 会话隔离:每个客户端会话都维护自己的工具状态和调用计数。
- 渐进式发现:服务器演示了MCP工具如何根据使用模式动态发展。
- 需要标题:始终包括两者
application/json和text/event-stream在……里面Accept用于POST请求。 - 会话标头:对于非初始请求,包括两者
Mcp-Session-Id和Mcp-Protocol-Version标题。
建筑
- HTTP服务器:Express.js服务器通过HTTP处理MCP协议
- 会话管理:具有隔离工具状态的基于UUID的会话
- 传输层:用于实时通信的StreamableHTTPServerTransport
- 动态工具:使用客户端通知修改运行时工具
停止会话
curl -X DELETE \
-H "Mcp-Session-Id: <session id>" \
-H "Mcp-Protocol-Version: 2025-03-26" \
http://localhost:3000/mcp
从stdio传输迁移到流式HTTP传输。
