使用TypeScript构建的Model Context Protocol (MCP)服务器游乐场,采用可流式传输的HTTP传输,并通过OAuth代理支持第三方授权服务器(如Auth0)。
@modelcontextprotocol/sdk,包括HTTP传输、会话管理和工具执行。aws-ecs:使用AWS ECS、Cloudwatch Logs和Bedrock调查ECS服务、任务和云日志。aws-s3:获取S3桶和对象列表。system-time:以多种格式获取当前系统时间,支持时区。echo:回显消息并进行转换和重复。streaming:模拟实时流数据更新。project:在当前项目目录中查找关键词。echo| 端点 | 描述 |
|---|---|
| GET /ping | 检测服务器 |
| POST /mcp | 带认证的MCP协议请求 |
| DELETE /mcp | 会话终止 |
| GET /.well-known/oauth-authorization-server | OAuth授权服务器元数据 |
| GET /.well-known/oauth-protected-resource | OAuth受保护资源元数据 |
| POST /oauth/register | 注册新的MCP客户端 |
| GET /oauth/authorize | 处理授权请求 |
| POST /oauth/token | 处理令牌请求 |
| POST /oauth/revoke | 处理令牌撤销 |
| GET /oauth/stats | 获取OAuth服务统计信息 |
| GET /oauth/auth0-callback | 处理Auth0回调 |
克隆仓库:
git clone <your-repo>
cd mcp-server-playground
安装依赖:
npm install
设置环境变量:
cp .env.example .env
配置本地开发的MCP服务器
npm run dev:setup
helm repo add chrisleekr https://chrisleekr.github.io/helm-charts/
helm repo update
helm install mcp-server-playground chrisleekr/mcp-server-playground
创建本地构建的MCP配置文件
在项目目录中创建一个.cursor/mcp.json文件(针对项目特定设置),或在主目录中创建一个~/.cursor/mcp.json文件(针对全局设置):
{
"mcpServers": {
"mcp-server-playground-cursor": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}
npx @modelcontextprotocol/inspector测试MCP服务器将mcp-config.example.json复制为mcp-config.json
编辑mcp-config.json指向正确的MCP服务器
运行检查器
npm run docker:run
# 然后运行检查器
npx @modelcontextprotocol/inspector -y --config ./mcp-config.json --server mcp-server-playground-cursor
或者
npm run test:inspector
在Auth0中创建一个新的应用程序
配置应用程序
http://localhost:3000/oauth/auth0-callbackhttp://localhost:3000创建一个新的API
urn:mcp-server-playground当MCP服务器作为集群部署时,由于设计原因,传输不会在实例之间共享,因此无法使多个MCP服务器实例具有状态。
为了真正实现有状态,我使用Valkey存储初始请求中的会话ID。
当请求到达另一个MCP服务器实例时,它会检查Valkey中是否存在该会话ID。如果存在,它将重放初始请求并将传输连接到服务器。
灵感来自https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/102
下图展示了有状态会话管理的流程。
<img width="681" height="882" alt="Image" src="https://github.com/user-attachments/assets/7f56339e-2665-47cb-a882-69d3c7096b47" />| 元数据发现 | 客户端注册 | 准备授权 |
|---|---|---|
| 第三方服务器授权 | 请求授权并获取授权代码 | 令牌请求和认证完成 |
|---|---|---|