Skip to content
Connect an agent

Use the server

Claude Code plugin

Install Flung in Claude Code as a plugin: the hosted MCP server signed in with your browser, four skills that draft, schedule, connect and check, and a quiet hook that offers a release post after you tag.

For
  • Claude Code

TL;DR

QuestionAnswer
How do I install it?Two commands inside Claude Code: add the marketplace, then install flung@flung.
What does it need?A Flung account (the free plan works), and Node 18 or newer for the hook. No API key.
How does it sign in?With OAuth: your browser opens Flung's sign-in, and you approve the workspace Claude may use.
What does it add?The Flung MCP server, the skills /flung:post, /flung:connect, /flung:release-post and /flung:status, and a release hook.
Does it post by itself?No. Every skill shows the draft and asks before it schedules anything, and connecting an account always needs you on the platform's own page.
Not on Claude Code?Add the MCP server to your client instead: Connect an AI agent.

What it is

The plugin is a package for Claude Code that holds three things. The MCP server, at the address every client uses, so Claude has all of Flung's tools. Four skills, which tell Claude how to do a Flung job well: one version of a post per platform within its limit, the time passed as you said it, nothing scheduled until you say yes. And a hook, which notices when Claude makes a release and offers to announce it.

It is open source, on GitHub at flung-official/flung-claude-plugin (opens in a new tab).

Install

Inside Claude Code, add the marketplace, then install the plugin from it:

Claude Code
/plugin marketplace add flung-official/flung-claude-plugin
Claude Code
/plugin install flung@flung

Restart Claude Code when it asks. The plugin adds the Flung server for you, as if you had added this to your MCP settings:

json
{  "mcpServers": {    "flung": {      "type": "http",      "url": "https://mcp.flung.dev/mcp-oauth"    }  }}

If you added the server yourself before, remove that one, so Claude sees one set of tools:

bash
claude mcp remove flung

Sign in

The plugin holds no key. Claude Code asks you to sign in the first time it needs Flung; to do it now, run:

Claude Code
/mcp

Pick flung and choose Authenticate. Your browser opens Flung's sign-in: enter your email and open the link Flung sends you. There is no password.

Then pick the workspace Claude may use and approve it. Claude Code carries on, signed in with OAuth. It keeps the sign-in itself and renews it; you do not sign in again each session.

Claude acts as you, in that workspace: it sees the accounts and posts you can, and it schedules posts in your own time zone. To take its access away, open Connected apps (opens in a new tab) and choose Disconnect beside Claude Code.

The skills

Claude picks a skill from what you ask, so you can say what you want in your own words. You can also run one by name, with what it should do after it.

SkillUse it to
/flung:postDraft and schedule a post to your connected accounts, now or at a time you name.
/flung:connectConnect or reconnect an account, and keep each brand's accounts apart.
/flung:release-postTurn a release of the repository you are in into a post per platform.
/flung:statusSee what is scheduled, what failed, and which accounts need reconnecting.

Post

Ask for a post in plain words, with the time as you would say it:

Prompt
Post that our docs site is live to X and LinkedIn tomorrow at 9am.
Claude callsFor
get_timeYour time zone and today's date there, so "tomorrow" is your tomorrow.
list_profilesThe brand to post as, when there is more than one.
list_accountsYour active X and LinkedIn accounts.
list_platformsEach platform's character limit and media rules.

Then it shows you the drafts and waits:

text
Here are the drafts, for Tuesday 3 November at 09:00 your time (Australia/Brisbane):
X, @acme (80 characters):Our docs are live: guides, API reference and MCP tools. https://docs.example.com
LinkedIn, Acme Inc (110 characters):Our docs site is live: every guide, the API reference and the MCP tools in one place. https://docs.example.com
Schedule these, change them, or stop?

On your yes it calls schedule_post, with the X text as an override and publishAt as the local time you said, 2026-11-03T09:00, with no offset. Flung turns that into UTC in your zone, so Claude never works out a time itself. It confirms the time back in your zone, and for a post sent now it checks each account with get_post and gives you the links.

Connect

Prompt
Connect our LinkedIn company page and Bluesky for the Acme brand.
Claude callsFor
list_profilesThe Acme brand, or create_profile to add it.
list_accountsWhat Acme already has. A brand holds one account per platform.
connect_accountA consent link for each platform. A broken account gets reconnect_account instead, which keeps its scheduled posts.
get_connect_sessionWhether you approved, every few seconds, until it is done.

You open each link and approve on the platform; Claude never signs in for you:

text
Open each link, approve, then come back. Each one lasts ten minutes.
LinkedIn company pages: https://www.linkedin.com/oauth/v2/authorization?...Bluesky: https://bsky.social/oauth/authorize?...
Acme now has LinkedIn (Acme Inc, Acme Labs) and Bluesky (@acme.bsky.social), all active.

Release post

In a repository, name the tag, or leave it out for the latest:

Claude Code
/flung:release-post v1.4.0

Claude reads what the release changed with read-only git and gh commands: the tag before it, the GitHub release notes, the section of CHANGELOG.md, or the commit subjects between the two tags. With Conventional Commits it leads with feat and fix and leaves out chore, ci and test. Then it drafts a post per platform as in the release workflow below, and asks before scheduling.

Status

Claude Code
/flung:status

Claude calls get_time and review_workspace for the next seven days, and answers with the most urgent first:

text
Needs you now- Instagram @acme needs reconnecting. Thursday's 18:00 post to it will fail until then.
Reconnect soon- LinkedIn Acme Inc, by Thursday 12 November.
Failed- "Our autumn range is here" went out on X; Instagram failed (reconnect required).
Scheduled (next 7 days, Europe/Athens)- Wed 4 Nov 09:00, X and LinkedIn: "Three ways to..."- Thu 5 Nov 18:00, Instagram: "Behind the scenes..."
Reconnect Instagram now? Once it is back I can retry the failed post.

It changes nothing until you pick a fix. Accounts that renew themselves are not listed as a warning.

The release workflow

From a tag to scheduled posts, with you approving each step.

1. Tag or release

Make the release in Claude Code as you always do, or ask Claude to:

git
git tag -a v1.4.0 -m "v1.4.0"git push origin v1.4.0

2. The hook suggests

When the command succeeds, the hook gives Claude this note, and Claude offers you one line once the release work is done:

text
Flung: the command just made the release v1.4.0. Once the release work is done, offer the person one short line: the flung:release-post skill can draft a post per platform from this release for them to review. Do not draft, schedule or publish anything unless they say yes.

Say yes, or run /flung:release-post v1.4.0 at any time later.

3. A draft per platform

Claude reads the release, picks the two or three changes a user cares about most, and writes each platform's post within its limit, counting the link in full. A short post leads with the one change that matters; LinkedIn gets a first line that stands alone, a paragraph on why it matters, and a short list:

text
v1.4.0 is out: build --watch rebuilds as you save, Node 24 is supported, and file order holds on Windows.https://github.com/acme/tool/releases/tag/v1.4.0

Every claim comes from the changelog, the release notes or the commits. Internal ticket numbers, private names and secrets files stay out.

4. Approve

Change what you like, then say when:

Prompt
Schedule both for tomorrow at 10am.

5. Scheduled in your time zone

Claude makes one call, with each platform's text and the time as you said it. The idempotencyKey names the release, so a retry never posts twice:

json
{  "name": "schedule_post",  "arguments": {    "content": "Version 1.4.0 of Acme Tool is out.\n\nThe build command can now watch your files and rebuild as you save, so the edit and check loop is one step.\n\nAlso in this release:\n- Node 24 is supported\n- File order is kept on Windows\n\nRelease notes: https://github.com/acme/tool/releases/tag/v1.4.0",    "accountIds": [      "acct_aaaaaaaaaaaaaaaaaaaaaaaa",      "acct_bbbbbbbbbbbbbbbbbbbbbbbb"    ],    "platformOverrides": {      "x": {        "content": "v1.4.0 is out: build --watch rebuilds as you save, Node 24 is supported, and file order holds on Windows.\nhttps://github.com/acme/tool/releases/tag/v1.4.0"      }    },    "publishAt": "2026-11-03T10:00",    "idempotencyKey": "release-v1.4.0"  }}

Flung answers with publishAt in UTC, publishAtLocal and timeZone, and Claude tells you the local one:

text
Scheduled for Tuesday 3 November at 10:00 Australia/Brisbane, on X and LinkedIn.

The zone is yours, from your Account page in Flung, never the clock of the machine Claude runs on. Time zones says how a local time is read, and what happens when the clocks change.

The hook

After each Bash command Claude runs, the hook reads that one command. When it made a release (git tag <name>, or gh release create <tag>) and succeeded, the hook adds the note above. Listing or deleting tags, failed commands and everything else get no answer, so it is silent in normal work. It never calls Flung and never schedules anything.

To turn it off, set FLUNG_HOOKS to off in the shell you start Claude Code from, or in your Claude Code settings:

bash
export FLUNG_HOOKS=off
settings.json
json
{  "env": {    "FLUNG_HOOKS": "off"  }}

The skills work the same with the hook off.

Privacy

QuestionAnswer
Is a key stored?No. The plugin holds no API key and stores nothing. Claude Code keeps the OAuth sign-in, and you can end it in Connected apps (opens in a new tab).
What does the hook read?Only the text of the command Claude just ran. It reads no file, calls nothing and sends nothing.
What does the plugin send?Nothing by itself. Claude calls the Flung MCP server when a skill or your request needs it, with what that call needs: post text, media links, account and brand ids.
What does the release skill read?The changelog, release notes and commit subjects of the repository you are in, with read-only commands. Never .env or other secrets files.
Who handles the data?Flung, under its privacy policy. Nothing is sold, used for advertising, or used to train AI models.

Troubleshooting

You seeDo
flung says Needs authentication in /mcpPick it and choose Authenticate, then sign in in the browser.
Claude signed in to the wrong workspace, or keeps failing to sign inIn /mcp, pick flung and clear its authentication, then authenticate again. Disconnecting it in Connected apps (opens in a new tab) has the same effect.
Two sets of Flung toolsThe server was also added by hand. Remove that one with claude mcp remove flung.
Mastodon will not connectMastodon needs your own server's address, which the tools cannot pass. Connect it in the Flung portal at app.flung.dev (opens in a new tab), then come back to Claude.
An account needs_reconnectAsk "Reconnect my Instagram", or run /flung:connect. Sign in as the same platform user.
A refusal such as plan_limit_reachedIt is an answer: Claude gives you the upgrade link and schedules nothing else.
The hook never suggestsIt needs Node 18 or newer on your path, and FLUNG_HOOKS not set to off.

Update and uninstall

Plugins from a marketplace update when Claude Code refreshes it. To fetch the latest now:

Claude Code
/plugin marketplace update flung

To remove the plugin, and then its marketplace:

Claude Code
/plugin uninstall flung@flung/plugin marketplace remove flung

Uninstalling leaves your posts, accounts and brands in Flung as they are. To end Claude's access too, disconnect it in Connected apps (opens in a new tab).

See also

LinkWhy
flung-official/flung-claude-plugin (opens in a new tab)The plugin's source, its changelog, and issues for bugs and ideas
Connect an AI agentThe same server in other clients, and with an API key
Ways to use FlungThe plugin, the MCP server, the API and SDK, and webhooks, side by side
Prompts and recipesMore to ask, and the tool behind each
MCP toolsEvery tool and workflow Claude can call