list_geo_audit_recommendations
list_geo_audit_recommendations MCP tool: a GEO Audit's generated recommendations (with hash and hidden flag) and the custom ones added on top.
Updated 2026-09-21
list_geo_audit_recommendations returns the recommendations of a report: the AI-generated ones produced when the audit completed, and the custom ones an owner (or an agent) added on top. It works on a single GEO Audit and on a bulk campaign, whose recommendations are the segment-level ones every target report renders. Use it to read the current state before adding or removing custom recommendations with add_geo_audit_recommendation / remove_geo_audit_recommendation.
When to use
Before editing a GEO Audit's recommendations via the MCP, list them so you don't duplicate an existing one and so you have the id of a custom recommendation you want to remove. Read-only, tenant-scoped.
Input
| Field | Type | Description |
|---|---|---|
auditId |
string (CUID) | A single GEO Audit, or a bulk campaign target (which resolves to its campaign). Exactly one of auditId / bulkAuditId. |
bulkAuditId |
string (CUID) | A bulk campaign, from list_bulk_audits. Exactly one of auditId / bulkAuditId. |
GEO Audits are workspace-scoped, so this tool takes no projectId. Address a report with auditId or bulkAuditId, never both. On a bulk campaign the change applies to the shared settings template every target report renders, so one call covers the whole batch. Passing a campaign target's auditId resolves to its campaign for the same reason: a target has no settings of its own. The response always echoes the resolved target as auditId / bulkAuditId (one of them null).
Response
{
"success": true,
"auditId": "clx_audit_42",
"generated": [
{
"category": "technical",
"severity": "critical",
"title": "Add FAQ schema to the pricing page",
"description": "...",
"metric": { "value": 0.42, "label": "of pages missing schema" },
"hash": "1a2b3c4d",
"hidden": false
}
],
"custom": [
{ "id": "cus_ab12cd34", "category": "content", "severity": "important", "title": "Publish a comparison page", "description": "..." }
]
}
Field notes:
generatedrecommendations are frozen at audit completion and have no stored id. Each carries a deterministichash(derived from category + title) and ahiddenflag reflecting the report's visibility settings.customrecommendations each have a stableid(the handle to remove them).categoryistechnical | content | distribution;severityiscritical | important | nice-to-have.
Errors
{ "success": false, "error": "target_required", "message": "Pass exactly one of auditId (a GEO audit) or bulkAuditId (a bulk campaign)." }
{ "success": false, "error": "audit_not_found", "message": "No GEO audit with this id exists in your workspace. ..." }
{ "success": false, "error": "bulk_audit_not_found", "message": "No bulk campaign with this id exists in your workspace. ..." }
Tips and patterns
- List before you add to avoid near-duplicate recommendations.
- Custom items carry an
id, generated ones ahash.remove_geo_audit_recommendationtakes either: theiddeletes a custom item, thehashremoves a generated one from the report by hiding it (reversible withset_geo_audit_recommendation_visibility).
Related tools
- add_geo_audit_recommendation: add a custom recommendation.
- remove_geo_audit_recommendation: remove a custom or a generated recommendation.
- list_geo_audit_content_ideas: the same thing for the report's content ideas.
- get_geo_audit: the full audit, including its frozen recommendations.