MCP tools

Each tool wraps one REST endpoint and takes that endpoint's parameters as arguments. Path, query, and body parameters are all flattened into one argument object, except where a body has several shapes: create_post and send_message take the whole body as a single post or message argument. profileId is optional everywhere and defaults to your key's profile.

Tools marked changes data act on the customer's real accounts. The one marked spends money can start paid ad delivery.

Profile

get_profile

Return the profile your key is bound to. Wraps GET /api/v1/profiles. Read-only.

update_profile

Replace the profile's name, externalId, and metadata. This is a full replace: omitted fields are cleared. Wraps PUT /api/v1/profiles/{profileId}. Changes data.

Accounts and connecting

list_accounts

List the connected Instagram, Facebook, TikTok, and YouTube accounts, optionally filtered by platform or accountId. Call this first. Wraps GET /api/v1/accounts. Read-only.

get_account

Return one account by accountId. Wraps GET /api/v1/profiles/{profileId}/accounts/{accountId}. Read-only.

refresh_accounts

Refresh the provider tokens of every account on the profile. Safe to repeat. Wraps POST /api/v1/profiles/{profileId}/accounts/refresh.

disconnect_account

Remove Adeli's credentials and cached history for one account. The account itself is not deleted on the provider, but reconnecting needs its owner to authorize again. Wraps DELETE /api/v1/profiles/{profileId}/accounts/{accountId}. Changes data. Destructive.

set_x_capabilities

Turn an X account's paid background reads, analytics and inbox, on or off. Both are off by default, because every X read is billed; neither syncs anything yet. Wraps PATCH /api/v1/profiles/{profileId}/accounts/{accountId}. Changes data.

start_connect

Start connecting an account on platform (instagram, facebook, tiktok, youtube, or x), with an optional redirectUrl. X returns 402 x_billing_required until X is enabled for your account. Returns an authUrl that the account owner opens in a browser. Wraps POST /api/v1/profiles/{profileId}/connect.

get_connect_session

Poll a session from start_connect by connectionSessionId until it is connected, failed, or expired. Wraps GET /api/v1/profiles/{profileId}/connect/{connectionSessionId}. Read-only.

Posts

list_posts

List recent Instagram, Facebook, TikTok, YouTube, and X posts, optionally filtered by platform or accountId. X posts are billed reads, so X is listed only when asked for by platform or accountId. Wraps GET /api/v1/posts. Read-only.

create_post

Publish to Instagram, Facebook, TikTok, YouTube, or X. The post argument is exactly the JSON body of POST /api/v1/posts, including its platform and accountId. For TikTok, call get_tiktok_creator_info first and prefer a public video.url to base64. TikTok videos publish publicly; post_mode: "MEDIA_UPLOAD" sends a draft to the creator's inbox instead. For YouTube, title, privacy_status, and made_for_kids are required; ask the user for the last two rather than choosing them. Until Adeli passes YouTube's API audit every upload stays private, which the result reports as privacyRestricted. Multipart uploads (POST /api/v1/posts/youtube) are REST-only. For X, text is up to 280 characters and thread adds replies; every post is billed at X's price, and a thread that fails part-way returns the posts that went live. Changes data. Spends money on X.

get_facebook_post_status

Check an asynchronous Facebook Reel or video publish by accountId and publishId. Wraps GET /api/v1/posts/facebook/status. Read-only.

get_tiktok_creator_info

Return the TikTok creator's current posting options for accountId. Wraps GET /api/v1/posts/tiktok/creator-info. Read-only.

get_tiktok_post_status

Check an asynchronous TikTok publish by accountId and publishId. The final statuses are PUBLISH_COMPLETE, SEND_TO_USER_INBOX, and FAILED. Wraps GET /api/v1/posts/tiktok/status. Read-only.

get_youtube_post_status

Check a YouTube upload by accountId and videoId (the publishId create_post returned). status is processing, published, or failed; privacyStatus is what YouTube applied. Wraps GET /api/v1/posts/youtube/status. Read-only.

delete_x_post

Delete a post from an X account by accountId and postId (its providerId). It cannot be undone, and X bills it. Wraps DELETE /api/v1/posts/x/{postId}. Changes data. Destructive.

get_x_usage

Return what your X API calls have cost this UTC month, by operation. Wraps GET /api/v1/usage/x. Read-only.

Comments

list_comments

The comments on one Instagram, Facebook, TikTok, or YouTube post, with the account's recent posts. Wraps GET /api/v1/comments. Read-only.

reply_to_comment

Reply to a comment, or comment on one of the account's own posts (Facebook, TikTok, and YouTube). Each YouTube comment write spends 50 units of a daily quota shared by every Adeli customer. Wraps POST /api/v1/comments. Changes data.

update_comment

Hide or unhide a comment, or like or unlike one on TikTok. On YouTube, hiding holds the comment for review. Wraps PATCH /api/v1/comments/{commentId}. Changes data.

delete_comment

Delete a comment permanently. TikTok deletes only the account's own comments. YouTube deletes the channel's own and rejects anyone else's; banAuthor also bans that commenter from the channel. Wraps DELETE /api/v1/comments/{commentId}. Changes data.

Messages

list_messages

Read Instagram and Facebook direct message history, optionally filtered by platform or accountId. Wraps GET /api/v1/messages. Read-only.

send_message

Send a text direct message. The message argument is exactly the JSON body of POST /api/v1/messages. Changes data.

Analytics

get_instagram_insights

Instagram account insights for accountId. Wraps GET /api/v1/analytics/instagram/account-insights. Read-only.

get_facebook_page_metrics

Facebook Page follower count, recent engagement, and 28-day Page Insights when the connection has granted read_insights. accountId defaults to the profile's Facebook connection. Wraps GET /api/v1/analytics/facebook/page-metrics. Read-only.

get_tiktok_analytics

TikTok profile and aggregate statistics for accountId. Wraps GET /api/v1/analytics/tiktok/account-analytics. Read-only.

get_tiktok_account_insights

Daily TikTok account metrics and follower demographics for a UTC date window. Wraps GET /api/v1/analytics/tiktok/account-insights. Read-only.

get_tiktok_video_insights

Counters and watch metrics for up to 20 TikTok posts. Wraps GET /api/v1/analytics/tiktok/video-insights. Read-only.

get_youtube_channel_insights

Daily YouTube views, watch time, and subscribers, the top ten videos, and viewer demographics for a UTC date window. Needs the connection to have granted analytics. Wraps GET /api/v1/analytics/youtube/channel-insights. Read-only.

get_youtube_video_insights

Views, watch time, and average view percentage for up to 50 YouTube videos. Wraps GET /api/v1/analytics/youtube/video-insights. Read-only.

Ads

Every ads tool takes an optional accountId for the Facebook connection, which defaults to the profile's Facebook account.

ads_list_accounts

List the ad accounts the Facebook connection can reach. Wraps GET /api/v1/ads/accounts. Read-only.

ads_list_businesses

The Business portfolios the Facebook connection administers — where ads_create_account can create one. Wraps GET /api/v1/ads/businesses. Read-only.

ads_create_account

Create an ad account in a portfolio from ads_list_businesses. Takes the body of POST /api/v1/ads/accounts plus a required idempotencyKey, sent as the Idempotency-Key header; retrying with the same key returns the first result. Changes data, permanently: Meta has no API to close an ad account, and its currency and time zone are fixed.

ads_get_account

One ad account's status, amount spent, spending limit, and whether a payment method is on file. Wraps GET /api/v1/ads/accounts/{adAccountId}. Read-only.

ads_update_account

Rename an ad account, or set or remove (spendCap: null) its spending limit. Wraps PATCH /api/v1/ads/accounts/{adAccountId}. Changes data.

ads_get_tree

Campaigns, ad sets, and ads for adAccountId, with metrics for an optional since–until range. Wraps GET /api/v1/ads/tree. Read-only.

ads_get_insights

Daily performance for adAccountId, or for one objectId within it. Wraps GET /api/v1/ads/insights. Read-only.

ads_list_leads

The Page's lead forms, or with formId, that form's submissions. Wraps GET /api/v1/ads/leads. Read-only.

ads_create_campaign

Create a campaign, ad set, and ad that promote a Page post, all paused. Takes the body of POST /api/v1/ads/campaigns plus a required idempotencyKey, which is sent as the Idempotency-Key header. Retrying with the same key returns the first result instead of creating a second campaign. Changes data.

ads_delete_campaign

Delete a campaign with its ad sets and ads. Wraps DELETE /api/v1/ads/campaigns/{campaignId}. Destructive and irreversible.

ads_set_status

Set an ad or ad set to ACTIVE or PAUSED. Wraps PUT /api/v1/ads/status. Spends money when set to ACTIVE.

Not exposed as tools

  • POST /api/v1/profiles — a key cannot create a profile; it always returns 403.
  • DELETE /api/v1/profiles/{profileId} — deletes the profile, its connections, and the key itself. Use the dashboard.
  • GET /api/v1/profiles/{profileId} and GET /api/v1/profiles/{profileId}/accounts — the same data as get_profile and list_accounts.