Initial commit: Hermes Agent skills collection
- Trading skills (OKX, dividend, lottery, quantitative) - Creative skills (ASCII art, diagrams, video) - Development skills (GitHub, debugging, TDD) - Research skills (arXiv, blog monitoring) - Productivity skills (email, documents, notes) - MCP integration skills - Custom user skills
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# Telegram MCP Server Comparison (2026-06-15)
|
||||
|
||||
## Server Options Found on GitHub (sorted by popularity)
|
||||
|
||||
### 1. chaindead/telegram-mcp ⭐ 300+
|
||||
- **Language**: Go
|
||||
- **Auth**: MTProto (real account)
|
||||
- **Install**: `brew install chaindead/tap/telegram-mcp` or `go install` or binary
|
||||
- **Features**: Dialog list, unread messages, mark read, drafts, message retrieval, contacts, media download
|
||||
- **Transport**: stdio
|
||||
- **Pros**: Most popular, well-documented, cross-platform
|
||||
- **Cons**: Go binary (harder to debug/extend), requires Go 1.24+ for source install
|
||||
|
||||
### 2. sparfenyuk/mcp-telegram ⭐ active (RECOMMENDED)
|
||||
- **Language**: Python
|
||||
- **Auth**: MTProto (real account)
|
||||
- **Install**: `uv tool install git+https://github.com/sparfenyuk/mcp-telegram`
|
||||
- **Features**: Same as chaindead — dialogs, messages, contacts, media, drafts
|
||||
- **Transport**: stdio
|
||||
- **Pros**: Python (easy to extend), uv-based install, CLI sign-in flow
|
||||
- **Cons**: Less stars than chaindead; **pydantic-settings env var conflict** — sign-in command reads ALL `.env` vars and rejects unknowns. Use direct Telethon login instead (see `telethon-login.py`)
|
||||
|
||||
### 3. fast-mcp-telegram (leshchenko1979) ⭐ 46
|
||||
- **Language**: Python
|
||||
- **Auth**: MTProto (real account)
|
||||
- **Install**: `uv tool install fast-mcp-telegram`
|
||||
- **Features**: Production-grade, multi-user ACL, dual transport (stdio + HTTP SSE), voice transcription
|
||||
- **Transport**: stdio + HTTP SSE
|
||||
- **Pros**: Most feature-rich, ACL for multi-user, voice transcription
|
||||
- **Cons**: **Does NOT support SOCKS5 proxy** — only MTProto proxy (`tg://proxy`). Unusable on servers behind firewalls (e.g. China) that need SOCKS5/HTTP proxy to reach Telegram.
|
||||
|
||||
### 4. zhigang1992/telegram-mcp ⭐ 14
|
||||
- **Language**: TypeScript
|
||||
- **Auth**: MTProto
|
||||
- **Features**: Send/read/search messages, wait for incoming, conversation history
|
||||
- **Transport**: stdio
|
||||
|
||||
### 5. IQAIcom/mcp-telegram ⭐ 7
|
||||
- **Language**: TypeScript
|
||||
- **Auth**: Bot API (BotFather token)
|
||||
- **Features**: Send message, get channel info, forward, pin, get members
|
||||
- **Limitation**: Bot API only — cannot access contacts, personal chats, or global search
|
||||
- **Use case**: Channel/bot management, NOT personal account access
|
||||
|
||||
### 6. moltis ⭐ 2740
|
||||
- **Note**: Full agent platform (Rust), not a standalone MCP server
|
||||
- **Overkill** if you just want Telegram MCP
|
||||
|
||||
## Recommendation
|
||||
|
||||
**For Hermes integration (default)**: Use `sparfenyuk/mcp-telegram` (Python, uv install). Skip `mcp-telegram sign-in` due to pydantic env var conflict — use the direct Telethon login script instead.
|
||||
|
||||
**For firewalled servers (China, etc.)**: MUST use `sparfenyuk/mcp-telegram` — it's the only one supporting SOCKS5 proxy via `python-socks`. `fast-mcp-telegram` will fail to connect.
|
||||
|
||||
**Avoid** Bot API-based servers (like IQAIcom) if you need contacts, cross-chat search, or personal account access.
|
||||
|
||||
## Key Distinction: MTProto vs Bot API
|
||||
|
||||
| | MTProto | Bot API |
|
||||
|---|---|---|
|
||||
| Auth | Your real TG account | Bot token from @BotFather |
|
||||
| Contacts | ✅ | ❌ |
|
||||
| All chats | ✅ | Only where bot is added |
|
||||
| Global search | ✅ | ❌ |
|
||||
| Rate limits | Per-account | Per-bot (more lenient) |
|
||||
| Risk | Account suspension if abused | Low risk |
|
||||
|
||||
## Proxy Support Matrix
|
||||
|
||||
| Server | SOCKS5 | HTTP Proxy | MTProto Proxy |
|
||||
|---|---|---|---|
|
||||
| sparfenyuk/mcp-telegram | ✅ (python-socks) | ❌ | ❌ |
|
||||
| chaindead/telegram-mcp | ❓ | ❓ | ❓ |
|
||||
| fast-mcp-telegram | ❌ | ❌ | ✅ |
|
||||
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Telegram MTProto login script for first-time authentication.
|
||||
Bypasses mcp-telegram's pydantic-settings env_file conflict.
|
||||
|
||||
Usage (user must run interactively via SSH):
|
||||
bash /tmp/tg_login.sh
|
||||
|
||||
The script will:
|
||||
1. Ask for phone number
|
||||
2. Send verification code to Telegram
|
||||
3. Prompt for code (type immediately when received)
|
||||
4. Handle 2FA if needed
|
||||
5. Save session for mcp-telegram to use
|
||||
"""
|
||||
import asyncio
|
||||
from telethon import TelegramClient
|
||||
from telethon.errors import SessionPasswordNeededError
|
||||
import socks
|
||||
import sys
|
||||
import os
|
||||
|
||||
# === Configuration ===
|
||||
# Update these or read from env
|
||||
API_ID = int(os.environ.get('TG_API_ID', '0'))
|
||||
API_HASH = os.environ.get('TG_API_HASH', '')
|
||||
SESSION_PATH = os.path.expanduser('~/.local/share/state/mcp-telegram/mcp_telegram_session')
|
||||
PROXY = (socks.SOCKS5, '127.0.0.1', 7890) # Mihomo
|
||||
|
||||
|
||||
async def main():
|
||||
if not API_ID or not API_HASH:
|
||||
print("Error: Set TG_API_ID and TG_API_HASH environment variables first.")
|
||||
print(" export TG_API_ID=your_id")
|
||||
print(" export TG_API_HASH=your_hash")
|
||||
sys.exit(1)
|
||||
|
||||
phone = input("Phone number (with country code, e.g. +1234567890): ").strip()
|
||||
|
||||
# Ensure session directory exists
|
||||
os.makedirs(os.path.dirname(SESSION_PATH), exist_ok=True)
|
||||
|
||||
client = TelegramClient(SESSION_PATH, API_ID, API_HASH, proxy=PROXY)
|
||||
|
||||
try:
|
||||
await client.start(phone=phone)
|
||||
except SessionPasswordNeededError:
|
||||
pwd = input("2FA password: ").strip()
|
||||
await client.sign_in(password=pwd)
|
||||
|
||||
me = await client.get_me()
|
||||
print(f"\n✅ Login successful!")
|
||||
print(f" User: {me.username} (ID: {me.id})")
|
||||
print(f" Session saved to: {SESSION_PATH}")
|
||||
print(f"\nYou can now use mcp-telegram MCP server.")
|
||||
await client.disconnect()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
# Telegram MTProto login script
|
||||
# Run this via SSH: bash /tmp/tg_login.sh
|
||||
#
|
||||
# This bypasses the mcp-telegram CLI (which has pydantic-settings env conflicts)
|
||||
# and uses Telethon directly with SOCKS5 proxy.
|
||||
|
||||
/home/openclaw/.local/share/uv/tools/mcp-telegram/bin/python3 << 'EOF'
|
||||
import asyncio
|
||||
from telethon import TelegramClient
|
||||
from telethon.errors import SessionPasswordNeededError
|
||||
import socks
|
||||
|
||||
API_ID = 37679203
|
||||
API_HASH = '514a2ba8b7898365c9070da4739e8deb'
|
||||
SESSION = '/home/openclaw/.local/share/state/mcp-telegram/mcp_telegram_session'
|
||||
|
||||
async def main():
|
||||
phone = input("Phone (e.g. +1234567890): ").strip()
|
||||
client = TelegramClient(
|
||||
SESSION, API_ID, API_HASH,
|
||||
proxy=(socks.SOCKS5, '127.0.0.1', 7890)
|
||||
)
|
||||
await client.start(phone=phone)
|
||||
me = await client.get_me()
|
||||
print(f"\n✅ Logged in as: {me.username} (ID: {me.id})")
|
||||
await client.disconnect()
|
||||
|
||||
asyncio.run(main())
|
||||
EOF
|
||||
Reference in New Issue
Block a user