MCP 서버

fast-mcp-telegram

io.github.leshchenko1979/fast-mcp-telegram
커뮤니케이션 소셜 미디어 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Reads, searches, sends, edits, and manages messages, chats, users, groups, and channels through Telegram.

edit_message
Edit message
Replace the text of an existing message in a Telegram chat. Only works on messages sent by the authenticated account. Cannot edit media or other message attributes — text only. parse_mode: classic markdown/html/auto or rich (Rich Message; dialect auto-detected). Success: dict with message_id, date, chat, text, status='edited', and edit_date (rich messages also set rich=true and rich_format). Error: dict with ok=false and error string (e.g. message not found or not editable). Use edit_message to update a previously sent message; use send_message to create new ones. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
파괴적 작업 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['chat_id', 'message_id', 'message'], 'properties': {'chat_id': {'type': 'string', 'description': "Target chat: numeric id (e.g. -100â\x80¦), username without @, or 'me' for Saved Messages."}, 'message': {'type': 'string', 'description': 'Message text. When sending files, used as caption.'}, 'message_id': {'type': 'integer', 'description': 'Message id in this chat to edit (from get_messages or Telegram).'}, 'parse_mode': {'enum': ['markdown', 'html', 'auto', 'rich'], 'type': 'string', 'default': 'auto', 'description': "'markdown'/'html'/'auto': classic entity formatting (auto detects). 'rich': Telegram Rich Message document; dialect auto-detected (known HTML tags outside code â\x86\x92 rich HTML, else rich markdown). Default is 'auto'. parse_mode='rich' cannot be combined with files."}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'chat': {'type': 'object', 'additionalProperties': True}, 'code': {'type': 'integer'}, 'date': {'type': 'string'}, 'rich': {'type': 'boolean'}, 'text': {'type': 'string'}, 'error': {'type': 'string'}, 'action': {'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': True}, 'sender': {'type': 'object', 'additionalProperties': True}, 'status': {'type': 'string'}, 'topic_id': {'type': 'integer'}, 'edit_date': {'type': 'string'}, 'exception': {'type': 'object', 'additionalProperties': True}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}, 'message_id': {'type': 'integer'}, 'rich_format': {'type': 'string'}, 'reply_markup': {'type': 'object', 'additionalProperties': True}}, 'description': 'Return type for ``send_message`` and ``edit_message``.'}
find_chats
Find chats
Find users/groups/channels by name, username, or phone. Comma-separated usernames are searched in parallel and results are merged round-robin. Global search (query required) searches all Telegram; with min_date, max_date, or filter, search uses dialog list or a named filter; include_peers filters use last-activity from GetPeerDialogs; flag-based filters use dialog list dates. Success: dict with key chats (list of chat objects). Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'description': 'Maximum chats to return (recommended 50 or less).'}, 'query': {'type': 'string', 'default': None, 'description': "Name, username (no @), phone (+countryâ\x80¦), or comma-separated usernames for batch lookup. Example: 'alice,bob,charlie'. Required for global search unless you use min_date/max_date or folder alone."}, 'folder': {'type': 'string', 'default': None, 'description': 'Telegram folder name (case-insensitive exact match after normalization). In Telegram\'s UI these are called folders; internally they are "dialog filters" â\x80\x94 saved filter presets that group chats by custom criteria (pinned, unread, business, etc.). See Filters-vs-Folders.md for the technical distinction.'}, 'public': {'type': 'boolean', 'default': None, 'description': 'If true, prefer chats with a public username; if false, without. Does not apply to private DMs. Omit to skip this filter.'}, 'max_date': {'type': 'string', 'default': None, 'description': 'Inclusive maximum date filter (ISO 8601 date or datetime). Omit for no upper bound.'}, 'min_date': {'type': 'string', 'default': None, 'description': 'Inclusive minimum date filter (ISO 8601 date or datetime). Omit for no lower bound.'}, 'chat_type': {'type': 'string', 'default': None, 'description': 'Comma-separated chat kinds: private, bot, group, channel. Case-insensitive; extra spaces allowed.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'code': {'type': 'integer'}, 'chats': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'error': {'type': 'string'}, 'action': {'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': True}, 'exception': {'type': 'object', 'additionalProperties': True}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}}, 'description': 'Return type for ``find_chats``.'}
get_chat_info
Get chat info
Load profile and metadata for one user, bot, group, or channel. Success: info dict; forum chats may include topics up to topics_limit; user targets may include common_chats up to common_chats_limit. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['chat_id'], 'properties': {'chat_id': {'type': 'string', 'description': "Target chat: numeric id (e.g. -100â\x80¦), username without @, or 'me' for Saved Messages."}, 'topics_limit': {'type': 'integer', 'default': 20, 'description': 'Max forum topics to list when the chat is a forum.'}, 'common_chats_limit': {'type': 'integer', 'default': 10, 'description': 'Max common groups to list for user targets.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'integer'}, 'ok': {'type': 'boolean'}, 'code': {'type': 'integer'}, 'error': {'type': 'string'}, 'phone': {'type': 'string'}, 'title': {'type': 'string'}, 'action': {'type': 'string'}, 'is_bot': {'type': 'boolean'}, 'params': {'type': 'object', 'additionalProperties': True}, 'topics': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'is_user': {'type': 'boolean'}, 'is_forum': {'type': 'boolean'}, 'is_group': {'type': 'boolean'}, 'username': {'type': 'string'}, 'exception': {'type': 'object', 'additionalProperties': True}, 'last_name': {'type': 'string'}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}, 'first_name': {'type': 'string'}, 'is_channel': {'type': 'boolean'}, 'common_chats': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'topics_has_more': {'type': 'boolean'}, 'participants_count': {'type': 'integer'}, 'common_chats_has_more': {'type': 'boolean'}}, 'description': 'Return type for ``get_chat_info``.'}
get_messages
Get messages in chat
Read or search messages in one chat: browse latest, search text, fetch by ids, or load replies to a message (comments, forum topics, threads). Use from_user to filter by sender (server-side, per-chat only). Use context to include neighboring messages and reply chains around each result. Use include_replies to fetch up to 5 direct replies per result. Do not combine message_ids with query or reply_to_id. Success: messages, has_more, optional total_count and discussion fields. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['chat_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'description': 'Maximum messages to return (recommended 50 or less).'}, 'query': {'type': 'string', 'default': None, 'description': 'Search within this chat only; comma-separated terms. Omit to browse latest or use message_ids / reply_to_id modes.'}, 'chat_id': {'type': 'string', 'description': "Target chat: numeric id (e.g. -100â\x80¦), username without @, or 'me' for Saved Messages."}, 'context': {'type': 'integer', 'default': 0, 'maximum': 10, 'minimum': 0, 'description': 'Number of surrounding messages to include as context for each search result. 0 = disabled (default). 1-10 = include N messages before and N after each result. Also fetches the message being replied to and top replies (if include_replies=true). Requires chat_id. Disabled when result count exceeds cost-based caps.'}, 'max_date': {'type': 'string', 'default': None, 'description': 'Inclusive maximum date filter (ISO 8601 date or datetime). Omit for no upper bound.'}, 'min_date': {'type': 'string', 'default': None, 'description': 'Inclusive minimum date filter (ISO 8601 date or datetime). Omit for no lower bound.'}, 'from_user': {'type': 'string', 'default': None, 'description': "Only return messages from this sender. Not a display-name or contact-name search â\x80\x94 bare strings resolve like chat_id via get_entity (usernames are case-insensitive and may match an unrelated channel). Prefer @username, phone (+â\x80¦), or numeric user id. Also accepts 'me', 'self', t.me URL, -100 prefixed id. Uses Telegram's native from_id server-side filter (per-chat search only)."}, 'message_ids': {'type': 'array', 'items': {'type': 'integer'}, 'default': None, 'description': 'Exact message ids to fetch. Mutually exclusive with query and reply_to_id.'}, 'reply_to_id': {'type': 'integer', 'default': None, 'description': 'Anchor message id: channel post id, forum topic_id from get_chat_info, or a message id for direct replies. Use with thread_scope.'}, 'thread_scope': {'enum': ['auto', 'full', 'direct'], 'type': 'string', 'default': 'auto', 'description': 'Only with reply_to_id. auto: full forum topic (topic_id) or channel comment thread via getReplies; else direct replies. full: nested branch under a message id (forum in-topic uses search window, not whole topic); supergroup threads use search top_msg_id. direct: immediate replies only.'}, 'include_replies': {'type': 'boolean', 'default': False, 'description': 'If true, fetch up to 5 direct replies per search result and attach as replies. Each result costs one API call (not batchable). Default: false.'}, 'auto_expand_batches': {'type': 'integer', 'default': 2, 'description': 'Extra search batches to run when filters narrow results. Higher values may return more matches at the cost of latency.'}, 'include_total_count': {'type': 'boolean', 'default': False, 'description': 'If true, response may include total_count where supported (per-chat search; ignored for global search).'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'code': {'type': 'integer'}, 'error': {'type': 'string'}, 'action': {'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': True}, '_warning': {'type': 'string'}, 'has_more': {'type': 'boolean'}, 'messages': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'exception': {'type': 'object', 'additionalProperties': True}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}, 'total_count': {'type': 'integer'}}, 'description': 'Return type for ``search_messages_globally`` and ``get_messages``.'}
invoke_mtproto
Invoke MTProto
Low-level Telegram API (MTProto) invoke for methods not wrapped by other tools. Dangerous methods require allow_dangerous=true. Success: API result dict or normalized error. PII and credential-shaped fields (phone, access_hash) are dropped from a successful result by default; pass include_sensitive=true for the raw payload. A bare message id needs a chat binding: requests with no peer field (messages.GetMessages, messages.DeleteMessages) are refused, because a bare id resolves against an arbitrary dialog. Use channels.GetMessages or messages.GetHistory, which carry the binding. messages.GetHistory cannot address a forum topic (no thread_id/top_msg_id in the schema, and channels.GetHistory does not exist) -- use messages.Search with top_msg_id, or the high-level get_messages with reply_to_id. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
파괴적 작업 외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['method_full_name', 'params_json'], 'properties': {'resolve': {'type': 'boolean', 'default': True, 'description': 'If true, resolve string/int peer-like fields to TL Input* entities before invoke.'}, 'params_json': {'type': 'string', 'description': 'JSON object string of TL parameters as in Telegram API docs; nested TL uses "_": "typeName" discriminator.'}, 'allow_dangerous': {'type': 'boolean', 'default': False, 'description': 'If false, destructive methods (e.g. deletes) are blocked. Set true only when intended.'}, 'method_full_name': {'type': 'string', 'description': 'Telegram API method, e.g. "messages.GetHistory" or "users.GetFullUser" (normalization applied).'}, 'include_sensitive': {'type': 'boolean', 'default': False, 'description': 'If true, return the raw result including PII and credential-shaped fields (phone, access_hash). Default false drops them.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'_': {'type': 'string'}, 'id': {'type': 'integer'}, 'ok': {'type': 'boolean'}, 'code': {'type': 'integer'}, 'date': {'type': 'integer'}, 'chats': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'error': {'type': 'string'}, 'users': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'action': {'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': True}, 'result': {}, 'messages': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'exception': {'type': 'object', 'additionalProperties': True}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}}, 'description': 'Return type for ``invoke_mtproto``.\n\nThe success payload is a JSON-safe dict whose shape depends on the\nTelegram API method invoked.  Common top-level fields are listed here;\neverything else passes through as-is.'}
search_messages_globally
Search messages globally
Search all Telegram chats at once (not scoped to one chat). Comma-separated query terms; optional filters by date, chat kind, and public username. Success: message list and metadata dict. Global search ignores include_total_count. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'description': 'Maximum messages to return (recommended 50 or less).'}, 'query': {'type': 'string', 'description': 'Search terms, comma-separated for multiple terms (OR-style global search). Required.'}, 'public': {'type': 'boolean', 'default': None, 'description': 'If true, prefer chats with a public username; if false, without. Does not apply to private DMs. Omit to skip this filter.'}, 'max_date': {'type': 'string', 'default': None, 'description': 'Inclusive maximum date filter (ISO 8601 date or datetime). Omit for no upper bound.'}, 'min_date': {'type': 'string', 'default': None, 'description': 'Inclusive minimum date filter (ISO 8601 date or datetime). Omit for no lower bound.'}, 'chat_type': {'type': 'string', 'default': None, 'description': 'Comma-separated chat kinds: private, bot, group, channel. Case-insensitive; extra spaces allowed.'}, 'auto_expand_batches': {'type': 'integer', 'default': 2, 'description': 'Extra search batches to run when filters narrow results. Higher values may return more matches at the cost of latency.'}, 'include_total_count': {'type': 'boolean', 'default': False, 'description': 'If true, response may include total_count where supported (per-chat search; ignored for global search).'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'code': {'type': 'integer'}, 'error': {'type': 'string'}, 'action': {'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': True}, '_warning': {'type': 'string'}, 'has_more': {'type': 'boolean'}, 'messages': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'exception': {'type': 'object', 'additionalProperties': True}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}, 'total_count': {'type': 'integer'}}, 'description': 'Return type for ``search_messages_globally`` and ``get_messages``.'}
send_message
Send message
Send text and optional file attachments to a Telegram chat. Supports reply-to (including forum topics and channel discussion groups), parse_mode: classic markdown/html/auto (entities) or rich (Rich Message document; dialect auto-detected). parse_mode=rich cannot be combined with files. File attachments as http(s) URLs, local paths, or data: URIs. When files are provided, the message text becomes a caption. For channel posts with reply_to_id, automatically posts in the linked discussion group. Success: dict with message_id, date, chat, text, status='sent', and sender info (rich messages also set rich=true and rich_format). Error: dict with ok=false and error string. Use send_message to create new messages; use edit_message to modify existing ones. Use send_message_to_phone when targeting a phone number instead of a chat_id. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
파괴적 작업 외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['chat_id', 'message'], 'properties': {'files': {'type': 'array', 'items': {'type': 'string'}, 'default': None, 'description': 'List of attachment URLs, local paths, or data URIs (one or more strings). data: URIs (data:<mime>;base64,<payload>) work in all server modes; local paths work in stdio mode only.'}, 'chat_id': {'type': 'string', 'description': "Target chat: numeric id (e.g. -100â\x80¦), username without @, or 'me' for Saved Messages."}, 'message': {'type': 'string', 'description': 'Message text. When sending files, used as caption.'}, 'parse_mode': {'enum': ['markdown', 'html', 'auto', 'rich'], 'type': 'string', 'default': 'auto', 'description': "'markdown'/'html'/'auto': classic entity formatting (auto detects). 'rich': Telegram Rich Message document; dialect auto-detected (known HTML tags outside code â\x86\x92 rich HTML, else rich markdown). Default is 'auto'. parse_mode='rich' cannot be combined with files."}, 'reply_to_id': {'type': 'integer', 'default': None, 'description': 'Telegram message id to reply to. For forums, topic root id; for channel posts, post id (may create a comment). Omit for a new top-level message.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'chat': {'type': 'object', 'additionalProperties': True}, 'code': {'type': 'integer'}, 'date': {'type': 'string'}, 'rich': {'type': 'boolean'}, 'text': {'type': 'string'}, 'error': {'type': 'string'}, 'action': {'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': True}, 'sender': {'type': 'object', 'additionalProperties': True}, 'status': {'type': 'string'}, 'topic_id': {'type': 'integer'}, 'edit_date': {'type': 'string'}, 'exception': {'type': 'object', 'additionalProperties': True}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}, 'message_id': {'type': 'integer'}, 'rich_format': {'type': 'string'}, 'reply_markup': {'type': 'object', 'additionalProperties': True}}, 'description': 'Return type for ``send_message`` and ``edit_message``.'}
send_message_to_phone
Send message to phone
Send to a phone number: may create a temporary contact, then send text or files. Supports parse_mode: classic markdown/html/auto or rich (Rich Message; dialect auto-detected). parse_mode=rich cannot be combined with files. Success: send result plus contact_was_new / contact_removed when applicable. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md
파괴적 작업 외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['phone_number', 'message'], 'properties': {'files': {'type': 'array', 'items': {'type': 'string'}, 'default': None, 'description': 'List of attachment URLs, local paths, or data URIs (one or more strings). data: URIs (data:<mime>;base64,<payload>) work in all server modes; local paths work in stdio mode only.'}, 'message': {'type': 'string', 'description': 'Message text. When sending files, used as caption.'}, 'last_name': {'type': 'string', 'default': 'Name', 'description': 'Last name when creating a temporary contact.'}, 'first_name': {'type': 'string', 'default': 'Contact', 'description': 'First name when creating a temporary contact.'}, 'parse_mode': {'enum': ['markdown', 'html', 'auto', 'rich'], 'type': 'string', 'default': 'auto', 'description': "'markdown'/'html'/'auto': classic entity formatting (auto detects). 'rich': Telegram Rich Message document; dialect auto-detected (known HTML tags outside code â\x86\x92 rich HTML, else rich markdown). Default is 'auto'. parse_mode='rich' cannot be combined with files."}, 'phone_number': {'type': 'string', 'description': 'E.164 phone number with country code, e.g. +1234567890 (must be on Telegram).'}, 'remove_if_new': {'type': 'boolean', 'default': False, 'description': 'If true, delete the contact after send when it was created only for this send.'}, 'reply_to_msg_id': {'type': 'integer', 'default': None, 'description': 'Reply to this message id in the target chat after resolve.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'chat': {'type': 'object', 'additionalProperties': True}, 'code': {'type': 'integer'}, 'date': {'type': 'string'}, 'rich': {'type': 'boolean'}, 'text': {'type': 'string'}, 'error': {'type': 'string'}, 'action': {'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': True}, 'sender': {'type': 'object', 'additionalProperties': True}, 'status': {'type': 'string'}, 'topic_id': {'type': 'integer'}, 'edit_date': {'type': 'string'}, 'exception': {'type': 'object', 'additionalProperties': True}, 'operation': {'type': 'string'}, 'error_code': {'type': 'string'}, 'message_id': {'type': 'integer'}, 'rich_format': {'type': 'string'}, 'phone_number': {'type': 'string'}, 'reply_markup': {'type': 'object', 'additionalProperties': True}, 'contact_removed': {'type': 'boolean'}, 'contact_was_new': {'type': 'boolean'}}, 'description': 'Return type for ``send_message_to_phone``.'}
변경됨
invoke_mtproto
2026년 9월 27일 2:45 AM
변경됨
send_message_to_phone
2026년 9월 27일 2:45 AM
변경됨
get_chat_info
2026년 9월 27일 2:45 AM
변경됨
find_chats
2026년 9월 27일 2:45 AM
변경됨
edit_message
2026년 9월 27일 2:45 AM
변경됨
send_message
2026년 9월 27일 2:45 AM
변경됨
get_messages
2026년 9월 27일 2:45 AM
변경됨
search_messages_globally
2026년 9월 27일 2:45 AM
추가됨
invoke_mtproto
2026년 9월 17일 12:43 PM
추가됨
send_message_to_phone
2026년 9월 17일 12:43 PM
추가됨
get_chat_info
2026년 9월 17일 12:43 PM
추가됨
find_chats
2026년 9월 17일 12:43 PM
추가됨
edit_message
2026년 9월 17일 12:43 PM
추가됨
send_message
2026년 9월 17일 12:43 PM
추가됨
get_messages
2026년 9월 17일 12:43 PM
추가됨
search_messages_globally
2026년 9월 17일 12:43 PM