Free, no-account checks of any site for search engines, AI answers and AI agents.
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.
Answers whether AI crawlers may read one URL, from robots.txt, the robots meta tags (including ones naming the crawler), the X-Robots-Tag header and the HTTP status. Use it when the person asks whether ChatGPT, Claude, Perplexity or Google can see a page. result.bots lists each crawler with verdict: readable, readable_not_for_index (it may fetch the page but is asked not to index it), blocked_by_robots_txt or page_unavailable, plus robotsTxtAllows and the pageDirectives found. Firewalls that block crawlers by user agent or IP are not visible from here. These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
The page to ask about: an absolute http or https URL, such as https://example.com/pricing.
One robots.txt product token, such as GPTBot, ClaudeBot or PerplexityBot. Defaults to every AI crawler Agent Ready tracks.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http agent-ready-mcp https://mcp.workpods.ai/mcp
Answers whether AI crawlers may read one URL, from robots.txt, the robots meta tags (including ones naming the crawler), the X-Robots-Tag header and the HTTP status. Use it when the person asks whether ChatGPT, Claude, Perplexity or Google can see a page. result.bots lists each crawler with verdict: readable, readable_not_for_index (it may fetch the page but is asked not to index it), blocked_by_robots_txt or page_unavailable, plus robotsTxtAllows and the pageDirectives found. Firewalls that block crawlers by user agent or IP are not visible from here. These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| bot | string | One robots.txt product token, such as GPTBot, ClaudeBot or PerplexityBot. Defaults to every AI crawler Agent Ready tracks. |
| url* | string | The page to ask about: an absolute http or https URL, such as https://example.com/pricing. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"bot": {
"type": "string",
"maxLength": 60,
"description": "One robots.txt product token, such as GPTBot, ClaudeBot or PerplexityBot. Defaults to every AI crawler Agent Ready tracks."
},
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The page to ask about: an absolute http or https URL, such as https://example.com/pricing."
}
}
}Checks whether AI agents can use a page and its site: labelled forms and buttons, declared WebMCP tools, a Markdown version (content negotiation or a Link header), the agent files and MCP server cards under /.well-known, and whether the domain has an MCP server listed in the official MCP Registry. Use it when the person asks whether agents can complete tasks on the site or find its MCP server. result has checks (the agent checks with status and summary), webMcpTools, markdownVersion, agentFiles and mcpRegistry (listings by name, website or endpoint; null when the registry could not be read, an empty list when nothing is listed). Registry lookups are cached 6 hours. These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page to check, usually the home page or a task page: an absolute http or https URL, such as https://example.com/pricing. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The page to check, usually the home page or a task page: an absolute http or https URL, such as https://example.com/pricing."
}
}
}Checks whether a local business's web page states the business name, address and phone the person gives (NAP consistency), and whether it has LocalBusiness schema, click-to-call links and an embedded Google map. Use it for local SEO questions about a shop, clinic, restaurant or office's website. result has name, address and phone, each with status match, mismatch, not_found or profile_missing (no value given) and what the site states, localSchema (types and missing fields; null when there is none), telLinks and embeddedMap. It does not read the Google Business Profile itself. These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | The business's page, usually its home or contact page: an absolute http or https URL, such as https://example.com/pricing. |
| name* | string | The business name, as on its signage. |
| phone | string | The phone number in any format, such as "+1 217 555 0100". Defaults to none, which leaves the phone unchecked. |
| address | string | The street address on one line, such as "12 Main St, Springfield, IL 62701". Defaults to none, which leaves the address unchecked. |
Checks one web page the way search engines, AI answer engines and AI agents read it: indexing (status, robots, canonical), title and meta description, headings and copy, structured data (JSON-LD), links, image alt text and AI readiness. Use it when the person asks how a page does in search or AI answers, or what to fix on it. result has url (where the page landed), status, scores (passed and judged checks per layer: seo, geo, axo), problems (each with check id, status fail or partial, severity, a one-line summary and evidence), passed and notApplicable (check ids). Results are cached for 15 minutes. These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page to check: an absolute http or https URL, such as https://example.com/pricing. |
| brandName | string | The brand name as people search for it, such as "Acme Running". When given, the organization identity check compares the page schema with it. Defaults to none. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The page to check: an absolute http or https URL, such as https://example.com/pricing."
},
"brandName": {
"type": "string",
"maxLength": 100,
"description": "The brand name as people search for it, such as \"Acme Running\". When given, the organization identity check compares the page schema with it. Defaults to none."
}
}
}Reads a site's own files: robots.txt with the verdict for each AI crawler (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, Google-Extended and more), Content-Signal lines, the sitemaps, llms.txt, the agent files under /.well-known (AI catalog, MCP server cards, A2A agent card) and whether the home page has a Markdown version. Use it to see whether AI crawlers may read the site and what it offers agents. Only the origin of the URL is used. result has robotsTxt (url, status, contentSignals), aiCrawlers (token, operator, role, allowed), sitemaps (URL count, a sample, files), agentFiles (each with outcome ok, not_found, blocked or failed), markdownVersion and findings. A status of null means the site gave no answer. Cached for 1 hour. These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any page on the site: an absolute http or https URL, such as https://example.com/pricing. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "Any page on the site: an absolute http or https URL, such as https://example.com/pricing."
}
}
}Runs the check_page checks on the person's page and a competitor's page that targets the same search or task, and lists the checks where they differ. Use it when the person asks why a competitor shows up in search or AI answers and they do not. result has mine and theirs (status, scores, problem count, word count, headings, schema types) and differences (check id with each side's status and summary). These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | The person's own page: an absolute http or https URL, such as https://example.com/pricing. |
| competitorUrl* | string | The competitor's page for the same search or task: an absolute http or https URL, such as https://example.com/pricing. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"competitorUrl"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The person's own page: an absolute http or https URL, such as https://example.com/pricing."
},
"competitorUrl": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The competitor's page for the same search or task: an absolute http or https URL, such as https://example.com/pricing."
}
}
}Drafts robots.txt groups for the AI crawlers Agent Ready tracks, and a Content-Signal line, from what the site owner wants: crawlers that index for AI search, crawlers that fetch a page because a user asked, and crawlers that collect training data, each allowed or blocked, with per-crawler overrides. It fetches nothing. Use it after check_site_files or can_ai_fetch shows crawlers blocked or allowed against the owner's wishes. result has robotsTxt (the lines to merge), contentSignal, decisions (each crawler with its role and choice) and unknownOverrides (tokens not recognised). Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence.
| Argument | Type | Description |
|---|---|---|
| search | string | Whether AI search crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot) may read the site: allow or block. Defaults to allow. |
| training | string | Whether training crawlers (GPTBot, ClaudeBot, Google-Extended, CCBot) may read it: allow or block. Defaults to allow. |
| overrides | object | Per-crawler choices that win over the role choices, by robots.txt token, such as {"GPTBot": "block"}. Defaults to none. |
| userFetch | string | Whether crawlers fetching for a user (ChatGPT-User, Claude-User) may read it: allow or block. Defaults to allow. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"search": {
"enum": [
"allow",
"block"
],
"type": "string",
"description": "Whether AI search crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot) may read the site: allow or block. Defaults to allow."
},
"training": {
"enum": [
"allow",
"block"
],
"type": "string",
"description": "Whether training crawlers (GPTBot, ClaudeBot, Google-Extended, CCBot) may read it: allow or block. Defaults to allow."
},
"overrides": {
"type": "object",
"description": "Per-crawler choices that win over the role choices, by robots.txt token, such as {\"GPTBot\": \"block\"}. Defaults to none.",
"propertyNames": {
"type": "string",
"maxLength": 60
},
"additionalProperties": {
"enum": [
"allow",
"block"
],
"type": "string"
}
},
"userFetch": {
"enum": [
"allow",
"block"
],
"type": "string",
"description": "Whether crawlers fetching for a user (ChatGPT-User, Claude-User) may read it: allow or block. Defaults to allow."
}
}
}Drafts schema.org JSON-LD for a page: Organization, WebSite, FAQPage (questions read from headings that end in a question mark, with the text under them) or LocalBusiness. Values the person gives win over values read from the page. Use it when check_page reports missing or incomplete structured data. result has jsonLd, scriptTag (ready to paste into the <head>), filledFrom (each field: input or page), missing (fields to fill in) and existingTypes (schema types the page already declares). Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page the markup describes: an absolute http or https URL, such as https://example.com/pricing. |
| name | string | The organization or site name. Defaults to the page's. |
| type* | string | The schema.org type to draft. |
| phone | string | LocalBusiness only: the phone. Defaults to the page's first tel: link. |
| sameAs | array | Official profile URLs (LinkedIn, X, YouTube). Defaults to the social links on the page. |
| address |
Drafts a starter llms.txt (llmstxt.org) for a site from its home page and sitemap: an H1 with the site name, its description as the summary, and links to its main pages grouped by section, titled from the pages where they were fetched. Use it when the site has no llms.txt or a broken one. result has llmsTxt (the file text), saveAs (where it goes), links, sitemapUrls and existingLlmsTxt (the outcome of the current one). The person should edit it before publishing. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any page on the site; only its origin is used: an absolute http or https URL, such as https://example.com/pricing. |
| maxLinks | integer | The most page links to include, 5 to 50. Defaults to 25. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "Any page on the site; only its origin is used: an absolute http or https URL, such as https://example.com/pricing."
},
"maxLinks": {
"type": "integer",
"maximum": 50,
"minimum": 5,
"description": "The most page links to include, 5 to 50. Defaults to 25."
}
}
}Reads a crawl started by start_site_crawl. While it runs, result has status (queued or running) and pagesDone; call again in 20 to 30 seconds. Once done, result has the site-wide findings and the crawled pages with their problems, 10 pages per call: pass nextCursor back as cursor for the next 10; nextCursor is null on the last page. A failed crawl has status failed and error. An unknown or expired job id is an error. Returns JSON: summary (one sentence), reportUrl (a shareable report page for the person, kept 30 days; null for tools that keep none) and result (the details below). Errors come back as one plain sentence.
| Argument | Type | Description |
|---|---|---|
| jobId* | string | The jobId from start_site_crawl. |
| cursor | integer | Where the page list starts, from nextCursor. Defaults to 0. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "The jobId from start_site_crawl."
},
"cursor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Where the page list starts, from nextCursor. Defaults to 0."
}
}
}Files a request for a full WorkPods audit of a site: how AI answers (ChatGPT, Gemini, Perplexity, Google AI Overviews) mention the brand and its competitors, search rankings and a prioritised fix list, done by WorkPods with paid data. Use it only when the person asks for it and gives their own work email. There is no charge. A WorkPods operator reviews the request and emails the report to that address within 3 working days. result has requested, domain and next (what to tell the person). The email goes to WorkPods and is not stored by this service.
| Argument | Type | Description |
|---|---|---|
| email* | string | The person's own work email address. |
| website* | string | The site to audit, as a domain or URL, such as example.com. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"email",
"website"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254,
"description": "The person's own work email address."
},
"website": {
"type": "string",
"maxLength": 300,
"minLength": 3,
"description": "The site to audit, as a domain or URL, such as example.com."
}
}
}Starts a crawl of up to 50 pages of one site, in the background, for the problems one page cannot show: broken links, duplicate titles and descriptions, orphan and deep pages, noindex and sitemap mismatches and soft 404s. Use it when the person wants the whole site checked. It returns at once with jobId; call get_site_crawl with it every 20 to 30 seconds until status is done. Crawls honour robots.txt and pause between pages, so 50 pages take a few minutes. Results are kept 24 hours. These are deterministic checks of public pages fetched by Agent Ready by WorkPods, with no AI model and no account. They do not cover rankings, keyword volumes, backlinks or how AI answers mention the brand. Recorded: the checked domain and path (never the query string), the tool, which checks failed and the app name; never an IP address or page text.
| Argument | Type | Description |
|---|---|---|
| url* | string | Where the crawl starts, usually the home page: an absolute http or https URL, such as https://example.com/pricing. |
| limit | integer | The most pages to fetch, 1 to 50. Defaults to 50. |
| pinned | array | Up to 10 money pages (pricing, product, contact) to crawl first, as absolute URLs on the same site. Defaults to none. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "Where the crawl starts, usually the home page: an absolute http or https URL, such as https://example.com/pricing."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "The most pages to fetch, 1 to 50. Defaults to 50."
},
"pinned": {
"type": "array",
"items": {
"type": "string",
"format": "uri",
"maxLength": 2000
},
"maxItems": 10,
"description": "Up to 10 money pages (pricing, product, contact) to crawl first, as absolute URLs on the same site. Defaults to none."
}
}
}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 6, 2026.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"name"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The business's page, usually its home or contact page: an absolute http or https URL, such as https://example.com/pricing."
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The business name, as on its signage."
},
"phone": {
"type": "string",
"maxLength": 40,
"description": "The phone number in any format, such as \"+1 217 555 0100\". Defaults to none, which leaves the phone unchecked."
},
"address": {
"type": "string",
"maxLength": 300,
"description": "The street address on one line, such as \"12 Main St, Springfield, IL 62701\". Defaults to none, which leaves the address unchecked."
}
}
}| string |
| LocalBusiness only: the street address on one line. |
| logoUrl | string | An absolute logo image URL. Defaults to the page icon. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"type"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The page the markup describes: an absolute http or https URL, such as https://example.com/pricing."
},
"name": {
"type": "string",
"maxLength": 200,
"description": "The organization or site name. Defaults to the page's."
},
"type": {
"enum": [
"Organization",
"WebSite",
"FAQPage",
"LocalBusiness"
],
"type": "string",
"description": "The schema.org type to draft."
},
"phone": {
"type": "string",
"maxLength": 40,
"description": "LocalBusiness only: the phone. Defaults to the page's first tel: link."
},
"sameAs": {
"type": "array",
"items": {
"type": "string",
"format": "uri",
"maxLength": 2000
},
"maxItems": 10,
"description": "Official profile URLs (LinkedIn, X, YouTube). Defaults to the social links on the page."
},
"address": {
"type": "string",
"maxLength": 300,
"description": "LocalBusiness only: the street address on one line."
},
"logoUrl": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "An absolute logo image URL. Defaults to the page icon."
}
}
}