Skip to main content
Glama

RestaurantDoctorAI

Check a restaurant's website

restaurantdoctor_check_website
Read-only

Checks a restaurant's own website as the online check on restaurantdoctorai.com does: secure (https) and on its own address, made for phones, a menu written as text that phones and Google can read, online orders on its own terms or only through delivery apps, the address, hours and phone written on the page, tap to call, a way to get in touch, email sign-up and gift cards, what Google reads (a headline, title and description, not hidden from search, restaurant structured data), the preview a shared link shows, the page's text, story, questions, reviews, photo descriptions and social links, and Google's phone speed test with its measures one by one and real visitors' speed when Google has it (15 to 40 seconds; phoneSpeed: false skips it). Returns the score and grade, each area's score, the three checks to fix first with what to do about each, what a basic AI reader can tell about each question in a word, and a link to the full online check, which adds the Google listing, every check with what to fix, the reasons and places nearby on the website. A check it couldn't make (a page drawn by scripts, a security screen instead of the page) is left out of the score, never failed; every check, its points and where its facts come from are listed at https://restaurantdoctorai.com/online-check/checks. Takes only the website address. The website isn't stored; only an anonymous daily count of checks is kept.

Input Schema

NameRequiredDescriptionDefault
websiteYesThe restaurant's own website address, such as joesdiner.com or https://www.joesdiner.com. Not a DoorDash, Uber Eats or Google Maps page.
phoneSpeedNoWhether to run Google's phone speed test too (the default). It takes 15 to 40 seconds; false skips it.

Output Schema

NameRequiredDescriptionDefault
areasYesThe score for the website and for its speed on a phone.
gradeYes
scoreYes0 to 100, from the website and phone-speed checks only (the full check adds the Google listing).
checkedYesHow many checks could be made. One that couldn't (a page drawn by scripts, a security screen) is left out of the score, never failed.
meaningYesWhat the grade means, in a line for the owner.
websiteYesWhere the site answered after redirects: its scheme and host only, such as https://www.joesdiner.com.
fixFirstYesUp to three checks to fix first, most important first.
needWorkYesHow many of the checks need work. The full online check names each one.
aiAnswersYesWhat a basic AI reader can tell from the home page and at most one menu page: whether AI can get in, what the restaurant sells, its prices, hours, phone and address, and how guests can order or book. Not part of the score. Assistants differ, and some run scripts. No score, and no promise of being recommended.
fullCheckUrlYesThe full online check on restaurantdoctorai.com: adds the Google listing, every check with what to fix, the reasons behind each answer and the places nearby.
phoneSpeedSkippedYesGoogle's phone speed test wasn't run, because phoneSpeed was false. It isn't in the score.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • addedOutput schema / properties / aiAnswers
      Added value: +{
      +  "description": "What a basic AI reader can tell from the home page and at most one menu page: whether AI can get in, what the restaurant sells, its prices, hours, phone and address, and how guests can order or book. Not part of the score. Assistants differ, and some run scripts. No score, and no promise of being recommended.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "question": {
      +        "type": "string"
      +      },
      +      "state": {
      +        "description": "found (written on the page, which doesn't mean every assistant gets it), missing (not found) or unknown (can't tell). For whether AI can get in, found means no block in the site's robots.txt or tags (a firewall we can't see could still turn crawlers away) and missing means the site's own rules block or limit it.",
      +        "enum": [
      +          "found",
      +          "missing",
      +          "unknown"
      +        ],
      +        "type": "string"
      +      },
      +      "word": {
      +        "description": "The state in words, as the owner reads it: Found, Not found, Can't tell, Not blocked by your rules, Linked.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "question",
      +      "state",
      +      "word"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / aiReadiness
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Whether AI assistants can find and order from the restaurant, from its website alone. Not part of the score. Ordering routes are described for the US.",
      -  "properties": {
      -    "checked": {
      -      "description": "The date the facts in these words were last read, such as November 1, 2026.",
      -      "type": "string"
      -    },
      -    "guideUrl": {
      -      "description": "Our guide to ordering through ChatGPT, Claude and Google Maps, for the owner to read.",
      -      "type": "string"
      -    },
      -    "rows": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "advice": {
      -            "description": "What the owner can do. Empty when there's nothing to do.",
      -            "type": "string"
      -          },
      -          "found": {
      -            "type": "string"
      -          },
      -          "state": {
      -            "description": "good, todo (for the owner to look at) or unknown (can't be told from outside). Whether ordering is on can't be seen from outside, so good never means it is.",
      -            "enum": [
      -              "good",
      -              "todo",
      -              "unknown"
      -            ],
      -            "type": "string"
      -          },
      -          "title": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "state",
      -          "found",
      -          "advice"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "checked",
      -    "guideUrl",
      -    "rows"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / areas
      Added value: +{
      +  "description": "The score for the website and for its speed on a phone.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "score": {
      +        "anyOf": [
      +          {
      +            "description": "0 to 100.",
      +            "type": "number"
      +          },
      +          {
      +            "description": "Nothing could be checked here, or the phone speed test was skipped.",
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "toFix": {
      +        "description": "How many checks in this area need work.",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "title",
      +      "score",
      +      "toFix"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / checked
      Added value: +{
      +  "description": "How many checks could be made. One that couldn't (a page drawn by scripts, a security screen) is left out of the score, never failed.",
      +  "type": "number"
      +}
    • removedOutput schema / properties / checks
      Removed value: -{
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "fix": {
      -        "anyOf": [
      -          {
      -            "description": "What to do, for a check that needs work.",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "found": {
      -        "type": "string"
      -      },
      -      "status": {
      -        "description": "pass, warn (could be better), fail (needs fixing) or unknown (couldn't check).",
      -        "enum": [
      -          "pass",
      -          "warn",
      -          "fail",
      -          "unknown"
      -        ],
      -        "type": "string"
      -      },
      -      "title": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "title",
      -      "status",
      -      "found",
      -      "fix"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / fixFirst / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / fixFirst / items / properties
      Added value: +{
      +  "fix": {
      +    "description": "What to do.",
      +    "type": "string"
      +  },
      +  "found": {
      +    "description": "What the check found.",
      +    "type": "string"
      +  },
      +  "title": {
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / fixFirst / items / required
      Added value: +[
      +  "title",
      +  "found",
      +  "fix"
      +]
    • changedOutput schema / properties / fixFirst / items / type
      Previous value: -"string"New value: +"object"
    • changedOutput schema / properties / fullCheckUrl / description
      Previous value: -"The full online check on restaurantdoctorai.com: adds the Google listing and the places nearby, free."New value: +"The full online check on restaurantdoctorai.com: adds the Google listing, every check with what to fix, the reasons behind each answer and the places nearby."
    • addedOutput schema / properties / meaning
      Added value: +{
      +  "description": "What the grade means, in a line for the owner.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / needWork
      Added value: +{
      +  "description": "How many of the checks need work. The full online check names each one.",
      +  "type": "number"
      +}
    • removedOutput schema / properties / ordersOnlyThroughApps
      Removed value: -{
      -  "description": "The site links online orders only to delivery apps (DoorDash, Uber Eats, Grubhub…), which charge a commission on each.",
      -  "type": "boolean"
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "website",
      -  "score",
      -  "grade",
      -  "checks",
      -  "fixFirst",
      -  "phoneSpeedSkipped",
      -  "ordersOnlyThroughApps",
      -  "aiReadiness",
      -  "fullCheckUrl"
      -]New value: +[
      +  "website",
      +  "score",
      +  "grade",
      +  "meaning",
      +  "needWork",
      +  "checked",
      +  "areas",
      +  "fixFirst",
      +  "phoneSpeedSkipped",
      +  "aiAnswers",
      +  "fullCheckUrl"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / aiReadiness
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Whether AI assistants can find and order from the restaurant, from its website alone. Not part of the score. Ordering routes are described for the US.",
      +  "properties": {
      +    "checked": {
      +      "description": "The date the facts in these words were last read, such as November 1, 2026.",
      +      "type": "string"
      +    },
      +    "guideUrl": {
      +      "description": "Our guide to ordering through ChatGPT, Claude and Google Maps, for the owner to read.",
      +      "type": "string"
      +    },
      +    "rows": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "advice": {
      +            "description": "What the owner can do. Empty when there's nothing to do.",
      +            "type": "string"
      +          },
      +          "found": {
      +            "type": "string"
      +          },
      +          "state": {
      +            "description": "good, todo (for the owner to look at) or unknown (can't be told from outside). Whether ordering is on can't be seen from outside, so good never means it is.",
      +            "enum": [
      +              "good",
      +              "todo",
      +              "unknown"
      +            ],
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "state",
      +          "found",
      +          "advice"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "checked",
      +    "guideUrl",
      +    "rows"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "website",
      -  "score",
      -  "grade",
      -  "checks",
      -  "fixFirst",
      -  "phoneSpeedSkipped",
      -  "ordersOnlyThroughApps",
      -  "fullCheckUrl"
      -]New value: +[
      +  "website",
      +  "score",
      +  "grade",
      +  "checks",
      +  "fixFirst",
      +  "phoneSpeedSkipped",
      +  "ordersOnlyThroughApps",
      +  "aiReadiness",
      +  "fullCheckUrl"
      +]
  3. Changed1 schema field changed
    • changedOutput schema / properties / website / description
      Previous value: -"The address that answered, after redirects."New value: +"Where the site answered after redirects: its scheme and host only, such as https://www.joesdiner.com."
  4. Changed2 schema fields changed
    • addedOutput schema / properties / phoneSpeedSkipped
      Added value: +{
      +  "description": "Google's phone speed test wasn't run, because phoneSpeed was false. It isn't in the score.",
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "website",
      -  "score",
      -  "grade",
      -  "checks",
      -  "fixFirst",
      -  "ordersOnlyThroughApps",
      -  "fullCheckUrl"
      -]New value: +[
      +  "website",
      +  "score",
      +  "grade",
      +  "checks",
      +  "fixFirst",
      +  "phoneSpeedSkipped",
      +  "ordersOnlyThroughApps",
      +  "fullCheckUrl"
      +]
  5. Added

TDQS

A3.8/5.0
Behavior5/5

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

Beyond the readOnly/destructive annotations, it discloses latency (15-40 seconds, skippable via phoneSpeed: false), failure semantics (checks it couldn't make are excluded from the score, never failed), data retention (website not stored, only an anonymous daily count), and where scoring methodology is documented. That is unusually rich operational context for a read-only tool.

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

Conciseness2/5

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

The purpose is front-loaded, but the body is one enormous run-on sentence that enumerates every individual check in a comma-list and then re-enumerates the return payload. Much of that belongs behind the referenced checks URL, and the density makes the definition hard to scan.

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?

Given a two-parameter read-only tool with an output schema, the description still covers cost, timing, failure handling, privacy, and result shape, so an agent has everything needed to call it and interpret the response. Nothing material 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 description only restates what the schema already says ('Takes only the website address', 'phoneSpeed: false skips it'), adding no new syntax, format, or edge-case detail. Baseline 3 is appropriate when the schema does the lifting.

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

Purpose4/5

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

The description opens with a specific verb and resource ('Checks a restaurant's own website') and enumerates the exact areas audited (https, mobile-friendliness, text menu, ordering, NAP, SEO signals, speed). It is clearly distinct from the calculator/knowledge siblings, though it never names a sibling to contrast against.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this is the tool for auditing a restaurant's web presence, and it points at the full online check on restaurantdoctorai.com as a richer alternative. There is no explicit when-to-use/when-not guidance and no comparison to siblings such as restaurantdoctor_run_free_check.

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