{"openapi":"3.1.0","x-commercial-channels":[{"key":"google_ads","label":{"es":"Google Ads","en":"Google Ads"},"commercialModule":"google_ads","services":["googleAds"],"mcpChannels":["google_ads"],"public":true,"availability":"generally_available","access":"read_write","requiresConnection":true,"acceptedAliases":["google-ads"]},{"key":"wordpress","label":{"es":"WordPress","en":"WordPress"},"commercialModule":"seo_aeo","services":["wordpressSeo"],"mcpChannels":["wordpress"],"public":true,"availability":"generally_available","access":"read_write","requiresConnection":true,"acceptedAliases":["wordpress-seo"]},{"key":"crm","label":{"es":"CRM","en":"CRM"},"commercialModule":"crm","services":["crm"],"mcpChannels":["crm"],"public":true,"availability":"generally_available","access":"read_write","requiresConnection":true,"acceptedAliases":[]},{"key":"websites","label":{"es":"Sitios web","en":"Websites"},"commercialModule":"content_web","services":["landingPages"],"mcpChannels":["landing_pages"],"public":true,"availability":"generally_available","access":"read_write","requiresConnection":true,"acceptedAliases":["landing-pages","landing_pages","sites-web","sites_web"]},{"key":"social","label":{"es":"Redes sociales","en":"Social media"},"commercialModule":"social","services":["socialOrganic","socialX","socialLinkedIn"],"mcpChannels":["social"],"public":true,"availability":"generally_available","access":"read_write","requiresConnection":true,"acceptedAliases":[]},{"key":"blog","label":{"es":"Blog","en":"Blog"},"commercialModule":"content_web","services":["blog"],"mcpChannels":["blog"],"public":true,"availability":"generally_available","access":"read_write","requiresConnection":true,"acceptedAliases":[]},{"key":"meta_ads","label":{"es":"Meta Ads","en":"Meta Ads"},"commercialModule":"meta_ads","services":["metaAds"],"mcpChannels":["meta_ads"],"public":true,"availability":"limited","access":"read_write","requiresConnection":true,"acceptedAliases":["meta-ads","meta"]},{"key":"linkedin_ads","label":{"es":"LinkedIn Ads","en":"LinkedIn Ads"},"commercialModule":"linkedin_ads","services":["linkedinAds"],"mcpChannels":["linkedin_ads"],"public":true,"availability":"limited","access":"read_write","requiresConnection":true,"acceptedAliases":["linkedin-ads","linkedin"]},{"key":"seo","label":{"es":"SEO y AEO","en":"SEO and AEO"},"commercialModule":"seo_aeo","services":["seo","aeo"],"mcpChannels":["seo_tools","aeo"],"public":true,"availability":"limited","access":"read_write","requiresConnection":false,"acceptedAliases":[]},{"key":"analytics","label":{"es":"Analítica","en":"Analytics"},"commercialModule":"analytics","services":["analytics"],"mcpChannels":["analytics"],"public":true,"availability":"limited","access":"read","requiresConnection":true,"acceptedAliases":[]},{"key":"search_console","label":{"es":"Search Console","en":"Search Console"},"commercialModule":"search_console","services":["searchConsole"],"mcpChannels":["search_console"],"public":true,"availability":"limited","access":"read_write","requiresConnection":true,"acceptedAliases":["search-console"]},{"key":"email","label":{"es":"Email y newsletters","en":"Email and newsletters"},"commercialModule":"email_marketing","services":["mailings"],"mcpChannels":["mailings"],"public":true,"availability":"limited","access":"read_write","requiresConnection":true,"acceptedAliases":["brevo"]}],"info":{"title":"DigitalPublic Agent API","version":"2026-09-10-trial-active-projects-v1","description":"API for external AI agents to interact with DigitalPublic projects. Provides discovery, project context, Google Ads, Meta Ads, LinkedIn organic and LinkedIn Ads, Merchant Center, SEO, AEO, Search Console, WordPress, Analytics, Tag Manager, Business Profile, mailings, CRM, comments, reports, and scheduling.","contact":{"email":"soporte@digitalpublic.com"}},"servers":[{"url":"https://platform.digitalpublic.com","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Project API key starting with dpk_ or global agent token starting with dpa_. dpa_ requests must include projectId or X-DigitalPublic-Project-Id for project-scoped endpoints."}},"schemas":{"AgentRequest":{"type":"object","required":["tool"],"properties":{"tool":{"type":"string","description":"Tool name to execute"},"params":{"type":"object","description":"Tool-specific parameters","default":{}},"projectId":{"type":"string","description":"Required when using a dpa_ global agent token. dpk_ project API keys infer the project automatically."}}},"AgentResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"type":"string","description":"executed, queued, pending_approval, or a domain-specific status"},"operationId":{"type":"string","description":"Persistent operation id when work continues in the background."},"resourceClass":{"type":"string","enum":["LIGHT","STANDARD","HEAVY"]},"retryAfterSeconds":{"type":"integer"},"data":{"type":"object"},"error":{"type":"string"}}},"ChatGptAdsAccount":{"type":"object","required":["id","name","currency","timezone"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":["string","null"]},"currency":{"type":"string"},"timezone":{"type":"string"},"status":{"type":["string","null"]},"brandReviewStatus":{"type":["string","null"]},"capabilities":{"type":"array","items":{"type":"string"}}}},"ChatGptAdsCampaign":{"type":"object","required":["id","name","status"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"bidding_type":{"type":"string","enum":["impressions","clicks","conversions"]},"budget":{"type":"object"},"targeting":{"type":"object"}}},"ChatGptAdsAdGroup":{"type":"object","required":["id","campaign_id","name","status"],"properties":{"id":{"type":"string"},"campaign_id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"context_hints":{"type":"array","items":{"type":"string"}},"bidding_config":{"type":"object"}}},"ChatGptAdsAd":{"type":"object","required":["id","ad_group_id","status"],"properties":{"id":{"type":"string"},"ad_group_id":{"type":"string"},"status":{"type":"string"},"review_status":{"type":"string"},"creative":{"type":"object"}}},"ChatGptAdsInsight":{"type":"object","required":["date"],"properties":{"date":{"type":"string","format":"date"},"currency":{"type":"string"},"impressions":{"type":"integer"},"clicks":{"type":"integer"},"spend":{"type":"number"},"ctr":{"type":"number"},"cpc":{"type":"number"},"cpm":{"type":"number"},"conversions":{"type":"number"}}},"ChatGptAdsMutationPreview":{"type":"object","required":["resource","operation","accountId","projectId","risk","idempotencyKey"],"properties":{"resource":{"type":"string"},"operation":{"type":"string"},"accountId":{"type":"string"},"projectId":{"type":"string"},"previous":{},"next":{},"economicImpact":{"type":"string"},"risk":{"type":"string","enum":["AUTO_SAFE","APPROVAL_REQUIRED"]},"reason":{"type":"string"},"idempotencyKey":{"type":"string"}}}}},"paths":{"/api/knowledge/agent-query":{"post":{"summary":"Query project-scoped native knowledge vaults","description":"Searches and reads only vault paths explicitly granted to the authenticated project. Every access is audited.","x-tools":[{"name":"list_entries","description":"List authorized knowledge entries and verified consolidation outcomes, searching full original content and metadata before pagination.","params":{"query":{"type":"string","optional":true,"description":"Case-insensitive search across original content and entry metadata (maximum 240 characters)."},"vaultId":{"type":"string","optional":true},"authorId":{"type":"string","optional":true},"actorId":{"type":"string","optional":true},"confirmerId":{"type":"string","optional":true},"provenance":{"type":"string","optional":true},"since":{"type":"string","optional":true},"until":{"type":"string","optional":true},"kind":{"type":"string","optional":true},"state":{"type":"string","optional":true},"cursor":{"type":"string","optional":true},"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_entry","description":"Read an authorized original entry, provenance, evaluation and resulting revisions.","params":{"entryId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_vaults","description":"List active vault bindings and access profiles.","params":{},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search","description":"Search authorized canonical Markdown documents.","params":{"query":{"type":"string","required":true},"vaultSlug":{"type":"string","optional":true},"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_document","description":"Read one authorized document by exact vault slug and path.","params":{"vaultSlug":{"type":"string","required":true},"path":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_instruction","description":"Read the authorized AGENTS.md for a vault.","params":{"vaultSlug":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_changes","description":"List authorized documents changed since an ISO timestamp.","params":{"since":{"type":"string","required":true},"vaultSlug":{"type":"string","optional":true},"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_proposals","description":"List proposals created by this project, including their review status.","params":{"vaultSlug":{"type":"string","optional":true},"status":{"type":"string","optional":true,"description":"pending, applied, rejected, conflict, changes_requested or all"},"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_proposal","description":"Read one proposal created by this project by exact id.","params":{"proposalId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/knowledge/agent-mutate":{"post":{"summary":"Contribute to project-scoped native knowledge vaults","description":"Appends immutable diaries or creates governed proposals. Canonical documents cannot be overwritten directly by agents.","x-tools":[{"name":"append_diary","description":"Append an immutable diary idempotently under raw/diarios/. Diaries contributed by a project remain readable by that project.","params":{"intakeOrigin":{"type":"string","optional":true,"enum":["AGENT","HUMAN"],"description":"Human requests without resolved identity stay pending attribution, preserving raw as evidence."},"originReference":{"type":"string","optional":true,"description":"Required for HUMAN intake. Exact human instruction reference without invented identity."},"vaultSlug":{"type":"string","required":true},"path":{"type":"string","required":true,"description":"Markdown path under raw/diarios/."},"content":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"propose_document","description":"Propose a new canonical document for review.","params":{"vaultSlug":{"type":"string","required":true},"path":{"type":"string","required":true},"content":{"type":"string","required":true},"reason":{"type":"string","optional":true},"evidence":{"type":"array","optional":true},"sourceEntryIds":{"type":"array","optional":true,"description":"Exact authorized original entry ids used as evidence."},"reviewAssessment":{"type":"object","optional":true,"description":"Context, duplicates and contradictions assessment."},"supersedesProposalId":{"type":"string","optional":true},"reviewGroupId":{"type":"string","optional":true},"reviewGroupLabel":{"type":"string","optional":true},"reviewGroupOrder":{"type":"integer","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"propose_update","description":"Propose an update using the exact base SHA-256.","params":{"vaultSlug":{"type":"string","required":true},"path":{"type":"string","required":true},"content":{"type":"string","required":true},"baseSha256":{"type":"string","required":true},"reason":{"type":"string","optional":true},"evidence":{"type":"array","optional":true},"sourceEntryIds":{"type":"array","optional":true,"description":"Exact authorized original entry ids used as evidence."},"reviewAssessment":{"type":"object","optional":true,"description":"Context, duplicates and contradictions assessment."},"supersedesProposalId":{"type":"string","optional":true},"reviewGroupId":{"type":"string","optional":true},"reviewGroupLabel":{"type":"string","optional":true},"reviewGroupOrder":{"type":"integer","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"apply_proposal","description":"Legacy operation: returns approval required. Canonical changes require an authenticated human decision on the exact dossier version.","params":{"proposalId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reject_proposal","description":"Legacy operation: use the exact versioned review dossier to reject with a human decision.","params":{"proposalId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params"}}},"/api/knowledge/maintenance/agent-query":{"post":{"summary":"Read one assigned vault maintenance context","description":"Returns canonical maintenance instructions and pending proposals only for the authenticated host assignment and generation.","x-tools":[{"name":"maintenance_entries","description":"Read one page of the frozen active maintenance manifest and record exact original reads.","params":{"runId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_context","description":"Read canonical instructions and pending proposals for an assigned vault.","params":{"maintenanceId":{"type":"string","required":true},"generation":{"type":"number","required":true},"cadence":{"type":"string","enum":["WEEKLY","MONTHLY"],"required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_resolve","description":"Resolve the next DigitalPublic-owned maintenance occurrence and its required action.","params":{"maintenanceId":{"type":"string","required":true},"generation":{"type":"number","required":true},"cadence":{"type":"string","enum":["WEEKLY","MONTHLY"],"required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_document","description":"Read one exact canonical document from the assigned vault, including immutable raw evidence when the maintenance profile permits it.","params":{"maintenanceId":{"type":"string","required":true},"generation":{"type":"number","required":true},"path":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/knowledge/maintenance/agent-mutate":{"post":{"summary":"Execute fenced maintenance for one assigned vault","description":"Claims and completes idempotent evaluation runs. All canonical proposals wait for an authenticated human decision.","x-tools":[{"name":"maintenance_assess_entry","description":"Persist an evaluation for one read entry or revision in the frozen active manifest. Does not claim incorporation.","params":{"runId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"entryId":{"type":"string","optional":true},"revisionId":{"type":"string","optional":true},"outcome":{"type":"string","required":true,"enum":["PROPOSED","KNOWN","EVIDENCE","BLOCKED","REVIEWED"]},"note":{"type":"string","required":true},"assessment":{"type":"object","optional":true},"matchedDocuments":{"type":"array","optional":true},"nextReviewAt":{"type":"string","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_claim","description":"Claim one cadence occurrence and receive a fencing token.","params":{"maintenanceId":{"type":"string","required":true},"generation":{"type":"number","required":true},"cadence":{"type":"string","enum":["WEEKLY","MONTHLY"],"required":true},"occurrenceKey":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_claim_v2","description":"Claim one server-resolved occurrence and receive a fresh fencing token.","params":{"occurrenceId":{"type":"string","required":true},"generation":{"type":"number","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_renew","description":"Renew the active vault-wide maintenance lease.","params":{"runId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_complete","description":"Close a claimed run with the exact fencing token and a mandatory coverage report on success.","params":{"runId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"status":{"type":"string","enum":["COMPLETED","FAILED","SKIPPED","BLOCKED"],"required":true},"summary":{"type":"string","optional":true},"metrics":{"type":"object","optional":true},"errorCode":{"type":"string","optional":true},"errorDetail":{"type":"string","optional":true},"retryAfterSeconds":{"type":"number","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_finish_human_contribution","description":"Finish consolidation of a confirmed human contribution with linked proposals or exact existing-document hashes. No authorship confirmation is possible here.","params":{"runId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"contributionId":{"type":"string","required":true},"requiresReview":{"type":"boolean","required":true},"note":{"type":"string","required":true},"matchedDocuments":{"type":"array","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_propose_update","description":"Create a governed proposal from an active fenced maintenance run. Link confirmed human testimony and optional review grouping or supersession metadata.","params":{"humanContributionId":{"type":"string","optional":true},"runId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"targetPath":{"type":"string","required":true},"proposedContent":{"type":"string","required":true},"baseSha256":{"type":"string","optional":true},"reason":{"type":"string","optional":true},"evidence":{"type":"array","optional":true},"sourceEntryIds":{"type":"array","optional":true,"description":"Exact authorized original entry ids used as evidence."},"reviewAssessment":{"type":"object","optional":true,"description":"Context, duplicates and contradictions assessment."},"supersedesProposalId":{"type":"string","optional":true},"reviewGroupId":{"type":"string","optional":true},"reviewGroupLabel":{"type":"string","optional":true},"reviewGroupOrder":{"type":"integer","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"maintenance_apply_eligible_proposal","description":"Legacy operation: returns human approval required, including historical AUTO_ELIGIBLE proposals.","params":{"runId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"proposalId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","additionalScopes":["knowledge:maintain"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params"}}},"/api/knowledge/contributions/agent-query":{"post":{"summary":"Read authorized human contribution intake","x-tools":[{"name":"get_contribution_context","description":"Read an exact canonical context document allowed by the intake profile. Does not grant general vault access.","params":{"vaultId":{"type":"string","required":true},"projectId":{"type":"string","optional":true},"path":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:contribute"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_contribution_targets","description":"List only authorized human-contribution vaults and eligible confirming users. Omit projectId for explicit direct vault grants; global project access is not a direct grant.","params":{"projectId":{"type":"string","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:contribute"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_human_contribution","description":"Read the persisted state and provenance of one contribution submitted by this agent. Pending confirmation is not canonical knowledge.","params":{"contributionId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:contribute"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_human_contributions","description":"List this agent's currently authorized human contributions and consolidation outcomes.","params":{},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:contribute"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/knowledge/contributions/agent-mutate":{"post":{"summary":"Register a human contribution pending personal confirmation","x-tools":[{"name":"submit_human_contribution","description":"Record the user's original words and an authorized destination idempotently. Return the confirmation link. Only the addressed user's authenticated platform session can confirm authorship. Never infer confirmation from OAuth or call this for agent-generated learning.","params":{"vaultId":{"type":"string","required":true},"projectId":{"type":"string","optional":true},"userId":{"type":"string","required":true},"originalText":{"type":"string","required":true},"targetPath":{"type":"string","required":true},"intent":{"type":"string","enum":["INFORMATION","INSTRUCTION"],"optional":true},"idempotencyKey":{"type":"string","required":true},"conversationReference":{"type":"string","optional":true},"supersedesId":{"type":"string","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:contribute"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/knowledge-review/agent-query":{"post":{"summary":"Project and vault bounded knowledge review","x-tools":[{"name":"list_supervision_entries","description":"Complete paginated supervision inventory of diaries, human contributions from all registrars, and proposals in authorized vaults. Includes origin, registrar, author, phase, evidence, conflicts and explicit scope/coverage. Outside the scope remains unknown.","params":{"query":{"type":"string","optional":true},"vaultId":{"type":"string","optional":true},"projectId":{"type":"string","optional":true},"kind":{"type":"string","optional":true},"state":{"type":"string","optional":true},"provenance":{"type":"string","optional":true},"actorId":{"type":"string","optional":true},"authorId":{"type":"string","optional":true},"confirmerId":{"type":"string","optional":true},"since":{"type":"string","optional":true},"until":{"type":"string","optional":true},"cursor":{"type":"string","optional":true},"limit":{"type":"integer","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:review"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_supervision_entry","description":"Read the immutable original, provenance, evaluation and proposals of an entry in authorized supervisory vaults, including historical diaries and other registrars' human contributions.","params":{"entryId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:review"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_reviews","description":"List paginated review summaries across authorized vaults. Global reviewers can supervise all active vaults; project/group reviewers use enabled vault bindings. Optional vaultId/projectId filters narrow the queue. Never decide automatically.","params":{"vaultId":{"type":"string","optional":true},"projectId":{"type":"string","optional":true,"description":"Optional origin-project filter within the current administrative scope."},"documentType":{"type":"string","optional":true},"reviewGroupId":{"type":"string","optional":true},"statuses":{"type":"array","optional":true},"maxAgeDays":{"type":"integer","optional":true},"limit":{"type":"integer","optional":true},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:review"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_review","description":"Read current/proposed content, differences, evidence, canonical revision id, exact snapshot hash and decision history. CHANGES_REQUESTED proposals offer individual rejection with a required explanation to close an obsolete proposal; no canonical content is changed.","params":{"proposalId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:review"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_review_group","description":"Read every member of an atomic review group and its exact snapshot hash.","params":{"reviewGroupId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:review"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/knowledge-review/agent-mutate":{"post":{"summary":"Project and vault bounded human-attested knowledge decisions","x-tools":[{"name":"mark_human_origin_pending","description":"Record a human-directed intake's official provenance reference, preserving the raw original. Without a linked contribution, leaves explicit pending attribution; never invents an author or confirmation. Optional contribution must match entry vault/project and current permissions. Exact retries are idempotent.","params":{"entryId":{"type":"string","required":true},"expectedOriginalHash":{"type":"string","required":true},"reference":{"type":"string","required":true},"contributionId":{"type":"string","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:approve"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"prepare_review_decision","description":"Freeze exactly one proposal OR group, decision and explanation for five minutes. Present the returned reviewUrl to the human BEFORE asking for confirmation, together with the decision, scope and expiry. The authenticated URL shows the exact frozen current/proposed content and differences. Wait for explicit human instruction before confirming. No document is applied. Approval must be completed by an authenticated human through the review URL.","params":{"proposalId":{"type":"string","optional":true},"reviewGroupId":{"type":"string","optional":true},"decision":{"type":"string","required":true,"enum":["approve","reject","request_changes"]},"note":{"type":"string","optional":true,"description":"Required for rejection or changes requested."},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:approve"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"confirm_review","description":"Approval through an agent code is denied; direct the human to the authenticated review URL. For rejection or requesting changes, use the single-use code only AFTER presenting reviewUrl and receiving explicit human instruction. No autonomous or policy approval. This attests the agent credential and its claim of human consent, NOT cryptographic human identity. Changed, expired, incorrect or reused challenges fail.","params":{"challengeId":{"type":"string","required":true},"confirmationCode":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:approve"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/knowledge-clarifications/agent-query":{"post":{"summary":"Participant private priority knowledge inbox","x-tools":[{"name":"list_clarification_participants","description":"List currently authorized recipient people and agents separately for an exact proposal. Requires reviewer authority. Original human authorship remains explicit or unknown; an agent name never identifies a human.","params":{"proposalId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_clarifications","description":"Consult your private priority inbox at start/resume and according to each thread pollMinutes during activity. Persists consultation evidence. Does not attest receipt, human response or host availability. Follow every cursor. Participants and current vault/project grants are required. Inform your responsible human; perform no business action or approval.","params":{"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused only for the same exact request."},"cursor":{"type":"string","optional":true},"limit":{"type":"integer","optional":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_clarification","description":"Read an authorized private clarification thread, immutable request version/hash, separately identified human author, registrar, participants, receipts, responses and resolution history.","params":{"threadId":{"type":"string","required":true}},"x-mcp":{"channel":"knowledge","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/knowledge-clarifications/agent-mutate":{"post":{"summary":"Participant bounded private knowledge discussion","x-tools":[{"name":"open_clarification","description":"Persist a question on an exact proposal version without changing its review status. Requires current review authority. Explicit recipient userId and agentId are separate participants; never infer a person from agent name. Validates recipients' current vault/project rights. Creates durable internal priority inbox availability; sends no external message.","params":{"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused only for the same exact request."},"proposalId":{"type":"string","required":true},"expectedVersion":{"type":"integer","required":true},"expectedHash":{"type":"string","required":true},"content":{"type":"string","required":true},"requesterUserId":{"type":"string","optional":true,"description":"Explicit human requester also listed as REVIEWER; requires humanReference and current review authority."},"humanReference":{"type":"string","optional":true},"reviewEventId":{"type":"string","optional":true,"description":"Existing REQUEST_CHANGES event; question must preserve its original note and target."},"participants":{"type":"array","required":true,"description":"[{userId OR agentId, role: RESPONDER|RESPONSIBLE|REVIEWER}]; at least one responder."},"policy":{"type":"object","optional":true,"description":"reminderMinutes 60..43200 (1440), maxReminders 0..5 (3), escalationMinutes 60..86400 (4320), pollMinutes 5..1440 (30)."}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_clarification","description":"Record explicit receipt, response, treatment/blocking, reviewer resolution or policy. Receipt never means response. A response may link a real successor proposal; approval of its exact version remains separate. attributedUserId plus humanReference records a relayed human authorship claim, not authenticated human approval. Use current revision and stable idempotency key; never autonomously impersonate a human.","params":{"threadId":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused only for the same exact request."},"expectedRevision":{"type":"integer","required":true},"action":{"type":"string","required":true,"enum":["receive","respond","resolve","configure","block"]},"content":{"type":"string","optional":true},"attributedUserId":{"type":"string","optional":true},"humanReference":{"type":"string","optional":true},"proposalId":{"type":"string","optional":true},"policy":{"type":"object","optional":true}},"x-mcp":{"channel":"knowledge","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/codex/agent-query":{"post":{"summary":"Query the authenticated Codex execution host","description":"Returns only the host and desired native automations bound to the authenticated dpa_ identity.","x-tools":[{"name":"get_project_supervision","description":"Read one authorized project's Codex or ZCode executor, assigned host, window, cadence, last observed pass, preparation and blockers. Scheduled times are reference windows. An assigned dispatch host needs no global read grant. Feedback distinguishes insufficient permission and supplies an authorized referral.","params":{"projectId":{"type":"string","required":true}},"x-mcp":{"channel":"codex","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_host","description":"Read the authenticated host identity and effective health.","params":{},"x-mcp":{"channel":"codex","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_desired_automations","description":"List only vault automations assigned to this host, including pause tombstones.","params":{},"x-mcp":{"channel":"codex","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_maintenance_recoveries","description":"List due retry and administrative maintenance deliveries for this host.","params":{},"x-mcp":{"channel":"codex","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_desired_project_workers","description":"List project conversations that this authenticated host must provision or retain.","params":{},"x-mcp":{"channel":"codex","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_due_project_dispatches","description":"Read deliverable, running, blocked and recovery queue state without mutating it.","params":{},"x-mcp":{"channel":"codex","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"codex","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/codex/agent-mutate":{"post":{"summary":"Reconcile native Codex automations for one authenticated host","description":"Records host heartbeat and observed native task identifiers without accepting a caller-supplied host id.","x-tools":[{"name":"host_heartbeat","description":"Record host liveness, supervisor task identity, version and capabilities.","params":{"supervisorVersion":{"type":"string","optional":true},"codexHostId":{"type":"string","optional":true},"supervisorThreadId":{"type":"string","optional":true},"supervisorAutomationId":{"type":"string","optional":true},"capabilities":{"type":"array","optional":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reserve_maintenance_recovery","description":"Atomically reserve one recovery delivery and receive its signed prompt and destination thread.","params":{"occurrenceId":{"type":"string","required":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"confirm_maintenance_recovery","description":"Confirm or fail one reserved recovery delivery.","params":{"occurrenceId":{"type":"string","required":true},"deliveryToken":{"type":"string","required":true},"delivered":{"type":"boolean","required":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_maintenance_schedule","description":"Materialize overdue maintenance occurrences transactionally before recovery delivery.","params":{},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"confirm_maintenance_recovery_v2","description":"Record delivered, failed or uncertain recovery delivery with exact native-turn evidence.","params":{"occurrenceId":{"type":"string","required":true},"deliveryToken":{"type":"string","required":true},"outcome":{"type":"string","enum":["DELIVERED","FAILED","UNCERTAIN"],"required":true},"observedThreadId":{"type":"string","optional":true},"nativeTurnId":{"type":"string","optional":true},"observedAt":{"type":"string","optional":true},"observedStatus":{"type":"string","optional":true},"detail":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reserve_maintenance_thread_repair","description":"Reserve an idempotent repair only when the assigned maintenance conversation is unequivocally absent or archived.","params":{"scheduleId":{"type":"string","required":true},"generation":{"type":"number","required":true},"idempotencyKey":{"type":"string","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"confirm_maintenance_thread_repair","description":"Confirm a fenced conversation repair with the new native identifiers and exact prompt hash.","params":{"scheduleId":{"type":"string","required":true},"generation":{"type":"number","required":true},"reservationToken":{"type":"string","required":true},"nativeThreadId":{"type":"string","required":true},"nativeAutomationId":{"type":"string","required":true},"observedPromptHash":{"type":"string","required":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_reconciliation","description":"Report native task, per-schedule thread and prompt hashes observed by this host.","params":{"maintenanceId":{"type":"string","required":true},"generation":{"type":"number","required":true},"threadId":{"type":"string","optional":true},"schedules":{"type":"array","optional":true,"description":"Observed schedules; each item may include scheduleId, nativeAutomationId, threadId, observedPromptHash, status and error."},"previousPaused":{"type":"boolean","optional":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_task_inventory","description":"Persist a restorable native-task inventory. Omitted optional fields preserve their last observed values; include the full prompt when verifying its version or hash.","params":{"automations":{"type":"array","required":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"dispatcher_heartbeat","description":"Record liveness, harness version, subscription source and dynamically observed model catalogue.","params":{"dispatcherVersion":{"type":"string","optional":true},"dispatcherThreadId":{"type":"string","optional":true},"dispatcherAutomationId":{"type":"string","optional":true},"capabilities":{"type":"array","optional":true},"modelCatalog":{"type":"array","optional":true,"description":"Models observed by the native harness with id, label and supported reasoningLevels."},"credentialSource":{"type":"string","optional":true,"enum":["codex_subscription","zcode_subscription"]},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_workers","description":"Materialize desired project workers for the authenticated host. This is the explicit mutating counterpart of the read-only desired-worker query.","params":{},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_dispatch_queue","description":"Materialize due project work, expire leases and make safe recoveries before reading the queue.","params":{},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_worker","description":"Report a provisioned project conversation for the authenticated host and generation.","params":{"workerId":{"type":"string","required":true},"generation":{"type":"number","required":true},"threadId":{"type":"string","optional":true},"codexProjectId":{"type":"string","optional":true},"status":{"type":"string","enum":["PROVISIONING","ACTIVE","IDLE","ERROR","PAUSED"],"required":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_worker_action","description":"Acknowledge the start or result of one fenced project migration action.","params":{"workerId":{"type":"string","required":true},"generation":{"type":"number","required":true},"action":{"type":"string","enum":["VERIFY_LEGACY","CREATE","PREPARE","PAUSE_LEGACY","RESUME_LEGACY"],"required":true},"state":{"type":"string","enum":["STARTED","COMPLETED","FAILED"],"required":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"claim_project_dispatch","description":"Claim one due project dispatch using an atomic lease and fencing token.","params":{"dispatchId":{"type":"string","required":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_dispatch","description":"Report a delivered, uncertain, skipped or failed fenced execution in its fresh native conversation without regressing a child claim.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"status":{"type":"string","enum":["DISPATCHED","UNCERTAIN","FAILED","SKIPPED"],"required":true},"executionThreadId":{"type":"string","optional":true},"nativeTurnId":{"type":"string","optional":true},"errorCode":{"type":"string","optional":true},"errorDetail":{"type":"string","optional":true},"retryAfterSeconds":{"type":"number","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_runtime","description":"Record the native harness version and usage counters for a fenced dispatch.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"runtimeVersion":{"type":"string","optional":true},"usage":{"type":"object","optional":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_terminal_dispatch","description":"Administratively close a dispatch whose work is completed after its lease expired. Requires the assigned enrolled host, project write access, current fencing/status, idempotency key, a fresh read of the exact terminal native turn and persisted successful results for every offered task and cycle. Recoverable: BLOCKED/WORKER_LEASE_EXPIRED, FAILED, EXPIRED, DELIVERY_UNCERTAIN, expired RUNNING or DISPATCHED. Other active dispatches reject closure. Native evidence is an attestation by the assigned host, bound to its delivery receipt. Preserves business effects and delivery history; never sends or retries work.","params":{"projectId":{"type":"string","required":true},"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"expectedStatus":{"type":"string","enum":["BLOCKED","FAILED","EXPIRED","DELIVERY_UNCERTAIN","RUNNING","DISPATCHED"],"required":true},"idempotencyKey":{"type":"string","required":true},"reason":{"type":"string","required":true},"nativeEvidence":{"type":"object","required":true,"description":"harness CODEX/ZCODE, threadId, nativeTurnId, status COMPLETED/FAILED/INTERRUPTED, startedAt/completedAt/observedAt ISO UTC, source NATIVE_API/NATIVE_READ_ONLY_STORE and sourceReference identifying the native read. observedAt must be within 15 minutes."},"workResults":{"type":"array","required":true,"description":"Exactly one per offered task: taskId, outcome COMPLETED/ALREADY_RESOLVED and exactly one agentTaskExecutionId or processRunId. Requires successful terminal records; COMPLETED binds to dispatch cycle, ALREADY_RESOLVED rejects work still due."}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_delivery","description":"Reconcile a delivery whose native send result was uncertain after inspecting the destination conversation. Delivered outcomes require an observed or persisted nativeTurnId. Use DELIVERED_NOT_CLAIMED only when the exact native turn is complete and no worker claim or business effect exists. NOT_DELIVERED rejects consumed receipts and persisted effects; keep UNCERTAIN when evidence is incomplete.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"outcome":{"type":"string","enum":["DELIVERED","DELIVERED_NOT_CLAIMED","NOT_DELIVERED","UNCERTAIN"],"required":true},"nativeTurnId":{"type":"string","optional":true},"detail":{"type":"string","required":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"release_project_dispatch","description":"Release a claimed dispatch when its project conversation is busy so it can be retried later.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"codex","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params"}}},"/api/orchestrator/agent-query":{"post":{"summary":"Query the authenticated orchestration host","description":"Returns only the host and desired native automations bound to the authenticated dpa_ identity.","x-tools":[{"name":"get_project_supervision","description":"Read one authorized project's Codex or ZCode executor, assigned host, window, cadence, last observed pass, preparation and blockers. Scheduled times are reference windows. An assigned dispatch host needs no global read grant. Feedback distinguishes insufficient permission and supplies an authorized referral.","params":{"projectId":{"type":"string","required":true}},"x-mcp":{"channel":"orchestrator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_host","description":"Read the authenticated host identity and effective health.","params":{},"x-mcp":{"channel":"orchestrator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_desired_automations","description":"List only vault automations assigned to this host, including pause tombstones.","params":{},"x-mcp":{"channel":"orchestrator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_maintenance_recoveries","description":"List due retry and administrative maintenance deliveries for this host.","params":{},"x-mcp":{"channel":"orchestrator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_desired_project_workers","description":"List project conversations that this authenticated host must provision or retain.","params":{},"x-mcp":{"channel":"orchestrator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_due_project_dispatches","description":"Read deliverable, running, blocked and recovery queue state without mutating it.","params":{},"x-mcp":{"channel":"orchestrator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"orchestrator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/orchestrator/agent-mutate":{"post":{"summary":"Reconcile native orchestration workloads for one authenticated host","description":"Records host heartbeat and observed native task identifiers without accepting a caller-supplied host id.","x-tools":[{"name":"host_heartbeat","description":"Record host liveness, supervisor task identity, version and capabilities.","params":{"supervisorVersion":{"type":"string","optional":true},"codexHostId":{"type":"string","optional":true},"supervisorThreadId":{"type":"string","optional":true},"supervisorAutomationId":{"type":"string","optional":true},"capabilities":{"type":"array","optional":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reserve_maintenance_recovery","description":"Atomically reserve one recovery delivery and receive its signed prompt and destination thread.","params":{"occurrenceId":{"type":"string","required":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"confirm_maintenance_recovery","description":"Confirm or fail one reserved recovery delivery.","params":{"occurrenceId":{"type":"string","required":true},"deliveryToken":{"type":"string","required":true},"delivered":{"type":"boolean","required":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_maintenance_schedule","description":"Materialize overdue maintenance occurrences transactionally before recovery delivery.","params":{},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"confirm_maintenance_recovery_v2","description":"Record delivered, failed or uncertain recovery delivery with exact native-turn evidence.","params":{"occurrenceId":{"type":"string","required":true},"deliveryToken":{"type":"string","required":true},"outcome":{"type":"string","enum":["DELIVERED","FAILED","UNCERTAIN"],"required":true},"observedThreadId":{"type":"string","optional":true},"nativeTurnId":{"type":"string","optional":true},"observedAt":{"type":"string","optional":true},"observedStatus":{"type":"string","optional":true},"detail":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reserve_maintenance_thread_repair","description":"Reserve an idempotent repair only when the assigned maintenance conversation is unequivocally absent or archived.","params":{"scheduleId":{"type":"string","required":true},"generation":{"type":"number","required":true},"idempotencyKey":{"type":"string","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"confirm_maintenance_thread_repair","description":"Confirm a fenced conversation repair with the new native identifiers and exact prompt hash.","params":{"scheduleId":{"type":"string","required":true},"generation":{"type":"number","required":true},"reservationToken":{"type":"string","required":true},"nativeThreadId":{"type":"string","required":true},"nativeAutomationId":{"type":"string","required":true},"observedPromptHash":{"type":"string","required":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_reconciliation","description":"Report native task, per-schedule thread and prompt hashes observed by this host.","params":{"maintenanceId":{"type":"string","required":true},"generation":{"type":"number","required":true},"threadId":{"type":"string","optional":true},"schedules":{"type":"array","optional":true,"description":"Observed schedules; each item may include scheduleId, nativeAutomationId, threadId, observedPromptHash, status and error."},"previousPaused":{"type":"boolean","optional":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_task_inventory","description":"Persist a restorable native-task inventory. Omitted optional fields preserve their last observed values; include the full prompt when verifying its version or hash.","params":{"automations":{"type":"array","required":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["knowledge:reconcile"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"dispatcher_heartbeat","description":"Record liveness, harness version, subscription source and dynamically observed model catalogue.","params":{"dispatcherVersion":{"type":"string","optional":true},"dispatcherThreadId":{"type":"string","optional":true},"dispatcherAutomationId":{"type":"string","optional":true},"capabilities":{"type":"array","optional":true},"modelCatalog":{"type":"array","optional":true,"description":"Models observed by the native harness with id, label and supported reasoningLevels."},"credentialSource":{"type":"string","optional":true,"enum":["codex_subscription","zcode_subscription"]},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_workers","description":"Materialize desired project workers for the authenticated host. This is the explicit mutating counterpart of the read-only desired-worker query.","params":{},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_dispatch_queue","description":"Materialize due project work, expire leases and make safe recoveries before reading the queue.","params":{},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_worker","description":"Report a provisioned project conversation for the authenticated host and generation.","params":{"workerId":{"type":"string","required":true},"generation":{"type":"number","required":true},"threadId":{"type":"string","optional":true},"codexProjectId":{"type":"string","optional":true},"status":{"type":"string","enum":["PROVISIONING","ACTIVE","IDLE","ERROR","PAUSED"],"required":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_worker_action","description":"Acknowledge the start or result of one fenced project migration action.","params":{"workerId":{"type":"string","required":true},"generation":{"type":"number","required":true},"action":{"type":"string","enum":["VERIFY_LEGACY","CREATE","PREPARE","PAUSE_LEGACY","RESUME_LEGACY"],"required":true},"state":{"type":"string","enum":["STARTED","COMPLETED","FAILED"],"required":true},"error":{"type":"string","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"claim_project_dispatch","description":"Claim one due project dispatch using an atomic lease and fencing token.","params":{"dispatchId":{"type":"string","required":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_dispatch","description":"Report a delivered, uncertain, skipped or failed fenced execution in its fresh native conversation without regressing a child claim.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"status":{"type":"string","enum":["DISPATCHED","UNCERTAIN","FAILED","SKIPPED"],"required":true},"executionThreadId":{"type":"string","optional":true},"nativeTurnId":{"type":"string","optional":true},"errorCode":{"type":"string","optional":true},"errorDetail":{"type":"string","optional":true},"retryAfterSeconds":{"type":"number","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_project_runtime","description":"Record the native harness version and usage counters for a fenced dispatch.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"runtimeVersion":{"type":"string","optional":true},"usage":{"type":"object","optional":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_terminal_dispatch","description":"Administratively close a dispatch whose work is completed after its lease expired. Requires the assigned enrolled host, project write access, current fencing/status, idempotency key, a fresh read of the exact terminal native turn and persisted successful results for every offered task and cycle. Recoverable: BLOCKED/WORKER_LEASE_EXPIRED, FAILED, EXPIRED, DELIVERY_UNCERTAIN, expired RUNNING or DISPATCHED. Other active dispatches reject closure. Native evidence is an attestation by the assigned host, bound to its delivery receipt. Preserves business effects and delivery history; never sends or retries work.","params":{"projectId":{"type":"string","required":true},"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"expectedStatus":{"type":"string","enum":["BLOCKED","FAILED","EXPIRED","DELIVERY_UNCERTAIN","RUNNING","DISPATCHED"],"required":true},"idempotencyKey":{"type":"string","required":true},"reason":{"type":"string","required":true},"nativeEvidence":{"type":"object","required":true,"description":"harness CODEX/ZCODE, threadId, nativeTurnId, status COMPLETED/FAILED/INTERRUPTED, startedAt/completedAt/observedAt ISO UTC, source NATIVE_API/NATIVE_READ_ONLY_STORE and sourceReference identifying the native read. observedAt must be within 15 minutes."},"workResults":{"type":"array","required":true,"description":"Exactly one per offered task: taskId, outcome COMPLETED/ALREADY_RESOLVED and exactly one agentTaskExecutionId or processRunId. Requires successful terminal records; COMPLETED binds to dispatch cycle, ALREADY_RESOLVED rejects work still due."}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_project_delivery","description":"Reconcile a delivery whose native send result was uncertain after inspecting the destination conversation. Delivered outcomes require an observed or persisted nativeTurnId. Use DELIVERED_NOT_CLAIMED only when the exact native turn is complete and no worker claim or business effect exists. NOT_DELIVERED rejects consumed receipts and persisted effects; keep UNCERTAIN when evidence is incomplete.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"outcome":{"type":"string","enum":["DELIVERED","DELIVERED_NOT_CLAIMED","NOT_DELIVERED","UNCERTAIN"],"required":true},"nativeTurnId":{"type":"string","optional":true},"detail":{"type":"string","required":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"release_project_dispatch","description":"Release a claimed dispatch when its project conversation is busy so it can be retried later.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"orchestrator","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params"}}},"/api/project-worker/agent-query":{"post":{"summary":"Read one fenced project worker context","description":"Returns only the exact work attached to the signed dispatch for the authenticated host.","x-tools":[{"name":"preview_run_now","description":"Preview explicit overdue project tasks and their active external descendants, effective policy and delivery blockers. Requires administrative project:dispatch scope. No business work is executed.","params":{"projectId":{"type":"string","required":true},"taskIds":{"type":"array","required":true}},"x-mcp":{"channel":"project","effect":"read","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"dispatch_status","description":"Read the exact project dispatch, linked native execution, delivery attempts and verified work results.","params":{"projectId":{"type":"string","required":true},"dispatchId":{"type":"string","required":true}},"x-mcp":{"channel":"project","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_context","description":"Re-read the exact project and task state of a live fenced dispatch without widening its scope.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true}},"x-mcp":{"channel":"project","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_readiness_document","description":"Read one exact document from the current canonical readiness package for this fenced worker generation.","params":{"workerId":{"type":"string","required":true},"workerGeneration":{"type":"number","required":true},"path":{"type":"string","required":true}},"x-mcp":{"channel":"project","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"project","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/project-worker/agent-mutate":{"post":{"summary":"Run one fenced project worker dispatch","description":"Claims, completes or fails only the signed dispatch assigned to this host.","x-tools":[{"name":"run_now","description":"Materialize one official dispatch outside the operating window without changing recurring schedules. Only after an explicit human instruction authorizing the exact preview, supply its previewHash and humanInstructionReference. Business actions retain their independent approvals. Reuse idempotencyKey on retries and follow dispatch_status; pending delivery never proves completion.","params":{"projectId":{"type":"string","required":true},"taskIds":{"type":"array","required":true},"previewHash":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"humanInstructionReference":{"type":"string","required":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["project:dispatch"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_prepare","description":"Prove from the child conversation that the project worker contract is available without executing business work.","params":{"workerId":{"type":"string","required":true},"workerGeneration":{"type":"number","required":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_ready","description":"Confirm readiness with exact revision and SHA-256 evidence for the canonical instruction and every unconditional document dependency it declares.","params":{"workerId":{"type":"string","required":true},"workerGeneration":{"type":"number","required":true},"contractVersion":{"type":"string","required":true},"vaultSlug":{"type":"string","required":true},"instructionPath":{"type":"string","required":true},"instructionRevision":{"type":"number","optional":true},"instructionSha256":{"type":"string","required":true},"documentEvidence":{"type":"array","required":true,"description":"Every document returned by worker_prepare, each with path, revision and sha256."}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_readiness_failed","description":"Record a transient or blocking readiness failure reported by the child conversation.","params":{"workerId":{"type":"string","required":true},"workerGeneration":{"type":"number","required":true},"transient":{"type":"boolean","required":true},"errorCode":{"type":"string","required":true},"errorDetail":{"type":"string","required":true},"retryAfterSeconds":{"type":"number","optional":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"legacy_prepare","description":"Start a read-only continuity check from an active legacy project conversation.","params":{"workerId":{"type":"string","required":true},"workerGeneration":{"type":"number","required":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"legacy_ready","description":"Confirm that an active legacy conversation can read the complete canonical authority chain.","params":{"workerId":{"type":"string","required":true},"workerGeneration":{"type":"number","required":true},"contractVersion":{"type":"string","required":true},"vaultSlug":{"type":"string","required":true},"instructionPath":{"type":"string","required":true},"instructionRevision":{"type":"number","optional":true},"instructionSha256":{"type":"string","required":true},"documentEvidence":{"type":"array","required":true,"description":"Every document returned by legacy_prepare, each with path, revision and sha256."}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"legacy_readiness_failed","description":"Record a transient or blocking continuity failure from an active legacy conversation.","params":{"workerId":{"type":"string","required":true},"workerGeneration":{"type":"number","required":true},"transient":{"type":"boolean","required":true},"errorCode":{"type":"string","required":true},"errorDetail":{"type":"string","required":true},"retryAfterSeconds":{"type":"number","optional":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_claim","description":"Claim the signed dispatch inside its permanent project conversation and read the exact offered work.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_renew","description":"Renew a live fenced project execution before its lease expires.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_complete","description":"Complete a fenced project dispatch with a verifiable result for every offered work item.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"status":{"type":"string","enum":["COMPLETED","SKIPPED"],"optional":true},"nativeTurnId":{"type":"string","optional":true},"workResults":{"type":"array","required":true,"description":"One result per offered task: taskId, outcome (COMPLETED, BLOCKED, DEFERRED, ALREADY_RESOLVED, SKIPPED), agentTaskExecutionId or processRunId. SKIPPED requires humanInstructionReference and reason and must omit execution references; it records an authorized exclusion without executing or rescheduling the task."}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"worker_fail","description":"Fail a fenced project dispatch with a classification and evidence for every offered work item.","params":{"dispatchId":{"type":"string","required":true},"fencingToken":{"type":"number","required":true},"nativeTurnId":{"type":"string","optional":true},"errorCode":{"type":"string","optional":true},"errorDetail":{"type":"string","optional":true},"workResults":{"type":"array","required":true,"description":"One result per offered task: taskId, outcome (COMPLETED, BLOCKED, DEFERRED, ALREADY_RESOLVED, SKIPPED), agentTaskExecutionId or processRunId. SKIPPED requires humanInstructionReference and reason and must omit execution references; it records an authorized exclusion without executing or rescheduling the task."}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"schedule_override","description":"Temporarily intensify one project routine with a mandatory reason and expiry.","params":{"projectId":{"type":"string","required":true},"taskId":{"type":"string","required":true},"startsAt":{"type":"string","optional":true},"expiresAt":{"type":"string","required":true},"nextRunAt":{"type":"string","optional":true},"scheduleRule":{"type":"object","optional":true},"reason":{"type":"string","required":true},"exitCondition":{"type":"string","optional":true}},"x-mcp":{"channel":"project","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"project","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params"}}},"/api/chatgpt-ads/agent-query":{"post":{"summary":"Query project-scoped ChatGPT Ads","description":"Reads only the OpenAI Ads account explicitly bound to the requested DigitalPublic project. Secrets are never returned.","tags":["ChatGPT Ads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Account, resource, insight, measurement or mutation data."}},"x-tools":[{"name":"get_account","description":"Get account identity, currency, timezone, brand review, capabilities and connection health.","params":{"verify":{"type":"boolean","optional":true}},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"sync_resources","description":"Synchronize campaigns, ad groups and ads into isolated local snapshots.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_campaigns","description":"List campaign snapshots.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ad_groups","description":"List ad group snapshots and context hints.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ads","description":"List ad snapshots and review status.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"sync_insights","description":"Synchronize daily account, campaign, ad group or ad insights.","params":{"level":{"type":"string","enum":["account","campaign","ad_group","ad"],"required":true},"externalId":{"type":"string","optional":true},"startDate":{"type":"string","required":true},"endDate":{"type":"string","required":true}},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_insights","description":"Read persisted insights with explicit data-state semantics in reports.","params":{"level":{"type":"string","optional":true}},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_measurement","description":"Read OFF, CAPI_SAFE or PIXEL_AND_CAPI configuration without secrets.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_locations","description":"Resolve current targetable country, region or DMA IDs before campaign creation.","params":{"query":{"type":"string","required":true},"limit":{"type":"number","optional":true,"default":20}},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_capabilities","description":"Read account capabilities and project feature flags, including beta eligibility.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_custom_audiences","description":"List custom audiences when enabled and legally available for the campaign region.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_conversion_settings","description":"List conversion event settings when the account capability is enabled.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one ChatGPT Ads mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending ChatGPT Ads approvals.","params":{},"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"chatgpt_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/chatgpt-ads/agent-mutate":{"post":{"summary":"Prepare or mutate project-scoped ChatGPT Ads resources","description":"Requires idempotency. Create operations force paused status. Activation, archive, delivery expansion and economic increases remain pending until human approval.","tags":["ChatGPT Ads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Validated, executed safely, or pending human approval."}},"x-tools":[{"name":"mutate_chatgpt_ads","description":"Validate or mutate campaigns, ads, files, gated beta resources, CAPI_SAFE measurement or safe conversion events with project/account isolation and remote read-back. Operation compatibility is validated per resource.","params":{"resource":{"type":"string","required":true,"enum":["campaign","ad_group","ad","file","audience","feed","conversion_source","conversion_event","measurement","account_brand"]},"operation":{"type":"string","required":true,"enum":["create","update","activate","pause","archive","add","remove","replace","merge","update_products","create_pixel","create_capi_key","create_event_setting","validate","send","configure"]},"data":{"type":"object","required":true},"idempotency_key":{"type":"string","required":true},"validate_only":{"type":"boolean","optional":true},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"chatgpt_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"chatgpt_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params"}}},"/api/mcp":{"get":{"summary":"Read MCP transport status without constructing the operational catalog","description":"With status=1 returns a credential-free observation of the serving process. Authentication and current entitlement are checked. The default GET remains the MCP event stream. Status is available without project selection and does not consume operational units.","tags":["Discovery"],"parameters":[{"name":"status","in":"query","required":true,"schema":{"type":"string","enum":["1"]}}],"responses":{"200":{"description":"Catalog observation and safe recovery action"},"401":{"description":"Credential invalid"},"403":{"description":"Access denied"}}}},"/api/agent/discover":{"post":{"summary":"Discover project capabilities","description":"Master discovery endpoint for external agents. Project API keys (dpk_) return the linked project. Global agent tokens (dpa_) return accessible projects when projectId is omitted, or project discovery when projectId/X-DigitalPublic-Project-Id is provided. Answers in two levels: with no parameters it returns the map (identity, active and inactive services, credential usage and one `areas[]` entry per available area); with `area` it returns that chapter in full in `endpoints[]` (tools, parameters, examples and flows). A service that is not connected never ships its tool manual — `project.activeServices.inactive[]` still declares that it exists and how to request activation.","tags":["Discovery"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Required for global agent tokens (dpa_) that need project-specific discovery."},"area":{"type":"string","description":"Return the full chapter of a single area instead of the map. Valid values are listed in `areas[].area` of the default response, for example googleAds, seo, analytics, mailings, tasks or reports. `module` is accepted as an alias."},"detail":{"type":"string","enum":["summary","full"],"description":"`summary` (default) returns the map. `full` returns every area at once and is discouraged: it is an order of magnitude larger and can consume a quarter of an agent context window."}}}}}},"responses":{"200":{"description":"Project map by default, or the requested area chapter / the full catalog"},"400":{"description":"UNKNOWN_DISCOVERY_AREA — the requested area does not exist; the response lists the valid ones"}}}},"/api/agent/projects":{"get":{"summary":"List accessible projects","description":"Lists the projects accessible with the presented credential, with per-project scopes. Project API keys (dpk_) return exactly their linked project; agent tokens (dpa_) return every project they can use (all current projects for global agents, or the explicit access list). Does not require projectId — call it first to learn which project ids you can use in the rest of the API.","tags":["Discovery"],"responses":{"200":{"description":"Accessible projects with per-project scopes"}}},"post":{"summary":"List accessible projects","description":"POST alias of GET /api/agent/projects for agents that send every request as POST.","tags":["Discovery"],"responses":{"200":{"description":"Accessible projects with per-project scopes"}}}},"/api/agent/onboarding-status":{"get":{"summary":"Get DigitalPublic onboarding and entitlement status","description":"Returns the effective plan, expiry, used and remaining operational units, provider-connection capacity, readable modules, effective supervised-write availability, and the stable next action.","tags":["Discovery"],"responses":{"200":{"description":"Current onboarding status and effective limits"},"401":{"description":"Invalid, expired, or revoked DigitalPublic credential"},"403":{"description":"Credential scope or subscription does not allow access"}}}},"/api/agent/onboarding-diagnostic-completed":{"post":{"summary":"Record verifiable first-diagnostic completion without storing the narrative","description":"After the agent has delivered the diagnostic in its own conversation, stores only period, counts and internal evidence identifiers for the onboarding funnel. Prompts, conversations, provider payloads, tokens and OAuth URLs are forbidden.","tags":["Discovery"],"responses":{"200":{"description":"Idempotent completion recorded"},"400":{"description":"Evidence summary invalid"},"409":{"description":"A live trial is required"}}}},"/api/agent/approvals":{"get":{"summary":"List immutable mutation proposals awaiting human review","description":"Requires a project OAuth token. Read access can inspect presentations; approve scope is required to submit a decision. Trial and legacy dpk_/dpa_ credentials cannot approve.","tags":["Governance"],"responses":{"200":{"description":"Pending and changes-requested proposals"},"401":{"description":"Project OAuth required"},"403":{"description":"Approval entitlement missing"}}}},"/api/agent/approvals/{mutationId}":{"get":{"summary":"Get the server-authoritative approval presentation","description":"Returns the redacted proposal snapshot, proposalVersion, proposalHash, risk and available human actions.","tags":["Governance"],"responses":{"200":{"description":"Immutable review presentation"},"404":{"description":"Proposal not found in the OAuth project"}}}},"/api/agent/approvals/{mutationId}/decision":{"post":{"summary":"Submit an explicit human approval decision","description":"OAuth approve only. Approve atomically claims and executes the exact version/hash once; reject is terminal; request_changes returns the proposal to the agent for a new version.","tags":["Governance"],"responses":{"200":{"description":"Decision and authoritative execution result"},"409":{"description":"Stale, already decided, expired or idempotency conflict"}}}},"/api/agent/approvals/{mutationId}/policy-proposal":{"post":{"summary":"Prepare a server-derived 30-day approval policy","description":"Creates an expiring policy proposal for low or medium risk. It does not activate until the same human approves the exact mutation and policy proposal.","tags":["Governance"],"responses":{"201":{"description":"Policy proposal ready for human review"},"403":{"description":"High-risk or forbidden action"}}}},"/api/agent/approval-groups/{groupId}":{"get":{"summary":"Review a declared mutation group","description":"Returns ordered members and a groupHash. batchEligible remains false unless the provider adapter is certified atomic.","tags":["Governance"],"responses":{"200":{"description":"Group presentation and atomicity capability"},"404":{"description":"Group not found in the OAuth project"}}}},"/api/agent/approval-groups/{groupId}/decision":{"post":{"summary":"Decide an atomically executable mutation group","description":"Fails closed and requires individual decisions whenever provider-level atomicity is not certified or any member/version/hash changed.","tags":["Governance"],"responses":{"200":{"description":"Atomic group decision result"},"409":{"description":"Group stale, not pending or not atomically executable"}}}},"/api/agent/approval-policies":{"get":{"summary":"List granular approval policies","tags":["Governance"],"responses":{"200":{"description":"Active and revoked project policies"}}}},"/api/agent/approval-policies/{id}":{"delete":{"summary":"Revoke a granular approval policy","tags":["Governance"],"responses":{"200":{"description":"Policy revoked"},"404":{"description":"Active policy not found"}}}},"/api/agent/navigator":{"post":{"summary":"Ask DigitalPublic Navigator, report a product signal or list the ones already reported","description":"Find implemented capabilities, plan non-executing workflows, check connections and scopes, explain errors, summarize a project, record deduplicated product feedback, or list the product signals already reported for this project with their status and resolution note. Navigator recommendations never execute operational writes by themselves.","tags":["Navigator"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operation"],"properties":{"projectId":{"type":"string","description":"Required in the header/query for global agent tokens."},"operation":{"type":"string","enum":["ask","find_capabilities","plan_workflow","check_readiness","explain_error","summarize_project","report_product_signal","list_product_signals","get_product_signal","add_product_signal_evidence","reply_product_signal"]},"query":{"type":"string","maxLength":20000,"description":"Navigator question, or #number/title/area search for list_product_signals."},"sessionId":{"type":"string","maxLength":200,"description":"Stable isolated Navigator session. Reuse the returned sessionId for follow-up context."},"status":{"type":"string","enum":["open","resolved","dismissed","all"],"description":"Only for list_product_signals. Defaults to all."},"limit":{"type":"integer","minimum":1,"maximum":25}}}}}},"responses":{"200":{"description":"Structured Navigator result with an isolated reusable session id"},"202":{"description":"Product signal recorded or routed"}}}},"/api/agent/navigator-history/agent-query":{"post":{"summary":"Supervise the global Navigator query history","description":"List the oldest Navigator queries first with stable cursor pagination and read one complete secret-redacted exchange. Reserved for global agents with navigator:history:read.","tags":["Navigator"],"x-tools":[{"name":"list_history","description":"List Navigator queries oldest first, filtered by review state, project, date range or text.","params":{"reviewStatus":{"type":"string","optional":true,"enum":["pending","reviewed","all"]},"projectId":{"type":"string","optional":true},"createdFrom":{"type":"string","optional":true},"createdTo":{"type":"string","optional":true},"search":{"type":"string","optional":true},"cursor":{"type":"string","optional":true},"limit":{"type":"integer","optional":true}},"x-mcp":{"channel":"navigator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["navigator:history:read"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_history_entry","description":"Read one Navigator query, its full answer, result metadata and available session context with secrets redacted.","params":{"queryId":{"type":"string","required":true}},"x-mcp":{"channel":"navigator","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["navigator:history:read"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["operation"],"properties":{"operation":{"type":"string","enum":["list","get"]},"queryId":{"type":"string"},"reviewStatus":{"type":"string","enum":["pending","reviewed","all"]},"projectId":{"type":"string"},"createdFrom":{"type":"string","format":"date-time"},"createdTo":{"type":"string","format":"date-time"},"search":{"type":"string","maxLength":240},"cursor":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}}}}}},"responses":{"200":{"description":"Navigator history page or detail"},"403":{"description":"Global Navigator history scope missing"}}}},"/api/agent/navigator-history/agent-mutate":{"post":{"summary":"Record supervised Navigator history decisions","description":"Mark a query reviewed after an explicit human instruction or report a deduplicated ProductSignal finding while preserving the distinction between review and technical resolution.","tags":["Navigator"],"x-tools":[{"name":"mark_history_reviewed","description":"Mark one query reviewed with optimistic concurrency, idempotency and an auditable explicit human instruction.","params":{"queryId":{"type":"string","required":true},"expectedRevision":{"type":"integer","required":true},"idempotencyKey":{"type":"string","required":true},"humanInstructionReference":{"type":"string","required":true}},"x-mcp":{"channel":"navigator","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["navigator:history:read","navigator:history:review"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"report_history_finding","description":"Report a finding from one Navigator query to ProductSignal. ProductSignal fingerprinting and idempotency reuse an existing signal when applicable.","params":{"queryId":{"type":"string","required":true},"type":{"type":"string","required":true,"enum":["BUG","MISSING_CAPABILITY","DOCUMENTATION_GAP","REPEATED_UNANSWERED_QUESTION","UX_FRICTION","FEATURE_REQUEST","INTEGRATION_GAP"]},"severity":{"type":"string","optional":true,"enum":["INFO","LOW","MEDIUM","HIGH","CRITICAL"]},"title":{"type":"string","required":true},"summary":{"type":"string","required":true},"area":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"humanInstructionReference":{"type":"string","required":true}},"x-mcp":{"channel":"navigator","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["navigator:history:read","navigator:history:review"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["operation","queryId","idempotencyKey","humanInstructionReference"],"properties":{"operation":{"type":"string","enum":["mark_reviewed","report_finding"]},"queryId":{"type":"string"},"expectedRevision":{"type":"integer","minimum":0},"idempotencyKey":{"type":"string"},"humanInstructionReference":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"Persisted review or deduplicated ProductSignal finding"},"409":{"description":"Review revision changed"}}}},"/api/agent/product-feedback/agent-query":{"post":{"summary":"Read the global DigitalPublic product-feedback queue","description":"Global identity endpoint for the canonical queue. Requires product-feedback:manage; confidential records additionally require product-feedback:manage-confidential.","tags":["Product feedback"],"x-tools":[{"name":"list_queue","description":"List the cursor-paginated global product-feedback queue with administrative filters, public #numbers, access-filtered affected-project context and aggregate global executionAdmission (three reserved or running executions; uncertain setup blocks admission).","params":{"cursor":{"type":"string","optional":true},"limit":{"type":"integer","optional":true},"statuses":{"type":"array","optional":true},"type":{"type":"string","optional":true,"enum":["BUG","MISSING_CAPABILITY","DOCUMENTATION_GAP","REPEATED_UNANSWERED_QUESTION","UX_FRICTION","FEATURE_REQUEST","INTEGRATION_GAP"]},"severity":{"type":"string","optional":true,"enum":["INFO","LOW","MEDIUM","HIGH","CRITICAL"]},"priority":{"type":"string","optional":true,"enum":["P0","P1","P2","P3"]},"projectId":{"type":"string","optional":true},"assignedAgentId":{"type":"string","optional":true},"olderThan":{"type":"string","optional":true,"description":"ISO8601 upper activity boundary."},"visibility":{"type":"string","optional":true,"enum":["STANDARD","CONFIDENTIAL","ALL"]},"needsReview":{"type":"boolean","optional":true},"query":{"type":"string","optional":true,"description":"Search by #number, number, title, area or tool."}},"x-mcp":{"channel":"product_feedback","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get","description":"Read one canonical product signal by technical id or public #number, with access-filtered affected projects, sanitized timeline and artifacts.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."}},"x-mcp":{"channel":"product_feedback","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_activity","description":"List the chronological ProductSignal event stream with a stable cursor so monitors cannot miss reopen or evidence events between queue snapshots.","params":{"cursor":{"type":"string","optional":true},"limit":{"type":"integer","optional":true},"since":{"type":"string","optional":true,"description":"ISO8601 exclusive event boundary."},"types":{"type":"array","optional":true},"visibility":{"type":"string","optional":true,"enum":["STANDARD","CONFIDENTIAL","ALL"]}},"x-mcp":{"channel":"product_feedback","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"metrics","description":"Measure the seven-day product-feedback observation window and migration regressions.","params":{"since":{"type":"string","optional":true,"description":"ISO8601 start date; defaults to seven days ago."}},"x-mcp":{"channel":"product_feedback","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["operation"],"properties":{"operation":{"type":"string","enum":["list_queue","list_activity","get","metrics"]},"signalId":{"type":"string","description":"Technical id or public reference such as #123."},"query":{"type":"string","maxLength":240},"cursor":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"statuses":{"type":"array","items":{"type":"string"}},"types":{"type":"array","items":{"type":"string"}},"visibility":{"type":"string","enum":["STANDARD","CONFIDENTIAL","ALL"]},"since":{"type":"string","format":"date-time"}}}}}},"responses":{"200":{"description":"Queue page or full signal detail"},"403":{"description":"Required product-feedback scope missing"}}}},"/api/agent/product-feedback/agent-mutate":{"post":{"summary":"Operate the global DigitalPublic product-feedback queue","description":"Claim, triage, converse, relate, assign, link evidence, verify, resolve, dismiss, reopen or merge canonical product feedback. Agent mutations are idempotent and claim-bound, except atomic claim and reopen operations that return a new claimToken.","tags":["Product feedback"],"x-tools":[{"name":"mark_reviewed","description":"Mark one signal reviewed only after an explicit human instruction. The agent must never decide this autonomously.","params":{"signalId":{"type":"string","required":true},"expectedRevision":{"type":"integer","optional":true},"idempotencyKey":{"type":"string","required":true},"humanInstructionReference":{"type":"string","required":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["product-feedback:review"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"mark_reviewed_all","description":"Mark the visible review set reviewed only after an explicit human instruction. Concurrent new activity remains pending.","params":{"visibility":{"type":"string","optional":true,"enum":["STANDARD","CONFIDENTIAL","ALL"]},"idempotencyKey":{"type":"string","required":true},"humanInstructionReference":{"type":"string","required":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["product-feedback:review"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"claim","description":"Atomically claim one signal for 30 minutes.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"heartbeat_claim","description":"Renew an active claim for another 30 minutes.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"release_claim","description":"Release an active claim without changing lifecycle state.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"transition","description":"Move a claimed signal through the authorized planning, implementation, blocking and verification states.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"to":{"type":"string","required":true,"enum":["TRIAGED","PLANNED","IN_PROGRESS","BLOCKED","VERIFYING"]},"reason":{"type":"string","optional":true},"priority":{"type":"string","optional":true,"enum":["P0","P1","P2","P3"]}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_priority","description":"Update priority of an active signal while preserving state, resolution and assignment. Requires current expectedRevision and active claim. Records previous and new priorities; identical retries replay the recorded result.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","required":true},"expectedRevision":{"type":"integer","required":true},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"priority":{"type":"string","required":true,"enum":["P0","P1","P2","P3"]}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"triage","description":"Move an observed or candidate signal to triaged and optionally set administrative priority.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"reason":{"type":"string","optional":true},"priority":{"type":"string","optional":true,"enum":["P0","P1","P2","P3"]}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_information","description":"Request reporter information and move the signal to waiting information.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"message":{"type":"string","required":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reply","description":"Publish a sanitized update to all affected reporters.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"message":{"type":"string","required":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"add_internal_note","description":"Append an internal or confidential management note.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"message":{"type":"string","required":true},"audience":{"type":"string","optional":true,"enum":["INTERNAL","CONFIDENTIAL"]},"data":{"type":"object","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"link_related","description":"Link two related signals without consolidating either history. Both current revisions are required and visibility must match.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","required":true},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"relatedSignalId":{"type":"string","required":true},"relatedExpectedRevision":{"type":"integer","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"assign","description":"Assign a responsible human or agent.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"assignedAgentId":{"type":"string","optional":true},"assignedUserId":{"type":"string","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"link_artifact","description":"Link a branch, commit, PR, CI run, deployment, verification, document, configuration or legacy GitHub issue. CONFIGURATION data.kind=product-signal-execution-v1 records fenced immutable recovery observations; see docs/product-signal-recovery.md. reconcileTerminal=true permits only append-only native terminal observations on closed signals without claim, preserving recorded thread and turn. Reserve ACCEPTED before create_thread and RETRY_RESERVED before resuming; global capacity is three and unreconciled historical creation blocks admission with 409. Queue returns aggregate executionAdmission; queue and detail return executionRecovery with nextRetryAt and action.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"type":{"type":"string","required":true,"enum":["BRANCH","COMMIT","PULL_REQUEST","CI_RUN","DEPLOYMENT","VERIFICATION","DOCUMENT","CONFIGURATION","LEGACY_GITHUB_ISSUE"]},"status":{"type":"string","optional":true,"enum":["PENDING","SUCCEEDED","FAILED","VERIFIED"]},"environment":{"type":"string","optional":true},"url":{"type":"string","optional":true},"externalRef":{"type":"string","optional":true},"commitSha":{"type":"string","optional":true},"description":{"type":"string","optional":true},"verified":{"type":"boolean","optional":true},"reconcileTerminal":{"type":"boolean","optional":true},"data":{"type":"object","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"mark_deployment_verified","description":"Record functional verification performed after the production deployment.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"url":{"type":"string","optional":true},"externalRef":{"type":"string","optional":true},"commitSha":{"type":"string","optional":true},"description":{"type":"string","optional":true},"data":{"type":"object","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"resolve","description":"Resolve a signal only when its selected resolution evidence gate is satisfied.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"mode":{"type":"string","required":true,"enum":["DEPLOYED_FIX","NO_DEPLOYMENT_REQUIRED","MIGRATED_RESOLUTION"]},"publicNote":{"type":"string","required":true},"justification":{"type":"string","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"dismiss","description":"Dismiss a signal with an auditable reason.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reopen","description":"Atomically reopen a resolved or dismissed signal into triage and obtain a new claimToken; no prior claimToken is required.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"merge_duplicates","description":"Merge a duplicate while preserving reporters, events and artifacts. Supplying both current revisions protects against concurrent changes.","params":{"signalId":{"type":"string","required":true,"description":"Technical id or public reference such as #123."},"claimToken":{"type":"string","optional":true,"description":"Required except claim, reopen, review and terminal-only reconciliation of a closed signal."},"expectedRevision":{"type":"integer","optional":true,"description":"Current reviewRevision for optimistic concurrency. Required by relation mutations."},"idempotencyKey":{"type":"string","required":true,"description":"Stable key reused when retrying the same mutation."},"duplicateSignalId":{"type":"string","required":true},"duplicateExpectedRevision":{"type":"integer","optional":true}},"x-mcp":{"channel":"product_feedback","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","additionalScopes":["product-feedback:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["operation","idempotencyKey"],"properties":{"operation":{"type":"string","enum":["mark_reviewed","mark_reviewed_all","claim","heartbeat_claim","release_claim","transition","update_priority","triage","request_information","reply","add_internal_note","link_related","assign","link_artifact","mark_deployment_verified","resolve","dismiss","reopen","merge_duplicates"]},"signalId":{"type":"string"},"relatedSignalId":{"type":"string"},"claimToken":{"type":"string"},"idempotencyKey":{"type":"string"},"expectedRevision":{"type":"integer","minimum":0},"relatedExpectedRevision":{"type":"integer","minimum":0},"duplicateExpectedRevision":{"type":"integer","minimum":0},"humanInstructionReference":{"type":"string","maxLength":500},"priority":{"type":"string","enum":["P0","P1","P2","P3"]},"to":{"type":"string","enum":["TRIAGED","PLANNED","IN_PROGRESS","BLOCKED","VERIFYING"]}}}}}},"responses":{"200":{"description":"Idempotent mutation result"},"409":{"description":"Claim conflict, invalid transition or missing resolution evidence"}}}},"/api/agent/task-supervision":{"post":{"summary":"Review completed scheduled-task messages","description":"List completed task messages and mark them reviewed only after an explicit human instruction. This does not use the pending-mutation flow and requires the independent task-supervision:review scope.","tags":["Scheduled tasks"],"x-tools":[{"name":"list_task_supervision_work","description":"List completed scheduled-task messages for a human-assisted review session.","params":{"filter":{"type":"string","optional":true,"enum":["pending","all"]},"page":{"type":"integer","optional":true},"pageSize":{"type":"integer","optional":true}},"x-mcp":{"channel":"task_supervision","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["task-supervision:review"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"mark_task_messages_reviewed","description":"Mark specific messages, or the complete visible project queue, reviewed. Use only after a human explicitly instructs you to do so; never decide autonomously.","params":{"messageIds":{"type":"array","optional":true},"all":{"type":"boolean","optional":true},"humanInstructionReference":{"type":"string","required":true,"description":"Auditable reference to the explicit human instruction."}},"x-mcp":{"channel":"task_supervision","effect":"write","requiredScope":"read","approval":"none","requestShape":"tool_params","additionalScopes":["task-supervision:review"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["operation"],"properties":{"projectId":{"type":"string"},"operation":{"type":"string","enum":["list_pending_review","mark_reviewed"]},"filter":{"type":"string","enum":["pending","all"]},"messageIds":{"type":"array","items":{"type":"string"}},"all":{"type":"boolean"},"humanInstructionReference":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"Review queue or reviewed messages"},"403":{"description":"task-supervision:review is missing"}}}},"/api/connections/agent-query":{"post":{"summary":"Discover and inspect provider connections","description":"Lists connectable providers, requirements, statuses, assets, approval actions and health. Connection discovery is a core capability and remains available before a business module is connected, and also for projects that are not linked to a commercial account yet (those are served in read-only legacy mode, with connection ids prefixed by 'legacy:').","tags":["Connections"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Connection information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_tools","description":"List Connection Center tools.","params":{},"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_available_connections","description":"List all supported providers, modes, requirements, readiness and project entitlement state.","params":{},"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_connection_requirements","description":"Explain human prerequisites, scopes and consent policy for one connector.","params":{"connectorKey":{"type":"string","required":true}},"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_connection_status","description":"List connection states for the selected project. Works for projects without a commercial account: their existing integrations are returned in read-only legacy mode.","params":{"provider":{"type":"string","optional":true}},"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_connection_assets","description":"List provider assets discovered under a project connection.","params":{"connectionId":{"type":"string","required":true}},"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_connection_actions","description":"List supervised connection actions and their approval status.","params":{"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"test_connection","description":"Perform a safe read-only provider check and return the effective connection status, recovery action, timestamp, and diagnostic reference.","params":{"connectionId":{"type":"string","required":true},"projectId":{"type":"string","required":false}},"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"connections","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/connections/agent-mutate":{"post":{"summary":"Start and supervise provider connections","description":"Agents may initiate onboarding and continue after human consent. OAuth consent is restricted to human account owners/admins. Disconnect requests are always supervised. Requires the project to be linked to a commercial account (409 COMMERCIAL_ACCOUNT_REQUIRED otherwise); reading connections does not.","tags":["Connections"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Connection workflow result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"start_connection","description":"Create a session and return humanAuthorizationUrl. Never request OAuth tokens in chat.","params":{"connectorKey":{"type":"string","required":true},"mode":{"type":"string","enum":["OAUTH","MANAGED","BYO","PAIRING"],"optional":true},"permission":{"type":"string","enum":["read","write"],"optional":true},"desiredAssetId":{"type":"string","optional":true},"desiredAssetName":{"type":"string","optional":true},"desiredDomain":{"type":"string","optional":true},"returnUrl":{"type":"string","optional":true}},"x-mcp":{"channel":"connections","effect":"write","requiredScope":"read","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"select_connection_asset","description":"Bind a selected asset to the project after consent.","params":{"assetId":{"type":"string","required":true},"module":{"type":"string","required":true},"permission":{"type":"string","enum":["read","write"],"optional":true}},"x-mcp":{"channel":"connections","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_disconnect","description":"Create a supervised disconnect request. Credentials remain active until approval and execution.","params":{"connectionId":{"type":"string","required":true},"reason":{"type":"string","optional":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"connections","effect":"write","requiredScope":"read","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"execute_approved_connection_action","description":"Execute an action only after OWNER/ADMIN approval.","params":{"actionId":{"type":"string","required":true}},"x-mcp":{"channel":"connections","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"connections","effect":"write","requiredScope":"read","approval":"human","requestShape":"tool_params"}}},"/api/portfolio/agent-query":{"post":{"summary":"Portfolio-wide pending work","description":"Aggregated operational queue for every project within the effective global or group dpa_ credential. Uses bounded set queries, live freshness metadata and safe partial-failure codes. Project API keys and agents with only explicit project access are rejected.","tags":["Portfolio"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Portfolio summary or paginated detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"portfolio_pending_summary","description":"Return task, CRM, site issue, mutation, editorial review, report and email pending counts for all accessible projects. Distinguishes ok, disabled, not_configured and safe error coverage states.","params":{"asOf":{"type":"string","optional":true,"description":"Authoritative ISO instant. Defaults to now."},"timezone":{"type":"string","optional":true,"description":"IANA timezone used to calculate today. Defaults to Europe/Madrid."},"projectStatus":{"type":"string","enum":["active","inactive","all"],"optional":true,"description":"Defaults to active."},"groupId":{"type":"string","optional":true,"description":"Restrict to an accessible group."},"include":{"type":"array","items":{"type":"string","enum":["tasks","crm","siteIssues","mutations","revisionRequests","emails","reports"]},"optional":true},"staleDays":{"type":"number","optional":true,"description":"CRM stale threshold, 1-365. Defaults to 7."},"actionableIssuesOnly":{"type":"boolean","optional":true,"description":"Use the actionable issue subset when deciding attention. Raw counts are always retained."},"unified":{"type":"boolean","optional":true,"description":"Return the unified project cycle queue, ordered by oldest pending work. Checks tasks/blockers, CRM, reports and emails. Unknown coverage prevents closure."},"reasons":{"type":"array","items":{"type":"string","enum":["tasks","crm","reports","emails"]},"optional":true,"description":"OR filter for unified mode. Unknown coverage remains visible."},"cursor":{"type":"string","optional":true,"description":"Unified cursor bound to snapshot and filters; reuse asOf. Changed data requires restarting pagination."},"limit":{"type":"number","optional":true,"description":"Unified project page size, 1-100, default 50."},"countsOnly":{"type":"boolean","optional":true,"description":"Return compact project identities, counts and coverage."}},"x-mcp":{"channel":"portfolio","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"portfolio_pending_items","description":"Return a cursor-paginated, PII-minimized detail page for one portfolio category. The project set is always derived from the effective credential.","params":{"category":{"type":"string","required":true,"enum":["tasks","crm","siteIssues","mutations","revisionRequests","emails","reports"]},"asOf":{"type":"string","optional":true},"timezone":{"type":"string","optional":true},"projectStatus":{"type":"string","enum":["active","inactive","all"],"optional":true},"projectId":{"type":"string","optional":true,"description":"May only narrow to an already accessible project."},"groupId":{"type":"string","optional":true,"description":"May only narrow to an already accessible group."},"status":{"type":"string","optional":true},"severity":{"type":"string","optional":true},"from":{"type":"string","optional":true},"to":{"type":"string","optional":true},"staleDays":{"type":"number","optional":true},"actionableIssuesOnly":{"type":"boolean","optional":true},"cursor":{"type":"string","optional":true,"description":"Opaque cursor from the previous response."},"limit":{"type":"number","optional":true,"description":"1-100, default 50."}},"x-mcp":{"channel":"portfolio","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"portfolio_agent_supervision_summary","description":"Return a snapshot-consistent health summary for scheduled agents and tasks across every accessible project. Includes task and execution states, stale runs, repeated blockers, current failures, start-delay and duration percentiles, trace completeness, pending human actions, safe coverage and partial failures.","params":{"asOf":{"type":"string","optional":true,"description":"Authoritative ISO instant shared with detail calls."},"timezone":{"type":"string","optional":true,"description":"IANA timezone. Defaults to Europe/Madrid."},"from":{"type":"string","optional":true,"description":"Execution window start. Defaults to 30 days before asOf; stale running executions remain visible."},"to":{"type":"string","optional":true,"description":"Execution window end. Defaults to asOf and cannot exceed it."},"projectStatus":{"type":"string","enum":["active","inactive","all"],"optional":true},"projectId":{"type":"string","optional":true,"description":"May only narrow effective access."},"groupId":{"type":"string","optional":true,"description":"May only narrow effective access."},"agentId":{"type":"string","optional":true},"taskStatus":{"type":"string","enum":["active","paused","completed"],"optional":true},"executionStatus":{"type":"string","enum":["running","completed","failed","skipped","deferred"],"optional":true},"staleRunningMinutes":{"type":"number","optional":true,"description":"5-43200, default 60."},"startDelayMinutes":{"type":"number","optional":true,"description":"1-43200, default 30."},"repeatedBlockerCount":{"type":"number","optional":true,"description":"2-20, default 2."},"manualInactivityDays":{"type":"number","optional":true,"description":"1-365, default 14."}},"x-mcp":{"channel":"portfolio","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"portfolio_agent_supervision_items","description":"Return cursor-paginated task supervision detail for the same snapshot and filters as the summary. Alerts include severity, reasonCode, safe evidence, age and recommendedHumanAction; equivalent parent/child alerts are deduplicated.","params":{"asOf":{"type":"string","optional":true,"description":"Reuse the exact summary asOf to obtain the same snapshotId."},"timezone":{"type":"string","optional":true},"from":{"type":"string","optional":true},"to":{"type":"string","optional":true},"projectStatus":{"type":"string","enum":["active","inactive","all"],"optional":true},"projectId":{"type":"string","optional":true},"groupId":{"type":"string","optional":true},"agentId":{"type":"string","optional":true},"taskStatus":{"type":"string","enum":["active","paused","completed"],"optional":true},"executionStatus":{"type":"string","enum":["running","completed","failed","skipped","deferred"],"optional":true},"staleRunningMinutes":{"type":"number","optional":true},"startDelayMinutes":{"type":"number","optional":true},"repeatedBlockerCount":{"type":"number","optional":true},"manualInactivityDays":{"type":"number","optional":true},"cursor":{"type":"string","optional":true,"description":"Opaque cursor bound to snapshotId and filters."},"limit":{"type":"number","optional":true,"description":"1-100, default 50."}},"x-mcp":{"channel":"portfolio","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-mcp":{"channel":"portfolio","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params"}}},"/api/project-groups/agent-query":{"post":{"summary":"Project-group context and aggregated metrics","description":"Read groups available to a dpa_ agent. Group calls do not replace project scoping: all ordinary service endpoints still require a concrete projectId.","tags":["ProjectGroups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_groups","description":"List accessible project groups and effective scopes.","params":{},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_group","description":"Read shared group context, reporting currency and timezone.","params":{"groupId":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_group_projects","description":"List current projects in a group. Group access automatically covers projects added later.","params":{"groupId":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_group_metrics","description":"Aggregate normalized source snapshots with project names, CRM leads, GA4/Search Console configuration states, daily GA4 traffic, key-event, channel and source/medium breakdowns, and weighted rates. Unique visitors and GA4 users are explicitly per-property sums.","params":{"groupId":{"type":"string","required":true},"from":{"type":"string","required":true},"to":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_group_funnel","description":"Read group lead, qualified-conversation, proposal and won-pilot funnel.","params":{"groupId":{"type":"string","required":true},"from":{"type":"string","required":true},"to":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_group_mailing_config","description":"Read safe group newsletter configuration and per-project permissions. Secrets are never returned.","params":{"groupId":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_group_shared_newsletters","description":"List project-owned newsletters shared by reference with the group.","params":{"groupId":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_mailing_conversion_preview","description":"Preview a complete project-to-group mailing conversion and its blockers.","params":{"groupId":{"type":"string","required":true},"projectId":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/project-groups/agent-mutate":{"post":{"summary":"Refresh project-group metrics","description":"Idempotently refresh normalized snapshots with bounded concurrency. Source failures are persisted independently instead of failing the whole refresh.","tags":["ProjectGroups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Refresh result"}},"x-tools":[{"name":"refresh_group_metrics","description":"Refresh Landing/Sites, CRM, GA4, Search Console, Google Ads and AEO snapshots for every current group project. Requires group write scope.","params":{"groupId":{"type":"string","required":true},"from":{"type":"string","optional":true,"description":"ISO date; default 30 days before to."},"to":{"type":"string","optional":true,"description":"ISO date; default now."},"concurrency":{"type":"number","optional":true,"description":"1-5, default 2."}},"x-mcp":{"channel":"project_groups","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"set_group_mailing_project_permission","description":"Set NONE, READ or EDIT plus independent agent/form access for a project that currently belongs to the group.","params":{"groupId":{"type":"string","required":true},"projectId":{"type":"string","required":true},"accessLevel":{"type":"string","required":true,"enum":["NONE","READ","EDIT"]},"agentsEnabled":{"type":"boolean","required":true},"formsEnabled":{"type":"boolean","required":true}},"x-mcp":{"channel":"project_groups","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"move_subscriptions_to_group","description":"Copy active subscriptions with verified evidence from a project newsletter into a group newsletter after human approval.","params":{"groupId":{"type":"string","required":true},"projectId":{"type":"string","required":true},"sourceNewsletterId":{"type":"string","required":true},"targetNewsletterId":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"share_newsletter_with_group","description":"Share a project-owned newsletter with every project in its group without moving data.","params":{"groupId":{"type":"string","required":true},"projectId":{"type":"string","required":true},"newsletterId":{"type":"string","required":true},"legalConfirmation":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"unshare_newsletter_from_group","description":"Remove group access to a shared newsletter without deleting its project-owned data.","params":{"groupId":{"type":"string","required":true},"projectId":{"type":"string","required":true},"newsletterId":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"convert_project_mailings_to_group","description":"Convert the complete project mailing configuration into the group scope while preserving identifiers and history.","params":{"groupId":{"type":"string","required":true},"projectId":{"type":"string","required":true},"legalConfirmation":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"project_groups","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/projects/agent-query":{"post":{"summary":"Project information","description":"Get metadata about the project linked to this API key and manage draft emails.","tags":["Project"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"get_project_info","x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}},"description":"Returns project name, description, URL, secret-redacted context, email defaults, creation date, and connected services (Google Ads, SEO, Search Console, Analytics).","params":{}},{"name":"update_project_context","description":"Updates the free-form project context/instructions used by agents. Credentials must be stored in their provider connection or an approved secret vault. Requires write scope.","params":{"content":{"type":"string","required":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_activity","description":"List recent project activity/audit timeline entries visible to agents.","params":{"limit":{"type":"number","optional":true,"default":50},"actor":{"type":"string","optional":true,"enum":["USER","AGENT","SYSTEM"]},"area":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_messages","description":"List recent project messages visible to agents, optionally filtered by channel slug.","params":{"channel":{"type":"string","optional":true},"limit":{"type":"number","optional":true,"default":50}},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"post_message","description":"Post a project message as the authenticated API key. Requires write scope.","params":{"content":{"type":"string","required":true},"channel":{"type":"string","optional":true,"default":"general"},"parentId":{"type":"string","optional":true},"visibility":{"type":"string","optional":true,"enum":["all","agents"]}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reply_message","description":"Reply to an existing project message as the authenticated API key. Requires write scope.","params":{"parentId":{"type":"string","required":true},"content":{"type":"string","required":true},"channel":{"type":"string","optional":true,"default":"general"},"visibility":{"type":"string","optional":true,"enum":["all","agents"]}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_email_draft","description":"Reads an existing project email by ID. Read-only; does not require write scope. Returns full bodyHtml, derived bodyText, recipients, safe email account metadata, attachments, and audit dates. Agents should call this before updating a draft that may have been edited by a human.","params":{"id":{"type":"string","required":true}},"response":{"id":"string","projectId":"string","status":"DRAFT | AUTHORIZED | SENT","subject":"string","bodyHtml":"string","bodyText":"string","to":"array","cc":"array","bcc":"array","emailAccount":"{ id, name, fromName, fromEmail } | null","attachments":"array","createdAt":"ISO8601 string","updatedAt":"ISO8601 string","authorizedAt":"ISO8601 string | null","authorizedBy":"object | null"},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_email_drafts","description":"Lists project emails with a compact payload that omits full bodyHtml. Read-only; does not require write scope. Use it to find DRAFT, AUTHORIZED, or SENT emails before calling get_email_draft.","params":{"status":{"type":"string","optional":true,"enum":["DRAFT","AUTHORIZED","SENT"]},"limit":{"type":"number","optional":true,"default":20,"description":"Clamped between 1 and 100."},"since":{"type":"string","optional":true,"description":"ISO date; filters by updatedAt >= since."}},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_email_conversations","description":"Lists project email conversations and their timelines.","params":{"leadId":{"type":"string","optional":true},"status":{"type":"string","optional":true,"enum":["OPEN","ACTION_REQUIRED","WAITING_EXTERNAL","CLOSED"]},"limit":{"type":"number","optional":true},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"find_email_conversations_for_lead","description":"Finds conversations for one CRM lead.","params":{"leadId":{"type":"string","required":true},"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_email_conversation","x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}},"description":"Returns one full conversation timeline.","params":{"conversationId":{"type":"string","required":true}}},{"name":"create_email_draft","description":"Creates a DRAFT email. A stable idempotencyKey makes retries safe. CRM_LEAD resolves the recipient from a lead in the authorized project; agents cannot supply an arbitrary address. Human authorization is always required before sending.","params":{"subject":{"type":"string","required":true},"bodyHtml":{"type":"string","required":true},"audience":{"type":"string","optional":true,"enum":["CLIENT_FINAL","DISTRIBUTOR"],"description":"Required for FLEXIBLE projects. CRM_ONLY projects must use targetType CRM_LEAD and leadId instead."},"purpose":{"type":"string","optional":true,"enum":["MONTHLY_REPORT","TECHNICAL_REPORT","GENERAL_EMAIL","APPROVAL_REQUEST","COMMERCIAL_PROPOSAL","QUOTE","INFORMATION_REQUEST"]},"targetType":{"type":"string","optional":true,"enum":["STATIC_AUDIENCE","CRM_LEAD"]},"leadId":{"type":"string","optional":true,"description":"Required when targetType is CRM_LEAD."},"to":{"type":"array","optional":true,"description":"Required only when the project has no active communication route. READY projects resolve recipients from audience and purpose."},"cc":{"type":"array","optional":true},"bcc":{"type":"array","optional":true},"fromName":{"type":"string","optional":true},"fromEmail":{"type":"string","optional":true},"emailAccountId":{"type":"string","optional":true,"description":"If omitted, null, or blank, the project default email account is used when configured."},"reportId":{"type":"string","optional":true},"idempotencyKey":{"type":"string","optional":true,"description":"Stable project-scoped key for retry-safe draft creation."},"attachments":{"type":"array","optional":true,"description":"Report IDs belonging to this project, or internal attachment objects. Invalid or cross-project IDs return 400."}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_email_reply_draft","description":"Creates a reply to the latest inbound message in a conversation and preserves RFC threading. Human authorization remains required.","params":{"conversationId":{"type":"string","optional":true,"description":"Preferred conversation ID. Legacy id remains accepted."},"id":{"type":"string","optional":true},"emailAccountId":{"type":"string","optional":true,"description":"Allowed sender account configured on the route."},"bodyHtml":{"type":"string","optional":true,"description":"Initial reply body; may be blank for later editing."},"includeQuotedHistory":{"type":"boolean","optional":true,"default":true},"reattachAttachmentIds":{"type":"array","optional":true},"idempotencyKey":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_email_follow_up_draft","description":"Creates a follow-up in an existing thread only when no inbound reply is pending.","params":{"conversationId":{"type":"string","required":true},"emailAccountId":{"type":"string","optional":true,"description":"Allowed sender account configured on the route."},"bodyHtml":{"type":"string","optional":true},"includeQuotedHistory":{"type":"boolean","optional":true,"default":true},"reattachAttachmentIds":{"type":"array","optional":true},"idempotencyKey":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"defer_email_draft","description":"Defers a draft until a manual date or follows the linked CRM lead nextActionAt. It never schedules an automatic send.","params":{"id":{"type":"string","required":true},"mode":{"type":"string","required":true,"enum":["MANUAL_DATE","CRM_NEXT_ACTION"]},"until":{"type":"string","optional":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"resume_email_draft","description":"Makes an agent-deferred draft actionable now. An agent cannot override a human deferral.","params":{"id":{"type":"string","required":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_email_draft","x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}},"description":"Updates a DRAFT or AUTHORIZED email. Requires write scope. Missing account/CC/BCC are completed from project defaults when absent on the draft; explicit cc: [] or bcc: [] clears those copies. The signature is always attached from the configured email account and cannot be overridden by agents. If the email was AUTHORIZED, any update automatically reverts it to DRAFT and the response includes revertedFromAuthorized: true.","params":{"id":{"type":"string","required":true},"subject":{"type":"string","optional":true},"bodyHtml":{"type":"string","optional":true},"to":{"type":"array","optional":true},"cc":{"type":"array","optional":true},"bcc":{"type":"array","optional":true},"fromName":{"type":"string","optional":true},"fromEmail":{"type":"string","optional":true},"emailAccountId":{"type":"string","optional":true},"reportId":{"type":"string","optional":true},"attachments":{"type":"array","optional":true,"description":"Report IDs belonging to this project. Replaces draft attachments when present."}}},{"name":"delete_email_draft","description":"Deletes a DRAFT or AUTHORIZED email. Requires write scope. SENT emails cannot be deleted by this tool.","params":{"id":{"type":"string","required":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"send_email_draft","description":"Sends an existing AUTHORIZED email for this project. Requires write scope. Hard security rule: this tool rejects DRAFT emails with HTTP 409. Only a logged-in human using the DigitalPublic UI can move DRAFT -> AUTHORIZED; there is intentionally no agent tool or parameter to authorize drafts.","params":{"id":{"type":"string","required":true},"emailAccountId":{"type":"string","optional":true,"description":"Optional explicitly assigned account. If omitted, the explicitly assigned project default is used."}},"response":{"id":"string","status":"SENT","sentAt":"ISO8601 string","to":"array","cc":"array","bcc":"array","subject":"string","bodyHtml":"string","attachments":"array","messageId":"string | null"},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"register_external_email_send","description":"Idempotently records an email that was sent outside DigitalPublic. Requires write scope. Stores the exact sanitized HTML body, account, sent date, RFC Message-ID and thread metadata; creates the CRM email_out interaction and reconciles linked processes. Repeating the same Message-ID in the project returns the existing registration.","params":{"id":{"type":"string","required":true,"description":"DRAFT or AUTHORIZED email ID in this project."},"conversationId":{"type":"string","optional":true,"description":"Conversation the email must belong to."},"sentAt":{"type":"string","required":true,"description":"ISO8601 send date."},"bodyHtml":{"type":"string","required":true,"description":"Exact HTML body that was sent."},"messageId":{"type":"string","required":true,"description":"RFC Message-ID supplied by the external provider."},"emailAccountId":{"type":"string","optional":true},"inReplyToMessageId":{"type":"string","optional":true},"references":{"type":"array","optional":true},"providerThreadId":{"type":"string","optional":true},"idempotencyKey":{"type":"string","optional":true,"description":"Caller-stable key for retries; deduplicated within the project."}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_email_accounts","description":"Lists only the active email accounts explicitly assigned to this project. Historical use never grants access. Read-only; does not require write scope. Returns safe metadata, ownership scope (GLOBAL, GROUP or PROJECT), owner, assignment source, status and default flag, never passwords, tokens or SMTP/OAuth secrets. Use it to discover a permitted emailAccountId before creating or sending email.","params":{},"response":{"ok":true,"data":"array of { id, name, providerType, fromName, fromEmail, host, port, secure, oauthConnected, scopeType, ownerProject, ownerGroup, status, source, isDefault }"},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"test_email_account","description":"Runs a live connectivity check against one active account explicitly assigned to this project, reusing the same transport verification as the admin UI. Read-only; does not send any email and does not require write scope. Returns safe account metadata plus an actionable failureKind. Rejects unassigned, disabled or scope-incompatible accounts with a stable EMAIL_ACCOUNT_* code. Failures are recorded in the project activity log.","params":{"emailAccountId":{"type":"string","required":true,"description":"Id of an active account explicitly assigned to the project."}},"response":{"ok":true,"data":"{ account: { id, name, providerType, fromName, fromEmail, host, port, secure, oauthConnected, oauthEmail, oauthConnectedAt }, test: { ok: boolean, failureKind?, error? } }"},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"test_project_email_accounts","description":"Runs the connectivity check on every active account explicitly assigned to this project. Read-only; does not send any email and does not require write scope. Returns each account's safe metadata and test result plus a summary { total, passed, failed }. Historical use never adds an account to this list.","params":{},"response":{"ok":true,"data":"{ accounts: array of { account, test }, summary: { total, passed, failed } }"},"x-mcp":{"channel":"projects","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_email_account_assignment","description":"Proposes assigning a GLOBAL or compatible GROUP account to this project. Requires write scope and always creates a human approval; it never exposes credentials or grants access immediately.","params":{"emailAccountId":{"type":"string","required":true},"reason":{"type":"string","required":true},"idempotencyKey":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_email_account_revocation","description":"Proposes revoking one explicitly assigned account. Requires write scope and human approval. Future drafts will be blocked if they still reference the revoked account.","params":{"emailAccountId":{"type":"string","required":true},"reason":{"type":"string","required":true},"idempotencyKey":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_default_email_account","description":"Proposes making one already assigned active account the project default. Requires write scope and human approval.","params":{"emailAccountId":{"type":"string","required":true},"reason":{"type":"string","required":true},"idempotencyKey":{"type":"string","optional":true}},"x-mcp":{"channel":"projects","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/mailings/agent-query":{"post":{"summary":"Mailing campaigns and metrics","description":"Read DigitalPublic mailing campaigns, reconciled Brevo audiences, consent audits without PII, immutable editorial reviews, and normalized metrics. Agents must use DigitalPublic instead of calling Brevo directly.","tags":["Mailings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_newsletters","description":"List project or group newsletters in the explicit X-Project-Id or X-Group-Id scope.","params":{},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_newsletter_sender_setup","description":"Read the live Brevo sender and domain inventory, including verification/authentication state and exact DNS records. No provider-account sender is inferred.","params":{},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_double_opt_in","description":"Render the configured localized double-opt-in subject, responsive HTML and plain text without sending.","params":{"newsletterId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_newsletter","description":"Get one newsletter and its counters.","params":{"newsletterId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_newsletter_issues","description":"List newsletter issues.","params":{"newsletterId":{"type":"string","optional":true},"status":{"type":"string","optional":true},"limit":{"type":"number","default":50}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_newsletter_issue","description":"Get one structured newsletter issue.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_newsletter_issue","description":"Return generated HTML, plain text and NewsletterDocumentV1.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"validate_newsletter_issue","description":"Validate sender, legal footer, content and active audience before approval.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_subscriber_summary","description":"Return aggregate subscription counts and source-project breakdown without PII.","params":{},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_subscribers","description":"List masked subscribers with filters.","params":{"newsletterId":{"type":"string","optional":true},"status":{"type":"string","optional":true},"sourceProjectId":{"type":"string","optional":true},"q":{"type":"string","optional":true},"limit":{"type":"number","default":50}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_delivery_status","description":"Get a frozen delivery and its provider status.","params":{"deliveryId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_newsletter_metrics","description":"Get newsletter delivery metrics.","params":{"newsletterId":{"type":"string","optional":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mailing_campaigns","description":"List mailing campaigns for the project.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_mailing_campaign","description":"Get campaign detail and recent metrics.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_audiences","description":"List Brevo audiences/lists synchronized into DigitalPublic.","params":{},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mailing_images","description":"List mailing images registered for the project with public Brevo CDN URLs.","params":{"limit":{"type":"number","default":50},"includeDeleted":{"type":"boolean","default":false}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"sync_audiences","description":"Sync Brevo lists into DigitalPublic.","params":{},"x-mcp":{"channel":"mailings","effect":"sync","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"BACKGROUND","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"PROVIDER_KEY"}}},{"name":"get_mailing_metrics","description":"Sync and return metrics: sent, delivered, opens, clicks, bounces, unsubscribes, complaints.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"sync","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"BACKGROUND","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"PROVIDER_KEY"}}},{"name":"audit_audience_consent","description":"Return aggregate consent evidence and reconciled provider count without subscriber PII.","params":{"audienceId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"simulate_audience_adoption","description":"Simulate adopting a legacy Brevo audience server-side without returning emails or individual hashes.","params":{"audienceId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_mailing_review","description":"Return an immutable editorial review, its content hash, audience, locale, and validity window.","params":{"reviewId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_test_mailing_recipients","description":"List effective project-authorized TEST recipients and the reason for each authorization.","params":{},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one pending mailing send.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending mailing sends.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"mailings","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/mailings/agent-mutate":{"post":{"summary":"Create, design, and send mailing campaigns","description":"Create and update DigitalPublic mailing campaigns backed by Brevo. TEST uses only explicit authorized recipients, does not require or modify audience consent, and approvalMode=REQUIRED always requires human approval and cannot be bypassed. SEND keeps verified audience consent and canonical count mandatory. Reviews and authorizations are purpose-bound and cannot be reused across TEST and SEND.","tags":["Mailings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Executed or queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"create_newsletter","description":"Create a newsletter and optionally select an explicit verified Brevo sender plus localized DOI design. Sender fields must be supplied together; defaults are never used.","params":{"name":{"type":"string","required":true},"slug":{"type":"string","optional":true},"description":{"type":"string","optional":true},"locale":{"type":"string","optional":true},"cadence":{"type":"string","optional":true},"senderName":{"type":"string","optional":true},"senderEmail":{"type":"string","optional":true},"replyTo":{"type":"string","optional":true},"theme":{"type":"object","optional":true,"description":"logoUrl HTTPS, accentColor and backgroundColor"},"doubleOptInTemplate":{"type":"object","optional":true,"description":"subject, heading, body, buttonLabel and optional footerNote"}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_newsletter","description":"Update newsletter identity, cadence, explicit verified Brevo sender, theme or localized double-opt-in template.","params":{"newsletterId":{"type":"string","required":true},"name":{"type":"string","optional":true},"description":{"type":"string","optional":true},"locale":{"type":"string","optional":true},"cadence":{"type":"string","optional":true},"nextIssueDueAt":{"type":"string","optional":true},"status":{"type":"string","optional":true,"enum":["DRAFT","ACTIVE","PAUSED","ARCHIVED"]},"senderName":{"type":"string","optional":true},"senderEmail":{"type":"string","optional":true},"replyTo":{"type":"string","optional":true},"theme":{"type":"object","optional":true},"doubleOptInTemplate":{"type":"object","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_newsletter_issue","description":"Create an issue from NewsletterDocumentV1. This never sends it.","params":{"newsletterId":{"type":"string","required":true},"name":{"type":"string","required":true},"subject":{"type":"string","required":true},"contentDocument":{"type":"object","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_newsletter_issue","description":"Update an issue and invalidate previous review or authorization.","params":{"campaignId":{"type":"string","required":true},"contentDocument":{"type":"object","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"send_newsletter_test","description":"Send a test only to explicit addresses.","params":{"campaignId":{"type":"string","required":true},"emailTo":{"type":"array","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"send_double_opt_in_test","description":"Send the rendered DOI template only to project-authorized test recipients after rechecking the live Brevo sender.","params":{"newsletterId":{"type":"string","required":true},"emailTo":{"type":"array","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_newsletter_send","description":"Freeze content and recipients and request mandatory human approval.","params":{"campaignId":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"schedule_newsletter_send","description":"Freeze and schedule a delivery after mandatory human approval.","params":{"campaignId":{"type":"string","required":true},"scheduledAt":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"cancel_newsletter_delivery","description":"Cancel a delivery that has not been sent.","params":{"deliveryId":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_subscription","description":"Start double opt-in. Never infer consent from a CRM lead.","params":{"newsletterId":{"type":"string","required":true},"email":{"type":"string","required":true},"noticeVersion":{"type":"string","required":true},"sourceProjectId":{"type":"string","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"unsubscribe_subscriber","description":"Immediately record a local newsletter unsubscribe.","params":{"subscriberId":{"type":"string","required":true},"newsletterId":{"type":"string","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"import_subscribers","description":"Simulate and request approval for a consent-evidenced import.","params":{"newsletterId":{"type":"string","required":true},"records":{"type":"array","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_mailing_campaign","description":"Create a mailing campaign and synchronize it as a Brevo draft.","params":{"name":{"type":"string","required":true},"subject":{"type":"string","required":true},"bodyHtml":{"type":"string","required":true},"audienceId":{"type":"string","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_mailing_design","description":"Update campaign subject, HTML, name, preview text, or audience.","params":{"campaignId":{"type":"string","required":true},"subject":{"type":"string","optional":true},"bodyHtml":{"type":"string","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"record_consent_evidence","description":"Record hashed, project-scoped consent evidence; raw subscriber email is not accepted.","params":{"audienceId":{"type":"string","required":true},"subjectHash":{"type":"string","required":true,"description":"64-character SHA-256 hex digest."},"purpose":{"type":"string","required":true},"locale":{"type":"string","required":true},"source":{"type":"string","required":true},"consentedAt":{"type":"string","required":true},"noticeVersion":{"type":"string","required":true},"legalBasis":{"type":"string","required":true},"evidenceRef":{"type":"string","required":true},"scope":{"type":"string","required":true},"status":{"type":"string","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_audience_adoption","description":"Simulate and request mandatory human approval to adopt a legacy Brevo audience without exporting PII.","params":{"audienceId":{"type":"string","required":true},"purpose":{"type":"string","required":true},"locale":{"type":"string","required":true},"source":{"type":"string","required":true},"consentedAt":{"type":"string","required":true},"noticeVersion":{"type":"string","required":true},"legalBasis":{"type":"string","required":true},"evidenceRef":{"type":"string","required":true},"scope":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_mailing_review","description":"Freeze purpose, provider, optional audience, locale, subject, preview, body, links and sender into an immutable SHA-256 review. TEST may omit an audience; SEND requires one.","params":{"campaignId":{"type":"string","required":true},"locale":{"type":"string","required":true},"purpose":{"type":"string","required":true,"enum":["TEST","SEND"]},"validUntil":{"type":"string","optional":true,"description":"At most 48 hours."}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"send_test_mailing","description":"Request a human-approved TEST only to explicit project-authorized recipients. Audience consent and membership are not used or changed.","params":{"campaignId":{"type":"string","required":true},"reviewId":{"type":"string","required":true,"description":"Purpose-bound TEST review."},"emailTo":{"type":"array","required":true,"description":"Verified users or project-authorized addresses only; small configured limit."},"approvalMode":{"type":"string","required":true,"enum":["REQUIRED"]},"idempotency_key":{"type":"string","required":true},"validUntil":{"type":"string","optional":true,"description":"At most 24 hours."}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_test_mailing_recipient_authorization","description":"Request administrative approval to authorize one address exclusively for TEST deliveries.","params":{"email":{"type":"string","required":true},"reason":{"type":"string","required":true},"expiresAt":{"type":"string","optional":true},"idempotency_key":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_test_mailing_recipient_revocation","description":"Request administrative approval to revoke an explicit TEST-recipient authorization.","params":{"email":{"type":"string","required":true},"reason":{"type":"string","required":true},"idempotency_key":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"send_mailing","description":"Request a separately authorized real send. With approvalMode=REQUIRED it always queues exact human approval.","params":{"campaignId":{"type":"string","required":true},"reviewId":{"type":"string","required":true},"approvalMode":{"type":"string","required":true,"enum":["REQUIRED"]},"idempotency_key":{"type":"string","required":true},"validUntil":{"type":"string","optional":true,"description":"At most 24 hours."},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"upload_mailing_image","description":"Upload an image to Brevo's gallery/CDN from imageUrl, base64, or multipart file.","params":{"name":{"type":"string","required":true},"imageUrl":{"type":"string","optional":true},"base64":{"type":"string","optional":true},"filename":{"type":"string","optional":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_mailing_image","description":"Rename or replace a registered mailing image.","params":{"imageId":{"type":"string","required":true},"name":{"type":"string","optional":true},"imageUrl":{"type":"string","optional":true},"base64":{"type":"string","optional":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"delete_mailing_image","description":"Remove a mailing image from the project's inventory.","params":{"imageId":{"type":"string","required":true},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"mailings","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/apify/agent-query":{"post":{"summary":"Apify actors, usage and runs","description":"Read the closed Actor catalog and strict global/project usage accounting. Credentials are never returned.","tags":["Apify"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success"},"403":{"description":"APIFY_DISABLED or ACTOR_NOT_ALLOWED"}},"x-tools":[{"name":"list_apify_actors","description":"List only Actors authorized for this project with effective limits.","params":{},"x-mcp":{"channel":"apify","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_apify_usage","description":"Global actual, attributed, reserved, unattributed and remaining USD.","params":{"refresh":{"type":"boolean","default":false}},"x-mcp":{"channel":"apify","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_apify_runs","description":"List project runs.","params":{"limit":{"type":"number","default":50}},"x-mcp":{"channel":"apify","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_apify_run","description":"Get run state, reservation, final cost and imported collection.","params":{"id":{"type":"string","required":true}},"x-mcp":{"channel":"apify","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/apify/agent-mutate":{"post":{"summary":"Request an authorized Apify run","description":"Agent-only run request. Human approval is required by default; admins can enable Apify auto-approval independently.","tags":["Apify"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Validated or auto-approved"},"202":{"description":"Pending human approval"},"409":{"description":"BUDGET_EXCEEDED or IDEMPOTENCY_CONFLICT"},"503":{"description":"GLOBAL_USAGE_STALE"}},"x-tools":[{"name":"request_apify_run","description":"Request one on-demand run from the project allowlist with strict USD and item caps.","params":{"actorCatalogId":{"type":"string","required":true},"collectionName":{"type":"string","required":true},"input":{"type":"object","required":true},"maxTotalChargeUsd":{"type":"number","required":true},"maxItems":{"type":"number","optional":true},"purpose":{"type":"string","required":true},"legalBasis":{"type":"string","required":true},"retentionDays":{"type":"number","optional":true,"minimum":30,"maximum":3650},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"validate_only":{"type":"boolean","default":false}},"x-mcp":{"channel":"apify","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/research-data/agent-query":{"post":{"summary":"Shared research database","description":"Read canonical companies, contacts, collections, observations and import status from the project's private or current group data space.","tags":["Research Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success"},"403":{"description":"DATA_ACCESS_DENIED"}},"x-tools":[{"name":"list_research_collections","description":"List visible collections.","params":{"limit":{"type":"number","default":50},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_research_collection","description":"Collection detail and provenance.","params":{"collectionId":{"type":"string","required":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_collection_items","description":"Paginate sanitized original items.","params":{"collectionId":{"type":"string","required":true},"limit":{"type":"number","default":20},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":false,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_companies","description":"Search deduplicated companies.","params":{"q":{"type":"string","optional":true},"country":{"type":"string","optional":true},"sector":{"type":"string","optional":true},"limit":{"type":"number","default":20},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":false,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_contacts","description":"Search deduplicated contacts.","params":{"q":{"type":"string","optional":true},"limit":{"type":"number","default":20},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":false,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_research_entity","description":"Entity detail with observations and conflicts.","params":{"id":{"type":"string","required":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":false,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_research_imports","description":"List visible workbook imports.","params":{"limit":{"type":"number","default":50}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":false,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_research_import_status","description":"Import status, mapping and statistics.","params":{"importBatchId":{"type":"string","required":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":false,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_research_import_errors","description":"Row-level import errors.","params":{"importBatchId":{"type":"string","required":true},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":false,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_visibility_progress","description":"Aggregate distinct domains, valid observations, explicit failures, engines and methodology versions against panel targets.","params":{"stableKey":{"type":"string","required":true},"targetDomains":{"type":"number","default":30},"targetObservations":{"type":"number","default":300}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_visibility_observations","description":"Paginate traceable AI Visibility observations. UNAVAILABLE and ERROR remain distinct from numeric zero.","params":{"stableKey":{"type":"string","required":true},"limit":{"type":"number","default":50},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"research_data","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/research-data/import":{"post":{"summary":"Preview a historical research workbook","description":"Accepts XLSX, XLS or CSV up to configured limits. It never evaluates formulas, macros, links or code and only creates an AWAITING_MAPPING preview.","tags":["Research Data"],"responses":{"201":{"description":"Mapping preview"},"400":{"description":"INVALID_WORKBOOK"},"413":{"description":"IMPORT_LIMIT_EXCEEDED"}},"x-tools":[{"name":"upload_research_workbook","description":"Upload a historical workbook and receive sheet previews plus proposed Spanish/English column mappings.","params":{"file":{"type":"string","format":"binary","required":true},"filename":{"type":"string","required":true}},"x-mcp":{"channel":"research_data","effect":"write","requiredScope":"write","approval":"none","requestShape":"multipart_upload","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/research-data/agent-mutate":{"post":{"summary":"Import research data or promote selected records","description":"Workbook execution requires preview and human approval by default. Promotion is limited to visible selected entities and is idempotent.","tags":["Research Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Executed or validated"},"202":{"description":"Pending approval"},"400":{"description":"IMPORT_MAPPING_REQUIRED"}},"x-tools":[{"name":"execute_research_import","description":"Request asynchronous import of a previously previewed workbook.","params":{"importBatchId":{"type":"string","required":true},"collectionName":{"type":"string","required":true},"selectedSheets":{"type":"array","required":true},"mappingBySheet":{"type":"object","required":true},"purpose":{"type":"string","required":true},"legalBasis":{"type":"string","required":true},"retentionDays":{"type":"number","optional":true},"tags":{"type":"array","optional":true},"idempotency_key":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"validate_only":{"type":"boolean","default":false}},"x-mcp":{"channel":"research_data","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"promote_records_to_crm","description":"Promote selected visible research entities into CRM with researchEntityId and email deduplication.","params":{"researchEntityIds":{"type":"array","required":true,"maxItems":100},"tags":{"type":"array","optional":true}},"x-mcp":{"channel":"research_data","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"resolve_visibility_collection","description":"Create or resolve a stable project or group scoped collection for an AI Visibility Index panel.","params":{"stableKey":{"type":"string","required":true},"name":{"type":"string","optional":true},"description":{"type":"string","optional":true},"purpose":{"type":"string","required":true},"legalBasis":{"type":"string","required":true},"retentionDays":{"type":"number","default":365,"minimum":30,"maximum":3650}},"x-mcp":{"channel":"research_data","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"append_visibility_observations","description":"Append a PII-free incremental batch with idempotency and mandatory deduplication by domain, prompt, engine, date and methodology version.","params":{"stableKey":{"type":"string","required":true},"source":{"type":"string","required":true},"sourceRunId":{"type":"string","optional":true},"piiFree":{"type":"boolean","required":true},"observations":{"type":"array","required":true,"maxItems":300},"idempotency_key":{"type":"string","required":true}},"x-mcp":{"channel":"research_data","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/crm/agent-query":{"post":{"summary":"CRM leads and pipeline data","description":"Read project leads, configured stage semantics, interactions, pipeline summary, and exportable segments. Call get_pipeline_stages before moving leads. Pending means action required from us: stages with pendingMode=when_follow_up_due are not pending while nextActionAt is in the future and become pending when it expires or is missing.","tags":["CRM"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"get_pipeline_stages","description":"Get configured stages, operational semantics, pendingMode, and recommended transitions. when_follow_up_due is excluded from pending counts while nextActionAt is future, then automatically becomes pending when due or missing.","params":{},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_inbound_form_config","description":"Get the public form webhook configuration for server-side integrations. The returned URL contains a revocable token and must be stored as a deployment secret, never logged or exposed in client-side code.","params":{},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_leads","description":"Paginated lead list with filters.","params":{"queue":{"type":"string","optional":true,"enum":["pending","in_progress","finished","spam"]},"stage":{"type":"string","optional":true},"type":{"type":"string","optional":true,"enum":["LEAD","CLIENT","PARTNER","HISTORIC"]},"tag":{"type":"string","optional":true},"source":{"type":"string","optional":true},"q":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"nextActionBefore":{"type":"string","optional":true},"limit":{"type":"number","default":20},"offset":{"type":"number","default":0}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_lead","description":"Full lead detail with the latest 20 interactions.","params":{"id":{"type":"string","optional":true},"email":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_leads","description":"Text search across name, company, and email.","params":{"q":{"type":"string","required":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_interactions","description":"Paginated interaction history for one lead.","params":{"leadId":{"type":"string","required":true},"limit":{"type":"number","default":20},"offset":{"type":"number","default":0}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"pipeline_summary","description":"Lead counts by stage and type plus stale leads.","params":{"staleDays":{"type":"number","default":14}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"export_segment","description":"Emails and names for a segment. Always excludes opted-out leads.","params":{"stage":{"type":"string","optional":true},"type":{"type":"string","optional":true},"tag":{"type":"string","optional":true},"limit":{"type":"number","default":1000}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one CRM configuration mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending CRM configuration mutations.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List CRM configuration mutation history.","params":{"status":{"type":"string","default":"all"},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"crm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/crm/agent-mutate":{"post":{"summary":"Manage CRM leads","description":"Create and edit leads, progress the commercial workflow, log interactions, schedule next actions, and handle GDPR opt-outs. Mandatory workflow: after sending or replying to an email, call progress_lead with the resulting stage and follow-up. DigitalPublic automatically moves new emailed leads to awaiting_reply as a fallback, but the agent remains responsible for reviewing nextActionAt. Waiting stages are removed from pending counts while that date is future and become pending again when it expires.","tags":["CRM"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Executed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"create_lead","description":"Create a lead with email deduplication; returns { deduplicated: true, leadId } when the email already exists.","params":{"email":{"type":"string","optional":true},"name":{"type":"string","optional":true},"company":{"type":"string","optional":true},"type":{"type":"string","optional":true,"default":"LEAD"},"stage":{"type":"string","optional":true},"tags":{"type":"array","optional":true},"source":{"type":"string","optional":true},"sourceDetail":{"type":"string","optional":true},"legalBasis":{"type":"string","optional":true,"enum":["consent","legitimate_interest","contract"]},"interactionSummary":{"type":"string","optional":true},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"submit_web_lead","description":"Server-to-server ingestion for a website form already validated by the originating site. Idempotently records the submission, quarantines review-risk entries, and creates an auditable notification outbox item for accepted leads.","params":{"idempotencyKey":{"type":"string","required":true},"fields":{"type":"object","required":true},"riskLevel":{"type":"string","optional":true,"enum":["accepted","review"]},"riskReasons":{"type":"array","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_lead","description":"Partially update lead fields. Stage changes are rejected; use progress_lead.","params":{"id":{"type":"string","required":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"progress_lead","description":"Recommended after every commercial action. Atomically changes stage, logs the reason, and schedules follow-up. awaiting_reply requires a future nextActionAt and nextActionNote. Waiting stages do not count as pending until the follow-up expires; won/lost/spam close the lead and clear follow-up.","params":{"id":{"type":"string","required":true},"stage":{"type":"string","required":true,"enum":["new","awaiting_reply","qualified","meeting_scheduled","proposal_sent","won","lost","spam"]},"note":{"type":"string","required":true},"nextActionAt":{"type":"string","optional":true},"nextActionNote":{"type":"string","optional":true},"authorName":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"change_stage","description":"Basic compatibility stage change. awaiting_reply is rejected because it requires progress_lead with follow-up.","params":{"id":{"type":"string","required":true},"stage":{"type":"string","required":true},"note":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"add_interaction","description":"Log an interaction on a lead. For email_in/email_out it accepts the FULL email (subject, sender, recipients, complete body) plus base64 attachments; attachments download at GET /api/crm/attachments/{attachmentId}.","params":{"leadId":{"type":"string","required":true},"kind":{"type":"string","required":true,"enum":["form_submission","email_out","email_in","call","note","stage_change","import"]},"summary":{"type":"string","required":true},"occurredAt":{"type":"string","optional":true},"data":{"type":"object","optional":true},"email":{"type":"object","optional":true,"description":"Only email_in/email_out: { subject, from, to[], cc[], bodyText, bodyHtml }"},"attachments":{"type":"array","optional":true,"description":"Only email_in/email_out, max 10 x 10MB: [{ filename, contentType?, contentBase64 }]"}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"register_inbound_email","description":"Record a human-relayed inbound email without inventing RFC headers. Existing governed-audience threads do not require a CRM lead or enabled CRM. Use leadId plus a governed CRM route only to create a new thread.","params":{"conversationId":{"type":"string","optional":true},"leadId":{"type":"string","optional":true},"purpose":{"type":"string","optional":true,"enum":["GENERAL_EMAIL","INFORMATION_REQUEST","COMMERCIAL_PROPOSAL","QUOTE"]},"emailAccountId":{"type":"string","optional":true},"idempotencyKey":{"type":"string","required":true},"subject":{"type":"string","required":true},"from":{"type":"string","required":true},"to":{"type":"array","optional":true},"cc":{"type":"array","optional":true},"bodyText":{"type":"string","optional":true},"bodyHtml":{"type":"string","optional":true},"messageId":{"type":"string","optional":true},"inReplyToMessageId":{"type":"string","optional":true},"references":{"type":"array","optional":true},"attachments":{"type":"array","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"set_next_action","description":"Schedule the next commercial action.","params":{"id":{"type":"string","required":true},"nextActionAt":{"type":"string","required":true},"nextActionNote":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"opt_out_lead","description":"Mark GDPR communication opt-out.","params":{"id":{"type":"string","optional":true},"email":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"archive_lead","description":"Soft-delete a lead (trash).","params":{"id":{"type":"string","required":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"sync_segment_to_audience","description":"Create or update a Brevo list from a CRM segment (always excludes opted-out leads). Requires verified Brevo mailings config.","params":{"name":{"type":"string","optional":true},"audienceId":{"type":"string","optional":true},"stage":{"type":"string","optional":true},"type":{"type":"string","optional":true},"tag":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"sync_brevo_unsubscribes","description":"Push Brevo blacklisted contacts into the CRM as GDPR opt-outs.","params":{"sinceDays":{"type":"number","default":30}},"x-mcp":{"channel":"crm","effect":"sync","requiredScope":"read","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"BACKGROUND","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"PROVIDER_KEY"}}}],"x-resources":[{"resource":"crm_config","operations":["update"],"description":"Enable or configure CRM. This requires human approval unless CRM auto-approval is enabled.","params":{"data":{"type":"array","required":true,"description":"[{ enabled?, inboundEnabled?, pipelineStages?, notifyEmails? }]"},"validate_only":{"type":"boolean","default":false},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"crm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/social/agent-query":{"post":{"summary":"Social organic channel data","description":"Read connected organic social accounts through DigitalPublic. X is the first supported provider.","tags":["Social Organic"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_tools","description":"List available organic social tools.","params":{},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_accounts","description":"List connected social accounts.","params":{"provider":{"type":"string","default":"X"}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_profile","description":"Get the connected X account profile, verify its remote identity, and refresh the cached name and handle.","params":{"accountId":{"type":"string","optional":true}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_x_profile_settings","description":"Read the complete editable X profile metadata, current profile hash, platform limits, and machine-readable update capability gap.","params":{"accountId":{"type":"string","optional":true}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_recent_posts","description":"List recent posts from the connected X account.","params":{"accountId":{"type":"string","optional":true},"max_results":{"type":"number","default":10}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_mentions","description":"List recent mentions for the connected X account.","params":{"accountId":{"type":"string","optional":true},"max_results":{"type":"number","default":10}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_followers","description":"List followers of the connected X account.","params":{"accountId":{"type":"string","optional":true},"max_results":{"type":"number","default":10}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_following","description":"List accounts followed by the connected X account.","params":{"accountId":{"type":"string","optional":true},"max_results":{"type":"number","default":10}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_recent_posts","description":"Search recent posts on X.","params":{"query":{"type":"string","required":true},"max_results":{"type":"number","default":10}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one pending social mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending social mutations.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List social mutation history including pending, expired, rejected, cancelled, executed, and error states.","params":{"status":{"type":"string","default":"all","enum":["all","pending","processing","executing","approved","expired","rejected","cancelled","executed","error"]},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_connection_status","description":"Estado, scopes y capacidades de LinkedIn.","params":{},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_linkedin_identities","description":"Lista perfiles y páginas vinculadas.","params":{"identityType":"MEMBER | ORGANIZATION (opcional)"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_profile","description":"Obtiene una identidad LinkedIn.","params":{"identityId":"opcional"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_organization_profile_settings","description":"Lee el perfil corporativo administrado, sus locales, versionTag, hash canónico y capacidad de actualización.","params":{"identityId":"organización exacta requerida"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"verify_linkedin_organization_profile_update","description":"Verifica por lectura un paquete de perfil aprobado y aplicado manualmente en LinkedIn.","params":{"mutationId":"paquete aprobado requerido"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_linkedin_organizations","description":"Lista páginas administradas sincronizadas.","params":{},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"sync_linkedin_assets","description":"Sincroniza páginas y cuentas publicitarias accesibles.","params":{},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_linkedin_posts","description":"Lista publicaciones de una identidad.","params":{"identityId":"requerido si hay varias","count":20},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_post","description":"Obtiene una publicación por URN.","params":{"postUrn":"requerido"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_social_metadata","description":"Resumen de comentarios y reacciones cuando el scope social feed correspondiente está concedido.","params":{"identityId":"requerido","entityUrn":"requerido"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_linkedin_comments","description":"Lista comentarios cuando LinkedIn concedió el scope social feed correspondiente.","params":{"identityId":"requerido","entityUrn":"requerido","count":20},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_linkedin_reactions","description":"Lista reacciones cuando LinkedIn concedió el scope social feed correspondiente.","params":{"identityId":"requerido","entityUrn":"requerido","count":20},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_page_statistics","description":"Estadísticas de página. Sin fechas devuelve el acumulado histórico.","params":{"identityId":"requerido","start":"ISO opcional","end":"ISO opcional","granularity":"DAY | MONTH"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_follower_statistics","description":"Estadísticas de seguidores de página. Sin fechas devuelve el acumulado histórico.","params":{"identityId":"requerido","start":"ISO opcional","end":"ISO opcional","granularity":"DAY | MONTH"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_post_statistics","description":"Estadísticas orgánicas por publicación (ventana máxima de 12 meses). Sin fechas devuelve el acumulado histórico.","params":{"identityId":"requerido","start":"ISO opcional","end":"ISO opcional","granularity":"DAY | MONTH"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_member_statistics","description":"Analítica del miembro cuando LinkedIn concede el permiso cerrado.","params":{"metric":"POST_IMPRESSION | POST_VIEW | POST_REACTION | POST_COMMENT | POST_REPOST | POST_SEND | POST_SAVE","start":"ISO","end":"ISO"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_linkedin_scheduled_posts","description":"Lista borradores y publicaciones programadas.","params":{"status":"opcional","limit":50},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_linkedin_publication_status","description":"Estado local de una publicación.","params":{"publicationId":"requerido"},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/social/agent-mutate":{"post":{"summary":"Queue organic social actions","description":"Queue or execute organic X actions through DigitalPublic. Requires write scope. Relational actions accept validUntil and are capped to a server-controlled window of 48 hours by default. Visible brand actions default to human approval.","tags":["Social Organic"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Queued or executed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-resources":[{"resource":"social_x_post","operations":["create","reply","delete","repost","undo_repost"],"description":"Queue an X post against an exact verified account. Process create calls require a stable idempotency key and approval_mode=REQUIRED.","operationParams":{"create":{"idempotency_key":{"type":"string","required":true,"description":"Use social-distribution:{cycleKey}:x:{accountId}."},"approval_mode":{"type":"string","required":true,"enum":["REQUIRED"]}}},"x-operation-mcp":{"create":{"approval":"human","processEligible":true}},"example":{"resource":"social_x_post","operation":"reply","data":[{"text":"Respuesta contextual.","tweetId":"123456789"}],"validUntil":"2026-07-30T00:00:00Z","idempotency_key":"social-reply-cycle-1","agent_note":"Responder dentro de la ventana observada."},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_x_follow","operations":["create","delete"],"example":{"resource":"social_x_follow","operation":"create","data":[{"target_user_id":"123456789"}],"validUntil":"2026-07-30T00:00:00Z","idempotency_key":"social-follow-cycle-1","agent_note":"Seguir cuenta institucional relevante."},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_x_like","operations":["create","delete"],"example":{"resource":"social_x_like","operation":"create","data":[{"tweet_id":"123456789"}],"validUntil":"2026-07-30T00:00:00Z","idempotency_key":"social-like-cycle-1","agent_note":"Marcar interacción orgánica relevante."},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_x_profile","operations":["update"],"description":"Propose an X profile metadata update. Always requires human approval. Execution fails closed with a capability gap while the connected OAuth 2 flow cannot edit profiles.","example":{"resource":"social_x_profile","operation":"update","data":[{"expectedProfileHash":"sha256-from-get_x_profile_settings","displayName":"Acme","bio":"Nueva biografía","website":"https://acme.example","location":"España","avatarFileId":"existing-creative-file-id","headerFileId":"existing-creative-file-id"}],"agent_note":"Actualizar identidad de marca tras revisión humana."},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_linkedin_organization_profile","operations":["update"],"approval":"human_approval_required","executionMode":"MANUAL_LINKEDIN_UI_REQUIRED","description":"Create an immutable, exact-version organization profile package for human approval and manual application in LinkedIn. DigitalPublic never calls undocumented profile write APIs.","example":{"resource":"social_linkedin_organization_profile","operation":"update","idempotency_key":"linkedin-profile-acme-v2649829925","data":[{"identityId":"linkedin-organization-identity-id","expectedVersionTag":"versionTag-from-settings","currentProfileHash":"sha256-from-settings","fields":{"name":{"es_ES":"Acme","en_US":"Acme"},"description":{"es_ES":"Descripción aprobada","en_US":"Approved description"},"website":{"es_ES":"https://www.acme.example/","en_US":"https://www.acme.example/en/"},"specialties":{"es_ES":["Agentes de IA"],"en_US":["AI agents"]}}}],"agent_note":"Preparar el paquete bilingüe para aplicación manual y verificación posterior."},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_linkedin_post","operations":["create","schedule","reschedule","cancel","update","delete","reshare"],"description":"Queue a LinkedIn post against an exact verified identity. Governed article distribution must use an ORGANIZATION identity, a stable idempotency key, and approval_mode=REQUIRED.","operationParams":{"create":{"idempotency_key":{"type":"string","required":true,"description":"Use social-distribution:{cycleKey}:linkedin:{identityId}."},"approval_mode":{"type":"string","required":true,"enum":["REQUIRED"]}}},"x-operation-mcp":{"create":{"approval":"human","processEligible":true}},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_linkedin_comment","operations":["create","reply","delete"],"approval":"human_approval_required","description":"Create a comment or prepare an exact nested reply. Replies require actorIdentityId, immutable approval, a short validity window, and an idempotency key.","params":{"actorIdentityId":"Verified MEMBER or ORGANIZATION identity ID, required for reply.","entityUrn":"Post/activity URN.","commentUrn":"Composite parent comment URN, required for reply/delete.","text":"Exact reply text.","idempotency_key":"Caller-stable unique key."},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_linkedin_reaction","operations":["create","delete"],"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"social_linkedin_webhook","operations":["subscribe","unsubscribe"],"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/social/automation/agent":{"post":{"summary":"Social editorial automation","description":"Prepare and revise internal social drafts for X, LinkedIn organizations, and Facebook Pages. These tools never approve or publish content.","tags":["Social Organic"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_social_automation_plans","description":"Lista los planes editoriales sociales activos del proyecto.","params":{},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_social_automation_plan_settings","description":"Inspecciona la configuración de un plan social activo o pausado sin habilitar la generación.","params":{"planId":{"type":"string","required":true}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_social_generation_brief","description":"Obtiene destinos, reglas editoriales y restricciones para preparar una publicación social.","params":{"planId":{"type":"string","required":true},"occurrenceKey":{"type":"string","optional":true}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"submit_social_draft","description":"Entrega un borrador social interno con una hora propuesta. No publica ni solicita una mutación externa.","params":{"planId":{"type":"string","required":true},"taskExecutionId":{"type":"string","required":true},"occurrenceKey":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"topic":{"type":"string","optional":true},"objective":{"type":"string","optional":true},"variants":{"type":"array","required":true}},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"submit_social_revision","description":"Entrega una revisión nueva para una variante devuelta por un revisor humano.","params":{"variantId":{"type":"string","required":true},"baseRevisionNumber":{"type":"number","required":true},"idempotencyKey":{"type":"string","required":true},"topic":{"type":"string","optional":true},"objective":{"type":"string","optional":true},"payload":{"type":"object","required":true},"proposedPublishAt":{"type":"string","required":true},"rationale":{"type":"string","optional":true}},"x-mcp":{"channel":"social","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_social_content_status","description":"Consulta el estado editorial y de entrega de un contenido social.","params":{"contentId":{"type":"string","required":true}},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_social_revision_requests","description":"Lista variantes que necesitan una nueva revisión del agente.","params":{},"x-mcp":{"channel":"social","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/web-editorial/agent":{"post":{"summary":"Web editorial automation","description":"Prepare immutable web drafts and revisions for WordPress or repository-backed external sites, including Cloudflare Pages. Repository-backed drafts do not require a DigitalPublic LandingPage. Use a project API key or select an authorized project when using a global agent credential. Agents never approve, publish, merge, or deploy. Administrative approval always targets the exact SHA-256 revision.","tags":["Web Editorial"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Read completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"201":{"description":"Immutable draft or revision stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"401":{"description":"Invalid credential or missing project selection for a global agent"},"403":{"description":"The credential lacks the declared read or write scope"}},"x-tools":[{"x-mcp":{"channel":"web_editorial","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}},"name":"register_editorial_brief","description":"Registra un brief previo a redacción, no publicable, con fuentes y hash, asociado al checkpoint conservado del mismo ciclo en WAITING_HUMAN o WAITING_AGENT. Conserva el checkpoint. El orden requiere decisión administrativa.","params":{"processRunId":{"type":"string","required":true},"nodeRunId":{"type":"string","required":true},"checkpointHash":{"type":"string","required":true},"briefKey":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"title":{"type":"string","required":true},"body":{"type":"string","required":true},"sources":{"type":"array","required":true},"locale":{"type":"string","optional":true}}},{"x-mcp":{"channel":"web_editorial","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}},"name":"list_editorial_briefs","description":"Consulta briefs no publicables y la decisión de orden del ciclo existente, con revisiones y hashes.","params":{"processRunId":{"type":"string","required":true}}},{"x-mcp":{"channel":"web_editorial","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}},"name":"submit_web_draft","description":"Crea un borrador web inmutable. Nunca aprueba, publica, fusiona ni despliega.","params":{"cycleKey":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"taskExecutionId":{"type":"string","optional":true},"processRunId":{"type":"string","optional":true},"nodeRunId":{"type":"string","optional":true},"topic":{"type":"string","optional":true},"objective":{"type":"string","optional":true},"producer":{"type":"string","optional":true},"variants":{"type":"array","required":true}}},{"x-mcp":{"channel":"web_editorial","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}},"name":"submit_web_revision","description":"Entrega una revisión nueva y deja obsoleta cualquier autorización anterior.","params":{"variantId":{"type":"string","required":true},"baseRevisionNumber":{"type":"number","required":true},"idempotencyKey":{"type":"string","required":true},"payload":{"type":"object","required":true}}},{"x-mcp":{"channel":"web_editorial","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}},"name":"get_web_content_status","description":"Consulta revisiones, decisiones y entregas de un contenido web del proyecto.","params":{"contentId":{"type":"string","required":true}}},{"x-mcp":{"channel":"web_editorial","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}},"name":"list_web_revision_requests","description":"Lista variantes web que requieren una revisión nueva del agente.","params":{}}]}},"/api/linkedin-ads/agent-query":{"post":{"summary":"LinkedIn Ads data and diagnostics","description":"Query linked ad accounts, Campaign Groups, campaigns, creatives, targeting, forecasts, audiences, conversions, leads, and reporting. Capability-gated by the LinkedIn products/scopes granted to the connection.","tags":["LinkedIn Ads"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_tools","description":"Lista herramientas LinkedIn Ads.","params":{},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_connection_status","description":"Estado, scopes y capacidades.","params":{},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ad_accounts","description":"Lista cuentas asignadas al proyecto.","params":{},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ad_account","description":"Obtiene una cuenta.","params":{"adAccountId":"opcional si solo hay una"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_account_users","description":"Lista usuarios y roles de una cuenta.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_account_capabilities","description":"Devuelve formatos/tipos permitidos y capacidades del token.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_campaign_groups","description":"Lista Campaign Groups.","params":{"adAccountId":"opcional","pageSize":100,"pageToken":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign_group","description":"Obtiene un Campaign Group.","params":{"adAccountId":"opcional","campaignGroupId":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_campaigns","description":"Lista campañas.","params":{"adAccountId":"opcional","campaignGroupId":"opcional","pageSize":100,"pageToken":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign","description":"Obtiene una campaña.","params":{"adAccountId":"opcional","campaignId":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_creatives","description":"Lista creatividades/anuncios.","params":{"adAccountId":"opcional","campaignId":"opcional","pageSize":100,"pageToken":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_creative","description":"Obtiene una creatividad/anuncio.","params":{"adAccountId":"opcional","creativeId":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign_capabilities","description":"Compatibilidad de objetivo, formato y cuenta.","params":{"adAccountId":"opcional","campaignId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_objectives","description":"Objetivos soportados por la integración.","params":{},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ad_formats","description":"Formatos soportados por la integración.","params":{},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_targeting_facets","description":"Busca entidades de targeting profesional.","params":{"type":"requerido","query":"requerido","limit":25},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_audience_count","description":"Calcula tamaño de audiencia.","params":{"targetingCriteria":"Rest.li targeting criteria requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_budget_pricing","description":"Obtiene rangos de presupuesto/puja.","params":{"objectiveType":"requerido","targetingCriteria":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_supply_forecast","description":"Obtiene previsión de entrega.","params":{"targetingCriteria":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_images","description":"Lista imágenes de la cuenta.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_videos","description":"Lista vídeos de la cuenta.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_documents","description":"Lista documentos de la cuenta.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_sponsored_posts","description":"Lista posts patrocinables de una organización.","params":{"organizationUrn":"requerido","count":50},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"diagnose_account","description":"Diagnóstico de cuenta, conexión y campañas.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"diagnose_campaign","description":"Diagnóstico de campaña.","params":{"adAccountId":"opcional","campaignId":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_delivery_issues","description":"Campañas con delivery limitado o estado no activo.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preflight_campaign_bundle","description":"Valida bundle y audiencia sin publicar.","params":{"adAccountId":"opcional","data":"bundle requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ad_segments","description":"Lista segmentos disponibles.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_dmp_segments","description":"Lista DMP segments aprobados.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_conversion_rules","description":"Lista reglas de conversión.","params":{"adAccountId":"opcional"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_conversion_rule","description":"Obtiene una regla de conversión.","params":{"conversionId":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_lead_forms","description":"Lista formularios Lead Gen.","params":{"ownerUrn":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_lead_responses","description":"Lista respuestas Lead Gen.","params":{"ownerUrn":"requerido","leadType":"SPONSORED"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ad_analytics","description":"Métricas por un pivot.","params":{"pivot":"ACCOUNT | CAMPAIGN_GROUP | CAMPAIGN | CREATIVE","dateRange":"requerido","timeGranularity":"DAILY | MONTHLY | ALL"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ad_statistics","description":"Métricas por hasta tres pivots.","params":{"pivots":"List(...) requerido","dateRange":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_attributed_revenue","description":"Métricas de ingresos atribuidos.","params":{"dateRange":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Estado de una mutación LinkedIn Ads.","params":{"mutationId":"requerido"},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"Lista mutaciones LinkedIn Ads pendientes.","params":{"limit":20},"x-mcp":{"channel":"linkedin_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/linkedin-ads/agent-mutate":{"post":{"summary":"LinkedIn Ads campaign actions","description":"Create and manage LinkedIn Ads resources. New groups, campaigns, and creatives are forced to DRAFT. High-impact actions require human approval unless linkedin_ads auto-approval is enabled.","tags":["LinkedIn Ads"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Validated, queued, or executed"}},"x-tools":[{"name":"resource_mutation","description":"Structured LinkedIn Ads mutation.","params":{"resource":{"type":"string","required":true},"operation":{"type":"string","required":true},"data":{"type":"array","required":true},"adAccountId":{"type":"string","optional":true},"validate_only":{"type":"boolean","optional":true},"remote_validate":{"type":"boolean","optional":true},"idempotency_key":{"type":"string","optional":true},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-resources":[{"resource":"linkedin_campaign_groups","operations":["create","update_name","update_status","update_budget","update_schedule","archive"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"linkedin_campaigns","operations":["create","update_status","update_name","update_budget","update_schedule","update_targeting","update_bid","copy","archive"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"linkedin_creatives","operations":["create","update_status","copy","delete"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"linkedin_campaign_bundle","operations":["create"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"linkedin_media","operations":["upload_image","upload_video","upload_document"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"linkedin_conversion_rules","operations":["create","update","associate_campaigns"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"linkedin_conversion_events","operations":["send"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"linkedin_matched_audiences","operations":["create","upload_list","add_members","remove_members","delete"],"x-mcp":{"channel":"linkedin_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/aeo/agent-query":{"post":{"summary":"AEO / AI search visibility","description":"Query AI search visibility for the project's configured brand, prompts, and engines.","tags":["AEO"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"get_se_visible_availability","description":"Read SE Visible availability for this project, with explicit unknown results and safe reasonCode. Only agents with global read scope receive authorized quotas and inventory. This read does not activate a connection.","params":{},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_aeo_capacity","description":"Read AEO prompt availability. Aggregate counts require global read scope.","params":{},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_aeo_configuration","description":"Freeze brand, complete prompts and engines from the bound provider with a deterministic snapshot hash. SE Visible bindings use live SE Visible configuration and retain legacy fields separately.","params":{},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"aeo_overview","description":"Brand visibility overview by configured AI engine. Every engine distinguishes VALID, UNAVAILABLE, ERROR and PENDING.","params":{"from":{"type":"string","optional":true},"to":{"type":"string","optional":true},"top":{"type":"number","optional":true}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"aeo_prompt_rankings","description":"Prompt ranking rows for ChatGPT, Gemini, Perplexity, Google AI Overview, or Google AI Mode, with an explicit resultState.","params":{"engine":{"type":"string","optional":true},"date_from":{"type":"string","optional":true},"date_to":{"type":"string","optional":true},"limit":{"type":"number","default":100},"offset":{"type":"number","default":0},"mode":{"type":"string","optional":true}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"aeo_prompt_answer","description":"Cached AI answer for a specific prompt ranking ID, with an explicit resultState.","params":{"engine":{"type":"string","optional":true},"prompt_llm_id":{"type":"string","required":true},"date":{"type":"string","optional":true}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"aeo_visible_project","description":"Read the SE Visible project bound to this DigitalPublic project.","params":{},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"aeo_visible_prompts","description":"List SE Visible prompts and provider metrics with metricReconciliation. Use reportingMetrics for reports; zero mentions require reconciliation with underlying responses and brand aliases.","params":{"from":{"type":"string","optional":true},"to":{"type":"string","optional":true},"model":{"type":"string","optional":true},"limit":{"type":"number","default":100},"offset":{"type":"number","default":0}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"aeo_visible_results","description":"List SE Visible model runs with qualitative mentionReconciliation. Preserve provider flags; conflicting brand or domain evidence excludes zero-mention conclusions.","params":{"promptId":{"type":"number","required":true},"from":{"type":"string","optional":true},"to":{"type":"string","optional":true},"model":{"type":"string","optional":true},"limit":{"type":"number","default":100},"offset":{"type":"number","default":0}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"aeo_visible_result","description":"Read one SE Visible result with full response, sources and qualitative mentionReconciliation. Conflicting evidence requires reconciliation before reporting zero mentions; it does not establish causal improvement or global visibility.","params":{"promptId":{"type":"number","required":true},"resultId":{"type":"number","required":true}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_aeo_reports","description":"List generated AEO reports.","params":{"limit":{"type":"number","default":10}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one AEO mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending AEO mutations.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List AEO mutation history.","params":{"status":{"type":"string","default":"all"},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"aeo","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/aeo/agent-mutate":{"post":{"summary":"Configure AEO and prompts","description":"Queue AEO configuration and prompt changes. The AEO site must already exist in DigitalPublic. Requires write scope and human approval unless AEO auto-approval is enabled.","tags":["AEO"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Validated, queued, or executed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-resources":[{"resource":"aeo_config","operations":["update"],"description":"Update brandName, countryCode, langCode, regionName, enabledEngines, optional seVisibleProjectId, and the existing AEO site identifier (field name `seRankingSiteId`, kept for API compatibility).","x-mcp":{"channel":"aeo","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"aeo_prompts","operations":["add","remove"],"description":"Add or remove promptKeywords across enabled AEO engines.","params":{"data":{"type":"array","required":true,"minItems":1,"maxItems":1,"items":{"type":"object","required":["promptKeywords"],"additionalProperties":false,"properties":{"promptKeywords":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","minLength":1}}}}}},"x-mcp":{"channel":"aeo","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/evidence/agent-query":{"post":{"summary":"Public and GitHub evidence","description":"Read-only, timestamped and hashed public evidence. Public page fetches are SSRF guarded and bounded. A closed GitHub issue never implies a verified deployment.","tags":["Evidence"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Evidence snapshot"},"400":{"description":"Unsafe or invalid target"}},"x-tools":[{"name":"inspect_public_page","description":"Inspect HTTP status, redirects, canonical, hreflang, metadata, relevant text and JSON-LD, returning observedAt and a content hash.","params":{"url":{"type":"string","required":true}},"x-mcp":{"channel":"evidence","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_public_github_issue","description":"Read a public GitHub issue snapshot with timestamp and hash. deploymentVerified is always false because issue state is not deployment evidence.","params":{"owner":{"type":"string","default":"cnavarro"},"repo":{"type":"string","default":"answerenginesoptimization"},"issueNumber":{"type":"number","required":true}},"x-mcp":{"channel":"evidence","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/wordpress-seo/agent-query":{"post":{"summary":"WordPress and content data","description":"Read WordPress data, editable page content, builder detection, and menus through the DigitalPublic proxy. Agents must not call the WordPress plugin directly.","tags":["WordPress"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"wp_connector.prepare","description":"Consult the official private dp-seo-manager release and prepare an exact update. Reports bootstrap_required on old connectors. Requires site policy, external recovery and backup, and compatible WP/PHP.","params":{"target_version":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_connector.verify","description":"Independently reread connector version, readiness and capabilities and probe the public web. Resume only the original blocked task after verified evidence, preserving its approvals.","params":{"target_version":{"type":"string","required":true},"request_id":{"type":"string","required":true}},"x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_site_status","description":"Plugin compatibility and site status. pluginOutdated means a newer release exists; it is not a global task blocker. Check supports and feature-specific minimum versions before requesting an update. Check ready/initializing/retry_after before read-after-write SEO verification; if ready=false, retry wp_list_posts/wp_get_post_seo later instead of trusting empty SEO fields. Plugin 1.2.3+ reports supports.wafFallback and can recover governed status, page, SEO, menu and cache operations through admin-ajax when the hosting blocks only REST.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_taxonomies","description":"List public SEO-editable taxonomies: category, post_tag and custom taxonomies.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_terms","description":"List terms of a taxonomy with Yoast SEO summary (seo_title, meta_description, focus_keyword, OG, URL).","params":{"taxonomy":{"type":"string","required":true},"page":{"type":"number","default":1},"per_page":{"type":"number","default":20},"search":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_get_term_seo","description":"Full SEO data of a term. Use term_id returned by wp_list_terms.","params":{"taxonomy":{"type":"string","required":true},"term_id":{"type":"number","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_get_post_schema","description":"Configured/active schema of a post: Yoast types, detected FAQ blocks and stored FAQ meta.","params":{"post_id":{"type":"number","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_faq_blocks","description":"List Yoast FAQ blocks in a post Gutenberg content with normalized questions/answers.","params":{"post_id":{"type":"number","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_content_analysis","description":"Content analysis from the public rendered permalink when available: headings, word count, keyword density, readability, content_source/rendered/reliability. If rendered HTML is unavailable for builder/composed content, assessment is omitted instead of returning unsafe recommendations.","params":{"post_id":{"type":"number","required":true},"keyword":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_link_analysis","description":"Internal and external link analysis from rendered HTML when available. Check rendered, content_source, analysis_reliable and warning before acting.","params":{"post_id":{"type":"number","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_image_analysis","description":"Image inventory with alt text status and coverage.","params":{"post_id":{"type":"number","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_site_audit","description":"Multilingual site SEO audit. Audits all languages by default and returns languages_audited plus lang/language per issue.","params":{"limit":{"type":"number","default":50},"lang":{"type":"string","default":"all","description":"Language code or all."},"language":{"type":"string","optional":true,"description":"Alias of lang."},"wpml_language":{"type":"string","optional":true,"description":"Alias of lang."}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_robots_txt","description":"Read the robots.txt content of the WordPress site.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_sitemap_url","description":"Get the detected XML sitemap URL of the WordPress site.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_posts","description":"List posts/pages. Supports pagination, category/tag/date filters, and scheduled posts. Follow pages until the response page count is exhausted to build a complete inventory. May return dp_seo_initializing if the plugin is in its short post-update readiness window; call wp_site_status and retry after retry_after instead of treating missing SEO fields as real. On multilingual sites (WPML/Polylang, plugin >= 1.1.0) lang defaults to 'all' so inventories include translations; pass lang, language, or wpml_language to list a specific language (e.g. 'de'). Each item includes language, lang, and a translations map usable with wp_get_post_seo and SEO mutations.","params":{"post_type":{"type":"string","enum":["post","page","any"],"default":"any"},"status":{"type":"string","default":"publish"},"page":{"type":"number","default":1},"per_page":{"type":"number","default":20,"minimum":1,"maximum":100},"search":{"type":"string","optional":true},"category":{"type":"string","optional":true},"tag":{"type":"string","optional":true},"orderby":{"type":"string","enum":["date","modified","title"],"optional":true},"order":{"type":"string","enum":["asc","desc"],"optional":true},"after":{"type":"string","optional":true},"before":{"type":"string","optional":true},"lang":{"type":"string","optional":true,"description":"Language code ('de') or 'all'. Default: all."},"language":{"type":"string","optional":true,"description":"Alias of lang."},"wpml_language":{"type":"string","optional":true,"description":"Alias of lang."}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_categories","description":"List blog categories with id/name/slug/count/parent and SEO summary.","params":{"search":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_tags","description":"List blog tags with id/name/slug/count and SEO summary.","params":{"search":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_get_post_content","description":"Get editable post_content and builder detection for a page/post. For Elementor/Divi, prefer clone-and-replace mutations.","params":{"post_id":{"type":"number","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_menus","description":"List WordPress menus, assigned theme locations, and current menu items before linking pages.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_get_reading_settings","description":"Read WordPress Reading settings including page_for_posts.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_list_users","description":"List WordPress users for authorship/byline management.","params":{"page":{"type":"number","default":1},"per_page":{"type":"number","default":20},"search":{"type":"string","optional":true},"role":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_yoast_content_types.list","description":"List Yoast Search Appearance settings for registered post types, taxonomies, and archives, including show_in_search, title/metadesc templates, and schema defaults.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_customizer.list_settings","description":"List editable active-theme Customizer settings, prioritizing footer/copyright-like keys.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_widgets.list","description":"List every assigned widget in sidebar order. Results include widget_id, id_base, sidebar, order, supported, editable, support_reason, adapter, and editable_fields. Unsupported widgets expose no instance data. Governed custom widget adapters require plugin 1.1.10+.","params":{"sidebar":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_content_sources.list","description":"Diagnose saved, filtered, widget, and public-rendered content for a post. Each the_content callback exposes opaque before/after hashes, change type and position. Pass search to attribute a requested fragment with bounded match evidence. Published Unlimited Codes HTML/shortcode snippets are listed as governed child sources; inactive, empty, sensitive and hard-coded sources remain non-editable. Per-callback attribution requires plugin 1.1.12+.","params":{"post_id":{"type":"number","required":true},"search":{"type":"string","optional":true,"description":"Optional fragment to attribute. The response returns counts and a bounded plain-text excerpt only for a matching contribution."}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_redirects.list","description":"List governed permanent redirects with status, enabled state and revision. Requires plugin 1.1.13+.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_redirects.preview","description":"Validate and preview a 301/308 rule without persisting it. Rejects unsafe paths, redirect chains, cycles and unapproved cross-domain destinations.","params":{"id":{"type":"string","optional":true},"from_path":{"type":"string","required":true},"to_url":{"type":"string","required":true},"status":{"type":"number","enum":[301,308],"default":301},"enabled":{"type":"boolean","default":true},"external_approved":{"type":"boolean","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_redirects.verify","description":"Verify the final public HTTP response for a redirect source without sending WordPress credentials.","params":{"from_path":{"type":"string","required":true},"to_url":{"type":"string","optional":true},"status":{"type":"number","enum":[301,308],"optional":true},"absent":{"type":"boolean","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_get_post_seo","description":"Get SEO metadata for a post/page or its requested translation. Returns language and lang. May return dp_seo_initializing immediately after a plugin update; retry after wp_site_status.retry_after.","params":{"post_id":{"type":"number","required":true},"lang":{"type":"string","optional":true,"description":"Translation language."},"language":{"type":"string","optional":true,"description":"Alias of lang."},"wpml_language":{"type":"string","optional":true,"description":"Alias of lang."}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_preview_changes","description":"Preview SEO-only changes without applying them.","params":{"post_id":{"type":"number","required":true},"changes":{"type":"object","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_cache.detect","description":"Detect supported WordPress cache plugins and active status. Also returns purge_access with a safe read-only accessibility diagnostic; hosting blocks use stable code wp_hosting_waf_blocked and actionable allowlist guidance.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_htaccess.read","description":"Read the current WordPress .htaccess file.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_images.audit","description":"Audit large media library images and WebP availability.","params":{"min_size_kb":{"type":"number","default":100},"page":{"type":"number","default":1},"per_page":{"type":"number","default":50}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_assets.nginx_webp_snippet","description":"Return an nginx snippet for WebP delivery of static uploads before Apache.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_plugins.list","description":"List installed WordPress plugins with slug, file, name, version, active, category, must_use, network_active, and managed flags.","params":{},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_headers.diagnose","description":"Measure public URL status, TTFB, total time, size, and response headers from the WordPress server and return cache-broken heuristics.","params":{"url":{"type":"string","optional":true},"iterations":{"type":"number","default":3}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_runtime.diagnose","description":"Probe anonymous requests without cookies, separate HTML page-cache from asset optimization, return effective settings, and identify executable PHP session or no-cache calls in active plugins, must-use plugins, and the active theme. Comments and string literals are excluded from attribution.","params":{"url":{"type":"string","optional":true},"iterations":{"type":"number","minimum":1,"maximum":5,"default":3}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_performance.psi","description":"Run Google PageSpeed Insights for a URL. Requires GOOGLE_PSI_API_KEY.","params":{"url":{"type":"string","optional":true},"strategy":{"type":"string","enum":["mobile","desktop","both"],"default":"both"}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_performance.crux","description":"Query Chrome UX Report field data for an origin. Requires GOOGLE_PSI_API_KEY.","params":{"origin":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"wp_performance.compare","description":"Compare two PSI snapshots returned by wp_performance.psi.","params":{"before":{"type":"object","required":true},"after":{"type":"object","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one pending WordPress mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending WordPress mutations.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List WordPress mutation history.","params":{"status":{"type":"string","default":"all"},"limit":{"type":"number","default":20},"resource":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_pending_mutation","description":"Update a pending WordPress mutation.","params":{"mutationId":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"data":{"type":"array","optional":true}},"x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"cancel_pending_mutation","description":"Cancel a pending WordPress mutation.","params":{"mutationId":{"type":"string","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-waf-fallback":{"minimumPluginVersion":"1.2.4","trigger":"Only wp_hosting_waf_blocked responses from the REST transport. Legitimate plugin 401/403 errors never trigger fallback.","reads":["wp_site_status","wp_list_posts","wp_get_post_seo","wp_get_post_content","wp_preview_changes","wp_list_menus","wp_cache.detect"],"writes":["wp_page.update_content","wp_post.update_content","wp_meta_description.update","wp_title.update","wp_seo_title.update","wp_menu_item.create","wp_menu_item.update","wp_menu_item.move","wp_menu_item.delete","wp_menu_item.bulk_reorder","wp_cache.purge"]}}},"/api/wordpress-seo/agent-mutate":{"post":{"summary":"WordPress, page publishing, and menu mutations","description":"Execute WordPress mutations through DigitalPublic. Page publishing, content editing, clone-and-replace, and menu changes always return pending_approval and execute only after a human approves in DigitalPublic. wp_page.update_content reports outcome=persisted after verified read-back or outcome=no_op when the requested values already match. Missing verification returns WORDPRESS_CONTENT_VERIFICATION_REQUIRED and read-back divergence returns WORDPRESS_CONTENT_PERSISTENCE_DIVERGED.","tags":["WordPress"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["resource","operation","data"],"properties":{"resource":{"type":"string","enum":["wp_page","wp_page_with_menu","wp_post","wp_post_with_menu","wp_category","wp_tag","wp_page_featured_image","wp_menu_item","wp_media","wp_meta_description","wp_title","wp_seo_title","wp_faq_schema","wp_reading_settings","wp_discussion_settings","wp_user","wp_cache","wp_runtime","wp_htaccess","wp_redirects","wp_images","wp_assets","wp_yoast_content_types","wp_customizer","wp_widgets","wp_content_sources","wp_plugins","wp_connector"]},"operation":{"type":"string","description":"For media: upload. For pages/posts: create_publish, clone_publish, update_content, with *_and_link variants for menu links. For posts also assign_terms, set_featured_image, bulk_comment_status. For categories/tags/users: create/update. For menu items: create/update/move/delete/bulk_reorder. For performance: wp_cache purge/configure, wp_runtime upsert_session_policy/undo_session_policy, wp_htaccess upsert_block, wp_images convert_webp/regenerate_thumbnails/bulk_lazy, wp_assets rewrite_html_webp/undo_html_webp. For redirects: upsert/remove/undo. For Yoast and Customizer: update/undo. For widgets and governed content sources: update_field/undo_field. For plugins: activate/deactivate. For settings and SEO: update."},"data":{"type":"array","description":"Array of mutation payloads. Media accepts filename/mime_type/base64. Page payloads accept title/slug/content/status ('publish'|'draft'|'future', default publish)/post_date/post_id/source_page_id/replacements/menu/comment_status/ping_status/post_author. Post payloads accept title/content/status/post_date/source_post_id/categories/tags/featured_media/comment_status/ping_status/post_author/SEO fields. bulk_comment_status accepts post_ids/comment_status/ping_status. Category/tag payloads accept name/slug/description/parent/term_id. Menu items accept menu_id/menu_slug/theme_location plus page_id/post_id/term_id+taxonomy/url, or menu_item_id for update/move/delete. wp_user accepts username/email/display_name/role or user_id profile fields. Performance payloads accept cache toggles, browser_cache_ttl_seconds, attachment_ids, post_ids, post_types, backup_id, batch_size, and dry_run where applicable. wp_redirects.upsert accepts from_path/to_url/status/enabled/external_approved; remove accepts id or from_path plus disable; undo accepts backup_id. wp_yoast_content_types.update accepts kind, slug, show_in_search, title_template, metadesc_template, schema_page_type, schema_article_type; undo accepts backup_id. wp_customizer.update accepts key/value/type? and undo accepts backup_id. wp_widgets.update_field requires sidebar, widget_id, id_base, field from editable_fields, and value; validate_only returns a before/after preview; undo_field accepts backup_id. Unsupported widget instances are never exposed. wp_plugins accepts slug or file and always requires approval."},"agent_note":{"type":"string","description":"Recommended explanation for the human approver."},"validate_only":{"type":"boolean","default":false},"idempotency_key":{"type":"string","maxLength":200,"description":"Stable project-scoped key. Replays return the original mutation and a conflicting payload is rejected."}}}}}},"responses":{"200":{"description":"Executed immediately or queued for approval","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-resources":{"wp_connector":{"operations":["update"],"description":"Update only the private dp-seo-manager connector using the native updater. data: [{target_version, sha256}]. Requires idempotency_key, agent_note and human approval. Dispatch returns awaiting_verification; call wp_connector.verify independently before resuming the original task. General WordPress auto-approval never authorizes this resource.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_page":{"operations":["create_publish","clone_publish","update_content"],"description":"Publish or edit pages without touching menus. Always approval_required. update_content requires DP SEO Manager 1.2.15+, verifies stored content before reporting success, and returns an explicit persisted or no_op outcome.","x-operation-mcp":{"update_content":{"approval":"human","processEligible":true}},"x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_page_with_menu":{"operations":["create_publish_and_link","clone_publish_and_link","update_content_and_link"],"description":"Publish/edit a page and add it to an existing menu in the same approved execution.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_post":{"operations":["create_publish","clone_publish","update_content","assign_terms","set_featured_image","bulk_comment_status"],"description":"Create, clone, update, schedule, categorize, tag, set authors/comment status, and set featured images for blog posts. Visible content changes are approval_required; assign_terms/set_featured_image/bulk_comment_status are auto.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_category":{"operations":["create","update"],"description":"Create/update categories idempotently by slug. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_tag":{"operations":["create","update"],"description":"Create/update tags idempotently by slug. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_page_featured_image":{"operations":["set_featured_image"],"description":"Set or remove a page featured image by attachment_id. auto.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_menu_item":{"operations":["create","update","move","delete","bulk_reorder"],"description":"Create custom URL, page, post, or taxonomy menu links; update labels/URLs/parents/positions; move, delete, and bulk reorder items. Always approval_required. Since plugin 1.1.5, create validates parent_item_id upfront (existing item of the same menu) and verifies it persisted (read-after-write) — it errors instead of silently creating the item at top level.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_media":{"operations":["upload"],"description":"Upload a byte-validated JPEG, PNG, GIF, WebP or supported AVIF image (max 2 MiB, 12000 px per side, 40 MP) and return id/url/alt. SVG and MIME mismatches are rejected. Executes immediately.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_seo_title":{"operations":["update"],"description":"Update a post or page SEO title and verify persistence plus the active SEO presentation. With Yoast, explicitly reapplying the stored value rebuilds and verifies its indexable/public title. data: [{ post_id, value | seo_title }]. auto.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_meta_description":{"operations":["update"],"description":"Update a post or page meta description and verify that WordPress persisted it. data: [{ post_id, value | meta_description }]. auto.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_reading_settings":{"operations":["update"],"description":"Update Reading settings such as page_for_posts. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_discussion_settings":{"operations":["update"],"description":"Update global comment defaults and notifications. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_user":{"operations":["create","update"],"description":"Create/update WordPress users for post author bylines. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_cache":{"operations":["purge","configure"],"description":"Purge supported HTML page caches, asset caches and WordPress object cache automatically, including Cache Enabler and Hummingbird hooks when active, or configure conservative cache toggles after approval.","x-operation-mcp":{"purge":{"approval":"none","processEligible":true}},"x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_runtime":{"operations":["upsert_session_policy","undo_session_policy"],"description":"Create or restore a reversible anonymous-session policy for explicit public routes. Both operations require human approval and return verifiable backup state.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_htaccess":{"operations":["upsert_block"],"description":"Insert/update only the generated dp-seo-perf .htaccess block with backup. Accepts browserCacheTtlSeconds (3600..31536000); arbitrary block text is rejected. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_redirects":{"operations":["upsert","remove","undo"],"description":"Create/update, disable/remove, or restore governed permanent 301/308 redirects. Every operation requires human approval, creates a bounded backup, and verifies the final public response. Cross-domain destinations also require external_approved=true. Use validate_only for preview. Requires plugin 1.1.13+.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_images":{"operations":["convert_webp","regenerate_thumbnails","bulk_lazy"],"description":"Generate WebP files, regenerate thumbnails, or add lazy/async attributes to saved HTML in batches. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_assets":{"operations":["rewrite_html_webp","undo_html_webp"],"description":"Wrap saved post/page img tags with picture/source WebP markup and restore automatic backups. approval_required.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_yoast_content_types":{"operations":["update","undo"],"description":"Update or restore Yoast Search Appearance settings for registered post types, taxonomies, and archives. Creates an automatic backup and always requires approval.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_customizer":{"operations":["update","undo"],"description":"Update or restore active-theme Customizer settings such as footer/copyright text. Creates an automatic backup and always requires approval.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_widgets":{"operations":["update_field","undo_field","update_text","undo_text"],"description":"Update or restore allowlisted fields of core or custom widgets through governed adapters. update_field validates sidebar, id_base, adapter, and field; provides validate_only preview; creates an automatic backup; verifies persistence; supports undo; and always requires approval. Full adapter support requires plugin 1.1.10+.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_content_sources":{"operations":["update_field","undo_field"],"description":"Update or restore allowlisted scalar options and published Unlimited Codes post_content. Preview, human approval, backup, persistence verification, public render verification, and undo are enforced. Inactive or empty snippets are not attributed; sensitive content, arbitrary callbacks, hard-coded theme filters and structured values are excluded. Unlimited Codes support requires plugin 1.1.12+. Plugin 1.1.15+ adds a Bearer-authenticated admin-ajax fallback when a hosting WAF returns HTML 403 before REST execution.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"wp_plugins":{"operations":["activate","deactivate"],"description":"Activate or deactivate installed WordPress plugins by slug or file. Must-use, network-active, and DP SEO Manager itself are protected. Creates an automatic backup and always requires approval.","x-mcp":{"channel":"wordpress","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}},"x-examples":[{"description":"Upload an image to the media library","body":{"resource":"wp_media","operation":"upload","data":[{"filename":"hero-seo-agencias.jpg","mime_type":"image/jpeg","base64":"...","alt":"Equipo revisando estrategia SEO para agencias","attach_to_post_id":3421}],"agent_note":"Subir imagen a la mediateca para usarla en una landing."}},{"description":"Create, publish, and link a new Gutenberg/native page","body":{"resource":"wp_page_with_menu","operation":"create_publish_and_link","data":[{"title":"Mantenimiento WordPress","slug":"mantenimiento-wordpress","content":"<!-- wp:paragraph --><p>Servicio de mantenimiento WordPress.</p><!-- /wp:paragraph -->","seo_title":"Mantenimiento WordPress profesional","meta_description":"Servicio de mantenimiento WordPress para empresas.","menu":{"theme_location":"primary","label":"Mantenimiento WordPress"}}],"agent_note":"Publicar nueva página y enlazarla al menú principal."}},{"description":"Clone an Elementor/Divi template and replace text","body":{"resource":"wp_page_with_menu","operation":"clone_publish_and_link","data":[{"source_page_id":123,"title":"SEO Local","slug":"seo-local","replacements":[{"find":"Nombre del servicio","replace":"SEO Local"}],"menu":{"theme_location":"primary","label":"SEO Local"}}],"agent_note":"Clono una plantilla para preservar el diseño del builder."}}]}},"/api/landing-pages/agent-query":{"post":{"summary":"Native landing pages data","description":"Read native DigitalPublic landing pages: block-based content, immutable versions, domains, brand theme, and signed preview URLs. Landing pages are hosted by DigitalPublic on wildcard subdomains; no external CMS involved. Cookie consent and non-essential tracking gating are enabled by default for every landing; only explicit meta.cookieConsent.enabled:false disables them and produces a validation warning.","tags":["LandingPages"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_pages","description":"List project sites with editorial status, public availability, hostname and published/latest version numbers.","params":{"status":{"type":"string","enum":["draft","published","archived"],"optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_lifecycle","description":"Get maintenance, archive, deletion grace period and recent lifecycle events for one site.","params":{"pageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_page","description":"Full detail of one landing page: domains, published version, latest version with contentJson.","params":{"id":{"type":"string","optional":true},"slug":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_domain_cutover","description":"Read the recoverable custom-domain cutover state, timestamps, error and next action.","params":{"domainId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_versions","description":"Immutable version history of a landing page.","params":{"pageId":{"type":"string","required":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_version","description":"One version with its contentJson (default: latest).","params":{"pageId":{"type":"string","required":true},"versionNumber":{"type":"number","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_block_types","description":"Available block types with fields and limits, the content document guide, and the brand theme schema. Call this before composing content. Cookie consent is always enabled by default and gates lp_vid/tracking until analytics consent; agents must not set meta.cookieConsent.enabled:false without an explicit user instruction. Includes safe editorial Markdown/GFM, image, gallery, stats, logos, video and chart blocks; hero urlCapture for a domain-first lead flow; sitePages for full commercial routes such as /pricing and /contact with their own SEO metadata; auxPages for legal copy; media backgrounds; CRM lead forms; JSON-LD; global navigation; quick contact; favicon; and multi-language subdirectories with reciprocal hreflang.","params":{},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_theme","description":"Brand design tokens of the project (colors, fonts, radius, logo).","params":{},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_url","description":"Signed preview URL (7 days) of any version, including drafts. Share it with humans or use it to inspect the rendered page. An optional path opens a sitePage, auxiliary page, or draft blog index, and preview navigation preserves the signed token across the whole site.","params":{"pageId":{"type":"string","required":true},"versionId":{"type":"string","optional":true},"path":{"type":"string","optional":true,"description":"sitePage, auxiliary page, or blog path such as pricing, about-us, contact, privacy, or blog"}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_metrics","description":"First-party metrics of a landing: pageviews, unique visitors, conversions by goal (form_submit, cta_click, custom), visitor-deduped conversion rate, and daily series. Form submissions also create CRM leads (source web_form, sourceDetail landing:<slug>).","params":{"pageId":{"type":"string","required":true},"from":{"type":"string","optional":true,"description":"ISO date, default 30 days ago"},"to":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_experiment_results","description":"A/B experiment results: visitors and conversions per variant (visitor-deduped), rate, Wilson 95% CI, lift vs control, and two-proportion p-value with a plain-language note. The platform never auto-declares a winner: when results are conclusive, propose landing_experiment.declare_winner (human approval).","params":{"experimentId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_conversion_plan","description":"Read-only legacy conversion inventory, proposed draft and explicit blockers. Preserves published content; never guesses translation ownership.","params":{"landingPageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_workspace","description":"Compact authoring workspace with configuration, immutable page versions and translation coverage. Paginated.","params":{"landingPageId":{"type":"string","required":true},"offset":{"type":"number","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_effective_page","description":"Read the composed page for an exact release route, including inherited configuration and provenance.","params":{"landingPageId":{"type":"string","required":true},"releaseId":{"type":"string","required":true},"path":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_change_preview","description":"Read the saved result and affected paths of an idempotent draft change.","params":{"landingPageId":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_quality_run","description":"Read structural and browser quality evidence for a frozen release. Historical HTTP-only verification is not browser evidence.","params":{"landingPageId":{"type":"string","required":true},"releaseId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_pages","description":"List Sites v2 pages under routes of one LandingPage site container.","params":{"landingPageId":{"type":"string","required":true},"status":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_page","description":"Read a Sites v2 page, published version and latest immutable draft.","params":{"pageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_shared_sections","description":"List site-level shared sections and independent SitePage consumers.","params":{"landingPageId":{"type":"string","required":true},"version":{"type":"string","enum":["latest","published"],"optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_shared_section","description":"Read one site-level shared section and its consumers.","params":{"landingPageId":{"type":"string","required":true},"key":{"type":"string","required":true},"version":{"type":"string","enum":["latest","published"],"optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_page_versions","description":"List immutable Sites v2 page versions.","params":{"pageId":{"type":"string","required":true},"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"site_page_preview_url","description":"Create a public, signed, noindex preview URL for a Sites v2 page version. It needs no session and fails closed when the signature is missing, expired, or invalid. Preview navigation keeps signed URLs for known draft pages.","params":{"pageId":{"type":"string","required":true},"versionId":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_redirects","description":"List redirects with HTTP code, total uses, last use, and linked issue.","params":{"pageId":{"type":"string","optional":true,"description":"LandingPage id"},"q":{"type":"string","optional":true},"page":{"type":"number","optional":true},"pageSize":{"type":"number","optional":true},"sort":{"type":"string","optional":true},"order":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_health_summary","description":"Operational summary of actionable 404s, critical errors, form failures, observations, redirects, and filtered scanner noise.","params":{"pageId":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_sitemap_summary","description":"Count indexable URLs in the active Sites release sitemap, its shards, lastmod entries and hreflang families. Derived from the published release routes; publicFetchVerified indicates whether the public XML was fetched.","params":{"landingPageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_issues","description":"List durable site issues with filters, sorting, and pagination. Do not propose a redirect from one isolated 404 or automated scanner traffic. Prioritize broken internal links, confirmed browsers, and search crawlers.","params":{"pageId":{"type":"string","optional":true},"status":{"type":"string","optional":true},"severity":{"type":"string","optional":true},"outcome":{"type":"string","optional":true},"statusCode":{"type":"number","optional":true},"hostname":{"type":"string","optional":true},"source":{"type":"string","optional":true,"enum":["confirmed_browser","person","search_engine","internal","bot","unknown"]},"q":{"type":"string","optional":true},"from":{"type":"string","optional":true},"to":{"type":"string","optional":true},"page":{"type":"number","optional":true},"pageSize":{"type":"number","optional":true},"sort":{"type":"string","optional":true},"order":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_issue","description":"Read one issue and its recent hourly evolution without personal data, query strings, stack traces, or form bodies.","params":{"issueId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_request_log","description":"List privacy-safe hourly buckets for errors, rate limits, and redirect uses.","params":{"pageId":{"type":"string","optional":true},"outcome":{"type":"string","optional":true},"statusCode":{"type":"number","optional":true},"hostname":{"type":"string","optional":true},"q":{"type":"string","optional":true},"from":{"type":"string","optional":true},"to":{"type":"string","optional":true},"page":{"type":"number","optional":true},"pageSize":{"type":"number","optional":true},"sort":{"type":"string","optional":true},"order":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_noise_summary","description":"Summarize filtered automated probes by site and family. This is security telemetry, not actionable redirect work.","params":{"pageId":{"type":"string","optional":true},"hostname":{"type":"string","optional":true},"q":{"type":"string","optional":true},"from":{"type":"string","optional":true},"to":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List landing mutations of this project.","params":{"status":{"type":"string","optional":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one landing mutation by id.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_contract","description":"Read the provider-neutral Sites v2 contract and enforced limits. Pass schemas:true to include the full JSON Schemas for page content, site configuration and draft manifests.","params":{"schemas":{"type":"boolean","optional":true,"description":"Include full JSON Schemas (landingContent, siteConfiguration, sitePageDraft, siteDraftManifest)."}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_routes","description":"List the unified scoped route registry, resolved from the active immutable release when present.","params":{"landingPageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_route","description":"Read one scoped public route.","params":{"landingPageId":{"type":"string","required":true},"path":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"validate_site_routes","description":"Validate collisions, orphaned routes and redirects.","params":{"landingPageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_route_conflicts","description":"List structured route conflicts.","params":{"landingPageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_collections","description":"List scoped structured collections.","params":{"landingPageId":{"type":"string","required":true},"status":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_collection","description":"Read collection configuration and immutable pointers.","params":{"landingPageId":{"type":"string","required":true},"collectionId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_collection_schema","description":"Read a draft or published collection schema.","params":{"landingPageId":{"type":"string","required":true},"collectionId":{"type":"string","required":true},"version":{"type":"string","enum":["draft","published"],"optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_collection_template","description":"Read the closed declarative index or detail template.","params":{"landingPageId":{"type":"string","required":true},"collectionId":{"type":"string","required":true},"kind":{"type":"string","enum":["index","detail"],"required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_collection_entries","description":"List localized collection entries with bounded pagination.","params":{"landingPageId":{"type":"string","required":true},"collectionId":{"type":"string","required":true},"locale":{"type":"string","optional":true},"status":{"type":"string","optional":true},"page":{"type":"number","optional":true},"pageSize":{"type":"number","maximum":100,"optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_collection_entry","description":"Read one entry and its immutable versions.","params":{"landingPageId":{"type":"string","required":true},"entryId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_artifacts","description":"List scoped versioned public artifacts.","params":{"landingPageId":{"type":"string","required":true},"status":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_artifact","description":"Read one artifact including its body and metadata.","params":{"landingPageId":{"type":"string","required":true},"artifactId":{"type":"string","required":true},"versionId":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_artifact_versions","description":"List artifact history without bodies.","params":{"landingPageId":{"type":"string","required":true},"artifactId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_releases","description":"List bounded, paginated summaries of immutable whole-site releases. Use get_release for the complete manifest, items, routes and validation.","params":{"landingPageId":{"type":"string","required":true},"status":{"type":"string","optional":true},"limit":{"type":"number","default":20,"maximum":100,"optional":true},"cursor":{"type":"string","optional":true,"description":"Release id returned as nextCursor by the previous page."}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_release","description":"Read a release, frozen routes, items and latest validation.","params":{"landingPageId":{"type":"string","required":true},"releaseId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"site_release_preview_url","description":"Create a signed noindex whole-release preview URL.","params":{"landingPageId":{"type":"string","required":true},"releaseId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_release_validation","description":"Read structured release validation and issues.","params":{"landingPageId":{"type":"string","required":true},"validationId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"compare_route_manifest","description":"Compare an expected neutral route manifest to actual frozen routes.","params":{"landingPageId":{"type":"string","required":true},"manifest":{"type":"array","required":true},"strict":{"type":"boolean","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_release_issues","description":"List scoped release validation issues.","params":{"landingPageId":{"type":"string","required":true},"validationId":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_release_issue","description":"Read one scoped release issue.","params":{"landingPageId":{"type":"string","required":true},"issueId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"export_site_release","description":"Get the authenticated URL for the neutral release ZIP.","params":{"landingPageId":{"type":"string","required":true},"releaseId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_batches","description":"List persisted batch progress.","params":{"landingPageId":{"type":"string","required":true},"status":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_site_batch","description":"Read batch items, results and redacted failures.","params":{"landingPageId":{"type":"string","required":true},"batchId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_dependencies","description":"List scoped immutable-version dependencies.","params":{"landingPageId":{"type":"string","required":true},"targetType":{"type":"string","optional":true},"targetId":{"type":"string","optional":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_site_media","description":"List project media linked to this site.","params":{"landingPageId":{"type":"string","required":true}},"x-mcp":{"channel":"landing_pages","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/landing-pages/releases/{releaseId}/export":{"get":{"summary":"Export an immutable Sites v2 release","description":"Download a provider-neutral ZIP containing the frozen manifest, versioned JSON resources, artifacts and media references. The projectId and landingPageId must match the authenticated project and release.","tags":["LandingPages"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"releaseId","in":"path","required":true,"schema":{"type":"string"}},{"name":"projectId","in":"query","required":true,"schema":{"type":"string"}},{"name":"landingPageId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Neutral release ZIP","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Invalid token"},"403":{"description":"Project scope violation"},"404":{"description":"Release not found"}}}},"/api/landing-pages/agent-mutate":{"post":{"summary":"Native landing pages mutations","description":"Create and iterate landing pages as block-based JSON documents. Drafts are auto-executed; publishing, rollback, archive, and brand theme changes queue for human approval with a rendered preview. Content is validated against the block schema before persisting.","tags":["LandingPages"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["resource","operation"],"properties":{"projectId":{"type":"string","description":"Must match the project authorized by the token."},"landingPageId":{"type":"string","description":"Site container scope inherited by items when omitted there."},"resource":{"type":"string","enum":["landing_page","site_page","site_shared_section","site_redirect","site_issue","site_collection","collection_entry","site_artifact","site_release","site_dependency","site_media","landing_theme","landing_variant","landing_experiment","landing_domain"]},"operation":{"type":"string","description":"landing_page: create/update_draft/publish/rollback/enable_maintenance/disable_maintenance/archive/restore. Permanent site deletion is human-admin-only and is not exposed here. site_page: create/update_draft/publish/rollback/change_path/archive. site_shared_section: create/update/archive. site_redirect: create/update/remove. site_issue: ignore/resolve/reopen. landing_theme: update. landing_variant: create/update/archive. landing_experiment: create/start/stop/declare_winner. landing_domain zero-downtime flow: add, verify_ownership (verify alias), prepare, arm, check_dns, activate, rollback, disarm, set_primary, remove."},"data":{"type":"array","maxItems":200,"description":"Array of payloads. For domains, verify ownership before prepare; arm with approval immediately before the DNS cut; check_dns validates HTTP, TLS and signed routing; activate finalizes canonical. rollback keeps a warm fallback until DNS is restored and disarm is safe. Site content follows the list_block_types guide."},"items":{"type":"array","maxItems":200,"description":"Canonical mutation items. data remains a compatible alias."},"idempotencyKey":{"type":"string","description":"Required when DigitalPublic classifies the request as background work. Reusing it with different parameters returns IDEMPOTENCY_CONFLICT."},"atomic":{"type":"boolean","default":true},"agent_note":{"type":"string","description":"Recommended explanation for the human approver."},"validate_only":{"type":"boolean","default":false,"description":"Validate slug/content (including image ownership) or dry-run a complete site_redirect.create manifest without persisting."}}}}}},"responses":{"200":{"description":"Executed immediately or queued for approval","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"202":{"description":"Accepted as a persistent background operation","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-resources":{"site_draft":{"resource":"site_draft","operations":["prepare"],"description":"Unified Sites authoring. Read get_site_contract and get_site_workspace first. Draft preparation is atomic and idempotent; translations cover every active locale. Quality runs inspect a frozen release without publishing.","operationParams":{"prepare":{"data":{"type":"array","items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200},"baseConfigurationVersion":{"type":"integer","minimum":0,"maximum":9007199254740991},"configuration":{"description":"Site configuration document, validated server-side. Full JSON Schema: get_site_contract with schemas:true (schemas.siteConfiguration).","type":"object","properties":{},"additionalProperties":{}},"pages":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"pageId":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":120},"path":{"type":"string","maxLength":512},"locale":{"type":"string","pattern":"^[a-z]{2}(?:-[A-Za-z]{2})?$"},"translationKey":{"type":"string","minLength":1,"maxLength":120},"baseVersionNumber":{"type":"integer","minimum":0,"maximum":9007199254740991},"content":{"type":"object","properties":{},"additionalProperties":{},"description":"Landing content document (schemaVersion 1|2), validated server-side. Full JSON Schema: get_site_contract with schemas:true (schemas.landingContent); block catalogue and guide: list_block_types."}},"required":["name","path","locale","translationKey","baseVersionNumber","content"],"additionalProperties":false}}},"required":["landingPageId","idempotencyKey","baseConfigurationVersion"],"additionalProperties":false},"required":true},"validate_only":{"type":"boolean","default":false}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"none","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_page_group":{"resource":"site_page_group","operations":["upsert_draft"],"description":"Unified Sites authoring. Read get_site_contract and get_site_workspace first. Draft preparation is atomic and idempotent; translations cover every active locale. Quality runs inspect a frozen release without publishing.","operationParams":{"upsert_draft":{"data":{"type":"array","items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200},"baseConfigurationVersion":{"type":"integer","minimum":0,"maximum":9007199254740991},"configuration":{"description":"Site configuration document, validated server-side. Full JSON Schema: get_site_contract with schemas:true (schemas.siteConfiguration).","type":"object","properties":{},"additionalProperties":{}},"pages":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"pageId":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":120},"path":{"type":"string","maxLength":512},"locale":{"type":"string","pattern":"^[a-z]{2}(?:-[A-Za-z]{2})?$"},"translationKey":{"type":"string","minLength":1,"maxLength":120},"baseVersionNumber":{"type":"integer","minimum":0,"maximum":9007199254740991},"content":{"type":"object","properties":{},"additionalProperties":{},"description":"Landing content document (schemaVersion 1|2), validated server-side. Full JSON Schema: get_site_contract with schemas:true (schemas.landingContent); block catalogue and guide: list_block_types."}},"required":["name","path","locale","translationKey","baseVersionNumber","content"],"additionalProperties":false}}},"required":["landingPageId","idempotencyKey","baseConfigurationVersion"],"additionalProperties":false},"required":true},"validate_only":{"type":"boolean","default":false}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"none","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_change":{"resource":"site_change","operations":["apply_draft"],"description":"Unified Sites authoring. Read get_site_contract and get_site_workspace first. Draft preparation is atomic and idempotent; translations cover every active locale. Quality runs inspect a frozen release without publishing.","operationParams":{"apply_draft":{"data":{"type":"array","items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200},"baseConfigurationVersion":{"type":"integer","minimum":0,"maximum":9007199254740991},"configuration":{"description":"Site configuration document, validated server-side. Full JSON Schema: get_site_contract with schemas:true (schemas.siteConfiguration).","type":"object","properties":{},"additionalProperties":{}},"pages":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"pageId":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":120},"path":{"type":"string","maxLength":512},"locale":{"type":"string","pattern":"^[a-z]{2}(?:-[A-Za-z]{2})?$"},"translationKey":{"type":"string","minLength":1,"maxLength":120},"baseVersionNumber":{"type":"integer","minimum":0,"maximum":9007199254740991},"content":{"type":"object","properties":{},"additionalProperties":{},"description":"Landing content document (schemaVersion 1|2), validated server-side. Full JSON Schema: get_site_contract with schemas:true (schemas.landingContent); block catalogue and guide: list_block_types."}},"required":["name","path","locale","translationKey","baseVersionNumber","content"],"additionalProperties":false}}},"required":["landingPageId","idempotencyKey","baseConfigurationVersion"],"additionalProperties":false},"required":true},"validate_only":{"type":"boolean","default":false}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"none","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_quality":{"resource":"site_quality","operations":["run"],"description":"Unified Sites authoring. Read get_site_contract and get_site_workspace first. Draft preparation is atomic and idempotent; translations cover every active locale. Quality runs inspect a frozen release without publishing.","operationParams":{"run":{"data":{"type":"array","items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"releaseId":{"type":"string","minLength":1,"maxLength":200}},"required":["landingPageId","releaseId"],"additionalProperties":false},"required":true},"validate_only":{"type":"boolean","default":false},"idempotencyKey":{"type":"string","required":true}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"none","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"landing_page":{"operations":["create","update_draft","publish","rollback","archive"],"description":"Native landing page lifecycle. create/update_draft are auto (drafts are invisible to visitors); publish/rollback/archive are approval_required with a signed preview attached for the reviewer.","operationParams":{"create":{"idempotencyKey":{"type":"string","optional":true,"description":"Stable top-level key required when a draft batch is classified as background work. Reuse it unchanged when retrying the same batch."},"data":{"type":"array","required":true,"items":{"type":"object","properties":{"pageId":{"type":"string","description":"Requerido para update_draft."},"name":{"type":"string","description":"Requerido para create."},"slug":{"type":"string","description":"Requerido para create."},"content":{"type":"object","additionalProperties":true,"description":"Documento JSON de contenido (schemaVersion 1|2) validado por la plataforma. Esquema completo: get_site_contract con schemas:true (schemas.landingContent). Bloques disponibles y guía: list_block_types."}}}}},"update_draft":{"idempotencyKey":{"type":"string","optional":true,"description":"Stable top-level key required when a draft batch is classified as background work. Reuse it unchanged when retrying the same batch."},"data":{"type":"array","required":true,"items":{"type":"object","properties":{"pageId":{"type":"string","description":"Requerido para update_draft."},"name":{"type":"string","description":"Requerido para create."},"slug":{"type":"string","description":"Requerido para create."},"content":{"type":"object","additionalProperties":true,"description":"Documento JSON de contenido (schemaVersion 1|2) validado por la plataforma. Esquema completo: get_site_contract con schemas:true (schemas.landingContent). Bloques disponibles y guía: list_block_types."}}}}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"landing_theme":{"operations":["update"],"description":"Project brand design tokens applied to all landings. logoPresentation accepts widthPx (48-480) and mobileWidthPx (40-240) for the approved header logo, with responsive inheritance and contain rendering. approval_required (affects published pages).","operationParams":{"update":{"tokens":{"type":"object","required":true,"description":"Complete theme tokens from get_theme/list_block_types, including optional logoFileId and logoPresentation: { widthPx?, mobileWidthPx? }."}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"landing_variant":{"operations":["create","update","archive"],"description":"A/B variants pointing to immutable versions of the same page. All auto: variants are invisible to visitors until an experiment starts.","x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"landing_experiment":{"operations":["create","start","stop","declare_winner"],"description":"Server-side A/B experiments with deterministic sticky assignment (hash of visitor+experiment vs weights). create/stop auto; start and declare_winner approval_required. Traffic split is immutable while running (changing it would re-assign visitors); stop and create a new experiment instead.","x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"landing_domain":{"operations":["add","verify","verify_ownership","prepare","arm","check_dns","activate","rollback","disarm","set_primary","remove"],"description":"Recoverable zero-downtime custom-domain cutover through Cloudflare and the nginx catch-all. add returns ownership TXT and CNAME target without changing canonical. verify/verify_ownership checks TXT only; prepare validates the published site, current canonical and critical routes. arm is approval_required and enables a warm route before DNS changes, preventing a DigitalPublic 404 on the first request. check_dns validates HTTP-to-HTTPS, public TLS and the signed endpoint; activate is approval_required and atomically finalizes active/canonical state. rollback restores the previous canonical but keeps the warm fallback until DNS is restored; disarm refuses while DNS still reaches DigitalPublic. Read with get_domain_cutover. Unowned custom domains never serve content.","x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_page":{"operations":["create","update_draft","publish","rollback","change_path","archive"],"description":"Sites v2 pages on same-domain routes. create/update_draft are auto; publish/rollback/change_path/archive require human approval. Path changes create a permanent redirect. A/B remains home-only.","operationParams":{"create":{"data":{"type":"array","required":true,"items":{"type":"object","properties":{"pageId":{"type":"string","description":"Requerido para update_draft."},"landingPageId":{"type":"string","description":"Requerido para create."},"path":{"type":"string","description":"Requerido para create."},"name":{"type":"string","description":"Requerido para create."},"kind":{"type":"string","description":"Tipo editorial de la página."},"locale":{"type":"string"},"translationKey":{"type":"string"},"baseVersionNumber":{"type":"integer","minimum":0},"content":{"type":"object","additionalProperties":true,"description":"Documento JSON de contenido (schemaVersion 1|2) validado por la plataforma. Esquema completo: get_site_contract con schemas:true (schemas.landingContent). Bloques disponibles y guía: list_block_types."}}}}},"update_draft":{"data":{"type":"array","required":true,"items":{"type":"object","properties":{"pageId":{"type":"string","description":"Requerido para update_draft."},"landingPageId":{"type":"string","description":"Requerido para create."},"path":{"type":"string","description":"Requerido para create."},"name":{"type":"string","description":"Requerido para create."},"kind":{"type":"string","description":"Tipo editorial de la página."},"locale":{"type":"string"},"translationKey":{"type":"string"},"baseVersionNumber":{"type":"integer","minimum":0},"content":{"type":"object","additionalProperties":true,"description":"Documento JSON de contenido (schemaVersion 1|2) validado por la plataforma. Esquema completo: get_site_contract con schemas:true (schemas.landingContent). Bloques disponibles y guía: list_block_types."}}}}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_shared_section":{"operations":["create","update","archive"],"description":"Site-level reusable sections inherited by home and independent SitePages. Writes create a new immutable home draft version; publish landing_page to promote the change and invalidate all public site-page caches.","operationParams":{"create":{"landingPageId":{"type":"string","required":true},"key":{"type":"string","required":true},"section":{"type":"object","required":true}},"update":{"landingPageId":{"type":"string","required":true},"key":{"type":"string","required":true},"section":{"type":"object","required":true},"baseVersionNumber":{"type":"number","optional":true}},"archive":{"landingPageId":{"type":"string","required":true},"key":{"type":"string","required":true},"baseVersionNumber":{"type":"number","optional":true}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_redirect":{"operations":["create","update","remove"],"description":"Explicit public redirects for removed URLs and migrations. Sources accept normalized nested internal paths plus final .xml/.txt files. Targets may be published internal routes or governed external HTTPS URLs with externalApproved:true; HTTP, credentials, ports, query/fragment input, traversal, controls, reserved-route collisions, chains and cycles are rejected. create is an idempotent 1-200 item manifest; validate_only is its no-write dry run and multi-item manifests require permanent 308 redirects (SEO-equivalent to 301). Safe request queries are preserved at runtime. All writes require human approval. Creating from an issue accepts issueId and marks it redirected after approval.","operationParams":{"create":{"data":{"type":"array","required":true,"minItems":1,"maxItems":200,"description":"Idempotent redirect manifest. A repeated identical entry returns unchanged. Multi-item manifests must be permanent and are fully preflighted before any write.","items":{"type":"object","required":["pageId","fromPath","toPath"],"properties":{"pageId":{"type":"string","description":"LandingPage/Sites v2 id."},"fromPath":{"type":"string","description":"Internal source, including nested paths or final .xml/.txt files. Root, schemes, hosts, query, fragments, percent escapes, backslashes, traversal, controls and reserved routes are rejected."},"toPath":{"type":"string","description":"Published internal destination, or an absolute external HTTPS URL when externalApproved is true. External URLs cannot contain credentials, ports, query strings or fragments."},"externalApproved":{"type":"boolean","default":false,"description":"Explicit acknowledgement for an external HTTPS destination. The mutation still requires the normal human write approval."},"permanent":{"type":"boolean","default":true,"description":"308 when true. Multi-item migration manifests require true."},"issueId":{"type":"string","description":"Optional matching 404 SiteIssue id."}}}},"validate_only":{"type":"boolean","default":false,"description":"Dry run. Returns normalized items and create/unchanged actions without persisting."}},"update":{"data":{"type":"array","required":true,"items":{"type":"object","required":["redirectId"],"properties":{"redirectId":{"type":"string"},"fromPath":{"type":"string","description":"Optional nested internal source."},"toPath":{"type":"string","description":"Optional published internal target or absolute external HTTPS URL."},"externalApproved":{"type":"boolean","default":false,"description":"Required when toPath is external; normal write approval still applies."},"permanent":{"type":"boolean"}}}}},"remove":{"data":{"type":"array","required":true,"items":{"type":"object","properties":{"redirectId":{"type":"string"},"pageId":{"type":"string"},"fromPath":{"type":"string"}}}}}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_issue":{"operations":["ignore","resolve","reopen"],"description":"Operational issue lifecycle. ignore and resolve require human approval; reopen is automatic. Keep isolated 404s and scanner noise under observation. Prioritize broken internal links, repeated human requests and search crawlers.","x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_collection":{"operations":["create","update_schema","update_template","archive"],"description":"Provider-neutral structured collections with immutable JSON Schema and closed declarative templates.","x-operation-mcp":{"create":{"effect":"write","requiredScope":"write","approval":"none"},"update_schema":{"effect":"write","requiredScope":"write","approval":"human"},"update_template":{"effect":"write","requiredScope":"write","approval":"none"},"archive":{"effect":"write","requiredScope":"write","approval":"human"}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"collection_entry":{"operations":["upsert_draft","batch_upsert_draft","publish","rollback","archive","set_translation_group"],"description":"Localized, externally idempotent structured entries. Draft writes are automatic; visible changes require approval.","operationParams":{"upsert_draft":{"idempotencyKey":{"type":"string","optional":true,"maxLength":200,"description":"Stable key required when the draft is executed as background work. It is forwarded unchanged to the landing mutation endpoint; reuse with different data is rejected."}},"batch_upsert_draft":{"idempotencyKey":{"type":"string","optional":true,"maxLength":200,"description":"Stable key required when the batch is executed as background work. It is forwarded unchanged to the landing mutation endpoint; reuse with different data is rejected."}}},"x-operation-mcp":{"upsert_draft":{"effect":"write","requiredScope":"write","approval":"none"},"batch_upsert_draft":{"effect":"write","requiredScope":"write","approval":"none"},"publish":{"effect":"write","requiredScope":"write","approval":"human"},"rollback":{"effect":"write","requiredScope":"write","approval":"human"},"archive":{"effect":"write","requiredScope":"write","approval":"human"},"set_translation_group":{"effect":"write","requiredScope":"write","approval":"human"}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_artifact":{"operations":["upsert_draft","publish","rollback","archive"],"description":"Versioned TXT, JSON, XML, RSS and Atom artifacts. HTML, JavaScript and SVG are forbidden.","x-operation-mcp":{"upsert_draft":{"effect":"write","requiredScope":"write","approval":"none"},"publish":{"effect":"write","requiredScope":"write","approval":"human"},"rollback":{"effect":"write","requiredScope":"write","approval":"human"},"archive":{"effect":"write","requiredScope":"write","approval":"human"}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_release":{"operationParams":{"create":{"data":{"type":"array","required":true,"items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"configurationVersionId":{"type":"string","minLength":1,"maxLength":200},"items":{"default":[],"maxItems":1000,"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["landing_page","site_page","blog_post","collection","collection_schema","collection_template","collection_entry","artifact","redirect"]},"resourceId":{"type":"string","minLength":1,"maxLength":200},"versionId":{"type":"string","minLength":1,"maxLength":200}},"required":["resourceType","resourceId","versionId"]}},"routes":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":512},"kind":{"type":"string","enum":["home","localized_home","site_page","legal","blog_index","blog_tag","blog_post","collection_index","collection_entry","artifact","redirect","internal"]},"resourceId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"versionId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"locale":{"anyOf":[{"type":"string","pattern":"^[a-z]{2}(?:-[A-Za-z]{2})?$"},{"type":"null"}]},"translationKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"contentType":{"type":"string"},"statusCode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"targetPath":{"anyOf":[{"type":"string"},{"type":"null"}]},"canonical":{"anyOf":[{"type":"string"},{"type":"null"}]},"indexable":{"type":"boolean"}},"required":["path","kind"]}}},"required":["landingPageId"]}},"validate_only":{"type":"boolean","default":false}},"validate":{"data":{"type":"array","required":true,"items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"releaseId":{"type":"string","minLength":1,"maxLength":200},"strict":{"type":"boolean"},"manifest":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]}}},"required":["landingPageId","releaseId"]}},"validate_only":{"type":"boolean","default":false}},"publish":{"data":{"type":"array","required":true,"items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"releaseId":{"type":"string","minLength":1,"maxLength":200}},"required":["landingPageId","releaseId"],"additionalProperties":false}},"validate_only":{"type":"boolean","default":false}},"rollback":{"data":{"type":"array","required":true,"items":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"landingPageId":{"type":"string","minLength":1,"maxLength":200},"releaseId":{"type":"string","minLength":1,"maxLength":200}},"required":["landingPageId","releaseId"],"additionalProperties":false}},"validate_only":{"type":"boolean","default":false}}},"operations":["create","validate","publish","rollback"],"description":"Immutable whole-site manifests. Publication moves activeReleaseId and compatible pointers in one PostgreSQL transaction.","x-operation-mcp":{"create":{"effect":"write","requiredScope":"write","approval":"none"},"validate":{"effect":"write","requiredScope":"write","approval":"none"},"publish":{"effect":"write","requiredScope":"write","approval":"human"},"rollback":{"effect":"write","requiredScope":"write","approval":"human"}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_dependency":{"operations":["set"],"description":"Scoped dependency edges used to prevent unsafe archive operations.","x-operation-mcp":{"set":{"effect":"write","requiredScope":"write","approval":"none"}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},"site_media":{"operations":["update_metadata"],"description":"Provider-neutral localized alt, credit, license, dimensions and variant metadata for an existing project media file.","x-operation-mcp":{"update_metadata":{"effect":"write","requiredScope":"write","approval":"none"}},"x-mcp":{"channel":"landing_pages","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}},"x-examples":[{"description":"Dry-run an idempotent migration redirect manifest","body":{"resource":"site_redirect","operation":"create","validate_only":true,"data":[{"pageId":"PAGE_ID","fromPath":"/article-old/","toPath":"/blog/article-old"},{"pageId":"PAGE_ID","fromPath":"/category/white-label/","toPath":"/blog/tag/white-label"},{"pageId":"PAGE_ID","fromPath":"/feed/","toPath":"/blog/feed.xml"}]}},{"description":"Validate a new landing draft before creating it","body":{"resource":"landing_page","operation":"create","validate_only":true,"data":[{"name":"Oferta Verano","slug":"oferta-verano","content":{"schemaVersion":1,"meta":{"title":"Oferta de verano"},"blocks":[{"id":"hero","type":"hero","headline":"Ahorra un 20% este verano","ctas":[{"label":"Quiero mi descuento","href":"#form","style":"primary"}]},{"id":"form","type":"leadForm","fields":[{"key":"email","required":true}],"consentText":"Acepto la política de privacidad y el tratamiento de mis datos.","privacyPolicyPath":"privacy","privacyLinkText":"política de privacidad"},{"id":"footer","type":"footer","legalLinks":[{"label":"Privacidad","href":"/privacy"}]}],"auxPages":[{"path":"privacy","title":"Política de privacidad","sections":[{"text":"Contenido legal."}]}]}}]}},{"description":"Publish the latest draft (queues for human approval with preview)","body":{"resource":"landing_page","operation":"publish","data":[{"pageId":"PAGE_ID"}],"agent_note":"Landing revisada con preview_url; lista para publicar en su subdominio."}}]}},"/api/platform-operations/agent-query":{"post":{"summary":"Persistent platform operations","description":"Read project-scoped background operations created automatically by domain tools. Agents cannot submit arbitrary payloads or force an execution class.","x-tools":[{"name":"get_platform_operation","description":"Read one persistent operation, its progress, item results, attempts, and redacted errors.","params":{"operationId":{"type":"string","required":true}},"x-mcp":{"channel":"platform_operations","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_platform_operations","description":"List recent persistent operations for the authorized project.","params":{"status":{"type":"string","optional":true,"enum":["QUEUED","RUNNING","WAITING_EXTERNAL","RETRYING","SUCCEEDED","PARTIALLY_SUCCEEDED","FAILED","RECONCILIATION_REQUIRED","CANCELLED"]},"resourceClass":{"type":"string","optional":true,"enum":["LIGHT","STANDARD","HEAVY"]},"capabilityKey":{"type":"string","optional":true},"sourceType":{"type":"string","optional":true},"sourceId":{"type":"string","optional":true},"createdFrom":{"type":"string","format":"date-time","optional":true},"createdTo":{"type":"string","format":"date-time","optional":true},"limit":{"type":"integer","optional":true,"default":20,"maximum":100},"cursor":{"type":"string","optional":true}},"x-mcp":{"channel":"platform_operations","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"responses":{"200":{"description":"Project-scoped operation status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}}}},"/api/blog/agent-query":{"post":{"summary":"Native blog data","description":"Read the native multi-host blog: Markdown articles with immutable versions, optional visible FAQ with FAQPage JSON-LD, tags and signed previews. Routes use the published Sites chrome.blog.basePath and taxonomySegment configuration (defaults: blog and tag).","tags":["Blog"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_posts","description":"List blog posts with status, hostname, version numbers and translationGroupId for equivalent localized articles. Title and tags come from the published version for published posts and from the latest version for drafts.","params":{"status":{"type":"string","enum":["draft","published","archived"],"optional":true},"tag":{"type":"string","optional":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_post","description":"Full detail of one post: latest and published immutable versions with stable SHA-256 versionHash, public URL and translationGroupId.","params":{"id":{"type":"string","optional":true},"slug":{"type":"string","optional":true}},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_versions","description":"Immutable version history of a post with stable SHA-256 versionHash values.","params":{"postId":{"type":"string","required":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_meta_schema","description":"Article format guide: meta fields and limits, visible FAQ + FAQPage parity, Markdown rules (GFM, no embedded HTML, creative:<fileId> images, allowed link schemes), publishing flow and SEO output. Call this before writing.","params":{},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_url","description":"Signed preview URL (7 days) of any version, including drafts. Review it before requesting publish.","params":{"postId":{"type":"string","required":true},"versionId":{"type":"string","optional":true}},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_tags","description":"Tags with published posts in a landing's blog, with counts.","params":{"pageId":{"type":"string","required":true}},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List blog mutations of this project.","params":{"status":{"type":"string","optional":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one blog mutation by id.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"blog","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-content-guide":{"schemaVersion":1,"document":"Cada artículo = { meta, bodyMarkdown }. meta: { title ≤180, slug ([a-z0-9-] ≤80; 'tag'/'feed'/'page' reservados), excerpt? ≤500 (recomendado: listados/SEO/feed), coverImageFileId? (opcional mientras sea borrador, obligatorio para publish/rollback; portada visible en detalle y listado), coverImageAlt? ≤300 (alt localizado; fallback: title), ogImageFileId? (default: cover), seo?: { title ≤70, description ≤180 }, locale (default 'es'), robots 'index'|'noindex', tags: [slug-case, ≤10], publishedAt? (ISO), authorName? ≤120, faq?: [{ question, answer }] }.","bodyMarkdown":{"format":"Markdown con GFM (tablas, listas de tareas, tachado). El HTML embebido NO se renderiza (queda inerte). No empieces con H1 (#): el título lo pone la plantilla desde meta.title; estructura con H2 (##) y H3 (###).","images":"Imágenes del proyecto con el esquema creative: ![texto alternativo](creative:<fileId>). Sube ficheros con POST /api/creatives/upload o genera con POST /api/creatives/generate (IA, gpt-image-2) y usa el fileId devuelto. Las URLs de imagen externas se eliminan en el render.","links":"Enlaces permitidos: https://, mailto:, tel:, anclas (#seccion) y rutas internas bajo el basePath configurado del blog (por defecto /blog/otro-slug). Todo lo demás se elimina.","maxBytes":204800},"faq":{"format":"meta.faq es opcional y admite de 1 a 20 elementos. Cada question es única, no vacía y tiene hasta 200 caracteres; cada answer es Markdown no vacío de hasta 4000 caracteres.","safety":"Las respuestas visibles solo admiten párrafos, énfasis, enlaces, listas y código. Se eliminan HTML, imágenes y URLs no permitidas; para enlaces aplica la misma lista segura que bodyMarkdown.","seo":"Si faq es válida, las mismas preguntas y respuestas se muestran al final del artículo y se emite JSON-LD FAQPage equivalente. Si falta o no es válida, no se emite FAQPage.","example":[{"question":"¿Cuánto tarda el servicio?","answer":"El plazo habitual es de **3 a 5 días laborables**. Consulta [el proceso](/blog/proceso)."},{"question":"¿Incluye soporte?","answer":"Sí, incluye soporte por correo durante 30 días."}]},"publishing":"El blog se sirve en el host de la landing bajo chrome.blog.basePath (default blog): /<basePath>, /<basePath>/<slug>, /<basePath>/<taxonomySegment>/<tag> y /<basePath>/feed.xml. taxonomySegment usa tag por defecto. createRedirects controla si un cambio de namespace conserva redirecciones; false no crea ninguna. Solo hay blog si la landing está publicada. create/update_draft son inmediatos (borradores invisibles); publish/rollback/archive requieren aprobación humana. Adjunta agent_note con el motivo y revisa la preview con preview_url antes de pedir publish.","seo":"Cada artículo emite metadata completa (canonical en el dominio primario, OG type article) y JSON-LD Article + BreadcrumbList, más FAQPage cuando hay FAQ visible válida. La configuración localizada define el índice con chrome.blog.title/description/basePath/taxonomySegment/createRedirects y cada taxonomía con chrome.blog.tags [{ slug, title?, description?, translationKey? }]. Compartir translationKey entre tags localizados genera hreflang, x-default, selector y alternates del sitemap."}}},"/api/blog/agent-mutate":{"post":{"summary":"Native blog mutations","description":"Create and iterate blog articles as Markdown + validated meta JSON, including optional visible FAQ with FAQPage parity. Small drafts can execute immediately. Costly batches run as persistent platform operations. Publish, rollback and archive require approval and run in the background when that channel is active.","tags":["Blog"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["resource","operation","data"],"properties":{"resource":{"type":"string","enum":["blog_post"]},"operation":{"type":"string","description":"blog_post: create, update_draft, publish, rollback, archive, set_translation_group or clear_translation_group. Translation grouping is approval_required and drives reciprocal hreflang, x-default, sitemap alternates and post-level language navigation."},"data":{"type":"array","description":"Array of payloads. blog_post.create: { pageId, meta, bodyMarkdown }. update_draft: { postId, meta, bodyMarkdown, baseVersionNumber? }. publish/rollback: { postId, versionId? }. archive: { postId }. set_translation_group: { postIds: [at least two posts on distinct published locales], translationGroupId? }. clear_translation_group: { postIds }."},"idempotencyKey":{"type":"string","maxLength":200,"description":"Stable key required whenever the platform classifies the mutation as background work. Reusing it with the same payload returns the same operation; reusing it with different data is rejected."},"agent_note":{"type":"string","description":"Recommended explanation for the human approver."},"validate_only":{"type":"boolean","default":false,"description":"Validate the target landing plus meta/bodyMarkdown (including image ownership) without persisting. blog_post.create returns BLOG_LANDING_REQUIRED when the project has no landing associated with a blog."}}}}}},"responses":{"200":{"description":"Executed immediately or queued for approval","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"202":{"description":"Accepted as a persistent platform operation","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-resources":{"blog_post":{"operations":["create","update_draft","publish","rollback","archive","set_translation_group","clear_translation_group"],"description":"Native blog article lifecycle and multilingual equivalence. create/update_draft are auto; public lifecycle and translation-group changes are approval_required.","x-mcp":{"channel":"blog","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}},"x-content-guide":{"schemaVersion":1,"document":"Cada artículo = { meta, bodyMarkdown }. meta: { title ≤180, slug ([a-z0-9-] ≤80; 'tag'/'feed'/'page' reservados), excerpt? ≤500 (recomendado: listados/SEO/feed), coverImageFileId? (opcional mientras sea borrador, obligatorio para publish/rollback; portada visible en detalle y listado), coverImageAlt? ≤300 (alt localizado; fallback: title), ogImageFileId? (default: cover), seo?: { title ≤70, description ≤180 }, locale (default 'es'), robots 'index'|'noindex', tags: [slug-case, ≤10], publishedAt? (ISO), authorName? ≤120, faq?: [{ question, answer }] }.","bodyMarkdown":{"format":"Markdown con GFM (tablas, listas de tareas, tachado). El HTML embebido NO se renderiza (queda inerte). No empieces con H1 (#): el título lo pone la plantilla desde meta.title; estructura con H2 (##) y H3 (###).","images":"Imágenes del proyecto con el esquema creative: ![texto alternativo](creative:<fileId>). Sube ficheros con POST /api/creatives/upload o genera con POST /api/creatives/generate (IA, gpt-image-2) y usa el fileId devuelto. Las URLs de imagen externas se eliminan en el render.","links":"Enlaces permitidos: https://, mailto:, tel:, anclas (#seccion) y rutas internas bajo el basePath configurado del blog (por defecto /blog/otro-slug). Todo lo demás se elimina.","maxBytes":204800},"faq":{"format":"meta.faq es opcional y admite de 1 a 20 elementos. Cada question es única, no vacía y tiene hasta 200 caracteres; cada answer es Markdown no vacío de hasta 4000 caracteres.","safety":"Las respuestas visibles solo admiten párrafos, énfasis, enlaces, listas y código. Se eliminan HTML, imágenes y URLs no permitidas; para enlaces aplica la misma lista segura que bodyMarkdown.","seo":"Si faq es válida, las mismas preguntas y respuestas se muestran al final del artículo y se emite JSON-LD FAQPage equivalente. Si falta o no es válida, no se emite FAQPage.","example":[{"question":"¿Cuánto tarda el servicio?","answer":"El plazo habitual es de **3 a 5 días laborables**. Consulta [el proceso](/blog/proceso)."},{"question":"¿Incluye soporte?","answer":"Sí, incluye soporte por correo durante 30 días."}]},"publishing":"El blog se sirve en el host de la landing bajo chrome.blog.basePath (default blog): /<basePath>, /<basePath>/<slug>, /<basePath>/<taxonomySegment>/<tag> y /<basePath>/feed.xml. taxonomySegment usa tag por defecto. createRedirects controla si un cambio de namespace conserva redirecciones; false no crea ninguna. Solo hay blog si la landing está publicada. create/update_draft son inmediatos (borradores invisibles); publish/rollback/archive requieren aprobación humana. Adjunta agent_note con el motivo y revisa la preview con preview_url antes de pedir publish.","seo":"Cada artículo emite metadata completa (canonical en el dominio primario, OG type article) y JSON-LD Article + BreadcrumbList, más FAQPage cuando hay FAQ visible válida. La configuración localizada define el índice con chrome.blog.title/description/basePath/taxonomySegment/createRedirects y cada taxonomía con chrome.blog.tags [{ slug, title?, description?, translationKey? }]. Compartir translationKey entre tags localizados genera hreflang, x-default, selector y alternates del sitemap."},"x-examples":[{"description":"Validate a new article before creating it","body":{"resource":"blog_post","operation":"create","validate_only":true,"data":[{"pageId":"PAGE_ID","meta":{"title":"Domicilio fiscal y domicilio social: diferencias","slug":"domicilio-fiscal-y-social","excerpt":"Qué distingue el domicilio fiscal del social y por qué importa al constituir una empresa.","tags":["fiscalidad"],"publishedAt":"2026-07-21T09:00:00Z","authorName":"Equipo editorial","faq":[{"question":"¿Son siempre iguales?","answer":"No. Pueden coincidir, pero cumplen funciones distintas."}]},"bodyMarkdown":"## Qué es el domicilio fiscal\n\nEl domicilio fiscal es..."}]}},{"description":"Publish the latest draft (queues for human approval with preview)","body":{"resource":"blog_post","operation":"publish","data":[{"postId":"POST_ID"}],"agent_note":"Artículo revisado con preview_url; listo para publicar en /blog."}}]}},"/api/google-ads/agent-query":{"post":{"summary":"Google Ads data","description":"Query Google Ads metrics for the project's linked account.","tags":["Google Ads"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"get_account_summary","description":"Account-level metrics summary (impressions, clicks, cost, conversions, CTR, CPC, CPA) with comparable previousPeriod and delta (%) for executive reporting.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"],"description":"Named range; dateRange is accepted as an alias"},"from":{"type":"string","optional":true,"description":"Explicit start date YYYY-MM-DD (alias startDate); combine with to"},"to":{"type":"string","optional":true,"description":"Explicit end date YYYY-MM-DD (alias endDate)"},"daysBack":{"type":"number","optional":true,"description":"Last N complete days excluding today (1 = yesterday)"}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaigns","description":"List active campaigns with performance metrics.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"status":{"type":"string","default":"ENABLED"}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_keywords","description":"Keyword performance data.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ads","description":"Ad performance data with headlines and final destination URLs.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ad_policy_status","description":"Detailed Google Ads policy status and review history for ads in the linked account.","params":{"adGroupAdResourceName":{"type":"string","optional":true},"campaignId":{"type":"string","optional":true},"includeHistory":{"type":"boolean","default":true},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ad_assets_performance","description":"Asset-level Display and Demand Gen creative performance with previews, policy/performance labels, technical conversions, and non-duplicating CRM lead attribution.","params":{"dateRange":{"type":"string","default":"LAST_30_DAYS"},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignNameContains":{"type":"string","optional":true,"description":"Campaign name substring filter."},"campaignIds":{"type":"array","optional":true,"items":{"type":"string"}},"campaignTypes":{"type":"array","default":["DISPLAY","DEMAND_GEN"],"items":{"type":"string","enum":["DISPLAY","DEMAND_GEN"]}},"includePreviews":{"type":"boolean","default":true},"includeImagePreviews":{"type":"boolean","default":true,"description":"Alias used by creative reporting clients."},"includeRemoved":{"type":"boolean","default":false},"includePolicyStatus":{"type":"boolean","default":true},"includeCreatedAt":{"type":"boolean","default":true},"includeLeadAttribution":{"type":"boolean","default":false},"groupBy":{"type":"array","default":["campaign","ad","asset"],"items":{"type":"string"}}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_creative_asset_performance","description":"Alias of get_ad_assets_performance for creative selection and CRM attribution workflows.","params":{"dateRange":{"type":"string","default":"LAST_30_DAYS"},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignNameContains":{"type":"string","optional":true},"campaignTypes":{"type":"array","default":["DISPLAY","DEMAND_GEN"]},"includeImagePreviews":{"type":"boolean","default":true},"includeRemoved":{"type":"boolean","default":false},"includeLeadAttribution":{"type":"boolean","default":false}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_daily_performance","description":"Daily metrics breakdown.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_tools","description":"List all Google Ads query tools available for the project.","params":{},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"diagnose_campaign_structure","description":"Diagnose active campaign types, ad groups, keywords, ads, and search-term availability.","params":{},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign_chart","description":"Generate a visual chart URL or base64 image for impressions, clicks, conversions, or all metrics.","params":{"metric":{"type":"string","default":"all"},"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"format":{"type":"string","default":"url"}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_search_terms","description":"Search terms that triggered ads.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_display_ads","description":"Display creatives with type, image URLs, metrics, and view-through conversions.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_creative_performance","description":"Performance by creative across ad types.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_placements","description":"Managed placements with metrics for Display campaigns.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_placement_performance","description":"Placement performance filtered by minimum impressions.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"minImpressions":{"type":"number","default":100},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_view_through_conversions","description":"View-through conversion summary, trend, and campaign breakdown.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_brand_reach","description":"Brand reach, unique users, frequency, impressions, and cost per unique user.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_remarketing_lists","description":"Remarketing/user lists with size, type, membership duration, and performance.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_topic_targeting","description":"Display topic targeting with status and performance by topic.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_performance_max_assets","description":"Active or paused Performance Max asset_group_asset records grouped by type and asset group, with campaign-level brand guideline assets returned separately.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_asset_groups","description":"Performance Max asset groups for a campaign.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign_inputs","description":"Active or paused Performance Max text inputs from asset groups, with campaign-level business names returned separately.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_audience_signals","description":"Audience signals for a Performance Max campaign.","params":{"campaignId":{"type":"string","required":true},"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_custom_audiences","description":"Custom audiences assigned to a Performance Max campaign.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_performance_max_diagnosis","description":"Health diagnosis for a Performance Max campaign, distinguishing asset-group creatives from campaign-level brand guidelines.","params":{"campaignId":{"type":"string","required":true},"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_asset_performance_breakdown","description":"Individual asset_group_asset performance breakdown for a Performance Max campaign.","params":{"campaignId":{"type":"string","required":true},"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_experiments","description":"List Google Ads experiments with type, status, and promote_status, including v24.2 campaign mix and PMax experiment types when returned by Google Ads.","params":{"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_experiment_arms","description":"List Google Ads experiment arms by resource_name.","params":{"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_local_services_leads","description":"List Local Services Ads leads using stable GAQL fields.","params":{"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_local_services_verifications","description":"List Local Services verification artifacts, statuses, and rejection reasons available through GAQL.","params":{"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_local_services_pmax_surfaces","description":"Inspect PMax campaigns, asset groups, and asset group signals relevant to Local Services/PMax v24.2 fields.","params":{"campaignId":{"type":"string","optional":true},"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_recommendations","description":"ALL active Google Ads recommendations with resource_name, optimizationScore, optimizationScoreDiagnostic, and a persistent bounded completion gate. score_not_returned_by_google is finite; score_query_failed is retryable. ZERO_ACTIVE_PENDING_SCORE and SCORE_NOT_RETURNED_BY_GOOGLE allow workflow continuation without claiming 100%. Agents MUST NOT claim 100% unless completion.canClaim100Percent=true and MUST inform the user when completion.mustInformUser=true. Act via agent-mutate resource 'recommendations' (apply/dismiss); heterogeneous batches use partial failure and an individual fallback.","params":{},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ads_reports","description":"List reports with stable source, detailTool, fileTool and contentUnavailable metadata for historical files.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"submit_ads_analysis","description":"Submit a briefing/analysis for an existing Google Ads report. Requires write scope.","params":{"reportId":{"type":"string","required":true},"text":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"gaql_query","description":"Run a read-only GAQL SELECT query against Google Ads reporting.","params":{"gaql":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign_live","description":"Read a narrow, uncached structural campaign snapshot after mutations: status, serving status, bidding strategy, and budget.","params":{"campaignId":{"type":"string","optional":true},"resourceName":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign_conversion_goals","description":"Audit campaign conversion goals, inherited customer goals, and active conversion actions for a campaign.","params":{"campaignId":{"type":"string","optional":true},"resourceName":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_business_profile_link_status","description":"Check Google Business Profile location asset link status for a campaign/account.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check a Google Ads mutation. After approval/execution, returns executionResult plus resource_name/id for a single created resource, and resource_names/createdResources for chaining dependent creates.","params":{"mutationId":{"type":"string","required":true}},"response_notes":{"pending":"status='pending' means a human still needs to approve/reject it.","executed":"status='executed' includes resource_name/id aliases when one resource was created and createdResources[] for one or many created resources.","error":"status='error' may include errorDetails.errors and top-level errors[] with GoogleAdsFailure details, including location.field_path_elements.","chaining":"Use createdResources[].resource_name as the real Google Ads resource reference for the next mutation, e.g. campaign_budget -> campaign -> ad_groups."},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List Google Ads mutations waiting for human approval.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List Google Ads mutation history, including executed mutations with executionResult/resource_names/createdResources so agents can recover real IDs created in previous approved steps.","params":{"status":{"type":"string","default":"all","enum":["all","pending","executed","approved","rejected","cancelled","error"]},"limit":{"type":"number","default":20},"resource":{"type":"string","optional":true}},"example":{"request":{"tool":"list_mutation_history","params":{"status":"executed","resource":"campaign_budgets","limit":10}},"use":"Recover campaign budget resource_names before creating campaigns."},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_pending_mutation","description":"Update data or agent_note for a pending Google Ads mutation before human review.","params":{"mutationId":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"data":{"type":"array","optional":true}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"cancel_pending_mutation","description":"Cancel a pending Google Ads mutation before it is reviewed.","params":{"mutationId":{"type":"string","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_listing_groups","description":"Shopping listing group tree for an ad group.","params":{"adGroupId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_overview","description":"Merchant Center product status summary. Provider failures return provider='merchant_center', merchantAccount, phase, code, action, and retryable without Google Ads permission guidance.","params":{},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_products","description":"Merchant Center products with status/search/brand filters.","params":{"status":{"type":"string","optional":true},"search":{"type":"string","optional":true},"brand":{"type":"string","optional":true},"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_issues","description":"Merchant Center product diagnostics grouped by type and severity.","params":{"severity":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_product_detail","description":"Full Merchant Center product detail and issues.","params":{"productId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_feed_status","description":"Merchant Center feed status, including Content API / auto-sync accounts.","params":{},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"force_merchant_feed_refresh","description":"Force refresh of file-based Merchant Center feeds where supported.","params":{"datafeedId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"sync","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"BACKGROUND","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"PROVIDER_KEY"}}},{"name":"get_merchant_promotions","description":"Merchant Center promotions.","params":{},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_shipping_settings","description":"Merchant Center shipping settings.","params":{},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_product_performance","description":"Merchant product click/impression performance.","params":{"days":{"type":"number","default":30},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_merchant_competitive_visibility","description":"Merchant competitive visibility benchmark data.","params":{"days":{"type":"number","default":30},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_negative_keywords","description":"Campaign, ad group, and shared-list negative keywords.","params":{"campaignId":{"type":"string","optional":true},"level":{"type":"string","default":"all"},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_shared_negative_lists","description":"Shared negative keyword lists and optional keywords.","params":{"includeKeywords":{"type":"boolean","default":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_negative_exists","description":"Check whether a term is already negative at campaign, ad group, or shared-list level.","params":{"text":{"type":"string","required":true},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_assets","description":"Campaign-linked assets such as sitelinks, callouts, snippets, calls, images, and promotions.","params":{"campaignId":{"type":"string","optional":true},"type":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_asset_performance","description":"Performance metrics by asset.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_asset_urls","description":"Check final ad and asset URLs for reachable HTTP status, with the authorized project's public URL as a fallback when Google returns none.","params":{"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_audiences","description":"Audience performance metrics, optionally filtered by minimum conversions.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"minConversions":{"type":"number","default":0}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_customer_match_audiences","description":"List Customer Match/Data Manager audiences synchronized in DigitalPublic, optionally refreshing from Google Data Manager.","params":{"syncRemote":{"type":"boolean","default":false}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_audience_segments","description":"Search Google Ads audience segments and return IDs/resource names.","params":{"query":{"type":"string","optional":true},"types":{"type":"array","optional":true},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_customer_match_upload","description":"Validate Customer Match rows, mapping, hashing eligibility, duplicates, and CRM opt-outs without sending anything to Google.","params":{"rows":{"type":"array","required":true},"mapping":{"type":"object","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_customer_match_upload_status","description":"Retrieve and refresh a Customer Match upload status by uploadId.","params":{"uploadId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_offline_conversion_upload_status","description":"Retrieve asynchronous Data Manager diagnostics for an offline conversion upload.","params":{"requestId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_segments","description":"Performance by device, geography, hour, day of week, or all segments.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"segment":{"type":"string","default":"all"},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_audience_overlap","description":"Audience summary grouped by type with aggregate metrics.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_competitive_analysis","description":"Auction Insights competitive analysis for Search campaigns.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"competitorDepth":{"type":"number","default":10}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_quality_diagnosis","description":"Quality Score diagnosis by keyword and campaign/ad group aggregates.","params":{"period":{"type":"string","default":"LAST_30_DAYS","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"daysBack":{"type":"number","optional":true,"description":"Last N complete days, excluding today."},"campaignId":{"type":"string","optional":true},"minImpressions":{"type":"number","default":0},"limit":{"type":"number","default":50}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_seasonality_analysis","description":"Seasonality analysis with daily/weekly/monthly series, optional YoY, and anomaly detection.","params":{"dateFrom":{"type":"string","required":true},"dateTo":{"type":"string","required":true},"granularity":{"type":"string","default":"day"},"compareYear":{"type":"boolean","default":false},"campaignId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"download_report_pdf","description":"Get report data and PDF download URL for a previously generated report.","params":{"reportId":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"report_generation","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"BACKGROUND","resourceClass":"HEAVY","priority":"BULK","costModel":"ESTIMATED","idempotencyMode":"REQUIRED"}}}]}},"/api/google-ads/agent-mutate":{"post":{"summary":"Google Ads and Merchant Center mutations","description":"Create, update, remove, apply, dismiss, or validate allowlisted Google Ads and Merchant Center changes. Low-risk operations execute immediately; higher-risk operations queue for human approval unless project auto-approval is enabled. Requires write scope.","tags":["Google Ads"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"resource":{"type":"string","description":"Google Ads or Merchant resource name from x-resources."},"operation":{"type":"string","description":"Operation allowed for the resource."},"data":{"type":"array","description":"Array of resource payloads or operations."},"operations":{"type":"array","description":"Alternative batch operations payload for listing_group_operations."},"validate_only":{"type":"boolean","default":false},"agent_note":{"type":"string","description":"Recommended explanation for human approval."},"tool":{"type":"string","description":"Special tool name; supported values include request_ad_policy_review, link_business_profile_to_campaign, add_negative_keyword, create_youtube_video_asset, create_demand_gen_video_ad, launch_video_creative_test, and upload_offline_conversion_events."}}}}}},"responses":{"200":{"description":"Executed immediately, validated, or queued for approval","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-resources":[{"resource":"campaigns","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"campaign_budgets","operations":["create","update"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"ad_groups","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"ad_group_ads","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"ads","operations":["update"],"description":"Update an existing ad in place through AdService.MutateAds without recreating it (keeps history/learning): final_urls, tracking templates, and ad-type blocks such as responsive_display_ad.control_spec or responsive_search_ad texts. Identify the ad by resource_name customers/{customer_id}/ads/{ad_id} or adId (the Ad ID, not the AdGroupAd ID).","example":{"resource":"ads","operation":"update","data":[{"adId":814262197891,"responsive_display_ad":{"control_spec":{"enable_autogen_video":false}}}]},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"ad_group_criteria","operations":["create","update","remove"],"description":"Create/update/remove ad group criteria. Supports direct user_list remarketing/RLSA attachment in Search and Display via AdGroupCriterion.user_list, and direct custom_audience/user_interest/detailed_demographic attachment in Display. For Demand Gen user_list, custom_audience, user_interest, and detailed_demographic shortcuts are routed through grouped Audience and linked as AdGroupCriterion.audience.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"listing_group_operations","operations":["mutate","rebuild_root","rebuild_tree"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"campaign_criteria","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"bidding_strategies","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"labels","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"campaign_labels","operations":["create","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"ad_group_labels","operations":["create","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"shared_sets","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"shared_criteria","operations":["create","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"assets","operations":["create","update","remove"],"description":"Create/update/remove Google Ads assets. For IMAGE assets, image_asset.data accepts raw base64 or a data URL and is decoded to bytes before Google Ads upload; mimeType/mime_type aliases such as image/jpeg are normalized. For YOUTUBE_VIDEO assets, pass youtube_video_asset.youtube_video_id, or the youtubeVideoId / youtubeUrl shortcut (watch/youtu.be/shorts URLs accepted) — type is set automatically. The video must already exist on YouTube (public or unlisted); to upload an MP4 first, use /api/creatives/agent-query youtube_upload_video with the project's connected YouTube channel.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"campaign_assets","operations":["create","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"customer_assets","operations":["create","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"audiences","operations":["create","update"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"custom_audiences","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"user_lists","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"asset_groups","operations":["create","update","remove"],"description":"Create/update/remove Performance Max asset groups. v24.2 Local Services field asset_group.google_local_services_info is accepted in payloads and requires agent_note plus human approval even when Google Ads auto-approval is enabled.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"asset_group_assets","operations":["create","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"asset_group_signals","operations":["create","remove"],"description":"Create/remove Performance Max asset group signals. Supports audience/user_list shortcuts plus v24.2 Local Services fields asset_group_signal.local_services_id and vertical_ads_item_group_rule_list; Local Services payloads require agent_note and human approval.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"experiments","operations":["create","update","remove"],"approval":"human_required","description":"Create/update/remove Google Ads experiments through ExperimentService, including v24.2 COMPARE_CAMPAIGNS and PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION experiment types when supported by the account/runtime. Requires agent_note and human approval.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"experiment_arms","operations":["create","update","remove"],"approval":"human_required","description":"Create/update/remove experiment arms through ExperimentArmService. Requires agent_note and human approval.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"conversion_actions","operations":["create","update","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"conversion_value_rules","operations":["create","update","remove"],"approval":"human_required","description":"Create, update, or remove advanced conversion value rules. Requires agent_note and human approval even when Google Ads auto-approval is enabled because value rules directly affect bidding signals.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"custom_conversion_goals","operations":["create","update","remove"],"approval":"human_required","description":"Create, update, or remove custom conversion goals that group conversion actions for campaign optimization. Requires agent_note and human approval.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"campaign_conversion_goals","operations":["update"],"approval":"human_required","description":"Set campaign-level conversion goal biddability without changing account-level conversion actions. Use validate_only first, include agent_note, and prefer disableOtherCampaignGoals=true when intentionally restricting a campaign to the listed goals.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}},"example":{"resource":"campaign_conversion_goals","operation":"update","validate_only":true,"agent_note":"Restrict this campaign to lead/contact website goals only.","data":[{"campaign":"customers/1234567890/campaigns/23961653698","goals":[{"category":"SUBMIT_LEAD_FORM","origin":"WEBSITE","biddable":true},{"category":"CONTACT","origin":"WEBSITE","biddable":true}],"disableOtherCampaignGoals":true}]}},{"resource":"conversion_goal_campaign_configs","operations":["update"],"approval":"human_required","description":"Set a campaign's conversion goal config: goal_config_level (CUSTOMER | CAMPAIGN) and custom_conversion_goal (numeric ID or resource name). Assigning a custom_conversion_goal without goal_config_level implies CAMPAIGN. Requires agent_note and human approval.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}},"example":{"resource":"conversion_goal_campaign_configs","operation":"update","validate_only":true,"agent_note":"Optimize this campaign against the 'Acme GEO-AEO Leads' custom goal instead of account defaults.","data":[{"campaign":"customers/1234567890/campaigns/23961653698","goal_config_level":"CAMPAIGN","custom_conversion_goal":"customers/1234567890/customConversionGoals/6458223419"}]}},{"resource":"customer_negative_criteria","operations":["create","remove"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"recommendations","operations":["apply","dismiss"],"description":"Apply or dismiss ANY Google Ads recommendation by resource_name (works for every type, including future/uncatalogued ones). Optional apply parameters can be passed alongside resource_name. If apply fails with RECOMMENDATION_NOT_APPLICABLE (type not applicable via API, already applied or invalidated), dismiss the same resource_name to remove it from the optimization score.","example":{"resource":"recommendations","operation":"apply","data":[{"resource_name":"customers/1234567890/recommendations/AbCdEf"}]},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"recommendation_subscriptions","operations":["create","update"],"approval":"human_required","description":"Create or update recommendation subscriptions so Google can automatically apply selected recommendation types. Requires agent_note and human approval.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"merchant_products","operations":["create","update","review","delete"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"merchant_products_batch","operations":["update"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"merchant_promotions","operations":["create","update"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"merchant_local_inventory","operations":["update"],"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"request_ad_policy_review","description":"Request Google Ads policy review after a fix or appeal a decision. The exact policy topics and target snapshot are stored for approval and audit.","params":{"reviewMode":{"type":"string","enum":["REVIEW_AFTER_FIX","APPEAL_DECISION"],"required":true},"reason":{"type":"string","required":true},"adGroupAdResourceNames":{"type":"array","optional":true,"items":{"type":"string"}},"campaignId":{"type":"string","optional":true},"idempotencyKey":{"type":"string","required":true}},"approval":"human_required","x-discovery-variants":{"signal_172_policy_review":{"description":"Solicita revisión tras corregir el destino o apela una decisión de política. Conserva motivo, alcance, temas, estado y resultado del proveedor.","params":{"reviewMode":"REVIEW_AFTER_FIX | APPEAL_DECISION","reason":"obligatorio","adGroupAdResourceNames":"array opcional","campaignId":"opcional","idempotencyKey":"obligatoria"}}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"add_negative_keyword","description":"Create campaign, ad group, or shared-list negative keywords from a compact agent payload. Returns a mutationId for audit; low-risk negatives are applied immediately unless validate_only=true.","params":{"campaignId":{"type":"string","optional":true},"adGroupId":{"type":"string","optional":true},"sharedSetId":{"type":"string","optional":true},"text":{"type":"string","optional":true},"matchType":{"type":"string","enum":["BROAD","PHRASE","EXACT"],"default":"PHRASE"},"reason":{"type":"string","optional":true},"keywords":{"type":"array","optional":true,"description":"Strings or objects with text/matchType/reason. A batch must target one level only."},"items":{"type":"array","optional":true,"description":"Alternative batch payload. Each item may include campaignId, adGroupId, or sharedSetId."},"data":{"type":"array","optional":true,"description":"Compatibility batch payload. Items accept text, keyword, term, or keyword:{text,match_type}, plus campaign/campaignId, adGroup/adGroupId, or sharedSet/sharedSetId."}},"example":{"tool":"add_negative_keyword","params":{"campaignId":"23961653698","text":"mi negocio","matchType":"PHRASE","reason":"Filtrar búsquedas de cliente final; objetivo prioritario agencias/distribuidores marca blanca"}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"link_business_profile_to_campaign","description":"Create/link Google Business Profile location assets for a campaign/account.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"create_youtube_video_asset","description":"Register a YouTube video as a Google Ads YOUTUBE_VIDEO asset (assets.create shortcut). Accepts a raw 11-char YouTube ID or any YouTube URL. The video must already exist on YouTube — upload it first with youtube_upload_video on /api/creatives/agent-query. Queued for human approval unless project auto-approval is enabled. Returns assetResourceName/assetId on execution.","params":{"youtubeVideoId":{"type":"string","optional":true,"description":"11-char YouTube video ID. Either this or youtubeUrl is required."},"youtubeUrl":{"type":"string","optional":true,"description":"YouTube watch/youtu.be/shorts URL."},"name":{"type":"string","optional":true,"description":"Asset display name."},"validate_only":{"type":"boolean","optional":true,"default":false},"agent_note":{"type":"string","optional":true,"description":"Auto-generated if omitted."}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"create_demand_gen_video_ad","description":"Create a DEMAND_GEN_VIDEO_RESPONSIVE_AD in a Demand Gen ad group (ad_group_ads.create shortcut). videoAssets must be existing YOUTUBE_VIDEO asset resource names or numeric IDs (create them first with create_youtube_video_asset). Defaults to status PAUSED for human review; long_headlines default to headlines when omitted; Google Ads requires logo_images for this ad type in most accounts. Queued for human approval unless project auto-approval is enabled.","params":{"adGroupResourceName":{"type":"string","optional":true,"description":"customers/{cid}/adGroups/{id}. Either this or adGroupId is required."},"adGroupId":{"type":"string","optional":true,"description":"Numeric Demand Gen ad group ID."},"videoAssets":{"type":"array","required":true,"description":"YOUTUBE_VIDEO asset resource names or numeric asset IDs (1-5)."},"businessName":{"type":"string","required":true},"headlines":{"type":"array","required":true,"description":"1-5 strings (max 40 chars each)."},"longHeadlines":{"type":"array","optional":true,"description":"Defaults to headlines when omitted."},"descriptions":{"type":"array","required":true,"description":"1-5 strings (max 90 chars each)."},"finalUrls":{"type":"array","required":true},"logoImages":{"type":"array","optional":true,"description":"IMAGE asset resource names or IDs for square logos (recommended 1200x1200)."},"status":{"type":"string","optional":true,"enum":["PAUSED","ENABLED"],"default":"PAUSED"},"validate_only":{"type":"boolean","optional":true,"default":false},"agent_note":{"type":"string","optional":true,"description":"Auto-generated if omitted."}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"launch_video_creative_test","description":"Launch a creative A/B test: create NEW Demand Gen video responsive ads across one or more ad groups while keeping the existing ads untouched (mode add_new_ads_keep_existing, the only supported mode). One ad per ad group in a single mutation; returns mutationId (pending approval) or the created adGroupAdResourceNames on execution. Compare performance afterwards with get_creative_performance and pause old ads explicitly with ad_group_ads.update if the test wins.","params":{"campaignId":{"type":"string","optional":true,"description":"Informative; used in the audit note."},"adGroupIds":{"type":"array","required":true,"description":"Demand Gen ad group IDs or resource names."},"youtubeVideoAssets":{"type":"array","required":true,"description":"YOUTUBE_VIDEO asset resource names or numeric asset IDs (alias: videoAssets)."},"mode":{"type":"string","optional":true,"enum":["add_new_ads_keep_existing"],"default":"add_new_ads_keep_existing"},"label":{"type":"string","optional":true,"description":"Test label recorded in the audit note (e.g. 'startup-video-v1')."},"businessName":{"type":"string","required":true},"headlines":{"type":"array","required":true},"longHeadlines":{"type":"array","optional":true},"descriptions":{"type":"array","required":true},"finalUrl":{"type":"string","optional":true,"description":"Single URL alternative to finalUrls."},"finalUrls":{"type":"array","optional":true},"logoImages":{"type":"array","optional":true},"status":{"type":"string","optional":true,"enum":["PAUSED","ENABLED"],"default":"PAUSED"},"validate_only":{"type":"boolean","optional":true,"default":false},"agent_note":{"type":"string","optional":true,"description":"Auto-generated if omitted."}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"audience_criteria_notes","description":"ad_group_criteria.create, campaign_criteria.create, and asset_group_signals.create accept custom_audience, user_interest, detailed_demographic, and user_list as numeric IDs or full resource names. user_list is attached directly as AdGroupCriterion.user_list for Search/RLSA and Display; custom_audience/user_interest/detailed_demographic are attached directly for Display. For user_list/custom_audience/user_interest/detailed_demographic in Demand Gen ad groups, the platform creates an Audience first and links AdGroupCriterion.audience, ensuring AdGroup.use_audience_grouped=true. For Demand Gen campaign_criteria.create with location or language on upgraded targeting campaigns, the platform routes criteria to active ad groups as AdGroupCriterion because Google Ads exposes Demand Gen geo/language at ad group level. For Performance Max campaigns/asset groups, it creates an Audience and links AssetGroupSignal.audience. campaign_conversion_goals.update changes campaign-level goal biddability only; it never mutates account-level conversion_action.primary_for_goal or include_in_conversions_metric. Empty Google Ads create results are treated as errors, not ok:true. campaigns.update must use end_date_time (YYYY-MM-DD HH:mm:ss), never the retired end_date field; non-dry-run updates are read back from Google Ads before being recorded as executed. For ad_groups/campaigns.update, incomplete targeting_setting.target_restrictions are completed from current Google Ads values for AGE_RANGE, GENDER, PARENT, INCOME_RANGE, and AUDIENCE before mutating.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"brand_asset_notes","description":"customer_assets.create routes LOGO, LANDSCAPE_LOGO, BUSINESS_LOGO, and BUSINESS_NAME through the supported brand asset link path. With campaign it creates CampaignAsset; with asset_group it creates AssetGroupAsset. If no target is sent and the account has exactly one active Performance Max asset group, the platform links there automatically. Direct CustomerAsset links are still used for field types Google Ads supports at customer level.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"responsive_display_ad_notes","description":"ad_group_ads.create strips responsive_display_ad image entries to the supported AdImageAsset shape { asset }. If Google Ads returns media_upload_error 11 and marketing_images/square_marketing_images are valid 1200x628 and 1200x1200 assets, inspect logo_images/square_logo_images next. Incident #285 was caused by a 512x512 logo asset in logo_images; although Google Ads documents square logo minimum 128x128 and recommends 1200x1200, the practical fix was to remove the small logo or upload/use a 1200x1200 logo asset. For exact-ratio replacement uploads, assets.create decodes base64 to bytes before Google Ads upload.","official_specs":"RDA recommended/minimum sizes: horizontal image 1200x628 / 600x314, square image 1200x1200 / 300x300, square logo 1200x1200 / 128x128, landscape logo 1200x300 / 512x128.","x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"submit_customer_match_upload","description":"Queue a Customer Match upload from structured rows. Rows are normalized, deduplicated, hashed, stripped from the mutation payload, and held for human approval before Google Data Manager ingest.","params":{"rows":{"type":"array","required":true},"mapping":{"type":"object","optional":true},"operation":{"type":"string","enum":["append","remove","replace"],"default":"append"},"audienceId":{"type":"string","optional":true},"audienceName":{"type":"string","optional":true},"membershipDurationDays":{"type":"number","optional":true,"default":540,"minimum":1,"maximum":540},"consentAccepted":{"type":"boolean","required":true},"legalBasis":{"type":"string","required":true},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"upload_offline_conversion_events","description":"Send idempotent Google Ads offline conversion events through Data Manager API v1. Click/session identifiers are sent directly to Google and excluded from DigitalPublic audit payloads. Use validate_only first and get_offline_conversion_upload_status for asynchronous diagnostics.","params":{"conversionActionId":{"type":"string","required":true,"description":"Numeric UPLOAD_CLICKS conversion action ID or full resource_name."},"events":{"type":"array","required":true,"maxItems":2000,"description":"Events with transactionId, eventTimestamp, at least one of gclid/gbraid/wbraid/sessionAttributes, and optional conversionValue/currency/eventSource."},"consentAccepted":{"type":"boolean","required":true},"legalBasis":{"type":"string","required":true},"validate_only":{"type":"boolean","optional":true,"default":false},"agent_note":{"type":"string","required":true}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"tool":"sync_crm_segment_to_google_ads_audience","description":"Queue a CRM segment synchronization into a Google Ads Customer Match audience. CRM opt-outs are excluded and execution requires human approval.","params":{"audienceId":{"type":"string","optional":true},"audienceName":{"type":"string","optional":true},"stage":{"type":"string","optional":true},"type":{"type":"string","optional":true},"tag":{"type":"string","optional":true},"source":{"type":"string","optional":true},"limit":{"type":"number","default":10000},"operation":{"type":"string","enum":["append","remove","replace"],"default":"append"},"membershipDurationDays":{"type":"number","optional":true,"default":540,"minimum":1,"maximum":540},"consentAccepted":{"type":"boolean","required":true},"legalBasis":{"type":"string","required":true},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"google_ads","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/meta-ads/agent-query":{"post":{"summary":"Meta Ads / Facebook Ads data","description":"Query Meta Ads connection status and campaigns for the project's linked ad account.","tags":["Meta Ads"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_tools","description":"List all Meta Ads query tools.","params":{},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_connection_status","description":"Return non-sensitive Meta Ads connection metadata for the project.","params":{},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_campaigns","description":"List Meta Ads campaigns with id, name, status, objective, and effectiveStatus.","params":{},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_campaign","description":"Get one Meta Ads campaign.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_adsets","description":"List ad sets for the account or one campaign.","params":{"campaignId":{"type":"string","optional":true},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_adset","description":"Get one Meta Ads ad set.","params":{"adsetId":{"type":"string","required":true}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ads","description":"List ads for the account, one campaign, or one ad set.","params":{"campaignId":{"type":"string","optional":true},"adsetId":{"type":"string","optional":true},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ad","description":"Get one Meta ad.","params":{"adId":{"type":"string","required":true}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_creatives","description":"List account ad creatives.","params":{"limit":{"type":"number","default":50}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pages","description":"List accessible Facebook Pages and Instagram identities.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_businesses","description":"List accessible Business Managers.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ad_images","description":"List reusable ad images and hashes.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ad_videos","description":"List reusable ad videos.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"search_targeting","description":"Resolve targeting IDs for interests, locations, locales, and categories.","params":{"type":{"type":"string","required":true},"q":{"type":"string","required":true},"limit":{"type":"number","default":25}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pixels","description":"List account pixels/datasets.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_custom_conversions","description":"List custom conversions.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_custom_audiences","description":"List custom and lookalike audiences.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_product_catalogs","description":"List product catalogs owned by the configured business.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_automated_rules","description":"List account automated rules.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_ad_studies","description":"List account experiments and A/B studies.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_recommendations","description":"List operational recommendations from Meta.","params":{"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_lead_forms","description":"List instant lead forms.","params":{"pageId":{"type":"string","optional":true},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_leads","description":"Retrieve leads from an instant form.","params":{"formId":{"type":"string","required":true},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_ad_preview","description":"Render an ad preview.","params":{"adId":{"type":"string","required":true},"ad_format":{"type":"string","default":"DESKTOP_FEED_STANDARD"}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preflight_campaign_bundle","description":"Run local and remote validation without publishing.","params":{"data":{"type":"array","required":true}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_insights","description":"Return Meta Ads insights by level with breakdowns and attribution controls.","params":{"level":{"type":"string","default":"campaign"},"id":{"type":"string","optional":true},"date_preset":{"type":"string","default":"last_30d"},"time_range":{"type":"object","optional":true},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Sent to Meta as time_range and applied exactly."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Sent to Meta as time_range and applied exactly."},"breakdowns":{"type":"array","optional":true},"time_increment":{"type":"string","optional":true}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"diagnose_account","description":"Account-level operational diagnosis.","params":{},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"diagnose_campaign","description":"Campaign-level operational diagnosis.","params":{"campaignId":{"type":"string","required":true}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_delivery_issues","description":"List active campaigns or ads with limited delivery / exhausted budget signals.","params":{},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one pending or executed Meta Ads mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending Meta Ads mutations.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"meta_ads","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/meta-ads/agent-mutate":{"post":{"summary":"Meta Ads / Facebook Ads campaign actions","description":"Create and maintain Meta Ads campaigns through DigitalPublic. Requires write scope. New campaigns, ad sets and ads are always created PAUSED. Budget, targeting, schedule, special categories and creation operations require human approval unless meta_ads auto-approval is enabled.","tags":["Meta Ads"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Executed or validated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"pause_campaign","description":"Pause a Meta Ads campaign.","params":{"campaignId":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"validate_only":{"type":"boolean","optional":true}},"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"enable_campaign","description":"Enable a Meta Ads campaign.","params":{"campaignId":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"validate_only":{"type":"boolean","optional":true}},"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"resource_mutation","description":"Recommended structured mutation format.","params":{"resource":{"type":"string","required":true},"operation":{"type":"string","required":true},"data":{"type":"array","required":true},"validate_only":{"type":"boolean","optional":true},"remote_validate":{"type":"boolean","optional":true},"idempotency_key":{"type":"string","optional":true},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-resources":[{"resource":"meta_campaigns","operations":["create","update_status","update_name","update_budget","update_special_ad_categories","copy","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_adsets","operations":["create","update_status","update_budget","update_schedule","update_targeting","update_bid","copy","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_creatives","operations":["create","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_ads","operations":["create","update_status","update_name","update_creative","update_tracking","copy","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_campaign_bundle","operations":["create"],"description":"Create campaign + ad set + creative + ad, all PAUSED.","x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_media","operations":["upload_image","upload_video"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_custom_audiences","operations":["create","update_name","add_users","remove_users","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_lead_forms","operations":["create","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_automated_rules","operations":["create","update_status","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_ad_studies","operations":["create","delete"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"meta_conversion_events","operations":["send"],"x-mcp":{"channel":"meta_ads","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/seo-tools/agent-query":{"post":{"summary":"SEO tools","description":"Query SEO metrics for the project's configured domain. DigitalPublic resolves the underlying SEO data source; agents never address it directly.","tags":["SEO"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"seo_domain_overview","description":"Domain overview with regional and worldwide metrics.","params":{"domain":{"type":"string","optional":true},"db":{"type":"string","default":"es"}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_domain_keywords","description":"Organic tracked keywords for the project domain. Configured target keywords are always preserved and missing targets are reported explicitly.","params":{"domain":{"type":"string","optional":true},"db":{"type":"string","default":"es"},"limit":{"type":"number","default":50,"maximum":500},"keywords":{"type":"string|array","optional":true},"query":{"type":"string","optional":true}},"returns":{"keywords":"Array<{ keyword, position, prev_pos, url, volume, intents }>","targetKeywords":"string[]","missingTargetKeywords":"string[]","resultCount":"number","limit":"number"},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_backlinks_summary","description":"Backlink profile summary.","params":{"domain":{"type":"string","optional":true}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_backlinks_changes","description":"Backlink history/changes.","params":{"domain":{"type":"string","optional":true}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_backlinks_anchors","description":"Anchor text distribution.","params":{"domain":{"type":"string","optional":true}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_competitors","description":"SEO competitors analysis.","params":{"domain":{"type":"string","optional":true},"source":{"type":"string","default":"es"},"type":{"type":"string","default":"organic"}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_keyword_research","description":"Research keywords with volumes, CPC, difficulty and intents.","params":{"keywords":{"type":"string|array","required":true,"aliases":["keyword","query","term"]},"source":{"type":"string","default":"es"},"sort":{"type":"string","optional":true},"sort_order":{"type":"string","optional":true}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_keyword_questions","description":"Related questions for a keyword.","params":{"keyword":{"type":"string","required":true,"aliases":["query","term"]},"source":{"type":"string","default":"es"},"limit":{"type":"number","default":100},"offset":{"type":"number","default":0}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_serp_results","description":"SERP results for a keyword via an asynchronous SERP task. Every call without task_id creates a billable task, so the cycle is: call once with keyword, read taskId in the response, and if status is 'processing' call again with ONLY task_id (never resend the keyword). Two identical keyword calls within 15 minutes reuse the same task.","params":{"keyword":{"type":"string","required":"unless task_id is sent","aliases":["query","term"]},"task_id":{"type":"string|number","optional":true,"aliases":["taskId","serp_task_id"],"description":"Id returned by a previous call. When present the task is only read, never re-created, and keyword/location params are ignored."},"language_code":{"type":"string","default":"es"},"google_ads_location_id":{"type":"number","default":2724,"description":"Google Ads geo target id (2724 = Spain, 2276 = Germany, 2840 = United States), from the public Google Ads geo target constants table. Recommended way to target a country."},"location_id":{"type":"number","optional":true,"aliases":["region_id"],"description":"Id from the SEO data provider's OWN location catalog, a different catalog from Google Ads: the same number means a different place (or none at all) in each one. Never translate an id between catalogs. If you only know the Google Ads geo target id, send google_ads_location_id instead. When both are sent, location_id wins."},"device":{"type":"string","default":"desktop"},"limit":{"type":"number","default":10},"waitMs":{"type":"number","default":15000,"description":"How long the call waits for the task before returning status 'processing' with its taskId (max 25000)."}},"returns":{"taskId":"string","status":"completed | processing | submitted","reusedExistingTask":"boolean","result":"SERP payload when completed","retrieveWith":"exact follow-up call when the task is still processing"},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_domain_pages","description":"Top pages by organic traffic.","params":{"domain":{"type":"string","optional":true},"source":{"type":"string","default":"es"},"scope":{"type":"string","default":"base_domain"},"type":{"type":"string","default":"organic"},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"seo_ai_overview","description":"AI search visibility metrics.","params":{"domain":{"type":"string","optional":true},"source":{"type":"string","default":"es"},"engine":{"type":"string","default":"ai-overview"},"scope":{"type":"string","default":"base_domain"}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"download_seo_report_pdf","description":"Get report data and PDF download URL.","params":{"reportId":{"type":"string","required":true}},"x-mcp":{"channel":"seo_tools","effect":"report_generation","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"BACKGROUND","resourceClass":"HEAVY","priority":"BULK","costModel":"ESTIMATED","idempotencyMode":"REQUIRED"}}},{"name":"list_seo_reports","description":"List SEO reports with stable source, detailTool, fileTool and contentUnavailable metadata for historical files.","params":{"limit":{"type":"number","default":10}},"x-mcp":{"channel":"seo_tools","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"submit_seo_analysis","description":"Submit the analysis/briefing for a SEO report (requires write scope).","params":{"reportId":{"type":"string","required":true},"analysis":{"type":"object","description":"{ resumenEjecutivo, logros, alertas, propuestasMejora, proximosPasos }"}},"x-mcp":{"channel":"seo_tools","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/google-tag-manager/agent-query":{"post":{"summary":"Google Tag Manager query tools","description":"Query and audit the Google Tag Manager container assigned to the project.","tags":["Google Tag Manager"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"gtm_status","description":"Container assignment, public ID, account, and summary counts.","params":{},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_workspaces","description":"List GTM workspaces.","params":{},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_workspace_status","description":"Find modified/conflicting entities in a workspace.","params":{"workspaceId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_tags","description":"List tags in a workspace.","params":{"workspaceId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_tag","description":"Get one tag by tagId or path.","params":{"workspaceId":{"type":"string"},"tagId":{"type":"string"},"path":{"type":"string"}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_triggers","description":"List triggers in a workspace.","params":{"workspaceId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_trigger","description":"Get one trigger by triggerId or path.","params":{"workspaceId":{"type":"string"},"triggerId":{"type":"string"},"path":{"type":"string"}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_variables","description":"List variables in a workspace.","params":{"workspaceId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_variable","description":"Get one variable by variableId or path.","params":{"workspaceId":{"type":"string"},"variableId":{"type":"string"},"path":{"type":"string"}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_folders","description":"List folders in a workspace.","params":{"workspaceId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_templates","description":"List templates in a workspace.","params":{"workspaceId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_environments","description":"List GTM environments.","params":{},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_versions","description":"List GTM container versions.","params":{},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"quick_preview","description":"Create a quick preview for a workspace.","params":{"workspaceId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one pending GTM mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending GTM mutations.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List GTM mutation history.","params":{"status":{"type":"string","default":"all"},"limit":{"type":"number","default":20},"resource":{"type":"string","optional":true}},"x-mcp":{"channel":"gtm","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_pending_mutation","description":"Update a pending GTM mutation.","params":{"mutationId":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"data":{"type":"array","optional":true}},"x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"cancel_pending_mutation","description":"Cancel a pending GTM mutation.","params":{"mutationId":{"type":"string","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/google-tag-manager/agent-mutate":{"post":{"summary":"Google Tag Manager mutations","description":"Link an existing GTM container to a project or queue workspace, tag, trigger, variable, template, environment, and version changes for admin approval. Requires write scope.","tags":["Google Tag Manager"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"queue_gtm_mutation","description":"Link an existing GTM container or queue a GTM API mutation scoped to the project's assigned container.","params":{"resource":{"type":"string","required":true,"description":"gtm_container | gtm_workspaces | gtm_tags | gtm_triggers | gtm_variables | gtm_built_in_variables | gtm_folders | gtm_templates | gtm_clients | gtm_zones | gtm_transformations | gtm_environments | gtm_versions"},"operation":{"type":"string","required":true,"description":"link | create | update | delete | revert | sync | import_from_gallery | move_entities_to_folder | reauthorize | publish | set_latest | undelete"},"workspaceId":{"type":"string","optional":true},"data":{"type":"array","required":true},"validate_only":{"type":"boolean","default":false},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}],"x-resources":[{"resource":"gtm_container","operations":["link"],"description":"Validate an existing GTM container against the Google API and link it to the selected project. Shared containers are allowed; no GTM content is changed.","operationParams":{"link":{"data":{"type":"array","required":true,"minItems":1,"maxItems":1,"description":"One object with publicId, or containerPath, or accountId/accountPath plus containerId.","items":{"type":"object","properties":{"publicId":{"type":"string","description":"Public GTM ID, for example GTM-PLRNJP6R."},"containerPath":{"type":"string","description":"GTM API path, for example accounts/1/containers/2."},"accountId":{"type":"string"},"accountPath":{"type":"string"},"containerId":{"type":"string"},"accountName":{"type":"string"},"name":{"type":"string"},"domainName":{"type":"string"}}}},"agent_note":{"type":"string","required":true,"description":"Audit note explaining why this existing container is linked to the project."}}},"x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_workspaces","operations":["create","update","delete","sync"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_tags","operations":["create","update","delete","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","operationParams":{"create":{"workspaceId":{"type":"string","optional":true,"description":"Workspace ID or full workspace path. Required unless every data item includes parent."},"data":{"type":"array","required":true,"description":"GTM tag objects. Each item must resolve its workspace from top-level workspaceId or parent.","items":{"type":"object","properties":{"parent":{"type":"string","optional":true,"description":"Full workspace path: accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}."}}}},"validate_only":{"type":"boolean","default":false,"description":"Validates the workspace parent and payload structure without queuing a mutation."}}},"x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_triggers","operations":["create","update","delete","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_variables","operations":["create","update","delete","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_built_in_variables","operations":["create","delete","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_folders","operations":["create","update","delete","move_entities_to_folder","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_templates","operations":["create","update","delete","import_from_gallery","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_clients","operations":["create","update","delete","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_zones","operations":["create","update","delete","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_transformations","operations":["create","update","delete","revert"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_environments","operations":["create","update","delete","reauthorize"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"gtm_versions","operations":["create","publish","set_latest","delete","undelete"],"description":"Queue a GTM API mutation scoped to the project's assigned container.","x-mcp":{"channel":"gtm","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/analytics/agent-query":{"post":{"summary":"Google Analytics (GA4) data","description":"Query GA4 metrics, audiences, and supported GA4 Admin API configuration for the project's linked property.","tags":["Analytics"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"acquisition_attribution","description":"Session-scoped GA4 acquisition attribution with source, medium, campaign, manual ad content (utm_content), landing page, sessions, users, Key Events, and a rate calculated only when its inputs are available. Empty or unavailable data is explicit and never coerced to zero. sessionReconciliation compares returned row sessions with a separate GA4 total using the same range and filters; preserve all rows and inspect completeness and quality before charting.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD; requires to."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD; requires from."},"source":{"type":"string","optional":true,"description":"Exact, case-insensitive session source."},"medium":{"type":"string","optional":true,"description":"Exact, case-insensitive session medium."},"campaign":{"type":"string","optional":true,"description":"Exact, case-insensitive session campaign."},"landingPage":{"type":"string","optional":true,"description":"Substring of landing page plus query string."},"limit":{"type":"number","default":100,"min":1,"max":250}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"traffic_overview","description":"Total sessions, users, pageviews, bounce rate. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"traffic_by_channel","description":"Traffic breakdown by channel (organic, paid, social, etc.). The sessionReconciliation envelope compares the returned row sum with the GA4 total; pct uses total sessions and may sum above 100%. Preserve all categories and use bars or tables when totals differ. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"top_pages","description":"Most visited pages. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"device_breakdown","description":"Traffic by device type. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"top_countries","description":"Traffic by country. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"source_medium","description":"Traffic sources with medium. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"new_vs_returning","description":"New vs returning users. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"traffic_evolution","description":"Daily traffic evolution. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_events","description":"List measured GA4 events for the period. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"events_overview","description":"Return measured GA4 events with counts and event-level metrics. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."},"limit":{"type":"number","default":100}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_key_events","description":"List configured GA4 Key Events for the linked property. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"key_events_overview","description":"Key Events total, rate over sessions, top events, and configuration status. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"key_events_by_event","description":"Break down Key Events by GA4 event name. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"key_events_by_channel","description":"Attribute Key Events by traffic channel. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"key_events_by_source_medium","description":"Attribute Key Events by source/medium. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"key_events_evolution","description":"Daily Key Events and sessions trend. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"top_key_event_pages","description":"Landing pages that generate the most Key Events. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":30},"dateRange":{"type":"string","optional":true,"enum":["TODAY","YESTERDAY","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","LAST_MONTH"]},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"audit_hygiene","description":"Audit supported GA4 Admin API configuration, audiences and Google Ads link status.","params":{},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_audiences","description":"List GA4 audiences available for remarketing activation.","params":{},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_audience","description":"Get one GA4 audience by resource name.","params":{"audienceName":{"type":"string","required":true}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_google_ads_links","description":"List Google Ads links configured on the GA4 property.","params":{},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_google_ads_link","description":"Check whether the GA4 property is linked to a Google Ads customer.","params":{"customerId":{"type":"string","optional":true}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"recommend_country_exclusion","description":"Explain why country exclusion is not a native GA4 Admin API filter and suggest alternatives.","params":{"countries":{"type":"string|array","optional":true}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check one pending Analytics mutation.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List pending Analytics mutations.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List Analytics mutation history.","params":{"status":{"type":"string","default":"all"},"limit":{"type":"number","default":20},"resource":{"type":"string","optional":true}},"x-mcp":{"channel":"analytics","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_pending_mutation","description":"Update a pending Analytics mutation.","params":{"mutationId":{"type":"string","required":true},"agent_note":{"type":"string","optional":true},"data":{"type":"array","optional":true}},"x-mcp":{"channel":"analytics","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"cancel_pending_mutation","description":"Cancel a pending Analytics mutation.","params":{"mutationId":{"type":"string","required":true},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"analytics","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/analytics/agent-mutate":{"post":{"summary":"Google Analytics (GA4) mutations","description":"Link the project's GA4 property or create supported GA4 Admin API changes for audiences, Key Events, and Google Ads links. Requires write scope and admin approval unless Analytics auto-approval is enabled for the project.","tags":["Analytics"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"link_property","description":"Link an existing GA4 property to the project. If measurementId is omitted, it is resolved from the property's web data stream.","params":{"resource":{"type":"string","enum":["analytics_property"]},"operation":{"type":"string","enum":["link"]},"data":{"type":"array","required":true,"description":"Exactly one payload: { propertyId, measurementId?, name?, websiteUrl? }."},"validate_only":{"type":"boolean","default":false},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"analytics","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_audience","description":"Queue creation of a GA4 audience using a supported template.","params":{"resource":{"type":"string","enum":["analytics_audiences"]},"operation":{"type":"string","enum":["create"]},"data":{"type":"array","required":true,"description":"Array of audience template payloads"},"validate_only":{"type":"boolean","default":false},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"analytics","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_key_event","description":"Queue creation of a GA4 Key Event for an existing or planned event name.","params":{"resource":{"type":"string","enum":["analytics_key_events"]},"operation":{"type":"string","enum":["create"]},"data":{"type":"array","required":true,"description":"Array of Key Event payloads: { eventName, countingMethod?, defaultValue? }. countingMethod defaults to ONCE_PER_EVENT."},"validate_only":{"type":"boolean","default":false},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"analytics","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_google_ads_link","description":"Queue creation of the GA4 to Google Ads link for the project account.","params":{"resource":{"type":"string","enum":["analytics_google_ads_links"]},"operation":{"type":"string","enum":["create"]},"data":{"type":"array","required":true,"description":"Array with one or more link payloads"},"validate_only":{"type":"boolean","default":false},"agent_note":{"type":"string","optional":true}},"x-mcp":{"channel":"analytics","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/search-console/agent-query":{"post":{"summary":"Google Search Console data","description":"Query Search Console performance metrics and supported management state for the project's configured site.","tags":["Search Console"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"search_overview","description":"Search Console overview: clicks, impressions, CTR, average position. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":28},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"top_queries","description":"Top organic queries. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":28},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"top_pages","description":"Top pages from Search Console. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":28},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"device_breakdown","description":"Performance by device. Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":28},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"opportunities","description":"Queries with SEO opportunity (positions 4-15). Exact from/to ranges are applied without silent truncation.","params":{"days":{"type":"number","default":28},"from":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires to. Applied exactly, without silent truncation."},"to":{"type":"string","optional":true,"description":"YYYY-MM-DD, inclusive. Requires from. Applied exactly, without silent truncation."}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_sitemaps","description":"List registered sitemaps for the Search Console property.","params":{},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"inspect_url","description":"Inspect one URL with the URL Inspection API.","params":{"url":{"type":"string","required":true}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"index_coverage_summary","description":"Return support status and alternatives because public API has no aggregate coverage inventory.","params":{"since":{"type":"string","optional":true},"until":{"type":"string","optional":true}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"removal_url","description":"Return support status because public API has no Removal Tool endpoint.","params":{"url":{"type":"string","optional":true},"type":{"type":"string","optional":true}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check a Search Console mutation by mutationId, including execution result and actionable errors.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List Search Console mutations pending human approval.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List Search Console mutation history and execution results.","params":{"status":{"type":"string","default":"all"},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"search_console","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/search-console/agent-mutate":{"post":{"summary":"Google Search Console mutations","description":"Link the project's Search Console property or queue official sitemap mutations. Requires write scope and admin approval unless Search Console auto-approval is enabled for the project.","tags":["Search Console"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-resources":[{"resource":"sc_sitemap","operations":["submit","delete"],"x-mcp":{"channel":"search_console","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"resource":"seo_config","operations":["update"],"description":"Link or update the project's Search Console site, SEO domain, target keywords, and competitors with { domain?, searchConsoleSiteUrl?, targetKeywords?, competitors? }.","x-mcp":{"channel":"search_console","effect":"write","requiredScope":"write","approval":"auto_approval_possible","requestShape":"resource_operation","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/comments/agent-query":{"post":{"summary":"Project comments","description":"Read and write comments on the project. Agents can only edit/delete their own comments.","tags":["Comments"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"post_comment","description":"Create a new comment. Requires write scope. Incident #286/B2: if this returns COMMENT_WRITE_TRANSIENT or an upstream 'error code: 1010', first call list_comments to verify whether the comment was persisted; if it is missing, retry the same payload. The API retries transient database writes before returning an error.","params":{"text":{"type":"string","required":true},"area":{"type":"string","optional":true,"enum":["google-ads","seo","analytics"]},"author":{"type":"string","optional":true,"default":"Agente IA"}},"x-mcp":{"channel":"comments","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"edit_comment","description":"Edit an agent's own comment. Requires write scope. Incident #286/B2: transient write failures are retried by the API; on COMMENT_WRITE_TRANSIENT, call list_comments, confirm the current text, and retry the same edit only if the change is still missing.","params":{"commentId":{"type":"string","required":true},"text":{"type":"string","required":true}},"x-mcp":{"channel":"comments","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"delete_comment","description":"Delete an agent's own comment. Requires write scope.","params":{"commentId":{"type":"string","required":true}},"x-mcp":{"channel":"comments","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_comments","description":"List project comments. Requires read scope.","params":{"area":{"type":"string","optional":true,"enum":["google-ads","seo","analytics"]},"limit":{"type":"number","default":50,"max":100}},"x-mcp":{"channel":"comments","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/google-business/agent-query":{"post":{"summary":"Google Business Profile data","description":"Read Google Business Profile connection state, locations, posts, reviews, media and approved mutation results without exposing OAuth credentials.","tags":["Google Business Profile"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"get_business_profile_connection_status","description":"Check whether OAuth and a Business Profile location are configured for the project. Safe to call before configuration.","params":{},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_business_accounts","description":"List accessible Google Business accounts.","params":{},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_business_locations","description":"List only Business Profile locations assigned to the authenticated project.","params":{},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_business_location","description":"Get an assigned Business Profile location. locationId selects among multiple assignments.","params":{"locationId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_business_profile_summary","description":"Summary of the location: title, primary category, phone, website, store code, account name, and location name.","params":{},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_business_profile_location","description":"Full Google Business Profile location payload.","params":{},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_business_profile_attributes","description":"Current location attributes and available attribute definitions.","params":{},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_business_profile_performance","description":"Performance summary for website clicks, calls, direction requests, and views.","params":{"days":{"type":"number","default":28}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_business_profile_posts","description":"List local posts for the assigned location.","params":{},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_business_posts","description":"List local posts for an assigned location.","params":{"locationId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_business_reviews","description":"List recent reviews for an assigned location without exposing OAuth credentials.","params":{"locationId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_business_media","description":"List media attached to an assigned Business Profile.","params":{"locationId":{"type":"string","optional":true}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"check_mutation_status","description":"Check a Google Business mutation and its execution result.","params":{"mutationId":{"type":"string","required":true}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_pending_mutations","description":"List Google Business changes pending human approval.","params":{"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_mutation_history","description":"List Google Business mutation history.","params":{"status":{"type":"string","default":"all"},"limit":{"type":"number","default":20}},"x-mcp":{"channel":"google_business","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/google-business/agent-mutate":{"post":{"summary":"Google Business Profile mutations","description":"Prepare Google Business Profile changes for mandatory human approval. Requires write scope; this endpoint never executes provider writes directly.","tags":["Google Business Profile"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Pending human approval","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"create_business_post","description":"Prepare a local post with optional image for human approval.","params":{"locationId":{"type":"string","optional":true},"summary":{"type":"string","required":true},"imageUrl":{"type":"string","format":"uri","optional":true,"description":"Public HTTPS image URL. Mutually exclusive with mediaMutationId."},"mediaMutationId":{"type":"string","optional":true,"description":"Prepared upload_business_media mutation for the same project and location. Mutually exclusive with imageUrl."},"callToAction":{"type":"object","optional":true},"agentNote":{"type":"string","optional":true},"idempotencyKey":{"type":"string","optional":true,"description":"Stable project-scoped key for retry-safe process occurrences."}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_business_location","description":"Prepare an allowlisted location patch for human approval.","params":{"locationId":{"type":"string","optional":true},"payload":{"type":"object","required":true},"updateMask":{"type":"array","required":true},"agentNote":{"type":"string","optional":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"upload_business_media","description":"Prepare media creation from a public HTTPS source URL for human approval.","params":{"locationId":{"type":"string","optional":true},"sourceUrl":{"type":"string","required":true},"mediaFormat":{"type":"string","enum":["PHOTO","VIDEO"],"default":"PHOTO"},"category":{"type":"string","optional":true},"agentNote":{"type":"string","optional":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_business_profile_description","description":"Prepare a profile description change for human approval.","params":{"locationId":{"type":"string","optional":true},"description":{"type":"string","required":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_business_profile_basic_info","description":"Prepare a primaryPhone and/or websiteUri change for human approval.","params":{"locationId":{"type":"string","optional":true},"primaryPhone":{"type":"string","optional":true},"websiteUri":{"type":"string","optional":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_business_profile_hours","description":"Prepare regularHours and/or specialHours changes for human approval.","params":{"locationId":{"type":"string","optional":true},"regularHours":{"type":"object","optional":true},"specialHours":{"type":"object","optional":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_business_profile_attributes","description":"Prepare attribute changes for human approval.","params":{"locationId":{"type":"string","optional":true},"attributes":{"type":"array","required":true},"attributeMask":{"type":"array","required":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_business_profile_post","description":"Prepare a local post for human approval (legacy alias).","params":{"locationId":{"type":"string","optional":true},"summary":{"type":"string","required":true},"callToAction":{"type":"object","optional":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_business_profile_post","description":"Prepare an existing local post update for human approval.","params":{"locationId":{"type":"string","optional":true},"postName":{"type":"string","required":true},"summary":{"type":"string","required":true},"callToAction":{"type":"object","optional":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"delete_business_profile_post","description":"Prepare a local post deletion for human approval.","params":{"locationId":{"type":"string","optional":true},"postName":{"type":"string","required":true}},"x-mcp":{"channel":"google_business","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/reports/agent-query":{"post":{"summary":"Query structured reports and deterministic rendering capabilities","description":"Project-scoped read tools for report designs, blueprints, the ReportDocumentV1 schema, validation, report state and immutable artifacts.","tags":["Reports"],"security":[{"bearerAuth":[]}],"x-tools":[{"name":"list_reports","description":"List all active project reports across sources, with purpose, authorization and delivery status ENVIADO, OMITIDO, AUTORIZADO or PENDIENTE. Paginated; deleted reports are explicitly outside coverage. Read each record with get_report.","params":{"limit":{"type":"number","optional":true,"default":50},"offset":{"type":"number","optional":true,"default":0}},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_report_capabilities","description":"Return supported blocks, chart types, legend positions, limits, renderer version and effective presets. Each preset reports its usable blueprintKey, enabled, strictDesignEnabled and mode; STANDARD_FALLBACK remains creatable. Agents provide structured content and data; DigitalPublic owns every visual decision.","params":{},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_report_designs","description":"List designs allowed by project, group or global inheritance, including non-sensitive logo asset key, MIME type and SHA-256. Optionally filter by reportType.","params":{"reportType":{"type":"string","optional":true,"enum":["SEO","GOOGLE_ADS","CHATGPT_ADS","AEO","ANALYTICS","EXECUTIVE","CUSTOM"]}},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_report_design","description":"Read metadata, published versions, the effective non-alert chartPalette and the associated non-sensitive logo asset identity for an allowed design. Visual tokens remain controlled by DigitalPublic.","params":{"designId":{"type":"string","required":true}},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_report_blueprints","description":"List effective report blueprints, versions, minimum blocks and design mode. A STANDARD_FALLBACK blueprint remains available for draft creation.","params":{},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_report_document_schema","description":"Return ReportDocumentV1 JSON Schema and deterministic renderer limits. The canonical project name is shown on the cover by default; only metadata.showProjectNameOnCover=false explicitly hides it. metadata.author is the optional cover signature; omitting it or sending an empty value hides the signature without falling back to the design name. pageChrome.showRepeatedHeader=false hides the repeated title and project header for this report. pageChrome.showFooterBrand=false hides only the footer brand and preserves page numbering. Omitted pageChrome options keep the published design behavior. Categorical chart encodings accept sort arrays to fix chronological month or year order. Charts accept legend.position as right, left, top, bottom or none; side positions reserve vertical space outside the plot and long labels are truncated. showLegend remains supported and false always hides the legend. Data-table columns accept emphasis=bold; an individual row or total cell accepts { value, emphasis: bold }. Emphasis applies to the fully formatted value while content remains escaped as plain text. palette.chartOrder and chart.colorIndex select only indexed colors from the published design palette; warning and error colors require declared tones.","params":{},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_report","description":"Read a structured report or a project-scoped historical report record. Historical records declare contentUnavailable and a stable reason when their binary is missing.","params":{"reportId":{"type":"string","required":true}},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"verify_tabular_report","description":"Verify project ownership, file existence, XLSX MIME, size, SHA-256, period and required or forbidden column contracts.","params":{"reportId":{"type":"string","required":true},"expectedPeriod":{"type":"string","optional":true},"expectedSha256":{"type":"string","optional":true},"requiredColumns":{"type":"array","optional":true},"forbiddenColumns":{"type":"array","optional":true}},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"validate_report_document","description":"Validate ReportDocumentV1 without saving. Errors include JSON path, keyword, expected and received values, sectionId and blockId plus supported alternatives.","params":{"document":{"type":"object","required":true}},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/reports/agent-mutate":{"post":{"summary":"Create and update deterministic structured reports","description":"Project-scoped structured report mutations. HTML, CSS, JavaScript, SVG and external image URLs are rejected. Real email sending remains subject to human report and email authorization.","tags":["Reports"],"security":[{"bearerAuth":[]}],"x-tools":[{"name":"create_report_draft","description":"Create a visible report draft with the published standard design as a non-blocking fallback. Design selection always fails closed against the project brand; MARCA_BLANCA never falls back to a DigitalPublic or Blobic design. CRM_LEAD targets are resolved from the project CRM and agents cannot provide arbitrary recipient addresses. The complete route is required when authorization is requested. The canonical project name is supplied for the cover. Invalid documents return localized validation details.","params":{"blueprintKey":{"type":"string","required":true},"designId":{"type":"string","optional":true},"strictDesign":{"type":"boolean","optional":true},"title":{"type":"string","required":true},"period":{"type":"string","required":true},"audience":{"type":"string","optional":true,"enum":["CLIENT_FINAL","DISTRIBUTOR"],"description":"Required to prepare static delivery for FLEXIBLE projects. CRM_ONLY projects must use targetType CRM_LEAD and leadId instead."},"purpose":{"type":"string","optional":true,"enum":["MONTHLY_REPORT","TECHNICAL_REPORT","COMMERCIAL_PROPOSAL","QUOTE"]},"targetType":{"type":"string","optional":true,"enum":["STATIC_AUDIENCE","CRM_LEAD"]},"leadId":{"type":"string","optional":true,"description":"Required when targetType is CRM_LEAD."},"description":{"type":"string","optional":true},"document":{"type":"object","required":true},"metricReferences":{"type":"object","optional":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_tabular_report","description":"Create a native visible and attachable XLSX report without the legacy upload route. Accept rows or base64 workbook content and enforce required and forbidden columns.","params":{"title":{"type":"string","required":true},"period":{"type":"string","required":true},"filename":{"type":"string","optional":true},"reportType":{"type":"string","optional":true,"enum":["SEO","SEM","AEO","ANALYTICS","DASHBOARD"]},"rows":{"type":"array","optional":true},"contentBase64":{"type":"string","optional":true},"requiredColumns":{"type":"array","optional":true},"forbiddenColumns":{"type":"array","optional":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"replace_tabular_report","description":"Replace a native XLSX with optimistic concurrency. Resets report authorization and any linked unsent authorized email to DRAFT.","params":{"reportId":{"type":"string","required":true},"expectedContentHash":{"type":"string","required":true},"title":{"type":"string","required":true},"period":{"type":"string","required":true},"rows":{"type":"array","optional":true},"contentBase64":{"type":"string","optional":true},"requiredColumns":{"type":"array","optional":true},"forbiddenColumns":{"type":"array","optional":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_report_draft","description":"Update an unlocked draft. expectedContentHash is mandatory to protect concurrent human or agent edits.","params":{"reportId":{"type":"string","required":true},"expectedContentHash":{"type":"string","required":true},"document":{"type":"object","optional":true},"title":{"type":"string","optional":true},"period":{"type":"string","optional":true},"description":{"type":"string","optional":true},"data":{"type":"object","optional":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"set_report_design","description":"Switch an unlocked draft to another allowed design without changing its content.","params":{"reportId":{"type":"string","required":true},"expectedContentHash":{"type":"string","required":true},"designId":{"type":"string","required":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_report","description":"Render and cache a deterministic preview. The web preview and PDF use the same document, design palette and block registry.","params":{"reportId":{"type":"string","required":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_report_authorization","description":"Validate the current structured PDF or native XLSX hash and request human authorization. Do not consider it authorized until get_report returns authorizedAt.","params":{"reportId":{"type":"string","required":true},"expectedContentHash":{"type":"string","required":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"propose_report_block","description":"Record a missing visual need for administrator review. Use figure immediately when the report cannot wait for development.","params":{"reportId":{"type":"string","optional":true},"title":{"type":"string","required":true},"description":{"type":"string","required":true},"exampleData":{"type":"object","optional":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/reports/upload":{"post":{"summary":"Upload external report file","description":"Exceptional legacy upload for externally produced files. Monthly agent reports should use create_report_draft and ReportDocumentV1 instead.","tags":["Reports"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","title","period"],"properties":{"file":{"type":"string","format":"binary","description":"Report file in any format (max 20 MB)"},"title":{"type":"string","description":"Report title, e.g. 'Informe Q1 2026 - Agencia X'"},"period":{"type":"string","description":"Reporting period, e.g. 'Enero 2026', 'Q1 2026', '01/01/2026 - 31/03/2026'"},"notes":{"type":"string","description":"Optional description or context. Shown as a snippet in the reports list."},"projectId":{"type":"string","description":"Project ID to associate the report with. Defaults to the user's active project."},"audience":{"type":"string","enum":["CLIENT_FINAL","DISTRIBUTOR"],"description":"Audience for a static governed delivery."},"purpose":{"type":"string","enum":["MONTHLY_REPORT","TECHNICAL_REPORT","COMMERCIAL_PROPOSAL","QUOTE"],"description":"Intended delivery purpose. Defaults to MONTHLY_REPORT when a route is resolved."},"targetType":{"type":"string","enum":["STATIC_AUDIENCE","CRM_LEAD"],"description":"Use CRM_LEAD for a report intended for a variable CRM contact."},"leadId":{"type":"string","description":"CRM lead in the same project. Required when targetType is CRM_LEAD."}}}}}},"responses":{"201":{"description":"Report created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"period":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}}}}},"400":{"description":"Validation error (missing file, title, or period; file too large)"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden — CLIENT role cannot upload reports"}},"x-tools":[{"name":"upload_report","description":"Exceptional legacy upload for a report produced outside DigitalPublic. Do not use for recurring monthly agent reports; use create_report_draft.","params":{"filename":{"type":"string","required":true},"contentType":{"type":"string","optional":true,"default":"application/octet-stream"},"title":{"type":"string","required":true},"period":{"type":"string","required":true},"notes":{"type":"string","optional":true},"fileBase64":{"type":"string","required":true},"audience":{"type":"string","optional":true,"enum":["CLIENT_FINAL","DISTRIBUTOR"]},"purpose":{"type":"string","optional":true,"enum":["MONTHLY_REPORT","TECHNICAL_REPORT","COMMERCIAL_PROPOSAL","QUOTE"]},"targetType":{"type":"string","optional":true,"enum":["STATIC_AUDIENCE","CRM_LEAD"]},"leadId":{"type":"string","optional":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"multipart_upload","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/reports/omit-send/{reportId}":{"post":{"summary":"Omit report email sending","description":"Marks a generated or uploaded report as no longer pending email sending while preserving it in the report history. Requires write scope.","tags":["Reports"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"reportId","required":true,"schema":{"type":"string"},"description":"Report ID"}],"responses":{"200":{"description":"Report send omitted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"report":{"type":"object","properties":{"id":{"type":"string"},"sendOmittedAt":{"type":"string","format":"date-time","nullable":true}}}}}}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Report not found"}},"x-tools":[{"name":"omit_report_send","description":"Mark a report as no longer pending email sending without deleting it from report history.","params":{"reportId":{"type":"string","required":true}},"x-mcp":{"channel":"reports","effect":"write","requiredScope":"write","approval":"none","requestShape":"direct_body","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/reports/file/{reportId}":{"get":{"summary":"Download external report file","description":"Returns the binary file for an uploaded report.","tags":["Reports"],"parameters":[{"in":"path","name":"reportId","required":true,"schema":{"type":"string"},"description":"Report ID returned by /api/reports/upload"}],"responses":{"200":{"description":"Report file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Report not found or not an uploaded file"}},"x-tools":[{"name":"get_report_file","description":"Download an uploaded report file. The MCP returns filename, contentType, and base64 content.","params":{"reportId":{"type":"string","required":true}},"x-mcp":{"channel":"reports","effect":"read","requiredScope":"read","approval":"none","requestShape":"file_download","processEligible":true}}]}},"/api/creatives":{"get":{"summary":"List project creative files","description":"List stored project creative files with session or bearer authentication. Session callers select an authorized project with projectId or the active-project header.","tags":["Creatives"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"projectId","schema":{"type":"string"},"description":"Required with global dpa_ tokens and when the session has no active-project header."},{"in":"query","name":"kind","schema":{"type":"string","enum":["image","video","document"]}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Creative files ordered from newest to oldest."},"403":{"description":"Project access denied."}}}},"/api/creatives/upload":{"post":{"summary":"Upload creative file (video/image)","description":"Upload a campaign creative (MP4/MOV/WebM video or JPG/PNG/GIF/WebP image) as multipart/form-data. Max 200 MB by default. Video metadata (duration, dimensions, codec, audio) is parsed automatically. Requires write scope.","tags":["Creatives"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Creative file (max 200 MB)"},"name":{"type":"string","description":"Display name for the creative. Defaults to the filename."},"projectId":{"type":"string","description":"Required with global dpa_ tokens; dpk_ keys infer the project."}}}}}},"responses":{"201":{"description":"Creative stored; returns fileId, url, mimeType, sizeBytes, sha256, and parsed video metadata."},"400":{"description":"Validation error (missing file, unsupported type)"},"413":{"description":"File exceeds the size limit"}},"x-tools":[{"name":"upload_creative_file","description":"Upload a local creative file (video/image) from base64 content. The MCP converts fileBase64 into multipart/form-data for /api/creatives/upload. Returns fileId, url, sha256 and parsed video metadata. For large files prefer import_creative_file with a remote URL.","params":{"filename":{"type":"string","required":true},"contentType":{"type":"string","optional":true,"default":"application/octet-stream"},"name":{"type":"string","optional":true,"description":"Display name; defaults to filename."},"fileBase64":{"type":"string","required":true}},"x-mcp":{"channel":"creatives","effect":"write","requiredScope":"write","approval":"none","requestShape":"multipart_upload","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/creatives/generate":{"post":{"summary":"Queue AI image generation","description":"Persist an asynchronous image-generation job and return 202 immediately. Poll the returned statusUrl until completed or failed. A completed job includes the CreativeFile usable in landing pages and blog Markdown. Requests are idempotent by explicit key, or by name when no key is supplied.","tags":["Creatives"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"Image description (max 4000 chars). Be specific: subject, style, lighting, composition."},"size":{"type":"string","enum":["1024x1024","1536x1024","1024x1536","auto"],"default":"auto"},"quality":{"type":"string","enum":["low","medium","high"],"default":"high"},"name":{"type":"string","description":"Display name for the creative. Defaults to the prompt."},"idempotencyKey":{"type":"string","maxLength":200,"description":"Optional caller-stable retry key. The same key must keep the same payload."},"reportPeriod":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","description":"Monthly process period (YYYY-MM). Send together with deliverableKey to derive a stable retry key."},"deliverableKey":{"type":"string","maxLength":100,"description":"Stable deliverable identifier. Send together with reportPeriod for process-safe idempotency."},"projectId":{"type":"string","description":"Required with global dpa_ tokens; dpk_ keys infer the project."}}}}}},"responses":{"202":{"description":"Job accepted or idempotently reused; returns jobId, status, statusUrl, reused, and Retry-After."},"409":{"description":"Idempotency key was already used with a different payload."},"503":{"description":"OPENAI_API_KEY not configured in this environment"}},"x-tools":[{"name":"generate_creative_image","description":"Queue AI image generation and return immediately with jobId and statusUrl. Poll get_creative_generation_status until completed; the completed payload includes the CreativeFile fileId.","params":{"prompt":{"type":"string","required":true},"size":{"type":"string","optional":true,"default":"auto","description":"1024x1024 | 1536x1024 | 1024x1536 | auto"},"quality":{"type":"string","optional":true,"default":"high"},"name":{"type":"string","optional":true},"idempotencyKey":{"type":"string","optional":true,"description":"Stable retry key, max 200 characters."},"reportPeriod":{"type":"string","optional":true,"description":"YYYY-MM. Together with deliverableKey derives a stable process retry key."},"deliverableKey":{"type":"string","optional":true,"description":"Stable deliverable key for the period."}},"x-mcp":{"channel":"creatives","effect":"write","requiredScope":"write","approval":"none","requestShape":"direct_body","processEligible":true,"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/creatives/generate/{jobId}":{"get":{"summary":"Get creative generation status","description":"Read one project-scoped generation job. Running responses include Retry-After; completed responses include the stored CreativeFile.","tags":["Creatives"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"jobId","required":true,"schema":{"type":"string"}},{"in":"query","name":"projectId","schema":{"type":"string"},"description":"Required with global dpa_ tokens."}],"responses":{"200":{"description":"Job status: queued, running, completed, or failed."},"404":{"description":"Job not found in the selected project."}},"x-tools":[{"name":"get_creative_generation_status","description":"Poll an asynchronous creative generation job. When status is completed, creative.fileId is ready for landing blocks or blog Markdown.","params":{"jobId":{"type":"string","required":true}},"x-mcp":{"channel":"creatives","effect":"read","requiredScope":"read","approval":"none","requestShape":"json_get","processEligible":true}}]}},"/api/creatives/file/{fileId}":{"get":{"summary":"Download creative file","description":"Returns the binary of a stored creative for the project.","tags":["Creatives"],"parameters":[{"in":"path","name":"fileId","required":true,"schema":{"type":"string"},"description":"Creative fileId returned by upload_creative_file/import_creative_file"}],"responses":{"200":{"description":"Creative file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Creative not found"},"410":{"description":"Binary no longer available in storage"}},"x-tools":[{"name":"download_creative_file","description":"Download a stored creative file. The MCP returns filename, contentType, and base64 content.","params":{"fileId":{"type":"string","required":true}},"x-mcp":{"channel":"creatives","effect":"read","requiredScope":"read","approval":"none","requestShape":"file_download"}}]}},"/api/creatives/agent-query":{"post":{"summary":"Creative asset management and YouTube upload","description":"Manage campaign creatives (videos/images): list, import from URL or base64, validate videos per Google Ads channel, and upload videos to the project's connected YouTube channel as unlisted. Agents use this before creating YOUTUBE_VIDEO assets and Demand Gen video ads via /api/google-ads/agent-mutate.","tags":["Creatives"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}}},"x-tools":[{"name":"list_creative_files","description":"List the project's creative files (videos/images) with safe metadata, parsed video info, sha256 and youtubeVideoId when already uploaded to YouTube. Read-only.","params":{"kind":{"type":"string","optional":true,"enum":["video","image"]},"limit":{"type":"number","optional":true,"default":50,"description":"Clamped between 1 and 100."}},"x-mcp":{"channel":"creatives","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_creative_file","description":"Get one creative file with metadata and availability on disk. Read-only.","params":{"fileId":{"type":"string","required":true}},"x-mcp":{"channel":"creatives","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"import_creative_file","description":"Import a creative from a public remote URL (streamed with SSRF protections and a 200 MB cap) or from base64 content. For local files use the multipart tool upload_creative_file instead. Requires write scope. Video metadata is parsed automatically.","params":{"source":{"type":"object","required":true,"description":"{ type: 'remote_url' | 'base64', value: string }"},"name":{"type":"string","optional":true},"mimeType":{"type":"string","optional":true,"description":"Required with base64 (e.g. video/mp4); with remote_url it defaults to the response content-type."}},"x-mcp":{"channel":"creatives","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"validate_video_creative","description":"Validate a stored video against a Google Ads channel target. Returns metadata (width, height, durationSeconds, aspectRatio, codec, hasAudio, bitrateKbps), blocking errors and actionable warnings. Read-only.","params":{"fileId":{"type":"string","required":true},"target":{"type":"string","optional":true,"enum":["DEMAND_GEN_VIDEO","YOUTUBE_AD","PERFORMANCE_MAX_VIDEO"],"default":"DEMAND_GEN_VIDEO"}},"x-mcp":{"channel":"creatives","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"delete_creative_file","description":"Soft-delete a creative file and remove its binary from storage. Requires write scope.","params":{"fileId":{"type":"string","required":true}},"x-mcp":{"channel":"creatives","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_youtube_connection_status","description":"Check whether the project has a YouTube channel connected via OAuth (channelId, channelTitle, oauthConnectedAt). Read-only. If not connected, returns instructions: an ADMIN must visit /api/youtube/oauth/start?projectId=...","params":{},"x-mcp":{"channel":"creatives","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"youtube_upload_video","description":"Upload a stored video creative to the project's connected YouTube channel using the resumable upload protocol. Defaults to privacyStatus 'unlisted'. Returns youtubeVideoId, youtubeUrl, privacyStatus and processingStatus, and stores youtubeVideoId on the creative. Requires write scope. Fails with an actionable YOUTUBE_NOT_CONNECTED error when no channel is connected, and with a reconnect message when the OAuth token expired.","params":{"fileId":{"type":"string","required":true},"title":{"type":"string","required":true},"description":{"type":"string","optional":true},"privacyStatus":{"type":"string","optional":true,"enum":["unlisted","private","public"],"default":"unlisted"},"madeForKids":{"type":"boolean","optional":true,"default":false},"tags":{"type":"array","optional":true},"language":{"type":"string","optional":true,"description":"BCP-47 code, e.g. 'es'."}},"x-mcp":{"channel":"creatives","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_youtube_video_status","description":"Check YouTube processing status for an uploaded video (by youtubeVideoId or by the creative fileId). Returns uploadStatus, processingStatus, progress and failure/rejection reasons. Read-only.","params":{"youtubeVideoId":{"type":"string","optional":true},"fileId":{"type":"string","optional":true,"description":"Creative already uploaded with youtube_upload_video."}},"x-mcp":{"channel":"creatives","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/processes":{"post":{"summary":"Verifiable process work queue","description":"Poll, start, claim and submit nodes in project-scoped versioned workflows. Agents complete nodes, but only DigitalPublic advances or finishes the process after deterministic verification.","tags":["Processes"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["tool"],"properties":{"tool":{"type":"string","enum":["list_process_runs","list_process_work","start_process_run","get_process_run","claim_process_node","resume_process_node","heartbeat_process_node","reconcile_sent_delivery","postpone_process_human_wait","submit_process_node_result","list_process_crm_opportunities","progress_process_crm_opportunity"]},"params":{"type":"object","additionalProperties":true}}}}}},"responses":{"200":{"description":"Process operation succeeded."},"409":{"description":"Claim conflict, expired lease, invalid state, or workflow-managed operation."}},"x-tools":[{"name":"list_process_runs","description":"Read paginated project process history across all states with cycle dates, blockers, recorded verifier results and evidence. Does not execute work or run verification. Coverage declares recorded results only; use get_process_run for node details and list_process_work for contract-checked reconciliation candidates.","params":{"taskId":{"type":"string","optional":true},"limit":{"type":"number","optional":true,"default":50},"offset":{"type":"number","optional":true,"default":0}},"x-mcp":{"channel":"processes","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_process_work","description":"List due process triggers, blockedTriggers with the exact open run that prevents a later schedule, prepared agent nodes, exact sentDeliveryReconciliations candidates and failedRunReconciliations for this project. Failed-run candidates link a verified delivery completed after the failure to close_process_run and preserve the original failure. The call safely reconciles expired reservations, invalidated delivery authorizations and unclaimed nodes pinned to an older task workflow version. A delivery candidate is only offered after project, period, audience, purpose, route, route-version, blueprint and report attachment checks pass.","params":{},"x-mcp":{"channel":"processes","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"start_process_run","description":"Atomically start a due process task. Repeating the same scheduled trigger returns the same run. Manual processes require a stable idempotencyKey.","params":{"taskId":{"type":"string","required":true},"idempotencyKey":{"type":"string","optional":true}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_process_run","description":"Read the pinned graph version, current state, node attempts, real verification evidence, events and blockers. Set compact=true to receive a small status and error summary without large node outputs.","params":{"processRunId":{"type":"string","required":true},"compact":{"type":"boolean","optional":true,"description":"Return status and node errors without large outputs or events."}},"x-mcp":{"channel":"processes","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"claim_process_node","description":"Atomically reconcile and reserve one prepared node for 30 minutes. Outdated unclaimed or blocked built-in workflow contracts fail closed or are recovered against the latest published version before claim, preserving prior evidence. Repeating the call for a live reservation owned by the same authenticated credential rotates the token and resumes that reservation without creating another attempt. Returns an opaque claimToken required for heartbeat and submission. A supervised-browser AGENT_TASK also returns a project-bound browserTask contract with the exact approved artifact hash, HTTPS start URL, fail-closed domain allowlist, stable execution id and stop conditions.","params":{"nodeRunId":{"type":"string","required":true},"instructionVersion":{"type":"string","optional":true,"description":"Required by workflows with instructionTraceRequired."},"instructionHash":{"type":"string","optional":true,"description":"SHA-256 of the instruction sources used by the heartbeat."}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"resume_process_node","description":"Resume a still-active reservation owned by the same authenticated credential after local state loss. Atomically rotates the old token and returns a new token while preserving the node attempt and hard timeout.","params":{"nodeRunId":{"type":"string","required":true}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"heartbeat_process_node","description":"Extend an active reservation by another 30 minutes without exceeding the node timeout.","params":{"nodeRunId":{"type":"string","required":true},"claimToken":{"type":"string","required":true}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reconcile_sent_delivery","description":"Adopt an authorized replacement email and attached report that already have verified SENT evidence. This operation is idempotent, never invokes the email transport, preserves previous resource ids and the reason in the process audit trail, and advances through the deterministic delivery verifier. It only accepts a run currently waiting at a human authorization gate and requires an exact project, period, audience, purpose, route, route-version and attachment match.","params":{"processRunId":{"type":"string","required":true},"emailId":{"type":"string","required":true,"description":"Replacement project email with SENT, sentAt, Message-ID and authorization evidence."},"reportId":{"type":"string","required":true,"description":"Replacement authorized and sent report referenced by the email attachment."},"reason":{"type":"string","required":true,"description":"Human-readable reason preserved in the immutable run event."}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"postpone_process_human_wait","description":"Postpone an external client or distributor HUMAN_WAIT until an exact follow-up instant. The governed operation is project-scoped and idempotent, keeps the run pinned to its workflow version and cycle, and never changes the task schedule or frequency. Internal team waits cannot be postponed.","params":{"processRunId":{"type":"string","required":true},"followUpAt":{"type":"string","required":true,"description":"Future ISO instant, up to 366 days."},"reason":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"submit_process_node_result","description":"Submit structured node success or failure with evidence. A supervised-browser task requires evidence.browserTask matching the reservation, approved hash, final allowed URL, completion time and stop condition; stopped executions cannot report success. A technical failure creates another bounded attempt while maxAttempts remain; only after exhaustion does DigitalPublic follow the failure edge. A structurally successful AGENT_TASK whose output declares operationalOutcome=BLOCKED follows the failure edge immediately without consuming technical retries, so a contractual HUMAN_WAIT can open. This completes only the claimed node.","params":{"nodeRunId":{"type":"string","required":true},"claimToken":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"result":{"type":"string","required":true,"enum":["success","failure"]},"output":{"type":"object","optional":true},"evidence":{"type":"object","optional":true,"description":"Typed evidence may reference REPORT, EMAIL, URL, or PLATFORM_OPERATION. A platform operation must be SUCCEEDED."},"usedTools":{"type":"array","optional":true,"description":"Exact registered tool names used by this node; every value must be allowed by the pinned workflow."},"errorMessage":{"type":"string","optional":true},"humanSummary":{"type":"string","optional":true,"description":"Human-readable Markdown/GFM summary, maximum 1,000 characters."},"technicalDetails":{"type":"string","optional":true,"description":"Optional technical Markdown/GFM detail kept separate from the human summary."},"resourceReferences":{"type":"array","optional":true,"description":"Typed DigitalPublic resources: [{resourceType,resourceId}]. IDs are validated in the authenticated project."}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_process_crm_opportunities","description":"Read project CRM opportunities for a claimed workflow node using explicit filters. Returns limited fields and a bounded page.","params":{"nodeRunId":{"type":"string","required":true},"claimToken":{"type":"string","required":true},"queue":{"type":"string","optional":true,"enum":["pending","in_progress","finished","spam"]},"stage":{"type":"string","optional":true},"type":{"type":"string","optional":true},"tag":{"type":"string","optional":true},"source":{"type":"string","optional":true},"q":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"nextActionBefore":{"type":"string","optional":true},"limit":{"type":"number","optional":true},"offset":{"type":"number","optional":true}},"x-mcp":{"channel":"processes","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"progress_process_crm_opportunity","description":"Progress one CRM opportunity in a claimed workflow node after a successful human checkpoint. Requires expected stage and stable idempotency key; stores CRM interaction and process event atomically.","params":{"nodeRunId":{"type":"string","required":true},"claimToken":{"type":"string","required":true},"leadId":{"type":"string","required":true},"expectedStage":{"type":"string","required":true},"stage":{"type":"string","required":true},"note":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"nextActionAt":{"type":"string","optional":true},"nextActionNote":{"type":"string","optional":true}},"x-mcp":{"channel":"processes","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/process-designer":{"post":{"summary":"Declarative process designer","description":"Design, validate, publish and instantiate project-scoped graph workflows. Mutating tools require both write and process:manage. Definitions cannot contain executable code, arbitrary HTTP calls, SQL, unregistered tools or unregistered verifiers.","tags":["Process Designer"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["tool"],"properties":{"tool":{"type":"string"},"params":{"type":"object","additionalProperties":true}}}}}},"responses":{"200":{"description":"Designer operation succeeded."},"403":{"description":"write and process:manage are required for mutations."},"409":{"description":"Stale migration preview, active execution or immutable version conflict."}},"x-tools":[{"name":"list_process_capabilities","description":"List process-eligible tools, node types, structured human checkpoints, supervised-browser evidence, conditions, verifiers and declarative contract rules. Includes wordpress_editorial_publication, wordpress_page_remediation and social_article_distribution with mandatory approval, idempotent resume, public verification and SCHEDULE_NEXT gating.","params":{},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_workflow_templates","description":"List global, group and project templates visible from the selected project.","params":{},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_workflow_template","description":"Read a visible template, ownership, origin and version history.","params":{"templateId":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_workflow_version","description":"Read one immutable workflow version with definition, configSchema, validation and hash.","params":{"versionId":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_project_process","description":"Read a project process, pinned version, graph runs, node attempts and evidence.","params":{"taskId":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"validate_workflow_definition","description":"Validate graph topology, schemas, registered capabilities, safe conditions and completion gates without saving it.","params":{"definition":{"type":"object","required":true},"configSchema":{"type":"object","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_task_process_migration","description":"Create a short-lived migration preview with exact tasks, process definitions, schedules, warnings, previewId and snapshotHash. It never starts a process.","params":{"taskIds":{"type":"array","required":true},"processes":{"type":"array","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_process_run_recovery","description":"Dry-run recovery of a waiting or blocked run onto a compatible published version. Returns preserved and invalidated evidence without sending email or applying external mutations.","params":{"processRunId":{"type":"string","required":true},"targetWorkflowVersionId":{"type":"string","required":true},"targetNodeKey":{"type":"string","required":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_process_migration","description":"Read a migration preview or its applied result.","params":{"previewId":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_project_workflow_draft","description":"Create an isolated PROJECT workflow draft, optionally derived from a visible template. An optional idempotencyKey makes retries safe. Requires write + process:manage.","params":{"name":{"type":"string","required":true},"description":{"type":"string","optional":true},"originTemplateId":{"type":"string","optional":true},"definition":{"type":"object","required":true},"configSchema":{"type":"object","required":true},"idempotencyKey":{"type":"string","optional":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"save_project_workflow_draft","description":"Save changes as a new immutable version. Optional idempotencyKey and expectedLatestVersion guard retries and concurrent edits. Requires write + process:manage.","params":{"templateId":{"type":"string","required":true},"definition":{"type":"object","required":true},"configSchema":{"type":"object","required":true},"idempotencyKey":{"type":"string","optional":true},"expectedLatestVersion":{"type":"number","optional":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"publish_project_workflow_version","description":"Validate and publish a project version for use only in its project. Optional expectedLatestVersion guards concurrent edits. Requires write + process:manage.","params":{"templateId":{"type":"string","required":true},"versionId":{"type":"string","required":true},"expectedLatestVersion":{"type":"number","optional":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_project_process","description":"Instantiate a published visible workflow with schema-validated client configuration. Does not start a run. Requires write + process:manage.","params":{"process":{"type":"object","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_project_process_config","description":"Update configuration and optionally its published workflow version when no run is active. Preserves task, history and schedule. Version changes require expectedWorkflowVersionId. Requires write + process:manage.","params":{"taskId":{"type":"string","required":true},"processConfig":{"type":"object","required":true},"workflowVersionId":{"type":"string","optional":true},"expectedWorkflowVersionId":{"type":"string","optional":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"pause_project_process","description":"Pause future scheduling for a process with no active run. Requires write + process:manage.","params":{"taskId":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"resume_project_process","description":"Resume a paused project process without starting it. Requires write + process:manage.","params":{"taskId":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"reschedule_project_process","description":"Replace the next trigger with an audited future schedule when no run is active, while preserving prior runs and their frozen periods. Requires write + process:manage.","params":{"taskId":{"type":"string","required":true},"nextRunAt":{"type":"string","required":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"cancel_process_run","description":"Cancel a non-terminal run only before tools, artifacts or an active node can produce external effects. Preserves run history and records the reason. Requires write + process:manage.","params":{"processRunId":{"type":"string","required":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_administrative_process_closure","description":"Previsualiza el cierre administrativo de un ciclo BLOCKED o WAITING_HUMAN exacto. Conserva resultado de negocio, evidencia y programación. Bloquea reservas y envíos en curso. Requiere write y process:manage.","params":{"processRunId":{"type":"string","required":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"read","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"apply_administrative_process_closure","description":"Cierra administrativamente el ciclo exacto de una previsualización vigente con autorización explícita. Preserva entregas enviadas, publicaciones, CRM, confirmaciones y verificaciones. Invalida pasos y autorizaciones futuros. Conserva programación, tareas pausadas y procesos sustitutos. Idempotencia por ciclo y control de concurrencia.","params":{"processRunId":{"type":"string","required":true},"previewId":{"type":"string","required":true},"snapshotHash":{"type":"string","required":true},"reason":{"type":"string","required":true},"humanAuthorizationReference":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"close_process_run","description":"Governedly close a BLOCKED or FAILED run, or withdraw a WAITING_AGENT or WAITING_HUMAN run with REQUIREMENT_WITHDRAWN, after an authorized human confirms its final outcome. FAILED runs whose process contract has a required communication delivery need project-scoped evidence: a confirmed SENT email with sentAt and messageId, or an authorized report with sentAt. A process contract with no required communication deliveries can close without email or report evidence. Preserves resources, failure history and evidence, skips every remaining action, invalidates unsent delivery authorizations and releases the task without sending. Recurring processes atomically advance from the closed occurrence according to their frequency; custom schedules can then use reschedule_project_process. Requires write + process:manage.","params":{"processRunId":{"type":"string","required":true},"reason":{"type":"string","required":true},"humanAuthorizationReference":{"type":"string","required":true,"description":"Auditable reference to the human decision authorizing closure."},"finalOutcome":{"type":"string","required":true,"enum":["DELIVERABLES_COMPLETED","REQUIREMENT_WITHDRAWN"]},"evidence":{"type":"object","optional":true,"description":"Required for FAILED runs only when the process contract declares a required communication delivery. Project-scoped evidence with emailId and/or reportId."}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"start_process_period","description":"Start the next scheduled occurrence early after an explicit human decision. reportPeriod and scheduledFor must match that occurrence. Uses its canonical recurring trigger key so the later scheduled trigger cannot duplicate the run. Preserves the task schedule and rejects an open previous run. Requires write + process:manage.","params":{"taskId":{"type":"string","required":true},"reportPeriod":{"type":"string","required":true,"description":"Explicit YYYY-MM report period matching the next occurrence."},"scheduledFor":{"type":"string","required":true,"description":"Exact ISO8601 nextRunAt returned by get_project_process."},"humanAuthorizationReference":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"apply_task_process_migration","description":"Atomically apply an unchanged preview, preserve history, pause replaced tasks and create processes without starting runs. Requires previewId, snapshotHash, idempotencyKey, reason and write + process:manage.","params":{"previewId":{"type":"string","required":true},"snapshotHash":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"apply_process_run_recovery","description":"Create an audited recovery run for the same frozen period, pin the task to the target version and invalidate downstream artifacts without duplicating sent email. Requires write + process:manage.","params":{"previewId":{"type":"string","required":true},"snapshotHash":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"request_workflow_promotion","description":"Request human-reviewed promotion of a clean project variant to GROUP or GLOBAL. Client identifiers are rejected before submission. Requires write + process:manage.","params":{"templateId":{"type":"string","required":true},"targetScope":{"type":"string","required":true,"enum":["GROUP","GLOBAL"]},"targetGroupId":{"type":"string","optional":true},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"process_designer","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","additionalScopes":["process:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/communications":{"post":{"summary":"Project communication routes","description":"Resolve and manage verified client-final and distributor routes. Mutations require write plus communication:manage.","tags":["Communications"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["tool"],"properties":{"tool":{"type":"string"},"params":{"type":"object","additionalProperties":true}}}}}},"responses":{"200":{"description":"Communication operation succeeded."},"403":{"description":"write and communication:manage are required for mutations."},"409":{"description":"Route is incomplete, stale or incompatible with the project mode."}},"x-tools":[{"name":"list_project_communication_routes","description":"List project mode, routing status and versioned routes.","params":{},"x-mcp":{"channel":"communications","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_project_communication_route","description":"Read one route by routeId or audience.","params":{"routeId":{"type":"string","optional":true},"audience":{"type":"string","optional":true}},"x-mcp":{"channel":"communications","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"resolve_project_communication_route","description":"Resolve recipients, identity, sender, template and report policy without sending. CRM_LEAD targets are isolated to a lead in the authorized project.","params":{"audience":{"type":"string","optional":true,"enum":["CLIENT_FINAL","DISTRIBUTOR"]},"purpose":{"type":"string","required":true,"enum":["MONTHLY_REPORT","TECHNICAL_REPORT","GENERAL_EMAIL","APPROVAL_REQUEST","COMMERCIAL_PROPOSAL","QUOTE","INFORMATION_REQUEST"]},"targetType":{"type":"string","optional":true,"enum":["STATIC_AUDIENCE","CRM_LEAD"]},"leadId":{"type":"string","optional":true},"reportType":{"type":"string","optional":true}},"x-mcp":{"channel":"communications","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"validate_project_communication_setup","description":"Validate all routes required by the project communication mode.","params":{},"x-mcp":{"channel":"communications","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_communication_identity","description":"Read one visible versioned communication identity.","params":{"identityId":{"type":"string","required":true}},"x-mcp":{"channel":"communications","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"set_project_communication_mode","description":"Set CLIENT_ONLY, DISTRIBUTOR_ONLY, FLEXIBLE, CRM_ONLY or UNCLASSIFIED. CRM_ONLY resolves each recipient from a selected project CRM lead and requires no fixed TO address.","params":{"mode":{"type":"string","required":true,"enum":["CLIENT_ONLY","DISTRIBUTOR_ONLY","FLEXIBLE","CRM_ONLY","UNCLASSIFIED"]}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_communication_identity_draft","description":"Create an isolated project identity or a new immutable version of one.","params":{"identityId":{"type":"string","optional":true},"key":{"type":"string","required":true},"brandType":{"type":"string","required":true},"displayName":{"type":"string","required":true},"defaultEmailAccountId":{"type":"string","optional":true},"defaultEmailTemplateId":{"type":"string","optional":true},"logoAssetId":{"type":"string","optional":true},"contentPolicy":{"type":"object","optional":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"publish_communication_identity_version","description":"Publish an immutable project identity version.","params":{"identityId":{"type":"string","required":true},"versionId":{"type":"string","required":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_project_communication_route","description":"Create an inactive route version. CRM_CONTACT uses CRM_LEAD and has no fixed TO recipient.","params":{"audience":{"type":"string","required":true,"enum":["CLIENT_FINAL","DISTRIBUTOR","CRM_CONTACT"]},"recipientSource":{"type":"string","optional":true,"enum":["STATIC","CRM_LEAD"]},"identityVersionId":{"type":"string","required":true},"emailAccountId":{"type":"string","optional":true},"allowedSenderAccountIds":{"type":"array","optional":true},"allowedPurposes":{"type":"array","required":true},"recipients":{"type":"array","required":true},"reportPolicies":{"type":"array","optional":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_project_communication_route","description":"Create a new immutable version of an existing audience route.","params":{"audience":{"type":"string","required":true,"enum":["CLIENT_FINAL","DISTRIBUTOR","CRM_CONTACT"]},"recipientSource":{"type":"string","optional":true,"enum":["STATIC","CRM_LEAD"]},"identityVersionId":{"type":"string","required":true},"emailAccountId":{"type":"string","optional":true},"allowedSenderAccountIds":{"type":"array","optional":true},"allowedPurposes":{"type":"array","required":true},"recipients":{"type":"array","required":true},"reportPolicies":{"type":"array","optional":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"activate_project_communication_route","description":"Publish or re-activate a route version. Sender-only compatible resources are rebased; other stale authorizations are invalidated.","params":{"routeId":{"type":"string","required":true},"versionId":{"type":"string","required":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"disable_project_communication_route","description":"Disable future use without altering history.","params":{"routeId":{"type":"string","required":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"preview_legacy_recipient_classification","description":"Validate a manual classification and return previewId, snapshotHash and expiry without changing routes.","params":{"mode":{"type":"string","required":true},"routes":{"type":"array","required":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"classify_legacy_recipients","description":"Transactionally apply a current preview, preserve history and disable the legacy route.","params":{"previewId":{"type":"string","required":true},"snapshotHash":{"type":"string","required":true},"idempotencyKey":{"type":"string","required":true}},"x-mcp":{"channel":"communications","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","additionalScopes":["communication:manage"],"workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}},"/api/agent/schedule":{"post":{"summary":"External and embedded agent task scheduling","description":"List and manage project tasks/subtasks. EXTERNAL tasks are executed by the connected agent runtime. EMBEDDED task drafts may be proposed through this API, but require human activation before DigitalPublic's internal scheduler can run them. complete_execution rejects ambiguous completions from external agents.","tags":["Scheduling"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["tool"],"properties":{"tool":{"type":"string","enum":["list_tasks","list_due_tasks","get_task","get_task_by_url","list_embedded_runs","create_task","create_embedded_task_draft","update_task","delete_task","postpone_task","start_execution","append_task_message","append_execution_message","update_task_message","delete_task_message","complete_execution"]},"params":{"type":"object","additionalProperties":true}}}}}},"responses":{"200":{"description":"Success"}},"x-tools":[{"name":"list_tasks","description":"List project tasks and subtasks.","params":{},"x-mcp":{"channel":"schedule","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_due_tasks","description":"List active tasks that are due or require a new execution date. Every handled task must finish with complete_execution or postpone_task.","params":{},"x-mcp":{"channel":"schedule","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_task","description":"Get task detail with recent executions, task messages, and the canonical taskUrl.","params":{"taskId":{"type":"string","required":true}},"x-mcp":{"channel":"schedule","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"get_task_by_url","description":"Resolve a copied DigitalPublic task URL and return the task detail with messages, instructions, executions, and canonical taskUrl. Use this when the user says only 'Ejecuta esta tarea' and provides the URL.","params":{"taskUrl":{"type":"string","required":true}},"x-mcp":{"channel":"schedule","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"list_embedded_runs","description":"List recent executions performed by DigitalPublic's embedded agent runtime for this project.","params":{"status":{"type":"string","optional":true,"enum":["QUEUED","RUNNING","WAITING_APPROVAL","WAITING_PROVIDER","BLOCKED_QUOTA","SUCCEEDED","FAILED","CANCELLED"]},"limit":{"type":"number","optional":true}},"x-mcp":{"channel":"schedule","effect":"read","requiredScope":"read","approval":"none","requestShape":"tool_params","workload":{"executionMode":"INLINE","resourceClass":"LIGHT","priority":"INTERACTIVE","costModel":"FIXED","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_task","description":"Create a task for the external agent runtime. Requires write scope.","params":{"title":{"type":"string","required":true},"description":{"type":"string","optional":true},"instructions":{"type":"string","optional":true},"parentId":{"type":"string","optional":true},"verificationMode":{"type":"string","optional":true,"enum":["LEGACY","CONTRACT"],"default":"LEGACY","description":"LEGACY is a fully supported prompt-driven simple task. CONTRACT adds typed-evidence verification."},"status":{"type":"string","optional":true,"enum":["active","paused","completed"]},"frequency":{"type":"string","optional":true,"enum":["manual","daily","weekly","every_two_weeks","monthly","every_two_months","quarterly","semiannual","annual","custom"]},"nextRunAt":{"type":"string","optional":true,"description":"Authoritative ISO8601 execution date."},"reason":{"type":"string","optional":true,"description":"Reason recorded in the scheduling audit."},"sortOrder":{"type":"number","optional":true},"serviceArea":{"type":"string","optional":true},"clientVisible":{"type":"boolean","optional":true,"default":false},"clientTitle":{"type":"string","optional":true},"clientSummary":{"type":"string","optional":true}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"create_embedded_task_draft","description":"Propose a scheduled task for DigitalPublic's embedded agent. It is always paused and in DRAFT state until a human activates it. Requires write scope.","params":{"title":{"type":"string","required":true},"description":{"type":"string","optional":true},"instructions":{"type":"string","required":true},"frequency":{"type":"string","optional":true,"enum":["manual","daily","weekly","every_two_weeks","monthly","every_two_months","quarterly","semiannual","annual","custom"]},"nextRunAt":{"type":"string","optional":true,"description":"Proposed first execution date. A human may change it while activating the draft."},"timezone":{"type":"string","optional":true,"description":"IANA timezone."},"scheduleRule":{"type":"object","optional":true},"serviceArea":{"type":"string","optional":true},"aiProfile":{"type":"string","optional":true,"enum":["ECONOMY","STANDARD","DEEP"],"description":"Model and cost profile. Defaults to STANDARD."},"reason":{"type":"string","optional":true}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"human","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_task","description":"Update project task scheduling, content, status, order, or parentId to move it in the task tree. Requires write scope.","params":{"taskId":{"type":"string","required":true},"parentId":{"type":"string","optional":true,"description":"New parent task id. Send null or empty string to move the task to the root."},"title":{"type":"string","optional":true},"description":{"type":"string","optional":true},"instructions":{"type":"string","optional":true},"status":{"type":"string","optional":true,"enum":["active","paused","completed"]},"frequency":{"type":"string","optional":true,"enum":["manual","daily","weekly","every_two_weeks","monthly","every_two_months","quarterly","semiannual","annual","custom"]},"nextRunAt":{"type":"string","optional":true,"description":"Authoritative ISO8601 date selected by the agent or human."},"reason":{"type":"string","optional":true,"description":"Reason recorded with the previous and new schedule state."},"sortOrder":{"type":"number","optional":true},"serviceArea":{"type":"string","optional":true},"clientVisible":{"type":"boolean","optional":true},"clientTitle":{"type":"string","optional":true},"clientSummary":{"type":"string","optional":true}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"delete_task","description":"Delete a project task and its subtasks/executions. Requires write scope.","params":{"taskId":{"type":"string","required":true}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"postpone_task","description":"Postpone a task that cannot be completed yet. Records a deferred execution and updates nextRunAt without changing frequency. Requires write scope.","params":{"taskId":{"type":"string","required":true},"nextRunAt":{"type":"string","required":true,"description":"Future ISO8601 date for the next check."},"reason":{"type":"string","required":true}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"start_execution","description":"Start a task execution. Requires write scope.","params":{"taskId":{"type":"string","required":true},"scheduledFor":{"type":"string","optional":true},"clientVisible":{"type":"boolean","optional":true},"clientSummary":{"type":"string","optional":true},"evidence":{"type":"object","optional":true}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"append_task_message","description":"Append a human-readable agent message to a task. Put the result and next human action in content; put identifiers, metrics, diagnostics and sanitized evidence in technicalDetails. Both support Markdown/GFM. Link DigitalPublic resources with typed resourceReferences, never hand-built internal URLs. Messages default to internal; set visibility=client only for approved partner-portal content. Requires write scope.","params":{"taskId":{"type":"string","required":true},"content":{"type":"string","required":true,"description":"Human-readable Markdown/GFM summary, maximum 1,000 characters."},"technicalDetails":{"type":"string","optional":true,"description":"Optional technical Markdown/GFM detail, maximum 15,000 characters."},"resourceReferences":{"type":"array","optional":true,"description":"Typed DigitalPublic resources: [{resourceType,resourceId}]. IDs are validated in the authenticated project."},"messageKind":{"type":"string","optional":true,"enum":["client","blobic","note"]},"visibility":{"type":"string","optional":true,"enum":["internal","client"],"default":"internal"}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"append_execution_message","description":"Append a human-readable agent message to an execution. Put the result and next human action in content; use technicalDetails for technical evidence and resourceReferences for verified internal resources. Messages default to internal. Requires write scope.","params":{"executionId":{"type":"string","required":true},"content":{"type":"string","required":true,"description":"Human-readable Markdown/GFM summary, maximum 1,000 characters."},"technicalDetails":{"type":"string","optional":true,"description":"Optional technical Markdown/GFM detail, maximum 15,000 characters."},"resourceReferences":{"type":"array","optional":true,"description":"Typed DigitalPublic resources: [{resourceType,resourceId}]."},"messageKind":{"type":"string","optional":true,"enum":["client","blobic","note"]},"visibility":{"type":"string","optional":true,"enum":["internal","client"],"default":"internal"}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"update_task_message","description":"Update a task or execution message. Human-readable summary, technical details and typed resource references are independently editable. Requires write scope. Author fields are immutable.","params":{"messageId":{"type":"string","required":true},"content":{"type":"string","optional":true,"description":"Human-readable Markdown/GFM summary, maximum 1,000 characters."},"technicalDetails":{"type":"string","optional":true,"description":"Optional technical Markdown/GFM detail, maximum 15,000 characters."},"resourceReferences":{"type":"array","optional":true,"description":"Typed DigitalPublic resources: [{resourceType,resourceId}]."},"messageKind":{"type":"string","optional":true,"enum":["client","blobic","note"]},"visibility":{"type":"string","optional":true,"enum":["internal","client"]}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"delete_task_message","description":"Delete a task or execution message. Requires write scope.","params":{"messageId":{"type":"string","required":true}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}},{"name":"complete_execution","description":"Finish a simple-task execution. operationalOutcome is authoritative and DigitalPublic derives technical status. Legacy status=skipped without an outcome means NO_ACTION_REQUIRED, not BLOCKED. A next-run decision is mandatory (NEXT_RUN_DECISION_REQUIRED). Contract tasks require verified typed evidence.","params":{"executionId":{"type":"string","required":true},"status":{"type":"string","optional":true,"enum":["completed","failed","skipped"],"description":"Legacy compatibility field. Prefer operationalOutcome."},"operationalOutcome":{"type":"string","optional":true,"enum":["ACTION_COMPLETED","NO_ACTION_REQUIRED","BLOCKED","FAILED"],"description":"Authoritative result. Required for contract tasks."},"summary":{"type":"string","optional":true,"description":"Human-readable Markdown/GFM summary, maximum 1,000 characters."},"technicalDetails":{"type":"string","optional":true,"description":"Optional technical Markdown/GFM detail kept separate from the human summary."},"resourceReferences":{"type":"array","optional":true,"description":"Additional typed DigitalPublic resources. REPORT, EMAIL and PLATFORM_OPERATION evidence is linked automatically."},"errorMessage":{"type":"string","optional":true},"clientVisible":{"type":"boolean","optional":true},"clientSummary":{"type":"string","optional":true},"evidence":{"type":"object","optional":true},"nextRunAt":{"type":"string","optional":true,"description":"Future ISO8601 date selected by the agent. Mutually exclusive with nextRunDecision."},"nextRunDecision":{"type":"string","optional":true,"enum":["use_frequency","close"],"description":"Required when nextRunAt is omitted. use_frequency explicitly applies a predefined cadence; close archives the task."},"nextRunReason":{"type":"string","optional":true,"description":"Required when nextRunDecision='close' to record why no future execution is needed."}},"x-mcp":{"channel":"schedule","effect":"write","requiredScope":"write","approval":"none","requestShape":"tool_params","workload":{"executionMode":"AUTO","resourceClass":"STANDARD","priority":"NORMAL","costModel":"ITEMS","idempotencyMode":"READ_BEFORE_WRITE"}}}]}}}}