How to post to Discord from Claude Code

To post to Discord from Claude Code, run 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.

  1. Add PostWire to Claude Code

    In your terminal run claude mcp add --transport http postwire https://postwire.io/api/mcp (add --scope user to have it in every project), then type /mcp in 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.

  2. Or install the skill instead

    npx skills add https://postwire.io --skill schedule-posts adds 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 set POSTWIRE_API_KEY. The skill is a plain file you can read first: schedule-posts/SKILL.md.

  3. 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.

  4. Connect Discord

    Ask "connect my Discord". Claude Code calls create_connect_link and 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.

  5. Ask for the announcement

    "Write the Discord announcement for v2.4." generate_posts returns 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.

  6. Post now, or schedule it

    Say "post it" and Claude Code calls post_to_social. Say "schedule it for Tuesday at 5pm" and it calls schedule_post, up to 365 days ahead, or with run_at: "next_slot" for your next free posting hour. An image or a video goes as its public https link in photo_url or video_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"
      }
    }
  7. Check that it went out

    The result lists Discord with ok and 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.

ServiceHow it plugs into Claude CodeHow it reaches DiscordDiscord on the free startCheapest paid plan
PostWireclaude mcp add with https://postwire.io/api/mcp, or the schedule-posts skillA channel webhook, checked with Discord before it is savedYes — 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
Postizclaude mcp add with mcp.postiz.com/mcp-oauth-dynamic, or the Postiz skillThe Postiz bot, which lists the channels it can reach7-day free trial$29/mo — 5 channels
Upload-Postnpx skills add Upload-Post/upload-post-skillA channel webhookFree 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_posts writes 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-posts skill 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.
Sources, all read on Oct 17, 2026:
  • 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 is POST /api/post with {"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.