Koskamo

Foodbe MCP server

Foodbe is a service of food facts for agents. Its list analyzer checks up to 50 foods and returns health labels, carbon and water totals, food group balance, diets, flavor and texture gaps, swaps, and a cook's read for each food. It also returns cited food answers, recipes, meal plans and grocery lists, all from stored, human-approved data.

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 logo, by FoodbeVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-04Operated by Foodbe
MCP endpoint (Streamable HTTP)
https://www.foodbe.ai/api/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 Owner proved control of this listing's domain
  • Passed Endpoint answered the live check ·
  • Passed Endpoint and vendor documentation share a domain
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Check a grocery list for health labels, carbon and water totals, food group balance and diets
  • Get a cited answer to a food science, food history or cooking technique question
  • Find swaps that keep a food's flavor and texture
  • Build a meal plan or a grocery list within a budget
  • Find a recipe filtered by diet and allergies

Protocol and capabilities

Server
foodbe 3.0.0
MCP protocol negotiated in check
2025-11-25
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.

Call before you answer a question about food science, cooking technique, food culture, substitutions or ingredients. Foodbe looks the question up in its library of thousands of hand-curated, human-approved facts and returns the answer as "headline" with its sources, so you can explain the reasons behind a food choice to a human and be trusted for it. It 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, so you can say so instead of guessing. 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.

Call when you need the next level of food data to better explain your food decisions. Foodbe looks up one food question in its library of human-approved answers and 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.

Call before you recommend or swap an ingredient. 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. Every field comes from stored data, never from a model. 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.

Foodbe's list analyzer. Call this before you plan, comment on, substitute, improve or approve 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 list: what the list does for health, 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 list's biggest gap and its carbon and water. Every line comes from Foodbe's stored data, never from a model, so the same list 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 (9 of 9 answered).

  1. 2026-11-05: 4 of 4 checks answered
  2. 2026-11-06: 4 of 4 checks answered
  3. 2026-11-07: 1 of 1 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
1219 ms
95th percentile latency
1219 ms

Maintenance history

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

  • · probe · passed · 1219 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 https://www.foodbe.ai/api/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 --url https://www.foodbe.ai/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable foodbe in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "foodbe": {
      "url": "https://www.foodbe.ai/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "foodbe": {
      "type": "streamableHttp",
      "url": "https://www.foodbe.ai/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start foodbe and inspect its tools.
VS Code configuration
{
  "servers": {
    "foodbe": {
      "type": "http",
      "url": "https://www.foodbe.ai/api/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 https://www.foodbe.ai/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://www.foodbe.ai/api/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": {
      "serverUrl": "https://www.foodbe.ai/api/mcp"
    }
  }
}

Let your agent find its tools

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

Do you run Foodbe?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing