@fopost/mcp
Official# @fopost/mcp
MCP server for [FoPost](https://fopost.com): manage social media posts, accounts, AI usage, the inbox, contacts, broadcasts, and ads from any MCP-aware client (Claude Desktop, Cursor, ChatGPT desktop, Continue, etc.).
Runs via `npx -y @fopost/mcp`, no install step. Requires Node 18 or newer.
> **0.x release.** Tool names and arguments may still change between minor
> versions. Pin an exact version if that matters to you.
## Tools
| Tool | What it does |
| --------------------------------------- | ---------------------------------------------------------------- |
| `list_posts` | List posts in a workspace, filter by status |
| `get_post` | Fetch a post by id |
| `schedule_post` | Create a post for accounts or an account group |
| `edit_post` | Update an existing post |
| `cancel_post` | Cancel a scheduled post |
| `delete_post` | Permanently delete a post |
| `list_post_deliveries` | Per-account delivery status for a post |
| `list_accounts` | List connected social accounts, optionally by group |
| `get_account_health` | Check token freshness and rate-limit headroom |
| `list_workspaces` | List workspaces the user can access |
| `rename_account` | Set or clear an account's display name |
| `list_account_groups` | List account groups and their members |
| `get_account_group` | Fetch an account group |
| `create_account_group` | Create an account group |
| `rename_account_group` | Rename an account group |
| `set_account_group_members` | Replace the accounts in a group |
| `delete_account_group` | Delete a group (its accounts stay connected) |
| `create_telegram_connect_code` | Mint a one-time code to connect a Telegram chat |
| `get_telegram_connect_status` | Check whether a Telegram connect code was used |
| `get_telegram_bot_commands` | List the bot command menu in a Telegram chat |
| `set_telegram_bot_commands` | Replace the bot command menu in a Telegram chat |
| `clear_telegram_bot_commands` | Clear the bot command menu in a Telegram chat |
| `list_slack_channels` | List the channels a Slack account can post to |
| `list_slack_members` | List members of a Slack workspace, for DMs |
| `get_slack_identity` | Show the name and icon a Slack account posts under |
| `set_slack_identity` | Set the name and icon a Slack account posts under |
| `list_reddit_subreddits` | List the subreddits a Reddit account is in |
| `list_reddit_subreddit_rules` | List a subreddit's rules, to read before publishing |
| `list_reddit_flairs` | List a subreddit's post flairs |
| `validate_subreddit` | Check a subreddit exists and takes a post |
| `set_reddit_default_subreddit` | Set where posts go when a post names no subreddit |
| `generate_caption` | AI-generate or improve a caption (1 credit) |
| `rewrite_for_platforms` | Rewrite content per target platform (1 credit each) |
| `repurpose_url` | Turn a blog URL into N platform-optimized posts (6 credits) |
| `get_ai_credits` | Show current AI credit balance |
| `list_inbox` | List comments, mentions and DMs with filters |
| `list_inbox_threads` | List comment threads under your posts, or mentions |
| `list_inbox_conversations` | List DM conversations |
| `get_inbox_unread_count` | Count unread inbox items |
| `mark_inbox_thread_read` | Mark a comment thread or DM conversation read |
| `reply_to_inbox_item` | Reply on the platform, with media or quick replies on a DM |
| `edit_inbox_comment` | Edit your own comment on the platform |
| `update_inbox_item` | Set an item to unread, read, resolved or snoozed |
| `hide_inbox_item` | Hide a comment on the platform |
| `unhide_inbox_item` | Unhide a comment on the platform |
| `delete_inbox_item` | Delete a comment, or your own reply, on the platform |
| `like_inbox_item` | Like a comment or message on the platform |
| `unlike_inbox_item` | Remove your like |
| `repost_inbox_item` | Repost a post on X, where can_repost is true |
| `unrepost_inbox_item` | Undo your repost on X |
| `bookmark_inbox_item` | Bookmark a post on X, where can_bookmark is true |
| `unbookmark_inbox_item` | Remove your bookmark on X |
| `vote_inbox_item` | Vote up or down, or take the vote back |
| `pin_inbox_item` | Pin your own comment |
| `unpin_inbox_item` | Unpin your own comment |
| `react_to_inbox_item` | React to a DM, or remove your reaction |
| `start_inbox_conversation` | Send a new DM, or answer a comment privately |
| `set_inbox_typing` | Show or clear the typing indicator in a DM |
| `list_inbox_approvals` | List drafted replies waiting for approval |
| `approve_inbox_reply` | Approve and send a drafted reply |
| `reject_inbox_reply` | Reject a drafted reply |
| `refresh_inbox` | Poll every inbox-capable account now |
| `list_ads` | List boosts and ads created through FoPost |
| `list_external_ads` | List ads on connected ad accounts made elsewhere |
| `list_boostable_posts` | List published posts that can be boosted |
| `list_ad_sources` | List ad connections, ad accounts and pages |
| `boost_post` | Boost a published post (starts paused, needs `publish`) |
| `create_ad` | Create an ad (starts paused, needs `publish`) |
| `set_ad_status` | Pause or resume an ad (needs `publish`) |
| `refresh_ad` | Re-read delivery status and insights |
| `delete_ad` | End delivery and delete an ad (needs `publish`) |
| `list_audiences` | List saved audiences and pixels on an ad account |
| `search_ad_targeting` | Search locations, interests, behaviors and income brackets |
| `list_lead_forms` | List lead forms on connected pages |
| `list_leads` | List one page of leads from a lead form |
| `get_ad_account_tree` | Read campaigns, ad sets and ads on an ad account |
| `create_ad_campaign` | Create a campaign (starts paused, needs `publish`) |
| `get_ad_campaign` | Read one campaign |
| `update_ad_campaign` | Rename, pause or resume a campaign (needs `publish`) |
| `delete_ad_campaign` | Delete a campaign and its contents (needs `publish`) |
| `duplicate_ad_campaign` | Copy a campaign (starts paused, needs `publish`) |
| `create_ad_set` | Create an ad set (starts paused, needs `publish`) |
| `get_ad_set` | Read one ad set |
| `update_ad_set` | Change an ad set's status, budget or targeting (needs `publish`) |
| `delete_ad_set` | Delete an ad set and its ads (needs `publish`) |
| `duplicate_ad_set` | Copy an ad set (starts paused, needs `publish`) |
| `create_network_ad` | Create an ad inside an ad set (starts paused, needs `publish`) |
| `get_network_ad` | Read one ad inside an ad set |
| `update_network_ad` | Rename, pause, resume or swap an ad's creative (needs `publish`) |
| `delete_network_ad` | Delete an ad inside an ad set (needs `publish`) |
| `duplicate_network_ad` | Copy an ad (starts paused, needs `publish`) |
| `bulk_set_ad_status` | Pause or resume up to 50 objects (needs `publish`) |
| `list_ad_creatives` | List creatives on an ad account |
| `create_ad_creative` | Create an image, video or carousel creative |
| `get_ad_creative` | Read one creative |
| `delete_ad_creative` | Delete a creative |
| `get_audience` | Read one saved audience |
| `update_audience` | Rename or redescribe a saved audience |
| `delete_audience` | Delete a saved audience |
| `add_audience_users` | Add customer emails to a custom audience |
| `estimate_ad_reach` | Estimate the reach of a targeting |
| `get_ad_object_insights` | Insights for a campaign, ad set or ad |
| `get_ad_insights` | Insights for an ad created through FoPost |
| `get_lead_form` | Read one lead form |
| `archive_lead_form` | Archive a lead form |
| `list_leads_feed` | List stored leads from subscribed pages |
| `list_lead_pages` | List pages subscribed to new leads |
| `subscribe_lead_page` | Subscribe a page to new leads and backfill |
| `unsubscribe_lead_page` | Unsubscribe a page from new leads |
| `get_whatsapp_profile` | The profile on a WhatsApp number and how the platform rates it |
| `update_whatsapp_profile` | Update the profile fields the platform allows |
| `list_whatsapp_templates` | Message templates with the review status the platform assigned |
| `get_whatsapp_template_library` | The platform's pre-written templates, for adapting |
| `create_whatsapp_template` | File a template for review, from scratch or a library entry |
| `list_whatsapp_flows` | In-chat forms, with their status and validation errors |
| `get_whatsapp_flow_responses` | What people submitted through this account's flows |
| `list_whatsapp_groups` | Groups this WhatsApp number created, with their invite links |
| `get_whatsapp_account_state` | WhatsApp account review state and the number's standing |
| Tool | What it does |
| --------------------------------------- | ---------------------------------------------------------------- |
| `list_posts` | List posts in a workspace, filter by status |
| `get_post` | Fetch a post by id |
| `schedule_post` | Create a post for accounts or an account group, with local files |
| `edit_post` | Update an existing post, optionally attaching local files |
| `get_upload_limits` | Largest file the account may upload, and the allowed types |
| `cancel_post` | Cancel a scheduled post |
| `delete_post` | Permanently delete a post |
| `list_post_deliveries` | Per-account delivery status for a post |
| `list_accounts` | List connected social accounts, optionally by group |
| `get_account_health` | Check token freshness and rate-limit headroom |
| `get_account_platform_metrics` | The numbers only an account's own network reports |
| `list_workspaces` | List workspaces the user can access |
| `rename_account` | Set or clear an account's display name |
| `list_account_groups` | List account groups and their members |
| `get_account_group` | Fetch an account group |
| `create_account_group` | Create an account group |
| `rename_account_group` | Rename an account group |
| `set_account_group_members` | Replace the accounts in a group |
| `delete_account_group` | Delete a group (its accounts stay connected) |
| `create_telegram_connect_code` | Mint a one-time code to connect a Telegram chat |
| `get_telegram_connect_status` | Check whether a Telegram connect code was used |
| `get_telegram_bot_commands` | List the bot command menu in a Telegram chat |
| `set_telegram_bot_commands` | Replace the bot command menu in a Telegram chat |
| `clear_telegram_bot_commands` | Clear the bot command menu in a Telegram chat |
| `list_slack_channels` | List the channels a Slack account can post to |
| `list_slack_members` | List members of a Slack workspace, for DMs |
| `get_slack_identity` | Show the name and icon a Slack account posts under |
| `set_slack_identity` | Set the name and icon a Slack account posts under |
| `get_messaging_setting` | Read a Meta ice breakers, persistent menu or greeting setting |
| `set_ice_breakers` | Replace the prompts shown before the first message |
| `set_persistent_menu` | Replace the always-visible Messenger menu |
| `set_greeting` | Replace the Messenger greeting |
| `clear_messaging_setting` | Clear one Meta messaging-profile setting |
| `get_webhook_subscription` | Check what the network delivers to the FoPost webhook |
| `resubscribe_webhook` | Re-subscribe an account whose webhook lapsed |
| `list_discord_channels` | List the channels a Discord bot account can post to |
| `switch_discord_channel` | Move a Discord account to another channel in the same server |
| `get_discord_identity` | Show the nickname and avatar the bot wears in the server |
| `set_discord_identity` | Set the nickname and avatar the bot wears in the server |
| `list_discord_pins` | List the pinned messages in the account's channel |
| `manage_discord_message` | Delete, pin, unpin, crosspost a message or start a thread on it |
| `send_discord_dm` | Send one direct message to a member of the server |
| `list_discord_events` | List the server's scheduled events |
| `create_discord_event` | Add a scheduled event to the server |
| `update_discord_event` | Change a scheduled event |
| `delete_discord_event` | Remove a scheduled event |
| `list_discord_members` | List or search the server's members |
| `list_discord_roles` | List the server's roles |
| `create_discord_role` | Add a role to the server |
| `assign_discord_role` | Give a member a role, or take one away |
| `generate_caption` | AI-generate or improve a caption (1 credit) |
| `rewrite_for_platforms` | Rewrite content per target platform (1 credit each) |
| `repurpose_url` | Turn a blog URL into N platform-optimized posts (6 credits) |
| `get_ai_credits` | Show current AI credit balance |
| `list_inbox` | List comments, mentions and DMs with filters |
| `list_inbox_threads` | List comment threads under your posts, or mentions |
| `list_inbox_conversations` | List DM conversations |
| `get_inbox_unread_count` | Count unread inbox items |
| `mark_inbox_thread_read` | Mark a comment thread or DM conversation read |
| `reply_to_inbox_item` | Reply on the platform, with media or quick replies on a DM |
| `edit_inbox_comment` | Edit your own comment on the platform |
| `update_inbox_item` | Set an item to unread, read, resolved or snoozed |
| `hide_inbox_item` | Hide a comment on the platform |
| `unhide_inbox_item` | Unhide a comment on the platform |
| `delete_inbox_item` | Delete a comment, or your own reply, on the platform |
| `like_inbox_item` | Like a comment or message on the platform |
| `unlike_inbox_item` | Remove your like |
| `repost_inbox_item` | Repost a post on X, where can_repost is true |
| `unrepost_inbox_item` | Undo your repost on X |
| `bookmark_inbox_item` | Bookmark a post on X, where can_bookmark is true |
| `unbookmark_inbox_item` | Remove your bookmark on X |
| `pin_inbox_item` | Pin your own comment |
| `unpin_inbox_item` | Unpin your own comment |
| `react_to_inbox_item` | React to a DM, or remove your reaction |
| `start_inbox_conversation` | Send a new DM, or answer a comment privately |
| `set_inbox_typing` | Show or clear the typing indicator in a DM |
| `handover_conversation` | Pass a Messenger thread to another Meta app, or take it back |
| `list_inbox_approvals` | List drafted replies waiting for approval |
| `approve_inbox_reply` | Approve and send a drafted reply |
| `reject_inbox_reply` | Reject a drafted reply |
| `refresh_inbox` | Poll every inbox-capable account now |
| `list_contacts` | List the people behind the inbox, most recently active first |
| `get_contact` | Read one contact |
| `create_contact` | File a person by hand; folds into whoever holds the handle |
| `update_contact` | Change a name, note, channels or custom fields |
| `delete_contact` | Remove a contact; the messages stay in the inbox |
| `list_contact_conversations` | The inbox threads one contact appears in |
| `import_contacts` | Import from CSV text |
| `list_contact_fields` | The columns this workspace keeps about a contact |
| `create_contact_field` | Add a column |
| `update_contact_field` | Rename a field, change its options, or move it |
| `delete_contact_field` | Remove a field and every answer to it |
| `get_conversation_analytics` | Inbox volume and reply time per thread (needs `analytics`) |
| `list_broadcasts` | List broadcasts, newest first |
| `get_broadcast` | Read one broadcast |
| `create_broadcast` | Write one without sending it |
| `update_broadcast` | Edit a draft or scheduled broadcast |
| `send_broadcast` | Send it; closed windows are skipped (needs `publish`) |
| `cancel_broadcast` | Stop it where it stands (needs `publish`) |
| `list_broadcast_recipients` | Who it reached, who it skipped, and why |
| `delete_broadcast` | Remove it; sent messages stay in their conversations |
| `list_sequences` | List drip sequences |
| `get_sequence` | Read one sequence and its steps |
| `create_sequence` | Write one; creating it enrolls nobody |
| `update_sequence` | Edit the steps, or pause and resume it |
| `enroll_in_sequence` | Put contacts on it, by id or audience (needs `publish`) |
| `unenroll_from_sequence` | Take contacts off it (needs `publish`) |
| `list_sequence_enrollments` | Who is on it and what step they are at |
| `delete_sequence` | Remove it and every enrollment on it |
| `list_ads` | List boosts and ads created through FoPost |
| `list_external_ads` | List ads on connected ad accounts made elsewhere |
| `list_boostable_posts` | List published posts that can be boosted |
| `list_ad_sources` | List ad connections, ad accounts and pages |
| `list_ad_goals` | List the goals this connection can run right now |
| `list_ad_catalogs` | List product catalogs the connection reaches |
| `create_ad_catalog` | Create a product catalog (needs `publish`) |
| `list_catalog_products` | List one page of a catalog's products |
| `write_catalog_products` | Upsert or delete up to 500 products (needs `publish`) |
| `list_catalog_product_sets` | List the product sets a catalog ad can run from |
| `create_catalog_product_set` | Create a product set (needs `publish`) |
| `list_reach_frequency` | List reach-and-frequency predictions on an ad account |
| `search_ad_library` | Search the public ad archive, read live and never stored |
| `list_ad_account_activity` | Read an ad account's change log |
| `boost_post` | Boost a published post (starts paused, needs `publish`) |
| `create_ad` | Create an ad (starts paused, needs `publish`) |
| `set_ad_status` | Pause or resume an ad (needs `publish`) |
| `refresh_ad` | Re-read delivery status and insights |
| `delete_ad` | End delivery and delete an ad (needs `publish`) |
| `list_audiences` | List saved audiences and pixels on an ad account |
| `search_ad_targeting` | Search locations, interests, behaviors and income brackets |
| `list_lead_forms` | List lead forms on connected pages |
| `list_leads` | List one page of leads from a lead form |
| `get_ad_account_tree` | Read campaigns, ad sets and ads on an ad account |
| `create_ad_campaign` | Create a campaign (starts paused, needs `publish`) |
| `get_ad_campaign` | Read one campaign |
| `update_ad_campaign` | Rename, pause or resume a campaign (needs `publish`) |
| `delete_ad_campaign` | Delete a campaign and its contents (needs `publish`) |
| `duplicate_ad_campaign` | Copy a campaign (starts paused, needs `publish`) |
| `create_ad_set` | Create an ad set (starts paused, needs `publish`) |
| `get_ad_set` | Read one ad set |
| `update_ad_set` | Change an ad set's status, budget or targeting (needs `publish`) |
| `delete_ad_set` | Delete an ad set and its ads (needs `publish`) |
| `duplicate_ad_set` | Copy an ad set (starts paused, needs `publish`) |
| `create_network_ad` | Create an ad inside an ad set (starts paused, needs `publish`) |
| `get_network_ad` | Read one ad inside an ad set |
| `update_network_ad` | Rename, pause, resume or swap an ad's creative (needs `publish`) |
| `delete_network_ad` | Delete an ad inside an ad set (needs `publish`) |
| `duplicate_network_ad` | Copy an ad (starts paused, needs `publish`) |
| `bulk_set_ad_status` | Pause or resume up to 50 objects (needs `publish`) |
| `list_ad_creatives` | List creatives on an ad account |
| `create_ad_creative` | Create an image, video or carousel creative |
| `get_ad_creative` | Read one creative |
| `delete_ad_creative` | Delete a creative |
| `get_audience` | Read one saved audience |
| `update_audience` | Rename or redescribe a saved audience |
| `delete_audience` | Delete a saved audience |
| `add_audience_users` | Add customer emails to a custom audience |
| `estimate_ad_reach` | Estimate the reach of a targeting |
| `get_ad_object_insights` | Insights for a campaign, ad set or ad |
| `get_ad_insights` | Insights for an ad created through FoPost |
| `get_lead_form` | Read one lead form |
| `archive_lead_form` | Archive a lead form |
| `list_leads_feed` | List stored leads from subscribed pages |
| `list_lead_pages` | List pages subscribed to new leads |
| `subscribe_lead_page` | Subscribe a page to new leads and backfill |
| `unsubscribe_lead_page` | Unsubscribe a page from new leads |
| `search_knowledge` | Find the saved passages that answer a question about the brand |
| `list_knowledge_sources` | List knowledge sources and their sync status |
| `create_knowledge_source` | Save an FAQ, a note, one of your pages, or a text file |
| `update_knowledge_source` | Edit a source; changing its text re-indexes it |
| `sync_knowledge_source` | Read a source again — a URL source is re-fetched |
| `delete_knowledge_source` | Delete a source and its indexed passages |
| `list_activity` | What happened in a workspace, newest first |
| `list_audit_events` | The security audit log: who changed access, and when |
| Tool | What it does |
| --------------------------------------- | ---------------------------------------------------------------- |
| `list_posts` | List posts in a workspace, filter by status |
| `get_post` | Fetch a post by id |
| `schedule_post` | Create a post for accounts or an account group, with local files |
| `edit_post` | Update an existing post, optionally attaching local files |
| `get_upload_limits` | Largest file the account may upload, and the allowed types |
| `cancel_post` | Cancel a scheduled post |
| `delete_post` | Permanently delete a post |
| `list_post_deliveries` | Per-account delivery status for a post |
| `list_accounts` | List connected social accounts, optionally by group |
| `get_account_health` | Check token freshness and rate-limit headroom |
| `list_workspaces` | List workspaces the user can access |
| `rename_account` | Set or clear an account's display name |
| `list_account_groups` | List account groups and their members |
| `get_account_group` | Fetch an account group |
| `create_account_group` | Create an account group |
| `rename_account_group` | Rename an account group |
| `set_account_group_members` | Replace the accounts in a group |
| `delete_account_group` | Delete a group (its accounts stay connected) |
| `create_telegram_connect_code` | Mint a one-time code to connect a Telegram chat |
| `get_telegram_connect_status` | Check whether a Telegram connect code was used |
| `get_telegram_bot_commands` | List the bot command menu in a Telegram chat |
| `set_telegram_bot_commands` | Replace the bot command menu in a Telegram chat |
| `clear_telegram_bot_commands` | Clear the bot command menu in a Telegram chat |
| `list_slack_channels` | List the channels a Slack account can post to |
| `list_slack_members` | List members of a Slack workspace, for DMs |
| `get_slack_identity` | Show the name and icon a Slack account posts under |
| `set_slack_identity` | Set the name and icon a Slack account posts under |
| `generate_caption` | AI-generate or improve a caption (1 credit) |
| `rewrite_for_platforms` | Rewrite content per target platform (1 credit each) |
| `repurpose_url` | Turn a blog URL into N platform-optimized posts (6 credits) |
| `get_ai_credits` | Show current AI credit balance |
| `list_inbox` | List comments, mentions and DMs with filters |
| `list_inbox_threads` | List comment threads under your posts, or mentions |
| `list_inbox_conversations` | List DM conversations |
| `get_inbox_unread_count` | Count unread inbox items |
| `mark_inbox_thread_read` | Mark a comment thread or DM conversation read |
| `reply_to_inbox_item` | Reply on the platform, with media or quick replies on a DM |
| `edit_inbox_comment` | Edit your own comment on the platform |
| `update_inbox_item` | Set an item to unread, read, resolved or snoozed |
| `hide_inbox_item` | Hide a comment on the platform |
| `unhide_inbox_item` | Unhide a comment on the platform |
| `delete_inbox_item` | Delete a comment, or your own reply, on the platform |
| `like_inbox_item` | Like a comment or message on the platform |
| `unlike_inbox_item` | Remove your like |
| `repost_inbox_item` | Repost a post on X, where can_repost is true |
| `unrepost_inbox_item` | Undo your repost on X |
| `bookmark_inbox_item` | Bookmark a post on X, where can_bookmark is true |
| `unbookmark_inbox_item` | Remove your bookmark on X |
| `pin_inbox_item` | Pin your own comment |
| `unpin_inbox_item` | Unpin your own comment |
| `react_to_inbox_item` | React to a DM, or remove your reaction |
| `start_inbox_conversation` | Send a new DM, or answer a comment privately |
| `set_inbox_typing` | Show or clear the typing indicator in a DM |
| `list_inbox_approvals` | List drafted replies waiting for approval |
| `approve_inbox_reply` | Approve and send a drafted reply |
| `reject_inbox_reply` | Reject a drafted reply |
| `refresh_inbox` | Poll every inbox-capable account now |
| `list_ads` | List boosts and ads created through FoPost |
| `list_external_ads` | List ads on connected ad accounts made elsewhere |
| `list_boostable_posts` | List published posts that can be boosted |
| `list_ad_sources` | List ad connections, ad accounts and pages |
| `boost_post` | Boost a published post (starts paused, needs `publish`) |
| `create_ad` | Create an ad (starts paused, needs `publish`) |
| `set_ad_status` | Pause or resume an ad (needs `publish`) |
| `refresh_ad` | Re-read delivery status and insights |
| `delete_ad` | End delivery and delete an ad (needs `publish`) |
| `list_audiences` | List saved audiences and pixels on an ad account |
| `search_ad_targeting` | Search locations, interests, behaviors and income brackets |
| `list_lead_forms` | List lead forms on connected pages |
| `list_leads` | List one page of leads from a lead form |
| `get_ad_account_tree` | Read campaigns, ad sets and ads on an ad account |
| `create_ad_campaign` | Create a campaign (starts paused, needs `publish`) |
| `get_ad_campaign` | Read one campaign |
| `update_ad_campaign` | Rename, pause or resume a campaign (needs `publish`) |
| `delete_ad_campaign` | Delete a campaign and its contents (needs `publish`) |
| `duplicate_ad_campaign` | Copy a campaign (starts paused, needs `publish`) |
| `create_ad_set` | Create an ad set (starts paused, needs `publish`) |
| `get_ad_set` | Read one ad set |
| `update_ad_set` | Change an ad set's status, budget or targeting (needs `publish`) |
| `delete_ad_set` | Delete an ad set and its ads (needs `publish`) |
| `duplicate_ad_set` | Copy an ad set (starts paused, needs `publish`) |
| `create_network_ad` | Create an ad inside an ad set (starts paused, needs `publish`) |
| `get_network_ad` | Read one ad inside an ad set |
| `update_network_ad` | Rename, pause, resume or swap an ad's creative (needs `publish`) |
| `delete_network_ad` | Delete an ad inside an ad set (needs `publish`) |
| `duplicate_network_ad` | Copy an ad (starts paused, needs `publish`) |
| `bulk_set_ad_status` | Pause or resume up to 50 objects (needs `publish`) |
| `list_ad_creatives` | List creatives on an ad account |
| `create_ad_creative` | Create an image, video or carousel creative |
| `get_ad_creative` | Read one creative |
| `delete_ad_creative` | Delete a creative |
| `get_audience` | Read one saved audience |
| `update_audience` | Rename or redescribe a saved audience |
| `delete_audience` | Delete a saved audience |
| `add_audience_users` | Add customer emails to a custom audience |
| `estimate_ad_reach` | Estimate the reach of a targeting |
| `get_ad_object_insights` | Insights for a campaign, ad set or ad |
| `get_ad_insights` | Insights for an ad created through FoPost |
| `get_lead_form` | Read one lead form |
| `archive_lead_form` | Archive a lead form |
| `list_leads_feed` | List stored leads from subscribed pages |
| `list_lead_pages` | List pages subscribed to new leads |
| `subscribe_lead_page` | Subscribe a page to new leads and backfill |
| `unsubscribe_lead_page` | Unsubscribe a page from new leads |
| `get_google_business_location` | Read a Business Profile location |
| `update_google_business_location` | Change its name, description, website or phone |
| `get_google_business_attributes` | Read its attributes, or what Google offers |
| `update_google_business_attributes` | Set attributes on the location |
| `get_google_business_menus` | Read its food menus |
| `replace_google_business_menus` | Replace the whole menu set |
| `get_google_business_services` | Read its service list |
| `replace_google_business_services` | Replace the whole service list |
| `list_google_business_media` | List the location's photos |
| `add_google_business_media` | Add a photo from the media library |
| `delete_google_business_media` | Remove a photo |
| `list_google_business_place_actions` | List the Book, Order and Reserve buttons |
| `create_google_business_place_action` | Add an action link to the listing |
| `update_google_business_place_action` | Change an action link |
| `delete_google_business_place_action` | Remove an action link |
| `get_google_business_verification` | List the ways it can be verified |
| `start_google_business_verification` | Start verifying the location |
| `complete_google_business_verification` | Finish it with the PIN Google sent |
| `get_google_business_performance` | Daily impressions, calls, clicks and search terms |
| `blog_get_settings` | Read the blog settings and publish target |
| `blog_update_settings` | Change blog settings or the publish target |
| `blog_list_keywords` | List the keyword plan |
| `blog_suggest_seeds` | Suggest search terms from the blog goal (AI credits) |
| `blog_plan_keywords` | Research search terms into suggested keywords (AI credits) |
| `blog_add_keyword` | Add a keyword to the plan |
| `blog_update_keyword` | Move, pick or dismiss a keyword |
| `blog_delete_keyword` | Remove a keyword from the plan |
| `blog_list_articles` | List articles with status and published URL |
| `blog_request_article` | Write an article from a title or keyword (AI credits) |
| `blog_get_article` | Read an article in full, body and images |
| `blog_update_article` | Edit an article or set its publish date once in review |
| `blog_regenerate_article` | Rewrite an article from scratch (AI credits) |
| `blog_submit_article` | Submit an article for approval |
| `blog_publish_article` | Approve an article in review and publish it now |
| `blog_reject_article` | Reject a draft so it never publishes |
| `blog_delete_article` | Permanently delete an article |
| `list_blogs` | List the blogs on a connected WordPress site or Shopify store |
| `list_articles` | List the articles already on a blog, drafts included |
| `get_article` | Read one article on a connected site in full |
| `create_article` | Write a new article to a blog on a connected site |
| `update_article` | Change a live article in place, never as a duplicate |
| `delete_article` | Remove an article from a connected site |
| `list_products` | List a connected store's products |
| `update_product` | Change a product on a connected store |
| `unpublish_post` | Take a published post down on every network (needs `publish`) |
| `create_connect_session` | Mint a hosted connect link for one of your end users |
| `get_connect_session` | Poll a hosted connect link for the connected account |
| `list_webhooks` | List webhooks with their events, state and failure count |
| `create_webhook` | Register an endpoint for workspace events (secret returned once) |
| `update_webhook` | Change a webhook, rotate its secret, or re-enable it |
| `delete_webhook` | Delete a webhook |
| `test_webhook` | Send a test `post.published` payload to one webhook |
| `list_webhook_deliveries` | Every delivery attempt to a webhook, newest first |
| `get_webhook_delivery` | One delivery attempt, with the payload that was sent |
| `redeliver_webhook_delivery` | Send a delivery again with the identical body |
| `list_queue_slots` | List the weekly posting slots of a workspace |
| `create_queue_slot` | Add a weekly posting slot |
| `update_queue_slot` | Change a posting slot; moved posts come back in `moved` |
| `delete_queue_slot` | Remove a posting slot; moved posts come back in `moved` |
| `get_queue_next` | The time a post added to the queue now would get |
| `preview_queue` | The next free slot occurrences, in order |
| `list_automations` | List automations with trigger type, state and run count |
| `get_automation` | Read one automation with its graph and steps |
| `list_automation_versions` | Every saved version of an automation graph, newest first |
| `get_automation_version` | The graph as it was saved at one version |
| `restore_automation_version` | Save an old version's graph as a new version on top |
## Claude Code plugin
This repo is also a Claude Code plugin. Installing it wires up FoPost's **hosted** MCP server at `https://api.fopost.com/mcp`: no API key to copy, no local process. It also adds three skills for the flows people run every week.
```bash
claude plugin marketplace add fopost/fopost-mcp
claude plugin install fopost@fopost
```
Claude Code opens your browser to sign in the first time a tool runs. Pick the workspace the assistant works in; the connection stays locked to it.
| Skill | Fires when you ask to |
| ------------------ | ------------------------------------------------------------------- |
| `schedule-a-week` | Fill next week's calendar, draft a batch of posts, top up the queue |
| `triage-the-inbox` | Triage or clear the inbox, draft replies, find what needs an answer |
| `weekly-report` | Summarise the week, recap performance, see what failed |
The hosted server serves the same tools as the FoPost Agent, and anything that publishes, schedules or sends waits for your approval.
Prefer to run the server yourself? The stdio package below is the same product, driven by an API key.
| Tool | What it does |
| -------------------------------- | ---------------------------------------------------------------- |
| `list_posts` | List posts in a workspace, filter by status |
| `get_post` | Fetch a post by id |
| `schedule_post` | Create a post for accounts or an account group |
| `edit_post` | Update an existing post |
| `get_upload_limits` | Largest file the account may upload, and the allowed types |
| `cancel_post` | Cancel a scheduled post |
| `delete_post` | Permanently delete a post |
| `list_post_deliveries` | Per-account delivery status for a post |
| `list_accounts` | List connected social accounts, optionally by group |
| `get_account_health` | Check token freshness and rate-limit headroom |
| `list_workspaces` | List workspaces the user can access |
| `rename_account` | Set or clear an account's display name |
| `list_account_groups` | List account groups and their members |
| `get_account_group` | Fetch an account group |
| `create_account_group` | Create an account group |
| `rename_account_group` | Rename an account group |
| `set_account_group_members` | Replace the accounts in a group |
| `delete_account_group` | Delete a group (its accounts stay connected) |
| `create_telegram_connect_code` | Mint a one-time code to connect a Telegram chat |
| `get_telegram_connect_status` | Check whether a Telegram connect code was used |
| `get_telegram_bot_commands` | List the bot command menu in a Telegram chat |
| `set_telegram_bot_commands` | Replace the bot command menu in a Telegram chat |
| `clear_telegram_bot_commands` | Clear the bot command menu in a Telegram chat |
| `list_slack_channels` | List the channels a Slack account can post to |
| `list_slack_members` | List members of a Slack workspace, for DMs |
| `get_slack_identity` | Show the name and icon a Slack account posts under |
| `set_slack_identity` | Set the name and icon a Slack account posts under |
| `list_pinterest_boards` | List the boards a Pinterest account can pin to |
| `create_pinterest_board` | Create a board on a Pinterest account |
| `list_youtube_playlists` | List a channel's playlists, with its default marked |
| `create_youtube_playlist` | Create a playlist on a YouTube channel |
| `set_default_youtube_playlist` | Set the playlist new videos join by default |
| `list_youtube_captions` | List the caption tracks on a published video |
| `upload_youtube_captions` | Upload an SRT or WebVTT track to a published video |
| `read_youtube_transcript` | Read one caption track back as text |
| `get_bluesky_languages` | Show a Bluesky connection's default post languages |
| `set_bluesky_languages` | Set a Bluesky connection's default post languages |
| `get_tiktok_creator_info` | Read the switches TikTok enforces at publish time |
| `search_tiktok_music` | Search TikTok's Commercial Music Library |
| `search_tiktok_locations` | Search the places a TikTok post can be tagged with |
| `lookup_tiktok_video` | Resolve a share link to one of the account's own videos |
| `search_instagram_audio` | Search the tracks a Reel can carry |
| `get_instagram_publishing_limit` | Posts left before Instagram refuses the next one |
| `list_instagram_stories` | List the stories still inside their 24 hours |
| `get_instagram_story_insights` | Read the insight set for one live story |
| `search_linkedin_mentions` | Find the organizations a LinkedIn post can mention |
| `follow_x_user` | Follow a user from a connected X account |
| `unfollow_x_user` | Unfollow a user from a connected X account |
| `get_x_post` | Look up one X post by id |
| `search_x_posts` | Search recent X posts, paged by next_token |
| `generate_caption` | AI-generate or improve a caption (1 credit) |
| `rewrite_for_platforms` | Rewrite content per target platform (1 credit each) |
| `repurpose_url` | Turn a blog URL into N platform-optimized posts (6 credits) |
| `get_ai_credits` | Show current AI credit balance |
| `list_inbox` | List comments, mentions and DMs with filters |
| `list_inbox_threads` | List comment threads under your posts, or mentions |
| `list_inbox_conversations` | List DM conversations |
| `get_inbox_unread_count` | Count unread inbox items |
| `mark_inbox_thread_read` | Mark a comment thread or DM conversation read |
| `reply_to_inbox_item` | Reply on the platform, with media or quick replies on a DM |
| `edit_inbox_comment` | Edit your own comment on the platform |
| `update_inbox_item` | Set an item to unread, read, resolved or snoozed |
| `hide_inbox_item` | Hide a comment on the platform |
| `unhide_inbox_item` | Unhide a comment on the platform |
| `delete_inbox_item` | Delete a comment, or your own reply, on the platform |
| `like_inbox_item` | Like a comment or message on the platform |
| `unlike_inbox_item` | Remove your like |
| `repost_inbox_item` | Repost a post on X, where can_repost is true |
| `unrepost_inbox_item` | Undo your repost on X |
| `bookmark_inbox_item` | Bookmark a post on X, where can_bookmark is true |
| `unbookmark_inbox_item` | Remove your bookmark on X |
| `pin_inbox_item` | Pin your own comment |
| `unpin_inbox_item` | Unpin your own comment |
| `react_to_inbox_item` | React to a DM, or remove your reaction |
| `start_inbox_conversation` | Send a new DM, or answer a comment privately |
| `set_inbox_typing` | Show or clear the typing indicator in a DM |
| `list_inbox_approvals` | List drafted replies waiting for approval |
| `approve_inbox_reply` | Approve and send a drafted reply |
| `reject_inbox_reply` | Reject a drafted reply |
| `refresh_inbox` | Poll every inbox-capable account now |
| `list_ads` | List boosts and ads created through FoPost |
| `list_external_ads` | List ads on connected ad accounts made elsewhere |
| `list_boostable_posts` | List published posts that can be boosted |
| `list_ad_sources` | List ad connections, ad accounts and pages |
| `boost_post` | Boost a published post (starts paused, needs `publish`) |
| `create_ad` | Create an ad (starts paused, needs `publish`) |
| `set_ad_status` | Pause or resume an ad (needs `publish`) |
| `refresh_ad` | Re-read delivery status and insights |
| `delete_ad` | End delivery and delete an ad (needs `publish`) |
| `list_audiences` | List saved audiences and pixels on an ad account |
| `search_ad_targeting` | Search locations, interests, behaviors and income brackets |
| `list_lead_forms` | List lead forms on connected pages |
| `list_leads` | List one page of leads from a lead form |
| `get_ad_account_tree` | Read campaigns, ad sets and ads on an ad account |
| `create_ad_campaign` | Create a campaign (starts paused, needs `publish`) |
| `get_ad_campaign` | Read one campaign |
| `update_ad_campaign` | Rename, pause or resume a campaign (needs `publish`) |
| `delete_ad_campaign` | Delete a campaign and its contents (needs `publish`) |
| `duplicate_ad_campaign` | Copy a campaign (starts paused, needs `publish`) |
| `create_ad_set` | Create an ad set (starts paused, needs `publish`) |
| `get_ad_set` | Read one ad set |
| `update_ad_set` | Change an ad set's status, budget or targeting (needs `publish`) |
| `delete_ad_set` | Delete an ad set and its ads (needs `publish`) |
| `duplicate_ad_set` | Copy an ad set (starts paused, needs `publish`) |
| `create_network_ad` | Create an ad inside an ad set (starts paused, needs `publish`) |
| `get_network_ad` | Read one ad inside an ad set |
| `update_network_ad` | Rename, pause, resume or swap an ad's creative (needs `publish`) |
| `delete_network_ad` | Delete an ad inside an ad set (needs `publish`) |
| `duplicate_network_ad` | Copy an ad (starts paused, needs `publish`) |
| `bulk_set_ad_status` | Pause or resume up to 50 objects (needs `publish`) |
| `list_ad_creatives` | List creatives on an ad account |
| `create_ad_creative` | Create an image, video or carousel creative |
| `get_ad_creative` | Read one creative |
| `delete_ad_creative` | Delete a creative |
| `get_audience` | Read one saved audience |
| `update_audience` | Rename or redescribe a saved audience |
| `delete_audience` | Delete a saved audience |
| `add_audience_users` | Add customer emails to a custom audience |
| `estimate_ad_reach` | Estimate the reach of a targeting |
| `get_ad_object_insights` | Insights for a campaign, ad set or ad |
| `get_ad_insights` | Insights for an ad created through FoPost |
| `get_lead_form` | Read one lead form |
| `archive_lead_form` | Archive a lead form |
| `list_leads_feed` | List stored leads from subscribed pages |
| `list_lead_pages` | List pages subscribed to new leads |
| `subscribe_lead_page` | Subscribe a page to new leads and backfill |
| `unsubscribe_lead_page` | Unsubscribe a page from new leads |
| `list_ad_networks` | List the ad networks and what each one supports |
| `add_audience_companies` | Add companies to a company-list audience |
| `get_ad_bid_pricing` | Quote what an audience costs at auction |
| `get_ad_supply_forecast` | Forecast what a budget would deliver |
| `list_conversion_rules` | List the conversion rules on an ad account |
| `create_conversion_rule` | Create a conversion rule |
| `get_conversion_rule` | Read one conversion rule |
| `update_conversion_rule` | Change a conversion rule |
| `delete_conversion_rule` | Turn a conversion rule off |
| `set_conversion_rule_ad_set` | Attach or detach a conversion rule and an ad set |
| `get_conversion_metrics` | Read what a conversion rule recorded |
| `send_conversion_events` | Send off-site conversions back to the network |
| `upload_ad_conversions` | Send offline conversions against a pixel |
| `list_conversion_events` | List the conversion batches sent to the network |
| `list_pixels` | List the pixels on an ad account |
| `create_pixel` | Create a pixel and get its install script |
| `get_pixel` | Read one pixel |
| `update_pixel` | Rename a pixel or change its data-use setting |
| `get_pixel_stats` | What a pixel fired over the last 28 days |
| `get_event_match_quality` | How well each pixel event matches people |
| `list_custom_conversions` | List the custom conversions on an ad account |
| `create_custom_conversion` | Create a custom conversion on a pixel |
| `delete_custom_conversion` | Delete a custom conversion |
| `get_content_decay` | How long a post keeps earning, by age band |
| `get_posting_frequency` | What each weekly posting cadence earned per post |
| `get_post_timeline` | Every metric reading held for one post, oldest first |
| `get_analytics_changes` | Readings since a cursor, for mirroring metrics elsewhere |
| `collect_post_analytics` | Refresh one post's metrics now |
| `list_native_posts` | Posts on an account that never went out through FoPost |
## Setup
### 1. Get an API key
Generate one at <https://fopost.com/dashboard/api-keys> with the scopes you need (`posts`, `publish`, `accounts`, `workspaces` are most common; `publish` is required to publish, retry or cancel a post). Inbox tools need `inbox`, and liking, pinning, reacting, editing, starting a conversation, the typing indicator, reply media and quick replies, and deleting your own reply also need `publish`; ads tools need `ads`, and `boost_post`, `create_ad`, `set_ad_status`, `delete_ad`, `bulk_set_ad_status` and every create, update, delete and duplicate tool for campaigns, ad sets and network ads also need `publish`. A boost, ad, campaign, ad set or copy starts paused unless `paused` is `false`. The analytics tools need `analytics`; `collect_post_analytics` needs `posts` too, and `list_native_posts` needs `accounts`. Blog tools read with `posts`, and `create_article`, `update_article`, `delete_article` and `update_product` also need `publish`, because a change there is visible to the site's own readers.
### 2. Add to your MCP client
#### Claude Desktop
Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"fopost": {
"command": "npx",
"args": ["-y", "@fopost/mcp"],
"env": {
"FOPOST_API_KEY": "your-api-key"
}
}
}
}
```
#### Cursor / Continue / Other
Use the same `npx -y @fopost/mcp` command with `FOPOST_API_KEY` in the environment.
## Configuration
| Variable | Required | Default |
| ---------------- | -------- | ------------------------ |
| `FOPOST_API_KEY` | yes | required |
| `FOPOST_API_URL` | no | `https://api.fopost.com` |
Self-hosted? Point `FOPOST_API_URL` at your instance.
## Example prompts
> "List my failed posts from this week and tell me which accounts are unhealthy."
> "Take this URL and turn it into a Twitter thread, a LinkedIn post, and a dev.to summary: https://example.com/blog/post"
> "How many AI credits do I have left this period?"
> "How long do my posts keep earning, and what cadence gets the most per post?"
> "Show me the metric readings for this post over time: https://x.com/acme/status/1"
## Contributing
Issues and pull requests are welcome at
[fopost/fopost-mcp](https://github.com/fopost/fopost-mcp).
```bash
npm install
npm run lint # tsc --noEmit
npm run build # tsup -> dist/
```
## License
MIT
### Google Ads
The shared ads tools work across networks. What only Google has is its own set:
`list_google_recommendations`, `get_google_optimization_score`,
`apply_google_recommendations`, `dismiss_google_recommendations`,
`list_google_keywords`, `create_google_keyword`, `set_google_keyword_status`,
`delete_google_keyword`, `google_keyword_ideas`, `list_google_search_terms`,
`list_google_negative_keywords`, `list_google_assets`, `create_google_asset`,
`list_google_asset_groups`, `list_google_local_services_leads`,
`list_google_conversion_actions`, and `run_google_ads_query` for a raw read-only GAQL
SELECT.
Each names `connection_id` and `customer_id`; the customer has to be an account the
connection's grant reaches. Changes need the `publish` scope as well as `ads`.
Applying a recommendation changes what the live account serves or bids straight
away; dismissing one only hides it.
### Blog
The blog tools run a workspace's article pipeline: `blog_get_settings` and
`blog_update_settings`, the keyword plan (`blog_list_keywords`, `blog_suggest_seeds`,
`blog_plan_keywords`, `blog_add_keyword`, `blog_update_keyword`, `blog_delete_keyword`)
and the articles written from it (`blog_list_articles`, `blog_request_article`,
`blog_get_article`, `blog_update_article`, `blog_regenerate_article`,
`blog_submit_article`, `blog_publish_article`, `blog_reject_article`,
`blog_delete_article`). An article is website content and never a social post.
Planning is goal-driven. The settings carry a `goal`, `focus_topics` and `avoid_topics`;
`blog_suggest_seeds` proposes search terms from them, and `blog_plan_keywords` researches
the terms into `suggested` keywords without touching the calendar. Setting a keyword to
`planned` picks it, and it takes the next free date. A finished draft goes to
`in_review` through `blog_submit_article`, and only then can it be published or
scheduled.
Reads, settings, keyword edits and `blog_submit_article` need the `posts` scope.
`blog_suggest_seeds`, `blog_plan_keywords`, `blog_request_article` and
`blog_regenerate_article` spend AI credits and need `ai`.
`blog_publish_article` sends the article to the target in the settings (the product blog, a
connected account, or your own website as a signed webhook) and needs `publish`; it goes
live at once and the tool says so, so a client only calls it on an explicit ask. The
website signing secret and the website test stay in the dashboard and have no tool.
TDQS
Scored across 14 tools
Post lifecycle tools are clearly distinct: schedule_post creates, edit_post updates, cancel_post cancels, delete_post removes. The AI tools have some overlap, but generate_caption, rewrite_for_platforms, and repurpose_url are differentiated by input and output scope.
Tool names consistently follow a snake_case verb_noun pattern: list_posts, get_post, schedule_post, edit_post, delete_post, list_accounts. Minor multi-word names like list_post_deliveries and rewrite_for_platforms still fit the overall convention.
14 tools is well-scoped for a social media scheduling and AI content assistant. Each tool covers a distinct operation across posts, accounts, workspaces, and AI generation without feeling bloated.
Posts have full lifecycle coverage: create/schedule, read, update, cancel, delete, list, and delivery tracking. Minor gaps exist around account connection/disconnection and workspace management, but the core scheduling workflow is complete.