Skip to main content
Glama

Seemor Restaurant Intelligence

Find Restaurant

find_restaurant
Read-onlyIdempotent

Look up restaurants by name when the diner, a booking app or a guide has named one: returns matching places with Seemor IDs, grade or preliminary band, a one-line read and seemor_url. Pass city whenever the conversation shows it, in English or the local language; a neighborhood also works. Partial names match; chains return one row per branch. Not for choosing where to eat: to pick a place for a meal, call recommend with the ask instead of inventing candidates and checking them here. Each result reports coverage_level: 'full' (letter grade, or grade_state 'not_highlighted' with grade null), 'basic' (quick read: grade null, preliminary_band which is the floor of the range, tldr, caveat) or 'none' (no analysis yet). A 0-result answer means Seemor has no match for that spelling; try the name without a leading article (Le, La, Cafe, Chez) before telling the diner it is not covered. Rows carry google_maps_url and website when Seemor holds them (null otherwise), plus seemor_url. Seemor holds no booking, availability or opening-hours data: use a booking app for those and join on restaurant name and address.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "name": "<name>"
    },
    "name": "find_restaurant"
  }
}

Input Schema

NameRequiredDescriptionDefault
cityNoCity to narrow the search, in English or the local language ('Vienna' or 'Wien', 'Prague' or 'Praha', 'Montréal'). A neighborhood or region also works. Whenever the conversation shows which place is meant, include its state or country ('Vienna, Virginia'), so a shared name needs no guess. Recommended when the name is common. The result says which place was used (place) and lists other places with the same name (other_places).
nameYesRestaurant name to search for (partial matches work). Example: 'Barrafina', 'Pizza Pilgrims', 'Noma'.
limitNoMaximum results to return (1-20, default 5).

Output Schema

NameRequiredDescriptionDefault
placeNo
statusNo
messageNo
resultsNo
next_stepNo
place_noteNo
ai_generatedNo
other_placesNo
total_matchesNo
digital_source_typeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedOutput schema / properties / ai_generated
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / digital_source_type
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / grade_label
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / grade_state
      Added value: +{
      +  "enum": [
      +    "not_highlighted"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / results / items / properties / grade_basis
      Added value: +{
      +  "type": "string"
      +}
  3. Changed4 schema fields changed
    • addedOutput schema / properties / next_step
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / google_maps_url
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / seemor_url
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / website
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / results / items / properties / place_note
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / city / description
      Previous value: -"City to narrow the search, in English or the local language ('Vienna' or 'Wien', 'Prague' or 'Praha', 'Montréal'). A neighborhood or region also works. Add a qualifier when a name is shared ('Vienna, Virginia'). Recommended when the name is common. The result says which place was used (place) and lists other places with the same name (other_places)."New value: +"City to narrow the search, in English or the local language ('Vienna' or 'Wien', 'Prague' or 'Praha', 'Montréal'). A neighborhood or region also works. Whenever the conversation shows which place is meant, include its state or country ('Vienna, Virginia'), so a shared name needs no guess. Recommended when the name is common. The result says which place was used (place) and lists other places with the same name (other_places)."
  6. Changed4 schema fields changed
    • changedInput schema / properties / city / description
      Previous value: -"City to narrow the search. Example: 'London', 'New York', 'Rome'. Recommended when the name is common."New value: +"City to narrow the search, in English or the local language ('Vienna' or 'Wien', 'Prague' or 'Praha', 'Montréal'). A neighborhood or region also works. Add a qualifier when a name is shared ('Vienna, Virginia'). Recommended when the name is common. The result says which place was used (place) and lists other places with the same name (other_places)."
    • addedOutput schema / properties / other_places
      Added value: +{
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / place
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / place_note
      Added value: +{
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / coverage_level / enum
      Previous value: -[
      -  "full",
      -  "basic"
      -]New value: +[
      +  "full",
      +  "basic",
      +  "none"
      +]
  8. Changed10 schema fields changed
    • changedOutput schema / properties / results / items / properties / address / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / caveats
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / results / items / properties / city / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / coverage_level / enum
      Added value: +[
      +  "full",
      +  "basic"
      +]
    • addedOutput schema / properties / results / items / properties / distance_km
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / items / properties / grade / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / neighborhood / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / preliminary_band
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / price_level
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / tldr
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  9. Changed2 schema fields changed
    • addedOutput schema / properties / message
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / total_matches
      Added value: +{
      +  "type": "number"
      +}
  10. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "results": {
      +      "items": {
      +        "properties": {
      +          "address": {
      +            "type": "string"
      +          },
      +          "city": {
      +            "type": "string"
      +          },
      +          "coverage_level": {
      +            "type": "string"
      +          },
      +          "cuisine_tags": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "grade": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "neighborhood": {
      +            "type": "string"
      +          },
      +          "seemor_id": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  11. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety bar is met; the description goes well beyond them. It explains partial matching, one row per branch for chains, the coverage_level states ('full'/'basic'/'none') with what each implies for grade versus preliminary_band, when google_maps_url/website are null, and the hard boundary that no booking or hours data exists.

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

Conciseness4/5

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

Purpose and scope are front-loaded in the first sentence and the exclusion follows immediately, so a skimming agent gets the routing decision fast. It is dense and slightly repetitive (seemor_url mentioned twice, coverage_level detailed at length) but nearly every sentence carries actionable information.

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?

For a 3-parameter lookup, the description covers matching behavior, result-count edge cases, per-row field availability and the tool's data boundaries. It even explains return values despite an output schema existing, so nothing an agent needs in order to call it or interpret a surprising result is missing.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents city's language variants, neighborhood behavior, place/other_places in the response, and partial matching on name. The description mostly restates that, adding only the emphasis to pass city whenever the conversation shows it and that chains return one row per branch, so a baseline 3 is right.

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 ("Look up restaurants by name") and frames the triggering condition (the diner, a booking app or a guide has named one). It also names the sibling it is not for ("recommend") and what the rows contain, so an agent can distinguish it from lookup_restaurant or search_restaurants without opening a 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 when-to-use (a name has been given), explicit when-not ("Not for choosing where to eat: to pick a place for a meal, call `recommend` with the ask instead of inventing candidates and checking them here"), plus a concrete retry rule when a 0-result comes back (drop a leading article). Nothing is left to inference.

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