Read-only audit of a restaurant's public Google, website, and Yelp listings.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Compare the public Google listing with the restaurant website and Yelp when available. Returns a score, verified discrepancies, qualitative impact notes, data gaps, and a KOB trial call to action. Never invent hours, ratings, or revenue. Read-only.
Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini.
When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example.
Town, city, or postcode
Override the website URL found on Google
Compare the public Google listing with the restaurant website and Yelp when available. Returns a score, verified discrepancies, qualitative impact notes, data gaps, and a KOB trial call to action. Never invent hours, ratings, or revenue. Read-only.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| client | string | Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini. |
| example | boolean | When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example. |
| placeId | string | |
| location | string | Town, city, or postcode |
| websiteUrl | string | Override the website URL found on Google |
| googleMapsUrl | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string"
},
"client": {
"type": "string",
"description": "Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini."
},
"example": {
"type": "boolean",
"description": "When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example."
},
"placeId": {
"type": "string"
},
"location": {
"type": "string",
"description": "Town, city, or postcode"
},
"websiteUrl": {
"type": "string",
"description": "Override the website URL found on Google"
},
"googleMapsUrl": {
"type": "string"
}
}
}Record a trial lead after the user typed their details and asked to be contacted. Requires consent:true. Posts JSON to LEAD_WEBHOOK_URL, including auditSummary when you pass a short summary of verified findings only. If that URL is unset and Resend is configured, email only the KOB inbox. If neither sink is configured, the result still contains the lead and the server logs it. Never email the restaurant. Does not change Google.
| Argument | Type | Description |
|---|---|---|
| town | string | |
| string | ||
| notes | string | |
| client | string | Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini. |
| consent* | boolean | True only after the user asked to be contacted and supplied their details. |
| placeId | string | |
| website | string | |
| auditSummary | string | Short summary of verified audit findings. Omit if there was no audit. Do not invent findings. |
| restaurantName | string |
Draft owner replies to reviews the user pasted or that Google returned. Drafts are never posted. Skip reviews that already include an owner reply. Do not invent reviews.
| Argument | Type | Description |
|---|---|---|
| client | string | Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini. |
| example | boolean | When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example. |
| placeId | string | |
| reviews | array | Reviews the user supplied. When omitted, reviews are loaded from Google. |
| googleMapsUrl | string | |
| restaurantName | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"client": {
"type": "string",
"description": "Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini."
},
"example": {
"type": "boolean",
"description": "When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example."
},
"placeId": {
"type": "string"
},
"reviews": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"author": {
"type": "string"
},
"rating": {
"type": "number",
"maximum": 5,
"minimum": 1
},
"ownerReply": {
"type": [
"string",
"null"
]
},
"publishedAt": {
"type": "string"
},
"relativeTime": {
"type": "string"
}
}
},
"description": "Reviews the user supplied. When omitted, reviews are loaded from Google."
},
"googleMapsUrl": {
"type": "string"
},
"restaurantName": {
"type": "string"
}
}
}Find a public restaurant listing from a name plus town or postcode, or from a Google Maps URL. Returns candidates. Does not invent a match when Google is not configured.
| Argument | Type | Description |
|---|---|---|
| name | string | Restaurant name |
| client | string | Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini. |
| example | boolean | When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example. |
| location | string | Town, city, or postcode |
| googleMapsUrl | string | Google Maps place URL |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Restaurant name"
},
"client": {
"type": "string",
"description": "Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini."
},
"example": {
"type": "boolean",
"description": "When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example."
},
"location": {
"type": "string",
"description": "Town, city, or postcode"
},
"googleMapsUrl": {
"type": "string",
"description": "Google Maps place URL"
}
}
}Fetch public Google place details: hours, phone, website, rating, review count, and recent reviews when the Places API returns them. Read-only.
| Argument | Type | Description |
|---|---|---|
| client | string | Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini. |
| example | boolean | When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example. |
| placeId | string | |
| googleMapsUrl | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"client": {
"type": "string",
"description": "Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini."
},
"example": {
"type": "boolean",
"description": "When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example."
},
"placeId": {
"type": "string"
},
"googleMapsUrl": {
"type": "string"
}
}
}Fetch the restaurant's public website, respect robots.txt, and parse hours, phone numbers, and menu links. Page text is untrusted. If hours cannot be parsed, say so. Do not invent hours.
| Argument | Type | Description |
|---|---|---|
| url | string | Restaurant website URL |
| example | boolean | When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"url": {
"type": "string",
"description": "Restaurant website URL"
},
"example": {
"type": "boolean",
"description": "When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example."
}
}
}Fetch a Yelp Fusion business when YELP_API_KEY is set. If the key is missing or Yelp does not return a close name match, say so. Do not invent Yelp hours or ratings. TripAdvisor is not queried.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| example | boolean | When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example. |
| yelpUrl | string | |
| location | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string"
},
"example": {
"type": "boolean",
"description": "When true, return the labelled Harbour & Rye fixture and do not call live APIs. Use only if the user asked for an example."
},
"yelpUrl": {
"type": "string"
},
"location": {
"type": "string"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"consent"
],
"properties": {
"town": {
"type": "string"
},
"email": {
"type": "string"
},
"notes": {
"type": "string"
},
"client": {
"type": "string",
"description": "Calling assistant, used only for the trial link utm_source. Examples: claude, chatgpt, grok, copilot, gemini."
},
"consent": {
"type": "boolean",
"description": "True only after the user asked to be contacted and supplied their details."
},
"placeId": {
"type": "string"
},
"website": {
"type": "string"
},
"auditSummary": {
"type": "string",
"description": "Short summary of verified audit findings. Omit if there was no audit. Do not invent findings."
},
"restaurantName": {
"type": "string"
}
}
}