{"_id":"@2ndbrainlabs-ai/synapse-cli","_rev":"8-1a2682f5fb24d4505b9246f588b3dd7f","name":"@2ndbrainlabs-ai/synapse-cli","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.0","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"MIT","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.0","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"bin":{"synapse":"dist/index.js"},"dist":{"shasum":"4b92e39fbc825ec7234acbda6cc1d8dd8160b23d","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.0.tgz","fileCount":76,"integrity":"sha512-uo7E/6lbl4V8IZKNJpc5R620xZcx2OzROukY1Vo9tyfo1mP2nHB64sGcYFioBOQFOdLiRikTabK1qcEUtVIIgg==","signatures":[{"sig":"MEYCIQDh1LXvIZOfNFT/x8l9urJZoCH3hFQsbbfRWC/NUK+irwIhAOsNgN7B++SqokBUhU8B7HVc90C0ipuQLhau2CNqyuHc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":591251},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"b2e8e9623cda8c15fd9cf09f5903e97792c1a1bc","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/","test":"vitest run","build":"tsup","start":"node dist/index.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"_npmVersion":"11.12.1","description":"Synapse CLI - Agentic MCP Server Generator","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.0","chalk":"^5.3.0","dotenv":"^16.4.0","fernet":"^0.4.0","commander":"^12.0.0","cli-table3":"^0.6.0","tree-sitter":"^0.22.0","@grpc/grpc-js":"^1.10.0","@lancedb/lancedb":"^0.14.0","@inquirer/prompts":"^7.0.0","@grpc/proto-loader":"^0.7.0","tree-sitter-python":"^0.23.0","@xenova/transformers":"^2.17.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synapse-cli_0.1.0_1779098272854_0.9273095363975419","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.1","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"MIT","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.1","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"bin":{"synapse":"dist/index.js"},"dist":{"shasum":"5813b541239e86c28c2b1fa587ece4ad27346d20","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.1.tgz","fileCount":76,"integrity":"sha512-/XKcyayJA0YALig9DIR2Lpdfix4u7nMItWhXkvAuxvhs+1tK5JZauLi/rxN9+Ch/FmqCmeSeCM7KQECjXEfLDg==","signatures":[{"sig":"MEUCIFU2HbI8bhk8WA5PtfsI1Xhkpn2fcigdnQuzYTinAcjsAiEAo594NbcSBTPObmv9OeX5ujlf3x/Q2/B9BPDA5tF996o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":591251},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"51d0182b082017ea37adbd249a2ee28450e8e066","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/","test":"vitest run","build":"tsup","start":"node dist/index.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"_npmVersion":"11.12.1","description":"Synapse CLI - Agentic MCP Server Generator","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.0","chalk":"^5.3.0","dotenv":"^16.4.0","fernet":"^0.4.0","commander":"^12.0.0","cli-table3":"^0.6.0","tree-sitter":"^0.22.0","@grpc/grpc-js":"^1.10.0","@lancedb/lancedb":"^0.14.0","@inquirer/prompts":"^7.0.0","@grpc/proto-loader":"^0.7.0","tree-sitter-python":"^0.23.0","@xenova/transformers":"^2.17.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synapse-cli_0.1.1_1779099745349_0.8874971896750445","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.2","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"MIT","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.2","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"bin":{"synapse":"dist/index.js"},"dist":{"shasum":"42cc1a311f6f82500a2e487f56e8ffce137803ba","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.2.tgz","fileCount":77,"integrity":"sha512-mwp198m85LgYOezvFnufUxDdsa5c3mvxrTNu94DSh2P8Lqg+p1clQ9pRngiAIB+2Cnn6fFW/mUa/DA98ovM30A==","signatures":[{"sig":"MEUCIDHpneGbcf6IK485uQGGr5Or+wPquDtUvMie4Vv/NDbxAiEA8YDGvUhorIUkqb+bpndw94/FUuWwEinRUtB3370N+7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":591430},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"51d0182b082017ea37adbd249a2ee28450e8e066","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/","test":"vitest run","build":"tsup","start":"node dist/index.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"_npmVersion":"11.12.1","description":"Synapse CLI - Agentic MCP Server Generator","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.0","chalk":"^5.3.0","dotenv":"^16.4.0","fernet":"^0.4.0","commander":"^12.0.0","cli-table3":"^0.6.0","tree-sitter":"^0.22.0","@grpc/grpc-js":"^1.10.0","@lancedb/lancedb":"^0.14.0","@inquirer/prompts":"^7.0.0","@grpc/proto-loader":"^0.7.0","tree-sitter-python":"^0.23.0","@xenova/transformers":"^2.17.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synapse-cli_0.1.2_1779100189855_0.931164799592562","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.3","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"MIT","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.3","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"bin":{"synapse":"dist/index.js"},"dist":{"shasum":"1eaedc92015d1609732055e8edab8476f07893d8","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.3.tgz","fileCount":89,"integrity":"sha512-jXgFxIlFOJMEd18fhpu8ojN2ChIh7pE8JJvmbkICfTP4S900bKkecKy69WLaGG6li9z013EMJh/KXJs/8tSP0w==","signatures":[{"sig":"MEUCIQDtR/Ao13AQcao7v75fsye84LRhyfPh80dJfKNVmsW+ugIgKE7i1SwLPRm3k55s9crAiIbQeBEB/yr6g0RoKRXYrtI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":941873},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"635da709b29de7079756994704e0f0c5ffdc2582","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/","test":"vitest run","build":"tsup","start":"node dist/index.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"_npmVersion":"11.12.1","description":"Synapse CLI - Agentic MCP Server Generator","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.0","chalk":"^5.3.0","dotenv":"^16.4.0","fernet":"^0.4.0","commander":"^12.0.0","cli-table3":"^0.6.0","tree-sitter":"^0.22.0","@grpc/grpc-js":"^1.10.0","@inquirer/prompts":"^7.0.0","@grpc/proto-loader":"^0.7.0","tree-sitter-python":"^0.23.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synapse-cli_0.1.3_1785161704681_0.6999703438815428","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.4","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"Apache-2.0","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.4","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"bin":{"synapse":"dist/index.js"},"dist":{"shasum":"2177a91efe8ec84da653f09d1bc0019a8f21633c","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.4.tgz","fileCount":108,"integrity":"sha512-RteXWnr+UKjC1zT4r1iDOX8EwM3AyjBKQc0YpVFxA4xtdQzio94Z4UqFmLLrUcK07qXkxQWcxwRwADmxv77buA==","signatures":[{"sig":"MEQCIF+6TEL6FlTX4T7q6SWFu8m8f88xD4Ab5nx6lvoK34MVAiA2y1Fp5Y/MHSt/zCBtr8gJdkwuRt05YZ2g6YMjk7952Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1164489},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"197b1eb1175cab8746b147b0d545787f40a6876f","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/","test":"vitest run","build":"tsup","start":"node dist/index.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"_npmVersion":"11.12.1","description":"Synapse CLI - Agentic MCP Server Generator","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.0","zod":"^3.23.0","chalk":"^5.3.0","dotenv":"^16.4.0","fernet":"^0.4.0","commander":"^12.0.0","cli-table3":"^0.6.0","tree-sitter":"^0.22.0","@grpc/grpc-js":"^1.10.0","@anthropic-ai/sdk":"^0.32.0","@inquirer/prompts":"^7.0.0","@grpc/proto-loader":"^0.7.0","tree-sitter-python":"^0.23.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synapse-cli_0.1.4_1786221366143_0.971879654700524","host":"s3://npm-registry-packages-npm-production"}},"0.1.4-hotfix-1":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.4-hotfix-1","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"Apache-2.0","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.4-hotfix-1","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"bin":{"synapse":"dist/index.js"},"dist":{"shasum":"393a0aa812de059f5ff3dc370091b2fbb5a1a6b2","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.4-hotfix-1.tgz","fileCount":108,"integrity":"sha512-eyyHXnPMw4ImZ60ooPO+NMNd+FlCrk2IY1VUl+mf6Xq1XB9gh2Sc/Oa0IJsLiNNRYJQjGg6L1zRt8yAXTTd3CA==","signatures":[{"sig":"MEYCIQDMOuz91oFLx2vX5r3MiOMAX72bcAI7Vjd/Qxa0YIYZYAIhAKsy5wlCeJjAF34KlQKYz7mssxa/5fQlVnE5iEfWnNqb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1331954},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"289adc3ec5ea5f518156eb597c6db51af6fe282d","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/","test":"vitest run","build":"tsup","start":"node dist/index.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"_npmVersion":"11.12.1","description":"Agentic MCP server generator — the first piece of Synapse's Enterprise Context Engine","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.0","zod":"^3.23.0","chalk":"^5.3.0","dotenv":"^16.4.0","fernet":"^0.4.0","commander":"^12.0.0","cli-table3":"^0.6.0","tree-sitter":"^0.22.0","@grpc/grpc-js":"^1.10.0","tree-sitter-go":"^0.23.4","tree-sitter-java":"^0.23.5","tree-sitter-rust":"^0.23.3","@anthropic-ai/sdk":"^0.32.0","@inquirer/prompts":"^7.0.0","@grpc/proto-loader":"^0.7.0","tree-sitter-python":"^0.23.0","tree-sitter-c-sharp":"^0.23.1","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synapse-cli_0.1.4-hotfix-1_1787239149036_0.8129931335156817","host":"s3://npm-registry-packages-npm-production"}},"0.1.4-re-2":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.4-re-2","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"Apache-2.0","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.4-re-2","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"bin":{"synapse":"dist/index.js"},"dist":{"shasum":"fe4fa227e9e6f9e9ef52a07d1cef80d96fabaf6b","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.4-re-2.tgz","fileCount":108,"integrity":"sha512-8Qc/XpTHS4CN8eoYkn/k9x6vzgkaxj05LZ9fO8OnPizDQ/s3tcKCKmz4CaGq3Pwvf2F7Rvzn5bfYhYCK2Ee4/w==","signatures":[{"sig":"MEYCIQCRTbzOqdoRBTSV+ouGNqebNFH7S//4mTnv7Yeo67sE1AIhAJYr0TZxWNatMwnFb8DIdEtNWm/7OjbGKgiKWKEAnhB/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1352936},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"d1dcd92e36c872aafff31bfeea9698605d825efc","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/","test":"vitest run","build":"tsup","start":"node dist/index.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"_npmVersion":"11.12.1","description":"Agentic MCP server generator — the first piece of Synapse's Enterprise Context Engine","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.0","zod":"^3.23.0","chalk":"^5.3.0","dotenv":"^16.4.0","fernet":"^0.4.0","commander":"^12.0.0","cli-table3":"^0.6.0","tree-sitter":"^0.22.0","@grpc/grpc-js":"^1.10.0","tree-sitter-go":"^0.23.4","tree-sitter-java":"^0.23.5","tree-sitter-rust":"^0.23.3","@anthropic-ai/sdk":"^0.32.0","@inquirer/prompts":"^7.0.0","@grpc/proto-loader":"^0.7.0","tree-sitter-python":"^0.23.0","tree-sitter-c-sharp":"^0.23.1","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synapse-cli_0.1.4-re-2_1787589910042_0.2654277224700248","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@2ndbrainlabs-ai/synapse-cli","version":"0.1.5","description":"Agentic MCP server generator — the first piece of Synapse's Enterprise Context Engine","homepage":"https://synaps3.ai","repository":{"type":"git","url":"git+https://github.com/2ndbrainlabs-ai/synapse-cli.git"},"bugs":{"url":"https://github.com/2ndbrainlabs-ai/synapse-cli/issues"},"type":"module","bin":{"synapse":"dist/index.js"},"main":"dist/index.js","engines":{"node":">=18"},"scripts":{"build":"tsup","dev":"tsx src/index.ts","start":"node dist/index.js","test":"vitest run","test:watch":"vitest","lint":"eslint src/ tests/","typecheck":"tsc --noEmit","prepublishOnly":"npm run build","typecheck:tests":"tsc -p tsconfig.test.json --noEmit","ci":"npm run lint && npm run typecheck && npm run typecheck:tests && npm test && npm run build"},"dependencies":{"@anthropic-ai/sdk":"^0.32.0","@grpc/grpc-js":"^1.10.0","@grpc/proto-loader":"^0.7.0","@inquirer/prompts":"^7.0.0","chalk":"^5.3.0","cli-table3":"^0.6.0","commander":"^12.0.0","dotenv":"^16.4.0","ora":"^8.0.0","tree-sitter":"^0.22.0","tree-sitter-c-sharp":"^0.23.1","tree-sitter-go":"^0.23.4","tree-sitter-java":"^0.23.5","tree-sitter-python":"^0.23.0","tree-sitter-rust":"^0.23.3","tree-sitter-typescript":"^0.23.2","zod":"^3.23.0"},"devDependencies":{"@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","eslint":"^10.0.0","tsup":"^8.0.0","tsx":"^4.0.0","typescript":"^5.5.0","vitest":"^3.2.7"},"keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"license":"Apache-2.0","gitHead":"5e9566c9741f82b09b446322794977fb3272c248","_id":"@2ndbrainlabs-ai/synapse-cli@0.1.5","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-yje/pxpS5LaAAUEkhgH+QWu6a+sbyG9Ibcq7Gg9YbxUA+BVIFKQLW+4SEbLQx8U9HE5yQFwfeyVhlLGVNg0xZg==","shasum":"efe5e28a59ff48e8a287a93408a89fa6d7de38d9","tarball":"https://registry.npmjs.org/@2ndbrainlabs-ai/synapse-cli/-/synapse-cli-0.1.5.tgz","fileCount":117,"unpackedSize":1518256,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDK81UL0fkuU+shDDClscvRFt7xcI4yA2gGsxIFlpan/QIgf/Us3XbzjEMtq17jkR4hUuHmopRyiqCYjDxIQK6Qic0="}]},"_npmUser":{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"},"directories":{},"maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/synapse-cli_0.1.5_1788460468397_0.8881482835126262"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-18T09:57:52.701Z","modified":"2026-09-03T18:34:28.740Z","0.1.0":"2026-05-18T09:57:53.030Z","0.1.1":"2026-05-18T10:22:25.526Z","0.1.2":"2026-05-18T10:29:50.037Z","0.1.3":"2026-07-27T14:15:04.871Z","0.1.4":"2026-08-08T20:36:06.392Z","0.1.4-hotfix-1":"2026-08-20T15:19:09.200Z","0.1.4-re-2":"2026-08-24T16:45:10.190Z","0.1.5":"2026-09-03T18:34:28.552Z"},"license":"Apache-2.0","keywords":["mcp","model-context-protocol","ai","cli","code-generation","synapse"],"description":"Agentic MCP server generator — the first piece of Synapse's Enterprise Context Engine","maintainers":[{"name":"2ndbrainlabs-product","email":"product@2ndbrainlabs.ai"}],"readme":"<div align=\"center\">\n\n<img src=\"https://unpkg.com/@2ndbrainlabs-ai/synapse-cli/docs/logo.png\" alt=\"Synapse\" width=\"360\" />\n\n### Enterprise Context Engine\n\n**Today: MCP Servers. Tomorrow: Every Context Surface Your Stack Needs.**\n\nTurn any codebase into a production-ready [Model Context Protocol](https://modelcontextprotocol.io) server — from your terminal, in seconds.\n\n[Homepage](https://synaps3.ai) · [Docs](https://synaps3.ai/docs) · [Report an issue](https://github.com/2ndbrainlabs-ai/synapse-cli/issues) · [Discussions](https://github.com/2ndbrainlabs-ai/synapse-cli/discussions)\n\n[![npm version](https://img.shields.io/npm/v/@2ndbrainlabs-ai/synapse-cli.svg?logo=npm&color=D97757)](https://www.npmjs.com/package/@2ndbrainlabs-ai/synapse-cli)\n[![node](https://img.shields.io/node/v/@2ndbrainlabs-ai/synapse-cli.svg?logo=node.js)](https://nodejs.org)\n[![license](https://img.shields.io/badge/License-Apache_2.0-green.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![downloads](https://img.shields.io/npm/dm/@2ndbrainlabs-ai/synapse-cli.svg?color=blue)](https://www.npmjs.com/package/@2ndbrainlabs-ai/synapse-cli)\n\n</div>\n\n---\n\n## What is Synapse?\n\nSynapse is building the context layer enterprises need to make their internal systems agent-ready. Today, we're open-sourcing the first piece of that vision: an agentic MCP server generator that analyzes existing codebases and generates production-ready MCP servers.\n\nSynapse is a CLI that reads your codebase and generates a runnable MCP server — the tool schemas, argument marshalling, and boilerplate are all handled for you. Point it at a project, describe what you want exposed, and drop the resulting server into Claude Desktop, Cursor, or any MCP-compatible client.\n\nThe CLI does source exploration **client-side** — nothing is uploaded. Generation runs on the Synapse backend by default, so model routing, retries, and quota stay centrally managed — or entirely on your own model with `--local`, using Anthropic, OpenAI, Groq, xAI, OpenRouter, Ollama, or your own inference endpoint. See [Run locally with your own model](#run-locally-with-your-own-model).\n\n## Install\n\n```bash\nnpm install -g @2ndbrainlabs-ai/synapse-cli\n```\n\nRequires **Node.js 18+**. Verify with `synapse --version`.\n\n## Quick start\n\n```bash\ncd my-project\nsynapse init                    # one-time: paste your API key\nsynapse analyze                 # scans code, writes .synapse/schema.json\nsynapse build                   # discovers use cases, prompts you to pick\n```\n\nThe generated server lands at `./mcp_server.py`. Copy the printed JSON snippet into your MCP client config and you're done.\n\nPrefer to describe it yourself:\n\n```bash\nsynapse build --query \"Expose user auth and profile lookup as MCP tools\"\n```\n\n## Run locally with your own model\n\nSkip the hosted Synapse service entirely — codegen runs in-process using **your** inference provider. No quota, no code upload, no signup required.\n\n```bash\nexport ANTHROPIC_API_KEY=sk-ant-…\n\ncd my-project\nsynapse build --local           # generates locally on your own key\n```\n\n`--local` is a **per-invocation** flag — no project config pins a repo to local mode, so switching back is just dropping the flag. `synapse init` is not required for a local build.\n\nLocally-generated servers don't count against any quota; analyze runs are unbounded. Anonymous usage telemetry (no code, no prompts — just event names + counts) still flows to `api.synaps3.ai`; opt out with `SYNAPSE_TELEMETRY=0`.\n\n**Local-mode limits:**\n- Python target only (TypeScript target follows).\n- Auto flow (`--auto`) requires the hosted service. Use `--custom` (the default in local mode).\n- Provider selection applies to local mode **only** — hosted builds run on the Synapse service, and `synapse model` does not change them.\n\n### Choosing a provider\n\nLocal mode is not Anthropic-only. `synapse model` picks the provider and models it runs on:\n\n```bash\nsynapse model                   # what a local build would use right now\nsynapse model list              # every provider, its default model, key status\nsynapse model set groq          # switch (keeps that provider's defaults)\nsynapse model reset             # back to Anthropic\n```\n\n| Provider | `set` id | Endpoint | API style |\n|---|---|---|---|\n| Anthropic (default) | `anthropic` | Messages API | native |\n| OpenAI | `openai` | `https://api.openai.com/v1` | chat completions |\n| Groq | `groq` | `https://api.groq.com/openai/v1` | chat completions |\n| xAI (Grok) | `grok` | `https://api.x.ai/v1` | chat completions |\n| OpenRouter | `openrouter` | `https://openrouter.ai/api/v1` | chat completions |\n| Ollama | `ollama` | `http://localhost:11434/v1` | chat completions |\n| Your own endpoint | `custom` | you supply | chat completions |\n\nPin models per stage — the pipeline uses a cheap model for high-volume triage and a strong one for codegen, so you can mix:\n\n```bash\nsynapse model set groq --generate \"openai/gpt-oss-120b\" --triage \"llama-3.1-8b-instant\"\nsynapse model set openai --model gpt-5        # one --model pins every stage\n```\n\nModel ids are **not validated** against a built-in list — provider catalogues change often (Groq retired the Kimi and Llama-4-Scout ids during 2026; xAI redirects whole `grok-3` / `grok-4-fast` families), so a hardcoded allowlist would reject valid models and need a CLI release to fix. Any id your provider accepts works. If an id is wrong, the provider says so.\n\n## Providing your API key\n\nSynapse does not sniff for keys. You choose the provider; the provider's spec declares which environment variable holds its key. There are three ways to supply one, checked in this order:\n\n**1. Environment variable — the default, and the recommended path.**\n\n| Provider | Env var(s), in order | Required? |\n|---|---|---|\n| `anthropic` | `ANTHROPIC_API_KEY` | yes |\n| `openai` | `OPENAI_API_KEY` | yes |\n| `groq` | `GROQ_API_KEY` | yes |\n| `grok` | `XAI_API_KEY`, then `GROK_API_KEY` | yes |\n| `openrouter` | `OPENROUTER_API_KEY` | yes |\n| `ollama` | `OLLAMA_API_KEY` | **no** |\n| `custom` | `SYNAPSE_LLM_API_KEY` | no |\n\nTwo conveniences:\n\n- **xAI accepts either name** — both `XAI_API_KEY` and `GROK_API_KEY` are in circulation, so both are read (`XAI_API_KEY` wins).\n- **`SYNAPSE_LLM_API_KEY` is a universal fallback** for *every* provider, tried after the provider-specific var. Useful in CI, where one secret can serve whichever provider is configured.\n\nOllama needs no key, and Synapse omits the `Authorization` header entirely when there isn't one — so a bare local Ollama works with no credentials at all.\n\n**2. A flag, for a single run** — nothing is written anywhere:\n\n```bash\nsynapse build --local --llm-api-key sk-… --provider openai\n```\n\n**3. Stored, encrypted — explicit opt-in** (see [Where keys are stored](#where-keys-are-stored)):\n\n```bash\nsynapse model set groq --save-key gsk_…\n```\n\n### Copy-paste quickstarts\n\n```bash\n# Anthropic (default — nothing to configure)\nexport ANTHROPIC_API_KEY=sk-ant-…\nsynapse build --local\n\n# Groq\nexport GROQ_API_KEY=gsk_…\nsynapse model set groq\nsynapse build --local\n\n# OpenAI\nexport OPENAI_API_KEY=sk-…\nsynapse model set openai\nsynapse build --local\n\n# xAI (Grok)\nexport XAI_API_KEY=xai-…\nsynapse model set grok\nsynapse build --local\n\n# OpenRouter\nexport OPENROUTER_API_KEY=sk-or-…\nsynapse model set openrouter\nsynapse build --local\n\n# Ollama — no key needed\nollama pull qwen3-coder:30b\nsynapse model set ollama\nsynapse build --local\n```\n\n### Checking that a key was picked up\n\n`synapse model` reports the resolved key **and where it came from**, so a key that isn't being read is visible before a build rather than after:\n\n```\n  Provider        Groq (project)\n  API key         gsk_t*************** (env GROQ_API_KEY)\n```\n\n`keySource` is one of `flag`, `env <VAR>`, `stored`, or `(not set)`. If a required key is missing, Synapse names the variable to set and links the provider's key page instead of failing mid-build.\n\n## Provider differences Synapse handles for you\n\nThe OpenAI chat-completions contract is not implemented identically everywhere. Synapse carries four capability flags per provider and adjusts the request; you don't configure any of this for the built-in providers.\n\n| Provider | Divergence | What Synapse does |\n|---|---|---|\n| **Ollama** | Documents `tool_choice` as **unsupported** | Sends `response_format: {\"type\":\"json_object\"}` and inlines the JSON Schema into the system prompt instead of forcing a tool call |\n| **OpenAI** | `max_tokens` is deprecated and *rejected* by reasoning models | Sends `max_completion_tokens` — accepted by their non-reasoning models too, so it is safe for both |\n| **OpenAI** | Reasoning models (gpt-5, o-series) reject `temperature` | Omits the field rather than guessing per model |\n| **Groq** | `temperature: 0` is silently converted to `1e-8` | Nothing needed — handled server-side |\n| **OpenRouter** | Wants attribution headers | Sends `HTTP-Referer` and `X-Title` automatically |\n| **Anthropic** | Native `tool_use` + ephemeral prompt caching | Uses its own adapter and the official SDK, so the default path is unchanged and caching still applies to the classifier's system prefix |\n\nWhy this matters: every stage of local codegen is a single **forced tool call** returning JSON that matches a strict schema. `tool_choice` is how that is normally enforced — so a provider that ignores it needs a second path, not a warning.\n\nBoth paths are always tolerated on the way back. Tools are advertised even on the JSON path, so a model that *can* call them still does; and extraction accepts either a `tool_calls` entry or a JSON object in the message content, regardless of which was requested. A server that claims to support `tool_choice` and quietly ignores it therefore still works.\n\n> **Model capability, not API capability.** The JSON fallback makes weaker models *reachable*, not *competent*. Codegen needs a model that can hold a strict schema; small local models often can't, and fail with `returned no emit_tool_plan call`. The fix is a stronger model, and the error message says so.\n\n### Your own inference endpoint\n\nAnything exposing `POST {base_url}/chat/completions` with the OpenAI request/response shape works — vLLM, TGI, LM Studio, llama.cpp, SGLang, an internal gateway, or your own GPU cluster:\n\n```bash\nsynapse model set custom \\\n  --base-url http://gpu.internal:8000/v1 \\\n  --model qwen3-coder-30b \\\n  --header \"X-Route: a100\"          # repeatable\n```\n\nBecause Synapse can't probe your server, partial compatibility is something you declare. These are the same flags as the capability table above, exposed for `custom`:\n\n| Flag | Use when | Effect |\n|---|---|---|\n| `--no-tool-choice` | Server ignores or rejects `tool_choice` | Switches to JSON mode + schema in the prompt |\n| `--max-completion-tokens` | Server wants the newer field name | Sends `max_completion_tokens` instead of `max_tokens` |\n| `--no-temperature` | Server rejects `temperature` | Omits the field |\n\nA key is optional for `custom`. When supplied (via `SYNAPSE_LLM_API_KEY`, `--llm-api-key`, or `--save-key`) it is sent as `Authorization: Bearer <key>`.\n\n## Config schema\n\n`synapse model set` writes an `llm` block to `.synapse/config.json`, or to `~/.synapse/config.json` with `--global`. You can also hand-write it.\n\n### Field reference\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `provider` | `\"anthropic\" \\| \"openai\" \\| \"groq\" \\| \"grok\" \\| \"openrouter\" \\| \"ollama\" \\| \"custom\"` | **yes** | — |\n| `base_url` | string (valid URL) | only for `custom` | Overrides the provider default. Endpoint **root** — `/chat/completions` is appended. |\n| `models.triage` | string | no | High-volume candidate classification. Cheap model. |\n| `models.generate` | string | no | Code generation. Strongest model. |\n| `models.verify` | string | no | Verification and repair. |\n| `models.fallback_generate` | string | no | Used after repeated overload responses on the primary. |\n| `headers` | `{ [name]: string }` | no | Extra request headers, merged over provider defaults. |\n| `tool_choice` | boolean | no | `false` = endpoint ignores `tool_choice`; use JSON mode. |\n| `max_tokens_field` | `\"max_tokens\" \\| \"max_completion_tokens\"` | no | Output-cap field name. |\n| `temperature` | boolean | no | `false` = omit `temperature`. |\n| `api_key_prefix` | string | no | First 5 chars, for display only. Written by `--save-key`. |\n| `api_key_encrypted` | string | no | Fernet ciphertext, machine-bound. Written by `--save-key`. |\n\nAny subset of `models` is valid — unset stages fall back to that provider's defaults. Omitted capability fields fall back to the provider's built-in flags.\n\n### Example\n\n```jsonc\n{\n  \"llm\": {\n    \"provider\": \"custom\",\n    \"base_url\": \"http://gpu.internal:8000/v1\",\n    \"models\": {\n      \"triage\": \"qwen3-4b\",\n      \"generate\": \"qwen3-coder-30b\",\n      \"verify\": \"qwen3-coder-30b\",\n      \"fallback_generate\": \"qwen3-4b\"\n    },\n    \"headers\": { \"X-Route\": \"a100\" },\n    \"tool_choice\": false,\n    \"api_key_prefix\": \"sk-in\",\n    \"api_key_encrypted\": \"gAAAAAB…\"\n  }\n}\n```\n\n### Validation\n\nThe block is schema-validated on every read and is **strict** — an unknown or misspelled key is rejected rather than silently ignored. An invalid block does not fail your build: Synapse prints a warning naming the offending field and falls back to the next source in the resolution order.\n\n### Resolution order\n\nProvider, model and endpoint resolve independently, highest first:\n\n1. CLI flags — `--provider`, `--model`, `--llm-base-url`\n2. Env — `SYNAPSE_LLM_PROVIDER`, `SYNAPSE_LLM_MODEL`, `SYNAPSE_LLM_BASE_URL`\n3. Project `.synapse/config.json` → `llm`\n4. Global `~/.synapse/config.json` → `llm`\n5. Anthropic with its default models\n\nKeys resolve on their own track: `--llm-api-key` flag → the provider's env var → `SYNAPSE_LLM_API_KEY` → a `--save-key` stored value.\n\nStored `models` and capability flags apply **only to the provider they were saved for**. Switching provider with `--provider` never inherits the previous provider's model ids.\n\n### Environment variables\n\n| Variable | Purpose |\n|---|---|\n| `SYNAPSE_LLM_PROVIDER` | Provider id, overriding stored config |\n| `SYNAPSE_LLM_MODEL` | Model id — pins every stage |\n| `SYNAPSE_LLM_BASE_URL` | Endpoint root, overriding stored config |\n| `SYNAPSE_LLM_API_KEY` | Key fallback for any provider |\n| `SYNAPSE_LLM_TIMEOUT_MS` | Per-request timeout, default `300000` (5 min). Raise it for slow local inference. |\n| `SYNAPSE_TELEMETRY=0` | Opt out of anonymous usage telemetry |\n\nPlus the provider-specific key variables in the table above.\n\n## Where keys are stored\n\nBy default, **nowhere**. Inference keys are read from the environment (or a flag) on every invocation and never written to disk.\n\n`synapse model set <provider> --save-key <key>` is an explicit opt-in. It stores the key Fernet-encrypted (AES-128-CBC + HMAC-SHA256) under a key derived from your username and hostname, so the file will not decrypt on another machine — moving the config elsewhere yields a warning telling you to re-enter it, not a silent failure. Only a 5-character prefix is stored in cleartext, for display. Remove it with `synapse model reset`.\n\nUse `--global` to apply any of this to `~/.synapse` instead of the current project.\n\n## Features\n\n- **Bring your own model** — local builds run on Anthropic, OpenAI, Groq, xAI (Grok), OpenRouter, Ollama, or any OpenAI-compatible endpoint you host. Switch with one command; no quota, no code upload.\n- **Zero boilerplate** — tool schemas, argument validation, and MCP wire format handled for you.\n- **Client-side exploration** — grep, AST symbol lookup, and definition/usage tracing all run on your machine.\n- **First-class Python + TypeScript** — full symbol and navigation support. Go, Java, C#, Rust get grep-based fallback.\n- **Streaming gRPC** — bidirectional session with the agent so you can watch tool calls land in real time.\n- **Deterministic surface extraction** — tree-sitter parsers with a 64KB head-sniff make repeat runs cache-friendly.\n- **Signed API keys** — Ed25519 envelope keys, per-request quota, revocation in under 30 seconds.\n\n## Commands\n\n| Command | Purpose |\n|---|---|\n| `synapse init [--force]` | Initialize Synapse in the current project. Prompts for API key. |\n| `synapse analyze [-o <dir>] [-v]` | Scan the codebase and build a symbol/schema map. |\n| `synapse build [-q <query>] [-o <file>] [--no-validate] [--no-docs] [-g]` | Generate an MCP server. Without `-q`, discovers candidate use cases. |\n| `synapse config [--update] [--key <k>] [--global]` | View or update config. |\n| `synapse model` | Show the inference provider local builds use. |\n| `synapse model list` | List supported providers and their default models. |\n| `synapse model set <provider> [--model <id>] [--base-url <url>] [--save-key <k>] [--global]` | Switch provider for local builds. |\n| `synapse model reset [--global]` | Remove the saved inference config. |\n| `synapse info` | Show project state and account quota. |\n| `synapse update` | Update the CLI to the latest npm release. |\n| `synapse uninstall` | Remove global config and uninstall. |\n\nAdd `--dev` to any command to talk to a local backend on `localhost:50051`.\n\n## Configuration\n\nConfig is resolved in this order:\n\n1. Environment variables (`SYNAPSE_API_KEY`, `SYNAPSE_BACKEND_URL`, `SYNAPSE_DEV=1`)\n2. Project-local `./.synapse/config.json`\n3. Global `~/.synapse/config.json`\n\nThis covers the hosted service. The inference provider used by `--local` builds is configured separately — see [Config schema](#config-schema) and [Providing your API key](#providing-your-api-key).\n\n## How `build` works\n\n`synapse build` opens a bidirectional gRPC stream with the backend agent. The agent never sees your code — it *asks the CLI* for exactly what it needs:\n\n- `read_file`, `find_files`, `grep` — bounded reads over your working directory\n- `list_symbols`, `find_definition`, `find_usages` — AST navigation via tree-sitter\n- `write_file`, `replace_file`, `insert_file` — final artifact writes\n\nEvery tool call is scoped to `process.cwd()`. Only the specific bytes the agent asks for flow back over the wire.\n\n## Language support\n\n| Language | Symbol extraction | Discovery | Generation |\n|---|---|---|---|\n| Python | ✅ | ✅ | ✅ |\n| TypeScript / JavaScript / TSX / JSX | ✅ | ✅ | ✅ |\n| Go, Java, C#, Rust | grep + patterns | partial | best-effort |\n\n## Troubleshooting\n\n| Message | Fix |\n|---|---|\n| `Not Initialized` on `build` | Run `synapse init` |\n| `Analysis Required` | Run `synapse analyze` |\n| `Quota Exceeded` | Check `synapse info` |\n| Backend error mid-build | The CLI retries transient errors. Quote the `Session:` id when opening an issue. |\n\n## Documentation\n\n- **Getting started** — [synaps3.ai/docs](https://synaps3.ai/docs)\n- **API reference** — [synaps3.ai/docs/api](https://synaps3.ai/docs/api)\n- **Examples** — [github.com/2ndbrainlabs-ai/synapse-examples](https://github.com/2ndbrainlabs-ai/synapse-examples)\n\n## Development\n\n```bash\ngit clone https://github.com/2ndbrainlabs-ai/synapse-cli.git\ncd synapse-cli\nnpm install\nnpm run dev -- <command>        # run against source\nnpm run build                   # produce dist/\nnpm test                        # vitest suite\nnpm run typecheck\n```\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](https://github.com/2ndbrainlabs-ai/synapse-cli/blob/main/CONTRIBUTING.md) for how to file issues, run the test suite, and open a PR. All participation is subject to our [Code of Conduct](https://github.com/2ndbrainlabs-ai/synapse-cli/blob/main/CODE_OF_CONDUCT.md).\n\n## Security\n\nPlease review our [Security Policy](https://github.com/2ndbrainlabs-ai/synapse-cli/blob/main/SECURITY.md) before reporting vulnerabilities.\n\n## License\n\nLicensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). See [NOTICE](https://github.com/2ndbrainlabs-ai/synapse-cli/blob/main/NOTICE) for attribution.\n\n---\n\n<div align=\"center\">\n\nBuilt by [2nd Brain Inc.](https://2ndbrainlabs.ai)\n\n</div>\n","readmeFilename":"README.md","homepage":"https://synaps3.ai","repository":{"type":"git","url":"git+https://github.com/2ndbrainlabs-ai/synapse-cli.git"},"bugs":{"url":"https://github.com/2ndbrainlabs-ai/synapse-cli/issues"}}