crosspost-mcp
The crosspost-mcp server enables AI agents to cross-post content to multiple social media platforms using free APIs.
Post to Telegram (
post_to_telegram): Send a message (up to 4,096 characters) to a configured Telegram channel, with support for HTML formatting (<b>,<i>,<code>,<a href="">).Post to Discord (
post_to_discord): Send a message (up to 2,000 characters) to a configured Discord channel via webhook, with support for Discord markdown (**bold**,*italic*,`code`,```block```).Cross-post to all platforms simultaneously (
post_to_all): Broadcast the same message to all configured platforms in parallel. Failures on one platform don't affect others — each result is reported separately with an overall status ofok,partial, orerror.Extensible architecture: Mastodon, Bluesky, and Reddit are planned for future versions. New platforms can be added by dropping a module in the
platforms/folder.Secure configuration: Platform credentials are managed via environment variables or a
.envfile.
Allows posting content to Bluesky via App Password authentication (planned for v0.3.0).
Allows posting messages to a Discord channel via webhooks.
Allows posting content to a Mastodon instance (planned for v0.2.0).
Allows posting content to Reddit via OAuth (planned for v0.4.0).
Allows posting messages to a Telegram channel via Bot API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@crosspost-mcpCross-post to all: New blog post is up!"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
crosspost-mcp
MCP server that lets AI agents cross-post content to Telegram, Discord, Mastodon, Bluesky, and Reddit — using free APIs only.
Why crosspost-mcp
AI agents can now draft, research, and refine content end-to-end — but publishing to social media is still the manual bottleneck. crosspost-mcp closes that gap by exposing posting tools over the Model Context Protocol, so Claude Desktop, Cursor, and other MCP-compatible clients can publish on your behalf with a single prompt.
Related MCP server: Social CLI MCP
Demo
Claude calls post_to_discord and the message appears in your channel instantly:

Features
Free APIs only — no paid SaaS middlemen; Telegram Bot API, Discord webhooks, and upcoming platform APIs are all free-tier friendly
Async parallel posting —
post_to_allfans out to every configured platform concurrentlyType-hinted — full Python type annotations on tools and platform modules
Dataclass configs — frozen dataclasses per platform with clear missing-variable errors
Easy to extend — add a new platform by dropping a module in
platforms/and registering a tool
Supported Platforms
Platform | Status | Free Tier | Notes |
Telegram | ✅ v0.1.0 | unlimited | Bot API |
Discord | ✅ v0.1.0 | unlimited | webhooks |
Mastodon | 🚧 v0.2.0 | unlimited | requires instance |
Bluesky | 🚧 v0.3.0 | unlimited | App Password |
🚧 v0.4.0 | rate-limited | OAuth |
🚀 Quick Start
Clone & install
git clone https://github.com/Aleksey-Panf/crosspost-mcp.git
cd crosspost-mcp
pip install -e .Setup credentials
Copy the example env file and fill in your tokens:
cp .env.example .envEdit .env with your Telegram bot token, Discord webhook URL, and any other platform credentials you plan to use.
Add to Claude Desktop
Open your Claude Desktop MCP config:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the server entry (adjust the path to your clone):
{
"mcpServers": {
"crosspost-mcp": {
"command": "crosspost-mcp",
"cwd": "/path/to/crosspost-mcp",
"env": {
"TELEGRAM_BOT_TOKEN": "your_bot_token",
"TELEGRAM_CHAT_ID": "your_chat_id",
"DISCORD_WEBHOOK_URL": "https://discord.com/api/webhooks/..."
}
}
}
}Tip: If
crosspost-mcpis not on your PATH, use the full path to the executable inside your virtualenv, or pointcommandtopythonwithargs: ["-m", "crosspost_mcp.server"].
Cursor users can add the same block under Settings → MCP → Add server.
Restart Claude Desktop
Fully quit and relaunch Claude Desktop (or reload MCP in Cursor). The post_to_telegram, post_to_discord, and post_to_all tools should appear in the tool list.
Usage Examples
Give your AI agent natural-language instructions — it picks the right MCP tool automatically.
Example 1 — Discord only
Post to Discord: "v0.1.0 is live — crosspost-mcp now supports Telegram and Discord webhooks."
Claude calls post_to_discord with the message text and returns the Discord message_id and channel_id.
Example 2 — Telegram only
Announce on Telegram that we shipped parallel cross-posting. Use bold for the version number.
Claude calls post_to_telegram with HTML formatting (<b>v0.1.0</b>) and confirms the message_id.
Example 3 — Cross-post everywhere
Cross-post this to all platforms: "New blog post is up — link in bio."
Claude calls post_to_all, which posts to Telegram and Discord in parallel and returns a combined status (ok, partial, or error) with per-platform results.
🔧 Tool Reference
post_to_telegram
Post a message to the configured Telegram channel.
Signature |
|
Arguments |
|
Returns | Platform result dict |
Example response:
{
"platform": "telegram",
"status": "ok",
"message_id": 42,
"chat_id": -1001234567890
}post_to_discord
Post a message to the configured Discord channel via webhook.
Signature |
|
Arguments |
|
Returns | Platform result dict |
Example response:
{
"platform": "discord",
"status": "ok",
"message_id": "1234567890123456789",
"channel_id": "9876543210987654321"
}post_to_all
Cross-post the same message to all configured platforms in parallel.
Signature |
|
Arguments |
|
Returns | Aggregated result with overall status and per-platform entries |
Individual platform failures do not abort the others. Each failure is reported with status: "error" and an error message.
Example response:
{
"status": "ok",
"results": [
{
"platform": "telegram",
"status": "ok",
"message_id": 42,
"chat_id": -1001234567890
},
{
"platform": "discord",
"status": "ok",
"message_id": "1234567890123456789",
"channel_id": "9876543210987654321"
}
]
}Getting Credentials
Telegram
Open Telegram and message @BotFather.
Send
/newbot, follow the prompts, and copy the bot token.Add the bot as an admin to your target channel with Post Messages permission.
Get the chat ID:
For public channels, use
@channelname(include the@).For private channels, forward a channel message to @userinfobot or call
getUpdateson the Bot API after posting in the channel.
Set
TELEGRAM_BOT_TOKENandTELEGRAM_CHAT_IDin your.env.
Discord
Open your Discord server and go to the target channel.
Click the gear icon → Integrations → Webhooks → New Webhook.
Name the webhook, select the channel, and click Copy Webhook URL.
Set
DISCORD_WEBHOOK_URLin your.env.
No bot application or OAuth flow required — webhooks are the simplest path for AI agent posting.
Project Structure
crosspost-mcp/
├── assets/ # Screenshots and demo images
├── src/
│ └── crosspost_mcp/
│ ├── __init__.py
│ ├── config.py # Dataclass configs loaded from .env
│ ├── server.py # FastMCP server and tool definitions
│ └── platforms/
│ ├── __init__.py
│ ├── telegram.py # Telegram Bot API client
│ └── discord.py # Discord webhook client
├── tests/
├── .env.example # Credential template
├── pyproject.toml
└── README.mdRoadmap
Telegram support
Discord support
Parallel cross-posting
Mastodon support (v0.2.0)
Bluesky support (v0.3.0)
Reddit support (v0.4.0)
Media/image attachments
Scheduled posting
Contributing
Contributions are welcome — bug reports, platform modules, and documentation improvements all help. Open an issue to discuss larger changes before submitting a pull request.
Custom MCP Development
I build production-ready MCP servers on demand for custom platforms and workflows.
Delivery: 3–7 days
Workflow: Async-only, no calls
Payment: USDT
Contact: Telegram @AlexAi14 or open a GitHub issue
License
MIT — see LICENSE for details.
Topics: mcp · model-context-protocol · fastmcp · telegram-bot · discord-webhook · ai-agents · claude · llm-tools
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aleksey-Panf/crosspost-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server