{"_id":"@aidex/mcp-aidex","_rev":"8-44c99567aa21e77d02ff8775f39cc546","name":"@aidex/mcp-aidex","dist-tags":{"latest":"1.2.0"},"versions":{"0.1.0-alpha":{"name":"@aidex/mcp-aidex","version":"0.1.0-alpha","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/mcp-aidex@0.1.0-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"75dedfb7d66f6c95a5dcc1c03e4f857865e87a18","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-0.1.0-alpha.tgz","fileCount":39,"integrity":"sha512-6X0igqkDeEJMVyKEt3Jc+pGXzUTbHf2xC7g3nacVhE6WuOTgzkwuYlrzsK5vfy32lqQLo38Y7bTS5OTcpib71w==","signatures":[{"sig":"MEYCIQCoGk1yuL0uYYZtAQmV3Rxe+V4SiR3wtEPNhBWsLaaNuwIhAPLF4g6XjdiNcIVms4YTNU2UNTKxaH/+epPMe28AMb3l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43373},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/mcp-aidex"},"description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/mcp":"0.1.0-alpha","@aidex/core":"0.1.0-alpha","@aidex/engines":"0.1.0-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-aidex_0.1.0-alpha_1785768591314_0.08750745366976842","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha":{"name":"@aidex/mcp-aidex","version":"0.2.0-alpha","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/mcp-aidex@0.2.0-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"5701fb33ca454ea07ca907a271b951a29f529576","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-0.2.0-alpha.tgz","fileCount":25,"integrity":"sha512-BX+nvMJebWXezyVgjYwEqBLTdI+6edfLPKZIAPizqHRZssVWgnETd5SAtXFuBCt2tUiQQGn8Ttamjm03NtR2eg==","signatures":[{"sig":"MEUCIQDKOTzMQtSakow+VqNaJxWLTsEZgDEMytMCcjNCJRkl9QIgaQNfGj8rvlo2vYr7Q3MIs6pGX2g/1SLYu9Yz74Fhiq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64350},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/mcp-aidex"},"description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/mcp":"0.2.0-alpha","@aidex/core":"0.2.0-alpha","@aidex/engines":"0.2.0-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-aidex_0.2.0-alpha_1785772036255_0.6895944658630848","host":"s3://npm-registry-packages-npm-production"}},"0.2.1-alpha":{"name":"@aidex/mcp-aidex","version":"0.2.1-alpha","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/mcp-aidex@0.2.1-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"22c8e36148a8af0acd963dfb50090e9c4eb2941c","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-0.2.1-alpha.tgz","fileCount":26,"integrity":"sha512-iD1mOiL75MzcqRZFKq/bhHkFU3smXKRbiDazbRXx8/dRfApYTTHqy8ZrHQl0OyDK4h9gDiDFOCHHLiZwErK6RQ==","signatures":[{"sig":"MEUCIQCgEP0t2TgMJTMPpq3gj16n6ckf9dMYZmrfpyuO1WcaYgIgWIv/25jOlP7XlrJ/suBMRoyDSyw86c9wIy9otMeX1x4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81130},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/mcp-aidex"},"description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/mcp":"0.2.1-alpha","@aidex/core":"0.2.1-alpha","@aidex/engines":"0.2.1-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-aidex_0.2.1-alpha_1785778150466_0.05516928192325654","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-alpha":{"name":"@aidex/mcp-aidex","version":"0.3.0-alpha","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/mcp-aidex@0.3.0-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"c8920e58500f9a5573baf1630967762f0f0fb711","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-0.3.0-alpha.tgz","fileCount":9,"integrity":"sha512-RYzoEJ8B3SlFfec6IALM+pF+k8r7sQGf05GwEoxjacWHmD+gI5thGygQR6J/Vh8VWyvGX6oJfUXGmZnyRObSSw==","signatures":[{"sig":"MEYCIQCFXcgJkwbvJ946r4VC8z7LpHikgi+KALOInyfIg1scXQIhAINAFqwv2rpY06Ys0C683cIri6/cRjhwhClmZ1DHhnNe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67733},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/mcp-aidex"},"description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/mcp":"0.3.0-alpha","@aidex/core":"0.3.0-alpha","@aidex/engines":"0.3.0-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-aidex_0.3.0-alpha_1786213598008_0.2577403990916829","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@aidex/mcp-aidex","version":"1.0.0","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/mcp-aidex@1.0.0","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"83ece337f1b20bb89aa683e4848453fba08488d3","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-1.0.0.tgz","fileCount":15,"integrity":"sha512-nWytxhO30C6Lg9ZCK1w8mNGJWmyXDhbIReunHmygOR2/jf5Ul6g4egP3K0P+fUHuQfpdFr/ErwMrybtjoLKx8Q==","signatures":[{"sig":"MEUCIHzYEwMOLCmH8n3hxjH4xsHwTqBKDnTJuFLi8RyMp6i9AiEAnFzMZQsC/iK4dUbtbYtQHneAGoxOcYv1a/o+o67b+3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70673},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/mcp-aidex"},"description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/mcp":"1.0.0","@aidex/core":"1.0.0","@aidex/engines":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-aidex_1.0.0_1786431567671_0.7062611850500746","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aidex/mcp-aidex","version":"1.0.1","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/mcp-aidex@1.0.1","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"f51373928dc0f0394dc9a3072d070930e16e3600","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-1.0.1.tgz","fileCount":15,"integrity":"sha512-44QXkyJPqpNzpzYS1uGtR2N+NLOPdNj8Olfa5O8KsLEdTrQUxcyaCk0+0rIzZglstogujZdt7pjzqvKMlMQdoA==","signatures":[{"sig":"MEUCIQCNscuSnsF4I8H55m3+aRx4z+OhI2G1Zz+OO7ZBI6qLEAIgPbLQmwgZTp3xuvFeoh6TxoizEJw79Leikgt/ATbeK9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70673},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/mcp-aidex"},"description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/mcp":"1.0.1","@aidex/core":"1.0.1","@aidex/engines":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-aidex_1.0.1_1786432206949_0.4083080185660699","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aidex/mcp-aidex","version":"1.1.0","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"author":{"name":"Sudheer Babu","email":"isudheerbabu.dev@gmail.com"},"license":"MIT","_id":"@aidex/mcp-aidex@1.1.0","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"07635efc8b4353db81c3b5b01391bbf60db31ccb","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-1.1.0.tgz","fileCount":26,"integrity":"sha512-W9e2yH4KL2i3cm01wO45jE4K3DLUYOArRQrmtfrEg4KUIDUpk9E8v2QMC/SqqgUknU8U7ANO1JQTKK6/TsFKfA==","signatures":[{"sig":"MEYCIQDQRcupZrU6USUUp/j/RTHwlBbM27/JaKsJ+nawCDSscwIhAP3VXKFcD6Jbd7yallcDDZu5jfqpCmuCIVakyeMlJiNu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81145},"main":"./dist/index.cjs","type":"module","_from":"file:aidex-mcp-aidex-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"_resolved":"/tmp/c55f86716b8aede74de44e91a84d5a24/aidex-mcp-aidex-1.1.0.tgz","_integrity":"sha512-W9e2yH4KL2i3cm01wO45jE4K3DLUYOArRQrmtfrEg4KUIDUpk9E8v2QMC/SqqgUknU8U7ANO1JQTKK6/TsFKfA==","repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/mcp-aidex"},"_npmVersion":"10.9.8","description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@aidex/mcp":"1.1.0","@aidex/core":"1.1.0","@aidex/engines":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-aidex_1.1.0_1787417530892_0.6749811326094888","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aidex/mcp-aidex","version":"1.2.0","description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"license":"MIT","author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","repository":{"type":"git","url":"git+https://github.com/getaidex/aidex.git","directory":"packages/mcp-aidex"},"bugs":{"url":"https://github.com/getaidex/aidex/issues"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"sideEffects":false,"publishConfig":{"access":"public"},"dependencies":{"@aidex/core":"1.2.0","@aidex/engines":"1.2.0","@aidex/mcp":"1.2.0"},"engines":{"node":">=20.19.0","pnpm":">=9"},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_nodeVersion":"24.13.0","_id":"@aidex/mcp-aidex@1.2.0","dist":{"integrity":"sha512-H7UuacadU8xu/zNE8S+U3s4N+URze1bbs6q61/BAhB4rAGt3NiQVK2OYHj29d5Y5VjxE32smLaknaBeTV1/6hw==","shasum":"012c5d12b41006529d91afb5c6b16811bc8c8ca4","tarball":"https://registry.npmjs.org/@aidex/mcp-aidex/-/mcp-aidex-1.2.0.tgz","fileCount":26,"unpackedSize":81145,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGEXf8KfquWoCF85lGYipRQ4j0FOnWES96Zfd+L1SC0UAiA0KKpuw6fo/BRS8PFxrPMT684T4qSBTyr1i6Lwsv1CYQ=="}]},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"directories":{},"maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-aidex_1.2.0_1787491717720_0.6511571183266338"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-03T14:49:51.084Z","modified":"2026-08-23T13:28:37.996Z","0.1.0-alpha":"2026-08-03T14:49:51.452Z","0.2.0-alpha":"2026-08-03T15:47:16.420Z","0.2.1-alpha":"2026-08-03T17:29:10.607Z","0.3.0-alpha":"2026-08-08T18:26:38.176Z","1.0.0":"2026-08-11T06:59:27.805Z","1.0.1":"2026-08-11T07:10:07.137Z","1.1.0":"2026-08-22T16:52:11.044Z","1.2.0":"2026-08-23T13:28:37.852Z"},"bugs":{"url":"https://github.com/getaidex/aidex/issues"},"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","homepage":"https://github.com/getaidex/aidex/tree/main/packages/mcp-aidex#readme","keywords":["ai","mcp","model-context-protocol","adapter","engine"],"repository":{"type":"git","url":"git+https://github.com/getaidex/aidex.git","directory":"packages/mcp-aidex"},"description":"Aidex MCP Aidex — the adapter layer between Aidex Engines and @aidex/mcp Tools. Any Engine becomes an MCP Tool with zero feature-pack-specific code. No protocol implementation, no providers, no AI execution.","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"readme":"# @aidex/mcp-aidex\n\n## Installation\n\n```sh\npnpm add @aidex/mcp-aidex\n```\n\n```sh\nnpm install @aidex/mcp-aidex\n```\n\nThe adapter layer between **Aidex Engines** (`@aidex/engines`) and\n**MCP Tools** (`@aidex/mcp`). Any `Engine`, from any Feature Pack, becomes\na real, executable MCP Tool with zero feature-pack-specific code.\n\n## What this is\n\n`@aidex/mcp` defines what an MCP Tool *is* (a plain `{name, description?,\ninputSchema?, execute}` contract) but ships none — it deliberately knows\nnothing about `@aidex/engines`. `@aidex/mcp-aidex` is the bridge: given any\nobject satisfying the `Engine` interface, it builds a real `MCPTool`\nwhose `execute()` calls that engine's own `execute()`, and it manages\nregistering/unregistering those tools into an existing `MCPServer`.\n\nThree classes, layered:\n\n- **`EngineToMCPToolAdapter`** — converts *one* `Engine` into *one*\n  `MCPTool`. Pure mapping plus the execution wiring; owns no\n  registration state.\n- **`MCPAidexAdapter`** — the stateful registration lifecycle for\n  individually-chosen engines. Wraps an existing `MCPServer`, uses one\n  internal `EngineToMCPToolAdapter` to do every actual conversion, and\n  keeps its own bookkeeping in sync with `mcpServer.tools`.\n- **`EngineRegistryToMCPAdapter`** (Phase 3) — bulk-exposes *every*\n  engine in an existing `@aidex/engines` `EngineRegistry`, automatically.\n  Wraps one internal `MCPAidexAdapter`; owns no registration logic of its\n  own.\n\n## What this is not\n\n- **No protocol implementation.** No JSON-RPC, no message parsing, no\n  transport — that's entirely `@aidex/mcp`'s job. This package only ever\n  calls `mcpServer.tools.register()`/`.unregister()`, never touches\n  `MCPServer.start()`/`.stop()` or anything transport-related.\n- **No providers, no AI execution.** This package never constructs a\n  `Provider` and never calls one directly — `Engine.execute()` does that,\n  the same way it always has. The `ExecutionContext` (provider included)\n  is entirely the caller's, supplied once at construction and reused\n  as-is for every execution.\n- **No workflows.** `@aidex/workflow` is not a dependency.\n- **No feature-pack-specific code.** Nothing here imports or references\n  `DocumentEngine`, `ContentEngine`, `DesignEngine`, `MediaEngine`,\n  `MarketingEngine`, or any other concrete Feature Pack class. Every\n  operation uses only the generic `Engine` contract's four fields\n  (`id`/`name`/`description`/`version`) and one method (`execute`).\n- **No `@aidex/catalog` dependency.** Metadata mapping reads `Engine.id`/\n  `.description`/`.version` directly off the live `Engine` object passed\n  in — the most direct, driftless source there is. Going through a\n  separately-registered `EngineMetadata` entry instead would risk exactly\n  the kind of drift `@aidex/document`'s/`@aidex/content`'s own\n  `metadata.test.ts` files guard against; reading the real object needs\n  no such guard.\n\n## Public API\n\n```ts\nclass EngineToMCPToolAdapter {\n  constructor(config: EngineToMCPToolAdapterConfig);\n  adapt(engine: Engine): MCPTool;\n}\n\nclass MCPAidexAdapter {\n  constructor(config: MCPAidexAdapterConfig);\n  registerEngine(engine: Engine): void;\n  registerEngines(engines: readonly Engine[]): void;\n  unregisterEngine(engineId: string): boolean;\n  hasEngine(engineId: string): boolean;\n  clear(): void;\n  listRegisteredEngines(): Engine[];\n}\n\ninterface EngineToMCPToolAdapterConfig {\n  context: ExecutionContext; // shared, reused for every execution\n}\n\ninterface MCPAidexAdapterConfig {\n  mcpServer: MCPServer;\n  context: ExecutionContext;\n}\n\nclass EngineRegistryToMCPAdapter {\n  constructor(config: EngineRegistryToMCPAdapterConfig);\n  registerAll(): void;\n  unregisterAll(): void;\n  listRegisteredEngines(): Engine[];\n}\n\ninterface EngineRegistryToMCPAdapterConfig {\n  engineRegistry: EngineRegistry; // @aidex/engines\n  mcpServer: MCPServer;\n  context: ExecutionContext;\n}\n```\n\n## Metadata mapping\n\n| `MCPTool` field | Reused from |\n| --- | --- |\n| `name` | `Engine.id` |\n| `description` | `Engine.description` |\n| `inputSchema` | *(none — `Engine` has no JSON Schema equivalent)* |\n\nNothing is duplicated: `EngineToMCPToolAdapter.adapt()` reads `.id`/\n`.description` straight off the `Engine` object every time it's called,\nnever caching a separate copy. `Engine.version` has no field on\n`MCPTool` (the MCP tool schema doesn't define one) — it stays reachable\nthrough `MCPAidexAdapter.listRegisteredEngines()`, which returns the\noriginal `Engine` objects themselves.\n\n## Execution flow\n\n```\nMCP client calls a tool\n        ↓\nMCPToolRegistry.call(name, input)      — @aidex/mcp, unchanged\n        ↓\nthe adapted MCPTool's execute(input)   — built by EngineToMCPToolAdapter\n        ↓\nexecuteAdaptedEngine(engine, input, context)\n        ↓\ncontext = { ...baseContext, request: { strategy: engine.id, input } }\n        ↓\nengine.execute(context)                — the real Engine contract, reused as-is\n        ↓\nsuccess → { content: [{ type: 'text', text: JSON.stringify(result) }] }\nfailure → { content: [{ type: 'text', text: error.message }], isError: true }\n```\n\n`input` reaches `context.request.input` completely unchanged — generic\nobject mapping, no feature-pack-specific conversion of any kind. An\nengine's `Result` is arbitrary, Feature-Pack-defined JSON; the one\nrepresentation every possible result can carry without this package\nknowing its shape is its JSON encoding in a single text content block.\n\n**Errors are propagated, never swallowed, and never leak internals.** An\nengine that throws is reported through the returned `MCPToolResult`\nitself (`isError: true`, the thrown error's own `.message`) rather than\nre-thrown — the caller still sees exactly why it failed, just never a\nstack trace.\n\n## Adapter lifecycle\n\n```ts\nimport { MCPAidexAdapter } from '@aidex/mcp-aidex';\nimport { MCPServer, StdioTransport } from '@aidex/mcp';\n\nconst mcpServer = new MCPServer({ name: 'my-server', version: '1.0.0', transport: new StdioTransport() });\nconst adapter = new MCPAidexAdapter({ mcpServer, context: { config: { provider }, provider } });\n\nadapter.registerEngine(new DocumentSummarizeEngine());\nadapter.registerEngines([new ContentRewriteEngine(), new DesignPaletteEngine()]);\n\nadapter.hasEngine('document.summarize'); // true\nadapter.listRegisteredEngines();          // the real Engine instances\nadapter.unregisterEngine('document.summarize');\nadapter.clear();                          // removes everything this adapter registered\n```\n\n`registerEngine()` never executes the engine — it only builds and\nregisters a tool object. `mcpServer.tools` and this adapter's own\nbookkeeping are kept synchronized by construction: `registerEngine()`\nregisters into `mcpServer.tools` *before* recording the engine locally,\nso a `DuplicateRegistrationError` (thrown by `mcpServer.tools.register()`\n— `@aidex/core`'s class, the same one every registry in this platform\nthrows) never leaves this adapter's own state out of sync with the\nserver's. `unregisterEngine()`/`hasEngine()` return booleans rather than\nthrowing, matching every registry (`EngineRegistry`, `MCPToolRegistry`,\n...) in this platform.\n\n## Automatic engine exposure (Phase 3)\n\n`EngineRegistryToMCPAdapter` bulk-exposes every engine already in an\nexisting `EngineRegistry` — no per-engine wiring needed:\n\n```ts\nimport { EngineRegistryToMCPAdapter } from '@aidex/mcp-aidex';\nimport { EngineRegistry } from '@aidex/engines';\nimport { MCPServer, StdioTransport } from '@aidex/mcp';\n\nconst engineRegistry = new EngineRegistry();\nengineRegistry.register(new DocumentSummarizeEngine());\nengineRegistry.register(new ContentRewriteEngine());\n// ... every engine an application has, from any Feature Pack\n\nconst mcpServer = new MCPServer({ name: 'my-server', version: '1.0.0', transport: new StdioTransport() });\nconst autoAdapter = new EngineRegistryToMCPAdapter({\n  engineRegistry,\n  mcpServer,\n  context: { config: { provider }, provider },\n});\n\nautoAdapter.registerAll(); // every engine in engineRegistry is now an MCP tool\n\nengineRegistry.register(new DesignPaletteEngine()); // registered later\nautoAdapter.registerAll();                          // idempotent — only the new one gets added\n\nautoAdapter.unregisterAll(); // removes everything this adapter registered, cleanly\n```\n\n**Targets an `EngineRegistry`, not an \"Aidex instance.\"** `@aidex/core`'s\n`Aidex` class holds a `StrategyRegistry` and a `PluginRegistry` — it has\nno knowledge of `Engine`/`EngineRegistry` at all, and never has anywhere\nin this platform. `EngineRegistry` (`@aidex/engines`) is the real,\nstandalone object that actually holds a collection of engines,\nconstructed independently the same way every Feature Pack's own tests\nalready do. `EngineRegistryToMCPAdapter` adapts that real object.\n\n**`registerAll()` is idempotent, not one-shot.** It skips any engine id\nalready registered *through this adapter* (checked via\n`MCPAidexAdapter.hasEngine()`, not by catching a thrown error) — calling\nit again after more engines were added to the `EngineRegistry` only\nregisters what's new. A collision with a tool registered by *anything\nelse* directly on `mcpServer.tools` is a genuine naming conflict, not a\nduplicate this adapter already knows about, and still throws\n`@aidex/core`'s `DuplicateRegistrationError` — the same fail-fast\nbehavior `MCPAidexAdapter.registerEngines()` has, so a real conflict is\nnever silently dropped.\n\n**Owns zero registration logic.** Every mutating method is a thin loop\naround one internal `MCPAidexAdapter`'s `registerEngine()`/`hasEngine()`/\n`clear()` — the exact Engine→MCPTool mapping Phase 2 established, reused\ncompletely unchanged.\n\n## Dependencies\n\n`@aidex/core` (`ExecutionContext`, `DuplicateRegistrationError` — reused,\nnot re-exported, the same convention every registry package in this repo\nfollows), `@aidex/engines` (the `Engine` contract and `EngineRegistry`),\n`@aidex/mcp` (`MCPTool`, `MCPToolResult`, `MCPServer`). No `@aidex/catalog`,\nno `@aidex/providers`, no `@aidex/workflow`, no `@aidex/sdk`, no external MCP\nlibrary, no Feature Pack.\n\n## Design decisions\n\n**Three classes, not one.** `EngineToMCPToolAdapter` is a pure per-engine\nconverter; `MCPAidexAdapter` is the stateful registration manager wrapping\nan `MCPServer`; `EngineRegistryToMCPAdapter` (Phase 3) is the bulk/\nautomatic layer on top of that. Splitting them means the conversion logic (metadata\nmapping, execution wiring) is unit-testable with zero `MCPServer`\ninvolved, and the registration lifecycle is testable against a real\n`MCPServer` without re-deriving the mapping rules.\n\n**`InvalidEngineError` is the one new error type this package defines.**\nIt's thrown only when `Engine.id` isn't a non-empty string — the one\nfield that must be usable as both `MCPTool.name` and a registry key.\nEvery other failure mode reuses what already exists: duplicate\nregistration throws `@aidex/core`'s `DuplicateRegistrationError` (not a\nnew class); engine execution failures are never thrown at all — see\n\"Execution flow\" above.\n\n**`executeAdaptedEngine` is its own function, not inlined into\n`EngineToMCPToolAdapter.adapt()`.** The same reason every parse/build\nhelper elsewhere in this platform is factored out this way: it's\nindependently unit-testable, and `adapt()` stays a small, obviously-pure\nmapping function.\n\n**Fail-fast, not partial-silent, on `registerEngines()`.** If one engine\nin the list is a duplicate, registration stops there and the error\npropagates — engines registered before it stay registered, matching\n`@aidex/workflow`'s own \"a step throws, execution stops immediately, no\nlater step runs\" philosophy rather than silently skipping the bad one.\n","readmeFilename":""}