关于 Restaurant Health Inspections
Restaurant Health Inspections 是一个 MCP 服务,可查询美国、英国、加拿大和法国 20 个地区的餐厅检查等级、分数及违规记录。它使用政府公开数据,无需 API 密钥。
主要功能
- 01按城市和名称搜索餐厅
- 02查看等级、分数或结果
- 03查询检查历史和违规记录
- 04了解当地评级体系
- 05使用公开数据且无需 API 密钥
适用场景
- 01查看餐厅当前检查情况
- 02核查餐厅过往违规记录
- 03比较不同地区的评级体系
MCP 相关
该服务向 MCP 客户端提供餐厅搜索、检查历史和评级体系工具。托管端点使用无需身份验证的 Streamable HTTP,也提供本地 stdio Python 版本。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://food.ian.sh/mcpclaude mcp add --transport http iangcarroll-restaurant-health https://food.ian.sh/mcp{"mcpServers":{"iangcarroll-restaurant-health":{"type":"http","url":"https://food.ian.sh/mcp"}}}在 Cursor 中打开{"servers":{"iangcarroll-restaurant-health":{"type":"http","url":"https://food.ian.sh/mcp"}}}在 VS Code 中打开{"mcpServers":{"iangcarroll-restaurant-health":{"type":"http","url":"https://food.ian.sh/mcp"}}}{"mcpServers":{"iangcarroll-restaurant-health":{"serverUrl":"https://food.ian.sh/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
restaurant-health MCP 服务
查询20 个地区的餐厅卫生检查结果:
- **美国:**纽约市、纽约州(纽约市以外地区)、旧金山、洛杉矶县、圣克拉拉县、马林县、萨克拉门托县、拉斯维加斯、芝加哥、波士顿、奥斯汀、罗利/韦克县、路易斯维尔、底特律、辛辛那提、奥马哈/道格拉斯县、费尔法克斯县
- **其他地区:**伦敦和英国、多伦多、巴黎和法国
使用政府公开数据,无需 API 密钥。
托管地址:https://food.ian.sh。 MCP 端点为 https://food.ian.sh/mcp(Streamable HTTP,无需身份验证)。
claude mcp add --transport http restaurant-health https://food.ian.sh/mcp
工具
| 工具 | 功能 |
|---|---|
search_restaurants(city, name, address?, zip_code?, limit?) | 查找餐厅并显示其当前等级、分数或结果 |
get_inspection_history(city, restaurant_id, max_inspections?) | 查询以往检查记录、分数和违规情况(城市公开这些信息时) |
rating_systems() | 列出各城市,并说明各自的评级方式 |
每个城市的 ID、评级系统和数据来源都在其 src/cities/ 模块中。rating_systems 会返回相同的信息。
数据获取方式
- 实时 API,缓存 1 天(Cloudflare Cache API,按地区缓存)。除洛杉矶和拉斯维加斯外,其他地区均采用此方式:
- Socrata:纽约市、旧金山、芝加哥、奥斯汀、圣克拉拉、马林、辛辛那提、纽约州
- ArcGIS:罗利、路易斯维尔、底特律、萨克拉门托、奥马哈、费尔法克斯
- CKAN:波士顿、多伦多
- Opendatasoft:法国
- FSA ratings API:英国
- **批量导入 D1:**洛杉矶县和拉斯维加斯仅发布大型 CSV 和 zip 文件(约 75 MB)。每日 cron 会在文件发生变化时重新导入。
已知限制:
- 英国仅发布当前评级,不提供检查历史记录。
- 法国仅发布概要级别的数据,且只涵盖最近 12 个月。
- 奥马哈仅提供自 2025 年 12 月以来的检查记录,违规信息位于关联的 PDF 中。
- 费尔法克斯不发布违规详情。
- 洛杉矶县不包括帕萨迪纳、长滩和弗农。
着陆页会根据 Cloudflare 的请求地理位置信息选择默认城市(src/geo.ts)。可通过 ?city=<id> 覆盖。
托管部署(Cloudflare Workers)
| 路径 | 用途 |
|---|---|
src/index.ts | 路由、MCP 工具(通过 @modelcontextprotocol/sdk 实现无状态 Streamable HTTP)及 cron 处理程序 |
src/cities/ | 每个城市对应一个模块:搜索、历史记录、评级说明和着陆页徽章(index.ts 为注册表) |
src/lib/http.ts | 缓存请求,以及 Socrata/ArcGIS 查询辅助工具 |
src/geo.ts | 根据访客所在位置选择默认城市 |
src/bulk.ts | 将洛杉矶和拉斯维加斯的数据导入 D1,并执行相关查询 |
src/landing.ts | / 路径的着陆页。搜索框会调用 /api/search,展开结果会调用 /api/history |
migrations/ | D1 架构 |
npm install
npm run dev # local; apply schema first: npx wrangler d1 migrations apply restaurant-health --local
npm run deploy
每次导入都会写入新一代数据行,将 meta.gen:<city> 切换到该代数据,然后删除旧数据行。导入失败不会留下不完整的数据。若要强制重新导入,请运行:
curl -X POST -H "Authorization: Bearer $ADMIN_TOKEN" "https://food.ian.sh/admin/refresh?force=1"
推送到 main 后会通过 .github/workflows/deploy.yml 自动部署。该流程会应用 D1 迁移,然后运行 wrangler deploy。需要在仓库中配置密钥 CLOUDFLARE_API_TOKEN 和 CLOUDFLARE_ACCOUNT_ID。
ADMIN_TOKEN 是 Worker 密钥(wrangler secret put ADMIN_TOKEN)。SOCRATA_APP_TOKEN 是可选密钥,可提高纽约市和旧金山的速率限制。/api/status 会显示各批量导入城市最近一次导入的时间。
本地 stdio 版本(Python)
server.py 是原始的独立版本。它会自行下载批量文件,并将其缓存到 ~/.cache/restaurant-health-mcp。
需要 uv。依赖项以内联方式声明在 server.py 中。
Claude Code:
claude mcp add restaurant-health --scope user -- uv run --script /path/to/server.py
Claude Desktop(claude_desktop_config.json):
{
"mcpServers": {
"restaurant-health": {
"command": "uv",
"args": ["run", "--script", "/path/to/server.py"]
}
}
}
可选:设置 SOCRATA_APP_TOKEN,以提高纽约市和旧金山的速率限制。也可以设置 RESTAURANT_HEALTH_CACHE 来更改缓存存储位置。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。