{"_id":"@anyforge/mcp-server","_rev":"31-aa62325f11bc1b9ff7299bcf20a75d7e","name":"@anyforge/mcp-server","dist-tags":{"latest":"3.18.0"},"versions":{"2.0.0":{"name":"@anyforge/mcp-server","version":"2.0.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@2.0.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"1f705f4fa0b3aec8402481b03982c76f83d6dfbb","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-2.0.0.tgz","fileCount":29,"integrity":"sha512-sleFOm1zS1JGZpLW5HOC/hr7RXtG/DJwbFiChjfAJQZ2pBow0DuS/5eYht4hHiKzy9Il4tCV5XUpwdEnx+PFSg==","signatures":[{"sig":"MEQCIBvxuHTNPc5ysS+u2p6GQxpU18cyUYXxtpLF2ynbu2pfAiBpMRg5iQsfMe37L03rayCle3B33yR7jTRYMq8iMBSQfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47642},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"17f28b349821c0d06362e82d3efaf30abb89fbd0","scripts":{"dev":"npx tsx index.ts","build":"tsc","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"11.12.1","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0_1780214156365_0.13798189543128458","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@anyforge/mcp-server","version":"2.0.2","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@2.0.2","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"9d17e433bb35915677e259bca1d0c82a3d215f1c","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-2.0.2.tgz","fileCount":29,"integrity":"sha512-kvz3GZMVWNx/q78xGmNoBK86FhlxinJZ6hfQzLOYFGjVLTe9bId9bJytwoOMErns8e7uY/gxx3skYuC+rAM28g==","signatures":[{"sig":"MEQCIAHRNhPr9B8Lzz9Kh30Vc46vU/PST9GCdVeADw5LzrS6AiAhiJw77Xp/IPgDjPq7oGjl2vKPRygaRuS7MYw+lTbYxw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48424},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"3ccd07031a5bdf26cd2aeabf153b4cf73f4c24f3","scripts":{"dev":"npx tsx index.ts","build":"tsc","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.8.2","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.14.9"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.2_1780576929369_0.22003534438918648","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@anyforge/mcp-server","version":"2.1.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@2.1.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"03a99e1239d03ea358320ef78a91478ae8e344fa","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-2.1.0.tgz","fileCount":29,"integrity":"sha512-3vLHhpKKYQC1ly9E36uVxANPfF65jZVn2fkKZXHhGbqoc2biWTEBNaQE9MDvBcH9+Oc/v7UzU27jdSNdxSLdDA==","signatures":[{"sig":"MEUCIElp/jjD3yTmojhn7VoK8WsA50ezI5/P8mxR5XLhRJK/AiEA4g/OUPmKtfp9T0v0awcveXn2V5iNZcKrwb3rhtBmYBM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50140},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"90e058a6e30a1001ca98e1f43e89537b93ab9341","scripts":{"dev":"npx tsx index.ts","build":"tsc","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.8.2","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.14.9"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.1.0_1780862751795_0.4827082672578513","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@anyforge/mcp-server","version":"2.2.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@2.2.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"0b87802264656fd04d600fe0e09f4662e687d56d","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-2.2.0.tgz","fileCount":32,"integrity":"sha512-9x0no6WVK7anvSJZeO6PrXrK8G8KfV2YD2x3LXE+Qj1Yha/Gy/jvZu1x5gHMraI1uP31HgLg9rlmlgb9o8lGTw==","signatures":[{"sig":"MEYCIQCiUCNZwSCX/qOypnmIlhiT+2V0LVubQGxmbYIt9kalgwIhANRKnf3eLC1g6ADYL9XgtADJbG4nhNwR7YzbTxw4Qs3N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56041},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e33083034429a6f298706286b2cd0a06b19c4dc7","scripts":{"dev":"npx tsx index.ts","build":"tsc","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.8.2","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.14.9"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.2.0_1781020191459_0.15148942029323553","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@anyforge/mcp-server","version":"2.3.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@2.3.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"a81c331c6428bf91cacaeebe94236e9b236b42d6","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-2.3.0.tgz","fileCount":38,"integrity":"sha512-LXPQ8lZV/kHrxx0YOsnxOqQi9f7hPvsXHEAeec32U02SUnh/WpsQddR00tY0KIWKlPq0cdmBZ5kpzhLgDMCb8A==","signatures":[{"sig":"MEYCIQCEggBJ7Z4rVDjA4YM3aiURlCoD6UFBLep4FAE/8p7eUwIhAN4zWzHM7dvfy4jNpK4Pq0JKo5As711S+WoWAbZD+qKO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87158},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1e391459971f664f0caffa617981f66864e9cf95","scripts":{"dev":"npx tsx index.ts","build":"tsc","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.8.2","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.14.9"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.3.0_1781706127195_0.7076555647556597","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@anyforge/mcp-server","version":"2.4.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@2.4.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"6716ab5111cab03052bd2d33a31c8cf2571b1d76","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-2.4.0.tgz","fileCount":38,"integrity":"sha512-vVIbboZwhIoG7FR60a2Fb91ZULxaPen0c7qWOPZBiGE39SmZW9g1ZVj61twxlN0YkEcZmqdvN4EjssKGJwJzjg==","signatures":[{"sig":"MEQCIEdV5USNEk7Lk1infr0KYiSmu0Lkh36ndV4QnibnxiROAiAGw4SvrKjnJEAZY2ceku9p23YsmJuihhc4FO0YXYrCyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88557},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ac089d41463b95c617d46cfc38f0ebb71c4f9608","scripts":{"dev":"npx tsx index.ts","build":"tsc","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.8.2","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.14.9"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.4.0_1781792770284_0.8649110609285693","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@anyforge/mcp-server","version":"2.5.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@2.5.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"6f6010e927a603f3de2daa9dfbfe1a7b55abc6da","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-2.5.0.tgz","fileCount":38,"integrity":"sha512-VfweJHiK76UfdwGcxbWKype8Vsp9TKNem6OtGS41WMAU8/Fk7m3K/0MXhROGN9gz7ZMixbWOXi8T5J8hacjDPQ==","signatures":[{"sig":"MEUCIQCv/KXLzsM20wtpJ0rOnsC5em/eysVsCklFFHhO2bVWKAIgBjCfIk1VPUVnrEVxO2U6sW4baTifnRjfkqSwrP9EGvU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88829},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"7323039a7e4f43c6549a98639d6aed05fe35f13d","scripts":{"dev":"npx tsx index.ts","build":"tsc","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"11.12.1","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.14.9"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.5.0_1782470144033_0.17444736486769696","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@anyforge/mcp-server","version":"3.0.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.0.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"f459f51d333268eaef8d10923267e32531779441","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.0.0.tgz","fileCount":3,"integrity":"sha512-UEKow0p1sd7PbUQKpq952YiF9EuojfFQcaA9MwJskHdWbF2440nf47q+rQ1h9ZpVgoZcQQTdI4Fmq366l6qbhA==","signatures":[{"sig":"MEUCIQCqysW7ZFBgYPVI6x/zCwSzqO1k2fKuSNPFforX3GaT7AIgOe0yTSFtMi/v9dr5S3tjrVl8IETB5/h6n1YoLOGYrOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB75hxMkmU0/h2oUoGjqnKiMNqM31Xj6eHpN1EPhohfGAiAplMDtJcicNGemCUQJ+On1O1utn1dcPFNfls+n5mwqnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156175},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"6c40349eaf7a82ad3bba5b9f587be70d9ae0d5c8","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.8","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.0.0_1790697697587_0.9012620245276652","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@anyforge/mcp-server","version":"3.1.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.1.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"386a8e790fc9a86e0a684eac69585810cb762ffb","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.1.0.tgz","fileCount":3,"integrity":"sha512-Zu1TjsLY9RtQQgZ1hSwwb74pX4ZuLift5CEn/NNrSKM37O1/QT2t7vUox4O2hMoqILw9zeK1KnPCiuFTGit4WQ==","signatures":[{"sig":"MEYCIQC2Icwj4mSm1uQj558WPBPLK5knVKZjqmjvq22YldvJ5AIhALzYKBhmWYSyettP+9BBl4FH20R27KItYT555Gmkp1bt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDLWXJSmcIoQ8zgy+Tw0e80IcnlS3WTyZ0UL+9JnnqrVwIgTMtvLx0ElFY8nJgJW1EEzplwztM4RZqlPD/K7G2iR6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157939},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"8774268014a399eddbc073ecf2938ea8f4edc27e","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.8","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.1.0_1790705152083_0.026620716832981506","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@anyforge/mcp-server","version":"3.2.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.2.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"3ebd2c937da0959377f01afb2ff8551fb4514a2f","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.2.0.tgz","fileCount":3,"integrity":"sha512-MTRmxE9Ve2CNZuR4+qeUewNw4lN0MQHX6s2TFrOEwj91TISMzZ5vWTk6vF25QQLEWWrjvBDz2pWO+ExqF2WJrg==","signatures":[{"sig":"MEYCIQDK+Ozi3VDr/vSx6A8v0LqZ9CGpm9rpvkV8n6c++Si7vQIhAMCnv9zQxNYOVTeiVOxErCnpgWdsBUGAcvTLzXDkM2Y2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCoigmpUwtBf0SaziyhDyWuMbmuaWG5etPMtwADheXIogIgK0DB7oxnYG8gwYj/rBUcMmplTOgEKpMcahCeihXQsbk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162871},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"87bd2d11e321c2780cc5755cc987d0fd8ac35232","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.8","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.2.0_1790756616373_0.2923165999704309","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"@anyforge/mcp-server","version":"3.2.1","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.2.1","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"7386320636e744ae638976095e50256ee7f1dc67","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.2.1.tgz","fileCount":3,"integrity":"sha512-NO4HAYUpto4WQCMh88yPZCjZrcbZeL9/+qYGWUpCd8AIncU51TaXkvSGzpmE/vrZLFoFrZNbJCEsoo2jGpfqkg==","signatures":[{"sig":"MEYCIQCP6w5KIelxDlKBe1/RM3L4er1avTkE1bGTXv5DUZPwMwIhAJK6JqSNaJKFQz9gozmbrWGPRWh/qwTiNlkiSqUXGG7e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFrPPPq0tJFvrzvXEzdMqm4vc0WCwAK0Z4++6D99iLOTAiEAslbOfE8LujbYRYDegN8i9TkmIli5mk6SoyOrCOwVpIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174818},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"69932c48076ae667d14eb29077198d1cdfad3368","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.2.1_1791119136831_0.6456882061050293","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@anyforge/mcp-server","version":"3.3.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.3.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"d2fd70b30bbaef7f565de0820d7dd44817ebfd76","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.3.0.tgz","fileCount":3,"integrity":"sha512-YP/Ws0qE5bj5evq6mhKym+2zYy6MvXseEFTxunOQgs9cRcyB8uxE1uApEyUo1sDEBlku2ZfzEYXYRfslr1evtQ==","signatures":[{"sig":"MEYCIQDTgTutbLas4O7ScEwcx4YyIztxlON7pwkTdunkJGjfjwIhAK3U76rhlNMkujRmmJjK++t/XUSCgWoMMkFRWuDkLXdy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIF88zP1s0d0UWsxZQ8tqwPccCt0W0utDCcXsDVYtKZpRAiAPa/4gYcUvwzhw4EN5zLKNYHq6+I7nDIrAiV+q2lowXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192315},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"f89316b34afa22ef5bfa7a1b6403554db6093d8f","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.3.0_1791550098533_0.7768495105755309","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"@anyforge/mcp-server","version":"3.4.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.4.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"702810da45614346242b8e854dd8a9b320066da6","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.4.0.tgz","fileCount":3,"integrity":"sha512-FobYlhXh2IskTRsgp6YiiTvkJUNr7ynbw8SIXiN+Z/T5AOIm55NiT3mxQVcwwMZQV/O+cSnI/EzXQJWsiApNrA==","signatures":[{"sig":"MEUCIQCSdf/hdKo0mTURaLK6rj5tEZX0eS0wAjch4XL+1CZbdAIgdTK4NUgiRpfmgtxnMgDk1+B2SUOA6Y+m6z25sFpXiI4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDGezvvUV6fyj8eW2awwzHvdhk8lRRPmR7Ns8/+pgjgGAIhAOPr3k0S/TqfWWT2AxG+h6W6AFYkUSfwvtr5TrQeUFkg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198240},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"a9659b4aa218cfa3979a527dd6c6d3714f7009c4","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.4.0_1791852778201_0.5613207957449697","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"@anyforge/mcp-server","version":"3.6.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.6.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"b9c45e7c41ce39638a3fe91fec20b4c5b3642daa","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.6.0.tgz","fileCount":3,"integrity":"sha512-yHULqCgy5QQtDf5ZxGaaPeIWFeTdU9VM79Uon+jX/DCMY8lfbr7W9r4Kmaj0QDXaxRgaNmjr1783rWYQPOnhTg==","signatures":[{"sig":"MEYCIQC0NPpILHqUSugqDSTroSUNTrODNRApvlBB33SIVVHqEgIhAJQ+RtjnzI+HmJkVncAQY8A39OSyrH5GDU6Ht9dXtq2D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDlKyV9z4X+AmaFQaMBmIku07qPZfHjUfJqiO2fLOFPsgIhAJ4FskfEhrVVuBXy+MHxmBfQxqs8DZxQsBGJS+eaS/KF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":221868},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"25bf4e451e694343439a7e233e9f89f831280018","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.6.0_1792227478354_0.05182559729397562","host":"s3://npm-registry-packages-npm-production"}},"3.8.0":{"name":"@anyforge/mcp-server","version":"3.8.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.8.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"1de1073ed7690489cc30afc2848ec183311a4f15","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.8.0.tgz","fileCount":3,"integrity":"sha512-9zsDY2LqSeu0HAAfeagNZvlEfjmWEpy67uIxyB5Eo23iA4AVSJkagzBistl5cVADMx2bSESMLVTFp1pNz32GIw==","signatures":[{"sig":"MEQCIGPCGrx+gigDjdQqD0+YCM2cEnTyf5VoEj8D6Ng5LMdOAiBLAwd6VMalZchvblF4ty7o/wV8aIX8Kv536ktN0ZJizQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD4u1GLpgHRQN73OFzvdRXAVex/Z7r8WYkNF+dlWz9u6gIgK/hJHk0ptpeaie55LexZgnDa9jVqcsZ2YUcx9q/FWZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296516},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"0f334bace0b27e97a3d8a4127632e8dcd812cd4d","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.8.0_1792659350084_0.5755766227326078","host":"s3://npm-registry-packages-npm-production"}},"3.9.0":{"name":"@anyforge/mcp-server","version":"3.9.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.9.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"4d2d85aa0970a45097ebe12ef73be841fcb88843","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.9.0.tgz","fileCount":3,"integrity":"sha512-6f+hwAEhUAPpCYSFWbxTO7ai21wRVkt0Gu7x4C/a7TKpWVZLtBK1Yj2ru4Hd8T6kpCjq2D3JIatKSof8pv+6fw==","signatures":[{"sig":"MEQCIAFBLcINjBCXS9IDyIBBt1BkuLrInkyfPwLEAhhSMfQfAiAJBRBdqSnXI4E1Z3dfd54uWO+Y3iYXJifEa2YYQztcuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDFZjrRWPIhGY+g1Q30k2JNSiPga4giP/Wgrr2Pcb+1SgIgaizrxuI0ipfJpd7WYV4KzDAS19tPQA8WxSa/hwfJWG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303570},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"c5f70c8f99308acf08d1c36aa418a9243b47d462","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.9.0_1792705205307_0.5725787130191575","host":"s3://npm-registry-packages-npm-production"}},"3.10.0":{"name":"@anyforge/mcp-server","version":"3.10.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.10.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"e04a135f8f77e06ced4db37a7387cd4500ae1a30","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.10.0.tgz","fileCount":3,"integrity":"sha512-vxkYHz5cwRmjz2rAbdCJTQb8Zlf7UqSxSY49Gdh2DAyj0Njb2cFHslzbCzPdH9EO4+n0xqY4CVoPZBG+GSuKhQ==","signatures":[{"sig":"MEYCIQCCdgFpen7pjzoNAl3KfEReikLfafjTlssAtJw2nFZAzwIhAL8YnkBQRfdiq+TNcsXmNQ5FNXGKwWk6CwfxU4rIq1H3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBMtqBHa4nVKGhkMFxZr7IP+AqtwXevd271L43s+UhZPAiEAmgNbsnVWxJMbymwol2Eki4Z8LAFXyVqGGEJG+DVmiuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306184},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"01f11e3c22fdb54a5bb6dd92faac061af71c5c81","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.10.0_1792755536798_0.8710374077115919","host":"s3://npm-registry-packages-npm-production"}},"3.11.0":{"name":"@anyforge/mcp-server","version":"3.11.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.11.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"278c8b98cbcf650c5f7dab3232841e5db47dfc2a","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.11.0.tgz","fileCount":3,"integrity":"sha512-+V2blPk+A2HG3zMG0cw4ROIQli0l5Z9B860KX+nQrJP+rVczvCPvY2uu1BXtaBNfGwn2oPKyoJdcmwS8iXEdcw==","signatures":[{"sig":"MEUCIHto4EQ8R6bLlRigzOzKqHlM8zsg4vtQL38FrQD0IndZAiEAsupN+MN1fD1OStjI/9PbGic7eU92591Dmk+JqHOCqPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCIHxdcnvrlSh9oWMfwVX5a+VebfxLc1XKAkGnus/j92gIgHCGDndC0VRMDbQJ91JFrsFFdzw8M5XHCWZhYh4/+gIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314177},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"17ae9dc4d22f21b5dacc6916c347affdac25ca28","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.11.0_1792846981494_0.17434764197523855","host":"s3://npm-registry-packages-npm-production"}},"3.12.0":{"name":"@anyforge/mcp-server","version":"3.12.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.12.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"f64100fd73adab3178d533a59f2908b0dd55db9c","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.12.0.tgz","fileCount":3,"integrity":"sha512-S4Ys//TE9xT/paA6ULKBrUOrh2uzBWCxbe4QwAnrWLcFZWi5TbSwu/FKC3VUkcWKjKlcYJqSiI+F5cRk4nqTrg==","signatures":[{"sig":"MEUCIQD0SOQgIRW52lRn2iG7DvlmCM3JYQQohKK0L5/sQz/HewIgd7AjTVaHEcsYEGbZIKnZSpzSURP0RwkvzLB7cnEJiWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBetj46q5QxaCWqQ0WxberBG4LyYAmF/dkVIxxnMYvJcAiBuO91JoNna30wDvVR679McX6l7KxY1zBQzGUwVx2tMqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332573},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"9be3e25e415891cc55745c3ed61bd6195ccee678","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.12.0_1793131127617_0.18102168866472235","host":"s3://npm-registry-packages-npm-production"}},"3.13.0":{"name":"@anyforge/mcp-server","version":"3.13.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.13.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"98a3e1f0c305ed53b7cb13ce14a0c1a3abc597d2","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.13.0.tgz","fileCount":3,"integrity":"sha512-qL3u39rHhQJ0pRnY2hQNEOTioAztsV/ggY+VP//rqTfFUpcpBu2gAAJHL+TYj6iRMirsxQ9Cran4C0Iv2qguMQ==","signatures":[{"sig":"MEUCIA6e49nRQReUHiUAJ2GoWsyQOCRzUVW7myHyWbp8w3f0AiEAuN0I6WXZ7KhadYGzxHkQk/LFVo7lkv/I+x3rSCbFT+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGlaOp+kck7wIAJHrbMnd4dcfD1Za5zdem1OqSLLgbTOAiEAyUR8VxfuiOSkV7x2W1DObnkWRsazjOqh2vhk5VaMP7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":344469},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"09df205109bda5ce1c1c5d3955218d4e0b7c3d75","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.13.0_1793134196524_0.6391569802823741","host":"s3://npm-registry-packages-npm-production"}},"3.14.0":{"name":"@anyforge/mcp-server","version":"3.14.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.14.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"1f679ab7219cb3d7f6ea69fad20eca8cc79bec24","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.14.0.tgz","fileCount":3,"integrity":"sha512-u5oDiQGgJPW9sEqKHBohFlm1erytgAq6SQI7gDI7yPYBtetf82oteBj+A6h739W7SABA+H0xsqbLk5r89EZCIQ==","signatures":[{"sig":"MEUCIQDzhCtxAbXzycZMJwxzNjLWQOOQ8gtICy7H8hTE94NoKwIgAfZ0cbjBzBRVDnJInaOXB/9fGqMd14hhsNvEMhFlhiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFqwwc2PRMc16XWFXgYtmDAaWc3VcT5QNlmJ+iEBdVelAiBI8WktShBgtkA6fT5hPXERTUC1n8jY8pn9ZZHaV54GFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":349191},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"e11288599337ea505a0b6df25b4d2ec0b0ff0e2d","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.3","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.14.0_1793143230230_0.13843717079980966","host":"s3://npm-registry-packages-npm-production"}},"3.14.1":{"name":"@anyforge/mcp-server","version":"3.14.1","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.14.1","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"9e1c64aba940d3f549b7975e7cbebd778f843bc8","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.14.1.tgz","fileCount":3,"integrity":"sha512-DRMRMnpIeaQs3tn7Fcd7WQeNnL1bNs3pKj0AZKAo/5t/OckwA7BRv0KrCSHhOMZVdthSn4/1xX0Wtn75IR5Ljg==","signatures":[{"sig":"MEUCIQClEEVIRLsxRtUEgjQqxP9xGrc79qn4Z7CYfJbf6Xq0qQIga51Oe8q85OxoNbo1xOHQo71KhQ5Ot3UC7Q7a3mvKeIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDKBN+/V+qNS2wQxooZcnEZQ6bPq1KxJVeNl0+Mxa5CGAIgFT/JAefvikmbjTqX7P1fIIiDRG/W61ZsK52P6q09THU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":349992},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"4ddd59b91bd4ebbb9ff55f875fb0d4683b53eaaa","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.14.1_1793196403838_0.5537014818501161","host":"s3://npm-registry-packages-npm-production"}},"3.14.2":{"name":"@anyforge/mcp-server","version":"3.14.2","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.14.2","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"41ef4d4ce899bdd91c9c4e81f7eb8064a323edc4","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.14.2.tgz","fileCount":3,"integrity":"sha512-N547OY3h4RMBsnRg2wVLvciHy5hfLsPz6la0QP2xcBTMSs7CcjIJAW41qUcp96d8vG5rvmLpHJ3bC52tciMtyQ==","signatures":[{"sig":"MEUCIBMgPNHFj79Eb4inVY8SDS8K9/wfoXa486i2OGY7ZnAqAiEAlCNhMZt8ml1B7Zy+EuoFh7njmPaWauK2IwLe6+4xGqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHgiZwP4Y0XCC8lPyiGgftOt0sw4l2UOL+RYmXNakafVAiBYflYVYoY6Ai6y/g3zpkqiBtMMibE2RTg6sUluUibcwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351158},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"5713cd774ea58502411bd0a30a8079256af4c052","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.14.2_1793212766773_0.7660444368894754","host":"s3://npm-registry-packages-npm-production"}},"3.14.3":{"name":"@anyforge/mcp-server","version":"3.14.3","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.14.3","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"ec26a0f6ef46579b99f4e587970f7098a5058f72","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.14.3.tgz","fileCount":3,"integrity":"sha512-3A8NBfXbGeXiNi5LrdPCvaiARyuGWnKExSYMgyIPtPdkE1iQztIbBKMVprCw8oOjjv9Wqck5Jz/V8b9SlJGnwQ==","signatures":[{"sig":"MEUCIQCdShrRvzJYAEtcJvHwnxoG5GtdJDH1WbMGC+cTOJ5jDwIgZAVYovTGF6vjSaj+z6hnwc4pqBFJR7aMsQFYpCq115o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDuO9zRJLbpn58Dm60oEcQqaEzVXlZOhb/Wzi4m34/N7gIgX9k6fqW/TP9hhzHhR3UrMaouBOLvoH+owInSQ28f8ZA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351129},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"d3e2718fff22e018d755f10cce28716806606c3a","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.14.3_1793220517103_0.16798314095415734","host":"s3://npm-registry-packages-npm-production"}},"3.14.4":{"name":"@anyforge/mcp-server","version":"3.14.4","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.14.4","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"16e96ee5f84e84b1a45176a03d7ccc94216bc279","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.14.4.tgz","fileCount":3,"integrity":"sha512-Q/5nFy5nqfwdCMm0yZAUuh+EBigGtRkiii3241E6vTnBHc+IAJ7JNKdH3fgA0LpYsRksiZIJo3hGImpDafF3Fg==","signatures":[{"sig":"MEUCIG3sRBPpNibrKtbovrqVrkcQpujTcZNEoZieZKtqG7xzAiEAn1jeiv/eStqddUPjvFVGwg6/y8Y5aVP0fPvgZJ7WDDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDCPOaR7GmrQj8w9r5m+Ww1E4w3zfMBW1HSMP0Lph627wIhALqa2eDrZ7Gw1LpypF4VJQnzqgmQEVK9sWKVZt2o64PS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351205},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"729133a996d01644f48975b8f4019ebdf992ac87","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.14.4_1793226086347_0.5351804518446207","host":"s3://npm-registry-packages-npm-production"}},"3.14.5":{"name":"@anyforge/mcp-server","version":"3.14.5","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.14.5","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"d7f4f70202658ea3cf980810faafc0a6dba048fe","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.14.5.tgz","fileCount":3,"integrity":"sha512-Z4HnUao9q16kkr5q5H+fXg1QOEL4TtruHiNCuYLNJ4n9uI1PBV2HIrCAUh0ob3z69lzHKhkXfzu7V8+xHeLILw==","signatures":[{"sig":"MEYCIQDbRm+ZWBEDM5k8RQBUU93aKTfy5Gi89UqcAcFma1113wIhAJrx7vJKPFr18eRZVevlPs9KcdIBlYj3bel9VbDpZVnC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGuSZ+NGzdV/7UOONpXNJZ47xlw3QRKNG8UMaY5wcYMUAiBL/c+bz4pe3MdQNWC7mrTB/WF3p+5g8o04UJOJhGY2lQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352116},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"bc680dbf540a53a6b06c02417e643ad44f33e208","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.14.5_1793312746747_0.1261918298887995","host":"s3://npm-registry-packages-npm-production"}},"3.15.0":{"name":"@anyforge/mcp-server","version":"3.15.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.15.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"24bcf2899dd11ff86f897af403db12b8586511e1","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.15.0.tgz","fileCount":3,"integrity":"sha512-5M6WYItZEQ0l+BRVQ+AwM6SXu3VL4VfIn55rwTaPHubGUw6VkaaCdQYi7822ynilGqP/8mu6X0tUpgFgCpIcPg==","signatures":[{"sig":"MEQCIGFqDTbZ+vSJkafTswCii7jPryUY91BLdT86CSrk25XIAiA4HWjlkN99bJ5odrk5rkrr1NJ/ApUcjQ7lJen3oacjzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG3m3cMeZ+9l2owSt6+FGq04NYhc8CWSLNp1PASu3J7bAiEA0rZS/6iVFB9gKH9iHp5G7H8lLuA6IbvXPDU7mlDTyQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362350},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"2ad950acf37b4d76755e8fa635f95c9f3cfdab6e","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.15.0_1793487337460_0.7947045675239233","host":"s3://npm-registry-packages-npm-production"}},"3.15.1":{"name":"@anyforge/mcp-server","version":"3.15.1","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.15.1","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"44fd81cab0a8974cc215b978d8cfedb421b304a8","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.15.1.tgz","fileCount":3,"integrity":"sha512-FpjqaeG3tUNLEzwVsvmYCWdaolC/txLWrMukS2MSK4AeOjuCX/WGs5WFrsN1klC/zKOFvRLfAZSuuwwaH3MmdA==","signatures":[{"sig":"MEUCID21FEsVfPAoPwojPVmXQOtfJkUHJhL2kiyqf9D6YKupAiEAkuuSL0dRXNWYRnle4pbwtB2NIToDm9dYUKBWh5sUn0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHCuPDzsY4gB+sbFbr0BrxRrO6Pyvd2G+Bpyx5MYJDR+AiAGL+FTX64KCUiv0z2DkwnXBFbsqnvNmvw5yd7QMBxPPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371962},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"730bd693edf951561c5a84a1f7ca00ca5481a671","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.15.1_1793726236336_0.5321851871911818","host":"s3://npm-registry-packages-npm-production"}},"3.16.0":{"name":"@anyforge/mcp-server","version":"3.16.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.16.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"7df95aecac230c352c73790782ea8a2277822fcc","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.16.0.tgz","fileCount":3,"integrity":"sha512-Lj2UOgJFZHjRt56tHFtxaGkzCrkJo9/77+iQC3lyqq0K/XMitRrwETKz2yr4NOpybs4t1G8rbx2tX3lhGrhnOw==","signatures":[{"sig":"MEUCICsZfM9btobdTcUeb/6WVcY9buTwUIZsy5z7p2Hlt0GqAiEAyh9iwe7zZhrHUNQn+YpjKSWq3epHU6YCKw7f/WdSfYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzVMu/qbsqnsmVSG7ItSM7EissAX/f55EwMhnVJhULgQIgA6J5tGrLzYVU3qLcKpji49uk7hZ4XinGi4ind6EPs5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":381306},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"273cb040064be5e798264b2338752795b4358ab6","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.16.0_1793776917587_0.8181238823196231","host":"s3://npm-registry-packages-npm-production"}},"3.17.0":{"name":"@anyforge/mcp-server","version":"3.17.0","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"license":"UNLICENSED","_id":"@anyforge/mcp-server@3.17.0","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"fe56857fffcf5c37cde8fce51676969b9460ea99","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.17.0.tgz","fileCount":3,"integrity":"sha512-Q7F8b+EETj31mPnDnTgyyHkT02/T47G6qdJtdyBjnUO0ODriVHlRQpg6bvrukJv0j5kCn0m4FofITCJ3+buv5Q==","signatures":[{"sig":"MEUCIGpIJbwuGQarFGThpAc9rxda+rG4tics/X05b8EPKBDyAiEA/xlvg3fMHp13fwO05+P8bX3OmcyGY/9ekfCmKEsfQGY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHnOCJauqMLZJblIjToy4OSn0BbBdqR7UXjTy4ZDdZ3VAiEAwWZbSO07RH3mz7g+v4MFfUBS/p7qG5woFPXSLJPILpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384249},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"90e204bf8a3a972b1ca99b76d9088ee592d0ffb3","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_3.17.0_1793911539471_0.2261124224301505","host":"s3://npm-registry-packages-npm-production"}},"3.18.0":{"_id":"@anyforge/mcp-server@3.18.0","bin":{"anyforge-mcp-server":"dist/index.js"},"dist":{"shasum":"a349b9fffdec1ae5d3595873f179b08e6944df6e","tarball":"https://registry.npmjs.org/@anyforge/mcp-server/-/mcp-server-3.18.0.tgz","fileCount":3,"integrity":"sha512-cEDfMJ1ONamHU7t123HQ+WE2bJvGj/EJV1WJMEnlvzgo/sPk9tWSeQbPaM1+3FTQYzNBcnHVp4E11A7uDEEZ5w==","signatures":[{"sig":"MEQCIChATydlwGsvnT9jmO+mk31hT7OBozNf5ec9+NKV+2/CAiBATHCKewr18i7udZr7LDEmzo0UW7+XhnvxkfW1u2WPLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF86GHREgXqP/tOhHkNInD0w/C4kiWFHM7vE9tr70YIdAiEA/HMWuTJ+kCBm3bp7rU/Bj//T7sDT3ZWDVicqYtCfKPY="}],"unpackedSize":405913},"main":"./dist/index.js","name":"@anyforge/mcp-server","type":"module","engines":{"node":">=22"},"gitHead":"601f26a108aa75580652ccd947406c7ee871c382","license":"UNLICENSED","mcpName":"ai.anyforge/anyforge","scripts":{"dev":"npx tsx index.ts","build":"esbuild index.ts --bundle --minify --platform=node --format=esm --outfile=dist/index.js --packages=external","start":"npx tsx index.ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"version":"3.18.0","_npmUser":{"name":"erpoot","email":"edwin@pootonline.com"},"keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"_npmVersion":"10.9.9","description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","directories":{},"maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"_nodeVersion":"22.23.4","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@types/node":"^22.20.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-server_3.18.0_1794253677061_0.24329621124342948"}}},"time":{"created":"2026-05-31T07:55:56.252Z","modified":"2026-11-09T19:47:57.398Z","2.0.0":"2026-05-31T07:55:56.504Z","2.0.2":"2026-06-04T12:42:09.540Z","2.1.0":"2026-06-07T20:05:51.946Z","2.2.0":"2026-06-09T15:49:51.591Z","2.3.0":"2026-06-17T14:22:07.372Z","2.4.0":"2026-06-18T14:26:10.430Z","2.5.0":"2026-06-26T10:35:44.185Z","3.0.0":"2026-09-29T16:01:37.675Z","3.1.0":"2026-09-29T18:05:52.185Z","3.2.0":"2026-09-30T08:23:36.458Z","3.2.1":"2026-10-04T13:05:36.909Z","3.3.0":"2026-10-09T12:48:18.645Z","3.4.0":"2026-10-13T00:52:58.262Z","3.6.0":"2026-10-17T08:57:58.440Z","3.8.0":"2026-10-22T08:55:50.179Z","3.9.0":"2026-10-22T21:40:05.395Z","3.10.0":"2026-10-23T11:38:56.897Z","3.11.0":"2026-10-24T13:03:01.579Z","3.12.0":"2026-10-27T19:58:47.713Z","3.13.0":"2026-10-27T20:49:56.620Z","3.14.0":"2026-10-27T23:20:30.344Z","3.14.1":"2026-10-28T14:06:43.958Z","3.14.2":"2026-10-28T18:39:26.872Z","3.14.3":"2026-10-28T20:48:37.196Z","3.14.4":"2026-10-28T22:21:26.458Z","3.14.5":"2026-10-29T22:25:46.874Z","3.15.0":"2026-10-31T22:55:37.556Z","3.15.1":"2026-11-03T17:17:16.448Z","3.16.0":"2026-11-04T07:21:57.683Z","3.17.0":"2026-11-05T20:45:39.566Z","3.18.0":"2026-11-09T19:47:57.208Z"},"license":"UNLICENSED","keywords":["anyforge","mcp","model-context-protocol","claude","claude-code"],"description":"AnyForge MCP Server — drive AnyForge (HIL approvals, initiatives, work items, crews) from Claude CLI, Cursor, and other MCP clients","maintainers":[{"name":"erpoot","email":"edwin@pootonline.com"}],"readme":"# AnyForge MCP Server\n\nDrive AnyForge from **Claude CLI** (Claude Code), Cursor, and other MCP\nclients: view and approve **HIL** notifications, read **programs /\ninitiatives / work items**, **add and modify** work items, see **crew\noutputs**, and **interact with crews**.\n\nThe server is a thin client over AnyForge's key-authenticated control\nAPI (`/api/v1/control/*`). It holds no business logic and never needs a\nFirebase login.\n\n> **User-facing setup guide:** [Connect AnyForge to Claude, Cursor and VS Code](https://anyforge.ai/docs?page=mcp-server)\n> (`apps/www/content/docs/mcp-server.md`). This README is the in-repo\n> developer reference; the docs page is the canonical install walkthrough.\n\n> **No key needed for OAuth-capable clients.** This package needs an\n> `sk_anyforge_…` key. Claude (via the AnyForge listing in its connectors\n> directory), Claude Code, VS Code, Cursor and any other client that supports\n> MCP authorization can instead connect to the hosted endpoint\n> `https://crew.anyforge.ai/api/mcp` and sign in with OAuth.\n\n### Hosted OAuth workspace selection\n\nThe hosted endpoint supports an opt-in explicit workspace mode after the\ncorresponding application release. One connection can authorize up to 20\nworkspaces, selected on the consent screen with their own roles and effective\nscopes. Existing single-workspace connections keep their behavior; reauthorize\nto opt in or to add a workspace.\n\nIn explicit mode, call `anyforge_list_workspaces` for the currently authorized,\nconsented workspace IDs, names, roles and effective scopes, then pass\n`workspaceId` on every tenant tool call. There is no mutable active workspace.\nAsk the user when a target is ambiguous. Missing, unconsented or revoked targets\nare denied. Switching workspace in the Console does not change a call's target.\n\n**Settings → API keys → Connected clients** shows only the current workspace's\ngrant. Revoking a row withdraws that workspace; client token revocation and\nrefresh-token reuse detection revoke the whole connection.\n\nThis is specific to OAuth for the exact hosted `/api/mcp` resource. The stdio\npackage continues to use a single-workspace API key and does not add workspace\ndiscovery or `workspaceId` arguments. API keys and vendor proxy endpoints also\nretain their existing workspace boundary. Building or publishing this package\ndoes not deploy hosted workspace selection.\n\n## Platform guide for connected agents\n\nThe server advertises a static `anyforge-platform` guide without tenant data or\nextra authority. MCP clients can load it on demand with the `platform_guide`\nprompt or the `anyforge://guide/platform` resource. The resource also exposes\nthe guide's three reference files.\n\nFor an Agent Skills-compatible local host, install the same guide with:\n\n```bash\nnpx @anyforge/control skill install anyforge-platform\n```\n\nThe default is the project-local `.agents/skills/anyforge-platform/` directory.\nUse `--scope user --client claude` or `--scope user --client codex` for the\ncorresponding user-level directory. Existing files are preserved unless\n`--force` is explicit.\n\n## 1. Authorise this machine (once)\n\n```bash\nnpx @anyforge/control init\n```\n\nThis runs the device-auth flow and writes a long-lived `sk_anyforge_…`\nkey to `~/.anyforge/credentials`. The MCP server reads that file — so\nyou don't put any secret in your MCP config.\n\n> The key carries scopes (`read` / `write` / `approve`). A read-only key\n> can list and inspect but can't create work items or approve HILs.\n\n## 2. Register with Claude CLI\n\n```bash\nclaude mcp add anyforge -- npx tsx /ABS/PATH/TO/packages/control/mcp-server/index.ts\n```\n\n- Add `--scope user` to make it available in every project, or\n  `--scope project` to commit it to this repo's `.mcp.json`.\n- No env vars are required — credentials come from\n  `~/.anyforge/credentials`.\n\nTo point at a non-prod deployment or inline a key instead of using the\ncredentials file, pass env vars:\n\n```bash\nclaude mcp add anyforge \\\n  -e ANYFORGE_API_URL=https://staging.anyforge.ai \\\n  -e ANYFORGE_API_TOKEN=sk_anyforge_xxx \\\n  -- npx tsx /ABS/PATH/TO/packages/control/mcp-server/index.ts\n```\n\n### Cursor / other clients\n\nUse the equivalent stdio MCP config (`command: npx`, `args: [\"tsx\",\n\"…/index.ts\"]`). The same credential resolution applies.\n\n## Tools\n\nCode Studio tools require `@anyforge/mcp-server` **3.8.0 or later** and a\ndeployed Studio API. For stdio clients use `npx -y @anyforge/mcp-server@^3.8.0`\nafter its npm release, then restart the client to refresh its tool catalogue.\nHosted HTTP follows the application deployment and does not depend on the\ninstalled stdio package version.\n\nCode Studio tools require explicit `studio:read`, `studio:write`,\n`studio:execute`, or `studio:publish` scopes; ordinary and legacy keys do not\ninherit them. Owners and operators can request these scopes, and editors can\nrequest them only when their company owner enables developer Studio access.\nExternal coding runs use audited coding, reads and reviews. Hosted commands and\norchestration require browser Studio; crew launches and PR ready/merge require\nconfirmation there. See the portable `references/code-studio.md` guide for the\ncomplete capability and local/remote workspace boundary.\n\n| Tool | Scope | Description |\n|------|-------|-------------|\n| `anyforge_branch_studio_session` | studio:write | Fork a session with explicit conversation/files/both scope. File scope also requires studio:execute and checkpoints; rewind requires exact workspace revisions. Does not undo external GitHub actions. For branch, reuse the same idempotencyKey when retrying; inspect incomplete preparation before retrying. |\n| `anyforge_rewind_studio_session` | studio:write | Rewind a session with explicit conversation/files/both scope. File scope also requires studio:execute and checkpoints; rewind requires exact workspace revisions. Does not undo external GitHub actions. For branch, reuse the same idempotencyKey when retrying; inspect incomplete preparation before retrying. |\n| `anyforge_update_studio_review_finding` | studio:write | Record a finding disposition with rationale and the revision containing a claimed fix. A fixed status does not imply independent verification; request a linked re-review to verify. |\n| `anyforge_get_studio_pr_comments` | studio:read | Read paged inline PR review comments and reviewed file/line/commit provenance. |\n| `anyforge_get_studio_pr_jobs` | studio:read | Read CI job identifiers for the exact PR head and a workflow run from its checks. Follow nextPage before claiming complete evidence. |\n| `anyforge_get_studio_pr_logs` | studio:read | Read a bounded CI log page only for a job belonging to this exact PR head. Preserve nextOffset to continue. |\n| `anyforge_request_studio_review` | studio:execute | Enqueue a durable, budgeted specialist review of an exact checkpoint, branch or PR. Returns a run ID; inspect its events and structured review artifacts. Reviewers cannot publish changes. |\n| `anyforge_list_studio_crew_batches` | studio:read | Read the session crew batches and unexpired proposals, including aggregate progress and limits. |\n| `anyforge_get_studio_crew_batch` | studio:read | Read one owned Studio crew batch. Active crews remain governed by their own gates. |\n| `anyforge_preview_studio_crew_batch` | studio:write | Persist a proposal for existing/new work items, planned or expedited crews, dependencies and aggregate limits. Starts nothing. Also requires studio:publish because orchestration can reach external systems. Open Code Studio to confirm the returned proposal; API/MCP arguments cannot attest human confirmation. |\n| `anyforge_cancel_studio_crew_batch` | studio:execute | Cancel queued starts; already active crews require separate stop actions. Also requires studio:publish. |\n| `anyforge_retry_studio_crew_batch` | studio:execute | Create a new proposal for failed/cancelled work; open Code Studio to confirm execution. This action never starts crews. Also requires studio:publish. |\n| `anyforge_list_studio_sessions` | studio:read | List your owned remote Code Studio sessions and their active/latest run IDs. |\n| `anyforge_create_studio_session` | studio:write | Prepare a direct coding session or attach it to an existing initiative. Does not start execution. Context is a reference; local edits are not uploaded to the remote checkout. additionalRepos needs an explicit repoFullName. |\n| `anyforge_get_studio_usage` | studio:read | Read the owned session recorded billing subtotal from the newest 200 rows, grouped by model/product/run/leg. Preserve `truncated`, `coverage` and `pending`; historical coverage may be incomplete or unavailable, so this is not a complete session bill. Provider cost and platform fee remain separate fields. |\n| `anyforge_get_studio_session` | studio:read | Read one owned Studio session and its reconnect IDs. |\n| `anyforge_update_studio_session` | studio:write | Update a session title, repository, branch, additional repositories or initiative. Does not execute code. additionalRepos replaces the whole list; null or [] clears it. |\n| `anyforge_get_studio_context` | studio:read | Inspect effective context provenance, instructions, skills, graph/document snapshots and MCP availability. Does not expose credentials. |\n| `anyforge_add_studio_context` | studio:write | Attach a bounded context snapshot to a prepared prompt. No code execution; explicitly identify local versus remote provenance. |\n| `anyforge_list_studio_runs` | studio:read | List durable runs for your session. |\n| `anyforge_start_studio_run` | studio:execute | Start a durable coding run in the remote workspace. Can spend tokens and edit files. External runs are limited to audited coding, reads and reviews; hosted shell, browser, outbound connectors, Oracle and crew/workflow/approval actions require the browser Studio surface. Use planned=true for analysis only. Dedicated Git push and draft PR tools need studio:publish; ready/merge require confirmation in Code Studio. |\n| `anyforge_get_studio_run` | studio:read | Read run status, usage and any pending user question. |\n| `anyforge_get_studio_run_events` | studio:read | Read ordered durable run events after a sequence cursor. Persist nextCursor to reconnect without replaying earlier events. |\n| `anyforge_control_studio_run` | studio:execute | Pause, cancel, resume, steer or answer a pending question. Answer requires its current questionId. Resuming may execute code and spend tokens. |\n| `anyforge_get_studio_changes` | studio:read | Read remote workspace revision, Git state and changes. Does not create a workspace or install dependencies. |\n| `anyforge_list_studio_artifacts` | studio:read | Read checkpoint and structured reviewer artifacts for this session. |\n| `anyforge_get_studio_review` | studio:read | Read structured reviewer findings, dispositions and review target provenance. |\n| `anyforge_create_studio_checkpoint` | studio:execute | Capture remote workspace files, including staged and untracked changes, as a persistent checkpoint. |\n| `anyforge_get_studio_checkpoint` | studio:read | Read checkpoint metadata and exact revision. |\n| `anyforge_diff_studio_checkpoint` | studio:read | Read the remote workspace diff for a saved checkpoint. |\n| `anyforge_read_studio_checkpoint_file` | studio:read | Read a bounded file window from a persistent checkpoint. |\n| `anyforge_restore_studio_checkpoint` | studio:execute | Restore a checkpoint into the remote workspace after comparing its current revision. Saves a safety checkpoint first; does not rewind external GitHub actions. |\n| `anyforge_stage_studio_files` | studio:execute | Stage explicitly selected remote files after checking the current revision. |\n| `anyforge_commit_studio_files` | studio:execute | Commit reviewed remote changes. Read changes and confirm file scope before committing; does not push. |\n| `anyforge_push_studio_branch` | studio:publish | Publish the exact remote Git HEAD to its branch. Rejects changed HEAD and default-branch pushes. |\n| `anyforge_get_studio_pull_request` | studio:read | Read a session repository pull request, checks, review decision and merge blockers. |\n| `anyforge_create_studio_pull_request` | studio:publish | Create or reuse a draft PR for the persisted session branch after checking its exact pushed HEAD. Uses your connected GitHub identity. Does not mark ready or merge. |\n| `anyforge_update_studio_pull_request` | studio:publish | Update metadata or mark a session branch PR as draft using its exact expectedHeadSha. Open Code Studio to review and confirm ready/merge; tool arguments cannot authorize those actions. |\n| `anyforge_search_studio_sessions` | studio:read | Search your own Studio sessions by title, repository, branch or folder, newest first. Set conversations=true (q of 2+ characters) to also search message text, five sessions per page. Follow nextCursor; conversationsLimited means a session had more messages than were searched. |\n| `anyforge_archive_studio_sessions` | studio:write | Archive all of your own unarchived Studio sessions (CI auto-fix monitors excluded). Transcripts are kept and each session can be unarchived with update_studio_session. Call again while remaining is true. |\n| `anyforge_list_studio_decisions` | studio:read | List your Studio runs waiting on you: each owned session whose current run asked a question, with the question and its options. Answer with control_studio_run. |\n| `anyforge_list_studio_models` | studio:read | List the models your company and personal credentials can run, grouped by provider, for the model argument of start_studio_run. A provider with ok=false is not configured or not reachable. Cached for 30 minutes unless refresh=true. |\n| `anyforge_get_studio_quota` | studio:read | Read the remaining quota of the Anthropic subscription Studio runs on for you. oauth=false means runs use an API key, which has no subscription window. |\n| `anyforge_get_studio_conversation` | studio:read | Read an owned session's conversation, oldest first: your messages, the agent's replies and, with includeTools=true, each round's tool calls and results. Long text is clipped and flagged truncated. A page can hold fewer than limit messages; follow nextCursor until it is null. |\n| `anyforge_list_studio_tasks` | studio:read | Read the session's task list (the agent's to-do items), newest change first. |\n| `anyforge_compact_studio_session` | studio:execute | Compact the session's stored history: older messages are replaced by one summary so the next run starts lean. Deletes the summarized messages and cannot be undone. Spends a small model call on your credential. Refused while a run is active. |\n| `anyforge_list_studio_verifications` | studio:read | Read the session's verification reports (newest 20): diagnostics, tests, lint, typecheck, build and acceptance checks with their evidence and the exact source they ran against. Running a new verification requires the browser Studio surface. |\n| `anyforge_get_studio_environment` | studio:read | Inspect the existing remote checkout's environment readiness: detected toolchain, dependencies and setup scripts. Never clones, installs or loads secrets; preparing the environment requires the browser Studio surface. |\n| `anyforge_list_studio_outcomes` | studio:read | Read the accepted, needs-rework and abandoned outcomes recorded for the session's runs, with the verification each was bound to. Pass runId for one run's outcome history. Outcomes are recorded by a person in Code Studio. |\n| `anyforge_list_studio_workspace_files` | studio:read | List a directory of the live remote workspace (omit path for the root). Never creates a checkout: a session without one returns workspace_missing. |\n| `anyforge_read_studio_workspace_file` | studio:read | Read a line window of a file in the live remote workspace, including unsaved agent edits. offset is the first line (default 1), limit the line count (default 500, maximum 2000). Never creates a checkout. |\n| `anyforge_inspect_studio_code` | studio:read | Run a language-service query on a live workspace file: diagnostics (default), definition, references, hover, completions, or rename (a preview of the edits; apply with rename_studio_symbol). line and column are 1-based. Pass revision to refuse a changed workspace. |\n| `anyforge_write_studio_workspace_file` | studio:execute | Create an empty file or save a file's complete content in the live remote workspace, without a model run. Name the repository, branch and revision you read, so a changed workspace is refused. Each write saves a checkpoint first. Does not commit or push. |\n| `anyforge_rename_studio_symbol` | studio:execute | Apply a language-service rename of the symbol at a 1-based line and column across the live remote workspace. Preview it first with inspect_studio_code operation=rename. Name the repository, branch and revision you read; a changed workspace is refused. Does not commit. |\n| `anyforge_list_pending_approvals` | read | List HIL approvals awaiting a decision |\n| `anyforge_get_approval_detail` | read | Read one approval's plan / ADR / security context |\n| `anyforge_submit_approval` | approve | Approve or reject a HIL (resumes the crew) |\n| `anyforge_list_programs` | read | List programs |\n| `anyforge_get_program` | read | Get a program |\n| `anyforge_get_program_brief_context` | read | Read a program's structured Brief, version history, legacy mirror, and ICE readiness |\n| `anyforge_save_program_brief_version` | write | Save a complete structured Brief version; archives the prior active version and replaces the retired free-form writer |\n| `anyforge_get_program_intake_definition` | read | Read a program's intake definition (the typed form its intake agent interviews against), the checklist that applies, and its version history; `version` reads one version in full |\n| `anyforge_set_program_intake_definition` | write | Edit a program's intake definition; every change is a new version, and a change that strands answers open requests hold needs `acknowledgeImpact` (use `dryRun` to preview) |\n| `anyforge_restore_program_intake_version` | write | Republish an earlier intake definition version as a new version |\n| `anyforge_set_program_intake_routing` | write | Replace a program's intake routing rules (where completed requests are sent on, by the reporter's answers); program lead or owner only |\n| `anyforge_get_intake_request_details` | read | Read one program intake request's answers against its program's intake definition: each field's state, answer, who gave it, and whether it can be edited |\n| `anyforge_edit_intake_request_details` | write | Set, confirm or clear a program intake request's answers by hand (validated against the definition; audited; no re-approval, no follower notice) |\n| `anyforge_update_program` | write | Update a program's name / status / owner / lead / long-lived flag / target date / coverage goal / tags / change freezes |\n| `anyforge_set_program_status_line` | write | Write or clear a program's status line, shown on a report's program status board |\n| `anyforge_set_program_request_intake` | write | Turn a program's incoming requests on (creates its Incoming Requests initiative) or off |\n| `anyforge_get_program_access` | read | Who may read a program (`GET /programs/{id}/access`): visibility, reader people and teams, the access `revision`, `capacityVisibility`, `canManage` |\n| `anyforge_set_program_access` | write | Replace a program's visibility and reader lists (`PUT /programs/{id}/access`) under `ifRevision` = the access revision; opening a private program is refused (`declassification_unconfirmed`) until a person confirms and you send `confirmDeclassify: true` |\n| `anyforge_set_program_capacity_visibility` | write | Set how a program's time shows outside it (`PATCH /programs/{id}/access`, `restricted` or `unavailable`) |\n| `anyforge_delete_program` | write | Delete a program; `deleteChildren: true` also deletes child initiatives + work items (else they're detached) |\n| `anyforge_set_program_milestones` | write | Set a program's milestones/waves and the initiatives assigned to each (whole-array replace; an initiative sits in at most one wave) |\n| `anyforge_get_program_rollup` | read | Read a program's rolled-up progress, initiative/work-item counts, token budget/spend, and risks — the console program header numbers |\n| `anyforge_architect_program` | write | Run program-level architecture planning: decompose every still-DRAFT initiative in the program at once |\n| `anyforge_approve_program_architecture` | approve | Approve the program's rolled-up solution architecture — one review approves every proposed initiative backlog (HIL #1 each) |\n| `anyforge_list_program_comments` | read | List a program brief's Discussion comments — the same threaded comments the console shows; shared-report comments are marked external with the author's name only |\n| `anyforge_post_program_comment` | write | Post a Discussion comment on a program brief (default `overview` section, or pass `section`; reply with `parentId`), into the thread the console renders; always stored private to the team |\n| `anyforge_update_program_initiative` | write | Enrich one existing program initiative and return changed fields or a structured no-op |\n| `anyforge_close_program_initiative` | write | Preview then close one program initiative with a supported close reason |\n| `anyforge_close_program_work_items_as_fixed` | write | Preview then batch-close non-terminal program work items fixed outside AnyForge |\n| `anyforge_list_initiatives` | read | List initiatives with progress + budget. Returns ONE PAGE (50 default, 100 max) — continue with `meta.nextCursor`, or narrow with `programId`, `status`, `priority`, `owner`, `tag`, `search`. Unknown arguments are rejected; the page echoes `appliedFilters` |\n| `anyforge_get_initiative` | read | Initiative + crew and work-item rows + burn-down; long text is excerpted unless `shape: \"full\"` |\n| `anyforge_get_initiative_spec` | read | Read the active ICE spec, its readiness, what backlog approval will decide (`approvalGate`), and any submission awaiting human review |\n| `anyforge_propose_initiative_spec` | write | Submit an ICE spec for human review; it becomes active only when a person publishes it, in the Console or with `anyforge_publish_initiative_spec`. The receipt carries `reviewUrl`, the absolute Console link to the review page, beside `reviewPath` |\n| `anyforge_publish_initiative_spec` | approve | Publish a pending submission (`submissionId`) as the active spec, exactly as submitted, once the person has read it and asked for it. Only over the hosted MCP (OAuth): a Control API key is refused with `spec_publish_requires_person` |\n| `anyforge_update_initiative` | write | Update a (non-system) initiative — only the fields you pass change, including its owning team (`teamId`); an argument the tool does not declare is refused and nothing is changed |\n| `anyforge_delete_initiative` | write | Delete a DRAFT initiative (archive via update once it's past DRAFT) |\n| `anyforge_get_initiative_status` | read | Read an initiative's Status description — the one current line program reports show beside it |\n| `anyforge_set_initiative_status` | write | Set or clear an initiative's Status description, the same write as Save status in the console (client-visible on shared reports; audited as the key owner) |\n| `anyforge_list_initiative_comments` | read | List an initiative's Discussion comments — the same threaded comments the console shows |\n| `anyforge_post_initiative_comment` | write | Post a Discussion comment on an initiative (reply with `parentId`, pick a section with `anchor`, `mentions`, `clientVisible: true` to share with the client), into the thread the console renders; a reply into a resolved thread is refused |\n| `anyforge_resolve_initiative_comment` | write | Resolve or reopen an initiative Discussion thread, as the console's Resolve and Reopen |\n| `anyforge_list_opportunities` | read | List opportunities in the Discovery (product-planning) layer |\n| `anyforge_create_opportunity` | write | Create an opportunity (bridges raw signals to themed roadmap work). Send `rice` (`reach`, `impact`, `confidence`, `operatorLoad`, `rationale`) in the same call; optional `evidence` is stored on the record |\n| `anyforge_update_opportunity` | write | Edit an opportunity's RICE inputs, `evidence`, stage, theme assignment, or program link (`programId`; `null` unlinks) |\n| `anyforge_delete_opportunity` | write | Hard-delete an opportunity (prefer archiving via `anyforge_update_opportunity`) |\n| `anyforge_promote_opportunity` | write | Promote a prioritized opportunity into a Program + Initiative |\n| `anyforge_list_signals` | read | List signals in the Discovery (product-planning) layer |\n| `anyforge_create_signal` | write | Capture a signal — a raw data point that may inform product direction |\n| `anyforge_update_signal` | write | Edit a signal's status, linked opportunity, or other fields |\n| `anyforge_delete_signal` | write | Hard-delete a signal (prefer archiving via `anyforge_update_signal`) |\n| `anyforge_list_themes` | read | List themes in the Discovery (product-planning) layer |\n| `anyforge_create_theme` | write | Create a theme — a strategic grouping above individual initiatives |\n| `anyforge_update_theme` | write | Edit a theme's name, status, charter lines or other fields (no strategy link — see `anyforge_set_initiative_key_results`) |\n| `anyforge_delete_theme` | write | Hard-delete a theme (prefer archiving via `anyforge_update_theme`) |\n| `anyforge_get_strategy` | read | Read the complete strategy tree, attainment, delivery rollups, horizons, orphan work, and delivery conditions |\n| `anyforge_list_pillars` | read | List strategy pillars |\n| `anyforge_create_pillar` | write | Create a strategy pillar |\n| `anyforge_update_pillar` | write | Update a pillar's name, description, lead, or order |\n| `anyforge_delete_pillar` | write | Delete a pillar when it has no objectives |\n| `anyforge_list_objectives` | read | List strategy objectives |\n| `anyforge_create_objective` | write | Create an objective under a pillar |\n| `anyforge_update_objective` | write | Update or move an objective |\n| `anyforge_delete_objective` | write | Delete an objective when it has no key results |\n| `anyforge_list_key_results` | read | List strategy key results |\n| `anyforge_create_key_result` | write | Create a measurable key result |\n| `anyforge_update_key_result` | write | Update a key result or record a reading |\n| `anyforge_delete_key_result` | write | Delete a key result |\n| `anyforge_get_initiative_key_results` | read | Read which key results an initiative moves |\n| `anyforge_set_initiative_key_results` | write | Set which key results an initiative moves — the one link from work to the strategy |\n| `anyforge_get_horizons` | read | Read NOW / NEXT / LATER narratives and completion criteria |\n| `anyforge_set_horizon_narrative` | write | Update a horizon narrative |\n| `anyforge_get_cluster_charter` | read | Read one theme's charter and outstanding lines |\n| `anyforge_approve_backlog` | approve | Approve a proposed backlog (HIL #1), optionally deferring chosen items (`deferItemIds`, `deferReason`) |\n| `anyforge_approve_task_proposal` | approve | Approve a mid-flight task proposal |\n| `anyforge_list_work_items` | read | List backlog items + crew state. Use `itemId` for a full work-item id or queue code, `search` for partial code/title matches, and `includeArchived: true` to include archived items. Also supports status, owner, assignee, program, initiative, team (a team slug, including the teams beneath it), priority, type and `label` (one exact label, such as a stage of a label group) filters. Returns ONE PAGE (50 default, 200 max) — continue with `nextCursor`. Unknown arguments are rejected; the page echoes `appliedFilters` |\n| `anyforge_list_label_groups` | read | List the company label groups (id, name, ordered labels, `appliesTo`). A group's name is not a label: pass one of its labels to `anyforge_list_work_items` as `label` |\n| `anyforge_list_work_boards` | read | List the saved Work boards; a board that follows a label group carries `labelColumns` and `columnLabels` (the stage labels in column order) |\n| `anyforge_list_cycles` | read | List a team's delivery cycles on its own cadence (`team`, a slug; left out, the workspace cadence): number, dates, `state` (ended / active / future), `isCurrent`, `locked` and `lockReason` (`started` or `signed_off`), `openReason` (`not_signed_off` for a started cycle of a team that locks only at sign-off), committed counts (initiatives, work items, demand days) and capacity per cycle, plus `currentCycleNumber`. `past` (0–12, default 2) and `ahead` (0–6, default 3) set the range. Use it to pick a cycle for `anyforge_update_work_item` `set-cycle` |\n| `anyforge_get_timesheet_week` | read | Your own timesheet week (`date`, any day in it; `today`, your local date), as the Timesheets grid shows it: `days`, bookable `rows` and `categories` with each day's `bookable` and refusal `reason`, `addable`, `blocked`, and `entries` (`initiativeId` or category key, `date`, `minutes`, `note`, `source` `manual`/`auto`). Always the key holder's own time |\n| `anyforge_book_time` | write | Book, change or clear up to 100 cells of your own timesheet (`entries`: `initiativeId` or a category key such as `@meetings`, `date`, `minutes`, optional `note` and `mode` `set`/`add`; `today`), ALL OR NOTHING: a refused cell (`not_bookable` with its `reason`, `day_over_limit`, `initiative_not_found`, `duplicate_entry`) is named by `index` and nothing is written. Cells not sent are left as they are; an empty list returns `written: 0` |\n| `anyforge_get_work_item` | read | Get one work item by its returned id, with `assigneeName`, `blockerOwnerName` and `createdByName` beside the uids (null when nobody visible is named; list items carry them too), and `nextActions`: the status moves this key can make now, each with the exact arguments to send |\n| `anyforge_create_work_item` | write | Create a work item with routing, migration, incident, intake, estimate, and evidence fields |\n| `anyforge_update_work_item` | write | Edit, assign, begin, expedite, dispatch, confirm, drop (with optional `droppedReason`), archive, close, or reopen a work item. Each action takes only its own fields: one it does not read is refused (`unsupported_fields`) and nothing is changed. `status` with no action is the plain move to BACKLOG, REFINED or READY (how an item moves back) |\n| `anyforge_retry_work_item` | write | Terminate a work item's crew and dispatch a fresh one on the same branch; recovers missing/phantom crew records from work-item + initiative defaults |\n| `anyforge_list_work_item_comments` | read | List the work item's discussion thread, separate from crew transcripts; every comment carries a boolean `clientVisible`. `since` (ISO 8601 with a time zone, a date, or epoch ms) returns only comments created after it |\n| `anyforge_post_work_item_comment` | write | Add a discussion comment to a work item; internal unless `clientVisible: true` shares it with the client as it is written; `mentions` (member uids from `anyforge_list_members`) notify those members |\n| `anyforge_share_work_item_comment` | write | Share an existing work-item comment with the client (`clientVisible: true`) or take it back to internal (`false`) |\n| `anyforge_edit_work_item_comment` | write | Edit your own work-item comment (`body`) |\n| `anyforge_delete_work_item_comment` | write | Delete your own work-item comment (409 `comment_has_replies` while it has replies) |\n| `anyforge_resolve_work_item_comment` | write | Resolve or reopen a comment's thread (`resolved`); returns `rootId` |\n| `anyforge_list_work_item_files` | read | List the files attached to a work item (`GET /work/{id}/files`), one page at a time |\n| `anyforge_add_work_item_files` | write | Attach up to 5 files to a work item (`text`, `contentBase64`, or a local `path` on the stdio server); added internal, Console types and limits, all or nothing, about 7 MB of files per call; optional `idempotencyKey` for safe retries, per-file `originalCreatedAt`, and `onNameConflict` |\n| `anyforge_upload_local_file` | write | stdio only: read a file from this machine and direct-upload it (≤ 1 GB) to a work item, initiative or program; refused on the hosted transport (`local_files_unavailable`) |\n| `anyforge_start_file_upload` | write | Start a direct upload (`POST …/files/uploads`); returns the resumable Storage `uploadUrl` and a `curl` command, or `{ alreadyAttached: true, file }` with nothing to send when the same file is already there; optional `originalCreatedAt` and `onNameConflict` |\n| `anyforge_complete_file_upload` | write | Complete it (`POST …/files/uploads/{uploadId}`); the file is attached only now |\n| `anyforge_list_initiative_files` | read | An initiative's Files tab (`GET /initiatives/{id}/files`) |\n| `anyforge_list_program_files` | read | A program's Files tab (`GET /programs/{id}/files`) |\n| `anyforge_split_work_item` | write | Replace one unstarted work item with multiple children |\n| `anyforge_merge_work_items` | write | Replace multiple unstarted work items with one merged item |\n| `anyforge_list_crews` | read | Discover crews by status and active state, newest first. Returns 25 rows unless you pass `limit` (up to 200) |\n| `anyforge_get_crew` | read | Crew state + recent outputs + comments. Leads with status, halt reason, work item, PR and timestamps; `shape: \"summary\"` (default) excerpts long text and leaves out large snapshots, naming each; `messages: 0` is the status read; `shape: \"full\"` for every field |\n| `anyforge_post_crew_comment` | write | Comment on / @-mention people on a crew (the crew does not read comments; use `anyforge_message_crew` to steer a running crew, `anyforge_amend_crew` for one at a gate) |\n| `anyforge_message_crew` | approve | Message a running crew's Engineer (\"skip X\", \"check Z first\"). It reads the message before its next step and confirms in the crew chat; a crew not yet started or stopped inside the Engineer reads it on its first step or on resume. A crew working outside its Engineer (an amend on its way in, review) queues it for the next round (`delivery: next_round`). Refused with `crew_not_reading_messages` at a gate, when stopped outside the Engineer or when finished; the refusal's `nextStep` says what to do. Optional `idempotencyKey` makes a retry safe |\n| `anyforge_resume_crew` | approve | Resume a PAUSED/HALTED crew where it stopped: the same action as the Console's Resume button, so a crew whose Engineer declared itself blocked runs the Engineer again with the messages queued for it. `anyforge_resume_crew_with_pr` is the one that sends an open pull request to review with no Engineer round. Optional `guidance` (up to 4000 characters) resumes with guidance: the Engineer's first resumed round runs with it and the queued messages, in the same call. On a crew halted at its ship gate, guidance is that gate's amend and is refused as amend refuses it. A crew the guidance cannot reach is refused with `not_resumable` and the guidance is not stored: one that is not PAUSED/HALTED, or one paused at a gate; use `anyforge_amend_crew` there. Requires `approve` scope. |\n| `anyforge_halt_crew` | approve | Halt a crew |\n| `anyforge_amend_crew` | approve | Continue & finish — send a crew at its HIL gate back to the engineer with guidance. A crew halted at its ship gate is resumed with the notes; refused with `pr_merged` or `pr_closed` when its pull request merged or closed after the halt. A crew already running gets the amend queued (`queued: true`, `appliesAt`: `next_step`, or `ship_card` for a pending Resume on its next ship card). Optional `postToPullRequest` also posts the notes on the pull request; left out, the organization setting decides (off by default) |\n| `anyforge_fix_crew_ci` | approve | Fix CI: send a crew whose pull request has failing checks back to the Engineer to fix them on the same PR. Works from PR review (HIL_SHIP) or a HALTED/PAUSED crew that has a PR; refused when GitHub does not report CI as failing. Requires `approve` scope and spends crew tokens. Only call when the operator asks. |\n| `anyforge_resume_crew_with_pr` | approve | Review & approve: take a HALTED or PAUSED crew's already-open pull request through the specialist reviews to the approve & merge gate, without re-running the Engineer. Omit prUrl to use the PR stored on the crew. A merged PR is refused. Requires `approve` scope. |\n| `anyforge_decide_crew_permission` | approve | Approve or deny the permission a crew in PERMISSION_PENDING is waiting on (see pendingPermissionRequest on anyforge_get_crew). A tool permission applies for the rest of the run; an MCP write approval decides that one call. Pass approvalId to refuse a decision on a newer request. Requires `approve` scope. Only call when the operator decides. |\n| `anyforge_create_program` | write | Create a program (cross-initiative grouping), optionally with a lead and as long-lived |\n| `anyforge_create_initiative` | write | Create a (DRAFT) initiative, optionally under a program |\n| `anyforge_dispatch_architect` | write | Decompose an initiative into a backlog (→ HIL #1) |\n| `anyforge_list_repo_index` | read | List the org repo index (activity, coverage, analyzed) — discover codebases to scope |\n| `anyforge_get_repo_analysis` | read | One repo's coverage / architecture / gap summary |\n| `anyforge_check_dispatch_readiness` | read | With `workItemId`, list every blocker that would stop a crew starting on that item; with only `repoFullName`, check the repository's analysis gate. Does not launch a crew |\n| `anyforge_analyze_repos` | write | Start Phase-1 analysis for one or more repos; Phase 2 follows automatically when Phase 1 completes |\n| `anyforge_request_pr_review` | write | Request the review `@anyforge review` produces for an existing pull request (`repo` as `owner/name`, `prNumber`). Returns when queued; needs an owner or operator who has connected GitHub. Example: `{ \"repo\": \"acme/api\", \"prNumber\": 42 }` |\n| `anyforge_start_coverage_sweep` | write | Paced Phase 1→2 analysis sweep over a program/repo set |\n| `anyforge_refresh_repo_index` | write | Refresh the repo index + committed-coverage detection now |\n| `anyforge_upload_coverage` | write | Upload test-coverage measurements for one or many repos (e.g. synced from SonarQube) |\n| `anyforge_list_escrow_deposits` | read | List a codebase's (or the company's) escrow deposit ledger |\n| `anyforge_generate_escrow_deposit` | write | Generate a source-escrow deposit bundle for one codebase |\n| `anyforge_list_escrow_scope` | read | List the codebases currently in escrow scope (escrow.enabled) |\n| `anyforge_set_escrow_scope` | write | Bulk-set the \"In escrow scope\" checkbox across many codebases (repos and/or codebaseIds, up to 1000 per call) |\n| `anyforge_start_escrow_sweep` | write | Seed/inspect a paced fleet-wide escrow deposit sweep |\n| `anyforge_escrow_scoping_report` | read (write if store=true) | Generate the Escode scoping-answers report (markdown); `store=true` persists it to Storage |\n| `anyforge_deliver_escrow_deposit` | write | SFTP a stored deposit bundle to the escrow agent; stamps the ledger with a delivery receipt |\n| `anyforge_ask_oracle` | read | Ask the AnyForge Oracle a workspace question (codebases, releases, decisions, live data from connected integrations); runs the full research loop server-side and returns one cited answer. Waits up to ~40s; a longer turn returns `status: \"running\"` and an `askId` |\n| `anyforge_get_oracle_answer` | read | Wait (up to ~40s per call) for the answer to a `running` `anyforge_ask_oracle` question by its `askId`; never re-runs the question |\n| `anyforge_investigate_repository` | read | Delegate a bounded repository investigation across one to five selected repos; returns an evidence-backed report from indexed code intelligence and analysis docs without exposing raw graph records or live source. Waits up to ~40s; a longer investigation returns `status: \"running\"` and a `jobId` |\n| `anyforge_get_repository_investigation` | read | Wait (up to ~40s per call) for the report of a `running` `anyforge_investigate_repository` investigation by its `jobId`; never re-runs the investigation |\n| `anyforge_list_workflows` | read | List the company's Operator Workflows — reusable multi-step orchestrations (agent / tool / parallel / map / gate steps) with each one's inputs and enabled flag |\n| `anyforge_get_workflow` | read | Get one workflow including its full current spec (steps, inputs, budget) — inspect required inputs before a run |\n| `anyforge_run_workflow` | write | Dispatch a run of a workflow (returns the QUEUED run); runs pause at gate steps for an operator decision |\n| `anyforge_get_workflow_run` | read | Get a workflow run's status and per-step progress; gate decisions are made on the Console run page |\n| `anyforge_resolve_workflow_gate` | approve | Resolve a run paused at a gate (`approve` / `amend` / `reject`; `amend` carries guidance in `comment`) |\n| `anyforge_retry_workflow_run` | write | Retry a `FAILED` run from the step that failed: finished steps and a map's answered items are kept, spend keeps accumulating; refused for a failed crew step. Runs on the company key |\n| `anyforge_list_observability_signals` | read | List production-error triage signals (filter by `status`) |\n| `anyforge_accept_observability_signal` | write | Accept a signal into a governed incident under the KTLO program |\n| `anyforge_dismiss_observability_signal` | write | Dismiss a production-error signal as noise |\n| `anyforge_list_audit_events` | audit:read | Read one page of the hash-chained audit trail, oldest first, with each entry's `sequence`, `hash` and `prevHash` (filter by `eventType`, `actor`, `from`, `to`; page with `cursor`). Needs a key minted with the explicit `audit:read` scope by an owner |\n| `anyforge_whoami` | read | Who this connection acts as: the key owner's uid, name and current role, the credential's scopes and the workspace |\n| `anyforge_list_members` | read | List the workspace's approved members with uid, name, email, role and whether they can be assigned work. Assignment takes the uid, not an email; `q` finds a person by name or email |\n| `anyforge_invite_person` | people:invite | Invite one person, or refresh their pending invitation: `role` is operator, editor, viewer or filer (never owner), `email` on a verified company domain, optional `teamIds` and `notify`. Needs an owner's key with the `people:invite` scope |\n| `anyforge_list_people_invitations` | people:invite | List the invitations a `people:invite` key could have written, pending and accepted |\n| `anyforge_withdraw_person_invitation` | people:invite | Withdraw a pending invitation by email address (an accepted or owner invitation cannot be withdrawn this way) |\n| `anyforge_list_page_spaces` | read | List the Pages spaces you can read, with each space's key and what you may do there |\n| `anyforge_list_pages` | read | Browse a space by id, with its settings/revision and paginated page metadata; follow `nextCursor` while `hasMore` is true |\n| `anyforge_create_page_space` | write | Create a space as a workspace Owner |\n| `anyforge_update_page_space` | write | Change settings, access, main page or archive state as a space admin; requires `ifRevision` |\n| `anyforge_list_page_versions` | read | Paginated history metadata; readers see only published history |\n| `anyforge_restore_page_version` | write | Restore an older version as a new save; requires current `ifVersion` and keeps history |\n| `anyforge_set_page_publishing` | write | Set live or publish-to-update mode and replace reviewers as the page owner or space admin |\n| `anyforge_publish_page` | write | Publish, request publication, or approve a pending request as a named reviewer |\n| `anyforge_search_pages` | read | Search the pages you can read (by meaning, or by title); each match has its page id, space, section and snippet |\n| `anyforge_get_page` | read | Read one page: title, space, version, owner and markdown body (`version` for an older one) |\n| `anyforge_create_page` | write | Create a page in a space you can edit (`space` key, `title`, optional `content` and `parentId`), owned by you |\n| `anyforge_update_page` | write | Save a new version (title and/or body, optional change note); `ifVersion` is the version you read, and a page saved since is refused with 409 |\n| `anyforge_move_page` | write | Move a page under another page, to the top level, or to a position among its siblings |\n| `anyforge_archive_page` | write | Archive a page (kept with its history, hidden from the tree and search), or restore it |\n| `anyforge_propose_page_edit` | write | Propose find/replace edits as suggestions an editor accepts or rejects in the page; nothing changes until they do (live pages only) |\n| `anyforge_list_reports` | read | List the Insights reports, most recently edited first: id, title, description, widget count, updatedAt and Console `url`; one page at a time (follow `meta.nextCursor`) |\n| `anyforge_get_report` | read | Read one report: settings (`datesShown`, `trendDays`, `textSize`), whether a share link is live, and every widget definition with its query |\n| `anyforge_create_report` | write | Create an empty report (`title`, optional `description` and `datesShown`), owned by you; needs a role that edits reports |\n| `anyforge_update_report` | write | Change the title, description or settings, and edit widgets by id (`addWidgets`, `replaceWidgets`, `removeWidgetIds`) or replace the whole list (`widgets`). Every widget is validated as a Console save is; a refusal saves nothing |\n| `anyforge_preview_report_query` | read | Run one report query against live data without saving anything: total, rows and a text summary (program, strategy and cycles snapshots included); needs a role that edits reports |\n| `anyforge_describe_report_catalog` | read | The report data catalog: sources, measures, group-bys, filter fields and widget types; needs a role that edits reports |\n| `anyforge_create_risk` | write | Record an accepted risk on a program, initiative or work item: owner (defaults to you), `reviewBy` date or `acceptedUntilMilestoneId`, trigger, mitigation. A risk never blocks dispatch, `Depends on` or the critical path |\n| `anyforge_list_risks` | read | List accepted risks for a program (`programId`) or one subject (`subjectKind` + `subjectId`); closed risks only with `includeClosed` |\n| `anyforge_update_risk` | write | Change a risk's status (for example `MATERIALISED` or `CLOSED`), owner, review date, mitigation or follow-up work items; only the fields passed change |\n| `anyforge_list_skills` | read | The company skill library: id, name, category, one-line description, length and source, without the text (`q` narrows) |\n| `anyforge_get_skill` | read | One company skill with its full text, `revision` and `updatedAt`, by `skillId` or exact `name` (ignoring case). An unknown one is `skill_not_found`; a name two skills share is `ambiguous_skill_name` with their ids. Company library only, not skill sources; a Viewer's key may read |\n| `anyforge_create_skill` | write | Add one skill (`name`, `category`, `content`, optional `description`, `languages`, `force`) through the Skills page's create path: unique name, content scan, similar-intent check. Never exposed to the Oracle from here. Needs an Owner, Operator or Editor |\n| `anyforge_search_context_library` | read | Search the Context Library (uploaded documents and published meetings) by meaning: `q`, optional `limit` (1–12, default 6). Returns `mode` (`semantic`, or `title` when embeddings are not provisioned, with no excerpts) and `matches` with `docId`, `title`, `excerpt` and `untrusted` (a published meeting: untrusted speech). A Viewer's key may read |\n| `anyforge_read_library_doc` | read | One Context Library document's text by `docId`, in pages of up to 30,000 characters (`offset`, `limit`, `expectedRevision`; a replaced document is `document_changed`), or `list: true` for every document. An unknown or archived id is `library_doc_not_found` |\n| `anyforge_list_connected_tools` | read | The company MCP servers an owner opened to local agents, and the tools on them you may use (`access` read or write, `needsApproval`, `actsAs` company or you). Pass `server` for input schemas. Needs an Owner, Operator or Editor on a personal key |\n| `anyforge_call_connected_tool` | read | Call one listed tool (`server`, `tool`, `arguments`). A read runs with the stored credential and returns its result; a write, or a tool marked `needsApproval`, is raised for a person's approval and returns `pending_approval` with a `callId`. Writes need an Owner or Operator and the `write` scope. Every call is audited without its arguments or result |\n| `anyforge_get_connected_tool_call` | read | Where your approval-gated call stands (`pending_approval`, `approved`, `executed`, `failed`, `rejected`, `expired`) and, once settled, what happened |\n| `anyforge_list_report_filter_values` | read | The values a query filter field may take: an enum's closed set, or real ids with names (`query` looks one up by name); needs a role that edits reports |\n| `anyforge_triage_ticket` | read | Run or continue a Support Triage interview — classification, readiness scoring, owning-team routing — and get a paste-ready rendering plus the structured draft; pass the same `sessionId` to continue an interview. Never files anything itself |\n| `anyforge_list_triage_eval_cases` | read | List permitted triage eval cases; historical cases require Owner/Operator |\n| `anyforge_upsert_triage_eval_cases` | write | Create or update triage eval cases in bulk; pass an existing case's `id` to update it in place |\n| `anyforge_delete_triage_eval_case` | write | Delete one triage eval case by id |\n| `anyforge_update_triage_eval_case` | write | Edit one triage eval case in place (bulk-edit via `anyforge_upsert_triage_eval_cases`) |\n| `anyforge_run_triage_eval` | write | Evaluate current knowledge by default, or explicitly select historical saved-snapshot mode (at most 20 cases); eligible cases consume model tokens; no tickets are filed |\n| `anyforge_save_triage_evidence_snapshot` | write | Save supplied historical evidence immutably; no source fetch or model call; Owner/Operator only |\n| `anyforge_get_triage_evidence_snapshot` | read | Read a saved company snapshot; Owner/Operator only |\n| `anyforge_get_triage_eval_run` | read | Poll a queued triage eval run by id and read its completed result |\n\nWork item labels (the Console's Labels field) are `tags`.\n`anyforge_create_work_item` takes `tags`. On `anyforge_update_work_item` with\n`action: \"update\"`, `addTags` and `removeTags` change some labels against the\nlabels stored at write time and need no revision, so a script can relabel many\nitems without reading each first. `tags` replaces the whole list and needs\n`ifClassificationRevision`, the `classificationRevision` that\n`anyforge_get_work_item` returns. A labels-only update works at any status,\n`DONE`, `DROPPED` and archived items included, and its result carries the\nitem's labels and `classificationRevision` after the write.\n\n`anyforge_update_work_item` advertises the complete action enum: `advance`,\n`approve_refinement`, `approve-and-route`, `move-initiative`, `dispatch`,\n`complete`, `update`, `reorder`, `archive`, `unarchive`, `close-as-fixed`,\n`reopen`, `mark-incident`, `drop`, `confirm-repo`, `assign`, `begin`,\n`dismiss-automation-suggestion`, `expedite`, `block`, `unblock`,\n`link-external`, `verification`, `add-evidence`, `remove-evidence`,\n`share-evidence`, `undefer`, `set-cycle`, `link-pull-request`,\n`unlink-pull-request`, `link-work-item`, `unlink-work-item`, `keep-listed`,\n`set-review`, `set-latest-status`, `set-request-review`, `set-type`,\n`set-due-date`, `checklist`, and `checklist-promote`. A root test holds this list and each action's fields equal\nto the Control API's (`app/lib/control/patchFields.ts`).\n\n`status` with no `action` is the Console status menu's plain move: BACKLOG,\nREFINED or READY, from one of those or from work a person began (IN_PROGRESS,\nno crew). It is how an item moves back, it is limited to the same people as the\nmenu (the initiative's stewards and Owners), and the item's history records who\nmoved it. Any other move answers 409 `raw_status_not_allowed` with\n`allowedStatuses` and `useAction` (`reopen`, `undrop`, `begin`, `complete`,\n`dispatch` or `drop`). `status` beside an action is refused locally.\n`anyforge_get_work_item` returns `nextActions`: `statusMoves` (`{ to, send }`,\nwhere `send` is the exact arguments for the move), `withheld` (menu moves the\nwrite would refuse now, with the refusal's code), `restore` (`reopen` or\n`undrop`) and `unavailable` (`read_only`, `not_steward`, `crew_carries`,\n`finished` or `dropped`). `set-review` takes `inReview`, and `begin` takes it\ntoo to start an item already in review. `set-type` and `set-due-date` change\none field at any status. `set-latest-status` takes `latestStatus` (up to 1000\ncharacters, client-visible on shared reports; null clears it).\n`set-request-review` takes `requestReview` (`under_review` or\n`waiting_on_requester`, null clears it) on a request in a program's Incoming\nRequests; it changes no status, is refused with 409\n`request_review_requires_intake_bucket` elsewhere, and routing the request\nclears it. `keep-listed`\nkeeps an unarchived DONE or DROPPED item off the automatic archive.\n`checklist` applies `checklistOps` with `ifChecklistRevision` (the item's\n`checklistRevision`, 0 when absent), and `checklist-promote` turns the step\n`checklistItemId` into a sibling work item.\n`link-work-item` with `linkedWorkItemId` and `linkType` (`relates_to` or\n`duplicates`) connects two work items at any status, done and dropped\nincluded; `unlink-work-item` with the same fields removes the link. `undefer` returns an item\ndeferred at plan\napproval to the ordinary backlog flow. `move-initiative` with\n`targetInitiativeId` moves an item to another initiative at any status,\n`IN_PROGRESS`, `DONE` and `DROPPED` included, keeping its status, pull\nrequests and history; it is refused with `move_initiative_crew_running` (409,\nnaming the crew) while the item's crew is still running, so halt the crew or\nlet it finish first. Use `drop` for an obsolete\nunfinished item and pass `droppedReason` when the reconciliation needs an audit\nexplanation. `archive` requires `DONE` or `DROPPED`; if it returns\n`archive_requires_terminal`, drop the item first. `close-as-fixed` instead\nrecords an external fix and requires `closedReason`; `closedEvidenceUrls`\noptionally adds up to 10 http(s) evidence links. `link-external` records the\nitem's key in another tracker (`externalKey`, optional `externalUrl`; `null`\nunlinks). `verification` with `verificationState: \"verified\"` records the\nclient's acceptance of a `DONE` item and needs a key bound to a user; a key\nwith no user gets `user_bound_credential_required`. `add-evidence` records a\ntest run done outside AnyForge from an `evidence` object (`summary` and\n`status` required; `environment`, `links`, `casesRun`, `casesPassed`,\n`casesFailed` and `clientVisible` optional), attributed to the key's user or,\nfor a key with no user, to an API key. `share-evidence` with `evidenceId` and\n`clientVisible` shows or hides a reviewed entry on client reports and requires\na user-bound key. `remove-evidence` with `evidenceId`\nremoves one entry, for its author or an owner. `anyforge_get_work_item` returns\nthe entries as `testEvidence`. A program can require one entry before its items\nare marked done: set `testEvidenceRequired` with `anyforge_update_program`.\nWhile it is on, `complete` on an item with no entry answers 409\n`test_evidence_required`; `close-as-fixed` is not held by it.\n\nComment audience uses the same `clientVisible` vocabulary as test evidence.\n`anyforge_list_work_item_comments` returns a boolean `clientVisible` on every\ncomment (absent in storage reads as `false`). `anyforge_post_work_item_comment`\nis internal unless `clientVisible: true`; `anyforge_share_work_item_comment`\n(`itemId`, `commentId`, `clientVisible`) changes an existing comment. The gate is\nthe Console's: `write` scope and a key owner who is currently an Editor or\nabove, so a key with no user gets `key_not_attributable`. A reply can be shared\nonly while its parent is shared (`parent_not_shared`). Replies and comment\nattachments stay Console-only. Item files go through `anyforge_add_work_item_files`\n(same gate; bytes as `contentBase64`). Larger files, and initiative and program\nfiles, go through a direct upload (`tools/files.ts`): the bytes go to Storage\nthrough a resumable session the API opens, never through the API.\n`anyforge_upload_local_file` reads a local path and is refused when\n`isHostedTransport()` is true, because the hosted endpoint runs the same\nhandlers on the server, where a path would name the server's own disk.\nEvery upload tool passes `originalCreatedAt` (kept beside the upload time) and\n`onNameConflict` through. The API never attaches the same name and size twice\nto one record: it answers `alreadyAttached` instead, and the start of a direct\nupload then carries no `uploadUrl`, so `anyforge_start_file_upload` returns no\n`curl` and `anyforge_upload_local_file` sends nothing. A same-name file of\nanother size is `file_name_exists` unless `onNameConflict` is `keep_both`.\n\nComments can be changed after posting with `anyforge_edit_work_item_comment`,\n`anyforge_delete_work_item_comment` and `anyforge_resolve_work_item_comment`\n(resolve and reopen). Edit and delete act only on your own comment; resolve\nneeds Editor or above. Deleting a root\nwith replies is refused (`comment_has_replies`). Thread roots in\n`anyforge_list_work_item_comments` carry `resolved`. See the MCP server docs.\n\nThe structured Program Genesis writes are program-scoped. Brief saves are full\nversioned replacements through `anyforge_save_program_brief_version`. Initiative\nclosures and batch close-as-fixed operations use `preview` followed by\n`execute` with the short-lived `proposalToken` returned by the preview. A\nsuccessful initiative enrichment returns `changedFields`; a valid request that\ndoes not change stored data returns `changed: false` and\n`reason: \"no_changes_requested\"`.\n\nWith the default analysis gate enabled, Crew dispatches require a connected\nCodebase with both Phase 1 and Phase 2 analysis complete. Use\n`anyforge_analyze_repos` to start Phase 1, then wait for the automatically\nchained Phase 2 before dispatching a work item. The dispatch response identifies\nthe missing stage when a repository is not ready.\n\n### Tool metadata: annotations + structured output\n\nEvery tool advertises 2025-06-18 MCP metadata so clients can present it well:\n\n- **Title + behaviour annotations** — a human-readable `title` plus hints\n  (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`) derived\n  from each tool's policy, matching the explicit policies and Scope column above.\n  Following MCP, `destructiveHint` is false only for a write that just adds\n  something (posting a comment, attaching a file); every other write, creates\n  included, can change existing state and is marked destructive. `openWorldHint` is set\n  on tools that reach outside the workspace, such as a comment shared on a\n  client's report link or an invitation email. Clients use these to, e.g.,\n  auto-run read-only tools and confirm before a destructive one. They are\n  advisory only: the control API still re-checks the key's scopes on every\n  call, so annotations never widen access.\n- **Structured output** — every tool declares an `outputSchema` (a JSON object)\n  and returns the result as `structuredContent` alongside the human-readable\n  text block, so structured-output-aware clients get machine-parseable data.\n  Arrays come back as `{ items: [...] }` and prose as `{ text: \"…\" }`.\n\nBoth are filled in centrally (`lib/toolMeta`, `lib/toolResult`) so the stdio and\nhosted-HTTP transports advertise and return exactly the same thing.\n\n### Find a work item by code\n\nFor a known full code, call `anyforge_list_work_items` with `itemId`:\n\n```json\n{ \"itemId\": \"WBA-004\", \"limit\": 5 }\n```\n\nUse the returned item's `id` with `anyforge_get_work_item` for its full details.\nFor a partial code or title, use `search` instead, for example\n`{ \"search\": \"WBA-\", \"limit\": 20 }`. Search is case-insensitive and matches\nsubstrings, so check the returned code and title before selecting a record.\nArchived items are excluded by default, including code lookups; add\n`\"includeArchived\": true` when looking for archived work. Check `hasMore` and\nfollow `nextCursor` with unchanged filters when there are more results.\n\n## Prompts (guided flows)\n\nMCP clients that support server prompts (e.g. Claude Code surfaces them as\n`/mcp__anyforge__<name>` slash commands) get:\n\n| Prompt | Args | What it does |\n|--------|------|--------------|\n| `genesis` | `programId?`, `goal?` | Turns the client into the **Program Genesis agent**: it interviews you to scope a program across your codebases (using `anyforge_list_repo_index` / `anyforge_get_repo_analysis`), writes the program brief, then creates one initiative per in-scope codebase and offers to dispatch the architect on each. |\n| `platform_guide` | `topic?` | Loads the static AnyForge platform model, surface map, tool-selection rules, and safety boundaries. Use live tools for current tenant state. |\n\nThe Genesis flow runs entirely in *your* agent — there's no server-side\nchat-in-a-tool. The prompt gives your client the persona + interview script;\nit drives the conversation and calls the tools above as it goes.\n\n## Resources\n\nClients that support MCP resources can list and read:\n\n| URI | Content |\n|-----|---------|\n| `anyforge://guide/platform` | The portable `anyforge-platform` Agent Skill |\n| `anyforge://guide/platform/references/entity-model.md` | Entity relationships and delivery lifecycle |\n| `anyforge://guide/platform/references/tool-map.md` | Representative tool categories and selection rules |\n| `anyforge://guide/platform/references/operating-boundaries.md` | Identity, evidence, trust, and secret-handling boundaries |\n\nThe server's bootstrap instructions point clients at the prompt and resource\nwhen platform context is needed. They are orientation only; permissions and\ncurrent state still come from the authenticated server and live tool results.\n\n## Example prompts\n\n- \"What's waiting for my approval in AnyForge?\" → `anyforge_list_pending_approvals`\n- \"Show me the plan for approval `abc123` then approve it.\" → `anyforge_get_approval_detail` → `anyforge_submit_approval`\n- \"Add a P1 bug: rate-limit the export endpoint.\" → `anyforge_create_work_item`\n- \"Crew `xyz` is running: tell it not to touch the migration files.\" → `anyforge_message_crew`\n- \"What did crew `xyz` produce? Tag Sam on it to review the tests.\" → `anyforge_get_crew` → `anyforge_post_crew_comment`\n- \"Scope a coverage program across our Go services.\" → run the `genesis` prompt → it lists repos, scopes, and creates an initiative per service.\n\n## How it works\n\n```\nClaude CLI ──stdio──▶ MCP server ──HTTPS (Bearer sk_anyforge_…)──▶ /api/v1/control/* ──▶ shared control services\n```\n\nThe `/api/v1/control/*` routes share the exact same service layer as the\nAnyForge web app, so the CLI and the dashboard behave identically.\n\n### Console links in findings\n\nThe server advertises MCP `instructions` (see `lib/consoleLinks.ts`, mirrored by\nthe hosted `/api/mcp` transport) telling every client to present entity ids as\nclickable links to their Console views by default — crew → `/studio?crew={crewId}`,\nwork item → `/work?item={workItemId}`, initiative → `/initiatives/{initiativeId}`,\nand so on — never as bare ids. Crew payloads additionally carry an absolute `url`\nfield built server-side from the deployment's public origin. The path table is a\nhand copy of the app's single source of truth\n(`app/lib/navigation/entityRoutes.ts`), kept in lock-step by a drift test\n(`__tests__/lib/navigation/entityRoutes.test.ts`) — change them together. The\nConsole enforces the viewer's permissions when a link is opened, so linking never\nwidens access.\n\n## Build & publish (maintainers)\n\nThe package ships a single **bundled, minified JS** file (`dist/index.js`),\nso end users can run `npx -y @anyforge/mcp-server` without a TypeScript\ntoolchain. Source lives in `index.ts` / `lib/` / `tools/`; **esbuild**\nbundles it into one ESM file with the shebang preserved and `node_modules`\ndeps left external (`--packages=external`). The bundle is minified — not as\na security control (a downloaded npm package is always readable), but to keep\nthe tarball small; the real trust boundary is the key-authenticated control\nAPI, and this process holds no secrets. Type-checking is a separate `tsc\n--noEmit` step. `dist/` is git-ignored and rebuilt at publish by\n`prepublishOnly`.\n\n```bash\nnpm install          # esbuild + typescript devDependencies\nnpm run type-check   # tsc --noEmit (types only, no output)\nnpm run build        # esbuild → dist/index.js (bundled + minified)\nnpm pack --dry-run   # verify the tarball: dist/ + README + package.json only\n```\n\nPublishing is automated. **Push a `mcp-server-v<version>` tag** and the\n`.github/workflows/publish-mcp-server.yml` workflow builds and runs\n`npm publish` (scoped public), after a locked install, type check, build and\ntarball inspection. Re-running a tag whose version is already ","readmeFilename":"README.md"}