STDIO MCP SERVER / META GRAPH

Seven named tools.
One narrow write path.

Seven named tools let an agent inspect Instagram and campaign performance. A campaign mutation needs a saved plan, a separate approval, a fresh-state check, and a verified provider response.

Inspect the tool roster ↓
CAMPAIGN CHANGE PLAN example / expires in 15m
account configured ad account
campaign demo-789
field status
current ACTIVE
↓ reviewer checks the exact change
proposed PAUSED

Fictional IDs. This page never contacts Meta.

01 / THE INTERFACE

No arbitrary Graph POST exposed to the agent.

The public server has five read operations and two scoped write operations. Its original Inker ancestor had a generic Graph escape hatch; this release removed it.

Read Instagram

list_instagram_media Recent posts from the configured account
get_media_insights Metrics for one media ID
get_account_insights Account-level metrics

Read campaigns

list_campaigns Campaigns in the configured ad account
get_campaign_insights Daily metrics for 7 or 30 days

Change one campaign

prepare_campaign_change Check account, currency, caps, and current value; save a 15-minute plan
commit_campaign_change Claim an approved plan, send one POST, then read the field back

02 / WRITE PATH

A plan expires. Approval stays outside MCP.

The approval CLI is a separate process. Do not add it to the agent's tool list.

  1. 1

    Agent prepares

    prepare_campaign_change reads the campaign and account, verifies ownership and currency, applies configured budget caps, and stores the previous and proposed values.

  2. 2

    Person reviews

    A trusted operator checks the campaign ID, kind, value, and expiry, then runs the approval command with the same META_OPS_DB as the server.

    bun run src/approve.ts PLAN_ID 789:status:PAUSED
  3. 3

    Agent commits

    commit_campaign_change fetches the campaign again. If its previous value changed, commit stops. Otherwise it claims the plan, sends one Graph POST, and reads back the result.

03 / WHEN META DOESN'T ANSWER CLEARLY

“Uncertain” is a real state.

Once the POST starts, a timeout or failed verification may leave the campaign changed. The plan cannot be replayed. Inspect the campaign in Meta before deciding whether to prepare a new change.

Budget amounts use the ad account's minor currency unit. For BRL, 5000 is R$50. The server enforces configured daily and lifetime caps.

The host controls the access token and who may call this MCP server. The local SQLite plan database is private operational state.

Set up the server ↗ Read architecture ↗