{"_id":"@actorium-ai/actorium-mcp","_rev":"7-cea61eb014ae9c93e84c6eb46c951059","name":"@actorium-ai/actorium-mcp","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@actorium-ai/actorium-mcp","version":"0.1.0","license":"MIT","_id":"@actorium-ai/actorium-mcp@0.1.0","maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"homepage":"https://github.com/batu4404/workflow-mcp#readme","bugs":{"url":"https://github.com/batu4404/workflow-mcp/issues"},"bin":{"actorium-mcp":"dist/index.js"},"dist":{"shasum":"b2a331f88dcad4d267622873d13503d3b2ae99d5","tarball":"https://registry.npmjs.org/@actorium-ai/actorium-mcp/-/actorium-mcp-0.1.0.tgz","fileCount":30,"integrity":"sha512-01YJR9495b73lKKVdSDYH5vPrQKFUVLAk0gg9/vBg6TpquFGP/Etad+PEs1Gf3zFcNqKAY/2TNxeW2GLaaTyHQ==","signatures":[{"sig":"MEUCIGAVQ+jDO6Qs2Lg8/7KeuFgztKeSlS+l2X2jKKSOQb9KAiEA6hszqI+cfO0PIvfPlNouwCG8qy/zd91LBVlBp26VOXM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97363},"main":"dist/index.js","type":"commonjs","_from":"file:actorium-ai-actorium-mcp-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts --ignore-pattern '**/*.test.ts'","test":"jest","build":"tsc","start":"node dist/index.js","lint:fix":"eslint src --ext .ts --ignore-pattern '**/*.test.ts' --fix","typecheck":"tsc --noEmit","build:watch":"tsc --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"pypye","email":"pentative@gmail.com"},"_resolved":"/private/var/folders/w0/xbxl76mn08g6fgyk86cf76v40000gn/T/1f04f242659b7e7231ac06d6de7624bc/actorium-ai-actorium-mcp-0.1.0.tgz","_integrity":"sha512-01YJR9495b73lKKVdSDYH5vPrQKFUVLAk0gg9/vBg6TpquFGP/Etad+PEs1Gf3zFcNqKAY/2TNxeW2GLaaTyHQ==","repository":{"url":"git+https://github.com/batu4404/workflow-mcp.git","type":"git"},"_npmVersion":"11.4.2","description":"Read-only MCP server exposing feature/task/document/identity context from the workflow BFF API","directories":{},"_nodeVersion":"24.4.1","dependencies":{"zod":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.2.0","typescript":"^5.6.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/actorium-mcp_0.1.0_1785043317958_0.6746604509723413","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@actorium-ai/actorium-mcp","version":"0.2.0","license":"MIT","_id":"@actorium-ai/actorium-mcp@0.2.0","maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"homepage":"https://github.com/actorium-ai/workflow-mcp#readme","bugs":{"url":"https://github.com/actorium-ai/workflow-mcp/issues"},"bin":{"actorium-mcp":"dist/index.js"},"dist":{"shasum":"91b1338bcb0f72a152842f126c5c908ec6d82aa2","tarball":"https://registry.npmjs.org/@actorium-ai/actorium-mcp/-/actorium-mcp-0.2.0.tgz","fileCount":30,"integrity":"sha512-nWzbqLNfawDHe3xjjDrM+kdTf9cWkYLDwrIr0ffIr6ZWOBcdQVxsfgwRrA4S7WZWpaP23KjiV8M1k88IN0poLw==","signatures":[{"sig":"MEUCIHrssWLeLiB1PcmC5QP6J4ZlqTNeli35QqN+WuGj2OsYAiEA2DDXJ3X5+N70f/7JZ/OGQcfujHsL6zizv5nNfxcTvYA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@actorium-ai%2factorium-mcp@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":97425},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3f33879eaa28a3c18a3bd23e4ddfd4a47db1f562","scripts":{"lint":"eslint src --ext .ts --ignore-pattern '**/*.test.ts'","test":"jest","build":"tsc","start":"node dist/index.js","lint:fix":"eslint src --ext .ts --ignore-pattern '**/*.test.ts' --fix","typecheck":"tsc --noEmit","build:watch":"tsc --watch","test:coverage":"jest --coverage","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cbfb42f-b4ee-4244-a155-e9fb46096f31"}},"repository":{"url":"git+https://github.com/actorium-ai/workflow-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"Read-only MCP server exposing feature/task/document/identity context for Actorium","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.5.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.2.0","typescript":"^5.6.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/actorium-mcp_0.2.0_1785044088961_0.8950141494828332","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@actorium-ai/actorium-mcp","version":"0.3.0","license":"MIT","_id":"@actorium-ai/actorium-mcp@0.3.0","maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"homepage":"https://github.com/actorium-ai/workflow-mcp#readme","bugs":{"url":"https://github.com/actorium-ai/workflow-mcp/issues"},"bin":{"actorium-mcp":"dist/index.js"},"dist":{"shasum":"fac7ba5e79533b4a85a0b77af148fc4b193ffd62","tarball":"https://registry.npmjs.org/@actorium-ai/actorium-mcp/-/actorium-mcp-0.3.0.tgz","fileCount":30,"integrity":"sha512-fC3vFuSrYigExe7VK0QN5IXbqdaLOj7LLWtvcgEQs3Y4xIfB6qtKCqRGeO8XwqVNuIw43n21k9g805YvC/9Zrg==","signatures":[{"sig":"MEYCIQCilbKgtECTZfjxhmqGIeZ2DxCHxjWYVZ2WOG/1H/zAagIhAJE8zpqmnIiwajsYCCUkErAUmt4UIwdRtRefwGZ3XQfM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@actorium-ai%2factorium-mcp@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":100924},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"29f7334ad82eba3b4a7376d64f5bdac28db01a25","scripts":{"lint":"eslint src --ext .ts --ignore-pattern '**/*.test.ts'","test":"jest","build":"tsc","start":"node dist/index.js","lint:fix":"eslint src --ext .ts --ignore-pattern '**/*.test.ts' --fix","typecheck":"tsc --noEmit","build:watch":"tsc --watch","test:coverage":"jest --coverage","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cbfb42f-b4ee-4244-a155-e9fb46096f31"}},"repository":{"url":"git+https://github.com/actorium-ai/workflow-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"Read-only MCP server exposing feature/task/document/identity context for Actorium","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.5.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.2.0","typescript":"^5.6.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/actorium-mcp_0.3.0_1785147459758_0.5752952917966547","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@actorium-ai/actorium-mcp","version":"0.4.0","license":"MIT","_id":"@actorium-ai/actorium-mcp@0.4.0","maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"homepage":"https://github.com/actorium-ai/workflow-mcp#readme","bugs":{"url":"https://github.com/actorium-ai/workflow-mcp/issues"},"bin":{"actorium-mcp":"dist/index.js"},"dist":{"shasum":"277c8fc71bf63f585e8cbc5801f9f0bb93b1de36","tarball":"https://registry.npmjs.org/@actorium-ai/actorium-mcp/-/actorium-mcp-0.4.0.tgz","fileCount":50,"integrity":"sha512-ckbSwwC5f2HoxUmQTQ2YlKINcYJiiaG50Xty35fOUZHaFcFtHSUEHwIim/E6woPiyNnCWdnWL9l/Dpa5/14sTg==","signatures":[{"sig":"MEUCIQDBCd829082SvqV1bSj9OsSA1w+iuVkvg9MeDlVKT5OvgIgN53FWd/I6GhicJvwuCBZqe/VfTPufKBCelnDR/BSaMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@actorium-ai%2factorium-mcp@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":214930},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b49972cfac70fff95b99b316371ba5617ce7dec1","scripts":{"lint":"eslint src --ext .ts --ignore-pattern '**/*.test.ts'","test":"jest","build":"tsc","start":"node dist/index.js","lint:fix":"eslint src --ext .ts --ignore-pattern '**/*.test.ts' --fix","typecheck":"tsc --noEmit","build:watch":"tsc --watch","test:coverage":"jest --coverage","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cbfb42f-b4ee-4244-a155-e9fb46096f31"}},"repository":{"url":"git+https://github.com/actorium-ai/workflow-mcp.git","type":"git"},"_npmVersion":"12.0.2","description":"Read-only MCP server exposing feature/task/document/identity context for Actorium","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.5.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.2.0","typescript":"^5.6.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/actorium-mcp_0.4.0_1787406125340_0.818315114408203","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@actorium-ai/actorium-mcp","version":"0.4.1","license":"MIT","_id":"@actorium-ai/actorium-mcp@0.4.1","maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"homepage":"https://github.com/actorium-ai/workflow-mcp#readme","bugs":{"url":"https://github.com/actorium-ai/workflow-mcp/issues"},"bin":{"actorium-mcp":"dist/index.js"},"dist":{"shasum":"5893398a609d2cc91a85f86109fa8368c7f89325","tarball":"https://registry.npmjs.org/@actorium-ai/actorium-mcp/-/actorium-mcp-0.4.1.tgz","fileCount":50,"integrity":"sha512-FIFaMbHIe9gQhclwTMpH2Ix5qCz9twq0yskG3dMymijVe3rUaYIRAEFdxXcTYT2U88wRfhO7Iy/ejKCFJraEVQ==","signatures":[{"sig":"MEQCICqqXnpQCz/qY8qmSSsY62+nUvtzIwGC0WIra0sAR9e7AiA+dBJPqzyxwdWAoaMt13cCQaU7wy/Pwq0mAYYipPQYXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@actorium-ai%2factorium-mcp@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":216287},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0d4a57bc7e41e53af337f5f303af09d764979700","scripts":{"lint":"eslint src --ext .ts --ignore-pattern '**/*.test.ts'","test":"jest","build":"tsc","start":"node dist/index.js","lint:fix":"eslint src --ext .ts --ignore-pattern '**/*.test.ts' --fix","typecheck":"tsc --noEmit","build:watch":"tsc --watch","test:coverage":"jest --coverage","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cbfb42f-b4ee-4244-a155-e9fb46096f31"}},"repository":{"url":"git+https://github.com/actorium-ai/workflow-mcp.git","type":"git"},"_npmVersion":"12.0.2","description":"Read-only MCP server exposing feature/task/document/identity context for Actorium","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.5.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.2.0","typescript":"^5.6.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/actorium-mcp_0.4.1_1787469323445_0.567164024441384","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@actorium-ai/actorium-mcp","version":"0.5.0","license":"MIT","_id":"@actorium-ai/actorium-mcp@0.5.0","maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"homepage":"https://github.com/actorium-ai/workflow-mcp#readme","bugs":{"url":"https://github.com/actorium-ai/workflow-mcp/issues"},"bin":{"actorium-mcp":"dist/index.js"},"dist":{"shasum":"87d718fbc108bf6a2424e326db41133266959408","tarball":"https://registry.npmjs.org/@actorium-ai/actorium-mcp/-/actorium-mcp-0.5.0.tgz","fileCount":50,"integrity":"sha512-Q2dYbr/McyQdM1Bx1zxnMRF+nupmsSGnBY01z9xHUZzbnMf+DzlTFzhEzXyI7NYLhkkPQoCujvId5Jo57aLZ8g==","signatures":[{"sig":"MEUCIQDYi52Yo2R+hLhKFOOIIO4XLYq99u+VWWkCp2RS2yYQ7QIgN4Z6xaMvM+c74gLiiqunKse8vgzqld+a2vOo8+z2XMs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@actorium-ai%2factorium-mcp@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":237172},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"50186cc822221607cd3468e646e12ab549a0d33d","scripts":{"lint":"eslint src --ext .ts --ignore-pattern '**/*.test.ts'","test":"jest","build":"tsc","start":"node dist/index.js","lint:fix":"eslint src --ext .ts --ignore-pattern '**/*.test.ts' --fix","typecheck":"tsc --noEmit","build:watch":"tsc --watch","test:coverage":"jest --coverage","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cbfb42f-b4ee-4244-a155-e9fb46096f31"}},"repository":{"url":"git+https://github.com/actorium-ai/workflow-mcp.git","type":"git"},"_npmVersion":"12.0.2","description":"MCP server exposing feature/task/document/identity context for Actorium","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.5.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.2.0","typescript":"^5.6.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/actorium-mcp_0.5.0_1787472308530_0.30475927287922655","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@actorium-ai/actorium-mcp","version":"0.6.0","description":"MCP server exposing feature/task/document/identity context for Actorium","license":"MIT","type":"commonjs","repository":{"type":"git","url":"git+https://github.com/actorium-ai/workflow-mcp.git"},"publishConfig":{"access":"public"},"bin":{"actorium-mcp":"dist/index.js"},"main":"dist/index.js","packageManager":"pnpm@10.5.2","scripts":{"build":"tsc","build:watch":"tsc --watch","typecheck":"tsc --noEmit","lint":"eslint src --ext .ts --ignore-pattern '**/*.test.ts'","lint:fix":"eslint src --ext .ts --ignore-pattern '**/*.test.ts' --fix","test":"jest","test:coverage":"jest --coverage","start":"node dist/index.js","prepublishOnly":"pnpm run build"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","zod":"^4.0.0"},"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","eslint":"^9.0.0","jest":"^29.7.0","ts-jest":"^29.2.0","typescript":"^5.6.0"},"engines":{"node":">=18.0.0"},"gitHead":"09647b51a34cf5dac0de13318608fdf9287df352","types":"./dist/index.d.ts","_id":"@actorium-ai/actorium-mcp@0.6.0","bugs":{"url":"https://github.com/actorium-ai/workflow-mcp/issues"},"homepage":"https://github.com/actorium-ai/workflow-mcp#readme","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-EHIIp3AsM3h638ln0sfxerYOiLy+MysdXtKnX9Po/g0yfsCCOSUQsO8gmdUFGrzNia7f3hCmBBd7bFZcxUuBZw==","shasum":"c4d00d2051969522452f6bc79c26a68e5a1ee90d","tarball":"https://registry.npmjs.org/@actorium-ai/actorium-mcp/-/actorium-mcp-0.6.0.tgz","fileCount":42,"unpackedSize":205982,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@actorium-ai%2factorium-mcp@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCIbIkx1upWRLiMy2fO8/26XgX/WGy24xgPi9CAs1kmVgIhAJn58X7tNQbNb40koWdMp5wx91YW2t8NkvBA4cvoN6uR"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cbfb42f-b4ee-4244-a155-e9fb46096f31"}},"directories":{},"maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/actorium-mcp_0.6.0_1789032691779_0.6835840553408103"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-26T05:21:57.789Z","modified":"2026-09-10T09:31:32.357Z","0.1.0":"2026-07-26T05:21:58.082Z","0.2.0":"2026-07-26T05:34:49.109Z","0.3.0":"2026-07-27T10:17:39.907Z","0.4.0":"2026-08-22T13:42:05.490Z","0.4.1":"2026-08-23T07:15:23.599Z","0.5.0":"2026-08-23T08:05:08.683Z","0.6.0":"2026-09-10T09:31:31.922Z"},"bugs":{"url":"https://github.com/actorium-ai/workflow-mcp/issues"},"license":"MIT","homepage":"https://github.com/actorium-ai/workflow-mcp#readme","repository":{"type":"git","url":"git+https://github.com/actorium-ai/workflow-mcp.git"},"description":"MCP server exposing feature/task/document/identity context for Actorium","maintainers":[{"name":"pypye","email":"pentative@gmail.com"}],"readme":"# actorium-mcp\n\nMCP server for Actorium.\nGives a coding agent full context on features, tasks, PRs, activity, documents, and identity.\nMostly read-only, so it's safe to hand to an agent that only needs to *understand* a workspace —\nthe exceptions are the spec-review tools (`review_*`) and\n`create_storage_document`/`update_storage_document`, which create or edit a go-owned feature's\ndocuments.\n\n## Requirements\n\n- Node.js 18+\n- Access to a running `actorium` instance\n\n## Install\n\n```sh\nnpm install -g @actorium-ai/actorium-mcp\n```\n\nRun `actorium-mcp --version` (or `-v`) to check what's installed — prints the installed\npackage's version and exits immediately, without starting the MCP server. The Actorium VS\nCode extension uses this to detect whether the CLI is installed and to compare it against the\nbackend's minimum supported version.\n\n### Default workspace/org resolution\n\nEvery tool's optional `workspace_id` (and `list_workspaces`'s `org_id`) falls back to a default\nwhen omitted, resolved in this order:\n\n1. **The workspace manifest** — `.actorium/workspace.json`, written by the extension at a linked\n   workspace folder's root (alongside AGENTS.md). actorium-mcp walks upward from its own working\n   directory looking for this file, so it resolves the workspace it's running for directly from\n   the folder it's in. This is what makes it safe to have **multiple VS Code windows open on\n   different workspaces at once** — each one's actorium-mcp process (and its coding agent's\n   terminal) still resolves to the correct workspace, regardless of what any other window is doing.\n2. Otherwise, the shared credential file's stored `workspace_id`/`org_id` — a single machine-wide\n   \"last selected\" value, so it's only a reasonable default when actorium-mcp is running from\n   somewhere outside any linked workspace folder (or the manifest hasn't been written yet).\n\nAn explicit `workspace_id`/`org_id` argument on the tool call always wins over both.\n\n## Environment variables\n\n| Variable | Default | Description |\n|---|---|---|\n| `API_URL` | `http://localhost:8090` | Base URL of the workflow BFF |\n| `WORKFLOW_TOKEN` | — | Bearer JWT — overrides the shared credential file |\n\n## Tools\n\n### `get_feature`\n\nResolve a feature by name. Returns the **full** feature detail in one call — status/stage,\ndocuments, tasks, activity timeline, and sync state — not just a bare summary. The embedded\nactivity timeline is capped at the 50 most recent events — use `list_workspace_activity` for\nthe full history.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `name` | string | yes | Exact feature name (e.g. `workflow-db`) |\n\n**Errors:** feature not found (name mismatch) · `401` — reconnect via `Actorium: Connect` or refresh your token/cookie.\n\n### `list_workspaces`\n\nList every workspace in an organization.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `org_id` | string | no | Organization UUID |\n\n### `search_features`\n\nSearch/list features in a workspace. Set `include_tasks` to embed each feature's task list and\navoid N+1 `get_task` calls. `limit` defaults to 50 and is capped at 1000 server-side if omitted\nor exceeded.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `status` | string | no | Filter by feature status |\n| `title` | string | no | Filter by title substring |\n| `sort` | string | no | Sort order (server-defined field names) |\n| `page` / `limit` | number | no | Pagination |\n| `include_tasks` | boolean | no | Embed each feature's tasks |\n\n### `search_tasks`\n\nSearch/list tasks — across the whole workspace, or scoped to one feature via `feature_id`.\n`limit` defaults to 50 and is capped at 1000 server-side if omitted or exceeded.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` | string | no | Restrict to one feature (omit for workspace-wide) |\n| `task_id`, `title`, `status`, `repo` | string | no | Filters |\n| `sort`, `page`, `limit` | — | no | Sort/pagination |\n\n### `get_task`\n\nFull task detail: execution info (actor, last update), both PR refs (implementation +\nworkspace/handoff), a per-task activity timeline (capped at the 50 most recent events), and\ndependency names.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `task_id` | string | yes | Task UUID (from `search_tasks`/`get_feature`) |\n\n**Errors:** `{ ok: false, reason: \"task_not_found: ...\" }` on 404.\n\n### `get_task_diff`\n\nA task's PR file list + unified diff (GitHub-backed, via workflow-backend). Empty (not an error)\nif the task has no PR yet. Large diffs are size-capped server-side (file count, per-file patch,\nand the unified diff itself) — the response includes `truncated: true` when a cap was hit.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `task_id` | string | yes | Task UUID |\n| `repo` | string | no | Which of the task's repos to diff (defaults to the implementation PR) |\n| `files_only` | boolean | no | Skip the unified diff and per-file patches — just filenames + add/delete stats |\n\n### `get_task_review_thread`\n\nA task's PR reviews, review comments, and issue comments merged into one chronological feed.\nCapped at the 200 most recent items with each item's body capped at 5000 bytes — the response\nincludes `truncated: true` when a cap was hit.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `task_id` | string | yes | Task UUID |\n| `repo` | string | no | Which of the task's repos to read (defaults to the implementation PR) |\n\n### `get_feature_handoff`\n\nA go-owned feature's handoff state — the multi-repo final-PR fan-out as it nears completion.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` | string | yes | Feature UUID |\n\n**Errors:** `{ ok: false, reason: \"handoff_not_found: ...\" }` if the feature isn't go-owned or has no handoff yet.\n\n### `list_workspace_activity`\n\nThe audit/activity feed for a workspace, optionally filtered to one feature or task.\n`audience: \"client\"` filters to a curated, human-friendly action set; omit for the full internal\nfeed (raw action codes, not all actor names resolved yet). Paginated — defaults to the 50 most\nrecent events, max 1000 per page.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` / `task_id` | string | no | Restrict to one feature/task |\n| `audience` | `\"internal\"` \\| `\"client\"` | no | Filter action verbosity |\n| `page` | number | no | Page number, 1-indexed (default 1) |\n| `limit` | number | no | Page size (default 50, max 1000) |\n\n### `list_workspace_repos`\n\nEvery repo registered in a workspace — id, url, default branch, whether it's the management repo,\nand its tags.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n\nEvery storage-document tool below accepts either `kind` (the four canonical per-feature docs,\nrequires `feature_id`) or `path` (any other document — a non-canonical feature file, or a\nworkspace-root document with no owning feature at all, `feature_id` omitted). Pass exactly one.\n\n### `read_storage_document`\n\nRead a document's content from storage-service — a go-owned feature's canonical doc (via `kind`)\nor any other document, including a workspace-root file with no owning feature (via `path`).\nScoped to storage-service-backed documents only — a go-owned feature's ts-owned siblings remain\ngit-backed.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` | string | no | Feature UUID. Omit for a workspace-root document |\n| `kind` | `\"product_spec\"` \\| `\"technical_design\"` \\| `\"tasks\"` \\| `\"handoff\"` | one of kind/path | Canonical document kind; requires `feature_id` |\n| `path` | string | one of kind/path | Explicit relative path, e.g. `\"notes/design.md\"` |\n\n**Errors:** `{ ok: false, reason: \"document_not_found: ...\" }` on 404; `{ ok: false, reason: \"invalid_args: ...\" }` if kind/path aren't used correctly.\n\n### `create_storage_document`\n\nCreate a document in storage-service, seeding its initial content in one call — a go-owned\nfeature's canonical doc (via `kind`) or any other document, including a workspace-root file with\nno owning feature (via `path`, `feature_id` omitted). Create-or-get, not upsert: if a document at\nthis path already exists, the EXISTING document is returned unchanged — this never overwrites\nexisting content. Use `update_storage_document` to modify a document that already exists.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` | string | no | Feature UUID. Omit for a workspace-root document |\n| `kind` | `\"product_spec\"` \\| `\"technical_design\"` \\| `\"tasks\"` \\| `\"handoff\"` | one of kind/path | Canonical document kind; requires `feature_id` |\n| `path` | string | one of kind/path | Explicit relative path, e.g. `\"notes/design.md\"` |\n| `content` | string | yes | Initial markdown content |\n\n**Returns:** `{ id, path, version_id }`.\n\n**Errors:** `{ ok: false, reason: \"invalid_args: ...\" }` if kind/path aren't used correctly.\n\n### `update_storage_document`\n\nUpdate an existing document's content in storage-service, creating a new version — a go-owned\nfeature's canonical doc (via `kind`) or any other document, including a workspace-root file with\nno owning feature (via `path`, `feature_id` omitted). Edit-only — 404s with\n`document_not_found` if no document at this path exists yet; call `create_storage_document`\nfirst.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` | string | no | Feature UUID. Omit for a workspace-root document |\n| `kind` | `\"product_spec\"` \\| `\"technical_design\"` \\| `\"tasks\"` \\| `\"handoff\"` | one of kind/path | Canonical document kind; requires `feature_id` |\n| `path` | string | one of kind/path | Explicit relative path, e.g. `\"notes/design.md\"` |\n| `content` | string | yes | New markdown content, replacing the current version |\n\n**Returns:** `{ ok: true, version_id }`.\n\n**Errors:** `{ ok: false, reason: \"document_not_found: ...\" }` on 404; `{ ok: false, reason: \"invalid_args: ...\" }` if kind/path aren't used correctly.\n\n### `list_workspace_documents`\n\nList every document's metadata (id, path, `created_at`, `current_version_id`) in a workspace, or\nin one feature via `feature_id`. No content — use `read_storage_document` for that. Response is\n`{ documents: [...], truncated: boolean }` — defaults to at most 500 documents (max 2000).\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` | string | no | Restrict to one feature (omit for workspace-wide) |\n| `limit` | number | no | Max documents to return (default 500, max 2000) |\n\n### `get_document_versions`\n\nA document's edit history, newest first — `source` (edit/import/migration/restore) and timestamp\nper version. Note: `author` is a raw user UUID, not a resolved display name. Response is\n`{ versions: [...], truncated: boolean }` — defaults to at most 200 versions (max 1000).\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `document_id` | string | yes | Document UUID (from `list_workspace_documents`) |\n| `limit` | number | no | Max versions to return (default 200, max 1000) |\n\n### `update_feature_stage`\n\nApprove, reject, or reopen a feature's current review stage — the same action the\ndigital-factory-ui Approval card performs (Approve / Reject / Re-open buttons). This is a\n**human-directed** action: only call it when a human has explicitly asked to approve, reject, or\nreopen a *specific* stage; confirm the stage/action with the human first if there's any ambiguity.\nCalls hermes-agent's existing `stage-transition` endpoint through the BFF — no transition logic\n(the `(stage, action) → feature_status/current_stage/next_action` mapping) is reimplemented here;\nit's computed entirely server-side in hermes-agent, the same code path the web app's Approval card\nuses.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `workspace_id` | string | no | Workspace UUID |\n| `feature_id` | string | yes | Feature UUID (from `search_features`/`get_feature`) |\n| `stage` | `\"product_spec\"` \\| `\"technical_design\"` \\| `\"tasks\"` \\| `\"handoff\"` | yes | Which lifecycle stage to act on |\n| `action` | `\"approve\"` \\| `\"reject\"` \\| `\"reopen\"` | yes | Action to perform |\n| `comment` | string | no | Optional comment recorded with a reject or reopen action |\n\n**Returns:** `{ ok, feature_id, stage, action, review_status, feature_status, current_stage, commit_sha, branch, activated_tasks }`. For `stage=\"tasks\"` approve, also activates tasks (`activated_tasks`).\n\n**Errors:** `{ ok: false, reason: \"needs_status_change\", target_status: \"in_design\", ... }` when the\nfeature is still in `backlog` — not a true failure, relay it to the human rather than retrying;\nstandard `401`/other-BFF-error messages otherwise.\n\n### `whoami`\n\nThe authenticated caller's identity — profile, org memberships, and platform roles. No\n`workspace_id`/`org_id` params. Useful for sanity-checking auth/org scope before calling\nworkspace-scoped tools.\n\n### `review_start`\n\nStarts a spec review between hermes and this local agent on a feature — `POST /reviews`.\nReplaces the web \"Start review\" modal: since this runs from inside the MCP server itself,\nthe presence lease the server checks is necessarily live.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `feature_id` | string | yes | Feature UUID to review |\n| `initial_prompt` | string | yes | What to review — seeds both participants |\n| `hermes_model_id` | string | yes | Model catalog id for hermes |\n| `workspace_id` | string | no | Defaults to the linked workspace this server runs for |\n| `first_responder` | string | no | `\"hermes\"` or this agent; defaults to this agent (reviewer-first) |\n| `allow_broader_code_quoting` | boolean | no | Let this agent quote code from outside its working directory; confirm with the human first. Defaults to false |\n\n**Errors:** `{ ok: false, reason: \"not_logged_in\" }` when there's no usable login; `{ ok: false, reason: \"session_expired\" }` on a 401 from the server.\n\n### `review_get_turn`\n\nPolls `GET /participants/{id}/pending-turn` for a review turn owed to this agent — the\nserver is the source of truth, never the local SSE buffer. A `pending: false` response is\nenriched with an explicit wait hint (or a \"stop, ask the human\" hint when the review is\nblocked on a human answer, or \"review has ended\" once it's over).\n\n### `review_submit_reply`\n\nPosts `{ content }` to `POST /threads/{session_id}/messages`; the author is derived\nserver-side from the signed identity header, not sent by the client.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `session_id` | string | yes | Review session UUID owed a turn by this agent |\n| `content` | string | yes | Reply text |\n\n### `review_end`\n\nEnds the review: `POST /reviews/{session_id}/end`. The transcript is preserved — this\nstops the exchange, it does not delete it.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `session_id` | string | yes | Review session UUID to end |\n| `reason` | string | no | Defaults to `\"reviewer_satisfied\"` |\n\n## Development\n\n```sh\npnpm run build        # compile TypeScript → dist/\npnpm run typecheck    # type-check without emitting\npnpm run lint         # lint src/\npnpm test             # run Jest tests\n```\n\nOr via `make` (see the `Makefile`): `make build` / `make typecheck` / `make lint` / `make test` /\n`make run` (build + run the compiled server) / `make link` (build + `pnpm link --global`).\n\n## Architecture\n\n```\nstdin/stdout (stdio MCP transport)\n    │\n    ▼\nMcpServer (MCP TS SDK)\n    │\n    ├── get_feature \n    ├── list_workspaces \n    ├── search_features \n    ├── search_tasks \n    ├── get_task \n    ├── get_task_diff \n    ├── get_task_review_thread \n    ├── get_feature_handoff \n    ├── list_workspace_activity\n    ├── list_workspace_repos \n    ├── read_storage_document \n    ├── create_storage_document \n    ├── update_storage_document \n    ├── list_workspace_documents\n    ├── get_document_versions \n    ├── update_feature_stage \n    ├── whoami\n    ├── review_start\n    ├── review_get_turn\n    ├── review_submit_reply\n    └── review_end\n    │\n    ▼ (review_* only, plus a background channel started alongside the server)\nworkflow-chat-agent, via workflow-bff's /bff/hermes-agent/api/v1/*\n```\n\nWhen a bearer token is configured (`WORKFLOW_TOKEN` or the shared credential file), every request\ncarries `Authorization: Bearer <token>`. No DB credentials are held by this server, and\norg/workspace access control is enforced entirely server-side (`workflow-bff`/`workflow-backend`\nresolve the caller's accessible orgs from the token on every request) — this server never\nbypasses it.\n\nThe same access token backs a second thing, started automatically alongside the MCP server\n(see `channel.ts`): a presence heartbeat (`POST .../participants/{id}/presence` every 30s)\nand an SSE subscription (`GET .../participants/{id}/events`, wake-hints only) to\nworkflow-chat-agent. `{id}` is the `agent_participant_id` claim already embedded in the\naccess token's JWT — the same identity used to derive `first_responder`/message authorship\nin the `review_*` tools above. If there's no usable login, `startChannel` is a clean no-op\n(no timers, no connections) and the server warns on stderr.\n","readmeFilename":"README.md"}