动态模型上下文协议服务器

一个基于MCP Streamable HTTP传输(SSE + JSON-RPC over HTTP)的动态工具变异服务器,支持会话隔离和实时工具演化。

  • by lukasz-zoglowek
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 lukasz-zoglowek/dynamic-mcp-server

使用说明

动态mcp服务器

动态MCP(模型上下文协议)服务器使用MCP流式HTTP传输(SSE+JSON-RPC over HTTP)演示运行时工具突变。

特性

  • 动态工具演变:根据用户交互创建和修改工具
  • 基于会话:每个客户端都获得一个具有隔离工具状态的唯一会话
  • 渐进式工具解锁:使用初始“问候”工具后,新工具可用
  • HTTP流:根据MCP流式HTTP规范使用服务器发送事件(SSE)
  • 实时通知:工具列表更改时会通知客户端

运作原理

  1. 初始状态:服务器启动时仅提供“问候”工具
  2. 工具解锁:呼叫“问候”后,将提供三个附加工具:
    • calculate:执行基本的数学运算
    • get_status:显示服务器统计信息和可用工具
    • followup:执行后续行动
  3. 会话管理:每个客户端会话都维护自己的工具状态和调用计数

跑步

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传输。