Skip to main content
Glama

Import ad spend

import_spend

Imports campaign- or creative-level spend rows for an app and network into AttriKit to track ad costs and reconcile reporting.

Instructions

Import campaign or creative-level spend rows.

Input Schema

NameRequiredDescriptionDefault
rowsYes
notesNo
app_idYesThe AttriKit app id.
sourceNo
networkYes
currencyYes
covers_toYes
account_refNo
covers_fromYes
completenessNo
idempotency_keyNoStable retry key for this exact mutation.
report_timezoneNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.0.0

TDQS

C2.6/5.0
Behavior2/5

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

Annotations only flag this as a non-destructive, non-idempotent, open-world write. The description adds nothing about the behavior that matters most for a spend import: whether rows for an overlapping date range are replaced, merged, or appended, and what happens on partial failure of a batch. It also omits the 5,000-row ceiling and the covers_from/covers_to range contract.

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

Conciseness3/5

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

One clean, front-loaded sentence with zero padding, which is fine structurally, but at this length the brevity is under-specification rather than economy. There is no wasted word, yet almost no word that does real work either.

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

Completeness2/5

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

For a 12-parameter, 6-required batch-mutation tool with no output schema and near-zero schema description coverage, one sentence leaves the agent without what it needs to call this correctly. The reader learns the resource but not the date-range contract, the currency/network constraints, or the retry semantics.

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

Parameters2/5

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

Schema description coverage is only 17% across 12 parameters, so the description carries the burden and does essentially nothing — it neither explains the six required date/currency/range fields nor the partial-vs-final 'completeness' enum, the 'source' enum, or the retry-only 'idempotency_key'. Its single clause about campaign/creative level is the only parameter-adjacent signal it contributes.

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?

States a specific verb and resource: import spend rows at campaign or creative granularity. An agent can grasp what the tool does, but the description never distinguishes it from the sibling 'pull_network_spend' (which fetches spend from the network rather than pushing rows in), so the boundary requires opening the schema to infer.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, no exclusions. The high-value context — that campaign_id must be an AttriKit campaign UUID read from list_campaigns rather than a network id, and that the idempotency_key exists for safe retries — is buried in the schema or absent entirely, never surfaced in the description.

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