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 ↓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
Agent prepares
prepare_campaign_changereads the campaign and account, verifies ownership and currency, applies configured budget caps, and stores the previous and proposed values. -
2
Person reviews
A trusted operator checks the campaign ID, kind, value, and expiry, then runs the approval command with the same
META_OPS_DBas the server.bun run src/approve.ts PLAN_ID 789:status:PAUSED
-
3
Agent commits
commit_campaign_changefetches 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.