Action1

io.github.WYRE-AI由 GitHub 账号 WYRE-AI 发布v1.1.9更新于 Oct 24, 2026

Action1 MCP server — endpoint inventory, patch visibility, and policy automation via REST API.

概览

AI 生成的概览

面向 Action1 的只读 MCP 服务器,通过 REST API 让助手查看组织、终端设备、缺失补丁与策略。

可以做什么
  • 按领域发现可用工具(组织、终端、策略、更新)
  • 列出可访问的 Action1 租户与受管终端,并按 id 查询单个终端
  • 列出各终端缺失的操作系统与应用补丁
  • 列出自动化、策略与修复规则
  • 在支持 MCP Apps 的宿主中渲染只读的交互式设备卡片
适用场景
适合需要让助手回答 Action1 受管设备群相关问题的场景,例如有哪些终端、缺少哪些补丁、适用哪些策略。由于是只读的,更适合审计与汇报,而非执行修复。
运行要求
以 stdio 本地运行(通过 npx 从 GitHub 仓库启动)或使用容器镜像;需要 Action1 的 API key 与 secret(在 Settings → API Credentials 创建),通过 ACTION1_API_KEY 与 ACTION1_SECRET 提供,另需区域 ACTION1_REGION 及可选的默认组织 id。HTTP 模式还需 CONDUIT_S2S_SECRET 与 X-Gateway-S2S 签名,或使用网关请求头。
安装前请注意
需要 Action1 API 凭据,README 说明创建后不可再次获取,须妥善保存。未设置 CONDUIT_S2S_SECRET 的 HTTP 模式仅供开发,且只绑定回环地址;网关模式下凭据仅来自请求头。v1 为只读,但后续版本计划加入部署与软件包上传等写操作。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Action1,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Action1 MCP Server

[MCP Compatible] [License]

MCP server for Action1 — endpoint inventory, patch visibility, and policy automation via the Model Context Protocol.

Read-only in v1. Deploy / automation surface is intentionally separated to a later release for blast-radius reasons (a bad policy push can brick endpoint fleets).

Tools

ToolDescription
action1_navigateDiscover available tools by domain (organizations / endpoints / policies / updates)
action1_list_organizationsList Action1 tenants accessible to the configured credentials
action1_list_endpointsList managed devices in an organization
action1_get_endpointGet a single endpoint by id
action1_list_missing_updatesList missing OS/application patches across endpoints — Action1's headline value-prop
action1_list_policiesList automation / policy / remediation rules

API surface maps to PSAction1 (Action1's MIT-licensed PowerShell module). When the v1 surface earns its keep, write tools (deploy, requery, package upload) come in v2 behind separate review.

Interactive Device Card (MCP Apps)

action1_get_endpoint renders as an interactive device-summary card in MCP Apps hosts (Claude Desktop/web) — status, OS, user, IP, agent version, reboot-required, and missing-update counts at a glance; plain-JSON behavior is unchanged in other hosts. The card is read-only (matching the v1 tool surface), neutral by default, and brandable via window.__BRAND__ injection or MCP_BRAND_* env vars (MCP_BRAND_NAME, MCP_BRAND_LOGO_URL, MCP_BRAND_PRIMARY_COLOR, MCP_BRAND_ACCENT_COLOR, MCP_BRAND_BG, MCP_BRAND_TEXT) — no rebuild needed.

Usage

Claude Desktop (MCPB)

Install via the MCPB bundle from the latest release.

Required credentials (created in Action1 → Settings → API Credentials, non-recoverable on creation — copy immediately):

  • API Key (Client ID)
  • Secret
  • Region (NorthAmerica default; also NorthAmerica-2, Europe, Australia)
  • Optional default organization id (for single-tenant use)

Stdio (direct)

bash
ACTION1_API_KEY=... \ACTION1_SECRET=... \ACTION1_REGION=NorthAmerica \ACTION1_DEFAULT_ORG_ID=org-... \npx -y github:WYRE-AI/action1-mcp

HTTP

CONDUIT_S2S_SECRET is required. If it is empty or a known placeholder (changeme, replace-with-a-real-secret, and similar), the HTTP server logs an error and exits non-zero. It never prints the secret. Generate one with openssl rand -hex 32.

MCP_HTTP_HOST defaults to 127.0.0.1 when unset. Set 0.0.0.0 only when CONDUIT_S2S_SECRET is set. The container image does that and sets AUTH_MODE=gateway. MCP_HTTP_PORT (or PORT) selects the port and defaults to 8080.

MCP_ALLOW_INSECURE_DEV=1 starts HTTP without CONDUIT_S2S_SECRET, logs a warning, skips X-Gateway-S2S, and binds 127.0.0.1 only. A non-loopback MCP_HTTP_HOST (including 0.0.0.0) refuses to start. A placeholder secret is still rejected. Local development only.

/health stays unauthenticated and does not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.

X-Gateway-S2S

Every HTTP request except /health must include X-Gateway-S2S when a secret is configured. The value is t=<unix seconds>,v1=<hex>, where the hex is HMAC-SHA256 of the literal string t=<unix seconds> keyed with CONDUIT_S2S_SECRET (64 lowercase hex characters). The timestamp must be within 300 seconds of the server clock. A missing or invalid header is HTTP 401, before vendor credentials are read.

bash
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"}'
Gateway mode (AUTH_MODE=gateway)

The Docker image and Compose file default to gateway mode. Every request must include:

  • X-Action1-API-Key
  • X-Action1-Secret
  • X-Action1-Region (optional)
  • X-Action1-Default-Org-Id (optional)

A request missing the API key or secret gets 401 and does not fall back to ACTION1_API_KEY / ACTION1_SECRET in the process environment. Those headers are the only credential source for that request.

bash
docker run \  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \  -p 127.0.0.1:8080:8080 \  ghcr.io/wyre-ai/action1-mcp:latest

Compose refuses to start when CONDUIT_S2S_SECRET is unset, publishes 127.0.0.1:8080:8080, and does not pass static Action1 credentials into the container:

bash
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up
Single-tenant HTTP (AUTH_MODE=env)

Requests still require a valid X-Gateway-S2S header. Vendor credentials come from ACTION1_API_KEY and ACTION1_SECRET when the request does not carry those headers.

bash
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

Local HTTP without a secret is development-only. It binds 127.0.0.1 and logs a warning:

bash
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm start

Architecture

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 testsui/                           # device-card source (index.html + device-card.ts)

Per-request credential isolation via AsyncLocalStorage — concurrent requests in HTTP mode never share credentials through process.env.

Development

bash
npm installnpm run buildnpm testnpm run dev      # tsc --watchnpm run lint     # eslintnpm run typecheck

License

Apache-2.0. See LICENSE.

来源:README.md,提交 8df2bcc

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

3
  1. v1.1.9最新Oct 14, 2026
  2. v1.1.8Oct 5, 2026
  3. v1.1.7Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分