What is MCP Server Access?
MCP Server Access lets you manage your PromoPilot account directly from Claude (claude.ai, Desktop and mobile), Claude Code and other MCP clients. Schedule posts, upload media, and manage content across all your connected platforms without opening a browser.
What it costs
Nothing extra. MCP Server Access is included with every PromoPilot account. Open Settings > MCP server to create a key, and see promo-pilot.com/mcp-server for a walkthrough.
Connect Claude (web, Desktop, mobile)
- In Claude, open Customize > Connectors and choose Add custom connector. On a Team or Enterprise plan an Owner adds it in Organization settings > Connectors.
- Name it PromoPilot and enter
https://promo-pilot.com/mcp/ - Choose how Claude signs in:
- Use Claude's published identity (recommended): nothing to set up in PromoPilot.
- Register automatically: Claude registers itself with PromoPilot.
- Use your own OAuth client: create one in Settings > MCP server > OAuth clients with the redirect URI
https://claude.ai/api/mcp/auth_callbackand paste its Client ID. - Request headers (beta, some organizations): choose No sign-in and add the header
authorizationwith the valueBearer YOUR_API_KEY.
- Click Add, then Connect. Sign in to PromoPilot, pick the brands Claude may use and click Allow.
- Ask Claude: "List my PromoPilot brands"
Signed-in apps are listed in Settings > MCP server > Connected apps, where you can disconnect them. Changing your password disconnects them all.
Every tool tells Claude whether it only reads or changes something. Claude runs the ones that only read straight away and asks you before one that changes, sends, publishes or spends anything.
Connect Claude Code
- Install Claude Code from claude.ai/download
- Sign in (recommended): run
claude mcp add --transport http promopilot https://promo-pilot.com/mcp/, then type/mcpin Claude Code and choose Authenticate. - Or use an API key from Settings > MCP server (shown once):
claude mcp add --transport http promopilot https://promo-pilot.com/mcp/ --header "Authorization: Bearer YOUR_API_KEY" - Test by asking Claude: "List my PromoPilot brands"
Available tools
- list_brands - See the brands your key can use
- get_brand + update_brand - Read and change everything a brand holds except its connections: name, description, target audience, brand personality, writing style, hashtags, colours, fonts, time zone, holiday country, logos (from a PNG, JPEG, WebP or GIF image in your library, up to 5 MB, saved at up to 1024px), the default campaign style and business hours
- list_brand_knowledge, save_brand_knowledge, delete_brand_knowledge - The knowledge base PromoPilot AI uses when it writes and replies (up to 500 entries of 5,000 characters)
- list_brand_services, save_brand_service, delete_brand_service - The services you provide, with prices (needs the CRM on your plan)
- list_thumbnail_styles, save_thumbnail_style, delete_thumbnail_style - Add, copy, rename, delete and pick the default thumbnail style (the look itself is designed in the thumbnail editor)
- list_email_layouts, get_email_layout, save_email_layout, delete_email_layout - The email templates replies from your inbox are sent in, HTML and CSS only: scripts, frames, forms and on... event attributes are refused (needs email domains on your plan)
- Social accounts, ad accounts and Google Analytics are connections: no tool can change them, and they are not shown with the brand. Deleting anything asks for
confirm=true. - list_social_accounts - Connected accounts for a brand
- list_content_library - Browse media assets
- upload_to_library - Upload images/videos up to 50 MB from a link
- create_upload_url + finalize_upload - Upload a file from your computer straight to your library, videos up to 2 GB. Pass
optimize=falseto keep a video exactly as it is, for example a master for YouTube - create_post - Schedule posts to Instagram, Facebook, YouTube or LinkedIn. TikTok posts are made in the Content Calendar, where TikTok requires you to choose their settings. A YouTube post needs a video and
youtube_title, and can takeyoutube_tags,youtube_category_id,youtube_privacyand a library image as its thumbnail (youtube_thumbnail_asset_id), andyoutube_altered_contentsets the "altered or synthetic content" label at upload.video_cover_mspicks the frame an Instagram Reel uses as its cover, andvideo_cover_asset_iduses a library image as the cover of an Instagram Reel (a JPEG of up to 8 MB) or a Facebook video (a JPEG or PNG of up to 10 MB) instead of a frame.add_to_storyalso posts the image or video as an Instagram or Facebook Story - list_scheduled_posts - View the brand's upcoming posts (captions shortened)
- get_post - See one post in full: the whole caption, its hashtags and the exact text the platform will receive
- get_post_insights and list_post_insights - How published posts are doing (views, reach, likes, comments, shares and saves), read live from the platform and kept for 15 minutes.
list_post_insightslists a brand's posts from the lastdays(30 unless you say), most viewed first, with totals per platform. YouTube gives views, likes and comments; Instagram gives likes and comments, plus views, reach, shares and saves when the connection may read insights; Facebook gives reactions, comments, shares of a Page post and views of a video. TikTok and LinkedIn numbers are not read yet. Every missing number says why. The REST API has the same at/api/v1/scheduling/posts/<id>/insights/and/api/v1/scheduling/insights/ - update_post - Change a scheduled post before it publishes: a new caption, new hashtags (or
remove_hashtags), a new time (scheduled_at) or a new YouTube title. It works until the post starts publishing, and the text is checked against the platform limit first. TikTok posts are changed in the Content Calendar - cancel_post - Cancel a scheduled post
- update_youtube_video - Change a video already on YouTube: make it public, unlisted or private, or set a time for YouTube to make it public (
publish_at); turn the "altered or synthetic content" label on or off; add subtitles from the text of an SRT file; set a library image as its thumbnail (thumbnail_asset_id) - list_youtube_playlists / create_youtube_playlist - See or create the playlists of the brand's YouTube channel
- add_youtube_video_to_playlist - Add a video to a playlist, by PromoPilot post id or by YouTube video id. A post not uploaded yet is added right after its upload
- post_youtube_comment - Post a comment as the channel. On a PromoPilot post it becomes the first comment: posted once the video is public, and just after the release time for a scheduled video
- create_post on YouTube also takes
youtube_playlist_idsandyoutube_first_comment, done right after the upload
YouTube's own API can't pin a comment, add an end screen or run a thumbnail Test & compare, so no tool can do them: pin the comment, add end screens and set up thumbnail tests in YouTube Studio.
CRM, inbox and playbook tools
Each acts only on the brand your key may use: a contact, deal or playbook of another brand is "not found". Deleting anything, emailing many people and switching a playbook on ask for confirm=true. People you assign must be the brand owner or a team member.
- Contacts - list_contacts, get_contact (it says whether they can be emailed now), create_contact (an email or phone already in the brand is not added twice), update_contact (only the fields you pass; custom fields are merged; do not disturb for every channel or one at a time), delete_contact, add_contact_tag, remove_contact_tag, add_contact_note, list_tags, and custom fields: list_contact_fields, save_contact_field, delete_contact_field
- Inbox and email - list_conversations, get_conversation, send_conversation_message (Instagram and Messenger replies, email replies and internal notes), send_conversation_internal_note, assign_conversation, close_conversation, and send_email_to_contact: one email from your verified domain, up to 50 an hour per brand, never to a contact marked do not disturb or opted out, or to an address that unsubscribed, bounced or complained
- Email broadcasts (needs CRM email on your plan) - list_email_broadcasts, get_email_broadcast, create_email_broadcast (a draft for all your contacts, the contacts with chosen tags, or chosen contacts), update_email_broadcast, send_email_broadcast (it first shows who would get it; sending needs
confirm=trueand your confirmation that everyone in the audience agreed to hear from you; every email has an unsubscribe link and counts against your domain's daily warm-up allowance), cancel_email_broadcast, reopen_email_broadcast, delete_email_broadcast - Pipelines - list_pipelines, get_pipeline (stages with the slugs playbook steps use), create_pipeline (your own stages, the defaults, or a ready-made pipeline from list_pipeline_templates), update_pipeline (rename, currency, default, archive), add_pipeline_stage, update_pipeline_stage, reorder_pipeline_stages, delete_pipeline_stage, pipeline_summary
- Deals - list_opportunities, get_opportunity, create_opportunity, update_opportunity, move_opportunity, mark_opportunity_won, mark_opportunity_lost, reopen_opportunity, assign_opportunity, delete_opportunity, list_contact_opportunities
- Playbooks (needs Playbooks on your plan) - list_playbook_actions and list_playbook_trigger_types explain every step and trigger; create_playbook, create_playbook_from_template (list_playbook_templates), update_playbook (name and hourly limits), save_playbook_steps, add_playbook_trigger, update_playbook_trigger, delete_playbook_trigger (an inbound webhook trigger gives you its secret URL), set_playbook_enabled, archive_playbook. Steps are checked before they are saved: unknown steps, settings a step never reads, branches to missing steps, people outside your team and private web addresses are refused.
- test_playbook - Runs the steps once for a contact: emails, messages, webhooks and AI steps are shown with their merge fields filled in, not sent; changes to tags, fields and deals are listed, then undone; no other playbook starts
- Running playbooks - start_playbook_for_contact, start_playbook_for_contacts (up to 1,000, spread out per hour), list_playbook_runs, get_playbook_run, cancel_playbook_run, cancel_playbook_runs, and the email templates email steps can use: list_playbook_email_templates, save_playbook_email_template, delete_playbook_email_template
Ads tools
Available to administrators while the Ad Manager is in preview. Read: list_ad_accounts, list_campaigns, get_roas_report, list_lead_forms, list_lead_events, get_contact_attribution. Audiences: list_audiences, create_audience, sync_audiences, refresh_audience, delete_audience. Promoted posts: list_boosts, get_boost, create_boost (staged paused), boost_action. Create Ad wizard: plan_wizard_ad (AI, 3 credits), create_wizard_ad (goals include Page likes), update_wizard_ad, get_wizard_ad, list_wizard_ads, stage_wizard_ad (paused), wizard_ad_action. Ads settings: get_ads_settings, update_ads_settings (the EU transparency names ads shown in the EU need). Campaigns: list_draft_campaigns, get_campaign, update_adset (changes a live ad set on Meta), push_campaign (paused). Campaigns synced from Meta: list_campaigns (budget, delivery and CRM conversions, days=7 or 30), open_meta_campaign (imports once), meta_campaign_action (pause, or activate with confirm), update_meta_campaign_budget (confirm), campaign_object_action (pause or activate the campaign, an ad set or an ad), refresh_campaign_from_meta. Finding and building ads: list_ads (every ad the brand runs with its status and delivery), create_adset (budget, countries, ages, gender, placements, audiences, goal, form or pixel), create_ad (from a library asset with headline, text, link and button, or reusing a creative), copy_adset, update_adset. Meta creatives cannot be edited: to change an ad, add a new one and pause the old. Analysing ads: get_ad_insights (daily delivery with totals, previous period, change and a verdict), analyze_campaign (every ad set and ad ranked, with next steps), analyze_ads (every ad the brand runs, ranked), get_insights_breakdown (age, gender, placement, platform, country, region or device, live from Meta), refresh_insights (up to 90 days of history).
Running promoted posts and wizard ads: boost_action and wizard_ad_action pause, resume, sync (the latest numbers and verdict from Meta now), set_end (a new end date, or a number of days from now: Meta stops the ad then) and set_auto_stop (advisory flags an ad that underperforms, enforce pauses it). Campaign ad sets take an end_time in update_adset and create_adset, and a lifetime budget needs one; on an ad set already on Meta, a new budget or end time needs confirm=true. They also take auto_stop_mode (off, advisory or enforce): after each insights sync every ad in the set is judged on the same rules, advisory flags a failing ad and enforce also pauses it, once. get_campaign and list_ads show each verdict.
Anything that makes Meta spend money (activate, resume, scale, a budget change, a new end date) or is irreversible (deleting an audience, pushing to Meta) must be called with confirm=true. Keys are limited to 240 requests a minute.
Website analytics tools
Google Analytics, in limited preview. get_google_analytics_status shows whether the brand has Google Analytics connected, which property it reads and when it last synced. get_google_analytics_report returns sessions, key events and revenue for 7, 30 or 90 days: in total, from social, per platform, per channel and per campaign, with CRM leads when your plan includes the CRM. sync_google_analytics asks for a fresh copy (once every 2 minutes). Connecting Google Analytics needs Google's sign-in, so it happens on the Website traffic page in the web app. get_roas_report also shows what Google Analytics recorded for each Meta campaign.
Google Ads tools
In limited preview. get_google_ads_status shows whether the brand has Google Ads connected, which account it reads and when it last synced. get_google_ads_report returns spend, clicks, conversions, conversion value and ROAS for 7, 30 or 90 days, with the busiest campaigns and a daily series. list_google_ads_campaigns lists every campaign with its status, budget and results, and get_google_ads_campaign adds its ad groups, ads and their review status. sync_google_ads asks for a fresh copy (once every 2 minutes). Connecting Google Ads needs Google's sign-in, so it happens on the Ads > Accounts page in the web app. promote_youtube_video shows a YouTube video as a YouTube ad, created paused in Google Ads; list_youtube_promotions and get_youtube_promotion read promotions, and youtube_promotion_action activates, pauses, resumes, stops, moves the end date (activate, resume and set_end need confirm=true), switches auto-stop or refreshes the numbers.
Troubleshooting
- "Invalid API key" - Check you copied the full key (starts with mcp_, 36 chars)
- "MCP access is not enabled for this account" - MCP ships with every account, so this only appears if an administrator switched it off for your plan. Write to support.
- "Brand not found" - Use list_brands to get your brand IDs first. A key made for one brand only works for that brand: to use another, create a key for it or for all brands
- "No connected account" - Connect the platform under Brand & Accounts > Social accounts