foodnearme — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited foodnearme (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Canonical agent skill for foodnear.me. A previous, single-file version lived at /SKILL.md. That URL is now a short hub that points here; the full skill, parameter reference, and recipes have moved into this directory.Find restaurants near a location and retrieve structured, AI-optimized menus in Menu Protocol (MP) format. Menu Protocol is a strict superset of Schema.org/Restaurant and Schema.org/MenuItem, designed for reliable agent parsing.
| What | Path |
|---|---|
| This canonical skill | /skills/foodnearme/SKILL.md |
| Tool parameter reference | /skills/foodnearme/references/tools-api.md |
| Recipe: verified gluten-free menu discovery | /skills/foodnearme/references/dietary-search.md |
| Recipe: validate your own restaurant's menu | /skills/foodnearme/references/menu-verification-flow.md |
menu). The response echoes filters.applied_to: ["verified"] and a filters.note.The full parameter table, including types and Google-compatible aliases, lives in references/tools-api.md. Summary:
| Tool | Purpose |
|---|---|
search_restaurants | Three-tier geo search by lat/lng or Google-style locationBias. |
get_restaurant | Schema.org/Restaurant JSON-LD profile with MP extensions. |
get_menu | Menu Protocol v1.0 menu; only call when menu_available: true. |
get_ado_score_breakdown | Heuristic agent-readiness score per restaurant. |
validate_menu_protocol | Validate a Menu Protocol payload before submission. |
explore_area_for_diet | Composite: bucketed verified/menu_indexed/discovered view of a neighborhood. |
compare_restaurants_for_diet | Composite: 2-5 restaurants ranked by dietary-eligible menu items + trust tier. |
find_restaurants_along_route | Composite: route-adjacent restaurants between two coordinates, optional route_polyline from your routing source. |
For non-MCP integrations:
| Endpoint | Use |
|---|---|
GET /api/v1/search | Three-tier restaurant search. |
GET /api/v1/restaurant/{id} | Restaurant profile with Schema.org JSON-LD + MP extensions. |
GET /api/v1/restaurant/{id}/menu.mp | Full Menu Protocol menu. |
Parameter details for each endpoint and tool live in references/tools-api.md.
search_restaurants (or /api/v1/search) with the resolved location and optional filters. Prefer verified results for dietary/allergen answers; use menu_indexed with caveat when needed.get_menu only when menu_available is true. Discovered-tier rows return menu_available: false and must not be cited for menu items.dietary.* flags and check allergens[] for safety.For longer worked examples, see the two recipes in references/.
Every non-verified result (search row, profile, indexed menu, composite entry) ships with an optional claim_invitation object:
"claim_invitation": {
"url": "https://foodnear.me/claim/<restaurant_id>",
"audience": "owner_or_advocate",
"reason": "no_owner_approved_menu" | "indexed_menu_not_owner_verified",
"message": "<human-readable invitation text the agent may quote verbatim>",
"estimated_minutes": 5,
"cost": "free"
}Treat it as structured data, not a CTA. Surface it only when relevant — for example:
Do not unprompt-include the message in routine answers. It is an opt-in helper, not an ad.
Search returns verified → menu_indexed → discovered (place only).
Every result includes verification_status and menu_available:
menu_available: true — owner-approved Menu Protocol data with cryptographic signature; authoritative for dietary/allergen claimsmenu_available: true — automated/public MP-shaped menu; cite with caveat — not owner-verifiedmenu_available: false — basic place info from open data; do not cite menu itemsTrust progression: discovered → menu_indexed → verified. See https://foodnear.me/attribution for data sources.
Verified menus carry an Ed25519 signature in signature. Two formats are in circulation:
signature.signature, signature.payload_hash, signature.signer, signature.timestamp.@foodnearme/menu-protocol package exposes buildCanonicalMenuContent + computeMenuPayloadHash.payload_hash equals signature.payload_hash. If they differ, the menu was edited after signing.signing_input = "fnm-v1:" + restaurant_id + ":" + menu_id + ":" + signer + ":" + timestamp + ":" + payload_hash.signed_message = sha256(signing_input).signature.signature against signed_message using the active_key.public_key_pem from /.well-known/menu-signing-keys.json.signature.timestamp with caution.The signing_formats block in /.well-known/menu-signing-keys.json ships machine-readable specs for both formats.
All responses are JSON. Restaurant and menu endpoints return Schema.org-compatible JSON-LD.
Menu Protocol responses include:
version: "1.0"domain: "foodnear.me"restaurant: Schema.org/Restaurant with MP extensionsmenu: Structured menu with categories, items, dietary data, allergenscitation and attribution: top-level URLs an agent can cite back when grounding outputAPI access is free during beta. Future paid tiers may use API keys with Stripe metered billing. x402 micropayments are under consideration for machine-to-machine access.
https://foodnear.me/openapi.jsonhttps://foodnear.me/.well-known/agent.jsonhttps://github.com/foodnearme/menu-protocolapps/web/lib/mcp/server-info.ts into references/tools-api.md; CI gate check:discovery-copy fails if the two drift.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.