foodnear-me

foodnear-me

MCP server for AI-native restaurant discovery with three-tier search (verified, menu_indexed, discovered), Menu Protocol menus, and structured menu validation.

Category
Visit Server

README

Food Near Me — MCP Server

Model Context Protocol server for AI-native restaurant discovery — three-tier search (verified → menu_indexed → discovered), Menu Protocol menus, and structured menu validation. Plug into Claude Desktop, Cursor, ChatGPT, or any MCP host in about 30 seconds.

MCP Registry

Production endpoint: https://foodnear.me/mcp · 8 tools · 4 resources · 3 prompts · No API key (beta)


Quick start {#quick-start}

1. Add this to your MCP host config

Cursor~/.cursor/mcp.json (macOS/Linux) or %USERPROFILE%\.cursor\mcp.json (Windows)

Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS), %APPDATA%\Claude\claude_desktop_config.json (Windows)

{
  "mcpServers": {
    "foodnear-me": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://foodnear.me/mcp"]
    }
  }
}

2. Restart your MCP host

3. Try a prompt

“Find vegan Thai restaurants near Brooklyn Bridge and show me a menu for the top result.”

Your agent should call search_restaurantsget_menu (or get_restaurant first).


What you get

Tools (8)

Tool Description
search_restaurants Three-tier geo search by lat/lng — verified → menu_indexed → discovered; check menu_available before get_menu
get_restaurant Restaurant profile with Schema.org JSON-LD + Menu Protocol extensions
get_menu Full Menu Protocol v1.0 menu (dietary flags, allergens, signatures)
get_ado_score_breakdown ADO score factors and improvement recommendations
validate_menu_protocol Validate a Menu Protocol JSON payload before publish
explore_area_for_diet Composite: bucketed neighborhood overview (verified / menu_indexed / discovered); optional dietary filter narrows the verified tier only
compare_restaurants_for_diet Composite: compare 2–5 known restaurants by dietary-eligible menu items and trust tier ranking
find_restaurants_along_route Composite: route-adjacent restaurant discovery between origin/destination with optional dietary ranking

Resources (4)

URI Content
foodnearme://spec/menu-protocol Menu Protocol v1.0 specification
foodnearme://spec/openapi OpenAPI 3.1 spec pointer
foodnearme://agent/skill Agent skill summary
foodnearme://examples/search-flow Example search → menu flow

Prompts (3)

Prompt Args Guides agent to
find_dinner_near_me location (required), cuisine?, dietary? search_restaurantsget_menu
dietary_constrained_menu restaurant_id, restrictions get_menu with explicit MP flags/allergens
validate_my_menu strict? (true for strict mode) validate_menu_protocol

Configuration

Setting Value
MCP URL https://foodnear.me/mcp
Transport HTTP JSON-RPC (POST); discovery via GET /mcp
Auth None during beta (rate limits apply)
Registry me.foodnear/foodnear-me (official MCP Registry)

Preview / local: Replace the URL with http://localhost:3000/mcp when running npm run dev in apps/web.

Operational tool filter: set FNM_MCP_ENABLED_TOOLS=search_restaurants,get_menu to expose only a comma-separated subset in tools/list and GET /mcp. Leave unset or * to expose all tools. This is for temporary degradation/context control, not privacy or auth.


Architecture

┌─────────────────────┐     POST /mcp (JSON-RPC)     ┌─────────────────────────┐
│  MCP host           │ ────────────────────────────▶│  apps/web/app/mcp       │
│  (Cursor / Claude)  │     GET /mcp (discovery)     │  Next.js route handler  │
└─────────────────────┘                              └────────────┬────────────┘
                                                                │
                                                                ▼
                                                   ┌─────────────────────────┐
                                                   │  Supabase + PostGIS     │
                                                   │  Menu Protocol (MP)     │
                                                   └─────────────────────────┘

Implementation: apps/web/app/mcp/route.ts · Flow runner: apps/web/lib/mcp/mcp-flow-runner.ts


Tool error contract

Failed tools/call responses include structured metadata in _meta.error:

Field Meaning
code VALIDATION_ERROR · NOT_FOUND · UPSTREAM · RATE_LIMITED · UNKNOWN
message What went wrong
hint How to fix the request
retryable Whether the agent should retry
docs https://foodnear.me/docs#quick-start

Human-readable text is still in content[0].text for hosts that ignore _meta.


Verify

From repo root (with apps/web dev server running for localhost):

# Automated agent flows (14 flows when Supabase + seed configured; 11 without DB)
npm run test:mcp-flows

# Against production
npm run test:mcp-flows:http

# Discovery GETs + MCP tools/list count
npm run smoke:mcp

# Three-tier trust model copy parity (local files)
npm run check:discovery-copy

# Full deploy gate (13 checks + discovery copy on production URL)
npm run preflight -w web
# or: ./apps/web/scripts/deploy-preflight.sh https://foodnear.me

Production monitoring: GitHub Actions workflow MCP Production Smoke runs smoke:mcp daily and on manual dispatch (.github/workflows/mcp-smoke.yml).


Agent discovery

File URL
llms.txt https://foodnear.me/llms.txt
llms-full.txt https://foodnear.me/llms-full.txt
MCP manifest https://foodnear.me/.well-known/mcp-server.json
AgentRoot https://foodnear.me/.well-known/agentroot.json
Skill file https://foodnear.me/SKILL.md
OpenAPI https://foodnear.me/openapi.json
Web quick reference https://foodnear.me/docs

Scripted flows: apps/web/docs/example-agent-flows.md


Data trust model (three-tier search)

  • search_restaurants returns verifiedmenu_indexeddiscovered.
  • Every result includes verification_status and menu_available. Call get_menu only when menu_available is true.
  • Verified — owner-approved MP; authoritative for dietary/allergen claims.
  • menu_indexed — automated/public MP menu; cite with caveat — not owner-verified.
  • discovered — place only; do not cite menu items.
  • Trust progression: discoveredmenu_indexedverified. See https://foodnear.me/attribution for data sources.

FAQ

Do I need an API key?
No for beta MCP access. Future paid tiers may use API keys or x402 (USDC on Base). See x402-prepaid-spec.md in your local docs/Food Near Me playbook.

Tools not showing after restart?
Confirm the config URL ends with /mcp. Restart the host completely. Run npm run smoke:mcp against your target base URL.

Empty search results?
Beta verified menus are seeded for specific metros (e.g. Williamsburg, NYC). 7 menu_indexed restaurants in Williamsburg have automated menus from website ingest. Discovered place listings cover many US metros — use coordinates in an imported region. Demo coords: 40.7128, -74.006. Run npm run db:seed -w web locally for verified test data.

Cursor vs Claude config path?
See Quick start above — each host uses a different JSON file; only the mcpServers block matters.

How is this different from DoorDash / Uber Eats APIs?
We expose owner-verified Menu Protocol data for agents — not scraped aggregator menus or ordering checkout.


Monorepo layout

This repository ships the MCP server inside the foodnear.me web app:

Path Purpose
apps/web Next.js app — MCP at /mcp, landing, API routes
packages/menu-protocol Menu Protocol schema + validators
database Migrations, seeds, schema
server.json Official MCP Registry metadata

Business strategy and runbooks live in a separate local docs folder (not in this repo) — see your team's docs/Food Near Me playbook.


Development

npm install
cd apps/web && cp .env.example .env.local   # Supabase keys
npm run dev                                 # http://localhost:3000
npm run test:mcp-flows                      # POST localhost:3000/mcp

Operator: menu_indexed website ingest

Promote discoveredmenu_indexed via free website/ordering-platform parsers (ChowNow API, order.online, Sauce, Squarespace, BentoBox, Toast, Playwright). Always dry-run first — headless is slow.

cd apps/web
npm run db:probe:menu-batch -- --headless --limit=10
npm run db:import:menu-indexed:website:headless:dry-run -- --limit=10
npm run db:import:menu-indexed:website:headless -- --limit=10   # live

No Uber Eats / DoorDash / Grubhub / RapidAPI scrapers. See apps/web/docs/example-agent-flows.md.


Links

  • Website: https://foodnear.me
  • GitHub: https://github.com/food-near-me/platform
  • Menu Protocol spec: https://github.com/foodnearme/menu-protocol
  • Support: https://foodnear.me/support · api@foodnear.me

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured