Model Context Protocol
Connect your AI agent
Plug foodnear.me into Claude Desktop, Cursor, or any MCP host — 8 tools (5 atomic + 3 FNM-unique composites), 4 resources, 3 prompts, no API key during beta.
Quick start
- Open ~/.cursor/mcp.jsonor Claude Desktop's claude_desktop_config.json
- Paste the config below
- Restart your MCP host
{
"mcpServers": {
"foodnear-me": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://foodnear.me/mcp"]
}
}
}Endpoint: https://foodnear.me/mcp · mcp-server.json · llms.txt · SKILL.md · usage stats
Atomic tools (5)
search_restaurants— three-tier search (verified → menu_indexed → discovered). Accepts flatlat/lngor Google-stylelocationBias.circle. Checkmenu_availablebeforeget_menu.get_restaurant— Schema.org JSON-LD profile with Menu Protocol extensions.get_menu— Menu Protocol v1.0 menu (dietary booleans, allergens, Ed25519 signature on verified tier).get_ado_score_breakdown— ADO factors + improvement recommendations.validate_menu_protocol— validate Menu Protocol JSON before publish (strict mode available).
FNM-unique
Composite tools (3)
Higher-level tools that chain atomic calls. These exist because they leverage FNM's signed-menu data — a generic place-search MCP can't produce equivalent results.
explore_area_for_diet— bucketed neighborhood overview (verified / menu_indexed / discovered) withtier_countsandnext_steps.compare_restaurants_for_diet— side-by-side dietary comparison across 2-5 restaurants, ranked by item count then trust tier.find_restaurants_along_route— route-adjacent discovery between two coordinates. Optionalroute_polylinefrom your routing source; otherwise local great-circle approximation (no external routing service ever).
Example interactions
Paste any of these prompts into Cursor or Claude Desktop after the quick start. They exercise different tools.
search → get_menu (verified dietary discovery)
Find restaurants in Williamsburg, Brooklyn with verified vegan options. Use search_restaurants, prefer the verified tier, then call get_menu and list the dietary.vegan items by price.
compare_restaurants_for_diet (FNM-unique)
I'm choosing between these two cafes in Williamsburg: • <restaurant_id_A> • <restaurant_id_B> Which one has more gluten-free menu items? Use compare_restaurants_for_diet with dietary=["gluten_free"].
find_restaurants_along_route (FNM-unique)
I'm walking from McCarren Park (40.7218, -73.9569) to the Brooklyn Bridge (40.7061, -73.9969). Suggest 3 stops along the way that have vegan options. Use find_restaurants_along_route.
Resources
- foodnearme://spec/menu-protocol
- foodnearme://spec/openapi
- foodnearme://agent/skill
- foodnearme://examples/search-flow
Prompts
find_dinner_near_me— location + optional cuisine/dietarydietary_constrained_menu— restaurant_id + restrictionsvalidate_my_menu— validate Menu Protocol JSON before publish
Tool errors
Failed tool calls return _meta.error with code, hint, and retryable so agents can self-correct.
VALIDATION_ERROR · NOT_FOUND · UPSTREAM
Data trust (three-tier search)
search_restaurants returns verified → menu_indexed → discovered (place only when no menu).
verified+menu_available: true— owner-approved MP, Ed25519-signed (content-bound onfnm-v1); authoritative for dietary/allergen claimsmenu_indexed+menu_available: true— automated / public menu; cite with caveat, do not treat dietary/allergens as authoritativediscovered+menu_available: false— place data only; do not cite menu items- Trust progression:
discovered→menu_indexed→verified
Owner recruitment payload
Every non-verified result (search row, profile, indexed menu, composite entry) ships with an optional structured claim_invitationobject — owner recruitment data, not a CTA. Surface it only when relevant: the user is the restaurant's owner, the user asks why the listing lacks a verified menu, or the user asks how to help.
"claim_invitation": {
"url": "https://foodnear.me/claim/<restaurant_id>",
"audience": "owner_or_advocate",
"reason": "no_owner_approved_menu" | "indexed_menu_not_owner_verified",
"message": "...",
"estimated_minutes": 5,
"cost": "free"
}Verified results omit the field. Details: SKILL.md.
Compatible with Google Maps MCP shape
search_restaurants accepts either the flat FNM shape or Google-style locationBias.circle + textQuery, plus the cablate variant. Responses carry both citation and attribution (identical) so existing local-search agents drop in without retraining. Locale hints (languageCode, regionCode) are accepted and echoed; FNM is US-English only in v1.
Canonical host documentation (FAQ, verify commands, architecture): GitHub README · foodnear.me