Free Google Business Profile and local SEO checks: names, posts, reviews, suspensions, websites.
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.
Scores a Google Business Profile out of 100 from the details you give (categories, reviews and review recency, photos, services, products, posts, links, hours, service area) and returns a priority-ordered fix list. Weighted by what actually brings in calls. Unknown fields are listed for checking, never counted as passes. Read the values off the profile (or ask the user) and pass what you have.
Main city/suburb
Business name on the profile
Logo set
Cover photo set
Opening hours set
Chat/SMS/WhatsApp links set
Booking link, or empty string if none
Description text
Website link on the profile
Total photos
Total reviews
Street address visible on the profile
Service areas listed
Star rating, e.g. 4.8
Number of products
Number of services listed
Opening date set
Primary category
Posts in the last 30 days
% of reviews with an owner reply
Reviews in the last 30 days
Additional categories ([] if none)
Days since the newest review
True if the business goes to customers (tradie, mobile service)
Services that have a description
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http gbp-local-seo https://mcp.kangaroogrowth.com.au/mcp
Tool list last changed Nov 14, 2026.
Scores a Google Business Profile out of 100 from the details you give (categories, reviews and review recency, photos, services, products, posts, links, hours, service area) and returns a priority-ordered fix list. Weighted by what actually brings in calls. Unknown fields are listed for checking, never counted as passes. Read the values off the profile (or ask the user) and pass what you have.
| Argument | Type | Description |
|---|---|---|
| city | string | Main city/suburb |
| name | string | Business name on the profile |
| has_logo | boolean | Logo set |
| has_cover | boolean | Cover photo set |
| hours_set | boolean | Opening hours set |
| chat_links | boolean | Chat/SMS/WhatsApp links set |
| booking_url | string | Booking link, or empty string if none |
| description | string | Description text |
| website_url | string | Website link on the profile |
| photos_count | number | Total photos |
| review_count | number | Total reviews |
| address_shown | boolean | Street address visible on the profile |
| service_areas | array | Service areas listed |
| average_rating | number | Star rating, e.g. 4.8 |
| products_count | number | Number of products |
| services_count | number | Number of services listed |
| opening_date_set | boolean | Opening date set |
| primary_category | string | Primary category |
| posts_last_30_days | number | Posts in the last 30 days |
| reply_rate_percent | number | % of reviews with an owner reply |
| reviews_last_30_days | number | Reviews in the last 30 days |
| additional_categories | array | Additional categories ([] if none) |
| days_since_newest_review | number | Days since the newest review |
| is_service_area_business | boolean | True if the business goes to customers (tradie, mobile service) |
| services_with_descriptions | number | Services that have a description |
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Main city/suburb"
},
"name": {
"type": "string",
"description": "Business name on the profile"
},
"has_logo": {
"type": "boolean",
"description": "Logo set"
},
"has_cover": {
"type": "boolean",
"description": "Cover photo set"
},
"hours_set": {
"type": "boolean",
"description": "Opening hours set"
},
"chat_links": {
"type": "boolean",
"description": "Chat/SMS/WhatsApp links set"
},
"booking_url": {
"type": "string",
"description": "Booking link, or empty string if none"
},
"description": {
"type": "string",
"description": "Description text"
},
"website_url": {
"type": "string",
"description": "Website link on the profile"
},
"photos_count": {
"type": "number",
"description": "Total photos"
},
"review_count": {
"type": "number",
"description": "Total reviews"
},
"address_shown": {
"type": "boolean",
"description": "Street address visible on the profile"
},
"service_areas": {
"type": "array",
"items": {
"type": "string"
},
"description": "Service areas listed"
},
"average_rating": {
"type": "number",
"description": "Star rating, e.g. 4.8"
},
"products_count": {
"type": "number",
"description": "Number of products"
},
"services_count": {
"type": "number",
"description": "Number of services listed"
},
"opening_date_set": {
"type": "boolean",
"description": "Opening date set"
},
"primary_category": {
"type": "string",
"description": "Primary category"
},
"posts_last_30_days": {
"type": "number",
"description": "Posts in the last 30 days"
},
"reply_rate_percent": {
"type": "number",
"description": "% of reviews with an owner reply"
},
"reviews_last_30_days": {
"type": "number",
"description": "Reviews in the last 30 days"
},
"additional_categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "Additional categories ([] if none)"
},
"days_since_newest_review": {
"type": "number",
"description": "Days since the newest review"
},
"is_service_area_business": {
"type": "boolean",
"description": "True if the business goes to customers (tradie, mobile service)"
},
"services_with_descriptions": {
"type": "number",
"description": "Services that have a description"
}
}
}Fetches one public web page and checks its local SEO layer: title and H1 naming the service and area, click-to-call link, LocalBusiness schema, name and phone matching the Google profile, indexability, robots.txt, sitemap, mobile viewport, forms, review proof. Returns a score and a priority-ordered fix list. Only reads the page.
| Argument | Type | Description |
|---|---|---|
| url* | string | Page to check, usually the homepage or the page the Google profile links to |
| phone | string | Optional: phone as on the Google profile |
| suburb | string | Optional: main suburb/city |
| main_service | string | Optional: main service, e.g. 'electrician' |
| business_name | string | Optional: name as on the Google profile |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Page to check, usually the homepage or the page the Google profile links to"
},
"phone": {
"type": "string",
"description": "Optional: phone as on the Google profile"
},
"suburb": {
"type": "string",
"description": "Optional: main suburb/city"
},
"main_service": {
"type": "string",
"description": "Optional: main service, e.g. 'electrician'"
},
"business_name": {
"type": "string",
"description": "Optional: name as on the Google profile"
}
}
}Turns a Google Place ID into a direct 'write a review' link that opens the review box, plus a printable QR code image. Catches the common mistake of using a CID or Maps ID instead of a Place ID.
| Argument | Type | Description |
|---|---|---|
| place_id* | string | Google Place ID (usually starts with ChIJ). Find it with Google's Place ID finder |
| business_name | string | Optional, for labelling |
{
"type": "object",
"required": [
"place_id"
],
"properties": {
"place_id": {
"type": "string",
"description": "Google Place ID (usually starts with ChIJ). Find it with Google's Place ID finder"
},
"business_name": {
"type": "string",
"description": "Optional, for labelling"
}
}
}Checks a Google Business Profile name against Google's naming rules (no keywords, locations, taglines, phone numbers, hours). Keyword-stuffed names are the most common cause of suspensions. Returns PASS/RISK/FAIL, each problem with its fix, and the likely real name.
| Argument | Type | Description |
|---|---|---|
| city | string | Optional: city or suburb the business is in |
| name* | string | The name exactly as it appears on the profile |
| category | string | Optional: primary GBP category |
| legal_or_signage_name | string | Optional: the name on signage, invoices or ABN registration. Words also in this name are allowed |
{
"type": "object",
"required": [
"name"
],
"properties": {
"city": {
"type": "string",
"description": "Optional: city or suburb the business is in"
},
"name": {
"type": "string",
"description": "The name exactly as it appears on the profile"
},
"category": {
"type": "string",
"description": "Optional: primary GBP category"
},
"legal_or_signage_name": {
"type": "string",
"description": "Optional: the name on signage, invoices or ABN registration. Words also in this name are allowed"
}
}
}Checks a Google Business Profile description before it's saved: the 750-character limit, links, prices or promotions (not allowed), keyword stuffing, AI-style filler, missing area or services, and what shows before 'More'. Gives a four-block structure that works.
| Argument | Type | Description |
|---|---|---|
| city | string | Optional: main city or suburb |
| services | array | Optional: main services that should be mentioned |
| description* | string | The description text |
| business_name | string | Optional |
{
"type": "object",
"required": [
"description"
],
"properties": {
"city": {
"type": "string",
"description": "Optional: main city or suburb"
},
"services": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: main services that should be mentioned"
},
"description": {
"type": "string",
"description": "The description text"
},
"business_name": {
"type": "string",
"description": "Optional"
}
}
}Checks a Google Business Profile post before publishing so it doesn't get rejected: phone numbers in the text (a top cause of silent rejections), link shorteners, contact details, all caps, gimmicky punctuation, regulated products, length. Returns fixes and a three-line post format that publishes reliably.
| Argument | Type | Description |
|---|---|---|
| text* | string | The post text |
| button | string | Optional: the button type planned, e.g. 'Learn more', 'Call now', 'Book' |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The post text"
},
"button": {
"type": "string",
"description": "Optional: the button type planned, e.g. 'Learn more', 'Call now', 'Book'"
}
}
}Checks an owner's reply to a Google review before posting it: privacy leaks (addresses, invoice numbers, health details), offers to change a review, argumentative tone, generic one-liners, length. Gives advice suited to the star rating.
| Argument | Type | Description |
|---|---|---|
| reply* | string | The drafted reply |
| stars | number | Star rating of the review (1-5) |
| review_text | string | Optional: the review being replied to |
{
"type": "object",
"required": [
"reply"
],
"properties": {
"reply": {
"type": "string",
"description": "The drafted reply"
},
"stars": {
"type": "number",
"description": "Star rating of the review (1-5)"
},
"review_text": {
"type": "string",
"description": "Optional: the review being replied to"
}
}
}Checks the SMS or email a business sends to ask for Google reviews against Google's review policy and the Australian Consumer Law: incentives, review gating (only asking happy customers), asking for 5 stars, scripting the review. Returns problems, fixes and a compliant template.
| Argument | Type | Description |
|---|---|---|
| message* | string | The review request message text |
{
"type": "object",
"required": [
"message"
],
"properties": {
"message": {
"type": "string",
"description": "The review request message text"
}
}
}Checks that a business's name, address and phone (NAP) match across directory listings, ignoring formatting differences (St vs Street, +61 vs 0, Pty Ltd). Paste each listing's details or text. Returns real mismatches and a list of Australian directories worth having.
| Argument | Type | Description |
|---|---|---|
| listings* | array | Listings to compare |
| reference* | object | The correct details, as on the Google profile |
{
"type": "object",
"required": [
"reference",
"listings"
],
"properties": {
"listings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": ""
},
"text": {
"type": "string",
"description": "Or paste the listing text instead of fields"
},
"phone": {
"type": "string",
"description": ""
},
"source": {
"type": "string",
"description": "e.g. Yellow Pages"
},
"address": {
"type": "string",
"description": ""
}
}
},
"description": "Listings to compare"
},
"reference": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Business name"
},
"phone": {
"type": "string",
"description": "Phone"
},
"address": {
"type": "string",
"description": "Street address (omit for a hidden-address service business)"
}
},
"description": "The correct details, as on the Google profile"
}
}
}Drafts a factual report about a competitor's Google listing that breaks the guidelines (keyword-stuffed name, fake address, duplicates, fake reviews, closed business), with where to send it and the evidence to attach. Only drafts the text. Nothing is submitted.
| Argument | Type | Description |
|---|---|---|
| issue* | string | Type of violation |
| evidence | array | Optional: links or facts that prove it |
| competitor_name* | string | Listing name as shown on Google |
{
"type": "object",
"required": [
"competitor_name",
"issue"
],
"properties": {
"issue": {
"enum": [
"keyword_name",
"fake_address",
"duplicate",
"fake_reviews",
"closed"
],
"type": "string",
"description": "Type of violation"
},
"evidence": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: links or facts that prove it"
},
"competitor_name": {
"type": "string",
"description": "Listing name as shown on Google"
}
}
}Returns the full step-by-step Google Business Profile optimisation checklist an agency works through (categories, name, description, contact links, service area, hours, attributes, services, products, photos, reviews, posts, booking, website and citations), tailored to the trade and city.
| Argument | Type | Description |
|---|---|---|
| city | string | e.g. Melbourne |
| business_type | string | e.g. electrician, hair salon |
| service_area_business | boolean | True if they go to the customer (default true) |
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "e.g. Melbourne"
},
"business_type": {
"type": "string",
"description": "e.g. electrician, hair salon"
},
"service_area_business": {
"type": "boolean",
"description": "True if they go to the customer (default true)"
}
}
}For a suspended, disabled, unverified or limited Google Business Profile: ranks the likely causes from yes/no answers, says whether to appeal, re-verify or wait, and lists the evidence to gather plus a video verification shot list. Answer what you know and leave the rest out.
| Argument | Type | Description |
|---|---|---|
| status* | string | What Google shows: suspended, disabled, pending verification, limited, not showing |
| website_mismatch | boolean | Website name/phone/area doesn't match the profile |
| multiple_profiles | boolean | More than one profile for the same business |
| po_box_or_mailbox | boolean | Address is a PO box or mailbox |
| recent_major_edits | boolean | Changed name/address/category/phone recently |
| restricted_category | boolean | Locksmith, garage door, towing, pest control, removalist or similar high-spam category |
| name_has_extra_words | boolean | Name has keywords, suburb or tagline not on signage |
| phone_not_local_or_tracking |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 14, 2026.
What changed in this server's tools since we started watching, newest first. Each change is scanned again.
How to get a free Google Business Profile and local SEO audit done by a person at Kangaroo Growth (Australian local marketing agency). Use when the user wants someone to do it for them or wants a second opinion.
| boolean |
| Main phone is a call centre, premium or tracking number |
| recently_moved_or_rebranded | boolean | Moved or rebranded recently |
| virtual_office_or_coworking | boolean | Address is a virtual office, coworking or shared space |
| service_area_business_showing_address | boolean | Goes to customers but shows a street address |
{
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string",
"description": "What Google shows: suspended, disabled, pending verification, limited, not showing"
},
"website_mismatch": {
"type": "boolean",
"description": "Website name/phone/area doesn't match the profile"
},
"multiple_profiles": {
"type": "boolean",
"description": "More than one profile for the same business"
},
"po_box_or_mailbox": {
"type": "boolean",
"description": "Address is a PO box or mailbox"
},
"recent_major_edits": {
"type": "boolean",
"description": "Changed name/address/category/phone recently"
},
"restricted_category": {
"type": "boolean",
"description": "Locksmith, garage door, towing, pest control, removalist or similar high-spam category"
},
"name_has_extra_words": {
"type": "boolean",
"description": "Name has keywords, suburb or tagline not on signage"
},
"phone_not_local_or_tracking": {
"type": "boolean",
"description": "Main phone is a call centre, premium or tracking number"
},
"recently_moved_or_rebranded": {
"type": "boolean",
"description": "Moved or rebranded recently"
},
"virtual_office_or_coworking": {
"type": "boolean",
"description": "Address is a virtual office, coworking or shared space"
},
"service_area_business_showing_address": {
"type": "boolean",
"description": "Goes to customers but shows a street address"
}
}
}