{"_id":"@cydeo/zinctm-mcp","_rev":"4-1419a4a85030ba2f67e58d1b8951aad1","name":"@cydeo/zinctm-mcp","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@cydeo/zinctm-mcp","version":"0.1.0","keywords":["mcp","modelcontextprotocol","qa","testing","zinctm"],"license":"UNLICENSED","_id":"@cydeo/zinctm-mcp@0.1.0","maintainers":[{"name":"kuzzat","email":"kuzzat@cydeo.com"}],"homepage":"https://zincalm.vercel.app","bugs":{"url":"https://github.com/cydeo-dev/zinctm/issues"},"bin":{"zinctm-mcp":"dist/server.js"},"dist":{"shasum":"9acce09143bf43d2435fdae9de820955ecbff9a1","tarball":"https://registry.npmjs.org/@cydeo/zinctm-mcp/-/zinctm-mcp-0.1.0.tgz","fileCount":7,"integrity":"sha512-r1XfftEH1WbhSDGme1i1z49scrEb+1gBpvQnVFU8e/TQwEc2xdDZW+CJgt+eBy9povZ4CfcH6s2McBUl34OAfg==","signatures":[{"sig":"MEYCIQCR3pBujTcRRG4SkfaKeY2A9uyCbK6d33iaGFqAUZfWAQIhAJ4SwsWKePvnxeWZ5fHvk5jLduC64fQe1GjbYM8HSVU+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29263},"type":"module","engines":{"node":">=20"},"gitHead":"4a6cb76f44e35bbcb528f0057680f63d9ef24fe2","scripts":{"test":"vitest run tests/unit","build":"tsc -p tsconfig.json","start":"tsx src/server.ts","test:int":"vitest run tests/integration","prepublishOnly":"npm run build"},"_npmUser":{"name":"kuzzat","email":"kuzzat@cydeo.com"},"repository":{"url":"git+https://github.com/cydeo-dev/zinctm.git","type":"git","directory":"mcp"},"_npmVersion":"11.6.2","description":"MCP server that drives ZincTM — requirements, test cases, script coverage, runs, results and the bug lifecycle — over its HTTP API.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^4.1.9","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/zinctm-mcp_0.1.0_1786749113827_0.18171031721398911","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cydeo/zinctm-mcp","version":"0.1.1","keywords":["mcp","modelcontextprotocol","qa","testing","zinctm"],"license":"UNLICENSED","_id":"@cydeo/zinctm-mcp@0.1.1","maintainers":[{"name":"kuzzat","email":"kuzzat@cydeo.com"}],"homepage":"https://zinctm.cydeo.io","bugs":{"url":"https://github.com/cydeo-dev/zinctm/issues"},"bin":{"zinctm-mcp":"dist/server.js"},"dist":{"shasum":"aa3ceb17c11ac17655a81cc30cdbbf9cd5b8d0fa","tarball":"https://registry.npmjs.org/@cydeo/zinctm-mcp/-/zinctm-mcp-0.1.1.tgz","fileCount":7,"integrity":"sha512-msRQ9ar9LwXKPytD4gGJ5gqz/EhDuK+wU+Dy0763qBEgf6R7DJTJmGmjpe2RV/XoNqI5s1sKvkKx/JJHyYQeMQ==","signatures":[{"sig":"MEUCIGH/CtrXtlxuylAv3hQYe5YwBRp8ss/ECpX0DdH2DcCAAiEA41mXfLKMLJWzuMhlRuP7nsLlgPiiZaMHP8/HVHCT5Tw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29127},"type":"module","engines":{"node":">=20"},"gitHead":"f048a6de000f6c96c59374a2b59003752bd858f9","scripts":{"test":"vitest run tests/unit","build":"tsc -p tsconfig.json","start":"tsx src/server.ts","test:int":"vitest run tests/integration","prepublishOnly":"npm run build"},"_npmUser":{"name":"kuzzat","email":"kuzzat@cydeo.com"},"repository":{"url":"git+https://github.com/cydeo-dev/zinctm.git","type":"git","directory":"mcp"},"_npmVersion":"11.6.2","description":"MCP server that drives ZincTM — requirements, test cases, script coverage, runs, results and the bug lifecycle — over its HTTP API.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^4.1.9","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/zinctm-mcp_0.1.1_1786750786902_0.1510085336596254","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cydeo/zinctm-mcp","version":"0.1.2","keywords":["mcp","modelcontextprotocol","qa","testing","zinctm"],"license":"UNLICENSED","_id":"@cydeo/zinctm-mcp@0.1.2","maintainers":[{"name":"kuzzat","email":"kuzzat@cydeo.com"}],"homepage":"https://zinctm.cydeo.io","bugs":{"url":"https://github.com/cydeo-dev/zinctm/issues"},"bin":{"zinctm-mcp":"dist/server.js"},"dist":{"shasum":"3cb5872a2d683a49e56d3c3f88465ec6ef70c215","tarball":"https://registry.npmjs.org/@cydeo/zinctm-mcp/-/zinctm-mcp-0.1.2.tgz","fileCount":7,"integrity":"sha512-xSd+sKGUdVmss+EQZsNEXQbEaaFSzltqWGTwxhdQoNROxzkj2omQC0/fRxUbpJAypnq+PXZ/eW4JcrwN3pIu7w==","signatures":[{"sig":"MEYCIQDkgjoxpUJybSAtKrL3qHRDdMnB6BqOw9YW6UtvXpikigIhALuscEYmmK6C5mjbw9IG5uiw7EgEqwWtxdzZ0MHThA7r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30534},"type":"module","engines":{"node":">=20"},"gitHead":"2a8a169d896cf9061b39824597390a65aebdb26f","scripts":{"test":"vitest run tests/unit","build":"tsc -p tsconfig.json","start":"tsx src/server.ts","test:int":"vitest run tests/integration","prepublishOnly":"npm run build"},"_npmUser":{"name":"kuzzat","email":"kuzzat@cydeo.com"},"repository":{"url":"git+https://github.com/cydeo-dev/zinctm.git","type":"git","directory":"mcp"},"_npmVersion":"11.6.2","description":"MCP server that drives ZincTM — requirements, test cases, script coverage, runs, results and the bug lifecycle — over its HTTP API.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^4.1.9","typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/zinctm-mcp_0.1.2_1786760336242_0.5424740541439788","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cydeo/zinctm-mcp","version":"0.1.3","type":"module","description":"MCP server that drives ZincTM — requirements, test cases, script coverage, runs, results and the bug lifecycle — over its HTTP API.","bin":{"zinctm-mcp":"dist/server.js"},"scripts":{"build":"tsc -p tsconfig.json","start":"tsx src/server.ts","test":"vitest run tests/unit","test:int":"vitest run tests/integration","prepublishOnly":"npm run build"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","dotenv":"^17.4.2","zod":"^3.23.0"},"devDependencies":{"@types/node":"^20","tsx":"^4.19.0","typescript":"^5","vitest":"^4.1.9"},"license":"UNLICENSED","homepage":"https://zinctm.cydeo.io","publishConfig":{"access":"public"},"engines":{"node":">=20"},"repository":{"type":"git","url":"git+https://github.com/cydeo-dev/zinctm.git","directory":"mcp"},"keywords":["mcp","modelcontextprotocol","qa","testing","zinctm"],"gitHead":"c761b058230164f7c39fb65f5bf0a0e34200ca3e","_id":"@cydeo/zinctm-mcp@0.1.3","bugs":{"url":"https://github.com/cydeo-dev/zinctm/issues"},"_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-1S9rcQwkH4xRtmrqxy0X8NE2BV6KeqCiEcrixC7KENpWQj8c5BwwEqrhhAfWom/Ay+Z/VqrYrS/IKHYaZQn3hA==","shasum":"b2fcd07f4b585f4700d7846b9db937681b0c4972","tarball":"https://registry.npmjs.org/@cydeo/zinctm-mcp/-/zinctm-mcp-0.1.3.tgz","fileCount":7,"unpackedSize":34773,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHZGcFbROjU5oM6uSlO84OigtzRKzP4U3QiUQA/V0H3sAiAmwUlCG+dJ4tZcS75Z8KSqUIPT3+lUpBI2Nwkcul6VCA=="}]},"_npmUser":{"name":"kuzzat","email":"kuzzat@cydeo.com"},"directories":{},"maintainers":[{"name":"kuzzat","email":"kuzzat@cydeo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/zinctm-mcp_0.1.3_1787325990566_0.14879372412882574"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-14T23:11:53.614Z","modified":"2026-08-21T15:26:30.917Z","0.1.0":"2026-08-14T23:11:53.953Z","0.1.1":"2026-08-14T23:39:47.029Z","0.1.2":"2026-08-15T02:18:56.385Z","0.1.3":"2026-08-21T15:26:30.723Z"},"bugs":{"url":"https://github.com/cydeo-dev/zinctm/issues"},"license":"UNLICENSED","homepage":"https://zinctm.cydeo.io","keywords":["mcp","modelcontextprotocol","qa","testing","zinctm"],"repository":{"type":"git","url":"git+https://github.com/cydeo-dev/zinctm.git","directory":"mcp"},"description":"MCP server that drives ZincTM — requirements, test cases, script coverage, runs, results and the bug lifecycle — over its HTTP API.","maintainers":[{"name":"kuzzat","email":"kuzzat@cydeo.com"}],"readme":"# @cydeo/zinctm-mcp\n\nMCP server for [ZincTM](https://zinctm.cydeo.io) — the QA workspace where CYDEO students\npractise the agentic software-testing lifecycle against ZincBank.\n\nIt gives an agent 29 `tm_*` tools covering the whole loop: read requirements, write test cases,\nreview and improve them, link the specs that automate them, open runs, record results, and move\ndefects through an enforced lifecycle.\n\n## Setup\n\n```json\n{\n  \"mcpServers\": {\n    \"zinctm\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cydeo/zinctm-mcp\"]\n    }\n  }\n}\n```\n\nNo environment variable is needed — the server talks to the live ZincTM by default. Set\n`ZINCTM_API_BASE_URL` only if you are pointing it somewhere else, such as a local dev server.\n\nThen, in your agent:\n\n```\ntm_login({ email: \"you@zinc.test\", password: \"...\" })\n```\n\nRequires **Node 20 or newer** — older versions cannot read `Set-Cookie` headers, so login would\nfail silently. The server checks this at startup and refuses to run rather than misbehave.\n\n## What it is, and is not\n\nEvery tool is a thin adapter: validate arguments with Zod, call the same HTTP API the web UI\ncalls, return the envelope. The server holds **no business logic** and opens **no database\nconnection** — so an agent driving the workspace and a student clicking through it cannot\ndiverge. There is one definition of every rule, and it lives behind the API.\n\nTwo error channels, deliberately:\n\n- **Malformed arguments** → JSON-RPC `-32602`. A protocol fault; you called the tool wrong.\n- **Business failures** (`ILLEGAL_TRANSITION`, `INSUFFICIENT_FUNDS`, …) → a normal result with\n  `isError: true` and the canonical code in `structuredContent.errorCode`, so an agent can read\n  it and self-correct.\n\nAuthentication is the student's own login: `tm_login` captures the session cookie into an\nin-process jar and replays it. Row-level security does the rest — an agent physically cannot\nread another student's work.\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm test           # pure unit tests, no server needed\n\n# Integration drives the real server through a real MCP client against a running app.\n# Point it at your own dev server — the default is PRODUCTION, and these tests write data.\nPORT=3100 npm run dev --prefix ..\nZINCTM_API_BASE_URL=http://localhost:3100 npm run test:int\n```\n\n`ZINCTM_API_BASE_URL` defaults to `https://zinctm.cydeo.io` (see `DEFAULT_API_BASE_URL` in\n`src/config.ts`).\n","readmeFilename":"README.md"}