{"_id":"@aquex/tracelab-mcp","_rev":"8-8daac6ccdbaacb6f1f75a0df8ca036be","name":"@aquex/tracelab-mcp","dist-tags":{"latest":"2.1.2"},"versions":{"1.0.0":{"name":"@aquex/tracelab-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"author":{"name":"Aquex"},"license":"MIT","_id":"@aquex/tracelab-mcp@1.0.0","maintainers":[{"name":"kneelinghorse","email":"derek@deniedart.com"}],"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"bin":{"tracelab-mcp":"dist/index.js"},"dist":{"shasum":"b0e42cb8b0c391d12a6564ae668539c6cfbc230c","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-1.0.0.tgz","fileCount":20,"integrity":"sha512-YUYjADUZsbMAq+Mxf9avQXn+3bgOrwAimCWncUfNbKp5zzVTJgKyS+kJhjsnhQ4AbOp4bP90qJ06u+FRwLxnrQ==","signatures":[{"sig":"MEQCIEpIAbMTcYasisjxZfjnFNiAMUSIR8Yx1LU6Yg+hKnxdAiAIimDYgrSuC6JUJHgIYsE2ieWbRmtCh9jHOAyaARMz+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224499},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8197da8a990d43ebbd9f823b3be83f3bec5d6d3f","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"kneelinghorse","email":"derek@deniedart.com"},"repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Seven action-clustered tools (search, project, collection, report, document, mission, mission-execution) and an RFC 8628 device-code login so installers ","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/tracelab-mcp_1.0.0_1777507988287_0.770948325592707","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aquex/tracelab-mcp","version":"1.0.1","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"author":{"name":"Aquex"},"license":"MIT","_id":"@aquex/tracelab-mcp@1.0.1","maintainers":[{"name":"kneelinghorse","email":"derek@deniedart.com"}],"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"bin":{"tracelab-mcp":"dist/index.js"},"dist":{"shasum":"9620c0fa6a1c4996d9ff7670e30a9ee4c8b614af","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-1.0.1.tgz","fileCount":20,"integrity":"sha512-ycvThGH37obc0frbBJdeP/xunxNSqV2Bj8Su6XDVOgufhwpNQUH/SAOA0QtbuBVY4z4VeXUkW/TxlxqZ7ns90Q==","signatures":[{"sig":"MEYCIQCub1JRxRppxRtp/2X9UZifzToNSprLwH+JHMi7/uH+zgIhAKTTFOYNYmE/cD2GWghC4lkIhKgoxuBb790XFce1MrBQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225642},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"13d62df3e840be46d5aec16d0ea7928890526220","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"kneelinghorse","email":"derek@deniedart.com"},"repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Seven action-clustered tools (search, project, collection, report, document, mission, mission-execution) and an RFC 8628 device-code login so installers ","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/tracelab-mcp_1.0.1_1777514674953_0.5648704267110136","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aquex/tracelab-mcp","version":"1.1.1","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"author":{"name":"Aquex"},"license":"MIT","_id":"@aquex/tracelab-mcp@1.1.1","maintainers":[{"name":"kneelinghorse","email":"derek@deniedart.com"}],"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"bin":{"tracelab-mcp":"dist/index.js"},"dist":{"shasum":"064bb89a3fa0ff5068c4fd150beaa09754e3de10","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-1.1.1.tgz","fileCount":20,"integrity":"sha512-UH2xZ1xKizzH+N5SM67ip1vEiPggWaycA09m9yIS/6QU9PpYZcFiM4SOdWU39oOfqyHImjpCf6LOFmREsjX9mw==","signatures":[{"sig":"MEYCIQCMMDsu5Ihlm/kpPUb6eQx+ksiiANmAkdkxSx0yf7SsqgIhAKTkGCqZxgvw26v7lQkZzv+60uDbHc69Dzq0MmczuvtA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268846},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9181f0ee261dd188d09ba5ea068ec26a48347261","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"kneelinghorse","email":"derek@deniedart.com"},"repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Eight action-clustered tools (search, project, collection, report, document, mission, mission-execution, evidence) and an RFC 8628 device-code login so i","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/tracelab-mcp_1.1.1_1787336145157_0.5958085097221142","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aquex/tracelab-mcp","version":"1.2.0","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"author":{"name":"Aquex"},"license":"MIT","_id":"@aquex/tracelab-mcp@1.2.0","maintainers":[{"name":"kneelinghorse","email":"derekn@shout.net"}],"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"bin":{"tracelab-mcp":"dist/index.js"},"dist":{"shasum":"12636767a875e43f031dd0c7781ba69a73a01f73","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-1.2.0.tgz","fileCount":24,"integrity":"sha512-EATitWi1d7M+66p9vqkZmn4JtsR18WTT8N6HG0XrCU7otRHcDczsaeiHMS9a7t0ILwHj8jF2/CK4G2pMeYQCTQ==","signatures":[{"sig":"MEUCIQDahfO71o5eHdoL/pF1xdingGyChupRD9tlZZef7gFcvwIgUNm0wjarE4Jmdin1i3LEd4mbDQlAmJKEYcoFXD/dJUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEXSC3QTPcmraq4mkyWnr+o/r4bT+TgGlGVhkibTh/wkAiBf1kFmAH6gXgDNuHrv42oY/md/5Z0PCrl978vYLpAD5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":359766},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","test:package":"bash scripts/check-package.sh","test:contract":"node scripts/check-canonical-links.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"kneelinghorse","email":"derekn@shout.net"},"repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Nine action-clustered tools (search, project, collection, report, document, mission, mission-execution, evidence, home) and an RFC 8628 device-code login","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/tracelab-mcp_1.2.0_1789450899479_0.7873133398163801","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@aquex/tracelab-mcp","version":"2.0.0","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"author":{"name":"Aquex"},"license":"MIT","_id":"@aquex/tracelab-mcp@2.0.0","maintainers":[{"name":"kneelinghorse","email":"derekn@shout.net"}],"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"bin":{"tracelab-mcp":"dist/index.js"},"dist":{"shasum":"591313b74f7795f1ce1ba4c006e75163987fa14e","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-2.0.0.tgz","fileCount":24,"integrity":"sha512-lRhNMIrEG+BSInxJ+t+QusXUrRfl8apI4JZZuNKTAgyHOo3U5CEiKfM5iiiuE71SpkLLQoqVpZJUvgauSrZkVA==","signatures":[{"sig":"MEUCIHyoZNyFRV5EDfpuLMZoqHbmrGB6xTYHdm+As2t3D2vzAiEAmCc2B9/q3ThFROAT4uTw68sEHGGtquRt7E9csuH0DD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAlUSCKgyL4SSzC4HUNSIMTJGwDOzz+W11kGsOVga8ILAiEArvk5Dowz2EeMUMgnKvYcgtbnqPxlVOA4JA/Cy9PfB1M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357347},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","test:package":"bash scripts/check-package.sh","test:contract":"node scripts/check-canonical-links.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"kneelinghorse","email":"derekn@shout.net"},"repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Nine action-clustered tools (search, project, collection, report, document, mission, mission-execution, evidence, home) and an RFC 8628 device-code login","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/tracelab-mcp_2.0.0_1790130531904_0.46611799181925484","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@aquex/tracelab-mcp","version":"2.1.0","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"author":{"name":"Aquex"},"license":"MIT","_id":"@aquex/tracelab-mcp@2.1.0","maintainers":[{"name":"kneelinghorse","email":"derekn@shout.net"}],"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"bin":{"tracelab-mcp":"dist/index.js"},"dist":{"shasum":"797087ef59c1c39b670fd49281fcc04725dfa36e","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-2.1.0.tgz","fileCount":24,"integrity":"sha512-/pLsANVNUZtY82vg1NNT95wWWqb+QGRS3/+9vpqBrL6p/h7YPzZ5Nb3Xoq5sOfgecFqPjMyDerphvIpHjg6skw==","signatures":[{"sig":"MEUCIQDrpet1O2e3Vh3M9TPwZ/JB7ttksaNrBuAoCsNyWWMcegIgcbEoeDB0CgmbMG6hqBAFJdClWGH2Jt6Bdrbg0BC4+F8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDEFz9lRoMeNl9ZTxKLoxageDEA/cJkXiQDKBqx0Bes2AIgLqgrAn9BEISAmlRAZoiCT6fQMFgiYr8toupuDbU9wRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364052},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","test:package":"bash scripts/check-package.sh","test:contract":"node scripts/check-canonical-links.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"kneelinghorse","email":"derekn@shout.net"},"repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Nine action-clustered tools (search, project, collection, report, document, mission, mission-execution, evidence, home) and an RFC 8628 device-code login","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/tracelab-mcp_2.1.0_1790207921116_0.7712215453131575","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@aquex/tracelab-mcp","version":"2.1.1","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"author":{"name":"Aquex"},"license":"MIT","_id":"@aquex/tracelab-mcp@2.1.1","maintainers":[{"name":"kneelinghorse","email":"derekn@shout.net"}],"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"bin":{"tracelab-mcp":"dist/index.js"},"dist":{"shasum":"ca37c89eeffa4ab18bb21835f0f1c06fe9a93ee6","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-2.1.1.tgz","fileCount":24,"integrity":"sha512-G9RMB+NXOm/so6fKOkfs9yBAUp5kLt8e74rW1rt095x4Nh471g33J/pQ8zHF3QiVQHzQGASsdbbR2gtwg4USAQ==","signatures":[{"sig":"MEUCIBacnrpXZ6PKKouD57FdD0qUn7gVQeTJpQ8+m1YQiTA/AiEA9miReoqH4aQudiwtVBqi56lOeAASIRBEvPT3cb/Fb/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFt6oBQ9mqg0FwImIgxw7ZH99tAWiX/ywTJObDIYTLGFAiEAiEjbwvkA1d9MZdPYBD/riTozsjYzxnvHPjS9uLyow38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":367630},"main":"dist/index.js","type":"module","_from":"file:artifacts/releases/aquex-tracelab-mcp-2.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","test:package":"bash scripts/check-package.sh","test:contract":"node scripts/check-canonical-links.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"kneelinghorse","email":"derekn@shout.net"},"_resolved":"/Users/systemsystems/.codex/worktrees/sprint-63-build/TraceLab/artifacts/releases/aquex-tracelab-mcp-2.1.1.tgz","_integrity":"sha512-G9RMB+NXOm/so6fKOkfs9yBAUp5kLt8e74rW1rt095x4Nh471g33J/pQ8zHF3QiVQHzQGASsdbbR2gtwg4USAQ==","repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Nine action-clustered tools (search, project, collection, report, document, mission, mission-execution, evidence, home) and an RFC 8628 device-code login","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/tracelab-mcp_2.1.1_1790864710216_0.44687875879948","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"_id":"@aquex/tracelab-mcp@2.1.2","bin":{"tracelab-mcp":"dist/index.js"},"bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"dist":{"shasum":"852b6e54092e0030433102d6b456962110a35a39","tarball":"https://registry.npmjs.org/@aquex/tracelab-mcp/-/tracelab-mcp-2.1.2.tgz","fileCount":24,"integrity":"sha512-rar3fJUIfszvZuN05cBw0M0Cz/8+8zCPdJ57NJfmElKCjRO17t1GIw8pm5cz94QpQAAFSSKblUXQLTcfpExtFg==","signatures":[{"sig":"MEUCIQDDO1kK0AA5aOXwdjd/RP4jLWYFEXgHoK56B1jaNpQCiAIgL1UFn6xWxlM83TtltONAp7+q2yEKaKuq4T5nACKvj+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCDYfCp0QMmXlHET21XoDl7ZX+XsdpWm01+lcxHFeDe7AIhALa8Sb5znqr4/+QPCJr/TJ19nMURaexFaTDVhuLTjkxr"}],"unpackedSize":370739},"main":"dist/index.js","name":"@aquex/tracelab-mcp","type":"module","_from":"file:/Users/systemsystems/.codex/worktrees/sprint-64-build/TraceLab/artifacts/releases/aquex-tracelab-mcp-2.1.2.tgz","types":"./dist/index.d.ts","author":{"name":"Aquex"},"engines":{"node":">=18.0.0"},"license":"MIT","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:run":"vitest run","test:package":"bash scripts/check-package.sh","test:contract":"node scripts/check-canonical-links.mjs","prepublishOnly":"npm run build"},"version":"2.1.2","_npmUser":{"name":"kneelinghorse","email":"derekn@shout.net"},"homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"_resolved":"/Users/systemsystems/.codex/worktrees/sprint-64-build/TraceLab/artifacts/releases/aquex-tracelab-mcp-2.1.2.tgz","_integrity":"sha512-rar3fJUIfszvZuN05cBw0M0Cz/8+8zCPdJ57NJfmElKCjRO17t1GIw8pm5cz94QpQAAFSSKblUXQLTcfpExtFg==","repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"_npmVersion":"11.5.1","description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Nine action-clustered tools (search, project, collection, report, document, mission, mission-execution, evidence, home) and an RFC 8628 device-code login","directories":{},"maintainers":[{"name":"kneelinghorse","email":"derekn@shout.net"}],"_nodeVersion":"24.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tracelab-mcp_2.1.2_1790898641958_0.20154918944988331"}}},"time":{"created":"2026-04-30T00:13:08.230Z","modified":"2026-10-01T23:50:42.256Z","1.0.0":"2026-04-30T00:13:08.470Z","1.0.1":"2026-04-30T02:04:35.134Z","1.1.1":"2026-08-21T18:15:45.291Z","1.2.0":"2026-09-15T05:41:39.575Z","2.0.0":"2026-09-23T02:28:51.997Z","2.1.0":"2026-09-23T23:58:41.217Z","2.1.1":"2026-10-01T14:25:10.301Z","2.1.2":"2026-10-01T23:50:42.083Z"},"bugs":{"url":"https://github.com/kneelinghorse/TraceLab/issues"},"author":{"name":"Aquex"},"license":"MIT","homepage":"https://github.com/kneelinghorse/TraceLab/tree/main/packages/tracelab-mcp#readme","keywords":["mcp","model-context-protocol","tracelab","aquex","ai-agent","research","knowledge-base","claude","claude-desktop","claude-code","rag"],"repository":{"url":"git+https://github.com/kneelinghorse/TraceLab.git","type":"git","directory":"packages/tracelab-mcp"},"description":"MCP server for TraceLab — gives AI agents research-to-output loops against a TraceLab knowledge base. Nine action-clustered tools (search, project, collection, report, document, mission, mission-execution, evidence, home) and an RFC 8628 device-code login","maintainers":[{"name":"kneelinghorse","email":"derekn@shout.net"}],"readme":"# @aquex/tracelab-mcp\n\nMCP server for [TraceLab](https://github.com/kneelinghorse/TraceLab). Lets AI\nagents run complete research-to-output loops — semantic search, project and\ncollection management, mission authoring, DeepSearch execution, and report\ngeneration, plus cross-session evidence capture — against a TraceLab knowledge\nbase.\n\n- **9 action-clustered tools / 50 actions in source** (one tool per noun, dispatched by `action`)\n- **RFC 8628 device-code login** — install, run, click a link, you're in\n- Works out of the box with **Claude Desktop**, **Claude Code**, and any\n  Model Context Protocol client over stdio\n\nRequirements: Node ≥ 18, a reachable TraceLab API endpoint, and an invited\nTraceLab account with access to that deployment.\n\n---\n\n## Install\n\nConfigure your stdio MCP client to launch the current published adapter with\n`npx` — no global install needed:\n\n```bash\nnpx -y @aquex/tracelab-mcp@latest\n```\n\nFor a reproducible install, pin the current documentation patch, **2.1.1**:\n\n```bash\nnpm install -g @aquex/tracelab-mcp@2.1.1\ntracelab-mcp\n```\n\nFrom source (development):\n\n```bash\ngit clone https://github.com/kneelinghorse/TraceLab.git\ncd TraceLab/packages/tracelab-mcp\nnpm install\nnpm run build\nnode dist/index.js\n```\n\nThese commands launch a long-running stdio server for your MCP client. They\nare not shell commands for individual tool calls.\n\n---\n\n## First run: from sign-in to a cited answer\n\n1. Obtain an invitation and sign in to the [TraceLab browser app](https://tracelab.aquex.ai).\n   [Configure your MCP client](#configure-your-mcp-client) with the API origin\n   `https://api.tracelab.aquex.ai`, then let the client launch the adapter.\n2. Open the device-approval URL shown in the client's server logs and approve\n   that launch in your signed-in browser. See [First-time login](#first-time-login)\n   below. Allow enough startup time for the device flow to finish; if your client\n   stops the process first, increase its startup timeout and relaunch to get a\n   fresh code.\n3. Ask the MCP client to call `tracelab_project` with `action=\"list\"`:\n\n   ```json\n   { \"name\": \"tracelab_project\", \"arguments\": { \"action\": \"list\" } }\n   ```\n\n   Select a returned project's `id` for `project_id`. Signup creates a personal\n   Space, **not a project or bundled corpus**; shared access may make existing\n   projects visible. If the list is empty, create a project in the browser app\n   (or with `tracelab_project`, `action=\"create\"`, and `name`). Upload and process\n   documents in that project before asking about them. Do the same if a visible\n   project has no indexed documents yet. The adapter also exposes\n   `tracelab_document` actions `upload` and `process` for this ingestion path.\n4. Call `tracelab_search` with `action=\"ask\"`, the selected `project_id`, and\n   your `question`. Replace this example UUID with the ID returned above:\n\n   ```json\n   {\n     \"name\": \"tracelab_search\",\n     \"arguments\": {\n       \"action\": \"ask\",\n       \"project_id\": \"fbd3bd03-5ddc-49ee-8013-529163a99290\",\n       \"question\": \"What do these documents say about onboarding?\"\n     }\n   }\n   ```\n\n   Open a returned `citations[].url` to view its supporting chunk in the\n   document. `no_evidence: true` is expected when the accessible indexed\n   documents do not support an answer. This action answers only from that\n   project's corpus; general Librarian chat/planning is a separate interaction.\n   Asking does not submit a DeepSearch mission. Any paid model call is recorded\n   as your usage.\n\nThe JSON above describes MCP tool calls made by your client, not terminal input.\n\n---\n\n## First-time login\n\nWhen neither an environment credential nor a stored credential matching the\nAPI origin is available, `tracelab-mcp` runs an RFC 8628 device-authorization\nflow. You'll see this on stderr:\n\n```\n────────────────────────────────────────────────────────────\n[tracelab-mcp] Login required\n────────────────────────────────────────────────────────────\nOpen:  https://tracelab.aquex.ai/device?code=WDJB-MJHT\nCode:  WDJB-MJHT\n(Code expires in 600s; this client will poll every 5s.)\n────────────────────────────────────────────────────────────\n```\n\n1. Open the URL in any browser where you're logged in to TraceLab.\n2. Confirm the User-Agent shown matches the install you started, then click\n   **Approve**.\n3. The MCP client picks up the freshly minted API key within ~5 seconds and\n   continues startup.\n\nThe minted key is stored at `~/.config/tracelab-mcp/credentials.json`\n(`chmod 600`). Subsequent launches against the same API origin reuse it. A\nrevoked credential must be removed and replaced through a fresh login.\n\nTo revoke a key, delete the credential file *and* delete the key from your\nTraceLab account at `/profile` → API Keys. To force a re-login, delete the\ncredential file and relaunch.\n\n---\n\n## Configure your MCP client\n\n`TRACELAB_API_URL` is the FastAPI origin, without an `/api/v1` suffix. The\nclient appends `/api/v1` to each request itself. For production, use\n`https://api.tracelab.aquex.ai`; `https://tracelab.aquex.ai` is the browser UI.\n\nGenerated browser navigation uses canonical `/projects/:id`, `/documents/:id`,\n`/collections/:id`, `/reports/:id`, `/missions/:id` and `/evidence/:id` routes.\nEntity projections carry `url`; related resources use named `document_url`,\n`collection_url`, `report_url` or `project_url` fields. Optional missing IDs do\nnot produce links. Existing evidence `source_url`, authored references/context,\nfull contract previews and Markdown exports retain their original values.\n\nThe public API above uses `https://tracelab.aquex.ai` for browser links. Loopback\nAPI hosts use `http://localhost:3000`. For another deployment or local frontend\nport, set **`TRACELAB_FRONTEND_URL` in the MCP process environment** to the browser\norigin, for example `https://research.example.com`. It must be an HTTP(S) origin\nwithout credentials, a path, query or fragment. Configuration is checked before\nlogin and tool execution; custom API hosts require this explicit setting.\n\n### Codex (desktop, CLI, and IDE)\n\nAdd the stdio server to `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.tracelab]\ncommand = \"npx\"\nargs = [\"-y\", \"@aquex/tracelab-mcp@latest\"]\nstartup_timeout_sec = 600\n\n[mcp_servers.tracelab.env]\nTRACELAB_API_URL = \"https://api.tracelab.aquex.ai\"\n```\n\nThe [startup timeout](https://learn.chatgpt.com/docs/config-file/config-reference)\nallows time to approve the device code before the adapter registers its tools.\nRestart Codex after saving the configuration. TraceLab does not expose a\nremote SSE MCP endpoint; a connector configured with `url =\n\"https://aquex.ai/mcp\"` is not the TraceLab MCP server.\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tracelab\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@aquex/tracelab-mcp@latest\"],\n      \"env\": {\n        \"TRACELAB_API_URL\": \"https://api.tracelab.aquex.ai\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Desktop. The first invocation triggers the device-code flow\non stderr (visible in Claude Desktop's MCP server logs).\n\n### Claude Code\n\n```bash\nclaude mcp add --transport stdio tracelab \\\n  --env TRACELAB_API_URL=https://api.tracelab.aquex.ai \\\n  -- npx -y @aquex/tracelab-mcp@latest\n```\n\n### Other MCP clients\n\nThe server speaks stdio. Any MCP-compatible client that can launch a\nsubprocess will work — point it at `tracelab-mcp` (or\n`npx -y @aquex/tracelab-mcp@latest`) and pass `TRACELAB_API_URL` in the environment.\n\n---\n\n## Configuration\n\n| Variable | Default | Purpose |\n| --- | --- | --- |\n| `TRACELAB_API_URL` | `http://localhost:8000` | TraceLab API base URL (the FastAPI service, not the frontend). |\n| `TRACELAB_TOKEN` | *(unset)* | Optional JWT bearer. Wins over device-code credential when set. Useful for short-lived CI runs. |\n| `TRACELAB_API_KEY` | *(unset)* | Optional `tl_*` API key. Wins over device-code credential when set. Useful when you've already minted a key via the web UI and want to skip the flow. |\n\nAuth resolution order at startup:\n\n1. `TRACELAB_TOKEN` env var (JWT).\n2. `TRACELAB_API_KEY` env var (`tl_*` key).\n3. Stored credential at `~/.config/tracelab-mcp/credentials.json`, **only\n   if** its `apiBaseUrl` matches `TRACELAB_API_URL`.\n4. Interactive device-code flow (mints a fresh key, persists it).\n\nStep 3's URL match means switching `TRACELAB_API_URL` between (e.g.) prod\nand a local dev server forces a fresh login per environment — credentials\nnever leak across deployments.\n\n---\n\n## Tools\n\nNine action-clustered tools / 50 actions in source. Each cluster exposes multiple actions\nselected via the `action` parameter.\n\n| Cluster | Actions | Purpose |\n| --- | --- | --- |\n| `tracelab_search` | `knowledge`, `navigate`, `pedr`, `ask` | Semantic search across the knowledge base, and cited answers to a question about one project's documents. |\n| `tracelab_project` | `list`, `get`, `create`, `update`, `stats`, `neighborhood` | Project CRUD, aggregate stats and the scoped relationship neighborhood. |\n| `tracelab_collection` | `list`, `get`, `export`, `create`, `add`, `synthesize`, `documents`, `mission_seed`, `update`, `add_document` | Curate chunks and documents into collections, edit their instructions, then synthesize. |\n| `tracelab_report` | `create`, `list`, `get`, `export`, `update` | Persistent named research reports, including title/status updates. |\n| `tracelab_document` | `upload`, `get_content`, `list`, `process` | Document ingestion, explicit processing and full-text fetch. |\n| `tracelab_mission` | `create`, `list`, `get`, `update` | Mission CRUD against the DeepSearch authoring contract; `list` sorts by created/updated time. |\n| `tracelab_mission_execution` | `submit`, `status`, `preview`, `logs`, `events`, `cancel`, `promote_report` | DeepSearch lifecycle: queue, poll status, preview the compiled contract, cancel, promote a finished report to a document. |\n| `tracelab_evidence` | `capture`, `note`, `list`, `search`, `promote`, `get` | Capture sourced findings and working notes, reuse them across sessions, and promote a session to a report or document. |\n| `tracelab_home` | `snapshot`, `favorites`, `activity`, `activity_summary` | Caller-scoped home and recent-activity reads (human credential required). |\n\n\nThe Sprint 52 additions below first shipped in **1.2.0**. These sections record\nrelease history; subsequent changes are called out below and in the changelog.\nFor current installation guidance, use [Install](#install); the current surface\nis the nine-tool, fifty-action table above.\n\n### Sprint 52 read parameters (1.2.0)\n\nEvery action calls the authenticated REST API afresh. Server totals and authored\nfields are preserved. Entity responses add absolute browser links; existing\n`href` fields and authored/source URLs are retained.\n\n| Action | Required and optional parameters |\n| --- | --- |\n| `tracelab_home.snapshot` | No additional parameters. Returns the caller-scoped home sections, including server `missions.total`. |\n| `tracelab_home.favorites` | Optional `project_id`, `page` (default 1), `page_size` (default 6, max 100). |\n| `tracelab_search.navigate` | Required `q` (1–200 characters). Optional `entity_type`: project/document/mission/report/collection/evidence; `page` (1), `page_size` (5, max 50). |\n| `tracelab_search.pedr` | Required `query` (1–2000 characters). Optional `top_k` (10, max 100), `project_id`, `source_type`, `date_from`, `date_to` (YYYY-MM-DD), `enable_graph` (true, matching the UI). Returns full results and layer/graph diagnostics. |\n| `tracelab_evidence.get` | Required `entry_id` UUID. Returns the full entry and relationships; no separate project parameter is needed. |\n| `tracelab_document.list` | Optional `project_id`, `processed` (true or false), `search`, `page` (1), `page_size` (20, max 100). `total` comes from server pagination. |\n| `tracelab_project.get` | Required `project_id` UUID. |\n| `tracelab_collection.documents` | Required `collection_id` UUID. Optional `page` (1), `page_size` (20, max 100). |\n| `tracelab_collection.mission_seed` | Required `collection_id` UUID. Returns drafting instructions, background and source references. |\n| `tracelab_mission_execution.logs` | Required `mission_id` UUID. Optional `limit` (100, max 500). |\n| `tracelab_mission_execution.events` | Optional `mission_id` UUID, `limit` (50, max 200). |\n\nPEDR remains an explicit choice for multi-layer search and graph diagnostics;\n`knowledge` continues to use plain `/retrieval/search`. These are alternative\nretrieval paths, with no claim that PEDR ranks better. Logs/events are bounded\nsnapshots of recorded activity. An empty list includes an explicit `empty` flag\nand message; it does not establish that streaming is active.\n\nExisting actions also gain UI parameters:\n\n- `tracelab_search.knowledge`: optional `source_type`, `date_from`, `date_to`\n  (YYYY-MM-DD), alongside the existing `query`, `limit`, `project_id` and `tags`.\n- `tracelab_mission.list`: optional `sort` = `created_desc` (default),\n  `created_asc`, `updated_desc` or `updated_asc`. Without `sort` the request URL\n  is unchanged. (The 1.2.0 `view` and `reason` parameters were removed with the\n  attention surface; see the 2.0.0 notes below.)\n- `tracelab_collection.list`: optional `project_id`, `page`, `page_size` (max 100).\n  `get` returns `instructions`; `create` accepts optional `instructions` (max\n  20,000 characters).\n- `tracelab_evidence.list` and `.search`: optional `tag`, `created_from`,\n  `created_until` (YYYY-MM-DD), `source_id` (UUID), `report_id`, `document_id`, in\n  addition to existing project/session/mission/disposition/pagination filters.\n  Use at most one of `report_id` or `document_id`; it must belong to `project_id`.\n  The start date must not follow the end date, and `9999-12-31` is not a valid\n  end date. Tags are nonblank and at most 64 characters.\n- `tracelab_report.export`: optional `format` = `md`, `json` or `txt` calls the\n  REST export route and returns its exact text. Omit `format` to retain the\n  legacy response of exact `report.content` bytes.\n\n### Sprint 52 actions and reads (MCP-2, 1.2.0)\n\nSix non-destructive actions on research objects and caller-scoped reads mirror\nthe exact REST routes the web UI calls. Per-user acknowledgements (favorites,\nsaved searches and the activity viewed watermark) and every DELETE route stay in\nthe web UI by decision #426; the MCP never performs them on the user's behalf.\n\n| Action | Route and parameters |\n| --- | --- |\n| `tracelab_mission_execution.cancel` | `PATCH /missions/{id}` with `{status: \"cancelled\"}`. Required `mission_id`; `status` is optional and only ever `cancelled`. |\n| `tracelab_mission_execution.promote_report` | `POST /missions/{id}/promote-report`. Required `mission_id` (completed mission with a report or markdown). Returns the new document with `document_url`. |\n| `tracelab_document.process` | `POST /documents/{id}/process`. Required `document_id`. Runs parse, PII redaction, chunking and embedding. |\n| `tracelab_collection.update` | `PUT /collections/{id}`. Required `collection_id` plus at least one of `name`, `description`, `instructions` (max 20,000 characters). |\n| `tracelab_collection.add_document` | `POST /collections/{id}/documents` with `{document_id}`. Required `collection_id`, `document_id`. |\n| `tracelab_report.update` | `PUT /reports/{id}`. Required `report_id` plus `title` and/or `status` (`draft` or `final`). |\n| `tracelab_project.neighborhood` | `GET /graph/neighborhood`. Required `root_type` (project/document/mission/report/collection/evidence) and `root_id`. Optional `depth` (1, max 2), `per_relation_limit` (12, max 50), `max_nodes` (60, max 150). Nodes carry canonical links; groups carry server totals. |\n\n### Recent activity (ACT-1, 2.0.0)\n\nDecision #459 replaced the inbox, \"needs attention\", mission reviews and saved\nmission views with one recency-ordered activity stream. The 1.2.0 actions\n`tracelab_home.attention`, `tracelab_home.inbox_summary`,\n`tracelab_home.inbox_list` and `tracelab_mission.views` are gone, as are the\n`view`/`reason` parameters of `tracelab_mission.list` and the `attention`\nsection of `tracelab_home.snapshot` (which now carries `activity`).\n\n| Action | Route and parameters |\n| --- | --- |\n| `tracelab_home.activity` | `GET /activity`. Optional `page` (1), `page_size` (20, max 100). Missions, reports and evidence in one recency order; each item has `type`, `id`, `title`, `subtitle`, `status`, `occurred_at`, `href`, `url` and a caller-relative `new` flag. Server `total` and `new_total` are preserved. |\n| `tracelab_home.activity_summary` | `GET /activity/summary`. No parameters. `new_total` and `by_type` counts. |\n\nMarking activity as viewed (`PUT /activity/viewed`) stays in the web UI.\n\nHome, activity and evidence routes reject service principals: use the\ndevice-code login or a user API key.\n\n### Creating in a Space (PERSONAL-2, 2.0.0)\n\n`tracelab_project.create` takes an optional `workspace_id` (UUID), the Space to\ncreate the project in. Omit it and the project lands in your personal Space. You\nmust be a member of the named Space (403 otherwise); owners and admins may name\nany existing Space (404 if it does not exist). The web UI's Space picker sends\nthe same field to the same route. `tracelab_project.list` and the `create` result\nnow carry each project's `workspace_id`; `get` always did.\n\n### Asking a project a question (MCP-6, 2.1.0)\n\n`tracelab_search.ask` gives agents the Librarian's \"Ask the documents\": the same\nQ&A service, the same citation rule and the same access check.\n\n| Action | Route and parameters |\n| --- | --- |\n| `tracelab_search.ask` | `POST /search/ask`. Required `project_id` and `question` (1–20,000 characters). Optional `max_tokens` (64–4000; omitted uses the server default; the Librarian uses 600 for a short answer and 2000 for a full synthesis). Returns `answer`, `passages` (each paragraph with the chunk ids it cites), `citations` (`chunk_id`, `document_id`, `document_name`, `chunk_index`, `snippet`, `href`, and a `url` that opens the chunk in its document), `project_url` and `no_evidence`. |\n\nEvery citation is a chunk the answer was written from, in a document that still\nexists. When nothing in the project answers the question, `no_evidence` is true\nand the answer says so instead of guessing. You can ask only a project you can\nread (403 otherwise; 404 when it does not exist), with a human credential. Each\npaid model call is recorded as your usage.\n\n### Example calls\n\nSemantic search:\n\n```json\n{\n  \"name\": \"tracelab_search\",\n  \"arguments\": {\n    \"action\": \"knowledge\",\n    \"query\": \"user onboarding best practices\",\n    \"limit\": 10\n  }\n}\n```\n\nAsk a project a question:\n\n```json\n{\n  \"name\": \"tracelab_search\",\n  \"arguments\": {\n    \"action\": \"ask\",\n    \"project_id\": \"fbd3bd03-5ddc-49ee-8013-529163a99290\",\n    \"question\": \"What does self-hosting Qdrant cost?\",\n    \"max_tokens\": 600\n  }\n}\n```\n\nCreate a mission and submit it to DeepSearch:\n\n```json\n{\n  \"name\": \"tracelab_mission\",\n  \"arguments\": {\n    \"action\": \"create\",\n    \"mission_id\": \"RESEARCH-001\",\n    \"title\": \"Hosted code-execution platforms\",\n    \"objective\": \"Compare serverless container platforms for evaluation\",\n    \"success_criteria\": [\"≥5 platforms covered\", \"Latency benchmarks cited\"],\n    \"project_id\": \"fbd3bd03-5ddc-49ee-8013-529163a99290\",\n    \"required_entities\": [\"AWS Lambda\", \"Google Cloud Run\", \"Vercel\", \"Fly.io\"],\n    \"deliverable_format\": \"comparison table\"\n  }\n}\n```\n\n```json\n{\n  \"name\": \"tracelab_mission_execution\",\n  \"arguments\": {\n    \"action\": \"submit\",\n    \"mission_id\": \"RESEARCH-001\"\n  }\n}\n```\n\nSynthesize a collection into a report:\n\n```json\n{\n  \"name\": \"tracelab_collection\",\n  \"arguments\": {\n    \"action\": \"synthesize\",\n    \"collection_id\": \"11111111-1111-1111-1111-111111111111\",\n    \"prompt\": \"Compare the platforms on cold-start latency and cost.\"\n  }\n}\n```\n\nCapture sourced findings for reuse in later sessions:\n\n```json\n{\n  \"name\": \"tracelab_evidence\",\n  \"arguments\": {\n    \"action\": \"capture\",\n    \"project_id\": \"fbd3bd03-5ddc-49ee-8013-529163a99290\",\n    \"session_key\": \"competitive-scan-2026-08-20\",\n    \"entries\": [\n      {\n        \"claim\": \"The vendor publishes a documented data-retention limit.\",\n        \"source_url\": \"https://example.com/security/retention\",\n        \"snippet\": \"Customer content is retained for no more than 30 days.\",\n        \"query\": \"vendor data retention policy\",\n        \"disposition\": \"supporting\",\n        \"tags\": [\"security\", \"retention\"]\n      }\n    ]\n  }\n}\n```\n\nSearch the project ledger before repeating research:\n\n```json\n{\n  \"name\": \"tracelab_evidence\",\n  \"arguments\": {\n    \"action\": \"search\",\n    \"project_id\": \"fbd3bd03-5ddc-49ee-8013-529163a99290\",\n    \"q\": \"data retention\"\n  }\n}\n```\n\n### Search before research\n\nUse the two search surfaces in this order:\n\n1. Call `tracelab_evidence(action=\"search\")` with the project ID to reuse raw\n   findings from earlier sessions. These results retain the source URL,\n   disposition, canonical `source_id`, and `source_sighting_count`.\n2. Call `tracelab_search(action=\"knowledge\")` when you need semantic matches\n   from the ingested document corpus.\n3. Capture material new findings with `tracelab_evidence(action=\"capture\")`,\n   including contradictory and rejected evidence rather than silently dropping\n   it.\n\nRaw ledger entries do not automatically appear in `tracelab_search`. When a\nreviewed session should join the document corpus, promote it explicitly:\n\n```json\n{\n  \"name\": \"tracelab_evidence\",\n  \"arguments\": {\n    \"action\": \"promote\",\n    \"project_id\": \"fbd3bd03-5ddc-49ee-8013-529163a99290\",\n    \"session_key\": \"competitive-scan-2026-08-20\",\n    \"target\": \"document\"\n  }\n}\n```\n\nDocument promotion is the bridge into TraceLab's normal ingestion, chunking,\nembedding, Qdrant, and PEDR/preflight paths. Report-only promotion preserves a\ndurable report but does not add its content to document search.\n\nEvidence required text and tags are trimmed and must remain nonblank. Working\nnote keys may contain ordinary encoded path characters (including `/`), but\nthe dot-only keys `.` and `..` are reserved because URL parsers treat them as\nnavigation segments.\n\n---\n\n## Migration from earlier names\n\nIf you previously used the un-published `@tracelab/mcp-server` name from\nthis repo, the only change is the package name on install. Tool names,\nschemas, and behavior are unchanged. The flat `~24` tool surface from\nsprint-40 was collapsed into 7 clusters in sprint-41 (T41.7), then extended\nto 8 by the additive Evidence Ledger cluster in LEDGER-1, and to 9 with\n`tracelab_home` in 1.2.0. The 2.0.0 activity changes and 2.1.0 corpus Q&A addition\nbring the current surface to 9 tools / 50 actions. As before,\ncalls to the legacy names return a friendly migration error pointing at\nthe cluster equivalent.\n\n---\n\n## Troubleshooting\n\n**Login times out / `expired_token`** — the device code is valid for 10\nminutes. Approve faster, or relaunch to mint a new code.\n\n**`access_denied` immediately** — someone clicked **Deny** on the web\n`/device` page (possibly you, possibly not). Relaunch and re-approve.\n\n**`slow_down` errors in logs** — harmless. The server enforces a polling\ninterval; the client bumps its sleep by 5 seconds and continues.\n\n**MCP tools not showing up in Claude Desktop** — check the MCP server logs\n(Settings → Developer → MCP Server Logs in Claude Desktop). The first launch\nmust complete the device-code flow before tools register.\n\n**Stale credential after server URL change** — if you switched\n`TRACELAB_API_URL` between deployments, the client logs *\"Stored credential\ntargets X, but TRACELAB_API_URL is Y. Re-running device login.\"* and\nprompts again. Expected behavior.\n\n**Stored credential leak / suspected compromise** — delete\n`~/.config/tracelab-mcp/credentials.json` *and* revoke the key in TraceLab\nat `/profile` → API Keys. Then relaunch to mint a fresh one.\n\n**Want to skip the device flow on CI** — set `TRACELAB_API_KEY` (or\n`TRACELAB_TOKEN`) in the environment. Both win over the stored credential\nand skip the interactive flow.\n\n---\n\n## Development\n\nBuild:\n\n```bash\ncd packages/tracelab-mcp\nnpm install\nnpm run build\n```\n\nWatch mode:\n\n```bash\nnpm run dev\n```\n\nTests:\n\n```bash\nnpm test           # watch mode\nnpm run test:run   # one-shot\n```\n\nLint:\n\n```bash\nnpm run lint\n```\n\n`packages/*/dist/` is `.gitignore`d at the repo root; a pre-commit hook\n(`scripts/check_no_mcp_dist.sh`) blocks accidentally-staged build output.\n`prepublishOnly` rebuilds from `src/` before every `npm publish`, so the\npublished tarball never contains stale builds.\n\n---\n\n## License\n\nThe `@aquex/tracelab-mcp` adapter is MIT licensed. See its\n[LICENSE](https://github.com/kneelinghorse/TraceLab/blob/main/packages/tracelab-mcp/LICENSE).\nThis license applies to the adapter package; it does not grant a license to the\nentire TraceLab service.\n\n## Links\n\n- TraceLab — <https://github.com/kneelinghorse/TraceLab>\n- Issue tracker — <https://github.com/kneelinghorse/TraceLab/issues>\n- Changelog — [CHANGELOG.md](./CHANGELOG.md)\n- Model Context Protocol spec — <https://modelcontextprotocol.io>\n\n### Authored scope preview (2.1.2)\n\nMission create/update preserves `context.authored_scope` and structured reference\nseeds (exact `url`, optional `title`). Scope uses `restriction`, `allowed_urls`,\n`allowed_domains`, `min_words`, `max_words`, and `max_sources`. Ordinary references\ndo not restrict sources. Preview returns `authored_scope`, canonical contract ID\nand SHA-256, semantic compiler revision and pinned source revision in both summary\nand full output. It is a structural plan; worker deployment is a separate gate.\nSee the repository's `cmos/contracts/mission-authoring-contract.md` for the complete\nfield map. Explicit save, preview and submit remain separate actions.\n","readmeFilename":"README.md"}