Action1 について
Action1は、Action1でエンドポイントを管理するチーム向けの読み取り専用MCPサーバーです。デバイス一覧、未適用パッチ、ポリシーを確認でき、MCP Apps対応ホストではインタラクティブなデバイスカードも表示できます。
主な機能
- 01ドメイン別のツール探索
- 02組織とエンドポイントの一覧
- 03エンドポイント詳細の表示
- 04未適用のOS・アプリ更新の確認
- 05ポリシーと修復ルールの一覧
- 06インタラクティブなデバイス概要カード
活用シーン
- 01組織内の管理対象デバイスを確認
- 02パッチ未適用のエンドポイントを特定
- 03自動化ポリシーを調査
- 04MCP Apps対応ホストで端末状態を表示
MCP 対応
MCPツールを通じて、Action1の組織、エンドポイント、更新、ポリシーの情報をMCPクライアントに公開します。エンドポイント詳細ツールは、MCP Apps対応ホストで読み取り専用のデバイスカードも表示できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e ACTION1_CLIENT_ID -e ACTION1_CLIENT_SECRET -e ACTION1_TENANT -e ACTION1_BASE_URL -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-technology/action1-mcp:v1.1.5ACTION1_CLIENT_IDAction1 OAuth client IDACTION1_CLIENT_SECRETシークレットAction1 OAuth client secretACTION1_TENANTAction1 tenant identifier (subdomain). Provide this or ACTION1_BASE_URL.ACTION1_BASE_URLAction1 base URL (e.g. https://your-instance.action1.com). Provide this or ACTION1_TENANT.MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.AUTH_MODEシークレットCredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.LOG_LEVELLog verbosity: debug, info, warn, errorローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/wyre-technology/action1-mcp:v1.1.5stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Action1 MCP サーバー
Action1 用の MCP サーバーです。Model Context Protocol を通じて、エンドポイントのインベントリ、パッチの可視化、ポリシーの自動化を行います。
v1 は読み取り専用です。デプロイ/自動化の機能は、影響範囲を抑えるため、意図的に後続リリースに分離しています(不適切なポリシーの適用により、エンドポイント群が使用不能になるおそれがあります)。
ツール
| ツール | 説明 |
|---|---|
action1_navigate | ドメイン別(organizations / endpoints / policies / updates)に利用可能なツールを確認します |
action1_list_organizations | 設定済みの認証情報でアクセスできる Action1 テナントを一覧表示します |
action1_list_endpoints | 組織内の管理対象デバイスを一覧表示します |
action1_get_endpoint | ID を指定して単一のエンドポイントを取得します |
action1_list_missing_updates | エンドポイント全体で不足している OS/アプリケーションのパッチを一覧表示します — Action1 の主な価値提案です |
action1_list_policies | 自動化/ポリシー/修復ルールを一覧表示します |
API の機能は PSAction1(Action1 の MIT ライセンスの PowerShell モジュール)に対応しています。v1 の機能が実用性を認められた後、書き込みツール(デプロイ、再クエリ、パッケージのアップロード)を、別途レビューしたうえで v2 に追加します。
インタラクティブなデバイスカード(MCP Apps)
action1_get_endpoint は MCP Apps ホスト(Claude Desktop/web)でインタラクティブなデバイス概要カードとして表示されます。ステータス、OS、ユーザー、IP、エージェントのバージョン、再起動の必要性、不足している更新プログラムの数を一目で確認できます。他のホストでは、従来どおりプレーンな JSON が返されます。このカードは読み取り専用(v1 のツール機能と同様)で、デフォルトでは中立的なデザインです。window.__BRAND__ の注入または MCP_BRAND_* 環境変数(MCP_BRAND_NAME、MCP_BRAND_LOGO_URL、MCP_BRAND_PRIMARY_COLOR、MCP_BRAND_ACCENT_COLOR、MCP_BRAND_BG、MCP_BRAND_TEXT)でブランド設定ができ、再ビルドは不要です。
使い方
Claude Desktop(MCPB)
最新リリースから MCPB バンドルをインストールします。
必要な認証情報(Action1 → Settings → API Credentials で作成します。作成後は再取得できないため、すぐにコピーしてください):
- API Key(Client ID)
- Secret
- Region(デフォルトは
NorthAmerica。NorthAmerica-2、Europe、Australiaも指定できます) - デフォルトの組織 ID(任意。単一テナントでの利用向け)
Stdio(直接)
ACTION1_API_KEY=... \
ACTION1_SECRET=... \
ACTION1_REGION=NorthAmerica \
ACTION1_DEFAULT_ORG_ID=org-... \
npx -y github:WYRE-AI/action1-mcp
HTTP
CONDUIT_S2S_SECRET が必要です。空、または既知のプレースホルダー(changeme、replace-with-a-real-secret など)の場合、HTTP サーバーはエラーをログに記録して、ゼロ以外の終了コードで終了します。シークレットが出力されることはありません。openssl rand -hex 32 で生成してください。
MCP_HTTP_HOST が未設定の場合、デフォルトは 127.0.0.1 です。0.0.0.0 を設定できるのは、CONDUIT_S2S_SECRET が設定されている場合のみです。コンテナイメージはこの設定を行い、AUTH_MODE=gateway を設定します。ポートは MCP_HTTP_PORT(または PORT)で指定し、デフォルトは 8080 です。
MCP_ALLOW_INSECURE_DEV=1 を設定すると、CONDUIT_S2S_SECRET なしで HTTP を起動し、警告をログに記録します。この場合、X-Gateway-S2S の検証はスキップされ、バインド先は 127.0.0.1 のみです。0.0.0.0 を含む、ループバック以外の MCP_HTTP_HOST が指定されている場合は起動しません。プレースホルダーのシークレットも引き続き拒否されます。ローカル開発専用です。
/health は認証なしで利用でき、認証情報を読み取りません。Stdio トランスポートでは CONDUIT_S2S_SECRET を使用しません。
X-Gateway-S2S
シークレットが設定されている場合、/health を除くすべての HTTP リクエストに X-Gateway-S2S を含める必要があります。値は t=<unix seconds>,v1=<hex> です。ここで hex は、CONDUIT_S2S_SECRET を鍵として、リテラル文字列 t=<unix seconds> の HMAC-SHA256 を計算した値です(小文字の 16 進数で 64 文字)。タイムスタンプはサーバーの時計との誤差が 300 秒以内である必要があります。ヘッダーがない、または無効な場合、ベンダーの認証情報を読み取る前に HTTP 401 を返します。
TS=$(date +%s)
SIG=$(printf 't=%s' "$TS" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}')
curl -sS http://127.0.0.1:8080/ \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "X-Gateway-S2S: t=${TS},v1=${SIG}" \
-H "X-Action1-API-Key: $ACTION1_API_KEY" \
-H "X-Action1-Secret: $ACTION1_SECRET" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
ゲートウェイモード(AUTH_MODE=gateway)
Docker イメージと Compose ファイルは、デフォルトでゲートウェイモードになります。すべてのリクエストに次のヘッダーを含める必要があります。
X-Action1-API-KeyX-Action1-SecretX-Action1-Region(任意)X-Action1-Default-Org-Id(任意)
API キーまたはシークレットを含まないリクエストには 401 が返され、プロセス環境の ACTION1_API_KEY / ACTION1_SECRET にはフォールバックしません。これらのヘッダーのみが、そのリクエストの認証情報の取得元です。
docker run \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-p 127.0.0.1:8080:8080 \
ghcr.io/wyre-ai/action1-mcp:latest
CONDUIT_S2S_SECRET が設定されていない場合、Compose は起動を拒否します。また、127.0.0.1:8080:8080 を公開し、静的な Action1 認証情報をコンテナに渡しません。
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up
シングルテナント HTTP(AUTH_MODE=env)
リクエストには引き続き、有効な X-Gateway-S2S ヘッダーが必要です。リクエストにベンダーの認証情報ヘッダーが含まれていない場合、ACTION1_API_KEY と ACTION1_SECRET から取得されます。
docker run \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-e AUTH_MODE=env \
-e ACTION1_API_KEY="$ACTION1_API_KEY" \
-e ACTION1_SECRET="$ACTION1_SECRET" \
-e ACTION1_REGION=NorthAmerica \
-p 127.0.0.1:8080:8080 \
ghcr.io/wyre-ai/action1-mcp:latest
シークレットなしのローカル HTTP は開発専用です。127.0.0.1 にバインドし、警告をログに記録します。
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm start
アーキテクチャ
src/
├── index.ts # stdio + HTTP transports, tool dispatch, S2S startup
├── s2s-verify.ts # X-Gateway-S2S HMAC-SHA256 check
├── card.builder.ts # MCP Apps device-card normalization + brand injection
├── resources.ts # resources/list + resources/read (ui:// device card)
├── generated/
│ └── device-card-html.ts # committed vite single-file bundle (npm run build:ui)
├── sdk/
│ └── action1-client.ts # embedded REST + OAuth client (factor-out candidate
│ # if surface crosses ~20 tools / 2+ domains)
├── utils/
│ ├── client.ts # credential resolution (env vs gateway headers)
│ └── types.ts # DomainHandler interface
├── domains/ # one file per resource type
│ ├── organizations.ts
│ ├── endpoints.ts
│ ├── policies.ts
│ └── updates.ts
└── __tests__/ # domain tests + MCP Apps contract tests
ui/ # device-card source (index.html + device-card.ts)
AsyncLocalStorage によるリクエストごとの認証情報の分離 — HTTP モードでは、同時実行されるリクエスト間で process.env を介して認証情報が共有されることはありません。
開発
npm install
npm run build
npm test
npm run dev # tsc --watch
npm run lint # eslint
npm run typecheck
ライセンス
Apache-2.0。詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。