Tools Reference
Every tool the FoPost MCP server exposes, with parameters and caveats.
Forty-one tools, in five groups. Ids are UUIDs throughout, and every tool returns the API's JSON response as text. The server exposes tools only: no MCP resources or prompts.
Posts
Need the posts scope.
list_posts
List posts in a workspace, newest first.
| Parameter | Required | Notes |
|---|---|---|
workspace_id | Yes | |
status | No | draft, pending_approval, scheduled, published, failed, or cancelled |
limit | No | 1–100, default 20 |
offset | No | Default 0 |
get_post
Fetch one post by id, with content, settings, and delivery records.
schedule_post
Create a post as a draft, scheduled, or published immediately.
| Parameter | Required | Notes |
|---|---|---|
workspace_id | Yes | |
content | Yes | The post body text |
account_ids | Yes | At least one target account |
schedule_at | No | ISO 8601. Omit to save a draft |
publish_now | No | Publishes right after creating |
media_urls | No | Already-uploaded media URLs; attached as images |
labels | No | Label ids |
With publish_now, the server creates the post and then calls the publish endpoint, returning the publish response. Media passed by URL is attached as image media. Video attachments need the API or the dashboard.
edit_post
Update a post's content, schedule_at, or labels; only the fields you pass change. One caveat: passing content replaces the post's content block, which drops any media the post carried. Accounts cannot be changed through this tool.
cancel_post / delete_post
cancel_post stops a scheduled post from publishing; the post stays. delete_post removes it permanently: it cannot be undone, so it is worth an approval step in your MCP client.
list_post_deliveries
Per-account delivery status for a post: queued, publishing, published, or failed, per account.
Accounts and workspaces
Need the accounts scope; list_workspaces needs workspaces.
list_accounts
Connected accounts in a workspace: platform, username, primary flag, connection status. Takes workspace_id.
get_account_health
Token freshness and rate-limit headroom for one account_id. The first tool to reach for when posts are failing: it tells you whether the connection has expired.
list_workspaces
Every workspace the key can reach. No parameters. Usually the first call an assistant makes.
AI
Need the ai scope, and spend AI credits.
generate_caption
Write or improve a caption. All parameters optional: current_caption to improve an existing draft, platforms for tone-aware output, char_limit, workspace_id.
get_ai_credits
The current credit balance, usage this period, and reset date. Free: reading the balance costs nothing.
rewrite_for_platforms and repurpose_url are also registered, but they reach
endpoints that require a dashboard session, so they answer 401 with an API
key. Everything else on this page works.
Inbox
Need the inbox scope. Item ids are UUIDs; approval ids are integers.
list_inbox
Inbox items (comments, mentions, DMs) newest first.
| Parameter | Required | Notes |
|---|---|---|
workspace_id | No | Restrict to one workspace |
type | No | comment, mention, or dm |
platform, account_id | No | Narrow to one network or one connected account |
state | No | unread, read, resolved, or snoozed |
post_id | No | Comments under one FoPost post |
post_external_id | No | Comments under one platform post, including posts not published through FoPost |
conversation_id | No | One DM thread |
direction | No | inbound or outbound |
q | No | Search text |
sort | No | newest, oldest, or unanswered |
page, per_page | No | per_page is 1–100 |
list_inbox_threads
Comment threads under your posts (kind = comments, the default) or posts you were tagged in (kind = mentions). Takes the same workspace_id, platform, account_id, state, q, sort, page, and per_page filters as list_inbox.
list_inbox_conversations
DM conversations across connected accounts. Same filters as list_inbox_threads, without kind.
get_inbox_unread_count
Unread items, optionally for one workspace_id.
mark_inbox_thread_read
Mark every item in a comment thread or DM conversation as read.
| Parameter | Required | Notes |
|---|---|---|
workspace_id | Yes | |
account_id | Yes | |
post_external_id | No | The comment thread |
conversation_id | No | The DM conversation |
reply_to_inbox_item
Reply to a comment, mention, or DM on the platform as the connected account. Takes id and text. A DM reply can also take media_ids (files from the media library) and quick_replies (answer buttons), where the item allows them; text is then optional with media_ids. Either one needs the publish scope.
update_inbox_item
Set an item's state (unread, read, resolved, or snoozed). Snoozing also needs snoozed_until, an ISO 8601 time in the future.
hide_inbox_item / unhide_inbox_item / delete_inbox_item
Hide a comment on the platform, show it again, or delete it there. Each takes id. delete_inbox_item also deletes a reply your account wrote, which needs the publish scope. It cannot be undone, so it is worth an approval step in your MCP client.
edit_inbox_comment
Change the text of a comment your account wrote, on the platform. Takes id and text. Needs publish.
like_inbox_item / unlike_inbox_item / pin_inbox_item / unpin_inbox_item
Like a comment or mention as the connected account (an upvote on Reddit, a favourite on Mastodon), or pin a comment your account wrote. Each takes id and needs publish.
react_to_inbox_item
React to a DM with an emoji, or pass null as reaction to remove yours. Takes id and reaction. Needs publish.
start_inbox_conversation
Open a DM. Pass account_id and handle, or comment_id to answer an inbox comment privately (how Facebook and Instagram open a DM). Takes text and optional media_ids. Needs publish.
set_inbox_typing
Show or clear the typing indicator in a DM thread. Takes conversation_id, account_id, and optional on (default true). Needs publish.
list_inbox_approvals
Drafted replies waiting for a person to approve before they are sent, optionally for one workspace_id.
approve_inbox_reply / reject_inbox_reply
Approve a drafted reply and send it, or reject it so it is never sent. Both take the approval id; approve_inbox_reply also accepts text to replace the draft before sending.
refresh_inbox
Poll every inbox-capable account in a workspace_id now and report what is new.
Ads
Need the ads scope. boost_post, create_ad, set_ad_status, and delete_ad spend money, so they need publish as well.
list_ads
Boosts and ads created through FoPost, with insights from their last refresh. Optional workspace_id.
list_external_ads
Ads on the connected ad accounts that were created elsewhere, read live. Optional workspace_id.
list_boostable_posts
Published posts that can be boosted. Optional workspace_id.
list_ad_sources
Ad connections with their ad accounts and pages: the ids boost_post and create_ad need. Optional workspace_id.
boost_post
Boost a published post as an ad. It starts paused unless paused is false.
| Parameter | Required | Notes |
|---|---|---|
workspace_id | Yes | |
connection_id | Yes | An ads connection in the workspace |
ad_account_id | Yes | act_… |
post_id | Yes | A published FoPost post |
account_id | Yes | The account the post was delivered to |
name | Yes | Up to 255 characters |
goal | Yes | engagement, traffic, awareness, or video_views |
budget | Yes | minor (ad account currency, minor units), type (daily or lifetime), optional end_at |
targeting | Yes | countries, age_min, age_max, gender; optional audience_ids, locations, interests, behaviors, income |
paused | No | Default true |
create_ad
Create a standalone ad. Same workspace_id, connection_id, ad_account_id, name, goal, budget, targeting, and paused as boost_post, plus:
| Parameter | Required | Notes |
|---|---|---|
page_id | Yes | The page the ad is published from |
text | Yes | Up to 125 characters |
headline | No | Up to 40 characters |
destination_url | No | |
media_url | No | A media library asset URL |
set_ad_status
Pause or resume an ad: id, workspace_id, and status (active or paused).
refresh_ad
Re-read an ad's delivery status and lifetime insights from the ad platform. Takes id and workspace_id.
delete_ad
End delivery and delete the ad on the ad platform. Takes id and workspace_id. It cannot be undone.
list_audiences
Saved audiences and pixels on one ad account, for targeting. Takes connection_id and ad_account_id, optional workspace_id.
search_ad_targeting
Search targeting options by name for boost_post and create_ad.
| Parameter | Required | Notes |
|---|---|---|
connection_id | Yes | |
type | Yes | country, region, city, zip, metro, interest, behavior, or income |
q | No | Up to 100 characters |
workspace_id | No |
list_lead_forms
Lead forms on the connected pages. Optional workspace_id.
list_leads
One page of leads from a form: form_id, connection_id, page_id, optional workspace_id and after. Pass the response's next_cursor back as after for the next page.
Errors
A failed call comes back as an error message, not an exception: a 403 names the missing scope, a 402 means the AI credit balance ran out, and a 429 means the key hit its rate limit. The server does not retry, so the assistant sees it immediately.
Next
Related documentation
- MCP Server
Connect Claude, Cursor, ChatGPT, or any MCP client to your FoPost workspace.
- Claude Code Plugin
Install FoPost in Claude Code in two commands, with skills for the flows you run every week.
- Media
Upload files, list the media library, and attach media to a post.
- AI
What an API key can do with AI, and where the rest of the AI features live.