Skip to main content
Glama

NutriRef

NutriRef MCP server

Pay-per-call USDA nutrition data for AI agents. Structured FoodData Central via the x402 micropayment protocol — agents pay $0.001–$0.005 in USDC per request, no signup, no API keys, no human auth flows.

Live at https://nutriref.xyz. Spec at /openapi.json · Swagger at /docs · Bazaar discovery at /.well-known/x402.

Endpoints

Method

Path

Price

Cache

GET

/v1/nutrition/search?q=&limit=

$0.001

24h

GET

/v1/nutrition/detail/{fdc_id}

$0.002

7d

POST

/v1/nutrition/compare

$0.003

derived

POST

/v1/nutrition/recipe

$0.005

derived

All values per 100g. Missing nutrients are null, not 0. compare returns per-nutrient winners (highest protein, lowest sodium, etc.). recipe scales by grams and sums.

Related MCP server: Nutrition By Api Ninjas MCP Server

Use it from Claude (or any MCP agent)

NutriRef ships an MCP server that exposes the four endpoints as native tools. Install it from PyPI:

pip install nutriref-mcp

Then add this to your MCP client config (Claude Desktop's claude_desktop_config.json, Claude Code's MCP settings, etc.):

{
  "mcpServers": {
    "nutriref": {
      "command": "nutriref-mcp",
      "env": {
        "PAYER_PRIVATE_KEY": "0x...your-funded-wallet-key...",
        "NUTRIREF_BASE_URL": "https://nutriref.xyz"
      }
    }
  }
}

Prefer not to install? Use uvx nutriref-mcp as the command to run it on demand. To work from a clone instead, pip install -e ".[mcp]" and set command to python with args: ["-m", "mcp_server"].

The wallet needs USDC on Base mainnet — gas is sponsored by the facilitator, so you only need stablecoin balance. The agent now has nutrition_search, nutrition_detail, nutrition_compare, nutrition_recipe and auto-pays per call.

Use it from any HTTP client

Unpaid requests get 402 Payment Required with x402 payment instructions. Any x402-aware client signs a gasless USDC authorization (EIP-3009) and retries automatically:

import asyncio
from eth_account import Account
from x402.client import x402Client
from x402.http.clients.httpx import wrapHttpxWithPayment
from x402.mechanisms.evm.exact import register_exact_evm_client

account = Account.from_key("0x...funded-wallet-key...")
client = x402Client(); register_exact_evm_client(client, account)

async def main():
    async with wrapHttpxWithPayment(client, base_url="https://nutriref.xyz") as http:
        r = await http.get("/v1/nutrition/detail/2012128")
        print(r.json())

asyncio.run(main())

Response example

GET /v1/nutrition/detail/173944:

{
  "fdc_id": 173944,
  "description": "Banana, raw",
  "data_type": "Foundation",
  "serving_size": 100, "serving_size_unit": "g",
  "calories": 89.0,  "protein": 1.1,    "fat": 0.3,
  "carbs": 22.8,     "fiber": 2.6,      "sugar": 12.2,
  "sodium": 1.0,     "cholesterol": null, "saturated_fat": 0.1,
  "vitamin_c": 8.7,  "calcium": 5.0,    "iron": 0.3,  "potassium": 358.0
}

Self-hosting

NutriRef is open source; the live instance at nutriref.xyz is one deployment among many possible. To run your own:

cp .env.example .env
# fill in USDA_API_KEY (free at https://fdc.nal.usda.gov/api-key-signup.html)
# and X402_RECEIVER_ADDRESS (an EVM address that should receive payments)
docker compose up --build
curl http://localhost:8000/health

Configuration

Var

Required

Default

Purpose

USDA_API_KEY

yes

—

Free key from fdc.nal.usda.gov

USDA_BASE_URL

no

https://api.nal.usda.gov/fdc/v1

REDIS_URL

no

redis://redis:6379/0

Response cache

X402_NETWORK

no

base-sepolia

base for mainnet

X402_RECEIVER_ADDRESS

yes

—

EVM address that receives USDC

X402_FACILITATOR_URL

no

https://x402.org/facilitator

https://api.cdp.coinbase.com for mainnet

CDP_API_KEY_ID

mainnet only

—

Coinbase Developer Platform key ID

CDP_API_KEY_SECRET

mainnet only

—

Coinbase Developer Platform key secret

LOG_LEVEL

no

INFO

For mainnet you need a Coinbase CDP account and the public x402 facilitator at https://api.cdp.coinbase.com. Testnet works for free with the community facilitator at https://x402.org/facilitator.

Architecture

agent → x402 middleware → route handler → cache (Redis) → USDA FDC API

search and detail cache USDA responses directly. compare and recipe compose from the cached detail data — no extra USDA calls when warm. The cache is a meaningful cost lever: warm requests return in <50ms and never hit USDA.

Tests

pip install -e ".[dev]"
pytest

Example: Claude agent that uses NutriRef

examples/meal-planner/ is a complete, ~150-line agent that gives Claude the four NutriRef endpoints as tools and asks it to plan a day of meals hitting a calorie/protein goal. Worth reading if you're wiring NutriRef into your own agent — the tool schemas and the payment loop are all there. See examples/meal-planner/README.md.

Repo layout

app/                # FastAPI service
  main.py             # app factory + x402 init
  routes/             # search, detail, compare, recipe
  landing.py          # / (public landing page)
  discovery.py        # /.well-known/x402, /llms.txt, /.well-known/ai-plugin.json, /logo.svg
  usda.py             # async USDA client
  cache.py            # Redis wrapper
  normalize.py        # USDA → flat 13-nutrient schema
mcp_server/         # MCP server wrapper for agent use
examples/           # worked agent examples (meal planner)
scripts/            # CDP wallet bootstrap + payer-side test
tests/              # pytest + respx + fakeredis

Acknowledgments

Available Tools

4 tools
nutrition_compareA

Compare 2 to 5 foods side by side. Use this when the user asks "which is healthier," "which has more protein," or any cross-food comparison — it's cheaper and clearer than calling nutrition_detail multiple times. Returns each food's full nutrition plus per-nutrient winners (highest protein, lowest sodium, etc.). Charges $0.003 USDC per call.

Args: fdc_ids: 2 to 5 USDA FDC IDs to compare.

Inputs: fdc_ids (required). Returns: object

nutrition_detailA

Get the full per-100g nutrition profile for one specific food. Use this when you have an fdc_id (from nutrition_search) and the user needs micronutrients beyond just calories/protein/carbs/fat. Returns all 13 tracked nutrients: calories, protein, fat, carbs, fiber, sugar, sodium, cholesterol, saturated_fat, vitamin_c, calcium, iron, potassium. Missing nutrients are null, not 0. Charges $0.002 USDC per call.

Args: fdc_id: USDA FoodData Central ID, obtained from nutrition_search.

Inputs: fdc_id (required). Returns: object

nutrition_recipeA

Sum nutrition across a recipe of weighted ingredients. Use this for meal planning, recipe analysis, or any "what are the totals if I combine X grams of A with Y grams of B" task. Each food's per-100g nutrition is scaled by grams/100 then summed. Charges $0.005 USDC per call.

Args: ingredients: List of {"fdc_id": int, "grams": float} pairs. At least one; weights in grams.

Inputs: ingredients (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.7/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool has a clear, distinct purpose: search for foods, get detailed nutrition for one food, compare multiple foods, and sum recipe nutrition. No overlapping functionality.

    Naming Consistency5/5

    All tools follow a consistent 'nutrition_' prefix with descriptive verbs/nouns (search, detail, compare, recipe), making the naming pattern predictable and clear.

    Tool Count5/5

    Four tools is well-scoped for a nutrition database server, covering essential operations without redundancy or excessive overhead.

    Completeness5/5

    The set covers the full lifecycle of working with USDA food data: search, retrieve details, compare, and aggregate recipe totals. No obvious gaps for typical use cases.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides intelligent access to the USDA nutrition database through AI assistants, enabling users to search foods, compare nutritional content, find foods high in specific nutrients, and query authoritative nutrition data across 7,146+ food items through natural language.
      1
      -
    • A
      license
      C
      quality
      D
      maintenance
      Provides access to the Nutrition By Api Ninjas API to extract detailed nutritional information from natural language food queries. It enables users to retrieve data such as calories, vitamins, and macros from text descriptions of meals.
      1
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Pay-per-call x402 data products on Base mainnet — sanctions screening, aviation weather, mortgage rates, US property dossier, title chain, wallet balance, and agent session auth. Every call settles in USDC with an on-chain receipt, no accounts or API keys.
      7
      115 npm
      MIT