We asked Claude to build an MCP server for Antebyte
Tech · June 28, 2026
Antebyte can be driven from an AI assistant: campaigns created, budgets moved, impression data queried, all from a chat. That works because the platform has an MCP server. This post is about how we built it, which is to say: we asked Claude to build it, and then we spent our time on the three decisions that make an LLM safe to hand an ad account.
What we asked for
MCP (Model Context Protocol) is the open standard that lets an assistant call tools on an external system. We pointed Claude at Antebyte's data model and asked for a minimal but complete tool surface over an advertiser account. What came back, after iteration, is thirteen tools in four groups: read account state, build campaigns, steer delivery, and interrogate impression data. Small enough to hold in your head, complete enough to run the whole account.
The interesting part was never the plumbing. It was deciding what an assistant must not be able to do.
Decision one: there is no payment tool
The model cannot add a card. Billing setup is a secure form a human fills in; the assistant can read a single boolean, billing_ready, and nothing else about payment. There is no tool that accepts card details, so a confused or manipulated model has nothing to misuse. The most sensitive step in the account stays out of the loop by construction.
Decision two: the server enforces the rules, not the prompt
An assistant can ask to launch a campaign. If billing is not set up, set_campaign_status returns billing_required, no matter how the request is phrased. The guard lives server-side, where it cannot be talked out of. Prompts are suggestions; the API is policy. Anything we genuinely need to be true is enforced where the model cannot reach.
Decision three: composable tools instead of bulk endpoints
Early drafts had tools like "pause all ad groups matching a filter." We removed them. The surface ships small, single-purpose tools instead: "pause every ad group clearing over $40" becomes list_ad_groups(cpm_gt=40) followed by update_ad_group on each row. The model composes the steps, each step is small enough to audit, and the blast radius of any single call stays bounded. Bulk convenience is exactly the property you do not want in a tool an LLM drives.
One more convention runs through everything: money is stored as integer cents and only becomes dollars at the API boundary, so no floating-point arithmetic ever touches a balance.
Where it stands
The server started as a Python reference. It now runs in TypeScript on the official MCP SDK, served over Streamable HTTP at api/mcp, authenticated with a bearer token scoped to your account. You add it to your assistant's connectors, and "set up a $500-a-day CTV campaign for the new spot and tell me what it bought" becomes a thing you can type.
You can read more on the MCP page. Works with Claude and any MCP-compatible assistant.