关于 usda-mcp-server
usda-mcp-server 为营养研究者、饮食规划者和应用提供 USDA FoodData Central 食品数据查询。它支持按关键词或 UPC 搜索、按份量换算营养值,并可批量获取或并排比较食品。
主要功能
- 01按关键词、食材或 UPC 搜索食品
- 02获取食品完整营养档案
- 03按份量换算营养数值
- 04批量查询并比较食品营养
- 05检索营养素参考表
适用场景
- 01查找特定食品及其营养成分
- 02比较不同食品的营养值
- 03按指定份量估算营养摄入
MCP 相关
作为 MCP 服务,它向客户端提供食品搜索、营养档案、比较工具,以及食品和营养素资源。支持 STDIO 与 Streamable HTTP;FoodData Central 数据工具需要 API 密钥,静态营养素参考表无需密钥。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://usda.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-usda https://usda.caseyjhand.com/mcp{"mcpServers":{"cyanheads-usda":{"type":"http","url":"https://usda.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-usda":{"type":"http","url":"https://usda.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-usda":{"type":"http","url":"https://usda.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-usda":{"serverUrl":"https://usda.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
5| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| category | enum | 否 | 按营养素类别筛选。省略则返回所有约 150 种受跟踪营养素。选项:macronutrients、vitamins、minerals、lipids、amino_acids、other。macronutrients | vitamins | minerals | lipids | amino_acids | other |
详细介绍
@cyanheads/usda-mcp-server
通过 MCP 搜索食品、比较营养成分,并查询 USDA FoodData Central 完整数据库。支持 STDIO 或 Streamable HTTP。
公共托管服务: https://usda.caseyjhand.com/mcp
概览
USDA FoodData Central 收录了约 400,000 种食品的营养数据,是美国政府的权威食品成分数据库。可按关键词或 UPC 搜索,获取按任意份量换算的完整营养成分信息,并排比较不同食品。
工具
| 工具 | 描述 |
|---|---|
usda_search_foods | 按关键词、配料或 UPC/GTIN 搜索 SR Legacy、Foundation、Survey (FNDDS) 和 Branded 数据源中的食品 |
usda_get_food | 根据 FDC ID 获取单种食品的完整营养成分信息,可选按份量换算 |
usda_get_foods | 在单个请求中批量获取 2–20 个 FDC ID 对应的营养成分信息 |
usda_compare_foods | 并排比较 2–5 种食品的营养成分,并格式化为 Markdown 表格 |
usda_list_nutrients | 静态 FDC 营养素参考表(约 150 种营养素),包含 ID、名称、单位和类别 |
资源
| 资源 | 描述 |
|---|---|
usda://food/{fdcId} | 根据 FDC ID 获取指定食品的完整营养成分信息 |
usda://nutrients | 完整的 FDC 营养素参考列表 |
skill://usda-guide/SKILL.md | 面向 Agent 的食品选择、份量重量和营养素缺失情况指南 |
也可以通过工具访问食品资料和营养素参考信息。读取食品资源前,先使用 usda_search_foods 查找 FDC ID。
功能参考
usda_search_foods 工具
- 按关键词、食材名称或 UPC/GTIN 代码查询;可选使用
dataType[]筛选 SR Legacy、Foundation、Survey (FNDDS) 和 Branded,默认值为["SR Legacy"](设置brandOwner后则默认为["Branded"]) - 使用
brandOwner和foodCategory筛选结果;通过pageSize(最大 50,默认 10)和pageNumber分页 - 返回 FDC ID 及可用的预览营养素:蛋白质 (1003)、脂肪 (1004)、碳水化合物 (1005)、纤维 (1079) 和能量 (1008、1062、2047、2048)。保留原始数值、单位、顺序和不同的能量估算值;省略缺失项。要获取其他营养素或完整营养成分,请使用
usda_get_food - 当查询有匹配项时,超过
totalPages的页面会返回空的foods[]、请求的页面、总数,以及包含有效pageNumber的提示 - 类型化错误:
query_empty(查询为空白)、query_syntax(FDC 拒绝了查询语法)、no_results(请求的数据源中没有匹配项)
usda_get_food 工具
- 获取一个
fdcId的完整营养成分;可选使用nutrients[]筛选特定 ID - 可选的
unit(g/oz/lb/kg/serving)配合可选的quantity,可按比例缩放 FDC 以每 100 g 为基准的所有数值;对于质量单位,quantity默认为 100;对于serving,默认为 1。serving使用第一个有效份量;如果没有份量,则使用以g/GRM/GM为单位的正有限 Branded 标签份量(不区分大小写),再乘以quantity servingInfo标明解析出的份量或标签份量及其克重;allPortions[]仅包含实际份量定义- 类型化错误:
not_found(FDC ID 无效)、quantity_without_unit、no_portion_data(没有有效份量或受支持的 Branded 克数标签)。体积、IU、毫克标签、缺失单位和无效大小都需要显式请求质量单位;不会推断密度
usda_get_foods 工具
- 一次调用批量获取 2–20 个 FDC ID;数值仅按每 100 g 返回(不按份量缩放)
- 强烈建议使用
nutrients[]筛选——20 种食物的完整营养成分会很大 - 按 ID 部分失败——未返回数据的 ID 会列入
failed[],不会导致整个批次中止
usda_compare_foods 工具
- 并排比较 2–5 个 FDC ID,按每种营养素一行、每种食物一列透视呈现
- 除非指定
nutrients[],否则默认比较 12 种常见营养素(能量、蛋白质、脂肪、饱和脂肪、碳水化合物、纤维、总糖、钠、钾、钙、铁、维生素 C) - 所有数值均缩放到统一的
quantity+unit基准(默认为 100 g;quantity是以unit为单位的数量,因此仅设置unit: "oz"时,比较基准为每 100 oz) - 部分 ID 未返回数据时,仍使用有效食物继续处理;只有解析出的食物少于 2 种时才会抛出
too_few_foods - 过滤掉所有食物在该营养素下均为 null 的行
usda_list_nutrients 工具
- 静态参考表,列出约 150 种受追踪的 FDC 营养素——不调用 API
- 可选的
category筛选:macronutrients、vitamins、minerals、lipids、amino_acids、other - 返回每种营养素的 ID、名称、SR 参考编号、单位和类别——可将名称解析为其他位置
nutrients[]使用的 ID
usda://food/{fdcId} 资源
- 数据与
usda_get_food相同,但不按份量缩放——以application/json格式返回每 100 g 的完整营养成分 fdcId必须是纯正整数(不带正负号、前导零、小数或指数);其他任何值都会抛出invalid_id- 如果该 ID 在 FDC 中不存在,则返回
not_found
usda://nutrients 资源
- 完整的 FDC 营养素参考表——内容与未指定类别筛选的
usda_list_nutrients相同 - 以
application/json格式提供,并附带 1 小时的公共缓存提示,因为该表在构建时已打包,且对所有调用方都相同
skill://usda-guide/SKILL.md 资源
关于如何匹配食物记录、选择份量重量,以及报告营养素覆盖不完整情况的指南。插件安装包、npm、Docker 和桌面套件中均附带相同的 usda-guide。
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及支持可选 OpenTelemetry 跟踪的结构化日志记录。
FoodData Central 专属功能:
- USDA FoodData Central REST API(
api.nal.usda.gov/fdc/v1)的类型安全客户端 - 规范化层,可处理搜索、单条食物和批量端点返回的不一致 API 响应格式
- 批量 API 端点(
/foods),支持报告每种食物的部分失败情况 - 检测 HTML 响应(限流代理会返回 200 HTML),并明确报告服务不可用错误
- 静态营养素参考字典——约 150 种营养素,包含 FDC ID、SR 编号、单位和类别;无需调用 API
便于 Agent 使用的输出:
- 保留来源信息——每条食物结果都包含 FDC 数据来源(
dataType),让调用方知道读取的是经过整理的研究数据,还是从标签提取的品牌值 - 部分失败报告——批量工具(
usda_get_foods、usda_compare_foods)会在返回成功结果的同时,提供结构化的failed[]/missingData[]条目,而不是让整个请求失败 - 交叉引用提示——描述中包含 FDC ID 和工具名称,让 Agent 明确知道接下来要调用哪个工具(搜索 → 获取 → 比较工作流)
开始使用
连接到托管实例,无需安装:
claude mcp add --transport http usda-mcp-server https://usda.caseyjhand.com/mcp
或在本地运行:
claude mcp add usda-mcp-server -e USDA_FDC_API_KEY=your-key -- npx -y @cyanheads/usda-mcp-server
对于其他客户端,将以下内容添加到 MCP 配置文件中:
{
"mcpServers": {
"usda-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/usda-mcp-server"],
"env": { "USDA_FDC_API_KEY": "your-api-key" }
}
}
}
前往 api.data.gov/signup 免费获取密钥。搜索、查询和比较食物都需要密钥;静态营养素参考功能则不需要。如需使用 Docker 或从源码构建,请参阅运行服务。
配置
| 变量 | 描述 | 默认值 |
|---|---|---|
USDA_FDC_API_KEY | FoodData Central 相关工具所必需(搜索、获取、批量处理、比较)——启动服务或使用 usda_list_nutrients 无需此密钥。前往 api.data.gov 免费获取。 | — |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务的端口。 | 3010 |
MCP_AUTH_MODE | 身份验证模式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <project-root>/logs |
STORAGE_PROVIDER_TYPE | 存储后端。 | in-memory |
OTEL_ENABLED | 启用 OpenTelemetry 埋点(跨度、指标、完成日志)。 | false |
完整的可选覆盖项列表,请参阅 .env.example。
运行服务
需要 Bun v1.4.0 或更高版本(或 Node.js v24+)。
本地开发
git clone https://github.com/cyanheads/usda-mcp-server.git
cd usda-mcp-server && bun install
cp .env.example .env # set USDA_FDC_API_KEY
-
构建并运行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker run --rm -e USDA_FDC_API_KEY=your-key -p 3010:3010 ghcr.io/cyanheads/usda-mcp-server:latest
镜像默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/usda-mcp-server。如需使用 stdio,请运行 docker run -i --rm -e MCP_TRANSPORT_TYPE=stdio -e USDA_FDC_API_KEY=your-key ghcr.io/cyanheads/usda-mcp-server:latest。如需在本地构建,请运行 docker build -t usda-mcp-server .;默认会安装 OpenTelemetry 对等依赖项,如需省略这些依赖项,可使用 --build-arg OTEL_ENABLED=false 构建。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口点 — 注册工具和资源,并初始化 FdcService。 |
src/config | 使用 Zod 解析和验证服务专用环境变量(USDA_FDC_API_KEY)。 |
src/mcp-server/tools | 工具定义(*.tool.ts)— 搜索、获取、批量处理、比较、列出营养素。 |
src/mcp-server/resources | 资源定义(*.resource.ts)— 食品档案和营养素参考资料。 |
src/services/fdc | FdcService — USDA FDC API 客户端、数据规范化和静态营养素参考数据。 |
skills/ | 为调用该服务的 Agent 提供的已发布指南。 |
tests/ | 与 src/ 对应的单元测试 — 覆盖每个工具、资源和 FDC 服务。 |
开发指南
开发指南和架构规则请参阅 CLAUDE.md。简要说明:
- 处理程序抛出异常,由框架捕获 — 工具逻辑中不使用
try/catch - 使用
ctx.log记录请求范围内的日志,使用ctx.state存储租户范围内的数据 - 通过
src/mcp-server/*/definitions/index.ts中的 barrel 文件注册新工具和资源 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不伪造缺失字段
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0 — 详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。