Skip to main content
Glama

Seemor Restaurant Intelligence

Get Recommendations

recommend
Read-only

Returns a complete, ranked restaurant recommendation for a dining occasion: the final answer, not a search. Each result already carries a grade (or preliminary_band), match_reasons, caveats (a caveat beginning "Misses" names something the room does not deliver, never a good thing about it; a strong_match row never carries one), honored_constraints (plain-language labels for the stated filters this specific row confirms, e.g. "Indian", "Takeaway", "In Magnolia"), and requirements (per stated requirement, one of confirmed / contradicted / unknown, with the plain-words evidence that produced it) weighed against the request. A result may also carry place_note ("Near Williamsburg", "In Hoboken"): where that room is, present ONLY when the room is outside the place asked for — a room in the place the diner asked for carries no place_note, so never read a missing place_note as "somewhere else", and when one IS present say so rather than implying the room is in the place asked for. When result_groups is present, results is already partitioned into ORDERED, LABELED groups (exact / exact_within_wider_radius / likely_match_unconfirmed / nearby_any / relaxed_amenity) — present them to the user top to bottom, in that order, using each group's own message verbatim; never re-order the groups or the rows within a group (present rows in the order given), and never offer them as a choice. Never claim a nearby_any or relaxed_amenity row satisfies a constraint it does not carry in honored_constraints, and never call a likely_match_unconfirmed row (or any row carrying a requirement with status "unknown") a confirmed or exact match — say plainly that it likely matches but could not be confirmed from Seemor's data, and name what could not be confirmed (unknown_requirements lists it at the response level). repeat_ask: true means this is the same answer already given for the identical ask; say so rather than presenting it as new. Call it ONCE per diner ask, with the full ask (cuisine, occasion, vibe, constraints) in query and the place in location. Results are ranked and final: do not re-call with reworded variations or call lookup_restaurant on each result to double-check it; that adds latency, not a better answer. For follow-ups about one place, use lookup_restaurant or ask_about_restaurant. Accounts connected through Claude have a small free number of recommend runs per day (only runs that return results count); if the result carries limit_reached, relay its message to the user as written and do not retry. If a result carries caveats, coverage_level 'basic', or a message noting a thin pool, relay it to the user instead of searching again. Requires a location: include one in your query (e.g. "in Soho"), or provide location, or latitude/longitude, or the tool refuses with location_required instead of guessing a city.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of recommendations to return (1-10, default 5).
queryYesNatural language dining request, e.g. 'quiet Italian restaurant for a date night in Covent Garden' or 'best sushi near me for a celebration'. Include the location in your query OR provide latitude/longitude.
latitudeNoLatitude of search center. Alternative to location — use when you have coordinates. If both location and lat/lng are provided, location takes priority for disambiguation.
locationNoCity or area to bias the search toward, e.g. 'London', 'San Francisco', 'Rome'. Use this when the query doesn't include a location, or to disambiguate (e.g. 'Victoria' could be London or British Columbia — pass 'London' to clarify). Whenever the conversation shows which place the diner means, pass it with its city, state or country, so a name several places share needs no question. If omitted and the query contains a location, that location is used.
longitudeNoLongitude of search center. Must be provided with latitude.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusNo
messageNo
resultsNo
next_stepNo
candidatesNo
place_noteNo
repeat_askNo
other_placesNo
location_usedNo
result_groupsNo
pool_disclosureNo
query_understoodNo
total_candidatesNo
unknown_requirementsNo
unverifiable_attributesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / other_places
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "city": {
      +        "type": "string"
      +      },
      +      "country": {
      +        "type": "string"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / place_note
      Added value: +{
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / location / description
      Previous value: -"City or area to bias the search toward, e.g. 'London', 'San Francisco', 'Rome'. Use this when the query doesn't include a location, or to disambiguate (e.g. 'Victoria' could be London or British Columbia — pass 'London' to clarify). If omitted and the query contains a location, that location is used."New value: +"City or area to bias the search toward, e.g. 'London', 'San Francisco', 'Rome'. Use this when the query doesn't include a location, or to disambiguate (e.g. 'Victoria' could be London or British Columbia — pass 'London' to clarify). Whenever the conversation shows which place the diner means, pass it with its city, state or country, so a name several places share needs no question. If omitted and the query contains a location, that location is used."
    • addedOutput schema / properties / next_step
      Added value: +{
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / results / items / properties / place_note
      Added value: +{
      +  "type": "string"
      +}
  4. Changed8 schema fields changed
    • addedOutput schema / properties / candidates
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "label": {
      +        "type": "string"
      +      },
      +      "lat": {
      +        "type": "number"
      +      },
      +      "lng": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / repeat_ask
      Added value: +{
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / result_groups
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "count": {
      +        "type": "number"
      +      },
      +      "entries": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "label": {
      +        "enum": [
      +          "exact",
      +          "exact_within_wider_radius",
      +          "likely_match_unconfirmed",
      +          "nearby_any",
      +          "relaxed_amenity",
      +          "below_grade_floor"
      +        ],
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "relaxation_steps": {
      +        "items": {
      +          "properties": {
      +            "applied": {
      +              "type": "string"
      +            },
      +            "field": {
      +              "type": "string"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "original": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / grade_caveat
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / honored_constraints
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / results / items / properties / requirements
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "evidence": {
      +        "type": "string"
      +      },
      +      "firmness": {
      +        "enum": [
      +          "identity",
      +          "timing",
      +          "amenity",
      +          "preference"
      +        ],
      +        "type": "string"
      +      },
      +      "phrase": {
      +        "type": "string"
      +      },
      +      "requirement": {
      +        "type": "string"
      +      },
      +      "source": {
      +        "enum": [
      +          "stated",
      +          "inferred"
      +        ],
      +        "type": "string"
      +      },
      +      "status": {
      +        "enum": [
      +          "confirmed",
      +          "contradicted",
      +          "unknown"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / status / enum
      Previous value: -[
      -  "ok",
      -  "error",
      -  "no_coverage",
      -  "location_required",
      -  "timeout",
      -  "cannot_verify"
      -]New value: +[
      +  "ok",
      +  "error",
      +  "no_coverage",
      +  "location_required",
      +  "timeout",
      +  "cannot_verify",
      +  "geo_conflict"
      +]
    • addedOutput schema / properties / unknown_requirements
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
  5. Changed3 schema fields changed
    • addedOutput schema / properties / pool_disclosure
      Added value: +{
      +  "properties": {
      +    "count": {
      +      "type": "number"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "reason": {
      +      "enum": [
      +        "thin_pool",
      +        "cuisine_relaxed"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / status / enum
      Previous value: -[
      -  "ok",
      -  "error",
      -  "no_coverage",
      -  "location_required",
      -  "timeout"
      -]New value: +[
      +  "ok",
      +  "error",
      +  "no_coverage",
      +  "location_required",
      +  "timeout",
      +  "cannot_verify"
      +]
    • addedOutput schema / properties / unverifiable_attributes
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "key": {
      +        "type": "string"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "source_phrase": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
  6. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / coverage_level / enum
      Previous value: -[
      -  "full",
      -  "basic"
      -]New value: +[
      +  "full",
      +  "basic",
      +  "none"
      +]
  7. Changed4 schema fields changed
    • addedOutput schema / properties / results / items / properties / coverage_level
      Added value: +{
      +  "enum": [
      +    "full",
      +    "basic"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / grade / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / preliminary_band
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / status / enum
      Previous value: -[
      -  "ok",
      -  "error",
      -  "no_coverage",
      -  "location_required"
      -]New value: +[
      +  "ok",
      +  "error",
      +  "no_coverage",
      +  "location_required",
      +  "timeout"
      +]
  8. Changed1 schema field changed
    • addedOutput schema / properties / results / items / properties / caveats
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  9. Changed7 schema fields changed
    • addedOutput schema / properties / location_used
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / message
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / query_understood
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / recommendations
      Removed value: -{
      -  "items": {
      -    "properties": {
      -      "grade": {
      -        "type": "string"
      -      },
      -      "match_reasons": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "relevance": {
      -        "type": "string"
      -      },
      -      "seemor_id": {
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / results
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "distance_km": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "grade": {
      +        "type": "string"
      +      },
      +      "match_reasons": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "relevance": {
      +        "type": "string"
      +      },
      +      "seemor_id": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / status / enum
      Added value: +[
      +  "ok",
      +  "error",
      +  "no_coverage",
      +  "location_required"
      +]
    • addedOutput schema / properties / total_candidates
      Added value: +{
      +  "type": "number"
      +}
  10. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "recommendations": {
      +      "items": {
      +        "properties": {
      +          "grade": {
      +            "type": "string"
      +          },
      +          "match_reasons": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "relevance": {
      +            "type": "string"
      +          },
      +          "seemor_id": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  11. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the read-only/no-destruction profile, but the description adds runtime behavior the schema cannot convey: a daily free-run cap where only runs returning results count, limit_reached relaying without retry, repeat_ask signaling a duplicate answer, ordering/labeling discipline for result_groups, and the semantics of caveats, honored_constraints, requirements, unknown_requirements and place_note. Nothing contradicts readOnlyHint=true, destructiveHint=false or idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, but the remainder is one sprawling block with nested parentheticals and repeated constraint-restatement rules that could be tightened. All content is relevant, yet the density and length make it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs for a complex, ranked-output tool: invocation cardinality, required location with failure mode, rate-limit recovery, handling of thin pools and low coverage_level, and how to present grouped/unconfirmed results. Output details are supplied even though an output schema exists, leaving no gap for correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds operational meaning beyond the schema: query must carry the full ask plus the location, location is the disambiguating fallback when the query lacks one, and omitting all of query-location/location/lat-lng triggers a refusal rather than a guessed city. The limit parameter and lat/lng precedence are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Returns a complete, ranked restaurant recommendation for a dining occasion: the final answer, not a search.' The explicit contrast with searching distinguishes it from search_restaurants and find_restaurant without requiring the agent to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit invocation rules: 'Call it ONCE per diner ask, with the full ask... in query and the place in location,' plus when-not to use it ('do not re-call with reworded variations or call lookup_restaurant on each result to double-check it') and named alternatives ('For follow-ups about one place, use lookup_restaurant or ask_about_restaurant'). Location is framed as a hard prerequisite with a named error (location_required).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources