{"_id":"@abe-ing/mcp","_rev":"5-f642d5697634246d35b2a4828d4a5b61","name":"@abe-ing/mcp","dist-tags":{"latest":"0.5.0"},"versions":{"0.2.0":{"name":"@abe-ing/mcp","version":"0.2.0","_id":"@abe-ing/mcp@0.2.0","maintainers":[{"name":"abe-viewcy","email":"abe@abe.ing"}],"bin":{"abe-mcp":"dist/index.js"},"dist":{"shasum":"29f5cb0c4ee1e0b01664c30c5dac849575e2c0fa","tarball":"https://registry.npmjs.org/@abe-ing/mcp/-/mcp-0.2.0.tgz","fileCount":18,"integrity":"sha512-Sel/V/xwQL1WpzTNvOKJL2ZCjPj+15vhjRwFf+X/6adzmEqEPAY1MweIfAKdZNlYH965/C45tDqE210o8JgPCg==","signatures":[{"sig":"MEUCIG1RQ7GZxR80Gz7j3+KoM5rbfNDt5GXryhdi4872tdPAAiEAr1c7FVDcfIaJzRPFPqEz67YYQtpqqmAy/wCBllMxT8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57112},"main":"./dist/index.js","type":"module","//sdk":"PINNED EXACT. A future SDK major renames the package to @modelcontextprotocol/server and moves to zod v4 raw schemas — do not cross that boundary without rewriting imports + re-checking registerTool.","engines":{"node":">=18"},"gitHead":"655c9266107b3f0dbfd7b4f5ab4317eccde308cb","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"abe-viewcy","email":"abe@abe.ing"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for driving ABE project boards and tasks from Claude Code and other MCP clients.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.25","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.0_1785115961765_0.3290398399925045","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@abe-ing/mcp","version":"0.3.0","_id":"@abe-ing/mcp@0.3.0","maintainers":[{"name":"abe-viewcy","email":"abe@abe.ing"}],"bin":{"abe-mcp":"dist/index.js"},"dist":{"shasum":"d173ec0f23c44207565de7a28f42a85e2f97fdd0","tarball":"https://registry.npmjs.org/@abe-ing/mcp/-/mcp-0.3.0.tgz","fileCount":18,"integrity":"sha512-1OCYQwQUTYK2nhny2CNPz57KvpDUIxWoHpJAnDFgNZ7wrEoC0yNXmBj8zu1ggeUJ01Kl0d44l96KsyRlWdMznA==","signatures":[{"sig":"MEYCIQCcFzgXeffLvmYelJLDb63EW+GFOlkNet/wooMxXY/96wIhANa9etAppREk1FP2zqiJQJP7lQ+fdp9n2nbEm8RUKZSp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69503},"main":"./dist/index.js","type":"module","//sdk":"PINNED EXACT. A future SDK major renames the package to @modelcontextprotocol/server and moves to zod v4 raw schemas — do not cross that boundary without rewriting imports + re-checking registerTool.","engines":{"node":">=18"},"gitHead":"3c39d54b6485969f6d4309c92cbf506ef0c65e21","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"abe-viewcy","email":"abe@abe.ing"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for driving ABE project boards and tasks from Claude Code and other MCP clients.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.25","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.3.0_1785117950717_0.6687633146517702","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@abe-ing/mcp","version":"0.3.1","_id":"@abe-ing/mcp@0.3.1","maintainers":[{"name":"abe-viewcy","email":"abe@abe.ing"}],"bin":{"abe-mcp":"dist/index.js"},"dist":{"shasum":"7adec7dd3a27e01124ea7581a55876205b10f444","tarball":"https://registry.npmjs.org/@abe-ing/mcp/-/mcp-0.3.1.tgz","fileCount":12,"integrity":"sha512-k583NkxPHZPvjpPzgZqOUWfl/3pl8sfSGmypOprWXukhT21ZNucy4ZUqUkIjSQdBs3tyJ7elHv1SKQxe/RakXQ==","signatures":[{"sig":"MEUCIQDvNxO78T97fBvYZYUaZ6KCPgoSwGaY6q2klh5MppM1qAIgAOOpZcRu6h+Dotxwsbtu45y97+ftVinejR5QzF56LHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42512},"main":"./dist/index.js","type":"module","//sdk":"PINNED EXACT. A future SDK major renames the package to @modelcontextprotocol/server and moves to zod v4 raw schemas — do not cross that boundary without rewriting imports + re-checking registerTool.","engines":{"node":">=18"},"gitHead":"94a5c2cf598ae6939ac88f987ab12196430c1c3c","scripts":{"dev":"tsc -w","test":"vitest run","build":"rm -rf dist && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"abe-viewcy","email":"abe@abe.ing"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for driving ABE project boards and tasks from Claude Code and other MCP clients.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.25","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.3.1_1785119026831_0.9065210448300738","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@abe-ing/mcp","version":"0.4.0","_id":"@abe-ing/mcp@0.4.0","maintainers":[{"name":"abe-viewcy","email":"abe@abe.ing"}],"bin":{"abe-mcp":"dist/index.js"},"dist":{"shasum":"2de459697a7f9972524f77896e681cc668e9d427","tarball":"https://registry.npmjs.org/@abe-ing/mcp/-/mcp-0.4.0.tgz","fileCount":12,"integrity":"sha512-FXgR6CVq7pdKvCc91WajAT1A+Y85RxYs4JcGD6oFGBiqrI3GUdjovGo+38QA/IDVatYz6UdA4lZVog0naGg4mg==","signatures":[{"sig":"MEUCIGge+4/7nJd+qQKhVleAEhOOR1REem6NMTAh4aq2AGu9AiEA/Q+7zb7Tuy8in2mxkPBbAEAI7cOjgziDFRgMhKTS1oQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCFsoafoLQKownp6pQZKyS6YjuGy/PAEo21fXnxAXAf3wIhALzGHYbiyMoORQMpin/l8rDlRWXo/oWh2kUDt7iWd0TS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45720},"main":"./dist/index.js","type":"module","//sdk":"PINNED EXACT. A future SDK major renames the package to @modelcontextprotocol/server and moves to zod v4 raw schemas — do not cross that boundary without rewriting imports + re-checking registerTool.","engines":{"node":">=18"},"gitHead":"3664285e5eb707df11045acca3d00d3bdddc7047","scripts":{"dev":"tsc -w","test":"vitest run","build":"rm -rf dist && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"abe-viewcy","email":"abe@abe.ing"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for driving ABE project boards and tasks from Claude Code and other MCP clients.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.25","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.4.0_1789052877953_0.062383135549869406","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"_id":"@abe-ing/mcp@0.5.0","bin":{"abe-mcp":"dist/index.js"},"dist":{"shasum":"4341d8967f69a7bfaebe8dca918ca5f6ecd6ec6c","tarball":"https://registry.npmjs.org/@abe-ing/mcp/-/mcp-0.5.0.tgz","fileCount":12,"integrity":"sha512-mEql0qKm0k9Lpj+SKVqp7CQoHREZOAOW8Vubk/Ls1kZlht0/XAiqcq5yE+TVb2ASKHxNzOa5ctUNC85lGiroPw==","signatures":[{"sig":"MEUCIQCr7m1kejT6eLXRKlpwisMfnQjmEnooRU/Kd+bFhn96QAIgCegyvQX9VBIPEbYxPuTjBu9VZ+3Qr1r++w8cHvqpH5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCWGRUiAw0w8UBz836ff8DlI/yuBAzTJ68FJdCtT6Xn/gIgM13B+8Xg1BYhv3Shv5ebZETII/4qGm7U2zN6uYI3D2s="}],"unpackedSize":49354},"main":"./dist/index.js","name":"@abe-ing/mcp","type":"module","//sdk":"PINNED EXACT. A future SDK major renames the package to @modelcontextprotocol/server and moves to zod v4 raw schemas — do not cross that boundary without rewriting imports + re-checking registerTool.","engines":{"node":">=18"},"gitHead":"2d5d24eed6730dfd65b44413ee1fe2167b216f46","scripts":{"dev":"tsc -w","test":"vitest run","build":"rm -rf dist && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"version":"0.5.0","_npmUser":{"name":"abe-viewcy","email":"abe@abe.ing"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for driving ABE project boards and tasks from Claude Code and other MCP clients.","directories":{},"maintainers":[{"name":"abe-viewcy","email":"abe@abe.ing"}],"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.25","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.5.0_1789072633851_0.9826429121623019"}}},"time":{"created":"2026-07-27T01:32:41.641Z","modified":"2026-09-10T20:37:14.114Z","0.2.0":"2026-07-27T01:32:41.911Z","0.3.0":"2026-07-27T02:05:50.844Z","0.3.1":"2026-07-27T02:23:46.958Z","0.4.0":"2026-09-10T15:07:58.042Z","0.5.0":"2026-09-10T20:37:13.943Z"},"description":"Model Context Protocol server for driving ABE project boards and tasks from Claude Code and other MCP clients.","maintainers":[{"name":"abe-viewcy","email":"abe@abe.ing"}],"readme":"# @abe-ing/mcp — ABE Model Context Protocol server\n\nA stdio [MCP](https://modelcontextprotocol.io) server that gives Claude Code (and any MCP-capable agent) **typed tools** to drive [ABE](https://abe.ing) project boards and tasks — so you can run engineering issues inside ABE instead of GitHub, straight from your editor:\n\n> \"list my ABE boards\" · \"create a board called Sprint 12 with columns todo, doing, done\" · \"add a P0 bug to Sprint 12 assigned to ehren@viewcy.com\" · \"move task 91 to review\"\n\nIt wraps the [ABE REST API](../../docs/agent-api/rest-api.md) and authenticates with a Personal Access Token.\n\n## Setup in Claude Code\n\n1. Generate a Personal Access Token in the ABE web app: **Settings → Developer → Generate a token** (scope `full`, or `tasks` + `boards`). Copy it — it's shown once.\n2. Add the server.\n\n**CLI:**\n\n```bash\nclaude mcp add --transport stdio \\\n  --env ABE_TOKEN=abe_pat_xxxx \\\n  --env ABE_API_URL=https://api.abe.ing \\\n  abe -- npx -y @abe-ing/mcp\n```\n\n**Or `.mcp.json`** (commit to a project; keep the secret out of git via shell expansion):\n\n```json\n{\n  \"mcpServers\": {\n    \"abe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@abe-ing/mcp\"],\n      \"env\": {\n        \"ABE_API_URL\": \"https://api.abe.ing\",\n        \"ABE_TOKEN\": \"${ABE_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\n### Environment\n\n| Var | Required | Default | Notes |\n|-----|----------|---------|-------|\n| `ABE_TOKEN` | **yes** | — | Personal Access Token (`abe_pat_…`). The server exits if unset. |\n| `ABE_API_URL` | no | `http://localhost:3000` | ABE API base URL. Use `https://api.abe.ing` for production. |\n\nThere is **no tenant setting** — a PAT is bound to its workspace at generation time, so the target workspace is whichever you minted the token for.\n\n## Tools\n\n| Tool | Purpose |\n|------|---------|\n| `list_boards` | List project boards (id, slug, name, columns). **Call first** before creating tasks. |\n| `create_board` | Create a project board: `name`, optional `columns[]`, `description`. |\n| `update_board_columns` | Replace a project board's columns: `board` (slug/name/id), `columns[]`. |\n| `list_tasks` | List tasks. Filters: `board`, `status`, `type`, `label`, `all`, `include_done`, `limit`. Default = your open tasks. |\n| `get_task` | Fetch one task by `id`, including its body: `body_markdown` (the linked worksheet doc rendered as markdown — source of truth) and `description` (create-time text; can be stale). |\n| `get_worksheet` | Fetch a worksheet (doc) by `id` with `bodyMarkdown` rendered server-side. Use with a task's `worksheet_id`, or for any other doc. Returns `id`, `title`, `body`, `bodyMarkdown`, `visibility`, `lastEditedAt`, `createdByName` (never the share token or owner email). |\n| `update_worksheet` | Replace a doc's body from markdown (`body_markdown`, converted server-side, previous body versioned) and/or set `title`. Whole-doc replace — `get_worksheet` first if you mean to edit. Last write wins against an open editor. |\n| `create_task` | Create a task: `board`, `title`, + `description`, `type`, `priority`, `size`, `labels[]`, `assignee_email`, `due_date`, `start_date`, `end_date`, `estimate`, `column`. |\n| `update_task` | Update any property by `id` (incl. `status`, move via `board`). Nullable fields accept `null` to clear. `body_markdown` (or `description` — same meaning as on create) **replaces the task doc**; the previous body is kept as a version. |\n| `move_task` | Move a task to a `column`. |\n| `complete_task` | Mark a task complete. |\n| `assign_task` | Assign by `assignee_email` (resolved server-side). |\n| `add_task_comment` | Add a PR-style comment/status note to a task (`id`, `body`). Recorded as authored by the agent (`origin: \"agent\"`). |\n| `list_task_comments` | List a task's comments (`id`), chronological. |\n| `update_task_comment` | Edit a comment (`id`, `comment_id`, `body`) — own comments only (server-enforced). |\n| `delete_task_comment` | Delete a comment (`id`, `comment_id`) — own comments only. |\n| `get_task_history` | Fetch a task's full timeline (`id`): field/status events + comments + worksheet edits, merged chronologically. |\n| `delete_task` | **PERMANENTLY** delete a task (`id`). Irreversible — only when the user explicitly asks; otherwise prefer `complete_task`. |\n| `list_members` | List workspace members (admin/full token). Optional — assigning by email works without it. |\n\nEnumerations are enforced by the tool schemas: `priority` (P0/P1/P2/urgent/high/normal), `task_type` (task/feature/bug/suggestion/improvement/ops), `size` (XS/S/M/L/XL), `status` (open/completed), dates as `YYYY-MM-DD`. `column` is free-form (per-board) and validated by the server.\n\n**Assignees** are resolved by email or name on the server — the model never needs internal user ids. Boards are referenced by slug, name, or id (resolved automatically).\n\n## Error handling\n\nTools never throw at the protocol level. On failure they return a model-recoverable `isError` result with guidance — e.g. an invalid column tells the model to call `list_boards` for the valid set; a `401` tells it the token is invalid/revoked; a `402` explains the workspace billing is locked (blocking reads **and** writes).\n\n## Develop\n\n```bash\nnpm install\nnpm run build      # tsc → dist/\nnpm test           # vitest\nnpm run typecheck\n```\n\nPinned to `@modelcontextprotocol/sdk@1.29.0` (exact). A future SDK major renames the package and moves to zod v4 — do not cross that boundary without rewriting the imports and re-checking `registerTool`.\n","readmeFilename":"README.md"}