How to post to Discord from Claude Code
claude mcp add --transport http postwire https://postwire.io/api/mcp, sign in with your email, paste your channel's webhook URL once, and ask "post the v2.4 release notes from CHANGELOG.md to Discord". Claude Code writes the announcement with generate_posts (Discord allows 2,000 characters), shows it to you, and sends it with post_to_social or queues it with schedule_post. There is no bot to create, host or invite: PostWire posts through the channel's own webhook, which can write to that one channel and nothing else. The free plan includes Discord: 1 business, 20 posts a month, 5 AI drafts a day, 2 networks per post, no card.The same works without the MCP server: PostWire's schedule-posts skill calls the REST API with your key. Either way a scheduled announcement goes out from PostWire's servers with your terminal closed, and the same request can carry the Telegram, Bluesky or LinkedIn version of the news.
Updated . Written from PostWire's own code; vendor prices read on Oct 17, 2026. Live networks: TikTok, Instagram, YouTube, LinkedIn (personal profiles), Facebook Pages, Bluesky, Mastodon, Telegram, Discord, and X on paid plans.
Set it up and post, step by step
Prompt to copy once Discord is connected: Read CHANGELOG.md, write a Discord announcement for v2.4 with the three changes users will notice, show it to me, and post it with ./assets/release.png.
- Add PostWire to Claude Code
In your terminal run
claude mcp add --transport http postwire https://postwire.io/api/mcp(add--scope userto have it in every project), then type/mcpin Claude Code and pick postwire to sign in. The sign-in asks for your email and a 6-digit code, which also creates a free PostWire account if you have none: no password and no card. - Or install the skill instead
npx skills add https://postwire.io --skill schedule-postsadds PostWire's scheduling skill to Claude Code (and to the other agents on the machine). It uses your key from the environment: copy it in the dashboard under API & MCP and setPOSTWIRE_API_KEY. The skill is a plain file you can read first: schedule-posts/SKILL.md. - Copy the channel's webhook URL
In Discord, open the channel → Edit Channel → Integrations → Webhooks → New Webhook → Copy Webhook URL. You need permission to manage that channel (server owner or admin). The link looks like
https://discord.com/api/webhooks/<id>/<token>. The name and avatar you give the webhook are what the channel shows on each message. - Connect Discord
Ask "connect my Discord". Claude Code calls
create_connect_linkand prints a one-hour link; open it, choose Discord and paste the link into Webhook link. There is no sign-in screen. PostWire checks that it is a Discord webhook and asks Discord whether it exists before saving it, so a link copied without its end is refused on that page, not at the first post. - Ask for the announcement
"Write the Discord announcement for v2.4."
generate_postsreturns a draft and publishes nothing: short and friendly, in a community tone, emojis and links welcome, under Discord's 2,000 characters. Ask for the Telegram or LinkedIn version in the same sentence and each comes back written for its own network. - Post now, or schedule it
Say "post it" and Claude Code calls
post_to_social. Say "schedule it for Tuesday at 5pm" and it callsschedule_post, up to 365 days ahead, or withrun_at: "next_slot"for your next free posting hour. An image or a video goes as its public https link inphoto_urlorvideo_url: PostWire puts it on its own line under the text and Discord shows it as an embed. A file on your computer goes through an upload page: ask for one (create_upload_link), pick the file there, and Claude Code gets its link. One file can be up to 100 MB on the free plan and 1 GB on paid plans. This is the call:{ "name": "schedule_post", "arguments": { "platforms": ["discord"], "per_platform": { "discord": { "text": "🚀 v2.4 is out! Dark mode, 2x faster sync and 14 fixes.\nFull changelog: https://example.com/changelog" } }, "photo_url": "https://example.com/assets/release.png", "run_at": "2026-10-20T17:00:00-05:00" } } - Check that it went out
The result lists Discord with
okand the id of the message. If Discord refuses it, the result carries what happened and the fix; a webhook someone deleted in Discord shows up in the dashboard as "reconnect" before a scheduled post is due.
"What's scheduled on Discord?" calls list_scheduled_posts and "cancel Tuesday's announcement" calls cancel_scheduled_post; the same queue is on the dashboard's Queue page. Prefer to set it up by hand first? Open the dashboard, connect the account under Accounts and copy your key under API & MCP.
Ways to post to Discord from Claude Code, side by side
How each service plugs into Claude Code and reaches Discord, and what it costs to start, read on its own Claude Code and pricing pages on Oct 17, 2026.
| Service | How it plugs into Claude Code | How it reaches Discord | Discord on the free start | Cheapest paid plan |
|---|---|---|---|---|
| PostWire | claude mcp add with https://postwire.io/api/mcp, or the schedule-posts skill | A channel webhook, checked with Discord before it is saved | Yes — free plan: 1 business, 20 posts a month, 5 AI drafts a day, 2 networks per post, no card | $9/mo — 3 businesses, every network in each post |
| Postiz | claude mcp add with mcp.postiz.com/mcp-oauth-dynamic, or the Postiz skill | The Postiz bot, which lists the channels it can reach | 7-day free trial | $29/mo — 5 channels |
| Upload-Post | npx skills add Upload-Post/upload-post-skill | A channel webhook | Free plan of 10 uploads a month; its list of free-plan networks does not name Discord | $24/mo — 5 profiles |
Checked on Oct 17, 2026 (2026-10-17) on each vendor's own pricing or docs page, linked in the first column and below. Monthly billing in USD unless noted. "Not listed" means we could not find it on their page, not that it is missing.
Where PostWire is ahead
- Discord on the free plan: 20 posts a month, no card and no time limit. Postiz starts with a 7-day trial; Upload-Post's free-plan network list does not name Discord.
- The cheapest paid plan here: $9 a month for 3 businesses. Upload-Post $24, Postiz $29.
- The announcement is written for Discord:
generate_postswrites a short community-tone message under 2,000 characters and, from the same news, the Telegram, Bluesky and LinkedIn versions in one call. - The webhook is checked before it is saved, and again later: a link copied without its end is refused when you connect, and a deleted webhook shows as "reconnect" before a scheduled announcement is due.
- Both doors, one account: the MCP server for a chat, the
schedule-postsskill or the REST API for a release script, with the same queue and the same connected channel. - A person approves what Claude Code queued: on paid plans, approval rules hold the post until you approve it from an emailed link.
- Postiz — Post to Discord from Claude Code (claude mcp add … https://mcp.postiz.com/mcp-oauth-dynamic, or the Postiz skill with POSTIZ_API_KEY; "list the channels available to your Postiz bot"): postiz.com/claude-code/discord
- Postiz pricing ("Start with a 7-day free trial"; Standard $29 a month, 5 channels): postiz.com/pricing
- Upload-Post — Claude Code + Discord (npx skills add Upload-Post/upload-post-skill; "through a simple channel webhook, no bot hosting required"; free API key, no card): www.upload-post.com/skills/claude-code/discord/
- Upload-Post plans (llms-full.txt: Free 10 uploads a month, "platforms without TikTok (Instagram, LinkedIn, YouTube, Facebook, X, Threads, Pinterest, Reddit, Bluesky)"; Basic $24 a month, 5 profiles): www.upload-post.com/llms-full.txt
- Discord developer docs — Execute Webhook (content "up to 2000 characters"): discord.com/developers/docs/resources/webhook
Why post to Discord from Claude Code
- The release notes are already in the repo: Claude Code reads
CHANGELOG.md, the merged pull requests or the tag message and writes the announcement from what actually shipped. - One piece of news, every community: "announce v2.4 on Discord and Telegram" sends one request with a version written for each. On the free plan one post reaches 2 networks; paid plans (from $9 a month) add Bluesky, LinkedIn, X and the rest in the same request.
- From a release script:
claude -p "announce the latest tag on Discord, from CHANGELOG.md" --allowedTools "mcp__postwire__*"runs it without a chat. Without Claude Code at all, the same post isPOST /api/postwith{"platforms": ["discord"], "text": "…"}and your key. - A person can have the last word: on paid plans, a brand's approval rules hold what Claude Code queues until you approve it from an emailed link.
Source: PostWire's MCP server, Discord integration and plans, read Oct 17, 2026.
Discord's rules Claude Code works within
- 2,000 characters per message, Discord's limit for a webhook message. Longer text is cut there, so ask for a summary with a link to the full changelog.
- One webhook, one channel: the webhook belongs to the channel it was created in, and that is the only place PostWire can post. It cannot read messages, see members or act anywhere else on the server.
- One image or video per message, sent as a link that Discord embeds.
- Posted by the webhook, under the name and avatar you gave it in Discord, not by your personal account.
Discord's limit: Execute Webhook, read Oct 17, 2026.
What it does not do
PostWire is not a Discord bot. It does not read or search messages, answer mentions, send direct messages, moderate, or manage roles and channels, and it does not list your server's channels: each connection is the one channel behind the webhook you pasted. It does not attach a file to the message itself; images and videos go as links Discord embeds.
Questions people ask
Can Claude Code post to Discord?
Yes, with an MCP server or a skill. Claude Code has no Discord access of its own; with PostWire added (claude mcp add --transport http postwire https://postwire.io/api/mcp) and a channel webhook pasted once, it writes the announcement and posts or schedules it when you ask.
Do I need to create or host a Discord bot?
No. A channel webhook is enough: Edit Channel → Integrations → Webhooks → New Webhook → Copy Webhook URL, and paste it when Claude Code gives you the connect link. There is no bot token, nothing to invite and nothing to host.
How long can a Discord message from Claude Code be?
Up to 2,000 characters, Discord's limit for a webhook message. generate_posts keeps the draft under it; for long release notes, ask for the three main changes and a link to the full changelog.
Can it post an image or a video?
Yes, as a link: Claude Code passes photo_url or video_url and PostWire puts the link under the text, which Discord shows as an embed. A file on your computer gets a link through create_upload_link.
Can Claude Code schedule a Discord announcement?
Yes. It calls schedule_post with a time up to 365 days ahead, or "next_slot" for your next free posting hour, and PostWire posts it at that time with Claude Code closed. The free plan keeps 3 posts waiting at once; paid plans have no such limit.
Can it post to several Discord channels?
Each connection is one channel's webhook. To announce in a second channel or another server, connect that channel's webhook under another brand (Starter has 3 businesses, Pro 10) and post to that brand too.
How much does it cost?
The free plan includes Discord, the MCP server and the skill: 1 business, 20 posts a month, 5 AI drafts a day, 2 networks per post, no card. Starter is $9 a month for 3 businesses and Pro $29 for 10, with every network in each post; paid plans have a 14-day refund.
Try it on one business, free.
The free plan is 1 business, 20 posts a month, 5 AI drafts a day (about 20 a month) and 2 networks per post — every network connects free, no card, no time limit. Paid plans start at $9 a month and have a 14-day refund; Pro can be tried free for 7 days and Agency for 14, with a card at checkout and nothing charged that day.