How to post to Telegram from Claude Code

To post to Telegram from Claude Code, run claude mcp add --transport http postwire https://postwire.io/api/mcp, sign in with your email, paste a bot token from @BotFather and your channel once, and ask "post today's update to my Telegram channel". Claude Code writes the message with generate_posts, shows it to you, and sends it with post_to_social or queues it with schedule_post through Telegram's official Bot API, then gives you the message's t.me link. You write no bot code and host nothing: the bot is a token, and it posts only where you made it an admin. The free plan includes Telegram: 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 message goes out from PostWire's servers with your terminal closed, and a burst of posts to one channel is spaced instead of refused.

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 Telegram is connected: Summarize what we merged this week from git log, write it as a Telegram post with the three changes and a link to the changelog, show it to me, and schedule it for Friday at 9am.

  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. Create a bot and make it an admin

    In Telegram, message @BotFather, send /newbot, pick a name and copy the token it gives you. Then open your channel or group and add that bot as an admin, so it is allowed to post there.

  4. Connect Telegram

    Ask "connect my Telegram channel". Claude Code calls create_connect_link and prints a one-hour link; open it, choose Telegram and paste the Bot token and Your channel as @yourchannel (a private channel or group goes by its numeric id, which starts with -100). There is no sign-in screen. Before saving, PostWire asks Telegram whether that bot can reach that chat, so a mistyped channel or a bot that is not an admin yet is caught on that page, with the fix.

  5. Ask for the message

    "Write this week's Telegram update." generate_posts returns a draft and publishes nothing: clear and direct, light formatting, links welcome and no hashtags. Ask for the Discord or Bluesky 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 Friday at 9am" and it calls schedule_post, up to 365 days ahead, or with run_at: "next_slot" for your next free posting hour. Add photo_url or video_url (a public https link) and the text becomes the caption of that photo or video. 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": ["telegram"],
        "per_platform": { "telegram": {
          "text": "This week in v2.4 ✨\n\n• Dark mode\n• Sync is 2x faster\n• 14 fixes\n\nChangelog: https://example.com/changelog"
        } },
        "run_at": "2026-10-23T09:00:00-05:00"
      }
    }
  7. Open the message

    The result lists Telegram with ok, the message id and its link: https://t.me/yourchannel/123 for a public channel, https://t.me/c/…/123 for a private one (it opens for members). get_post_status returns the same link later.

"What's scheduled on Telegram?" calls list_scheduled_posts and "cancel Friday's update" 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 Telegram from Claude Code, side by side

How each service plugs into Claude Code and reaches Telegram, 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 TelegramTelegram on the free startCheapest paid plan
PostWireclaude mcp add with https://postwire.io/api/mcp, or the schedule-posts skillYour @BotFather bot as a channel admin, checked with Telegram 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 skillA BotFather bot, set up in the Postiz dashboard7-day free trial$29/mo — 5 channels
Upload-Postnpx skills add Upload-Post/upload-post-skillA bot token and chat_idFree plan of 10 uploads a month; its list of free-plan networks does not name Telegram$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

  • Telegram 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 Telegram.
  • The cheapest paid plan here: $9 a month for 3 businesses. Upload-Post $24, Postiz $29.
  • A burst does not lose posts: posts to one channel are spaced 3 seconds apart, a "retry after" from Telegram is waited out, and what cannot wait is queued and sent after it.
  • The bot and the channel are checked before they are saved: a mistyped channel or a bot that is not an admin yet is caught on the connect page, with the fix, not at the first post.
  • The message link comes back: the result carries the post's t.me link, for public and private channels.
  • The update is written for Telegram: generate_posts writes it clear and direct, without hashtags, and the Discord, Bluesky and LinkedIn versions from the same news in one call.
Sources, all read on Oct 17, 2026:
  • Postiz — Post to Telegram from Claude Code (claude mcp add … https://mcp.postiz.com/mcp-oauth-dynamic, or the Postiz skill; bot from BotFather "configured once in the Postiz dashboard"): postiz.com/claude-code/telegram
  • Postiz pricing ("Start with a 7-day free trial"; Standard $29 a month, 5 channels): postiz.com/pricing
  • Upload-Post — Claude Code + Telegram (npx skills add Upload-Post/upload-post-skill; "a bot token and chat_id"; free API key, no card): www.upload-post.com/skills/claude-code/telegram/
  • 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
  • Telegram Bot API (sendMessage text "1-4096 characters"; media caption "0-1024 characters"): core.telegram.org/bots/api

Why post to Telegram from Claude Code

  • The facts are already on your machine: Claude Code reads git log, the changelog or a notes file and writes the channel's update from what actually happened this week.
  • One update, every community: "post this week's update to Telegram and Discord" 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 cron job or a release script: claude -p "post the latest tag's notes to our Telegram channel" --allowedTools "mcp__postwire__*" runs it without a chat. Without Claude Code, the same post is POST /api/post with {"platforms": ["telegram"], "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, Telegram integration and plans, read Oct 17, 2026.

Telegram's rules Claude Code works within

  • Text up to 4,096 characters; under a photo or a video, Telegram takes a caption of up to 1,024. For a long update with an image, keep the caption short or post the text on its own.
  • A bot posts only as an admin of the channel or group, and the message appears under the channel's name. One connection is one chat: the bot cannot post anywhere you did not add it.
  • One photo or one video per message, fetched by Telegram from its link.
  • Bursts are spaced, not refused: Telegram allows about one message a second per chat and 20 a minute in a group. PostWire leaves 3 seconds between posts to the same channel or group; when Telegram answers "retry after N seconds" it waits and sends again, and when the wait is too long for one request, the post is queued for after it and goes out by itself.
  • Revoked tokens are noticed: PostWire's connection check asks Telegram whether the token still works and the bot is still in the chat, and the dashboard says which one failed before a scheduled post is due.

Telegram's limits: Bot API, read Oct 17, 2026.

What it does not do

PostWire posts and schedules messages in the channel or group you connected. It does not read your chats, search messages, answer people, send direct messages or manage members, and it never logs in as your personal Telegram account: it only acts as the bot you created. It does not send albums of several photos in one message.

Questions people ask

Can Claude Code post to a Telegram channel?

Yes, with an MCP server or a skill. Claude Code has no Telegram access of its own; with PostWire added (claude mcp add --transport http postwire https://postwire.io/api/mcp) and a bot token and channel pasted once, it writes the message and posts or schedules it when you ask.

Do I need to write or host a Telegram bot?

No code and no hosting. Send /newbot to @BotFather, copy the token, add the bot to your channel as an admin and paste the token and the channel name on the connect page. PostWire does the sending.

Can it post to a private channel or a group?

Yes. Use @channelname for a public channel, and the numeric id (it starts with -100) for a private channel or a group. The bot has to be an admin there. Links to posts in a private channel open for its members.

How long can the message be?

Up to 4,096 characters of text, Telegram's limit. With a photo or a video the text becomes its caption, and Telegram takes captions of up to 1,024 characters.

Can Claude Code schedule Telegram posts?

Yes. It calls schedule_post with a time up to 365 days ahead, or "next_slot" for your next free posting hour, and PostWire sends it at that time with Claude Code closed. The free plan keeps 3 posts waiting at once; paid plans have no such limit.

What happens if I post many messages at once?

Telegram allows about one message a second per chat and 20 a minute in a group. PostWire spaces posts to the same chat, waits out a "retry after" from Telegram, and queues what cannot wait so it goes out after the pause instead of being lost.

How much does it cost?

The free plan includes Telegram, 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.