模型上下文协议服务器

一个无服务器的模型上下文协议(MCP)服务器,提供MCP-over-HTTP和REST API端点,适用于AWS Lambda部署。

  • by fbriou
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 fbriou/mcp-server-poc

使用说明

演示MCP服务器

无服务器模型上下文协议(MCP)服务器,使用Hono为AWS Lambda部署提供MCP-over-HTTP和REST API端点。

特性

  • 双协议支持:MCP-over-HTTP和REST API终结点
  • 无服务器架构:针对AWS Lambda部署进行了优化
  • 高性能:采用Hono制造,冷启动时间最短
  • 交互式文档:用于API勘探的Swagger UI
  • 综合测试:具有覆盖率报告的完整测试套件
  • 生产就绪:完成监控、日志记录和错误处理

可用工具

工具 说明 参数
echo 回显输入文本 message (字符串,必填)
get_time 获取当前日期和时间 无
calculate 进行基本的数学计算 expression (字符串,必填)
get_system_info 获取基本系统信息 无
api_stats 获取API使用情况统计 无

快速开始

地方发展

  1. 安装依赖项:

    npm install
    
  2. 启动开发服务器:

    npm run dev
    
  3. 运行测试:

    npm test
    
  4. 查看测试覆盖率:

    npm run test:coverage
    

AWS Lambda部署

  1. 全局安装无服务器框架:

    npm install -g serverless
    
  2. 配置AWS凭据:

    aws configure
    # or
    export AWS_ACCESS_KEY_ID=your-key
    export AWS_SECRET_ACCESS_KEY=your-secret
    
  3. 部署到AWS Lambda:

    # Deploy to development stage
    npm run deploy:dev
    
    # Deploy to production stage  
    npm run deploy:prod
    
  4. 监控日志:

    npm run logs
    

API终点

REST API

  • 获取 / -服务器信息和可用端点
  • 获取 /api/tools -列出具有模式的可用工具
  • 发布 /api/tools/:name -执行特定工具
  • 获取 /api/stats -获取API使用情况统计信息
  • 获取 /api/health -健康检查端点
  • 获取 /docs -交互式Swagger UI文档
  • 获取 /openapi.json -OpenAPI规范

MCP协议

  • 获取 /mcp -服务器发现和功能
  • 发布 /mcp -MCP JSON-RPC 2.0端点

现场演示

🚀 已部署服务器: https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com

📖 交互式文档: https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/docs

使用示例

测试实时服务器

服务器信息

curl https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/

健康检查

curl https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/api/health

REST API示例

回声工具

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/api/tools/echo \
  -H "Content-Type: application/json" \
  -d '{"message": "Hello from AWS Lambda!"}'

计算工具

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/api/tools/calculate \
  -H "Content-Type: application/json" \
  -d '{"expression": "2 + 2 * 3"}'

获取时间工具

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/api/tools/get_time \
  -H "Content-Type: application/json" \
  -d '{}'

获取系统信息

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/api/tools/get_system_info \
  -H "Content-Type: application/json" \
  -d '{}'

获取API统计信息

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/api/tools/api_stats \
  -H "Content-Type: application/json" \
  -d '{}'

MCP协议示例

服务器发现

curl https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp

列出工具

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list"
  }'

初始化MCP会话

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": {
        "name": "test-client",
        "version": "1.0.0"
      }
    }
  }'

通过MCP调用工具

curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "echo",
      "arguments": {
        "message": "Hello from MCP!"
      }
    }
  }'

项目结构

demo-mcp-server/
├── src/
│   └── index.js                 # Main server implementation
├── tests/
│   ├── tools.test.js           # Tool implementation tests
│   ├── api.test.js             # REST API endpoint tests
│   └── mcp.test.js             # MCP protocol compliance tests
├── package.json                # Dependencies and scripts
├── serverless.yml              # AWS Lambda deployment config
├── README.md                   # Project documentation
├── CLAUDE.md                   # Claude Code configuration
├── .gitignore                  # Git ignore rules
└── .env.example               # Environment variables template

MCP客户端配置

Claude代码配置

对于Claude Code和其他支持直接HTTP传输的MCP客户端:

{
  "mcpServers": {
    "demo-mcp-server": {
      "url": "https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp"
    }
  }
}

备注:运行后,将URL替换为您自己部署的服务器URL npm run deploy:dev 或 npm run deploy:prod.

光标配置

对于Cursor IDE,请将以下内容添加到MCP配置文件中:

{
  "mcpServers": {
    "demo-mcp-server": {
      "url": "https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp"
    }
  }
}

手动MCP客户端测试

您还可以使用任何JSON-RPC 2.0客户端手动测试MCP服务器:

# Test with curl (Initialize)
curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": {"name": "curl", "version": "1.0.0"}
    }
  }'

# List available tools
curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list"
  }'

# Call a tool
curl -X POST https://idm0cr9p5c.execute-api.us-east-1.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "calculate",
      "arguments": {"expression": "2 * Math.PI * 5"}
    }
  }'

发展

可用脚本

  • npm start -在本地启动服务器
  • npm run dev -使用热重新加载启动开发服务器
  • npm test -运行测试套件
  • npm run test:watch -在监视模式下运行测试
  • npm run test:coverage -生成测试覆盖率报告
  • npm run lint -运行ESLint
  • npm run lint:fix -自动修复ESLint问题
  • npm run format -使用Prettier格式化代码

测试

该项目包括全面的测试,包括:

  • 工具测试:所有MCP工具的单元测试
  • API测试:REST端点的集成测试
  • MCP测试:协议合规性和JSON-RPC 2.0验证

使用以下工具运行测试:

npm test                    # Run all tests
npm run test:watch         # Watch mode
npm run test:coverage      # With coverage report

环境变量

创建一个 .env 文件基于 .env.example:

# Optional environment variables
NODE_ENV=development
LOG_LEVEL=debug
AWS_REGION=us-east-1

部署

无服务器框架配置

这 serverless.yml 文件包括:

  • 运行时:Node.js 18.x
  • 记忆:512MB(可配置)
  • 超时:30秒
  • API网关:具有代理集成的HTTP API
  • 云监控:自动创建日志组
  • 国际机械师协会:所需的最小权限

部署阶段

  • 发展: npm run deploy:dev
  • 生产: npm run deploy:prod

监控

部署后,监控您的功能:

# View logs
npm run logs

# Invoke function directly
npm run invoke

# Remove deployment
npm run remove

安全

  • 输入消毒:对数学表达式进行净化,以防止代码注入
  • 错误处理:使用适当的HTTP状态码进行全面的错误处理
  • 跨域资源共享:已配置用于跨源请求
  • 速率限制:考虑增加生产使用的速率限制

贡献

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature-name
  3. 进行更改
  4. 运行测试: npm test
  5. 提交更改: git commit -m "Description"
  6. 推送到分支: git push origin feature-name
  7. 创建拉取请求

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

支持

更新日志

v1.0.0(初始版本)

  • MCP-over-HTTP和REST API支持
  • 五个核心工具(echo、get_time、compute、get_system_info、api_stats)
  • AWS Lambda部署就绪
  • 全面的测试套件
  • 交互式API文档
  • 生产记录和监测