Social media MCP server API keys are bearer tokens a hosted MCP server checks on every call. In Creator OS, a key is a cos_live_... string pinned to one workspace. You create it in Settings > API keys, choose read only or read & write, and the server refuses any write attempt from a read-only key.
AI app (Claude, ChatGPT, Cursor, Codex, Windsurf, VS Code)
|
| Authorization: Bearer cos_live_...
v
+---------------------------+
| https://mcp.creatoros.ca/mcp |
| checks key -> workspace |
| checks scope -> read/write |
+-------------+-------------+
|
read tools | write tools
list_posts | create_post
analytics | reply_to_comment
v
one workspace (one set of socials)
What is an MCP server for social media and how does it authenticate?
An MCP server for social media is an endpoint an AI app connects to so the model can call tools instead of clicking a dashboard. Creator OS runs a hosted MCP server at https://mcp.creatoros.ca/mcp. Nothing to install.
Authentication is the part people skip. The server does not trust the model. It trusts the key in the request header. Three things happen before a single tool runs:
- The server reads the
Authorization: Bearer cos_live_...header. - It maps the key to one workspace, meaning one set of socials. An agency client workspace cannot be reached with another client’s key.
- It checks the key’s scope. A read-only key only sees read tools, and the API refuses writes from it.
That is the whole model. No shared admin password, no “just connect everything” button. If you want the setup walkthrough, the social media MCP server guide and the MCP docs cover the Claude and ChatGPT connector flow.
A realistic first connection in Claude: Settings > Connectors > Add custom connector, paste the URL, sign in to Creator OS, pick the workspace, choose read only or read & write. Each connection gets its own key, listed under Settings > Connected apps. That last detail matters. One connection equals one key, so one bad client can be cut off without touching the rest.
How social media MCP server API keys work: scopes, tokens, and permissions
A key is a token plus a scope plus a workspace, and all three are checked on every call. Here is the shape that matters for social media MCP server API keys.
| Piece | What it controls | What it does not control |
|---|---|---|
Token (cos_live_...) |
Proves the caller is you | What the caller may do |
| Scope (read only / read & write) | Whether write tools are exposed at all | Which platforms exist |
| Workspace pin | One set of socials, one account per platform | Team member permissions in the app |
| Destructive tool marking | The AI app asks for confirmation first | Silent deletes |
Destructive tools are flagged so the AI app asks before acting: delete post, delete comment, delete automation, delete webhook, disconnect account, delete Skool post, deny Skool member, delete ad, delete blog article. That is a guardrail at the conversation layer, not a replacement for scope. Keep the scope tight anyway.
The same key works across surfaces. The REST API, the CLI (@creatoros/cli), the Claude Code plugin and the MCP server all authenticate with it. Headless setup looks like this:
claude mcp add --transport http creatoros \
https://mcp.creatoros.ca/mcp \
--header "Authorization: Bearer cos_live_..."
The CLI checks the key before you build anything on top of it:
creatoros auth:check
creatoros profiles:list
creatoros accounts:health
If auth:check fails, stop. A broken key produces confusing tool errors downstream.
Can an MCP agent post to social media with a read-only API key?
No. A read-only key cannot post, reply, delete or spend, and the refusal happens at the API, not just in the prompt. That is the point of having the scope.
Here is the useful split for a working agent setup:
- Read-only connection for reporting, caption review, comment triage drafts, analytics pulls and best-time lookups. Tools like
get_post_analytics,get_best_time_to_post,list_commentsandlist_conversationsare the kind of thing you point this at. - Read & write connection for the agent that actually publishes, replies and runs automations.
Why bother splitting? Because most agent mistakes are cheap to prevent and expensive to clean up. An analytics agent that reads a Reel’s watch stats and drafts a recommendation never needs permission to publish. Give it a read-only key and a bad tool call becomes an error message instead of a live post.
Worked example. You want an agent that reads Instagram Reel performance and tells you what to change in the next video. Create a read-only connection. The agent calls get_post_analytics, reads reelsSkipRate, igReelsAvgWatchTime and igReelsVideoViewTotalTime, and writes you a note about the hook and the length. Creator OS supplies the numbers. Your prompt or workflow decides what to change. The agent cannot touch the account, and that is fine, because its job is advice.
Now the publishing agent. Separate connection, read & write, ideally a separate workspace if the client is separate. Same model, different blast radius.
Social media posting API vs read-only access: what each key can do
The difference is not cosmetic. A posting key changes the outside world. A read-only key does not.
| Action | Read-only key | Read & write key |
|---|---|---|
| List posts, read analytics, follower stats | Yes | Yes |
Check caption length (check_caption_length) |
Yes | Yes |
Create a post (create_post) or schedule it |
Refused | Yes |
Upload media once, reuse the id (upload_media_from_url) |
Refused | Yes |
Reply to a comment (reply_to_comment), hide it |
Refused | Yes |
Send a DM (send_message) |
Refused | Yes |
| Create an automation or webhook | Refused | Yes |
| Delete a post, comment, automation, webhook | Refused | Yes, with a confirmation prompt |
| Launch or boost an ad (Ads add-on) | Refused | Yes, created paused |
Two practical notes. First, in the REST API the workspace is baked into the key, so a write attempt from the wrong key fails before it reaches a network. Second, networks you did not connect are not an error for the whole post: they come back in missing_platforms and the rest still go out. So a publish can partly succeed, which is exactly why you want the audit trail of a distinct key per connection.
If you are wiring an editor tool rather than a chat app, the same key works. See the Cursor MCP setup and the Windsurf MCP setup for the config entry shape.
How to store and rotate API keys for social media MCP servers
Store the key where the agent runs, never in the prompt, and rotate by creating the new key before deleting the old one. That way nothing goes dark in between.
Storage rules that hold up in practice:
- Put the key in the environment or in the AI app’s connector settings. For Cursor, Windsurf and VS Code it lives in the
mcpServersentry as anAuthorizationheader. - Never paste a write key into a shared chat, a screenshot or a repo README. A read-only key leaking is annoying. A write key leaking can publish.
- One key per connection, per client, per job. If you run an agency workspace for five clients, give each its own connection. Then a client offboarding is one revocation, not a rebuild.
- Keep a note of what each key does, since the connected apps list is your inventory.
Rotation, step by step:
- Create the replacement key in Settings > API keys with the same scope and workspace.
- Update the agent config or connector. For Claude Code, that is the
--headervalue. - Run
creatoros auth:checkand a harmless read to confirm. - Delete the old key once the new one has served a real call.
Do this on any of these triggers: a team member leaves, a laptop is lost, a key appears in a log, a client ends the contract, or an agent starts behaving in a way you cannot explain. Also rotate on a schedule you actually keep. A quarterly reminder beats a rule nobody follows.
For the API-side detail, the authentication docs cover how keys are presented to endpoints. The posting API guide shows the request shapes you will call with a write key.
MCP social media security checklist for developers in 2026
Run this list before you hand an agent a write key, and again when you add a client.
- Start read only. Connect the analytics and review work first. Watch what tools the model actually reaches for.
- One workspace, one key. Confirm the key is pinned where you think it is. For agency plans, one client per connection.
- Separate advice agents from publishing agents. Two keys, two scopes, two blast radii.
- Keep destructive tools visible. Leave the confirmation prompts on. Do not teach the model to auto approve deletes.
- Log the intent. Add webhooks for
post.published,post.failedandcomment.received, signed withX-CreatorOS-Signature, so a published post leaves a trail outside the chat window. - Dry-run the money. Ads tools accept a validate-only run, budgets are confirmed, and ads are created paused for review. Use all three.
- Test the refusal. Try a write with a read-only key once. If it succeeds, your scope assumption is wrong.
- Rotate on a trigger, not a vibe. New device, departed teammate, leaked log, ended client.
Errors come back in one shape, { error: { code, message, status } }, which makes this easy to script. An agent that sees a scope error should report it, not retry in a loop. If you already run agents through automation tools, the comparison posts on Zapier, Make and n8n explain where a hosted MCP server fits next to a workflow builder.
Want to see the whole loop end to end, prompt to published post to analytics read-back? Watch the walkthroughs on the KevBuildsApps YouTube channel, and the launch video for the agent workflow.
FAQ
How do I keep my social media API keys safe in an MCP server?
Keep the key in the connector settings or an environment variable, never in the prompt text. Give each connection its own key and start read only, then upgrade to read & write only for the agent that publishes. Rotation is create, swap, verify, delete, so nothing goes dark in between.
Can an MCP server post to social media with read-only access?
No. In Creator OS a read-only connection only exposes read tools, and the API refuses write calls from that key. That makes read-only the right scope for analytics, caption review and comment triage, while a separate read & write key handles publishing, replies and automations.
What is the difference between a social media posting API and a comments API key?
Scope and consequence. A posting key can create, schedule and delete posts, upload media and launch ads, which changes the public account. A read-only key can list posts, read analytics and read comments without changing anything, so a wrong call costs you an error message instead of a live post.
Should I use one API key for all social media platforms?
Use one key per workspace, since the key is pinned to a single set of socials and an agent holding one workspace’s key cannot post to another. Inside that workspace the key covers the connected platforms. For client work, connect each client workspace separately so revocation stays clean.
How often should I rotate social media API keys?
Rotate on a trigger: a teammate leaves, a device is lost, a key shows up in a log, or a client contract ends. On top of that, put a quarterly or biannual reminder in the calendar, because a schedule you actually keep beats a stricter rule you ignore.
Get started with scoped keys in Creator OS
Create a read-only connection first, point your agent at analytics, then add a separate read & write key when you actually want it to publish. The MCP docs list the tool surface, and authentication covers the header and key handling.
Start here: https://www.creatoros.ca/sign-up. Creator OS plans start at $14.99/month for 11 platforms plus Skool, with the API, the MCP server and the CLI included.
Get started for $0
Free trial for new subscribers. Cancel anytime.