Install
openclaw skills install @jeannen/x-adsCreate, edit, and report on X (Twitter) ads from an AI agent through the AdKit MCP connector: campaigns, ad groups (line items), promoted posts, account defaults, and results. Every change is saved as a draft that the user approves before it goes live. Use when the user wants to run, change, or check X or Twitter ads. Not for X ad strategy or creative advice.
openclaw skills install @jeannen/x-adsThis skill tells you how to create, edit, and report on X (Twitter) ads through AdKit. It covers the steps, not the strategy.
AdKit is one MCP connector for Meta, Google, TikTok, LinkedIn, Microsoft, Reddit, X, and Pinterest ads.
https://mcp.adkit.so, then sign in.claude mcp add --transport http adkit https://mcp.adkit.soFor other AI apps, see how to set up the AdKit MCP server for X Ads. If the AdKit tools are not available, tell the user how to connect. Then stop.
| Entity | X name | Actions |
|---|---|---|
campaigns | Campaigns | list, get, create, update |
ad-groups | Line items | list, get, create, update |
ads | Promoted posts | list, get, create, delete |
results | list (needs from and to dates) | |
accounts | list, available, connect, disconnect, update, profiles, pixels, funding-instruments | |
drafts | get, publish (review your changes, then send them) |
All calls go through adkit_manage with platform: "x". Before a call you have not made in this session, read its fields with adkit_help({ path: "manage x <entity> <action>" }). Do not guess field names. In this skill, campaigns create means entity: "campaigns", action: "create".
Project: call adkit_projects and get the projectId. Every call needs it.
Account: call adkit_status. If no X account is connected, call adkit_setup with platform: "x" and give the user the link. After they sign in, use accounts available, then accounts connect.
Account defaults: find the profile, pixel, and funding instrument with accounts profiles, accounts pixels, and accounts funding-instruments. Save them with accounts update. This change applies immediately, with no draft.
Build from the top down. Each create saves a draft. For each level, do these steps before you start the next level:
drafts get, or the link https://app.adkit.so/manage/drafts?open=<draftId>).drafts publish.The levels, in order:
campaigns create with a name, a budget, and status: "paused". A paused campaign spends nothing.ad-groups create with the campaignId, the objective, bidding, and targeting.ads create with the adGroupId and either existingPostId (promote a post that already exists) or a creative for a new post. Read adkit_help({ path: "manage x ads create" }) for the media a new post can use.Go live: campaigns update with status: "active". Publish that draft only after the user says yes. Then check with ad-groups list that the ad groups are active too.
Results: results list with a level and a date range (from and to). X requires both dates.
retryable flag. Check your drafts and the existing X objects before you retry, so you do not create the same thing twice. Report unexpected failures with adkit_feedback.platformId is the ID of the promoted post (the link between the ad group and the post). postId is the post itself.For an X feature that AdKit does not cover, use entity: "platform-api-request" with action: "mutate". The action is always mutate, also for reads. AdKit sends the request to https://ads-api.x.com/12 as it is. The user must turn on Advanced Platform Access in AdKit's Agent Permissions.
PUT for updates. Check every path and field in the X Ads API docs.adkit_feedback.{
"projectId": "<projectId>",
"entity": "platform-api-request",
"action": "mutate",
"data": {
"platform": "x",
"accountId": "<accountId>",
"endpoint": "accounts/<accountId>/campaigns",
"method": "GET",
"description": "List campaigns"
}
}
The same AdKit connector runs Meta Ads, Google Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Reddit Ads, and Pinterest Ads ads. Each platform has its own skill in this repo, for example meta-ads and google-ads.