{
  "markdown": "# Action1 MCP Server\n\n[![MCP Compatible](https://img.shields.io/badge/MCP-compatible-blue)](https://modelcontextprotocol.io)\n[![License](https://img.shields.io/badge/license-Apache--2.0-green)](LICENSE)\n\nMCP server for [Action1](https://www.action1.com/) — endpoint inventory, patch visibility, and policy automation via the [Model Context Protocol](https://modelcontextprotocol.io).\n\nRead-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).\n\n## Tools\n\n| Tool | Description |\n|---|---|\n| `action1_navigate` | Discover available tools by domain (organizations / endpoints / policies / updates) |\n| `action1_list_organizations` | List Action1 tenants accessible to the configured credentials |\n| `action1_list_endpoints` | List managed devices in an organization |\n| `action1_get_endpoint` | Get a single endpoint by id |\n| `action1_list_missing_updates` | List missing OS/application patches across endpoints — Action1's headline value-prop |\n| `action1_list_policies` | List automation / policy / remediation rules |\n\nAPI surface maps to [PSAction1](https://github.com/Action1Corp/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.\n\n### Interactive Device Card (MCP Apps)\n\n`action1_get_endpoint` renders as an interactive device-summary card in MCP\nApps hosts (Claude Desktop/web) — status, OS, user, IP, agent version,\nreboot-required, and missing-update counts at a glance; plain-JSON behavior is\nunchanged in other hosts. The card is read-only (matching the v1 tool surface),\nneutral by default, and brandable via `window.__BRAND__` injection or\n`MCP_BRAND_*` env vars (`MCP_BRAND_NAME`, `MCP_BRAND_LOGO_URL`,\n`MCP_BRAND_PRIMARY_COLOR`, `MCP_BRAND_ACCENT_COLOR`, `MCP_BRAND_BG`,\n`MCP_BRAND_TEXT`) — no rebuild needed.\n\n## Usage\n\n### Claude Desktop (MCPB)\n\nInstall via the MCPB bundle from the [latest release](https://github.com/WYRE-AI/action1-mcp/releases).\n\nRequired credentials (created in Action1 → Settings → API Credentials, **non-recoverable on creation — copy immediately**):\n- API Key (Client ID)\n- Secret\n- Region (`NorthAmerica` default; also `Europe`, `AsiaPacific`, `Australia`)\n- Optional default organization id (for single-tenant use)\n\n### Stdio (direct)\n\n```bash\nACTION1_API_KEY=... \\\nACTION1_SECRET=... \\\nACTION1_REGION=NorthAmerica \\\nACTION1_DEFAULT_ORG_ID=org-... \\\nnpx -y github:WYRE-AI/action1-mcp\n```\n\n### HTTP (gateway mode)\n\n```bash\nMCP_TRANSPORT=http PORT=8080 AUTH_MODE=gateway \\\n  docker run -p 8080:8080 ghcr.io/wyre-ai/action1-mcp:latest\n```\n\nPer-request credentials via headers:\n- `X-Action1-API-Key`\n- `X-Action1-Secret`\n- `X-Action1-Region`\n- `X-Action1-Default-Org-Id`\n\n## Architecture\n\n```\nsrc/\n├── index.ts                  # stdio + HTTP transports, tool dispatch\n├── card.builder.ts           # MCP Apps device-card normalization + brand injection\n├── resources.ts              # resources/list + resources/read (ui:// device card)\n├── generated/\n│   └── device-card-html.ts   # committed vite single-file bundle (npm run build:ui)\n├── sdk/\n│   └── action1-client.ts     # embedded REST + OAuth client (factor-out candidate\n│                             # if surface crosses ~20 tools / 2+ domains)\n├── utils/\n│   ├── client.ts             # credential resolution (env vs gateway headers)\n│   └── types.ts              # DomainHandler interface\n├── domains/                  # one file per resource type\n│   ├── organizations.ts\n│   ├── endpoints.ts\n│   ├── policies.ts\n│   └── updates.ts\n└── __tests__/                # domain tests + MCP Apps contract tests\nui/                           # device-card source (index.html + device-card.ts)\n```\n\nPer-request credential isolation via `AsyncLocalStorage` — concurrent requests in HTTP mode never share credentials through `process.env`.\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm test\nnpm run dev      # tsc --watch\nnpm run lint     # eslint\nnpm run typecheck\n```\n\n## License\n\nApache-2.0. See [LICENSE](LICENSE).\n",
  "bytes": 4142,
  "sha": "a52f1ff8778587726c06f15d937d9a0844f3c48a18de8a5fc649a694997adde9",
  "repo_slug": "wyre-ai/action1-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_wyre_ai_action1_mcp_13f87c73/readme"
}