UNPKG

@awesomate/hosting-mcp

Version:

Awesomate MCP server — lets Claude manage your Awesomate WordPress hosting, plan, limits, n8n automations, and build Node/static apps + databases

109 lines (84 loc) • 5.34 kB
# @awesomate/hosting-mcp The MCP server that connects an Awesomate customer's own Claude Code to their Awesomate account: WordPress hosting, n8n automations, apps, and Knowledge Base. It authenticates to the Awesomate hub with a scoped Personal Access Token and ships the `awesomate-*` skills that teach Claude how to use it. **Docs: https://hub.awesomate.ai/docs/mcp/** (a quickstart, how it works, a guide per area, and a reference generated from this server's own `tools/list`). Its sister site documents the SDK: https://hub.awesomate.ai/docs/sdk/. ## Install (customers) Don't install this by hand. Open **hub.awesomate.ai/claude** (or the Sites page) and click **Connect Claude Code**. It gives you a one-time command that: 1. redeems a short-lived setup code for a scoped access token, born on your machine (`~/.awesomate/credentials.json`, chmod 600; it never traverses the clipboard), 2. installs the `awesomate-*` skills into `~/.claude/skills`, 3. registers this server in Claude Code (user scope, no token in the registration: see below). Then restart Claude Code and run `awesomate_whoami`. ## What Claude can do with it Every tool, with its inputs and whether it reads, changes or can delete, is in the generated reference: https://hub.awesomate.ai/docs/mcp/reference/account/. The docs build fails if a tool is missing from it, so it cannot fall behind. Every response is stamped `account: <slug>` so a session talking to the wrong account is impossible to miss. ## Security posture - **No signup, no payment, no secrets through the model.** Purchases and privacy toggles happen only in the hub UI. Secrets travel via the secret-drop flow (`awesomate-credentials` skill), never the chat. - **Scopes ∩ live plan** are re-derived per request server-side; consent toggles gate every read of instance data and every write is audited. - The registration is deliberately env-free: baking `AWESOMATE_PAT` into the MCP registration pins it to one stale account forever. The token lives in `~/.awesomate/credentials.json`; a `.awesomate.json` folder pin selects the profile in multi-account setups. ## Updates The server self-updates: it's registered as unpinned `npx -y`, so every Claude Code restart runs the latest published version. The skill files update via the `awesomate_skill_update` tool. Claude notices the drift itself (it's stamped on every response) and offers the update with what's-new lines from `skill/CHANGELOG.json`, then hands over the exact restart step. ## Manual registration (developers) Keep `--package=` with the `=`: the claude CLI's global-argv pre-scan chokes on a bare `-p`, and the package must be explicit because this package ships two bins: ```bash claude mcp add awesomate-hosting -- npx -y --package=@awesomate/hosting-mcp awesomate-hosting-mcp ``` ## Development ```bash npm run typecheck npm test # builds, then boot-smoke + resolution + skills + knowledge suites node scripts/build-docs.mjs --check # the docs checks (also in CI and the hub's web build) ``` A change to `src/` or `skill/` needs a new version and a `skill/CHANGELOG.json` entry at the top, and a new tool needs a place in `docs/reference.json` and, where it changes what someone can ask for, a line in the right guide under `docs/`. `test/tools-list.snapshot.json` is what the built server's `tools/list`, resource list and prompt list return, byte for byte (each sorted by name), and `npm test` fails when it differs. A change meant to show (a new tool, a new argument, new wording) refreshes it in the same PR with `npm run build && node scripts/tools-list-snapshot.mjs --write`; a change that only moves code must leave it as it is. The snapshot also records what the MCP SDK adds to each tool, so a lockfile bump that changes it refreshes the snapshot too. ### Where a tool is registered Tools are moving out of `src/index.ts` into a shared registry, one group at a time, so the same tools can later serve Claude chat as well as this npx server (remote-mcp plan, Part B). `src/tools/groups.json` names every tool's group and the surfaces that offer it; a new tool needs a line there or `npm test` fails. - A group that has moved lives in `src/tools/<group>.ts`, inside `register<Group>(r)`. Register through `r`: `r.registerTool`, `r.readTool`, `r.registerResource`, and `r.config()` for the account (never `requireConfig()`, which only index.ts has). - A group that has not moved yet is still registered in `src/index.ts`. - Titles, the annotation kinds and the result shapes (`TITLES`, `annotate`, `READ_ONLY`, `textResult`, `errorResult` and the rest) are in `src/tools/kit.ts`. - `whoami`, `get_context`, `skill_update` and `design_system_package` stay in index.ts (group `host`): they read the credentials file and the installed skills, or write files on the user's machine, which only the npx server can. A group moves with `node scripts/registry-slice.mjs --group <group>`, which moves the code verbatim and checks it reads back byte for byte. Each move is merged inside an announced hold on `src/index.ts`; `--check` proves the committed move is exactly the script's output on fresh main. Publishing is CI-only: any `mcp/**` change merged to main with a bumped version publishes via `publish-mcp.yml`. Never `npm publish` by hand.