AWS IoT Core について
AWS IoT Core MCP サーバーは、デバイスレジストリ、シャドウ、ジョブ、ルール、メッセージ機能を MCP ツールとして提供します。AWS IoT Core のデバイスやフリートを管理する用途向けです。
主な機能
- 01デバイスとグループの管理
- 02デバイスシャドウの読み取りと更新
- 03フリートジョブの作成と追跡
- 04MQTT メッセージの送信
- 05証明書、ポリシー、ルールの管理
活用シーン
- 01デバイス登録情報の検索や更新
- 02デバイスの希望状態・報告状態の更新
- 03フリートへのメッセージ送信やジョブの予約
MCP 対応
AWS IoT Core のデバイスレジストリ、シャドウ、ジョブ、ルール、メッセージ、証明書、ポリシーを操作するツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx aws-iot-core-mcp-serverAWS_ACCESS_KEY_IDシークレットAWS access key IDAWS_SECRET_ACCESS_KEYシークレットAWS secret access keyAWS_SESSION_TOKENシークレットAWS session token, for temporary credentialsAWS_PROFILENamed profile from ~/.aws/credentials, as an alternative to explicit keysAWS_REGIONAWS region -- required, AWS IoT Core is regionalローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
AWS IoT Core MCP サーバー
AWS IoT Core のための Model Context Protocol(MCP)サーバーです。デバイスレジストリ、デバイスシャドウ、ジョブ(フリート管理)、ルールエンジン、メッセージングを扱います。
対象は IoT Core 自体に意図的に限定しています。Greengrass(別個のエッジデプロイ API)、IoT SiteWise(公式の awslabs MCP サーバーがすでにあります)、Device Defender/Events/TwinMaker は対象外です。これらはそれぞれ独自の API を持つ独立した AWS サービスであり、個別のコネクターが必要になります。
FastMCP と boto3 を使用して構築されています。
ツール
Things(デバイスレジストリ)
| ツール | 説明 |
|---|---|
list_things(thing_type_name, attribute_name, attribute_value, thing_group_name, max_results) | Things を一覧表示します。絞り込み条件を指定できます。 |
search_things(query_string, index_name, max_results) | フリートインデックスを検索します。例:attributes.location:"lab-1"。インデックス作成を有効にする必要があります。 |
get_thing(thing_name) | Thing の属性とタイプを取得します。 |
create_thing(thing_name, thing_type_name, attributes, billing_group_name, overwrite=False) | 新しい Thing を登録します。 |
update_thing(thing_name, attributes, thing_type_name, remove_thing_type, attributes_merge=True) | Thing の属性/タイプを更新します。 |
delete_thing(thing_name, confirm=False) | Thing を削除します。取り消せません。 |
Thing タイプと Thing グループ
| ツール | 説明 |
|---|---|
list_thing_types(thing_type_name) / get_thing_type(thing_type_name) | Thing タイプを一覧表示/読み取ります。 |
create_thing_type(thing_type_name, description, searchable_attributes) | Thing タイプを作成します。作成後は変更できず(AWS の制約)、以降は非推奨化のみ可能です。 |
deprecate_thing_type(thing_type_name, undo=False) | Thing タイプを非推奨化(または非推奨化を解除)します。 |
list_thing_groups(parent_group, name_prefix_filter) / get_thing_group(thing_group_name) | Thing グループを一覧表示/読み取ります。 |
create_thing_group(thing_group_name, parent_group_name, attributes, overwrite=False) | Thing グループを作成します。 |
delete_thing_group(thing_group_name, confirm=False) | Thing グループを削除します。取り消せません。 |
modify_thing_group_membership(thing_name, thing_group_name, action) | action="add" で Thing をグループに追加し、"remove" でグループから削除します。 |
list_things_in_thing_group(thing_group_name) | グループのメンバーを一覧表示します。 |
デバイスシャドウ(データプレーン)
| ツール | 説明 |
|---|---|
get_thing_shadow(thing_name, shadow_name) | Thing のシャドウドキュメント(desired/reported/delta)を読み取ります。shadow_name を省略すると、クラシック(名前なし)シャドウを取得します。 |
update_thing_shadow(thing_name, desired, reported, shadow_name) | desired および/または reported の状態をマージして更新します。 |
delete_thing_shadow(thing_name, shadow_name, confirm=False) | シャドウドキュメントを削除します。 |
list_named_shadows_for_thing(thing_name) | Thing の名前付き(クラシック以外の)シャドウを一覧表示します。 |
メッセージング
| ツール | 説明 |
|---|---|
publish_message(topic, payload, qos=0) | IoT データプレーン経由で、デバイスフリートに MQTT メッセージをパブリッシュします。 |
ジョブ(フリート管理)
| ツール | 説明 |
|---|---|
list_jobs(status, thing_group_name, max_results) / get_job(job_id) | ジョブを一覧表示/読み取ります。 |
create_job(job_id, thing_arns, document, description, target_selection="SNAPSHOT") | フリートジョブを作成します(OTA アップデートやリモートコマンドなど)。 |
cancel_job(job_id, confirm=False, comment, force=False) | ジョブをキャンセルします。 |
delete_job(job_id, confirm=False, force=False) | ジョブを削除します。取り消せません。 |
list_job_executions_for_job(job_id, status) / list_job_executions_for_thing(thing_name, status) | デバイスごとの実行ステータスを追跡します。 |
証明書とポリシー(デバイス認証)
| ツール | 説明 |
|---|---|
create_keys_and_certificate(set_as_active=True) | 新しい鍵ペアと証明書を生成します。秘密鍵が返されるのは一度だけです。すぐに取得してください。 |
get_certificate(certificate_id) / list_certificates(page_size) | 証明書のメタデータを読み取ります。 |
set_certificate_status(certificate_id, status) | ACTIVE、INACTIVE、または REVOKED に設定します。 |
delete_certificate(certificate_id, confirm=False, force_delete=False) | 証明書を削除します。元に戻せません。 |
create_policy(policy_name, policy_document, overwrite=False) / get_policy / list_policies | IAM形式の IoT ポリシー(JSON ドキュメント)を管理します。 |
delete_policy(policy_name, confirm=False) | ポリシーを削除します。元に戻せません。 |
modify_policy_attachment(policy_name, target, action) | ポリシーを証明書 ARN にアタッチ/デタッチします。 |
modify_thing_principal(thing_name, principal, action) | 証明書(プリンシパル)を Thing にアタッチ/デタッチします。 |
list_thing_principals(thing_name) / list_principal_things(principal) | Thing と証明書の関連付けを、どちらの方向からも検索します。 |
ルールエンジン
| ツール | 説明 |
|---|---|
list_topic_rules(topic) / get_topic_rule(rule_name) | SQL ベースのメッセージルーティングルールを一覧表示/読み取ります。 |
put_topic_rule(rule_name, sql, actions, description, sql_version, overwrite=False) | ルールを作成または置き換えます。actions は AWS アクションオブジェクト(例:{"lambda": {"functionArn": "..."}})のリストです。 |
set_topic_rule_enabled(rule_name, enabled) | ルールを削除せずに有効化/無効化します。 |
delete_topic_rule(rule_name, confirm=False) | ルールを削除します。元に戻せません。 |
その他
| ツール | 説明 |
|---|---|
get_endpoint(endpoint_type) | このアカウントの IoT Core データエンドポイント(デフォルトは iot:Data-ATS)を検索します。 |
安全性に関する規約
このリポジトリのほかの機能と同じく、create_*/put_* のデフォルトは overwrite=False です(ベストエフォートです。AWS IoT API 自体には、これらの操作のほとんどに条件付き書き込みヘッダーがないため、これは説明を取得してから作成するチェックであり、Ditto の If-None-Match のように完全に競合を防ぐものではありません)。すべての delete_*/cancel_* では confirm=True が必要です。
設定
標準の AWS SDK 認証情報解決を使用します。認証用のカスタム環境変数はありません。セットアップに応じて、以下のいずれかを設定してください。
| 環境変数 | 説明 |
|---|---|
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN | 明示的な認証情報です。 |
AWS_PROFILE | ~/.aws/credentials にある名前付きプロファイルです。 |
AWS_REGION / AWS_DEFAULT_REGION | 必須です。AWS IoT Core はリージョンごとに提供されます。 |
AWS_ENDPOINT_URL | API エンドポイントを上書きします(例:LocalStack 用)。boto3 がネイティブに読み取ります。 |
または、EC2/ECS/Lambda など、IAM ロールがアタッチされた環境で実行する場合は IAM ロールを使用します。boto3 の認証情報に関するドキュメントを参照してください。
ローカルでの実行
uv sync
export AWS_REGION=us-east-1
# plus whichever credential env vars apply to you
uv run awsiotcoremcpserver.py
すぐに使えるクライアント設定(stdio と Docker)は mcp.json を参照してください。
テスト
このリポジトリの設計原則では、モックではなく実際のインスタンスを使ったテストを推奨しています。AWS IoT Core には公式のローカルエミュレーターがなく、LocalStack の IoT サポートには有料プランが必要です(無料プランはありません)。そのため、このサーバーはこのリポジトリで唯一の例外です。テストでは、成熟した無料のオープンソース AWS API エミュレーターである moto を使います(手作りのモックではなく、このサーバーが呼び出す実際の boto3 呼び出しに対して、実際のリクエスト/レスポンスの動作を実装しています)。
uv run pytest -v
ライセンスに関する注記
ここには同梱のデプロイ用アーティファクトはありません(ほかのサーバーとは異なります)。ローカルで実行するブローカー/サービスがなく、AWS IoT Core は AWS がホストするサービスとしてのみ提供されるためです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。