SevenRooms MCP服务器
基于HTTP的模型上下文协议(MCP)服务器,为SevenRooms预订和可用性提供工具和资源。用途 StreamableHTTPServerTransport (HTTP+SSE)而不是stdio。使用TypeScript和官方 @modelcontextprotocol/sdk.
特性
make_reservations工具:使用客人详细信息创建餐厅预订available_time_slot资源:查询可用的预订时隙- TypeScript+Zod验证
- 可流式HTTP传输(JSON响应+可选的SSE流式传输)
- 已准备好通过GitHub操作部署Azure应用服务
项目结构
src/
server.ts # Main MCP HTTP server (/mcp endpoint)
tools/makeReservation.ts # make_reservations tool registration
resources/available_time_slot.ts # available_time_slot resource registration
test/ # Integration tests
.env.example # Example environment vars
tsconfig.json
package.json
.github/workflows/azure-deploy.yml # CI/CD workflow to Azure App Service环境变量
| 名称 | 必填 | 描述 |
|---|---|---|
| SEVENROOMS_API_KEY | 是 | SEVENROOMS API的身份验证 |
| SEVENROOMS_API_URL | 是 | 基本API URL(例如。https://api.sevenrooms.com) |
| PORT | 可选 | 监听端口(应用服务自动设置) |
复制 .env.example 到 .env 供本地使用:
SEVENROOMS_API_KEY=your_key_here
SEVENROOMS_API_URL=https://api.sevenrooms.com地方发展
npm install
npm run build
npm start # starts HTTP server on PORT (default 3000)
# or
npm run start:dev # tsx live-reload服务器终结点:
POST /mcpJSON-RPC MCP请求(初始化、工具/列表、资源/列表、工具/调用等)GET /mcp–SSE流(如果使用流媒体场景)DELETE /mcp–关闭会话(有状态模式;此处为无状态,因此可选)GET /health–简单的健康探头
示例初始化请求
curl -X POST http://localhost:3000/mcp \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"initialize",
"params":{
"protocolVersion":"1.0",
"clientInfo":{"name":"local-client","version":"1.0"},
"capabilities":{}
}
}'列出工具
curl -X POST http://localhost:3000/mcp \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'调用make_reservations工具(示例)
curl -X POST http://localhost:3000/mcp \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":3,
"method":"tools/call",
"params":{
"name":"make_reservations",
"arguments":{
"date":"2025-12-20",
"time":"19:00",
"party_size":2,
"first_name":"Jane",
"last_name":"Doe",
"email":"jane@example.com",
"phone":"+15555550123"
}
}
}'工具和资源详细信息
工具:make_reservations
输入字段:
date, time, party_size, first_name, last_name, email, phone从SevenRooms API返回成功或详细的错误文本。
资源:可用_时间_地块
URI格式:
available://YYYY-MM-DD/HH:MM/party_size返回JSON: { "available_times": ["18:00", "18:30", ...] } 已筛选出以下条目 type === 'book.
使用的SevenRooms API端点
- 预订:
POST {SEVENROOMS_API_URL}/reservations - 可利用性:
GET {SEVENROOMS_API_URL}/availability带有查询参数date,time,party_size
如果您的SevenRooms帐户不同,请调整端点路径。
Azure应用服务部署
1.创建Azure资源(CLI示例)
az group create -n sevenrooms-rg -l eastus
az appservice plan create -g sevenrooms-rg -n sevenrooms-plan --sku B1 --is-linux
az webapp create -g sevenrooms-rg -p sevenrooms-plan -n --runtime "NODE:18-lts"2.配置应用设置
az webapp config appsettings set -g sevenrooms-rg -n --settings \
SEVENROOMS_API_KEY="" \
SEVENROOMS_API_URL="https://api.sevenrooms.com"Azure注入 PORT 自动;除非需要,否则不要硬编码。
3.GitHub的秘密
插件仓库设置→ 行动→ 秘密:
AZURE_WEBAPP_NAME=\AZURE_WEBAPP_PUBLISH_PROFILE=逐字粘贴发布配置文件XML
4.工作流程(azure-deploy.yml)
步骤:签出、设置节点+缓存、安装(如果缓存命中则跳过)、测试、构建、列出构建输出、部署。
5.验证部署
curl https://.azurewebsites.net/health
curl -X POST https://.azurewebsites.net/mcp \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"1.0","clientInfo":{"name":"remote","version":"1.0"},"capabilities":{}}}'测井和观测
- 使用
console.error()用于服务器日志(应用服务捕获的stderr)。 - 添加应用程序洞察:设置
APPINSIGHTS_INSTRUMENTATIONKEY或连接字符串。 - 考虑结构化日志(JSON)以便于分析。
故障排除
| 问题 | 原因 | 修复 |
|---|---|---|
| 404/mcp | 构建缺失或错误的起始路径 | 确保 npm run build 并开始使用 node build/server.js |
| 500个SevenRooms错误 | 无效的API密钥或有效负载 | 验证env变量和输入字段 |
| 超时 | SKU或网络延迟低 | 增加计划大小/调整重试 |
| 不可接受 | 缺少Accept标头 | 使用 Accept: application/json (仅启用JSON) |
| 功能错误 | 缺失 capabilities 初始化 | 包含 "capabilities":{} |
生产建议
- 至少使用B1平面图;根据CPU或HTTP队列长度向外扩展。
- 通过出入限制或前门限制进入。
- 旋转
SEVENROOMS_API_KEY定期。 - 对SevenRooms的短暂故障(429,5xx)实施重试。
- 如果公开披露,则增加利率限制。
贡献
- 分支机构从
main - 实施变更
src/ npm test && npm run build- PR和合并以触发部署
许可证
麻省理工学院(根据需要更新)。
参考文献
- MCP文件:https://modelcontextprotocol.io/
- SDK代表:https://github.com/modelcontextprotocol/typescript-sdk
- SevenRooms API文档:(请参阅特定帐户门户网站)
SevenRooms MCP服务器
用于管理SevenRooms餐厅预订的模型上下文协议(MCP)服务器。根据 MCP规范 使用TypeScript和官方 @modelcontextprotocol/sdk.
特性
- make_reservations 工具:使用客人详细信息创建餐厅预订
- 可用_时间_地块 资源:查询可用的预订时隙
- 完全使用TypeScript和Zod验证
- 基于STDIO的通信,实现无缝MCP集成
- Azure应用服务部署就绪
项目结构
src/
index.ts # Main MCP server with tools and resources
test/
makeReservation.test.js # Unit tests for make_reservations tool
availableTimeSlot.test.js # Unit tests for available_time_slot resource
.env.example # Example environment variables
tsconfig.json # TypeScript configuration
package.json # Project dependencies and scripts
.github/
workflows/
azure-deploy.yml # GitHub Actions CI/CD workflow先决条件
- Node.js>=16
- npm
- SevenRooms API密钥和基本URL
地方发展
1.安装依赖项
npm install2.配置环境变量
复制 .env.example 到 .env 并填写您的SevenRooms凭据:
cp .env.example .env然后编辑 .env:
SEVENROOMS_API_KEY=your_sevenrooms_api_key_here
SEVENROOMS_API_URL=https://api.sevenrooms.com3.构建服务器
npm run build这将TypeScript编译为JavaScript build/ 目录。
4.运行测试
npm test预期产量:
available_time_slot resource
✓ throws when required fields missing
✓ returns only times with type == "book"
make_reservations tool
✓ throws when required fields missing
✓ calls SevenRooms reservations endpoint and returns data
4 passing5.启动服务器
生产:
npm start对于自动重新加载的开发:
npm run start:dev服务器将在stdio上启动,为MCP客户端连接做好准备。
MCP工具和资源
工具:make_reservations
通过SevenRooms预订餐厅。
输入架构:
{
"date": "YYYY-MM-DD (e.g., 2025-12-25)",
"time": "HH:MM (e.g., 19:00)",
"party_size": 4,
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com",
"phone": "555-1234"
}答复: 返回SevenRooms API响应以及预订确认详细信息(ID、状态等)。
资源:可用_时间_地块
查询给定日期、时间和聚会规模的可用预订时隙。
URI格式:
available://YYYY-MM-DD/HH:MM/party_size例子:
available://2025-12-25/19:00/4答复:
{
"available_times": ["18:00", "18:30", "19:00", "19:30"]
}资源会自动筛选,仅包含以下时间 type === 'book' 从SevenRooms的可用性API。
SevenRooms API集成
服务器调用以下SevenRooms端点:
预订端点
- 网址:
{SEVENROOMS_API_URL}/reservations - 方法: 发布
- 认证: 不记名代币
Authorization头球 - 有效载荷:
{
"datetime": "2025-12-25T19:00",
"party_size": 4,
"guest": {
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com",
"phone": "555-1234"
}
}可用性端点
- 网址:
{SEVENROOMS_API_URL}/availability - 方法: 获取
- 认证: 不记名代币
Authorization头球 - 查询参数:
date,time,party_size
注: 如果您的SevenRooms API帐户需要不同的路径或身份验证方法,请调整端点并请求有效负载。
测试
该项目包括使用Mocha、Chai和Nock(用于HTTP模拟)的单元测试。
运行测试:
npm test测试包括:
- 工具和资源的输入验证
- 模拟SevenRooms API响应
- 可用时隙的筛选逻辑(类型===“book”)
Azure部署
先决条件
- Azure应用服务实例
- 包含此代码的GitHub存储库
- 导出Azure发布配置文件
设置步骤
- 创建Azure应用服务
- 创建新的Web应用程序(Node.js 18 LTS或更高版本) - 复制发布配置文件XML
- 配置GitHub机密
- 在GitHub存储库中,转到设置→ 秘密和变量→ 行动 - 添加这些秘密: - AZURE_WEBAPP_NAME --Azure Web应用程序的名称 - AZURE_WEBAPP_PUBLISH_PROFILE --发布配置文件XML内容
- 设置应用服务配置
- 在Azure门户中,转到您的应用服务→ 配置 - 添加这些应用程序设置: - SEVENROOMS_API_KEY -您的SevenRooms API密钥 - SEVENROOMS_API_URL -您的SevenRooms API基础URL(例如。, https://api.sevenrooms.com) - PORT --留空以自动绑定(Azure会自动设置此项)
- 部署
- 推到 main 分支 - GitHub Actions工作流自动运行 - 部署继续到Azure应用服务
工作流在中定义 .github/workflows/azure-deploy.yml 以及:
- 检查代码
- 安装依赖项
- 构建TypeScript
- 使用发布配置文件进行部署
验证部署
部署后,您可以:
- 检查Azure门户中的应用服务活动日志
- 查看GitHub上的GitHub操作工作流运行日志
- 通过指向已部署实例的MCP客户端连接来测试服务器
日志记录
重要提示: MCP服务器使用stdio进行通信,因此日志记录受到限制:
- ✅ 使用
console.error()用于日志记录(写入stderr,对基于STDIO的MCP安全) - ❌ 从不使用
console.log()(写入stdout,损坏MCP JSON-RPC消息)
对于生产,请考虑:
- 通过Azure SDK将日志重定向到应用程序洞察
- 使用写入stderr的结构化日志库
- 检查Azure门户中的Azure应用服务日志
故障排除
“找不到模块'@modelcontextprotocol/sdk'”
- 跑
npm install确保所有依赖项都已安装 - 检查
@modelcontextprotocol/sdk在...里package.json依赖项
构建错误(TypeScript)
- 确保已安装Node.js>=16
- 删除
build/和node_modules/并重新安装:npm install && npm run build
测试失败
- 确保
.env文件存在(即使为空)或在运行测试之前在shell中设置环境变量 - 检查nock mock是否符合您的实际SevenRooms API请求
服务器未作为MCP客户端连接
- 确保服务器运行时不会抛出错误:
npm start(应打印到stderr) - 验证MCP客户端是否正确配置为调用服务器
贡献
- 对以下内容进行更改
src/index.ts - 运行测试:
npm test - 构建:
npm run build - 提交并触发CI/CD
许可证
麻省理工学院
