{
  "markdown": "# @aiwerk/mcp-server-clawhub\n\nMCP server for the [ClawHub.ai](https://clawhub.ai) skill catalog.\n\nBrowse, search, inspect, download, and (when authenticated) publish skills from the ClawHub registry through the Model Context Protocol.\n\n## Two modes\n\nThe server adapts to whether a token is configured:\n\n| Mode            | Trigger                | Available tools |\n|-----------------|------------------------|-----------------|\n| **anonymous**   | `CLAWHUB_TOKEN` unset  | 10 read-only tools (search, list, get, scan, moderation, file, resolve, download) |\n| **authenticated** | `CLAWHUB_TOKEN` set  | All 14 tools (adds whoami, publish, delete, undelete) |\n\nThe authenticated tools are simply not registered in anonymous mode — `tools/list` will not advertise them.\n\n## Install\n\nTwo ways to run this server — pick the one that fits.\n\n### Option 1 — Hosted (zero setup)\n\nNo local runtime — if you set a token, it's AES-256-GCM encrypted server-side via HashiCorp Vault.\n\n1. Sign up at **[aiwerkmcp.com](https://aiwerkmcp.com)**.\n2. Install **ClawHub** from the catalog. Leave `CLAWHUB_TOKEN` empty for anonymous mode (10 read-only tools), or paste a token to unlock all 14.\n3. Point your MCP client (Claude.ai, Cursor, Hermes, …) at your hosted endpoint:\n   ```\n   https://bridge.aiwerk.ch/u/<your-user-id>/mcp\n   ```\n   with your Bearer token.\n\n### Option 2 — Self-hosted (npx)\n\nRun directly — you manage the token:\n\n```bash\nnpx -y @aiwerk/mcp-server-clawhub\n```\n\nOr in your MCP client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"clawhub\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@aiwerk/mcp-server-clawhub\"],\n      \"env\": {\n        \"CLAWHUB_TOKEN\": \"optional - unlocks publish/delete/whoami\"\n      }\n    }\n  }\n}\n```\n\n## Tools\n\n### Read-only (anonymous + authenticated)\n\n| Tool | Description |\n|------|-------------|\n| `clawhub_search` | Search skills by query string — **primary discovery path** |\n| `clawhub_list_skills` | List skills with cursor pagination (see caveat below) |\n| `clawhub_get_skill` | Full details for a skill slug |\n| `clawhub_list_versions` | List all versions of a skill |\n| `clawhub_get_version` | Get a specific version (files + security snapshot) |\n| `clawhub_get_scan` | Security scan result for a version |\n| `clawhub_get_moderation` | Moderation verdict and evidence (response wraps under `moderation`) |\n| `clawhub_get_file` | Fetch a single raw file from a skill |\n| `clawhub_resolve` | Resolve version by content hash |\n| `clawhub_download` | Download skill zip (base64 encoded) |\n\n> **Discovery caveat:** the live `/skills` endpoint applies a default server-side filter that may\n> return an empty `items[]` for ungated browsing. In practice, **prefer `clawhub_search`** — it's the\n> reliable entry point for finding skills by keyword. Use `clawhub_list_skills` with cursor pagination\n> only when you have a specific filter in mind (e.g. `nonSuspiciousOnly=true`). The `highlightedOnly`\n> flag is available on `clawhub_search` but not on `clawhub_list_skills`.\n\n### Wire shapes worth knowing\n\nSome live API responses differ from the published OpenAPI spec. The types in `src/types.ts` follow\nthe **real wire shape**:\n\n- `clawhub_list_skills` → `{ items: [...], nextCursor }` (not `skills`)\n- `clawhub_list_versions` → `{ items: [...], nextCursor }` (not `versions`)\n- `clawhub_get_moderation` → `{ moderation: { verdict, ... } }` (wrapped)\n- `clawhub_whoami` → `{ user: { handle, ... } }` (wrapped)\n- `clawhub_get_moderation` returns **404** for skills with no moderation events — this means *clean*,\n  not *missing*. For the always-present verdict, read `.moderation` from `clawhub_get_skill`.\n\n### Authenticated only (CLAWHUB_TOKEN required)\n\n| Tool | Description |\n|------|-------------|\n| `clawhub_whoami` | Current user (handle, displayName, image) |\n| `clawhub_publish` | Publish a new skill version |\n| `clawhub_delete` | Soft-delete a skill (reversible) |\n| `clawhub_undelete` | Restore a soft-deleted skill |\n\n## Environment\n\n| Variable | Required | Purpose |\n|----------|----------|---------|\n| `CLAWHUB_TOKEN` | no | Bearer token issued by clawhub.ai. Unlocks auth-only tools and raises rate limits (120/min → 600/min for reads). |\n| `CLAWHUB_BASE_URL` | no | Override the API base URL. Defaults to `https://clawhub.ai/api/v1`. |\n\n## Rate limits\n\n- **Anonymous:** 120 reads/min per IP, 30 writes/min per IP\n- **Authenticated:** 600 reads/min per key, 120 writes/min per key\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm test\n```\n\n## About AIWerk MCP\n\nPart of the **[AIWerk MCP platform](https://aiwerkmcp.com)** — curated, signed MCP recipes served either as npm packages for self-hosting or through our multi-tenant hosted bridge (`bridge.aiwerk.ch`).\n\nOther AIWerk MCP servers:\n\n- [@aiwerk/mcp-server-cal](https://github.com/AIWerk/mcp-server-cal) — Cal.com scheduling\n- [@aiwerk/mcp-server-imap](https://github.com/AIWerk/mcp-server-imap) — IMAP/SMTP email, provider-agnostic\n- [@aiwerk/mcp-server-wise](https://github.com/AIWerk/mcp-server-wise) — Wise (TransferWise) Personal API, read-only\n\nBrowse the full catalog (20+ recipes including GitHub, Linear, Notion, Stripe, …) at [aiwerkmcp.com](https://aiwerkmcp.com).\n\n## License\n\nMIT © AIWerk\n",
  "bytes": 5208,
  "sha": "cadda05ce1f7690af1de0ae42f95c0fe924b36b68c3f2a8551f615c2da397ba0",
  "repo_slug": "aiwerk/mcp-server-clawhub",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_aiwerk_mcp_server_clawhub_166507a7/readme"
}