MCP abilities for Advanced Ads. Manage ads, placements, groups, and settings programmatically.
Three tools with complete input/output schemas and descriptions. Naming follows verb_noun pattern (list-ads, get-ad, create-ad). Descriptions are adequate (40-60 chars) but lack actionable context for LLM selection. Parameters have types and descriptions, but lack enums for constrained values (e.g., status should be enum, not free-form string). Output schemas documented but sparse. Error handling present but minimal, no recovery guidance. Tool annotations auto-generated via filter function (readonly, destructive, idempotent) which is good, but not exposed in tool metadata for MCP clients. No pagination guidance in list-ads despite accepting limit/offset.
Create a new Advanced Ads advertisement.
Get details of a specific ad.
List all Advanced Ads advertisements.
Status parameter accepts free-form string instead of enum. Description says '(publish, draft, any)' but does not enforce it. LLMs may pass invalid values like 'pending' or 'archived', causing silent failures or unexpected filtering.
Descriptions lack actionable context. 'List all Advanced Ads advertisements' does not explain WHEN to call this vs get-ad, what structure is returned, or pagination behavior. LLMs cannot distinguish between similar tools without richer descriptions.
Error handling returns bare success/failure flags with minimal context. 'Ad not found' does not suggest recovery steps (e.g., 'Try list-ads to find valid IDs'). Agents cannot self-correct without explicit guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Tool annotations (readonly, destructive, idempotent) are computed server-side but not exposed in MCP tool metadata. MCP clients cannot see these hints without parsing the WordPress Abilities API directly, breaking tool annotation pattern.
create-ad accepts 'options' as a free-form object with no schema. LLMs cannot know what keys are valid (e.g., is it 'placement_id' or 'placements'?). This invites hallucinated payloads and silent failures.