Shager
Servidor MCP remoto para equipes de mídia social. Seu agente cria rascunhos, agenda (um horário separado por rede, se quiser), responde comentários e verifica os números, tudo por meio de uma única conexão OAuth.
Servidor MCP hospedado
npx add-mcp 'https://app.shager.ai/api/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Connect your AI to Shager. Then tell it what to post.
Talk to it in plain words. It posts, answers comments and tells you what worked. You decide whether it posts on its own or waits for your OK.
Free during the launch, up to 31 accounts. No card needed.
How to connect
Pick the AI you use. It takes about a minute, and you only do it once.
The address to paste: https://app.shager.ai/api/mcp
ChatGPT
- In ChatGPT, go to
Plugins→+→Add custom MCP server. - Name it Shager and paste this address in
Connection: - Choose
OAuthand clickCreate as a plugin. Then sign in to Shager and approve.
Works in ChatGPT on the web. Once it’s created, install it and you’re ready.
Claude
- In Claude, go to
Customize→Connectors→Add→Add custom connector. - Name it Shager, paste this address and click
Continue: - Click
Add, sign in to Shager and approve. No key to copy.
Works in Claude on the web and in the desktop app. On Team and Enterprise plans, an owner adds it first in the organization settings.
Any other AI (Gemini, Grok, OpenClaw, Claude Code, Codex, n8n and more)
- In your AI’s settings, find where you add tools, connectors or MCP servers, and paste this address:
- Your AI opens Shager. Sign in and approve. If it shows a short code instead, type it at
app.shager.ai/device. - Nowhere to paste an address? In Shager, open
Connect AI→For developers, clickCreate an API keyand give the key to your AI. That’s how n8n, Zapier and Make connect too.
What you can ask it
Write the way you’d write to a person. For example:
- Post this video tomorrow everywhere: Instagram at 8 a.m., LinkedIn at noon.
- Put the sign-up link in the first comment.
- When someone comments “details”, send them the link in a private message.
- Reply to the comments on yesterday’s post.
- What worked best last week?
- Move Tuesday’s post to Thursday evening.
One video. Seven accounts.
The agent uploads the video with upload_media_from_url and sends one post with a group of accounts. Shager returns a version per account, in a format its network supports: a Reel, a Short, a TikTok video, a LinkedIn video. Each network can have its own hour: here the TikTok version goes out four hours after the rest.
MCP: https://app.shager.ai/api/mcp
// 1 · upload the video once
{
"name": "upload_media_from_url",
"arguments": {
"workspace_id": "cm2studionoa",
"url": "https://studio-noa.com/media/workshop.mp4"
}
}
// → { "id": "cm2wheelvideo", "kind": "VIDEO", (measured by Shager)
// "width": 1080, "height": 1920, "duration_ms": 24000 }
// 2 · one post to every account in the group
{
"name": "create_post",
"arguments": {
"workspace_id": "cm2studionoa",
"group_ids": ["cm2allaccounts"],
"caption": "A new evening workshop: two hours on the wheel",
"media_ids": ["cm2wheelvideo"],
"cta_url": "https://studio-noa.com/workshop",
"youtube_made_for_kids": false,
"per_channel": [{
"channel_id": "cm2tiktok",
"tiktok_privacy": "SELF_ONLY",
"delay_minutes": 240
}],
"schedule_at": "2026-10-20T12:00:00+03:00",
"idempotency_key": "workshop-oct-20"
}
}
{
"status": "SCHEDULED",
"scheduled_at": "2026-10-20T09:00:00.000Z",
"stagger_seconds": { "min": 30, "max": 90 },
"issues": [],
"destinations": [
{ "network": "YOUTUBE", "format": "SHORT", "state": "PENDING" },
{ "network": "X", "format": "FEED", "state": "PENDING" },
{ "network": "LINKEDIN", "format": "VIDEO", "state": "PENDING" },
{ "network": "INSTAGRAM", "format": "REEL", "state": "PENDING" },
{ "network": "FACEBOOK", "format": "REEL", "state": "PENDING" },
{ "network": "FACEBOOK", "format": "REEL", "state": "PENDING" },
{ "network": "TIKTOK", "format": "VIDEO", "state": "PENDING" }
],
"calendar_notes": []
}
validate_postreturns every issue for every account at once, before anything is saved.calendar_notesflag holidays on the chosen day, so the agent can rethink the timing.idempotency_keymakes retries safe: the same request never creates a second post.
You decide what goes out
- It starts with drafts. Once connected, your AI can prepare posts but not publish them. Nothing goes live until you allow it.
- Approve every post, if you like. Turn on approval, and each post waits for a yes from you, or from your client, before it goes out.
- Big sends wait for you. Before sending to more than 10 accounts, or within 60 minutes, your AI first shows you what’s about to go out.
- Disconnect in one click. Everything it does is listed in Shager. You can change what it may do, or disconnect it, at any time.
Three ways to connect. Any agent.
1. Any MCP client that supports OAuth
Add the server address in the client (in Claude and ChatGPT, as a custom connector). It sends you to Shager: sign in, pick the organization and approve. No key to copy, and publishing stays off unless you tick it.
# MCP server URL (sign in with OAuth)
https://app.shager.ai/api/mcp
2. Bots without a browser: a device code
A bot or headless agent registers once, asks for a code and shows it to you. You approve on your phone at app.shager.ai/device, with the same screen and the same permissions.
# RFC 7591 · RFC 8628
curl -X POST https://app.shager.ai/api/oauth/device_authorization \
-d client_id=shgr_client_… \
-d resource=https://app.shager.ai/api/mcp
# → user_code "BCDF-GHJK", verification_uri
# https://app.shager.ai/device · then poll /api/oauth/token
3. Everything else: an API key
Create a key on the Agents page and send it as a Bearer header, over MCP or the REST API. Not signed up yet? The agent signs itself up into a sandbox and you claim it later (auth.md).
claude mcp add --transport http shager \
https://app.shager.ai/api/mcp \
--header "Authorization: Bearer shgr_live_…"
MCP config (Cursor and other clients):
{
"mcpServers": {
"shager": {
"url": "https://app.shager.ai/api/mcp",
"headers": { "Authorization": "Bearer shgr_live_…" }
}
}
}
Everything the agent can do.
whoami: Who am I: the organization, the key’s scopes, caps and sandbox stateget_structure: The whole organization at a glance: clients, their accounts and groupsget_claim_link: Organization claim linklist_workspaces: List businesses or clientscreate_workspace: Add a business or clientupdate_workspace: Change a business or client’s name, time zone and UTM tagslist_channels: Connected accounts and each network’s rulescreate_connect_link: A link the client uses to connect their own accountslist_connect_links: The connect links sent to clients, and what was connected through each onerevoke_connect_link: Revoke a connect link that hasn’t been usedset_channel_status: Pause an account or turn it back onmove_channel: Move an account to another client in the organization, without signing in againcreate_pinterest_board: A new Pinterest board to publish pins tolist_groups: Account groupslist_notifications: What happened lately: failed posts, accounts to reconnect, approvals and new team memberscreate_group: Create a group (branches, brands, campaign)update_group: Rename a group or change the accounts in itdelete_group: Delete a group. The accounts themselves staylist_members: The team, each person’s role, and invitations still waiting for an answerinvite_member: Email someone an invitation to join the team as a viewer. Editors and managers are invited from the appcancel_invitation: Cancel a team invitation that hasn’t been acceptedresend_invitation: Send a team invitation again, with a new linkupload_media_from_url: Upload an image or video from a URLcreate_media_upload: Upload a file from the computer: Shager returns an address, and the file goes straight therecomplete_media_upload: Finish an upload: Shager checks the file that arrived, then it can go on a postvalidate_post: Check a post against each network’s rules before schedulingcreate_posts: Up to 25 posts in one call, like a week or a month of contentcreate_post: One post for many accounts, adapted per networkupdate_post: Edit a draftschedule_post: Schedule for a time you pick, or for each account’s best time, with staggered delivery across accountsrequest_approval: An approval link for the clientget_approval: A post’s approval statusrevoke_approval: Cancel the approval link sent to the client, to edit the post againadd_post_note: An internal note on a post for the team. The client doesn’t see itget_post: Publishing status on every account, including errorslist_posts: The posts list, filtered by status, network, account, group, words and datescancel_post: Cancel a scheduled postretry_failed_accounts: Send a post again, only to the accounts where it faileddelete_post: Delete a draftlist_comments: Comments on a published post on YouTube, Facebook, Instagram, X, LinkedIn, Bluesky, Mastodon or Threadsreply_to_comment: Reply to a comment as the accounthide_comment: Hide or show a commentdelete_comment: Delete a commentlist_reviews: A business’s Google reviews, read onlylist_auto_replies: Auto-reply rules, and what each account can answercreate_auto_reply: Auto-replies to comments and DMs, with a link in a private messageupdate_auto_reply: Change or pause an auto-reply ruledelete_auto_reply: Delete an auto-reply ruleset_x_budget: The monthly spending limit for replies and DMs on Xlist_auto_reply_activity: Comments and messages that reached auto-replies, and what was sent backget_best_times: The best hours to post on each account, from its own posts, its audience and the audience’s countryget_insights: What worked: what each account’s best posts had in common, and what to change in the next oneget_client_report: A monthly report for a client: a link that opens without an account, with your logo, the numbers and the best postsset_client_report: Who gets the monthly report by email, in which language, and a new link when neededset_audience: Which market each account or group speaks to: one country, several, or the whole worldget_analytics: Views, likes, comments, clicks and followerslist_links: Tracked links, how many clicks each one got and where they came fromcreate_link: A tracked short link for any address: a bio, a story, an email or an adcreate_webhook: An address your system gets an event at when a post goes out, fails or is approvedlist_webhooks: Webhook addresses and the last delivery to eachdelete_webhook: Stop sending events to an addresssend_test_webhook: Send a test event nowget_network_features: What works on each network: first comment, covers, comments, auto-replies, numbers, and what a network doesn’t allowget_holidays: Holidays and observances by tradition, to choose when to post
What agents can’t do, and why
- Disconnect an account: it deletes Shager’s keys for the account, and only the account’s owner can connect it again
- Remove a team member or change a role: a misled agent could lock people out or give someone edit access, so it invites viewers only
- Create, see or revoke API keys: a key can’t widen its own access or make new keys
- Reply to Google reviews: Google requires the owner’s express consent for every automated reply, so replies are written in the app. The agent can read them
- Approve its own posts: when a client requires approval, the link goes by email straight to the reviewer
- Approve its own replies, comment deletions, auto-replies or large sends: you approve these in Shager: the agent sends you a link to a page that shows exactly what will go out, and nothing happens until you say yes
- Get a webhook’s signing secret through an AI assistant: secrets don’t belong in a chat. The REST API returns it once; otherwise you copy a new one from Settings
- Turn the approval requirement on or off: it’s the client’s safeguard, and a manager sets it in the business’s Settings
- Use Shager’s writing helper: the agent is already the AI, and it writes the text itself
- Mark notifications as read: they are your own reminders of what needs you
Machine-readable files
/llms.txt: A site map for agents: what Shager is and where each page lives./llms-full.txt: All public content in one Markdown file./md/…: A Markdown version of every page. Example: /md/en/pricinghttps://app.shager.ai/api/v1/openapi.json: The full OpenAPI spec of the REST API.https://app.shager.ai/cli.mjs: The command-line tool: every tool from the terminal. Run npx @shagerai/cli login, or download this file and run node shager.mjs login.https://app.shager.ai/.well-known/oauth-authorization-server: OAuth server metadata: dynamic client registration, PKCE, device code.
Questions
Do I need to know how to code?
No. In ChatGPT or Claude you paste one address and approve. It takes a minute.
Can my AI publish without me knowing?
No. At first it only prepares drafts. Letting it publish on its own is a separate switch when you connect, and it starts off. You can also ask for approval on every post.
Does it cost extra?
No. Connecting an AI is included in every plan, and a post your AI makes counts like any other post. Adding Shager to ChatGPT needs one of ChatGPT’s paid plans.
Does my AI see my passwords?
No. Your accounts connect through each network’s own sign-in screen, and your AI never sees a password. It also can’t change your plan, payment or team, or delete posts that are already published.
What if it gets something wrong?
A scheduled post can be canceled until it goes out. Everything your AI did is listed in Shager, and you can disconnect it in one click.
Tracked links show clicks by account and post. Lead and sales attribution requires your analytics or CRM.
Source: https://shager.ai/en/agents