TL;DR: Structured dietary verdicts, not hallucinated text. We built an MCP server that gives AI agents structured dietary-fit verdicts across ~370K US restaurants, with confidence levels, reason codes, and an honest "unknown" option when evidence is thin. Try it out for free.
The problem with asking AI about dietary needs
Ask AI to recommend a strict-vegan restaurant in city X serving Y. Most likely, it will give you some hallucinated menu items, a simple gmaps link or just a guess based on what category tags it finds in Google for that specific place. The link between the actual evidence and the AI's verdict is, to put it mildly, blurry.
LLMs are very good at sounding confident, even if there is little basis for their claims. They will very rarely say "I don't know" — they always give you something. So if you want to use their output, take it with a huge grain of salt — it might be a miss as easily as it can be a win. And when a user has just told the assistant they're vegan, a confident guess is the worst kind of answer.
What we built: Compass MCP
This is exactly the pain point we are trying to solve with our Compass MCP server. We have 3 tools: compass_search, compass_enrich_restaurant, and compass_decide_fit. Behind those sits a dataset of ~370K US restaurants concentrated in the top 20 cities. For most of them we have parsed menus with dish-level structured fields; for the rest we work from review-derived signals and say so in the response.
We use semantic retrieval based on Voyage embeddings in a Qdrant database. Our VeganScore is computed deterministically from six weighted dimensions, not generated by an LLM (we use AI only to parse raw input). We did this specifically to reduce variability, and so the system says "unknown" instead of guessing when the evidence simply isn't there.
The three tools
compass_search — ask for recommendations for a specific type of restaurant, e.g. "vegan sushi in Austin," and get results matching your specific needs.
compass_enrich_restaurant — if you are looking for a specific restaurant, this tool adds Compass data to what you already have.
compass_decide_fit — check if a specific restaurant is a good fit for a user's dietary profile. Returns a structured verdict: fit, not_fit, or unknown.
Trying it out
Installation is one command:
npm i @compassfoodtech/mcp
The server starts and lists its tools without a key. To use it from Claude Desktop, Cursor, or any MCP-compatible client, add Compass to your client config:
{
"mcpServers": {
"compass": {
"command": "npx",
"args": ["-y", "@compass-food/mcp"],
"env": {
"COMPASS_API_KEY": "cmp_test_your_key_here"
}
}
}
}
For the COMPASS_API_KEY, grab a free Sandbox key from compassfoodtechnologies.com/signup — no credit card, 1,000 Compass credits per month.
Here's what a compass_search tool call looks like — a natural-language query plus optional location and user profile:
{
"query": "strict vegan bowls near Brooklyn Heights",
"location": {
"lat": 40.6958,
"lng": -73.9936,
"radius_m": 2500
},
"user_profile": {
"diet": "strict_vegan"
},
"limit": 5,
"include_evidence": true,
"mode": "rich"
}
And here's a trimmed example of what it returns:
{
"compass_request_id": "req_example_brooklyn_bowls",
"query_interpretation": {
"diet_inferred": "strict_vegan",
"dish_inferred": "bowls"
},
"results": [
{
"compass_id": "restaurant_123",
"name": "Example Vegan Bowls",
"address": { "city": "Brooklyn" },
"vegan_score": {
"overall": 86,
"dimensions": {
"D1_vegan_coverage": { "score": 95, "confidence": "high" }
}
},
"source_freshness": { "oldest_signal_age_days": 42 },
"evidence": [{
"type": "menu_item",
"source": "compass://deterministic-evidence/menu_dishes",
"excerpt": "8 vegan bowls identified from the parsed menu."
}],
"match_for_profile": {
"decision": "fit",
"confidence": "high",
"reason_codes": ["VEGAN_MENU_CONFIRMED", "HIGH_CONFIDENCE_DECISION"],
"recommended_user_text": "Strong vegan menu evidence. Kitchen practices are not verified."
}
}
]
}
The whole shape is the wedge here. Look at match_for_profile: decision is one of fit, not_fit, or unknown; confidence is high, medium, or low; reason_codes is a structured array of evidence codes your agent can branch on; and evidence is the actual trail of menu items and signals the verdict was built from. The unknown option is intentional — when evidence is stale or conflicting, the verdict comes back as unknown instead of a forced guess.
What Compass doesn't do
Of course, Compass has its limitations. It covers vegan suitability only. It does not cover allergens or cross-contamination, and it is not a certification service. If your users' needs are medical, you need a different source.
The most expensive lesson on the way here came from an early allergen system. We had restaurant-level flags for the EU-14 allergens, generated by an AI pipeline. One example in the system prompt cascaded through the model's outputs and flagged 99.93% of around 370K restaurants as containing gluten. Oops. We pulled allergen claims out of the product entirely, and that's where they stay.
How to get started
Install: npx -y @compass-food/mcp
Free Sandbox key: compassfoodtechnologies.com/signup
Repo: github.com/compass-food/compass-mcp
Docs: compassfoodtechnologies.com/docs/mcp
We'd love feedback from anyone building food, travel, or local-discovery agents. Especially curious where the Decision tool's unknown verdict feels too conservative, or not conservative enough — drop a comment below or open an issue on the repo.
Top comments (0)