MCP Server implementing IAB Deals API v1.0 for programmatic deal management
The IAB Deals MCP server demonstrates solid tool definition quality with consistent naming patterns, comprehensive parameter schemas, and clear descriptions. All 9 tools are explicitly registered with Zod schemas in api/server.ts. Naming follows the verb_noun convention (deals_create, deals_update, deals_send, etc.). All tools have non-empty descriptions (144-180 chars range, within the 10-1024 baseline). Parameter descriptions are present and specific. However, output schemas are not explicitly documented, responses are wrapped in a generic JSON shape without type definitions visible in the source. Error handling is implicit (Zod validation) but recovery guidance is absent from descriptions. Tool composition is clean, each tool has a single responsibility. No security issues detected (no credentials in params, auth handled server-side). Schemas use proper JSON Schema with types and enums.
Confirm/activate a deal after provider approval. Marks the deal as ACTIVE.
Create a new programmatic deal. Returns the deal in PENDING status ready to be sent to providers.
List all deals with optional filtering by status. Returns paginated results.
Pause an active deal. Notifies all connected providers.
Resume a paused deal. Notifies all connected providers.
Send a deal to a DSP/SSP provider for approval. Creates a buyer seat and submits to the provider.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Returns the deal in PENDING status') but no formal output type definitions are visible. LLMs cannot infer downstream field names without documented schemas.
Error handling lacks recovery guidance. Descriptions do not explain what happens on failure or what the LLM should do next (e.g., 'If you only have a deal name, call deals_list() first'). Zod validation is present but implicit.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Get the current status of a deal including all buyer seat statuses.
Update an existing deal's properties. Cannot update deals that have been sent to providers.
List all available DSP/SSP providers that deals can be sent to.
providers_list has empty input schema ({}). While this is correct, the tool description does not hint at pagination or result limits. If the provider list grows large, response context could explode.
No tool annotations for destructiveness. deals_send, deals_confirm, deals_pause, deals_resume, and deals_create all modify state, but neither description nor schema hints this to the LLM. Agents cannot distinguish safe reads from risky writes without explicit hints.
Parameter 'seatId' in deals_send lacks format hint. Description says 'Buyer seat identifier' but does not specify if it should be a UUID, email, or opaque string. LLMs may hallucinate invalid formats.