{"_id":"@cypherindustries/factory-mcp-server","_rev":"6-57a6506277a16d0db0a42cee7f42c373","name":"@cypherindustries/factory-mcp-server","dist-tags":{"latest":"1.3.3"},"versions":{"1.0.0":{"name":"@cypherindustries/factory-mcp-server","version":"1.0.0","keywords":["mcp","model-context-protocol","cypher-factory","defi","bonding-curve","launchpad","ai-agent","claude","cursor","windsurf"],"author":{"name":"Cypher"},"license":"MIT","_id":"@cypherindustries/factory-mcp-server@1.0.0","maintainers":[{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"}],"homepage":"https://github.com/CypherIndustries/factory-agent-sdk/tree/main/packages/mcp-server#readme","bugs":{"url":"https://github.com/CypherIndustries/factory-agent-sdk/issues"},"bin":{"cypher-factory-mcp":"dist/index.js"},"dist":{"shasum":"3f5b2a1be23068977e500ddec66db63824bd158e","tarball":"https://registry.npmjs.org/@cypherindustries/factory-mcp-server/-/factory-mcp-server-1.0.0.tgz","fileCount":5,"integrity":"sha512-aXNdej3BQMWa8z+zXpeDFeDpGVpK+udFL+dlzXLrRBZQmAgV3DllFaeDVQ6w34PQu1eHTWFPi+AJeXncebHv6w==","signatures":[{"sig":"MEUCIALCGou7J1pNswVIVSLMKWNXQ7XGsvI7ct7a2gbdm5idAiEA0owxBwADjNCnVgIz1e99kK4+7+c+cZXOlIIZK9Tz7xE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14090},"main":"dist/index.js","type":"module","_from":"file:cypherindustries-factory-mcp-server-1.0.0.tgz","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","build":"tsup src/index.ts --format esm --dts --clean --external @cypherindustries/factory-sdk --external @modelcontextprotocol/sdk","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"},"_resolved":"/tmp/1058edeb43cb67c1f97e194a4bef9f5a/cypherindustries-factory-mcp-server-1.0.0.tgz","_integrity":"sha512-aXNdej3BQMWa8z+zXpeDFeDpGVpK+udFL+dlzXLrRBZQmAgV3DllFaeDVQ6w34PQu1eHTWFPi+AJeXncebHv6w==","repository":{"url":"git+https://github.com/CypherIndustries/factory-agent-sdk.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.9.0","description":"MCP server for the Cypher Factory bonding curve launchpad — use with Claude Code, Cursor, Windsurf, or any MCP-compatible client","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","@cypherindustries/factory-sdk":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/factory-mcp-server_1.0.0_1772695715864_0.8749031967356669","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@cypherindustries/factory-mcp-server","version":"1.2.0","keywords":["mcp","model-context-protocol","cypher-factory","defi","bonding-curve","launchpad","ai-agent","claude","cursor","windsurf"],"author":{"name":"Cypher"},"license":"MIT","_id":"@cypherindustries/factory-mcp-server@1.2.0","maintainers":[{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"}],"homepage":"https://github.com/CypherIndustries/factory-agent-sdk/tree/main/packages/mcp-server#readme","bugs":{"url":"https://github.com/CypherIndustries/factory-agent-sdk/issues"},"bin":{"cypher-factory-mcp":"dist/index.js"},"dist":{"shasum":"2c8ce0f4c47e1dfdc2629f48615546d2d477bdae","tarball":"https://registry.npmjs.org/@cypherindustries/factory-mcp-server/-/factory-mcp-server-1.2.0.tgz","fileCount":5,"integrity":"sha512-5wRZgcLtCGTi/PZrU1rN6ak7Un81RF7kR5MOMyys89KG/vMnKpQ2Kkf28gEBmZt20UZMD6szXS4xmiYKVbdlYA==","signatures":[{"sig":"MEYCIQC9+BqSkfgQ9vdaIRHFCrQcJc6FwdhigtUCILZ06q8FiAIhAKPDXn3MIBoZZscxnMxvuZajAahvZN0yl6ZZHjsSoB1p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62642},"main":"dist/index.js","type":"module","_from":"file:cypherindustries-factory-mcp-server-1.2.0.tgz","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","build":"tsup src/index.ts --format esm --dts --clean --external @cypherindustries/factory-sdk --external @modelcontextprotocol/sdk","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"},"_resolved":"/tmp/9a0bf5eceeee4e1f1164741cc22916bd/cypherindustries-factory-mcp-server-1.2.0.tgz","_integrity":"sha512-5wRZgcLtCGTi/PZrU1rN6ak7Un81RF7kR5MOMyys89KG/vMnKpQ2Kkf28gEBmZt20UZMD6szXS4xmiYKVbdlYA==","repository":{"url":"git+https://github.com/CypherIndustries/factory-agent-sdk.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.9.0","description":"MCP server for the Cypher Factory bonding curve launchpad — use with Claude Code, Cursor, Windsurf, or any MCP-compatible client","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@modelcontextprotocol/sdk":"^1.28.0","@cypherindustries/factory-sdk":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/factory-mcp-server_1.2.0_1774624578942_0.04880971458813388","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@cypherindustries/factory-mcp-server","version":"1.3.0","keywords":["mcp","model-context-protocol","cypher-factory","defi","bonding-curve","launchpad","ai-agent","claude","cursor","windsurf"],"author":{"name":"Cypher"},"license":"MIT","_id":"@cypherindustries/factory-mcp-server@1.3.0","maintainers":[{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"}],"homepage":"https://github.com/CypherIndustries/factory-agent-sdk/tree/main/packages/mcp-server#readme","bugs":{"url":"https://github.com/CypherIndustries/factory-agent-sdk/issues"},"bin":{"cypher-factory-mcp":"dist/index.js"},"dist":{"shasum":"a329ccb42c96531395524a59c23136f3071d3958","tarball":"https://registry.npmjs.org/@cypherindustries/factory-mcp-server/-/factory-mcp-server-1.3.0.tgz","fileCount":5,"integrity":"sha512-ZtvzkmGR0IUfp/JlooBNIsRCCUlJnEJVmkul4DSzJLKttMsuhgMjlIw2sSInG59dIA6ajKBszi37EXCodYGYFQ==","signatures":[{"sig":"MEUCIQCr5SLjfdCa/4x3uaqJU/Yv5ZeoVWBH0NpVrU4e9dL3wwIgWrOFNg1fFNWY2KN2kJ/xxVq6EFDYth2P8PeHu2i+vTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93229},"main":"dist/index.js","type":"module","_from":"file:cypherindustries-factory-mcp-server-1.3.0.tgz","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","build":"tsup src/index.ts --format esm --dts --clean --external @cypherindustries/factory-sdk --external @modelcontextprotocol/sdk","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"},"_resolved":"/tmp/11cbc31f819af02a01f3abe1a040178f/cypherindustries-factory-mcp-server-1.3.0.tgz","_integrity":"sha512-ZtvzkmGR0IUfp/JlooBNIsRCCUlJnEJVmkul4DSzJLKttMsuhgMjlIw2sSInG59dIA6ajKBszi37EXCodYGYFQ==","repository":{"url":"git+https://github.com/CypherIndustries/factory-agent-sdk.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.11.0","description":"MCP server for the Cypher Factory bonding curve launchpad — use with Claude Code, Cursor, Windsurf, or any MCP-compatible client","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.25 || ^4.0","@modelcontextprotocol/sdk":"^1.28.0","@cypherindustries/factory-sdk":"^1.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/factory-mcp-server_1.3.0_1775907644572_0.6715474890402857","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@cypherindustries/factory-mcp-server","version":"1.3.1","keywords":["mcp","model-context-protocol","cypher-factory","defi","bonding-curve","launchpad","ai-agent","claude","cursor","windsurf"],"author":{"name":"Cypher"},"license":"MIT","_id":"@cypherindustries/factory-mcp-server@1.3.1","maintainers":[{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"}],"homepage":"https://github.com/CypherIndustries/factory-agent-sdk/tree/main/packages/mcp-server#readme","bugs":{"url":"https://github.com/CypherIndustries/factory-agent-sdk/issues"},"bin":{"cypher-factory-mcp":"dist/index.js"},"dist":{"shasum":"b83f3250e131964587b442047305d34f026d7b5a","tarball":"https://registry.npmjs.org/@cypherindustries/factory-mcp-server/-/factory-mcp-server-1.3.1.tgz","fileCount":5,"integrity":"sha512-z7vzNvU/Q+nm8y/SHxkQem0Xp1+Q8ap946grlFEXlfI7Ch4BA2Y1QpwvNtLgAA8g30+0PCoBR+jRCY7DrXVGKg==","signatures":[{"sig":"MEQCIFGCAYWxgpoVRVz3xPHyGmrBFrMoUoe2IklPqjLc3fsTAiBjAicn29hyuupfEqBmUDFY2GuVSm+cnfREevTUhF5zBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94649},"main":"dist/index.js","type":"module","_from":"file:cypherindustries-factory-mcp-server-1.3.1.tgz","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","build":"tsup src/index.ts --format esm --dts --clean --external @cypherindustries/factory-sdk --external @modelcontextprotocol/sdk","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"},"_resolved":"/tmp/aa2e12c4d4c58dc2c47ba50158e16d3b/cypherindustries-factory-mcp-server-1.3.1.tgz","_integrity":"sha512-z7vzNvU/Q+nm8y/SHxkQem0Xp1+Q8ap946grlFEXlfI7Ch4BA2Y1QpwvNtLgAA8g30+0PCoBR+jRCY7DrXVGKg==","repository":{"url":"git+https://github.com/CypherIndustries/factory-agent-sdk.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.11.0","description":"MCP server for the Cypher Factory bonding curve launchpad — use with Claude Code, Cursor, Windsurf, or any MCP-compatible client","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.25 || ^4.0","@modelcontextprotocol/sdk":"^1.28.0","@cypherindustries/factory-sdk":"^1.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/factory-mcp-server_1.3.1_1777472587633_0.1457203269470888","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@cypherindustries/factory-mcp-server","version":"1.3.2","keywords":["mcp","model-context-protocol","cypher-factory","defi","bonding-curve","launchpad","ai-agent","claude","cursor","windsurf"],"author":{"name":"Cypher"},"license":"MIT","_id":"@cypherindustries/factory-mcp-server@1.3.2","maintainers":[{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"}],"homepage":"https://github.com/CypherIndustries/factory-agent-sdk/tree/main/packages/mcp-server#readme","bugs":{"url":"https://github.com/CypherIndustries/factory-agent-sdk/issues"},"bin":{"cypher-factory-mcp":"dist/index.js"},"dist":{"shasum":"37e28c209cc1ecaf8e180b8eea043b1bf8062706","tarball":"https://registry.npmjs.org/@cypherindustries/factory-mcp-server/-/factory-mcp-server-1.3.2.tgz","fileCount":5,"integrity":"sha512-0LNuinFld5D7H2pBiF6Q+laHvXBliAlcGVgNtLWmv/xAtLcZ8qs9f7FNEq74CE2nxEnD6U3yP8tFAfcDg1l+GA==","signatures":[{"sig":"MEUCIB4AF77Fjw1o3hQKD0+ZC9dinsLsT0P1ubIN1QukiUu8AiEA/yKMYZqzQesK+KjMZJ1q1naMHhcwFaetuDiyWyCy4no=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95372},"main":"dist/index.js","type":"module","_from":"file:cypherindustries-factory-mcp-server-1.3.2.tgz","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","build":"tsup src/index.ts --format esm --dts --clean --external @cypherindustries/factory-sdk --external @modelcontextprotocol/sdk","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"},"_resolved":"/tmp/ef3e572f041a4be131a421fb78f609b1/cypherindustries-factory-mcp-server-1.3.2.tgz","_integrity":"sha512-0LNuinFld5D7H2pBiF6Q+laHvXBliAlcGVgNtLWmv/xAtLcZ8qs9f7FNEq74CE2nxEnD6U3yP8tFAfcDg1l+GA==","repository":{"url":"git+https://github.com/CypherIndustries/factory-agent-sdk.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.11.0","description":"MCP server for the Cypher Factory bonding curve launchpad — use with Claude Code, Cursor, Windsurf, or any MCP-compatible client","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.25 || ^4.0","@modelcontextprotocol/sdk":"^1.28.0","@cypherindustries/factory-sdk":"^1.3.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/factory-mcp-server_1.3.2_1777559616794_0.8737019757704558","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@cypherindustries/factory-mcp-server","version":"1.3.3","description":"MCP server for the Cypher Factory bonding curve launchpad — use with Claude Code, Cursor, Windsurf, or any MCP-compatible client","main":"dist/index.js","types":"dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"bin":{"cypher-factory-mcp":"dist/index.js"},"keywords":["mcp","model-context-protocol","cypher-factory","defi","bonding-curve","launchpad","ai-agent","claude","cursor","windsurf"],"author":{"name":"Cypher"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/CypherIndustries/factory-agent-sdk.git","directory":"packages/mcp-server"},"homepage":"https://github.com/CypherIndustries/factory-agent-sdk/tree/main/packages/mcp-server#readme","bugs":{"url":"https://github.com/CypherIndustries/factory-agent-sdk/issues"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.28.0","zod":"^3.25 || ^4.0","@cypherindustries/factory-sdk":"^1.3.3"},"devDependencies":{"@types/node":"^24.0.0","tsup":"^8.0.0","typescript":"^5.9.3"},"engines":{"node":">=24"},"scripts":{"build":"tsup src/index.ts --format esm --dts --clean --external @cypherindustries/factory-sdk --external @modelcontextprotocol/sdk","dev":"tsup src/index.ts --format esm --dts --watch","typecheck":"tsc --noEmit"},"_id":"@cypherindustries/factory-mcp-server@1.3.3","_integrity":"sha512-ufc5DnkKqo1yT+XIlRRwcsV8GXeqe53ffx6jpEdQ3wcczjklB7IR/M310OCdvLMRwtnNA6YSmAOfc7nmypX4ng==","_resolved":"/tmp/ba9cab692b913da3fce0421e895858ff/cypherindustries-factory-mcp-server-1.3.3.tgz","_from":"file:cypherindustries-factory-mcp-server-1.3.3.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-ufc5DnkKqo1yT+XIlRRwcsV8GXeqe53ffx6jpEdQ3wcczjklB7IR/M310OCdvLMRwtnNA6YSmAOfc7nmypX4ng==","shasum":"2985b075852cc7a887a0cb88327ff3177b2d1efb","tarball":"https://registry.npmjs.org/@cypherindustries/factory-mcp-server/-/factory-mcp-server-1.3.3.tgz","fileCount":5,"unpackedSize":96576,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDsrNEhMngZq1xISyJ5jIdXwLZlOInYUwxVTodeNh1EqgIgcRV8z9gpQT1tWA7DKnacs26EpFSHpxnY+01obnZ6nCI="}]},"_npmUser":{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"},"directories":{},"maintainers":[{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/factory-mcp-server_1.3.3_1777563936162_0.37670010969387957"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-05T07:28:35.750Z","modified":"2026-04-30T15:45:36.428Z","1.0.0":"2026-03-05T07:28:36.027Z","1.2.0":"2026-03-27T15:16:19.082Z","1.3.0":"2026-04-11T11:40:44.705Z","1.3.1":"2026-04-29T14:23:07.769Z","1.3.2":"2026-04-30T14:33:36.951Z","1.3.3":"2026-04-30T15:45:36.314Z"},"bugs":{"url":"https://github.com/CypherIndustries/factory-agent-sdk/issues"},"author":{"name":"Cypher"},"license":"MIT","homepage":"https://github.com/CypherIndustries/factory-agent-sdk/tree/main/packages/mcp-server#readme","keywords":["mcp","model-context-protocol","cypher-factory","defi","bonding-curve","launchpad","ai-agent","claude","cursor","windsurf"],"repository":{"type":"git","url":"git+https://github.com/CypherIndustries/factory-agent-sdk.git","directory":"packages/mcp-server"},"description":"MCP server for the Cypher Factory bonding curve launchpad — use with Claude Code, Cursor, Windsurf, or any MCP-compatible client","maintainers":[{"name":"0xmyrddin","email":"camelotlabs@protonmail.com"}],"readme":"# @cypherindustries/factory-mcp-server\n\nMCP (Model Context Protocol) server for the Cypher Factory bonding curve launchpad. Use with Claude Code, Cursor, Windsurf, Cline, or any MCP-compatible client.\n\nThis server uses the `McpServer` class with per-tool `registerTool()` registration, Zod input schemas, and behavioral annotations on all 64 tools. It is a thin adapter over [`@cypherindustries/factory-sdk`](../sdk) -- the SDK owns all tool definitions and execution logic.\n\n## Requirements\n\n- Node.js >= 24\n\n## Installation\n\n```bash\nnpm install -g @cypherindustries/factory-mcp-server\n# or run directly\nnpx @cypherindustries/factory-mcp-server\n```\n\n## Setup\n\n### Claude Code\n\nAdd to `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"cypher-factory\": {\n      \"command\": \"npx\",\n      \"args\": [\"@cypherindustries/factory-mcp-server\"],\n      \"env\": {\n        \"CYPHER_KEYSTORE_PASSWORD\": \"your-strong-password\",\n        \"CYPHER_RPC_URL\": \"wss://ethereum-rpc.publicnode.com\",\n        \"CYPHER_EXPLORER_URL\": \"https://etherscan.io\",\n        \"CYPHER_API_BASE_URL\": \"https://api.factory.cyphereth.com\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to Cursor Settings > MCP Servers:\n\n```json\n{\n  \"cypher-factory\": {\n    \"command\": \"npx\",\n    \"args\": [\"@cypherindustries/factory-mcp-server\"],\n    \"env\": {\n      \"CYPHER_KEYSTORE_PASSWORD\": \"your-strong-password\",\n      \"CYPHER_RPC_URL\": \"wss://...\"\n    }\n  }\n}\n```\n\n### Windsurf / Cline\n\nFollow the same pattern -- add an MCP server entry with the command `npx @cypherindustries/factory-mcp-server` and the required environment variables.\n\n## Environment Variables\n\n### Wallet (at least one for write operations)\n\n| Variable | Description |\n|----------|-------------|\n| `CYPHER_KEYSTORE_PASSWORD` | Password for encrypted keystore at `~/.cypher-factory/` (recommended) |\n| `CYPHER_PRIVATE_KEY` | Agent wallet private key (hex) |\n\n### Optional (defaults to Ethereum Mainnet)\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `CYPHER_RPC_URL` | RPC endpoint | `wss://ethereum-rpc.publicnode.com` |\n| `CYPHER_FACTORY_ADDRESS` | BCTokenFactory contract | Ethereum Mainnet default |\n| `CYPHER_BONDING_CURVE_ADDRESS` | BondingCurve contract | Ethereum Mainnet default |\n| `CYPHER_HIGHLIGHTS_ADDRESS` | HighlightsManager contract | Ethereum Mainnet default |\n| `CYPHER_REFERRAL_ADDRESS` | ReferralManager contract | Ethereum Mainnet default |\n| `CYPHER_VESTING_ADDRESS` | TokenVesting contract | Ethereum Mainnet default |\n| `CYPHER_PLUGIN_FACTORY_ADDRESS` | AlgebraFeePluginFactory | Ethereum Mainnet default |\n| `CYPHER_CURVE_MATH_ADDRESS` | CurveMath contract | Ethereum Mainnet default |\n| `CYPHER_EXPLORER_URL` | Block explorer base URL for transaction links | -- |\n| `CYPHER_API_BASE_URL` | REST API base URL for token queries and image upload | -- |\n| `CYPHER_REFERRAL_BASE_URL` | Referral link base URL | -- |\n| `CYPHER_REFERRER_ADDRESS` | Default referrer address for affiliate tracking | -- |\n\n> Unprefixed variants (`FACTORY_ADDRESS`, `RPC_URL`, etc.) are also accepted as fallbacks.\n\n### Transaction Gate\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `MAX_PER_TX_ETH` | Max ETH per transaction | `1` |\n| `DAILY_BUDGET_ETH` | Rolling 24h ETH budget | `5` |\n| `COOLDOWN_SECONDS` | Min seconds between writes | `2` |\n\n## Tool Annotations\n\nAll 64 tools are registered with MCP behavioral annotations that help clients understand tool behavior:\n\n| Annotation | Description |\n|------------|-------------|\n| `readOnlyHint` | `true` if the tool does not modify on-chain or local state |\n| `destructiveHint` | `true` if the tool spends ETH or modifies state irreversibly |\n| `idempotentHint` | `true` if repeated calls with the same params produce the same result |\n| `openWorldHint` | `true` if the tool interacts with external systems (blockchain RPC, REST API) |\n\nMCP clients can use these annotations to filter, sort, or auto-approve tool calls. For example, a client may auto-approve all `readOnlyHint: true` tools while requiring confirmation for `destructiveHint: true` tools.\n\n### Annotation Categories\n\n| Category | readOnly | destructive | idempotent | openWorld | Example Tools |\n|----------|----------|-------------|------------|-----------|---------------|\n| Read (on-chain) | true | false | true | true | get_token_state, quote_buy, get_balance |\n| Read (API) | true | false | true | true | get_token_list, get_user_holdings |\n| Read (local) | true | false | true | false | get_config, spending_stats |\n| Read (strategy) | true | false | true | false | get_strategy_status, list_available_strategies |\n| Read (generate) | true | false | true | false | generate_referral_link, describe_protocol |\n| Write (ETH) | false | true | false | true | buy_token, sell_token, deploy_token |\n| Write (upload) | false | false | true | true | upload_image |\n| Config | false | false | true | false | update_config, update_tx_gate |\n| Config (strategy) | false | false | false | false | start_strategy, stop_strategy |\n\n## MCP Registry\n\nThe server includes a [`server.json`](./server.json) file following the MCP Registry schema:\n\n- **Namespace:** `io.github.cypherindustries/factory-launchpad` (reverse-DNS format)\n- **Package:** `@cypherindustries/factory-mcp-server` on npm\n- **Environment variables:** Documented in the registry metadata for automated setup\n\nMCP Registry-compatible clients can discover and configure this server automatically using the `server.json` metadata.\n\n## Available Tools\n\nThe server exposes 64 tools. All tool names use snake_case (no prefix). For the complete reference with parameters and return types, see [API-REFERENCE.md](../../API-REFERENCE.md).\n\n### Read (no gas) -- 41 tools\n- `get_token_state` — full token info: price, supply, TVL, graduation status, fee decomposition\n- `quote_buy` / `quote_sell` — price quotes (CurveMath exact calculations)\n- `get_balance` — check ETH, WETH, or token balance\n- `check_graduation` — graduation cost estimate + caller fee (auto-graduation detection)\n- `check_otc_transfer` — pre-flight check for direct transfers\n- `get_highlight_status` / `get_highlight_config` — promotion cost and settings\n- `get_referral_reward` / `get_referral_fees` — referral earnings and fee structure\n- `get_cooldown_status` — staking vault cooldown\n- `get_staking_vault_address` / `get_staking_position` — staking vault lookup and position\n- `get_vesting_info` / `get_all_vesting_schedules` — vesting schedule details\n- `get_config` — current agent config + spending stats\n- `is_protocol_paused` / `get_creation_fee` — protocol status\n- `calculate_cost` / `preview_stake` / `preview_unstake` — read-only previews\n- `spending_stats` / `get_wallet_info` / `get_wallet_balances` — wallet and budget info\n- `get_failed_txs` — dead letter queue\n- `get_tx_history` — rolling confirmed transaction history (filter by type)\n- `get_portfolio_summary` — aggregated portfolio (ETH, tokens, staking, vesting, referrals)\n- `resolve_token` / `get_recent_deployments` — token registry\n- `get_token_list` / `get_token_distribution` / `get_user_holdings` / `get_user_creations` / `get_current_highlight` — API queries\n- `get_strategy_status` / `list_available_strategies` — strategy status\n- `generate_referral_link` / `describe_protocol` — generation tools\n- `get_pool_state` / `quote_pool_swap` — Algebra V4 pool snapshot + off-chain swap quote (post-graduation)\n- `get_lp_positions` — enumerate Algebra V4 LP NFT positions held by an address\n\n### Write (costs gas, gated by TxGate) -- 19 tools\n- `buy_token` / `sell_token` — trade on bonding curve (auto-routes to the Algebra V4 pool post-graduation; receipt path = `algebra-pool`)\n- `pool_swap` — direct Algebra V4 pool swap on a graduated token's protocol pool (exact-input or exact-output)\n- `add_liquidity` — mint/increase an LP position on the **default-deployer** pool; auto-creates the pool seeded at the protocol pool's price when absent\n- `remove_liquidity` — drain an LP position; burns the NFT on full removal by default; optional WETH unwrap\n- `collect_fees` — harvest accrued fees from an LP position WITHOUT changing position size (default-pool fees do NOT auto-transfer)\n- `deploy_token` — create a new token (with social links and staking vault default-on)\n- `trigger_graduation` — push token past MAX_SUPPLY\n- `upload_image` — upload image via REST API\n- `stake_tokens` / `request_unstake` / `request_unstake_by_shares` / `complete_unstake` — staking\n- `highlight_token` / `claim_referral_reward` / `otc_transfer` — highlights, referrals, transfers\n- `release_vested_tokens` / `create_vesting_schedule` — vesting management\n- `send_eth` — native ETH transfer with TxGate budget tracking\n\n### Config -- 4 tools\n- `update_config` -- change slippage, risk limits, gas settings\n- `update_tx_gate` -- change spending limits, blacklist\n- `start_strategy` / `stop_strategy` -- manage automated trading strategies (requires `wss://` RPC)\n\n## Architecture\n\n```\nMCP Client (Claude Code / Cursor / etc.)\n  |\n  | stdio (JSON-RPC)\n  |\n  v\nMcpServer (this package)\n  |\n  +-- WalletManager (from SDK)\n  +-- LaunchpadAgent (from SDK)\n  +-- ToolExecutor (from SDK, with TxGate)\n  |     +-- TOOL_DEFINITIONS (64 tools)\n  |     +-- TxGate (spending limits)\n  |\n  +-- registerTool() per tool:\n  |     +-- title (human-readable)\n  |     +-- description\n  |     +-- inputSchema (Zod via zod-compat)\n  |     +-- annotations (behavioral hints)\n  |\n  +-- 19 resources (15 static + 4 template-based)\n  +-- 11 prompts (workflow guides)\n  +-- Resource subscriptions (change notifications)\n  |\n  +-- makeToolCallback(toolName, executor) -> MCP response\n```\n\nThe server uses `McpServer` (from `@modelcontextprotocol/sdk`) with individual `registerTool()` calls for each tool, enabling per-tool metadata (title, annotations, Zod schemas).\n\n## MCP Resources (19 total)\n\n**Static resources (15):** `cypher://protocol`, `cypher://safety-rules`, `cypher://token-state-schema`, `cypher://config-schema`, `cypher://wallet-setup`, `cypher://wallet`, `cypher://config`, `cypher://positions`, `cypher://strategies`, `cypher://failed-transactions`, `cypher://staking`, `cypher://vesting`, `cypher://referrals`, `cypher://tx-history`, `cypher://portfolio`\n\n**Template-based resources (4):** `cypher://positions/{token_identifier}`, `cypher://strategies/{strategy_name}`, `cypher://staking/{token_identifier}`, `cypher://vesting/{token_identifier}`\n\n## MCP Prompts (11 total)\n\n`evaluate-trade`, `deploy-token`, `monitor-positions`, `manage-strategies`, `check-graduation`, `staking-workflow`, `referral-setup`, `vesting-management`, `otc-transfer`, `highlight-promotion`, `error-recovery`\n\n## Resource Subscriptions\n\nThe server supports MCP resource subscriptions for change notifications. Subscribed URIs receive debounced (500ms) notifications on relevant events:\n- `cypher://wallet`, `cypher://positions`, `cypher://tx-history`, `cypher://portfolio` -- on tx_confirmed events\n- `cypher://strategies` -- on strategy start/stop events\n- `cypher://config` -- polled every 15 seconds for changes\n\n## Security\n\n- The MCP server creates a TxGate with configurable spending limits from environment variables.\n- Interactive confirmation is disabled (`confirmAboveETH: 0`) since MCP does not support interactive prompts.\n- Wallet source is logged to stderr on startup (keystore, env/config, or read-only mode).\n- If no private key or keystore is configured, the server starts in read-only mode (write tools will error).\n- Graceful shutdown with AbortController cancels in-flight operations and rolls back pending TxGate reservations.\n- **Chain-ID verification** — on the first write operation the agent\n  calls `provider.getNetwork()` and refuses to submit the transaction\n  unless the provider's chain ID matches `ConnectionConfig.expectedChainId`\n  (default: Ethereum Mainnet — 1). Prevents an accidentally-swapped\n  `CYPHER_RPC_URL` from executing trades against whatever contracts\n  happen to live at the hardcoded Ethereum Mainnet addresses on another chain.\n- **Bigint-safe resource serialization** — every `cypher://...` resource\n  handler uses the SDK's `safeJsonStringify` helper, so resources whose\n  payload contains wei amounts (e.g. `cypher://wallet` with a live\n  `TxGate.getStats()`) are round-trippable instead of crashing with a\n  `Do not know how to serialize a BigInt` TypeError.\n\n## Changes\n\nSee [CHANGELOG.md](./CHANGELOG.md) for release notes. Latest: **v1.3.3** — docs audit + corrected handshake `instructions` string (\"Provides 64 tools …\"). See v1.3.2 for the auto-derived Algebra V4 default-pool LP management tools (`add_liquidity`, `remove_liquidity`, `collect_fees`, `get_lp_positions`).\n\n## Development\n\n```bash\n# From monorepo root\ngit clone https://github.com/CypherIndustries/factory-agent-sdk\ncd factory-agent-sdk\npnpm install\npnpm build:mcp\n\n# Test locally\nCYPHER_KEYSTORE_PASSWORD=... node packages/mcp-server/dist/index.js\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}