mcpField
A
aiogram-mcp

aiogram-mcp

ローカル
github.com/Py2755コミュニケーション332 週間前に更新

aiogram-mcp について

aiogram-mcpは、既存のaiogram製TelegramボットをAIクライアント向けのMCPサーバーにします。メッセージ送信、モデレーション、インラインキーボード、リソース、プロンプト、イベント通知に対応し、権限や監査ログを設定できます。

主な機能

  1. 01メッセージ送信とモデレーション用の30ツール
  2. 02インラインキーボード付きのインタラクティブメッセージ
  3. 037つのリソースと3つのワークフロープロンプト
  4. 04Telegramイベントのプッシュ通知
  5. 05権限レベルとチャットのアクセス制限
  6. 06レート制限と任意の監査ログ

活用シーン

  1. 01既存ボットを通じたメッセージやメディアの送信
  2. 02Telegramメニューの作成とボタン操作への対応
  3. 03ポーリングなしでのフィルター付きチャットイベント受信
  4. 04エージェントの権限制限とツール利用記録の確認

MCP 対応

aiogramボットと並行して動作し、その機能をMCPツール、リソース、プロンプトとして公開します。stdioとSSEに対応し、購読したイベント通知をMCPクライアントにプッシュできます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"py2755-aiogram": {
"command": "uvx",
"args": [
"aiogram-mcp"
],
"env": {
"BOT_TOKEN": "<BOT_TOKEN>"
}
}
}
}
起動コマンドuvx aiogram-mcp
設定が必要な環境変数
BOT_TOKENシークレットTelegram Bot API token from @BotFather

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiaiogram-mcp0.7.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

aiogram-mcp

CI Python 3.10+ License: MIT PyPI version MCP Registry

Model Context Protocol を通じて、Telegram ボットを AI エージェントに接続します。

aiogram-mcp を使うと、あらゆる aiogram ボットを MCP サーバーにできます。Claude Desktop などの AI クライアントは、既存のボットを通じてメッセージの送信、チャット履歴の読み取り、インタラクティブメニューの作成、リアルタイムでのイベントへの応答を行えます。ハンドラーを書き直す必要はありません。

aiogram-mcp を選ぶ理由

多くの Telegram MCP サーバーは、3~5 個のツールを備えた薄いラッパーにすぎません。aiogram-mcp はそれ以上の機能を提供します。

  • 30 個のツール — メッセージング、リッチメディア、モデレーション、インタラクティブキーボード、イベントサブスクリプション、ブロードキャスト
  • 7 個のリソース — ボット情報、設定、チャット一覧、メッセージ履歴、イベントキュー、ファイルメタデータ、監査ログ
  • 3 個のプロンプト — モデレーション、告知、ユーザー報告のためのすぐに使えるワークフロー
  • 構造化出力 — すべてのツールが、プログラムで解析できる outputSchema 付きの型付き Pydantic モデルを返します
  • リアルタイムイベント — ボットは MCP 通知を介して Telegram イベントを AI クライアントに送信します(ポーリング不要)
  • インタラクティブメッセージ — AI エージェントがインラインキーボードメニューを作成し、ボタン操作に対応し、メッセージを編集できます
  • レート制限 — 組み込みのトークンバケットにより、Telegram の 429 エラーを防ぎます
  • 権限レベル — AI エージェントのアクセスを、読み取り専用、メッセージ送信、モデレーション、または管理者全権に制限できます
  • 監査ログ — すべてのツール呼び出しを、タイムスタンプと引数とともに記録します
  • 書き換え不要 — 既存のボットに 5 行追加するだけで、すべてのハンドラーをそのまま使えます

仕組み

Telegram users                Your aiogram bot              AI agent (Claude Desktop)
      |                             |                              |
      |  send messages, tap buttons |                              |
      | --------------------------> |                              |
      |                             |  MCP server (stdio or SSE)   |
      |                             | <------------------------->  |
      |                             |  tools / resources / events  |
      |                             |                              |
      |  bot replies, shows menus   |   send_message, edit, ban    |
      | <-------------------------- | <--------------------------- |

ボットは Telegram ユーザー向けに通常どおり動作します。MCP サーバーはそのボットと並行して動作し、AI エージェントがツールとリソースを通じて同じボットを利用できるようにします。

インストール

pip install aiogram-mcp

Python 3.10+ と aiogram 3.20+ が必要です。

クイックスタート

1. ボットに aiogram-mcp を追加する
import asyncio
from aiogram import Bot, Dispatcher
from aiogram_mcp import AiogramMCP, EventManager, MCPMiddleware

bot = Bot(token="YOUR_BOT_TOKEN")
dp = Dispatcher()

# Middleware tracks chats, users, message history, and events
event_manager = EventManager()
middleware = MCPMiddleware(event_manager=event_manager)
dp.message.middleware(middleware)
dp.callback_query.middleware(middleware)  # for interactive buttons

# Register your normal handlers here
# @dp.message(...)
# async def my_handler(message): ...

# Create the MCP server
mcp = AiogramMCP(
    bot=bot,
    dp=dp,
    name="my-bot",
    middleware=middleware,
    event_manager=event_manager,
    allowed_chat_ids=[123456789],  # optional: restrict which chats AI can access
)

async def main():
    await mcp.run_alongside_bot(transport="stdio")

asyncio.run(main())
2. Claude Desktop に接続する

claude_desktop_config.json に追加します。

{
  "mcpServers": {
    "my-telegram-bot": {
      "command": "python",
      "args": ["path/to/your/bot.py"],
      "env": {
        "BOT_TOKEN": "123456:ABC-DEF..."
      }
    }
  }
}

これで Claude は、Telegram ボットでメッセージの送信、履歴の読み取り、ボタンメニューの作成、イベントへの応答を行えるようになります。

組み込みツール

メッセージング(5 個のツール)
ツール説明
send_messageHTML/Markdown 形式のテキストを送信します
send_photoURL を指定して写真を送信します。キャプションは任意です
forward_messageチャット間でメッセージを転送します
delete_messageメッセージを削除します
pin_messageチャット内でメッセージをピン留めします
インタラクティブメッセージ(3 個のツール)
ツール説明
send_interactive_messageインラインキーボードボタン(コールバックまたは URL)付きのメッセージを送信します
edit_message既存のメッセージのテキストやキーボードを編集します
answer_callback_queryボタン操作にトーストまたはアラートで応答します
ユーザー(3 個のツール)
ツール説明
get_bot_infoボットのメタデータ(ユーザー名、機能)を取得します
get_chat_member_infoチャット内のユーザーの役割とプロフィールを取得します
get_user_profile_photosユーザーのプロフィール写真を取得します
チャット(6 個のツール)
ツール説明
get_chat_infoチャットのメタデータ(タイトル、種類、説明)を取得します
get_chat_members_countチャットのメンバー数を取得します
ban_userユーザーを永久または一時的に禁止します
unban_userユーザーの禁止を解除します
set_chat_titleチャットのタイトルを変更します
set_chat_descriptionチャットの説明を変更します
リッチメディア(10 ツール)
ツール説明
send_documentURL を指定してファイル/ドキュメントを送信します。キャプションは任意です
send_voiceURL を指定して音声メッセージを送信します
send_videoURL を指定して動画を送信します。キャプションは任意です
send_animationURL を指定して GIF/アニメーションを送信します
send_audioURL、演奏者、タイトルを指定して音声/音楽を送信します
send_stickerfile_id または URL を指定してスタンプを送信します
send_video_noteURL を指定して円形のビデオメッセージを送信します
send_contact電話番号と名前を指定して連絡先を送信します
send_location位置情報のピンを送信します
send_poll複数の選択肢がある投票を作成します
イベント(2 ツール)
ツール説明
subscribe_eventsチャット/種類のフィルターを指定してリアルタイムイベントを購読します
unsubscribe_events購読を解除します
ブロードキャスト(1 ツール、オプトイン)
ツール説明
broadcast複数のチャットにメッセージを送信します(enable_broadcast=True が必要です)

MCP リソース

AI エージェントがツールを呼び出さずにアクセスできる読み取り専用データです。

URI説明
telegram://bot/infoボットのユーザー名、ID、機能
telegram://configサーバー名と許可されたチャット ID
telegram://chatsメタデータ付きのアクティブなチャット一覧
telegram://chats/{chat_id}/historyチャット内の直近 50 件のメッセージ
telegram://events/queue自動インクリメント ID 付きのイベントキュー
telegram://files/{file_id}ファイルのメタデータ(サイズ、パス、一意の ID)
telegram://audit/logツール呼び出しの監査ログ(オプトイン)

MCP プロンプト

AI エージェントに構造化されたコンテキストを提供する、事前構築済みのワークフローです。

プロンプト引数機能
moderation_promptchat_id、user_id、reasonユーザー情報とメッセージ履歴を取得し、警告/ミュート/BAN を提案します
announcement_prompttopic、audience?、tone?形式を整えた Telegram の告知文を作成します
user_report_promptchat_id、user_idユーザーの全アクティビティレポートをまとめます

リアルタイムイベントストリーミング

AI エージェントがポーリングする必要はありません。ボットがイベントを自動的にプッシュします。

Telegram message arrives
    → MCPMiddleware captures it
        → EventManager stores it (type: "message", "command", or "callback_query")
            → MCP notification sent to subscribed clients
                → AI agent reads telegram://events/queue

AI エージェントは subscribe_events を一度呼び出すだけで、フィルターに一致する新しいイベントが発生するたびにプッシュ通知を受け取ります。

インタラクティブメッセージ

AI エージェントは Telegram でメニュー、確認、複数ステップのウィザードなど、完全なインタラクティブ UI を構築できます。

AI エージェントがボタン付きのメッセージを送信します。

┌─────────────────────────┐
│ Confirm deployment?     │
│                         │
│  [✅ Yes]  [❌ No]      │
│  [📖 View docs]        │
└─────────────────────────┘

ユーザーがボタンをタップ → イベントがキューに追加 → AI エージェントが応答します。

┌─────────────────────────┐
│ ✅ Deployed!            │
│                         │
│  [📋 View logs]        │
└─────────────────────────┘

ボタンの押下を捕捉するには、ボットに dp.callback_query.middleware(middleware) が必要です。

安全制御

mcp = AiogramMCP(
    bot=bot,
    dp=dp,
    allowed_chat_ids=[123456789, -1001234567890],  # restrict AI access
    enable_broadcast=True,            # opt-in for broadcast tool
    max_broadcast_recipients=500,     # safety limit
)
  • allowed_chat_ids — AI が操作できるのは一覧にあるチャットのみです。デフォルト:すべてのチャット。
  • enable_broadcast — 安全対策として、ブロードキャストツールはデフォルトで無効です。
  • max_broadcast_recipients — 1 回のブロードキャストで対象にできるチャット数の上限です。

詳細設定

レート制限
mcp = AiogramMCP(
    bot=bot, dp=dp,
    rate_limit=30,  # requests/sec (default), 0 to disable
)

組み込みのトークンバケット型レートリミッターにより、Telegram の 429 エラーを防ぎます。すべての送信 API 呼び出しのペースは自動的に調整されます。

権限レベル
mcp = AiogramMCP(
    bot=bot, dp=dp,
    permission_level="messaging",  # read + messaging tools only
)
レベルアクセス権
readボット情報、チャット情報、ユーザープロフィール
messaging読み取りに加え、メッセージ、写真、メディア、インタラクティブメッセージの送信
moderationメッセージングに加え、削除、ピン留め、BAN、BAN 解除、チャット設定
adminブロードキャストやイベント購読を含む、すべてのアクセス権
監査ログ
mcp = AiogramMCP(
    bot=bot, dp=dp,
    enable_audit=True,
    audit_log_size=1000,
)

すべてのツール呼び出しが記録されます。telegram://audit/log リソースからアクセスできます。

例

例トランスポート機能
basic_bot.pystdioミドルウェア、イベント、コールバック追跡を含む完全なセットアップ
incident_alert_bot.pySSEインシデント通知用のブロードキャスト対応運用ボット

開発

git clone https://github.com/Py2755/aiogram-mcp.git
cd aiogram-mcp
pip install -e ".[dev]"

pytest -v          # ~228 tests
ruff check aiogram_mcp tests examples
mypy aiogram_mcp   # strict mode

ライセンス

MIT。LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。