Food Near Me について
Food Near Me は、検証状況別に検索結果とメニューデータを整理する、AI エージェント向けのレストラン検索 MCP サーバーです。
主な機能
- 013段階のレストラン検索
- 02店舗プロフィールとメニュー
- 03食事条件とアレルゲン情報
- 04Menu Protocol の検証
- 05食事条件・ルート検索
活用シーン
- 01指定場所の近くで店舗を検索
- 02食事条件に合う店舗を比較
- 03メニューのアレルゲンや制限を確認
- 04経路沿いの店舗を検索
MCP 対応
MCP エンドポイントで8つのツール、4つのリソース、3つのプロンプトを提供します。店舗検索、プロフィール、メニュー、食事条件の比較、経路検索、Menu Protocol の検証に対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://foodnear.me/mcpclaude mcp add --transport http me-foodnear-foodnear-me https://foodnear.me/mcp{"mcpServers":{"me-foodnear-foodnear-me":{"type":"http","url":"https://foodnear.me/mcp"}}}Cursor で開く{"servers":{"me-foodnear-foodnear-me":{"type":"http","url":"https://foodnear.me/mcp"}}}VS Code で開く{"mcpServers":{"me-foodnear-foodnear-me":{"type":"http","url":"https://foodnear.me/mcp"}}}{"mcpServers":{"me-foodnear-foodnear-me":{"serverUrl":"https://foodnear.me/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
9このツールにパラメーターはありません。
詳細
Food Near Me — MCP サーバー
AI ネイティブなレストラン検索のための Model Context Protocol サーバー — 3 層の検索(verified → menu_indexed → discovered)、Menu Protocol のメニュー、構造化されたメニュー検証に対応しています。Claude Desktop、Cursor、ChatGPT、または任意の MCP ホストに約 30 秒で接続できます。
本番環境のエンドポイント: https://foodnear.me/mcp · 8 個のツール · 4 個のリソース · 3 個のプロンプト · API キー不要(ベータ版)
クイックスタート {#quick-start}
1. MCP ホストの設定に追加します
Cursor — ~/.cursor/mcp.json(macOS/Linux)または %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. MCP ホストを再起動します
3. プロンプトを試します
「ブルックリン橋の近くにあるビーガン向けタイ料理レストランを探して、最上位の結果のメニューを見せてください。」
エージェントは search_restaurants → get_menu(または先に get_restaurant)を呼び出します。
利用できる機能
ツール(8 個)
| ツール | 説明 |
|---|---|
search_restaurants | lat/lng による 3 層の地理検索 — verified → menu_indexed → discovered。get_menu の前に menu_available を確認します |
get_restaurant | Schema.org JSON-LD と Menu Protocol 拡張を含むレストランプロフィール |
get_menu | Menu Protocol v1.0 の完全なメニュー(食事制限フラグ、アレルゲン、看板メニュー) |
get_ado_score_breakdown | ADO スコアの要因と改善に関する推奨事項 |
validate_menu_protocol | 公開前に Menu Protocol の JSON ペイロードを検証します |
explore_area_for_diet | 複合機能:近隣エリアの分類別概要(verified / menu_indexed / discovered)。任意の dietary フィルターは verified 層のみを絞り込みます |
compare_restaurants_for_diet | 複合機能:食事制限に適合するメニュー項目数と信頼度層の順位に基づいて、既知の 2〜5 軒のレストランを比較します |
find_restaurants_along_route | 複合機能:出発地と目的地の間で、ルート沿いのレストランを検索し、任意で食事制限に基づいて順位付けします |
リソース(4 個)
| URI | 内容 |
|---|---|
foodnearme://spec/menu-protocol | Menu Protocol v1.0 仕様 |
foodnearme://spec/openapi | OpenAPI 3.1 仕様へのポインター |
foodnearme://agent/skill | エージェントスキルの概要 |
foodnearme://examples/search-flow | 検索 → メニューのフロー例 |
プロンプト(3 個)
| プロンプト | 引数 | エージェントの動作 |
|---|---|---|
find_dinner_near_me | location(必須)、cuisine?、dietary? | search_restaurants → get_menu |
dietary_constrained_menu | restaurant_id、restrictions | 明示的な MP フラグとアレルゲン情報を指定して get_menu を呼び出します |
validate_my_menu | strict?(厳格モードでは true) | validate_menu_protocol |
設定
| 設定項目 | 値 |
|---|---|
| MCP URL | https://foodnear.me/mcp |
| トランスポート | HTTP JSON-RPC(POST)。GET /mcp で検出 |
| 認証 | ベータ版の期間中は不要(レート制限が適用されます) |
| レジストリ | me.foodnear/foodnear-me(公式 MCP Registry) |
プレビュー/ローカル: apps/web で npm run dev を実行している場合は、URL を http://localhost:3000/mcp に置き換えます。
運用時のツールフィルター: FNM_MCP_ENABLED_TOOLS=search_restaurants,get_menu を設定すると、tools/list と GET /mcp でカンマ区切りのサブセットのみを公開します。すべてのツールを公開するには、未設定のままにするか * を設定します。これは一時的な機能縮退やコンテキスト制御のためのものであり、プライバシーや認証のためのものではありません。
アーキテクチャ
┌─────────────────────┐ POST /mcp (JSON-RPC) ┌─────────────────────────┐
│ MCP host │ ────────────────────────────▶│ apps/web/app/mcp │
│ (Cursor / Claude) │ GET /mcp (discovery) │ Next.js route handler │
└─────────────────────┘ └────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Supabase + PostGIS │
│ Menu Protocol (MP) │
└─────────────────────────┘
実装:apps/web/app/mcp/route.ts · フローランナー:apps/web/lib/mcp/mcp-flow-runner.ts
ツールエラーの仕様
tools/call が失敗した場合、構造化メタデータが _meta.error に含まれます。
| フィールド | 意味 |
|---|---|
code | VALIDATION_ERROR · NOT_FOUND · UPSTREAM · RATE_LIMITED · UNKNOWN |
message | エラーの内容 |
hint | リクエストの修正方法 |
retryable | エージェントが再試行すべきかどうか |
docs | https://foodnear.me/docs#quick-start |
_meta を無視するホスト向けに、人が読めるテキストも引き続き content[0].text に含まれます。
検証
リポジトリのルートから実行してください(localhost 用に apps/web の開発サーバーを起動した状態で)。
# 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
本番環境のモニタリング: GitHub Actions ワークフロー MCP Production Smoke は、毎日および手動実行時(.github/workflows/mcp-smoke.yml)に smoke:mcp を実行します。
エージェントの検出
| ファイル | URL |
|---|---|
llms.txt | https://foodnear.me/llms.txt |
llms-full.txt | https://foodnear.me/llms-full.txt |
| MCP マニフェスト | https://foodnear.me/.well-known/mcp-server.json |
| AgentRoot | https://foodnear.me/.well-known/agentroot.json |
| スキルファイル | https://foodnear.me/SKILL.md |
| OpenAPI | https://foodnear.me/openapi.json |
| Web クイックリファレンス | https://foodnear.me/docs |
スクリプト化されたフロー:apps/web/docs/example-agent-flows.md
データの信頼モデル(3段階の検索)
search_restaurantsは verified → menu_indexed → discovered の順に返します。- すべての結果には
verification_statusとmenu_availableが含まれます。menu_availableが true の場合にのみget_menuを呼び出してください。 - Verified — オーナー承認済みの MP で、食事制限やアレルゲンに関する情報の信頼できる情報源です。
- menu_indexed — 自動収集または公開された MP メニューです。オーナーによる確認がない旨を注記して引用してください。
- discovered — 店舗情報のみです。メニュー項目を引用しないでください。
- 信頼度の進行:
discovered→menu_indexed→verified。データソースについては https://foodnear.me/attribution を参照してください。
FAQ
API キーは必要ですか?
ベータ版 MCP アクセスでは不要です。将来の有料プランでは、API キーまたは x402(Base 上の USDC)を使用する可能性があります。ローカルの docs/Food Near Me プレイブックにある x402-prepaid-spec.md を参照してください。
再起動後にツールが表示されません。
設定 URL の末尾が /mcp になっていることを確認してください。ホストを完全に再起動してください。対象のベース URL に対して npm run smoke:mcp を実行してください。
検索結果が空です。
ベータ版の verified メニューは、特定の都市圏(例:ニューヨーク市ウィリアムズバーグ)向けに登録されています。ウィリアムズバーグには、ウェブサイトから取り込まれた自動メニューを持つ 7 件の menu_indexed レストランがあります。discovered の店舗情報は米国の多くの都市圏をカバーしています。インポートした地域の座標を使用してください。デモ用座標:40.7128, -74.006。verified のテストデータをローカルで使うには、npm run db:seed -w web を実行してください。
Cursor と Claude の設定ファイルのパスが異なるのはなぜですか?
上記のクイックスタートを参照してください。ホストごとに異なる JSON ファイルを使用します。重要なのは mcpServers ブロックだけです。
DoorDash / Uber Eats API とは何が違いますか?
エージェント向けに、オーナー確認済みの Menu Protocol データを提供します。スクレイピングしたアグリゲーターのメニューや注文時のチェックアウト機能ではありません。
モノレポの構成
このリポジトリでは、foodnear.me ウェブアプリ内に MCP サーバーを含めて配布します。
| パス | 用途 |
|---|---|
apps/web | Next.js アプリ — /mcp の MCP、ランディングページ、API ルート |
packages/menu-protocol | Menu Protocol のスキーマとバリデーター |
database | マイグレーション、シード、スキーマ |
server.json | 公式 MCP Registry メタデータ |
事業戦略と運用手順書は別のローカルドキュメントフォルダー(このリポジトリには含まれません)にあります。チームの docs/Food Near Me プレイブックを参照してください。
開発
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
オペレーター:menu_indexed ウェブサイトの取り込み
無料のウェブサイト/注文プラットフォーム用パーサー(ChowNow API、order.online、Sauce、Squarespace、BentoBox、Toast、Playwright)を使って、discovered を menu_indexed に昇格させます。必ず最初にドライランを実行してください — ヘッドレス実行は時間がかかります。
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
Uber Eats / DoorDash / Grubhub / RapidAPI のスクレイパーはありません。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 · [email protected]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。