{"_id":"@awesomate/fleet-mcp","_rev":"2-a1149238b75830e6ec0c9ee607549c60","name":"@awesomate/fleet-mcp","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@awesomate/fleet-mcp","version":"0.1.0","license":"UNLICENSED","_id":"@awesomate/fleet-mcp@0.1.0","maintainers":[{"name":"awesomate","email":"andrew@itmooti.com"}],"bin":{"awesomate-fleet-mcp":"dist/index.js","awesomate-fleet-bootstrap":"scripts/bootstrap.mjs"},"dist":{"shasum":"8db2839ae09ee05cdf9af4475b7b6f71b6823afd","tarball":"https://registry.npmjs.org/@awesomate/fleet-mcp/-/fleet-mcp-0.1.0.tgz","fileCount":5,"integrity":"sha512-/7z7BqfgZbb8J5voOqrSUhma2hP5AUVqsqUf74Wdnd24m9+IYxphWb7UENq+S3cs7yYQhGNi3LZ6v8PZV9ii6g==","signatures":[{"sig":"MEYCIQD3ROEvfmS/zeJcBDujD4K9qRC04br4IWDOLWMvfbXL4QIhAOji1vwBATnAE/nMgmv9XRmJ/9pif3rbrmOWVVpodz1w","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1539993},"type":"module","gitHead":"d151c1d587bd835d3d0e0ea23c6afe5db6957b2a","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --target=node18 --format=esm --outfile=dist/index.js --banner:js='#!/usr/bin/env node\nimport { createRequire as __awfCreateRequire } from \"node:module\"; const require = __awfCreateRequire(import.meta.url);' --external:node:*","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"awesomate","email":"andrew@itmooti.com"},"_npmVersion":"10.8.2","description":"Awesomate Fleet MCP — read-only fleet operations for the Awesomate team. Not for clients.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.24.1","undici":"^6.21.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/fleet-mcp_0.1.0_1785935482244_0.8983204933279845","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@awesomate/fleet-mcp","version":"0.2.0","description":"Awesomate Fleet MCP — read-only fleet operations for the Awesomate team. Not for clients.","license":"UNLICENSED","type":"module","publishConfig":{"access":"public"},"bin":{"awesomate-fleet-mcp":"dist/index.js","awesomate-fleet-bootstrap":"scripts/bootstrap.mjs"},"scripts":{"build":"esbuild src/index.ts --bundle --platform=node --target=node18 --format=esm --outfile=dist/index.js --banner:js='#!/usr/bin/env node\nimport { createRequire as __awfCreateRequire } from \"node:module\"; const require = __awfCreateRequire(import.meta.url);' --external:node:*","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","undici":"^6.21.0","zod":"^3.24.1"},"devDependencies":{"@types/node":"^25.9.3","esbuild":"^0.25.0","typescript":"^6.0.3"},"_id":"@awesomate/fleet-mcp@0.2.0","gitHead":"59d65095078564103bd9faee47795deeaddeeed6","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-aAjtqkcInh1ZyUaz+23ORC921ZULdhMjv31p4ihZ/rgmJwvXYVIqFYo/JUbIo3/bJ9VCETgftPKGcZ8BWE8zzA==","shasum":"b0dac1465d7ba1bdc517ad3768fda5d0d57b2f0c","tarball":"https://registry.npmjs.org/@awesomate/fleet-mcp/-/fleet-mcp-0.2.0.tgz","fileCount":5,"unpackedSize":1542630,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCZoD2pPuQPp+wOcsz1AYWfcfBYyd3bQBg88oYYMrGdjQIhAI3CsdvzdR0iebip8TQ7VjFfZNG6gA4i2/DcfD4uelYs"}]},"_npmUser":{"name":"awesomate","email":"andrew@itmooti.com"},"directories":{},"maintainers":[{"name":"awesomate","email":"andrew@itmooti.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fleet-mcp_0.2.0_1787918612101_0.10920437485233436"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-05T13:11:22.020Z","modified":"2026-08-28T12:03:32.404Z","0.1.0":"2026-08-05T13:11:22.447Z","0.2.0":"2026-08-28T12:03:32.242Z"},"license":"UNLICENSED","description":"Awesomate Fleet MCP — read-only fleet operations for the Awesomate team. Not for clients.","maintainers":[{"name":"awesomate","email":"andrew@itmooti.com"}],"readme":"# @awesomate/fleet-mcp\n\nRead-only fleet operations for the **Awesomate team**, from Claude Code. This is not a client tool — clients use [`@awesomate/hosting-mcp`](../mcp), which is a separate package, a separate token family, and a separate API surface.\n\nDesign, risk assessment and phasing: [`docs/design/fleet-operator-mcp.md`](../docs/design/fleet-operator-mcp.md).\n\n## Connect\n\n1. Open <https://hub.awesomate.ai/fleet/access>. You need a fleet role — a superadmin grants it.\n2. Name your device, create an activation code.\n3. Run the command it gives you:\n\n```bash\nnpx -y --package=@awesomate/fleet-mcp awesomate-fleet-bootstrap --code amt_fbs_...\n```\n\n4. Restart Claude Code and ask it to run `fleet_whoami`.\n\nThe code is valid for 10 minutes and is replay-safe — re-running after a failure is fine and mints a fresh token. The token itself is created on your machine and never passes through the clipboard.\n\nCheck the last line of the bootstrap output before believing it worked:\n\n```\nAWESOMATE FLEET CONNECT: SUCCESS\nAWESOMATE FLEET CONNECT: PARTIAL issues=mcp-registration\nAWESOMATE FLEET CONNECT: FAILED reason=no-role\n```\n\n## What it can do\n\nThirteen read-only tools. Four are fleet-wide (`fleet_whoami`, `fleet_overview`, `fleet_list_clients`, `fleet_switch`); nine are per-client and require a session handle (`health`, `executions`, `workflows`, `errors`, `alerts`, `hosting`, `subscription`, `knowledge`, `audit`). `fleet_client_knowledge` is counts-and-status only by policy (ADR-003) — it never returns a person's name, an alias or a document.\n\n**There is no default client.** `fleet_switch` returns a handle naming exactly one slug for 30 minutes, and every client-scoped tool requires it. This is the central safety property, not an inconvenience: one credential reaches every tenant, so an ambient target is an incident waiting to happen. Every response is stamped with the slug it acted on.\n\n**Writes do not exist here.** Not disabled — absent. Write scopes are not carried on the token at all; they will only ever be obtainable through a time-boxed, Chat-announced checkout against one client (Phase C).\n\n## Credentials\n\n`~/.awesomate/fleet-credentials.json`, mode 0600, single identity, 14-day token.\n\nNo profiles, no `.awesomate.json` pin, no default account — unlike the client MCP, which needs all three because a client may own several accounts. Here the operator identity is fixed and the *client* is chosen per conversation.\n\nOverrides for CI or debugging: `AWESOMATE_FLEET_TOKEN`, `AWESOMATE_FLEET_API_BASE`.\n\nNever register the server with an env-baked token (`claude mcp add --env AWESOMATE_FLEET_TOKEN=…`). Env beats the credentials file, so the registration goes permanently stale after a re-pair and serves a dead identity that looks like a server bug. The bootstrap removes any it finds.\n\n## Revoking\n\nAny device, any time, from <https://hub.awesomate.ai/fleet/access>. A superadmin can revoke anyone's devices, change roles, or offboard — role changes take effect within 30 seconds without touching tokens, and offboarding kills every device at once.\n\n## Development\n\n```bash\nnpm install\nnpm run typecheck\nnpm run build      # esbuild bundle → dist/index.js\n```\n\nPoint at a local hub with `AWESOMATE_FLEET_API_BASE=http://localhost:4060`.\n","readmeFilename":"README.md"}