Google Search Console by HYPD: read-only organic search analytics, period comparisons, URL index inspection and sitemaps for connected properties. For Search Console requests, call `init` at the start of a new conversation and follow its guide. Before property-scoped calls, use gsc_list_sites and copy its exact site_url; reuse only identities returned by gsc_list_sites in this conversation. Never guess a property from a domain the user typed. Use the returned query context and truncation flags: clipped comparison periods do not prove a row appeared or disappeared, and even an unclipped response contains only the rows Google exposes. Run Search Console calls sequentially. If no properties are available, check plan_notice first; otherwise help the user reconnect this connector and select properties in their MCP client's settings instead of guessing. Report tool errors as errors; never invent search metrics a tool did not return. Use data_state 'all' for requested live-dashboard comparisons or dates within the finalization lag; identify fresh data as provisional.
Discoverability
2 pass · 1 partial2 passed · 1 partial42/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
The MCP Server Card declares this server's exact endpoint.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Call this first in a new conversation about Search Console. Returns the guide to gsc_* tools, property discovery, analytics, comparisons, URL inspection, connection recovery and starter prompts. With the user's goal, the guide starts with the workflow for that task; a new task later in the conversation gets its own workflow from another call with that goal. Follow it before property-scoped calls, including discovering exact property identities with gsc_list_sites.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
goal
The user's task in a sentence, in their words, such as 'why did my traffic drop last month'. The guide then starts with the workflow for it.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"skill"
],
"properties": {
"skill": {
"type": "object",
"required": [
"name",
"title",
"description",
"updatedAt",
"content"
],
"properties": {
"name": {
"type": "string",
"description": "The guide's id."
},
"title": {
"type": "string",
"description": "The guide's title."
},
"content": {
"type": "string",
"description": "The guide itself, in Markdown."
},
"updatedAt": {
"type": [
"string",
"null"
],
"description": "When the guide last changed (ISO 8601), if known."
},
"description": {
"type": "string",
"description": "What the guide covers."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "init",
"title": "Get Search Console guide",
"description": "Call this first in a new conversation about Search Console. Returns the guide to gsc_* tools, property discovery, analytics, comparisons, URL inspection, connection recovery and starter prompts. With the user's goal, the guide starts with the workflow for that task; a new task later in the conversation gets its own workflow from another call with that goal. Follow it before property-scoped calls, including discovering exact property identities with gsc_list_sites.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"goal": {
"type": "string",
"maxLength": 300,
"description": "The user's task in a sentence, in their words, such as 'why did my traffic drop last month'. The guide then starts with the workflow for it."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"skill"
],
"properties": {
"skill": {
"type": "object",
"required": [
"name",
"title",
"description",
"updatedAt",
"content"
],
"properties": {
"name": {
"type": "string",
"description": "The guide's id."
},
"title": {
"type": "string",
"description": "The guide's title."
},
"content": {
"type": "string",
"description": "The guide itself, in Markdown."
},
"updatedAt": {
"type": [
"string",
"null"
],
"description": "When the guide last changed (ISO 8601), if known."
},
"description": {
"type": "string",
"description": "What the guide covers."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get Search Console guide",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
After init, use this before property-scoped calls to discover the user's available Search Console properties. Copy the exact site_url ('sc-domain:...' or URL-prefix) from a row; never guess it from a user-provided domain. Reuse only identities returned by this tool in this conversation. If the list is empty, check plan_notice for properties held back by the plan; otherwise help the user reconnect this connector and select properties in their MCP client's settings instead of guessing.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sites"
],
"properties": {
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_url": {
"type": "string",
"description": "The property identity to pass as site_url, verbatim."
},
"permission_level": {
"type": "string",
"description": "The user's access, e.g. siteOwner or siteFullUser."
}
},
"additionalProperties": {}
},
"description": "Properties the user selected for HYPD, by site_url."
},
"plan_notice": {
"type": "string",
"description": "Explains properties held back by the user's plan."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gsc_list_sites",
"title": "List Search Console properties",
"description": "After init, use this before property-scoped calls to discover the user's available Search Console properties. Copy the exact site_url ('sc-domain:...' or URL-prefix) from a row; never guess it from a user-provided domain. Reuse only identities returned by this tool in this conversation. If the list is empty, check plan_notice for properties held back by the plan; otherwise help the user reconnect this connector and select properties in their MCP client's settings instead of guessing.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sites"
],
"properties": {
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_url": {
"type": "string",
"description": "The property identity to pass as site_url, verbatim."
},
"permission_level": {
"type": "string",
"description": "The user's access, e.g. siteOwner or siteFullUser."
}
},
"additionalProperties": {}
},
"description": "Properties the user selected for HYPD, by site_url."
},
"plan_notice": {
"type": "string",
"description": "Explains properties held back by the user's plan."
}
},
"additionalProperties": false
},
"annotations": {
"title": "List Search Console properties",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Organic search performance for one property: clicks, impressions, CTR and average position, grouped by up to two dimensions with optional filters. Returns row_count, truncated and the executed query context. Page with start_row, retaining the same query. Google exposes top rows and withholds anonymized queries, so truncated false does not prove an exhaustive query list. Avoid grouping page and query together; use gsc_page_query_breakdown for that pairing, and relay load_quota_warning when present.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Remove repeated schema validation from descriptions; focus on meaning and usage context.
site_url
The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other.
Clear enough to supply this argument.
start_date
Start of the date range, within Search Console's 16-month retention. Defaults to a 28-day window ending 3 days ago, where finalized data ends.
Clear enough to supply this argument.
end_date
End of the date range. Defaults to 3 days ago, where finalized data ends.
Clear enough to supply this argument.
dimensions
Row grouping. Do NOT group page and query together — that is the load-quota trap; use gsc_page_query_breakdown instead.
Clear enough to supply this argument.
search_type
Search surface. Keep analyses on ONE surface: image CTR runs ~5-6x lower than web at the same position, so mixing surfaces corrupts CTR baselines.
Clear enough to supply this argument.
data_state
Which days count. 'final' covers only days Google has finalized, which lag 2-3 days. 'all' adds the latest days, whose numbers can still change. Use 'all' when the user requests a live-dashboard comparison or dates within that lag (e.g. yesterday); label fresh rows provisional. The response echoes the state and dates used.
Clear enough to supply this argument.
row_limit
The most rows to return on this call. The response's truncated says whether more exist; page with start_row for them.
Clear enough to supply this argument.
start_row
Zero-based index of the first row. For the next page, repeat the query with start_row plus the previous row_count.
Clear enough to supply this argument.
filters › items › dimension
The row field this filter tests.
Clear enough to supply this argument.
filters › items › operator
How expression is matched: exact value, substring, or an RE2 regular expression.
Clear enough to supply this argument.
filters › items › expression
The value to match: a query or URL fragment, a lowercase ISO 3166-1 alpha-3 country such as 'usa', or a device: DESKTOP, MOBILE or TABLET.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ctr": {
"type": "number",
"description": "Click-through rate, from 0 to 1."
},
"keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "One value per requested dimension, in request order. Absent for an ungrouped total."
},
"clicks": {
"type": "number",
"description": "Clicks from Google Search."
},
"position": {
"type": "number",
"description": "Average position of the topmost result, 1 is first."
},
"impressions": {
"type": "number",
"description": "Times a result was shown in Google Search."
}
},
"additionalProperties": {}
},
"description": "Metrics per dimension combination."
},
"query": {
"type": "object",
"required": [
"start_date",
"end_date",
"search_type",
"data_state",
"dimensions",
"row_limit",
"estimated_data_finalized_through"
],
"properties": {
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"dimension",
"operator",
"expression"
],
"properties": {
"operator": {
"enum": [
"equals",
"notEquals",
"contains",
"notContains",
"includingRegex",
"excludingRegex"
],
"type": "string",
"description": "How expression is matched: exact value, substring, or an RE2 regular expression."
},
"dimension": {
"enum": [
"query",
"page",
"country",
"device",
"searchAppearance"
],
"type": "string",
"description": "The row field this filter tests."
},
"expression": {
"type": "string",
"minLength": 1,
"description": "The value to match: a query or URL fragment, a lowercase ISO 3166-1 alpha-3 country such as 'usa', or a device: DESKTOP, MOBILE or TABLET."
}
},
"additionalProperties": false
},
"maxItems": 4,
"description": "Row filters, ANDed together (e.g. country equals 'usa', page contains '/blog/')."
},
"end_date": {
"type": "string",
"description": "Last day queried."
},
"row_limit": {
"type": "integer",
"maximum": 25000,
"minimum": 1,
"description": "Rows requested."
},
"start_row": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Index of the first row returned."
},
"data_state": {
"type": "string",
"description": "'final' or 'all'; 'all' rows can still change."
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Grouping actually applied; [] means an ungrouped aggregate."
},
"start_date": {
"type": "string",
"description": "First day queried."
},
"search_type": {
"type": "string",
"description": "Search surface queried."
},
"estimated_data_finalized_through": {
"type": "string",
"description": "Estimated finalized-through date, not a guarantee from Google."
}
},
"description": "The query as executed, defaults filled in. Repeat it with start_row to page.",
"additionalProperties": false
},
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
},
"row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows returned on this call."
},
"truncated": {
"type": "boolean",
"description": "More rows were detected, or the API maximum was reached. false does not mean Google exposed every query."
},
"load_quota_warning": {
"type": "string",
"description": "Present when the request risks Google's load quota."
},
"anonymized_queries_note": {
"type": "string",
"description": "Explains why query rows don't sum to site totals."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gsc_query_search_analytics",
"title": "Query organic search performance",
"description": "Organic search performance for one property: clicks, impressions, CTR and average position, grouped by up to two dimensions with optional filters. Returns row_count, truncated and the executed query context. Page with start_row, retaining the same query. Google exposes top rows and withholds anonymized queries, so truncated false does not prove an exhaustive query list. Avoid grouping page and query together; use gsc_page_query_breakdown for that pairing, and relay load_quota_warning when present.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"site_url"
],
"properties": {
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"dimension",
"operator",
"expression"
],
"properties": {
"operator": {
"enum": [
"equals",
"notEquals",
"contains",
"notContains",
"includingRegex",
"excludingRegex"
],
"type": "string",
"description": "How expression is matched: exact value, substring, or an RE2 regular expression."
},
"dimension": {
"enum": [
"query",
"page",
"country",
"device",
"searchAppearance"
],
"type": "string",
"description": "The row field this filter tests."
},
"expression": {
"type": "string",
"minLength": 1,
"description": "The value to match: a query or URL fragment, a lowercase ISO 3166-1 alpha-3 country such as 'usa', or a device: DESKTOP, MOBILE or TABLET."
}
}
},
"maxItems": 4,
"description": "Row filters, ANDed together (e.g. country equals 'usa', page contains '/blog/')."
},
"end_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "End of the date range. Defaults to 3 days ago, where finalized data ends."
},
"site_url": {
"type": "string",
"minLength": 1,
"description": "The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other."
},
"row_limit": {
"type": "integer",
"default": 250,
"maximum": 25000,
"minimum": 1,
"description": "The most rows to return on this call. The response's truncated says whether more exist; page with start_row for them."
},
"start_row": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based index of the first row. For the next page, repeat the query with start_row plus the previous row_count."
},
"data_state": {
"enum": [
"final",
"all"
],
"type": "string",
"default": "final",
"description": "Which days count. 'final' covers only days Google has finalized, which lag 2-3 days. 'all' adds the latest days, whose numbers can still change. Use 'all' when the user requests a live-dashboard comparison or dates within that lag (e.g. yesterday); label fresh rows provisional. The response echoes the state and dates used."
},
"dimensions": {
"type": "array",
"items": {
"enum": [
"query",
"page",
"country",
"device",
"date",
"searchAppearance"
],
"type": "string"
},
"maxItems": 2,
"description": "Row grouping. Do NOT group page and query together — that is the load-quota trap; use gsc_page_query_breakdown instead."
},
"start_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Start of the date range, within Search Console's 16-month retention. Defaults to a 28-day window ending 3 days ago, where finalized data ends."
},
"search_type": {
"enum": [
"web",
"image",
"video",
"news",
"discover",
"googleNews"
],
"type": "string",
"default": "web",
"description": "Search surface. Keep analyses on ONE surface: image CTR runs ~5-6x lower than web at the same position, so mixing surfaces corrupts CTR baselines."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ctr": {
"type": "number",
"description": "Click-through rate, from 0 to 1."
},
"keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "One value per requested dimension, in request order. Absent for an ungrouped total."
},
"clicks": {
"type": "number",
"description": "Clicks from Google Search."
},
"position": {
"type": "number",
"description": "Average position of the topmost result, 1 is first."
},
"impressions": {
"type": "number",
"description": "Times a result was shown in Google Search."
}
},
"additionalProperties": {}
},
"description": "Metrics per dimension combination."
},
"query": {
"type": "object",
"required": [
"start_date",
"end_date",
"search_type",
"data_state",
"dimensions",
"row_limit",
"estimated_data_finalized_through"
],
"properties": {
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"dimension",
"operator",
"expression"
],
"properties": {
"operator": {
"enum": [
"equals",
"notEquals",
"contains",
"notContains",
"includingRegex",
"excludingRegex"
],
"type": "string",
"description": "How expression is matched: exact value, substring, or an RE2 regular expression."
},
"dimension": {
"enum": [
"query",
"page",
"country",
"device",
"searchAppearance"
],
"type": "string",
"description": "The row field this filter tests."
},
"expression": {
"type": "string",
"minLength": 1,
"description": "The value to match: a query or URL fragment, a lowercase ISO 3166-1 alpha-3 country such as 'usa', or a device: DESKTOP, MOBILE or TABLET."
}
},
"additionalProperties": false
},
"maxItems": 4,
"description": "Row filters, ANDed together (e.g. country equals 'usa', page contains '/blog/')."
},
"end_date": {
"type": "string",
"description": "Last day queried."
},
"row_limit": {
"type": "integer",
"maximum": 25000,
"minimum": 1,
"description": "Rows requested."
},
"start_row": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Index of the first row returned."
},
"data_state": {
"type": "string",
"description": "'final' or 'all'; 'all' rows can still change."
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Grouping actually applied; [] means an ungrouped aggregate."
},
"start_date": {
"type": "string",
"description": "First day queried."
},
"search_type": {
"type": "string",
"description": "Search surface queried."
},
"estimated_data_finalized_through": {
"type": "string",
"description": "Estimated finalized-through date, not a guarantee from Google."
}
},
"description": "The query as executed, defaults filled in. Repeat it with start_row to page.",
"additionalProperties": false
},
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
},
"row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows returned on this call."
},
"truncated": {
"type": "boolean",
"description": "More rows were detected, or the API maximum was reached. false does not mean Google exposed every query."
},
"load_quota_warning": {
"type": "string",
"description": "Present when the request risks Google's load quota."
},
"anonymized_queries_note": {
"type": "string",
"description": "Explains why query rows don't sum to site totals."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Query organic search performance",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Period-over-period movement for one property: current and previous clicks, impressions, CTR and position with deltas, grouped by up to two of query, page, country or device. The previous window defaults to the preceding equal-length period. Returns each period's query context and current_truncated / previous_truncated. If either side is clipped, a missing row does not prove traffic appeared or disappeared; narrow the request before drawing that conclusion. Google's top-row and query-anonymization limits still apply.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_url
The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other.
Clear enough to supply this argument.
current_start_date
Start of the current period, the one being explained.
Clear enough to supply this argument.
current_end_date
End of the current period.
Clear enough to supply this argument.
previous_start_date
Start of the comparison period. Defaults to the immediately preceding window of equal length.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
previous_end_date
End of the comparison period. Pass it with previous_start_date, or neither for the default window.
Clear enough to supply this argument.
dimensions
Row grouping to compare by. Defaults to page.
Clear enough to supply this argument.
search_type
Search surface. Keep analyses on ONE surface: image CTR runs ~5-6x lower than web at the same position, so mixing surfaces corrupts CTR baselines.
Clear enough to supply this argument.
data_state
Which days count. 'final' covers only days Google has finalized, which lag 2-3 days. 'all' adds the latest days, whose numbers can still change. Use 'all' when the user requests a live-dashboard comparison or dates within that lag (e.g. yesterday); label fresh rows provisional. The response echoes the state and dates used.
Clear enough to supply this argument.
row_limit
The most rows to return on this call. The response's truncated says whether more exist.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Give one page URL to get its queries, or one query to get its landing pages. Uses a filtered single-dimension request to reduce load quota. Returns row_count, truncated, the applied filter/grouping and any anonymized_queries_note. This tool has no paging offset; if truncated, narrow the date range or use gsc_query_search_analytics with the echoed query and start_row. Results are limited to rows Google exposes.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_url
The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page
A page URL: returns the queries driving traffic to it. Pass exactly one of page or query.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
A search query: returns the pages it lands on. Pass exactly one of page or query.
Clear enough to supply this argument.
start_date
Start of the date range, within Search Console's 16-month retention. Defaults to a 28-day window ending 3 days ago, where finalized data ends.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_date
End of the date range. Defaults to 3 days ago, where finalized data ends.
Clear enough to supply this argument.
search_type
Search surface. Keep analyses on ONE surface: image CTR runs ~5-6x lower than web at the same position, so mixing surfaces corrupts CTR baselines.
Clear enough to supply this argument.
data_state
Which days count. 'final' covers only days Google has finalized, which lag 2-3 days. 'all' adds the latest days, whose numbers can still change. Use 'all' when the user requests a live-dashboard comparison or dates within that lag (e.g. yesterday); label fresh rows provisional. The response echoes the state and dates used.
Clear enough to supply this argument.
row_limit
The most rows to return on this call. The response's truncated says whether more exist.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Break down page and query traffic",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
Output schema79/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ctr": {
"type": "number",
"description": "Click-through rate, from 0 to 1."
},
"keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "One value per requested dimension, in request order. Absent for an ungrouped total."
},
"clicks": {
"type": "number",
"description": "Clicks from Google Search."
},
"position": {
"type": "number",
"description": "Average position of the topmost result, 1 is first."
},
"impressions": {
"type": "number",
"description": "Times a result was shown in Google Search."
}
},
"additionalProperties": {}
},
"description": "Metrics per dimension combination."
},
"query": {
"type": "object",
"required": [
"start_date",
"end_date",
"search_type",
"data_state",
"dimensions",
"row_limit",
"estimated_data_finalized_through"
],
"properties": {
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"dimension",
"operator",
"expression"
],
"properties": {
"operator": {
"enum": [
"equals",
"notEquals",
"contains",
"notContains",
"includingRegex",
"excludingRegex"
],
"type": "string",
"description": "How expression is matched: exact value, substring, or an RE2 regular expression."
},
"dimension": {
"enum": [
"query",
"page",
"country",
"device",
"searchAppearance"
],
"type": "string",
"description": "The row field this filter tests."
},
"expression": {
"type": "string",
"minLength": 1,
"description": "The value to match: a query or URL fragment, a lowercase ISO 3166-1 alpha-3 country such as 'usa', or a device: DESKTOP, MOBILE or TABLET."
}
},
"additionalProperties": false
},
"maxItems": 4,
"description": "Row filters, ANDed together (e.g. country equals 'usa', page contains '/blog/')."
},
"end_date": {
"type": "string",
"description": "Last day queried."
},
"row_limit": {
"type": "integer",
"maximum": 25000,
"minimum": 1,
"description": "Rows requested."
},
"start_row": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Index of the first row returned."
},
"data_state": {
"type": "string",
"description": "'final' or 'all'; 'all' rows can still change."
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Grouping actually applied; [] means an ungrouped aggregate."
},
"start_date": {
"type": "string",
"description": "First day queried."
},
"search_type": {
"type": "string",
"description": "Search surface queried."
},
"estimated_data_finalized_through": {
"type": "string",
"description": "Estimated finalized-through date, not a guarantee from Google."
}
},
"description": "The query as executed, defaults filled in. Repeat it with start_row to page.",
"additionalProperties": false
},
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
},
"row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows returned on this call."
},
"truncated": {
"type": "boolean",
"description": "More rows were detected, or the API maximum was reached. false does not mean Google exposed every query."
},
"load_quota_warning": {
"type": "string",
"description": "Present when the request risks Google's load quota."
},
"anonymized_queries_note": {
"type": "string",
"description": "Explains why query rows don't sum to site totals."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gsc_page_query_breakdown",
"title": "Break down page and query traffic",
"description": "Give one page URL to get its queries, or one query to get its landing pages. Uses a filtered single-dimension request to reduce load quota. Returns row_count, truncated, the applied filter/grouping and any anonymized_queries_note. This tool has no paging offset; if truncated, narrow the date range or use gsc_query_search_analytics with the echoed query and start_row. Results are limited to rows Google exposes.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"site_url"
],
"properties": {
"page": {
"type": "string",
"minLength": 1,
"description": "A page URL: returns the queries driving traffic to it. Pass exactly one of page or query."
},
"query": {
"type": "string",
"minLength": 1,
"description": "A search query: returns the pages it lands on. Pass exactly one of page or query."
},
"end_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "End of the date range. Defaults to 3 days ago, where finalized data ends."
},
"site_url": {
"type": "string",
"minLength": 1,
"description": "The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other."
},
"row_limit": {
"type": "integer",
"default": 250,
"maximum": 25000,
"minimum": 1,
"description": "The most rows to return on this call. The response's truncated says whether more exist."
},
"data_state": {
"enum": [
"final",
"all"
],
"type": "string",
"default": "final",
"description": "Which days count. 'final' covers only days Google has finalized, which lag 2-3 days. 'all' adds the latest days, whose numbers can still change. Use 'all' when the user requests a live-dashboard comparison or dates within that lag (e.g. yesterday); label fresh rows provisional. The response echoes the state and dates used."
},
"start_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Start of the date range, within Search Console's 16-month retention. Defaults to a 28-day window ending 3 days ago, where finalized data ends."
},
"search_type": {
"enum": [
"web",
"image",
"video",
"news",
"discover",
"googleNews"
],
"type": "string",
"default": "web",
"description": "Search surface. Keep analyses on ONE surface: image CTR runs ~5-6x lower than web at the same position, so mixing surfaces corrupts CTR baselines."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ctr": {
"type": "number",
"description": "Click-through rate, from 0 to 1."
},
"keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "One value per requested dimension, in request order. Absent for an ungrouped total."
},
"clicks": {
"type": "number",
"description": "Clicks from Google Search."
},
"position": {
"type": "number",
"description": "Average position of the topmost result, 1 is first."
},
"impressions": {
"type": "number",
"description": "Times a result was shown in Google Search."
}
},
"additionalProperties": {}
},
"description": "Metrics per dimension combination."
},
"query": {
"type": "object",
"required": [
"start_date",
"end_date",
"search_type",
"data_state",
"dimensions",
"row_limit",
"estimated_data_finalized_through"
],
"properties": {
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"dimension",
"operator",
"expression"
],
"properties": {
"operator": {
"enum": [
"equals",
"notEquals",
"contains",
"notContains",
"includingRegex",
"excludingRegex"
],
"type": "string",
"description": "How expression is matched: exact value, substring, or an RE2 regular expression."
},
"dimension": {
"enum": [
"query",
"page",
"country",
"device",
"searchAppearance"
],
"type": "string",
"description": "The row field this filter tests."
},
"expression": {
"type": "string",
"minLength": 1,
"description": "The value to match: a query or URL fragment, a lowercase ISO 3166-1 alpha-3 country such as 'usa', or a device: DESKTOP, MOBILE or TABLET."
}
},
"additionalProperties": false
},
"maxItems": 4,
"description": "Row filters, ANDed together (e.g. country equals 'usa', page contains '/blog/')."
},
"end_date": {
"type": "string",
"description": "Last day queried."
},
"row_limit": {
"type": "integer",
"maximum": 25000,
"minimum": 1,
"description": "Rows requested."
},
"start_row": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Index of the first row returned."
},
"data_state": {
"type": "string",
"description": "'final' or 'all'; 'all' rows can still change."
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Grouping actually applied; [] means an ungrouped aggregate."
},
"start_date": {
"type": "string",
"description": "First day queried."
},
"search_type": {
"type": "string",
"description": "Search surface queried."
},
"estimated_data_finalized_through": {
"type": "string",
"description": "Estimated finalized-through date, not a guarantee from Google."
}
},
"description": "The query as executed, defaults filled in. Repeat it with start_row to page.",
"additionalProperties": false
},
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
},
"row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows returned on this call."
},
"truncated": {
"type": "boolean",
"description": "More rows were detected, or the API maximum was reached. false does not mean Google exposed every query."
},
"load_quota_warning": {
"type": "string",
"description": "Present when the request risks Google's load quota."
},
"anonymized_queries_note": {
"type": "string",
"description": "Explains why query rows don't sum to site totals."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Break down page and query traffic",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
The sitemaps Google knows for one property: submission path, last downloaded time, URL counts, and any processing errors or warnings — the first stop for index-coverage questions.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_url
The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"sitemaps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "The sitemap's URL."
},
"type": {
"type": "string",
"description": "sitemap, rssFeed, atomFeed, urlList or notSitemap."
},
"errors": {
"type": "string",
"description": "Processing errors, a count as a decimal string."
},
"contents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Content type, e.g. web, image or video."
},
"indexed": {
"type": "string",
"description": "Google no longer fills this and returns '0' whatever the index state. Not an index count: use gsc_inspect_url per URL."
},
"submitted": {
"type": "string",
"description": "URLs submitted, a count as a decimal string."
}
},
"additionalProperties": {}
},
"description": "URL counts per content type."
},
"warnings": {
"type": "string",
"description": "Processing warnings, a count as a decimal string."
},
"isPending": {
"type": "boolean",
"description": "true while Google has yet to process it."
},
"lastSubmitted": {
"type": "string",
"description": "When it was last submitted (ISO 8601)."
},
"lastDownloaded": {
"type": "string",
"description": "When Google last fetched it (ISO 8601)."
},
"isSitemapsIndex": {
"type": "boolean",
"description": "true for a sitemap index that lists other sitemaps."
}
},
"additionalProperties": {}
},
"description": "Every sitemap Google knows for the property."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gsc_list_sitemaps",
"title": "List property sitemaps",
"description": "The sitemaps Google knows for one property: submission path, last downloaded time, URL counts, and any processing errors or warnings — the first stop for index-coverage questions.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"site_url"
],
"properties": {
"site_url": {
"type": "string",
"minLength": 1,
"description": "The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"sitemaps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "The sitemap's URL."
},
"type": {
"type": "string",
"description": "sitemap, rssFeed, atomFeed, urlList or notSitemap."
},
"errors": {
"type": "string",
"description": "Processing errors, a count as a decimal string."
},
"contents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Content type, e.g. web, image or video."
},
"indexed": {
"type": "string",
"description": "Google no longer fills this and returns '0' whatever the index state. Not an index count: use gsc_inspect_url per URL."
},
"submitted": {
"type": "string",
"description": "URLs submitted, a count as a decimal string."
}
},
"additionalProperties": {}
},
"description": "URL counts per content type."
},
"warnings": {
"type": "string",
"description": "Processing warnings, a count as a decimal string."
},
"isPending": {
"type": "boolean",
"description": "true while Google has yet to process it."
},
"lastSubmitted": {
"type": "string",
"description": "When it was last submitted (ISO 8601)."
},
"lastDownloaded": {
"type": "string",
"description": "When Google last fetched it (ISO 8601)."
},
"isSitemapsIndex": {
"type": "boolean",
"description": "true for a sitemap index that lists other sitemaps."
}
},
"additionalProperties": {}
},
"description": "Every sitemap Google knows for the property."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
}
},
"additionalProperties": false
},
"annotations": {
"title": "List property sitemaps",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Google's index verdict for one URL: whether it is indexed, the canonical Google chose, crawl and fetch state, mobile usability, and rich-result status. The URL must belong to the given property — the page-level diagnosis tool for 'why isn't this page ranking'.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_url
The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other.
Clear enough to supply this argument.
inspection_url
The fully-qualified URL to inspect. Must belong to the site_url property.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
language_code
BCP-47 language for result messages, e.g. en-US.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
},
"inspection_result": {
"type": "object",
"properties": {
"ampResult": {
"type": "object",
"properties": {
"verdict": {
"type": "string",
"description": "PASS, PARTIAL, FAIL, NEUTRAL or VERDICT_UNSPECIFIED."
}
},
"description": "AMP status, present for AMP pages only.",
"additionalProperties": {}
},
"indexStatusResult": {
"type": "object",
"properties": {
"sitemap": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sitemaps that list this URL."
},
"verdict": {
"type": "string",
"description": "PASS when indexed, NEUTRAL when excluded, FAIL or PARTIAL on errors."
},
"crawledAs": {
"type": "string",
"description": "The crawler used: DESKTOP or MOBILE."
},
"coverageState": {
"type": "string",
"description": "Google's reason, e.g. 'Submitted and indexed' or 'Crawled - currently not indexed'."
},
"indexingState": {
"type": "string",
"description": "Whether a noindex blocks indexing, e.g. INDEXING_ALLOWED or BLOCKED_BY_META_TAG."
},
"lastCrawlTime": {
"type": "string",
"description": "When Google last crawled the URL (ISO 8601)."
},
"referringUrls": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pages Google found linking to this URL."
},
"userCanonical": {
"type": "string",
"description": "The canonical URL the page declares."
},
"pageFetchState": {
"type": "string",
"description": "Outcome of the last fetch, e.g. SUCCESSFUL, NOT_FOUND or SERVER_ERROR."
},
"robotsTxtState": {
"type": "string",
"description": "Whether robots.txt allows the crawl: ALLOWED or DISALLOWED."
},
"googleCanonical": {
"type": "string",
"description": "The canonical URL Google chose."
}
},
"description": "Whether the URL is indexed, and why or why not.",
"additionalProperties": {}
},
"richResultsResult": {
"type": "object",
"properties": {
"verdict": {
"type": "string",
"description": "PASS, PARTIAL, FAIL, NEUTRAL or VERDICT_UNSPECIFIED."
},
"detectedItems": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Rich result types found on the page, with their issues."
}
},
"description": "Structured data Google detected for rich results.",
"additionalProperties": {}
},
"inspectionResultLink": {
"type": "string",
"description": "This inspection in the Search Console UI."
},
"mobileUsabilityResult": {
"type": "object",
"properties": {
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
}
},
"verdict": {
"type": "string",
"description": "PASS, PARTIAL, FAIL, NEUTRAL or VERDICT_UNSPECIFIED."
}
},
"description": "Mobile usability. Google retired the report, so VERDICT_UNSPECIFIED is common.",
"additionalProperties": {}
}
},
"description": "Google's URL Inspection result for the URL.",
"additionalProperties": {}
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gsc_inspect_url",
"title": "Inspect URL indexing",
"description": "Google's index verdict for one URL: whether it is indexed, the canonical Google chose, crawl and fetch state, mobile usability, and rich-result status. The URL must belong to the given property — the page-level diagnosis tool for 'why isn't this page ranking'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"site_url",
"inspection_url"
],
"properties": {
"site_url": {
"type": "string",
"minLength": 1,
"description": "The Search Console property EXACTLY as gsc_list_sites returned it: 'sc-domain:example.com' or a URL-prefix like 'https://example.com/'. Never rewrite one form into the other."
},
"language_code": {
"type": "string",
"minLength": 1,
"description": "BCP-47 language for result messages, e.g. en-US."
},
"inspection_url": {
"type": "string",
"minLength": 1,
"description": "The fully-qualified URL to inspect. Must belong to the site_url property."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "What the user should do to connect Search Console."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Search Console connection exists — follow `guidance`; the data fields are absent."
},
"inspection_result": {
"type": "object",
"properties": {
"ampResult": {
"type": "object",
"properties": {
"verdict": {
"type": "string",
"description": "PASS, PARTIAL, FAIL, NEUTRAL or VERDICT_UNSPECIFIED."
}
},
"description": "AMP status, present for AMP pages only.",
"additionalProperties": {}
},
"indexStatusResult": {
"type": "object",
"properties": {
"sitemap": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sitemaps that list this URL."
},
"verdict": {
"type": "string",
"description": "PASS when indexed, NEUTRAL when excluded, FAIL or PARTIAL on errors."
},
"crawledAs": {
"type": "string",
"description": "The crawler used: DESKTOP or MOBILE."
},
"coverageState": {
"type": "string",
"description": "Google's reason, e.g. 'Submitted and indexed' or 'Crawled - currently not indexed'."
},
"indexingState": {
"type": "string",
"description": "Whether a noindex blocks indexing, e.g. INDEXING_ALLOWED or BLOCKED_BY_META_TAG."
},
"lastCrawlTime": {
"type": "string",
"description": "When Google last crawled the URL (ISO 8601)."
},
"referringUrls": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pages Google found linking to this URL."
},
"userCanonical": {
"type": "string",
"description": "The canonical URL the page declares."
},
"pageFetchState": {
"type": "string",
"description": "Outcome of the last fetch, e.g. SUCCESSFUL, NOT_FOUND or SERVER_ERROR."
},
"robotsTxtState": {
"type": "string",
"description": "Whether robots.txt allows the crawl: ALLOWED or DISALLOWED."
},
"googleCanonical": {
"type": "string",
"description": "The canonical URL Google chose."
}
},
"description": "Whether the URL is indexed, and why or why not.",
"additionalProperties": {}
},
"richResultsResult": {
"type": "object",
"properties": {
"verdict": {
"type": "string",
"description": "PASS, PARTIAL, FAIL, NEUTRAL or VERDICT_UNSPECIFIED."
},
"detectedItems": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Rich result types found on the page, with their issues."
}
},
"description": "Structured data Google detected for rich results.",
"additionalProperties": {}
},
"inspectionResultLink": {
"type": "string",
"description": "This inspection in the Search Console UI."
},
"mobileUsabilityResult": {
"type": "object",
"properties": {
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
}
},
"verdict": {
"type": "string",
"description": "PASS, PARTIAL, FAIL, NEUTRAL or VERDICT_UNSPECIFIED."
}
},
"description": "Mobile usability. Google retired the report, so VERDICT_UNSPECIFIED is common.",
"additionalProperties": {}
}
},
"description": "Google's URL Inspection result for the URL.",
"additionalProperties": {}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Inspect URL indexing",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Explains how Search Console data works here: the data source and read-only scope, how properties are addressed (site_url forms), data retention, the finalized-data lag, and the query-anonymisation caveat. No property needed. Consult it when a number seems off.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Searches HYPD's help center for articles that answer a question about HYPD itself: connecting or reconnecting ad accounts, plans, billing and credits, privacy and data access, what HYPD can do, and setting HYPD up in Claude, ChatGPT or other AI clients. Returns the matching articles' text and links; answer from them and cite them. Not for advertising advice or the user's account data; use the platform tools for those.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
question
The user's question about HYPD, in their words, e.g. 'How do I connect my Google Ads account?'
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Search the HYPD help center",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
Output schema76/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status",
"articles",
"help_center_url",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How these results relate to the question."
},
"status": {
"enum": [
"ok",
"no_results"
],
"type": "string",
"description": "no_results when no article matched."
},
"articles": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url",
"description",
"content",
"updated_at"
],
"properties": {
"url": {
"type": "string",
"description": "The article's public link."
},
"title": {
"type": "string",
"description": "The article's title."
},
"content": {
"type": "string",
"description": "The article text to answer from."
},
"updated_at": {
"type": "string",
"description": "When the article last changed."
},
"description": {
"type": "string",
"description": "A one-line summary."
}
},
"additionalProperties": false
},
"description": "The matching articles."
},
"help_center_url": {
"type": "string",
"description": "The help center, for questions no article answers."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_search_help",
"title": "Search the HYPD help center",
"description": "Searches HYPD's help center for articles that answer a question about HYPD itself: connecting or reconnecting ad accounts, plans, billing and credits, privacy and data access, what HYPD can do, and setting HYPD up in Claude, ChatGPT or other AI clients. Returns the matching articles' text and links; answer from them and cite them. Not for advertising advice or the user's account data; use the platform tools for those.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "The user's question about HYPD, in their words, e.g. 'How do I connect my Google Ads account?'"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status",
"articles",
"help_center_url",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How these results relate to the question."
},
"status": {
"enum": [
"ok",
"no_results"
],
"type": "string",
"description": "no_results when no article matched."
},
"articles": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url",
"description",
"content",
"updated_at"
],
"properties": {
"url": {
"type": "string",
"description": "The article's public link."
},
"title": {
"type": "string",
"description": "The article's title."
},
"content": {
"type": "string",
"description": "The article text to answer from."
},
"updated_at": {
"type": "string",
"description": "When the article last changed."
},
"description": {
"type": "string",
"description": "A one-line summary."
}
},
"additionalProperties": false
},
"description": "The matching articles."
},
"help_center_url": {
"type": "string",
"description": "The help center, for questions no article answers."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Search the HYPD help center",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
Getting started with Google Search Console by HYPD
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Shows the user's getting started steps for Google Search Console by HYPD: connecting Search Console with a selected property, then asking a first question about their organic search data. Use it when init or gsc_list_sites says so, and whenever the user asks how to get started with HYPD or about onboarding. Clients that render MCP Apps show the steps with a button each: a click sends that step's prompt as the user's next message, or opens the HYPD app. There, say only that the steps are shown above: do not repeat them and do not run a step before the user clicks it. Elsewhere, list the steps with their prompts and links.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations100/100
All four behavior hints are declared.
{
"title": "Getting started with Google Search Console by HYPD",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema56/100
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"done_count",
"step_count"
],
"properties": {
"done_count": {
"type": "number",
"description": "Steps the user has completed."
},
"step_count": {
"type": "number",
"description": "Steps in total."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_show_getting_started",
"title": "Getting started with Google Search Console by HYPD",
"description": "Shows the user's getting started steps for Google Search Console by HYPD: connecting Search Console with a selected property, then asking a first question about their organic search data. Use it when init or gsc_list_sites says so, and whenever the user asks how to get started with HYPD or about onboarding. Clients that render MCP Apps show the steps with a button each: a click sends that step's prompt as the user's next message, or opens the HYPD app. There, say only that the steps are shown above: do not repeat them and do not run a step before the user clicks it. Elsewhere, list the steps with their prompts and links.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"done_count",
"step_count"
],
"properties": {
"done_count": {
"type": "number",
"description": "Steps the user has completed."
},
"step_count": {
"type": "number",
"description": "Steps in total."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Getting started with Google Search Console by HYPD",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Answers questions about platforms Google Search Console by HYPD doesn't cover, such as Google Ads, Meta Ads, Google Analytics, Merchant Center or Tag Manager: it shows which HYPD plugin covers them, with the same hypd.ai account, and a button that installs it. Search Console data comes from the gsc_* tools.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
platform
The platform the user asked about, e.g. 'Google Ads'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"hypd_plugin",
"hypd_plugin_covers",
"this_plugin_covers"
],
"properties": {
"hypd_plugin": {
"type": "string",
"description": "The HYPD plugin that covers other platforms."
},
"hypd_plugin_covers": {
"type": "array",
"items": {
"type": "string"
},
"description": "The platforms that plugin covers."
},
"this_plugin_covers": {
"type": "string",
"description": "What this plugin covers."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_other_platforms",
"title": "Platforms beyond Search Console",
"description": "Answers questions about platforms Google Search Console by HYPD doesn't cover, such as Google Ads, Meta Ads, Google Analytics, Merchant Center or Tag Manager: it shows which HYPD plugin covers them, with the same hypd.ai account, and a button that installs it. Search Console data comes from the gsc_* tools.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"platform": {
"type": "string",
"maxLength": 80,
"description": "The platform the user asked about, e.g. 'Google Ads'."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"hypd_plugin",
"hypd_plugin_covers",
"this_plugin_covers"
],
"properties": {
"hypd_plugin": {
"type": "string",
"description": "The HYPD plugin that covers other platforms."
},
"hypd_plugin_covers": {
"type": "array",
"items": {
"type": "string"
},
"description": "The platforms that plugin covers."
},
"this_plugin_covers": {
"type": "string",
"description": "What this plugin covers."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Platforms beyond Search Console",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Opens a form with a draft of the user's feedback to HYPD about this connector: a bug, wrong data, something missing or confusing, or praise. Fits when the user wants to tell HYPD something, or agrees to after a HYPD tool failed or gave an unhelpful result. The user can edit the draft and sends it from the form. In clients that show no forms, the draft comes back as text for the user to approve.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
message
The feedback, in the user's words.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category
What the feedback is about: a bug, wrong data, a missing capability, something confusing, praise, or other.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
goal
What the user was trying to do when the problem happened, in their words. Shown to the user with the message before sending.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"shown_as",
"draft_token"
],
"properties": {
"draft": {
"type": "object",
"required": [
"message",
"category"
],
"properties": {
"goal": {
"type": "string",
"maxLength": 500,
"description": "What the user was trying to do when the problem happened, in their words. Shown to the user with the message before sending."
},
"message": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The feedback, in the user's words."
},
"category": {
"enum": [
"bug",
"wrong_data",
"missing_capability",
"confusing",
"praise",
"other"
],
"type": "string",
"description": "What the feedback is about: a bug, wrong data, a missing capability, something confusing, praise, or other."
},
"tool_name": {
"type": "string",
"maxLength": 100,
"description": "The HYPD tool the feedback is about, if any."
}
},
"description": "The draft, when shown as text.",
"additionalProperties": false
},
"shown_as": {
"enum": [
"form",
"text"
],
"type": "string",
"description": "form when the client shows the form, text when the draft comes back for the user to approve in chat."
},
"draft_token": {
"type": "string",
"description": "Identifies this draft for hypd_send_feedback."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_show_feedback_form",
"title": "Send feedback to HYPD",
"description": "Opens a form with a draft of the user's feedback to HYPD about this connector: a bug, wrong data, something missing or confusing, or praise. Fits when the user wants to tell HYPD something, or agrees to after a HYPD tool failed or gave an unhelpful result. The user can edit the draft and sends it from the form. In clients that show no forms, the draft comes back as text for the user to approve.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"message",
"category"
],
"properties": {
"goal": {
"type": "string",
"maxLength": 500,
"description": "What the user was trying to do when the problem happened, in their words. Shown to the user with the message before sending."
},
"message": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The feedback, in the user's words."
},
"category": {
"enum": [
"bug",
"wrong_data",
"missing_capability",
"confusing",
"praise",
"other"
],
"type": "string",
"description": "What the feedback is about: a bug, wrong data, a missing capability, something confusing, praise, or other."
},
"tool_name": {
"type": "string",
"maxLength": 100,
"description": "The HYPD tool the feedback is about, if any."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"shown_as",
"draft_token"
],
"properties": {
"draft": {
"type": "object",
"required": [
"message",
"category"
],
"properties": {
"goal": {
"type": "string",
"maxLength": 500,
"description": "What the user was trying to do when the problem happened, in their words. Shown to the user with the message before sending."
},
"message": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The feedback, in the user's words."
},
"category": {
"enum": [
"bug",
"wrong_data",
"missing_capability",
"confusing",
"praise",
"other"
],
"type": "string",
"description": "What the feedback is about: a bug, wrong data, a missing capability, something confusing, praise, or other."
},
"tool_name": {
"type": "string",
"maxLength": 100,
"description": "The HYPD tool the feedback is about, if any."
}
},
"description": "The draft, when shown as text.",
"additionalProperties": false
},
"shown_as": {
"enum": [
"form",
"text"
],
"type": "string",
"description": "form when the client shows the form, text when the draft comes back for the user to approve in chat."
},
"draft_token": {
"type": "string",
"description": "Identifies this draft for hypd_send_feedback."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Send feedback to HYPD",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Sends feedback the user has seen and approved to the HYPD team, who read every message. Only about this connector, not about other apps or the assistant. It takes the fields and draft_token that hypd_show_feedback_form returned for the draft the user approved. The feedback form sends it when the user clicks Send.
The description explains the capability, when to use it, and what to expect.
Inputs85/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
message
The feedback, in the user's words.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category
What the feedback is about: a bug, wrong data, a missing capability, something confusing, praise, or other.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
goal
What the user was trying to do when the problem happened, in their words. Shown to the user with the message before sending.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
tool_name
The HYPD tool the feedback is about, if any.
Clear enough to supply this argument.
draft_token
The draft_token hypd_show_feedback_form returned with this draft. The feedback form's own send needs none.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status"
],
"properties": {
"status": {
"type": "string",
"const": "sent",
"description": "The HYPD team has the feedback."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_send_feedback",
"title": "Submit feedback to HYPD",
"description": "Sends feedback the user has seen and approved to the HYPD team, who read every message. Only about this connector, not about other apps or the assistant. It takes the fields and draft_token that hypd_show_feedback_form returned for the draft the user approved. The feedback form sends it when the user clicks Send.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"message",
"category"
],
"properties": {
"goal": {
"type": "string",
"maxLength": 500,
"description": "What the user was trying to do when the problem happened, in their words. Shown to the user with the message before sending."
},
"message": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The feedback, in the user's words."
},
"category": {
"enum": [
"bug",
"wrong_data",
"missing_capability",
"confusing",
"praise",
"other"
],
"type": "string",
"description": "What the feedback is about: a bug, wrong data, a missing capability, something confusing, praise, or other."
},
"tool_name": {
"type": "string",
"maxLength": 100,
"description": "The HYPD tool the feedback is about, if any."
},
"draft_token": {
"type": "string",
"maxLength": 100,
"description": "The draft_token hypd_show_feedback_form returned with this draft. The feedback form's own send needs none."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status"
],
"properties": {
"status": {
"type": "string",
"const": "sent",
"description": "The HYPD team has the feedback."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Submit feedback to HYPD",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Search the HYPD help centerSearches HYPD's help center for articles that answer a question about HYPD itself: connecting or reconnecting ad accounts, plans, billing and credits, privac…
02Get Search Console guideCall this first in a new conversation about Search Console.
03Platforms beyond Search ConsoleAnswers questions about platforms Google Search Console by HYPD doesn't cover, such as Google Ads, Meta Ads, Google Analytics, Merchant Center or Tag Manager…
04List Search Console propertiesAfter init, use this before property-scoped calls to discover the user's available Search Console properties.
05Compare search performance periodsPeriod-over-period movement for one property: current and previous clicks, impressions, CTR and position with deltas, grouped by up to two of query, page, co…
Want to run these tasks against your MCP server with us?
HYPD AI for Google Search Console setup, tools, quality score, publishing readiness, and alternatives.
How do I add HYPD AI for Google Search Console to Claude, ChatGPT, or Cursor?
Add HYPD AI for Google Search Console to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://searchconsole.hypd.ai/mcp.
Is HYPD AI for Google Search Console MCP ready for ChatGPT and Claude?
As of November 13, 2026, HYPD AI for Google Search Console scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is HYPD AI for Google Search Console's MCP tool documentation?
As of November 13, 2026, HYPD AI for Google Search Console scores 91/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 13 of 13 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to HYPD AI for Google Search Console?
As of November 13, 2026, alternatives to HYPD AI for Google Search Console in marketing-seo on the Manufact MCP leaderboard include BulkPublish, Notra, Fuxux, HYPD AI for App Store Optimization, and HYPD AI for SEO & GEO.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.