Skip to main content
Glama

Trillboards DOOH Advertising

create_media_buy

[AdCP Media Buy] Create a media buy (campaign) from an AdCP buy specification.

Creates a campaign that targets DOOH screens based on the provided specification. Returns a media_buy_id for tracking and a creative_deadline for asset submission.

WHEN TO USE:

  • Executing a programmatic DOOH buy via an AI agent

  • Creating campaigns from DSP trading desk agents

  • Automated media buying workflows

RETURNS:

  • media_buy_id: Unique identifier for this media buy

  • campaign_id: Internal campaign identifier

  • creative_deadline: Deadline for creative asset submission

  • targeting_summary: What was targeted

  • budget_summary: Budget allocation details

EXAMPLE: User: "Buy retail screens in NYC at $5 CPM for next week" create_media_buy({ name: "NYC Retail Week 12", buy_spec: { venue_types: ["retail"], geo: { city: "New York", state: "NY" }, budget: { daily_usd: 500, bid_cpm: 5.0 }, schedule: { start_date: "2026-03-16", end_date: "2026-03-22" } }, creative: { url: "https://cdn.example.com/creative.mp4", type: "video", duration_seconds: 15 }, buyer_ref: "agency-order-12345" })

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoMedia buy name
brandNoBrand reference
contextNo
buy_specNoBuy specification (legacy)
creativeNo
end_timeNoISO 8601 end time
packagesNoAdCP product packages to buy
buyer_refNoExternal reference ID from the buyer/agency
start_timeNoISO 8601 start time
total_budgetNo
idempotency_keyNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose that the tool creates a campaign and returns media_buy_id, campaign_id, creative_deadline, targeting_summary, and budget_summary. However, it omits important behavioral details such as whether this commits spend, executes the buy immediately, is asynchronous, or has idempotency implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, WHEN TO USE, RETURNS, and a concrete example. It is somewhat long but each section adds value and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 11-parameter nested tool with no output schema and no annotations, the description gives a helpful example and return summary, but still leaves gaps around required versus optional fields, package-based vs legacy buy_spec usage, and execution/confirmation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 64%, so the schema documents many parameters. The example adds meaningful structure for buy_spec, creative, geo, budget, schedule, and buyer_ref, but the description does not clarify packages, total_budget, start_time/end_time, idempotency_key, or how the legacy buy_spec relates to the newer package-based fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific verb and resource: create a media buy (campaign) from an AdCP buy specification, targeting DOOH screens. It is specific about what the tool does, though it does not explicitly distinguish itself from the sibling create_campaign beyond the AdCP/DOOH context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The WHEN TO USE section gives clear contexts: AI-agent-driven programmatic DOOH buys, DSP trading desk agents, and automated media buying workflows. It does not explicitly state when not to use it or compare against alternatives like create_campaign or update_media_buy, but the provided guidance is concrete and useful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

B3.3/5.0
Disambiguation2/5

There are exact duplicates (get_task_status/tasks_get, list_tasks/tasks_list) and several overlapping analytics, attribution, and semantic search clusters (get_attention_metrics vs get_creative_attention vs get_social_attention; find_similar_moments vs semantic_search_observations; get_campaign_attribution vs get_multi_touch_attribution vs get_roas). Detailed descriptions help, but with 83 tools an agent will frequently struggle to pick the right one.

Naming Consistency3/5

Most tools follow a snake_case verb_noun pattern (list_devices, create_campaign, delete_webhook), but there are notable inconsistencies: list_* and get_* are used interchangeably for list operations, attention tools mix conventions (get_attention_metrics vs get_creative_attention vs get_social_attention), and the legacy tasks_get/tasks_list names break the established get_task_status/list_tasks pattern.

Tool Count1/5

83 tools is an extreme count for a single MCP server, spanning device management, sensing, campaigns, media buys, attribution, webhooks, billing, API discovery, and AdCP protocol concerns. This is a broad API surface dump rather than a focused tool set, and it would be far better split into several coherent servers.

Completeness2/5

Despite the enormous surface, core campaign lifecycle is incomplete: create_campaign explicitly tells the agent to use update_campaign to activate a campaign, but no update_campaign tool exists, and there are no list/delete campaign tools. Significant capabilities exist for analytics, attribution, and webhooks, but the primary advertising workflow has a dead end.

Resources