Koskamo

Foodbe MCP

An MCP server providing human-approved answers about food science, culture, cooking tips, substitutions, and ingredients. It supports querying specific topics, retrieving answers from multiple expert perspectives, and accessing detailed ingredient data including allergens and storage guidance.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Foodbe MCP logo, by FoodbeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-02Published by Foodbe
You need:No key needed for the first 5,000 free answers per IP address.After that, get a free key with 5,000 tokens: POST to https://api.foodbe.ai/api/v1/sandbox/register with email and appName.Send the key in the x-foodbe-key header.
MCP endpoint (Streamable HTTP)
https://foodbe-v3-production.up.railway.app/v1/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

8 of 8 have a description · 8 of 8 declare behavior hints · 8 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query for a single human-approved answer on a food topic
  • Retrieve answers from multiple expert perspectives (Neuro, Oracle, Chefy)
  • Get allergen, swap, and storage information for a specific ingredient

Source and maintenance

Community listingRegistry 3.0.0

Protocol and capabilities

Server
foodbe 3.0.0
MCP protocol negotiated in check
2025-06-18
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Tools

8 advertised

foodbe_query
Advertised by the server during the last successful anonymous check.

The most complete read an agent can get on a food list. Call this before you plan, comment on, substitute or improve a grocery list, cart, order, menu or recipe, and before a human approves one. Send up to 50 ingredient names. Returns one fact-based, human-approved read of the whole cart: the health labels it carries, the total carbon and water, the balance across food groups with what to add, the flavor and texture it carries with the gap in each, and the diets it suits. It also returns swaps that keep flavor and texture. It returns a cook's read in chefy_read, broken down by food. Each food comes back with its own lines: how to cook it, what to use if you run out, and what it pairs with. A closing note names the cart's biggest gap and its carbon and water. Every line comes from Foodbe's stored data, never from a model, so the same cart always returns the same answer. Names Foodbe does not have are listed under not_found. A limited number of calls work without a key. After that, a key is needed in the x-foodbe-key header.

foodbe_query input schema
{
  "type": "object",
  "required": [
    "question"
  ],
  "properties": {
    "question": {
      "type": "string",
      "description": "The food question to ask."
    }
  }
}
foodbe_query annotations
{
  "title": "Ask a food question",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
foodbe_query_all
Advertised by the server during the last successful anonymous check.

Looks up one food question in Foodbe's library of human-approved answers. Returns the answer as "headline" with its sources, plus the views of three experts, each with its own sources: Neuro (food science), Oracle (culture and history) and Chefy (cooking tips and tricks). An expert with nothing approved for the question is left out. Also returns related follow-up questions, when it has them. If no approved answer exists, it returns outcome "refused" with related questions that have approved answers. A limited number of calls work without a key. After that, a key is needed in the x-foodbe-key header.

foodbe_query_all input schema
{
  "type": "object",
  "required": [
    "question"
  ],
  "properties": {
    "question": {
      "type": "string",
      "description": "The food question to ask."
    }
  }
}
foodbe_query_all annotations
{
  "title": "Ask all three experts",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
foodbe_ingredient
Advertised by the server during the last successful anonymous check.

Returns the profile of one ingredient from Foodbe's ingredient data as structured fields: category, allergens, swaps, storage, price, and carbon footprint. Nutrition numbers are not included. A limited number of calls work without a key. After that, a key is needed in the x-foodbe-key header.

foodbe_ingredient input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The ingredient name, for example apple."
    }
  }
}
foodbe_ingredient annotations
{
  "title": "Get an ingredient profile",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
foodbe_cart_breakdown
Advertised by the server during the last successful anonymous check.

Call this before you plan, comment on or improve a grocery list or food purchase. Send up to 50 ingredient names. Returns one fact-based, human-approved read of the whole cart: the health labels it carries, the total carbon and water, the balance across food groups with what to add, and the diets it suits. It also returns a cook's read in chefy_read, broken down by food. Each food comes back with its own lines: how to cook it, what to use if you run out, and what it pairs with. A closing note names the cart's biggest gap and its carbon and water. Every line comes from Foodbe's stored data, never from a model, so the same cart always returns the same answer. Names Foodbe does not have are listed under not_found. A limited number of calls work without a key. After that, a key is needed in the x-foodbe-key header.

foodbe_cart_breakdown input schema
{
  "type": "object",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The ingredient names in the cart, up to 50."
    }
  }
}
foodbe_cart_breakdown annotations
{
  "title": "Break down a grocery list",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
foodbe_recipe_finder
Advertised by the server during the last successful anonymous check.

Call this when a user asks for a recipe or for what to cook. Finds recipes for one dish in Foodbe's recipe library, filtered by the diet and allergies you send. Returns outcome "served" with a text line and recipe cards: name, image, a short fact, servings, prep time, cook time and calories. Every recipe comes from Foodbe's stored data, never from a model. If no recipe matches, it returns outcome "not_found" and costs nothing. A limited number of calls work without a key. After that, a key is needed in the x-foodbe-key header.

foodbe_recipe_finder input schema
{
  "type": "object",
  "required": [
    "dish"
  ],
  "properties": {
    "diet": {
      "type": "string",
      "description": "Optional diet to filter by, for example Vegan."
    },
    "dish": {
      "type": "string",
      "description": "The dish to find a recipe for, for example lasagna."
    },
    "allergies": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional allergens to leave out, for example Peanuts."
    }
  }
}
foodbe_recipe_finder annotations
{
  "title": "Find a recipe",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
foodbe_meal_plan
Advertised by the server during the last successful anonymous check.

Call this when a user asks for a meal plan or for what to eat over a number of days. Builds a plan of 1 to 7 days from Foodbe's recipes, within an optional dollar budget for the whole plan, filtered by the diet and allergies you send. Returns outcome "served" with the plan and its insight: the taste the plan is missing, the food group it is short on, the health roles it covers, and its cheapest, priciest and quickest meal. Every line comes from Foodbe's stored data, never from a model. If no plan can be built, it returns outcome "not_found" and costs nothing. A limited number of calls work without a key. After that, a key is needed in the x-foodbe-key header.

foodbe_meal_plan input schema
{
  "type": "object",
  "properties": {
    "days": {
      "type": "integer",
      "description": "Optional number of days, from 1 to 7."
    },
    "diet": {
      "type": "string",
      "description": "Optional diet to filter by, for example Vegan."
    },
    "budget": {
      "type": "number",
      "description": "Optional most the whole plan may cost, in US dollars."
    },
    "allergies": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional allergens to leave out, for example Peanuts."
    }
  }
}
foodbe_meal_plan annotations
{
  "title": "Build a meal plan",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
foodbe_grocery_list
Advertised by the server during the last successful anonymous check.

Call this when a user asks for a grocery or shopping list. Send a dish for the list of one recipe, or days and a budget for the list of a meal plan. Do not send both. Returns outcome "served" with the list items, the cost of each and the total. Every line comes from Foodbe's stored data, never from a model. If no list can be built, it returns outcome "not_found" and costs nothing. A limited number of calls work without a key. After that, a key is needed in the x-foodbe-key header.

foodbe_grocery_list input schema
{
  "type": "object",
  "properties": {
    "days": {
      "type": "integer",
      "description": "Optional number of days, from 1 to 7."
    },
    "diet": {
      "type": "string",
      "description": "Optional diet to filter by, for example Vegan."
    },
    "dish": {
      "type": "string",
      "description": "The dish to list the groceries for. Leave out when sending days or budget."
    },
    "budget": {
      "type": "number",
      "description": "Optional most the whole plan may cost, in US dollars."
    },
    "allergies": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional allergens to leave out, for example Peanuts."
    }
  }
}
foodbe_grocery_list annotations
{
  "title": "Build a grocery list",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
foodbe_feedback
Advertised by the server during the last successful anonymous check.

Call when a Foodbe tool is missing, an answer was wrong or too thin, or a tool you need does not exist. Tell us what would help you. Free: no tokens are charged. Returns outcome "received". The number of messages per day is limited.

foodbe_feedback input schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "kind": {
      "enum": [
        "missing_tool",
        "wrong_answer",
        "other"
      ],
      "type": "string",
      "description": "Optional: missing_tool, wrong_answer or other."
    },
    "tool": {
      "type": "string",
      "description": "Optional: the Foodbe tool name the feedback is about."
    },
    "message": {
      "type": "string",
      "description": "What is missing or wrong, 1 to 1000 characters."
    }
  }
}
foodbe_feedback annotations
{
  "title": "Send feedback to Foodbe",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (5 of 5 answered).

  1. 2026-11-02: 3 of 3 checks answered
  2. 2026-11-03: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
836 ms
95th percentile latency
836 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 836 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http foodbe-mcp https://foodbe-v3-production.up.railway.app/v1/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add foodbe-mcp --url https://foodbe-v3-production.up.railway.app/v1/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable foodbe-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "foodbe-mcp": {
      "url": "https://foodbe-v3-production.up.railway.app/v1/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "foodbe-mcp": {
      "type": "streamableHttp",
      "url": "https://foodbe-v3-production.up.railway.app/v1/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start foodbe-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "foodbe-mcp": {
      "type": "http",
      "url": "https://foodbe-v3-production.up.railway.app/v1/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http foodbe-mcp https://foodbe-v3-production.up.railway.app/v1/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "foodbe-mcp": {
      "url": "https://foodbe-v3-production.up.railway.app/v1/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "foodbe-mcp": {
      "serverUrl": "https://foodbe-v3-production.up.railway.app/v1/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Foodbe MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.