{"_id":"flycode-mcp","_rev":"34-35dd1308d44be330509d3cb65967a359","name":"flycode-mcp","dist-tags":{"latest":"1.13.0"},"versions":{"1.0.0":{"name":"flycode-mcp","version":"1.0.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.0.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"ebb10eadff4c99872c83e2a3158544f845d4494a","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.0.0.tgz","fileCount":29,"integrity":"sha512-JTY2KtvbBdkEIkJFwIBJ8aRGp/IaJJuMZyn4cTT2Pck1jP4HOD244ypsddnnOKFnZNUZ78trMC81Xk+9eONCTg==","signatures":[{"sig":"MEQCIFVZNr2hlv76OhydXmpcfGlg5z1m+LL6eTN30i/0iY7SAiBTb5i3IZsi9mGvTscLDvvepn5XLvI4pbHd8M5iggJvGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111471},"main":"dist/index.js","type":"module","gitHead":"b323424ffc2baecaaf847442a5f254f29f85f007","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.0.0_1786523795027_0.16194313454890064","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"flycode-mcp","version":"1.0.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.0.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"84cf9269812ec9e2be14170a63dca2ca151b4f39","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.0.1.tgz","fileCount":29,"integrity":"sha512-ybYbRQwH+3sFYjjXE5JeaugX3vKvAiiStArXURghh4bUyI7lpIA8XnyRRY7/4y/zXBJiRPHA0tLkOhOAtcIlCw==","signatures":[{"sig":"MEUCICAtfV1N4pwfU5kOlTu0dwkJ5Pu270w2sKPJfR8F2exVAiEAg9Ivvf/nGu6pmwkm3+8UlE9EmTPpEOViV4GFsDmF3Lk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111508},"main":"dist/index.js","type":"module","gitHead":"cf6cca5d6c0c790e23e4a521fafe755953aac483","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.0.1_1786524632554_0.8474613077477275","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"flycode-mcp","version":"1.0.2","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.0.2","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"2b871a37d69e03e9325d6174d584ce5512ec3a2a","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.0.2.tgz","fileCount":29,"integrity":"sha512-lReZkDQpzcTcom3YK3efzRc++lP3bfJ2QFgXg4M67YcJTH8jwDKKaiZMboJ6PuzN3OmSSRlJsjqhVb/5gUWuGw==","signatures":[{"sig":"MEUCIEslY5hgK1focK2cYUjXbSjq916SIWGcVkCZNsKhivR7AiEAmEMKempWcf0HTzCQaaEOto3w7Eta8S67Dof4Jsn07SE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111492},"main":"dist/index.js","type":"module","gitHead":"b458763a48fdb5ef65e7af37e60c4493052da80e","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.0.2_1786524956257_0.6443675935365296","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"flycode-mcp","version":"1.0.3","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.0.3","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"5f631234dba2f986aa4d2e74801e4ff444a06a52","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.0.3.tgz","fileCount":29,"integrity":"sha512-BNzp3PBmQVdpmt32Ra234bB7NZAAJfI7UTPHh9QmEdhAqalj5ieKs4e90TW3ttsqedoaHmu/FzOhdpsA8XAv7A==","signatures":[{"sig":"MEUCIQCIKgvz+qKboeHKEJFBTYsgkmYN6RlsAZB1pYwVjmNdSQIgQF+tR94xs9ov4zEd3PPzyhoPypQIyZIDAiCsOxM71Q0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111492},"main":"dist/index.js","type":"module","gitHead":"84841d5a0f74b2449fd3fa824cceb74d0fcf053b","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.0.3_1786526736686_0.8009676701665516","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"flycode-mcp","version":"1.0.4","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.0.4","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"ff8bab46e9e5180fdc6c14c3e1bcb5771fc2833b","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.0.4.tgz","fileCount":29,"integrity":"sha512-VsN0Yr65+KLM3gfC1Su6tl1NGU+LdFgDv7ASYnQ3/05G7HJokd/eVqpK+8NRGpncBOFYR6gTWmzTueK4PW15yw==","signatures":[{"sig":"MEQCIAmQWYFc+kgz1Ei7eWCFidlVxuK+FTxyzNmRHWurkp09AiBhG/jnytZqFPL2E/SL+yojs2r//Fb5enovJ3QtumtGBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111573},"main":"dist/index.js","type":"module","gitHead":"7ebc56f9e220c6a2167fddd3398a3bf1adec6981","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.0.4_1786526777726_0.5875652346845566","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"flycode-mcp","version":"1.0.5","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.0.5","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"0449f4ad5d1d81d4c61dd78b98796f8d336cb750","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.0.5.tgz","fileCount":29,"integrity":"sha512-otytckdEJ+uirKRfUKmzkp5gxo9PWLaDVP5jDY/XGZXyNCT+IaM3FlkaJRROv5EzNI4P0D8HAKCqBxSOYxqdOw==","signatures":[{"sig":"MEYCIQCfVmrBW3W9X2R5lNzpFovdtuILh6TA0l2MzViIsYfCTgIhAJWzc0kMp1lkOw2ww/yL9dOQBSmbRNPJ6NhTVl7GTjUy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111518},"main":"dist/index.js","type":"module","gitHead":"3b847b6749b64a041085f50cf9b0df3109829540","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.0.5_1786528941342_0.004748504661374886","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"flycode-mcp","version":"1.0.6","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.0.6","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"be1e549aacf1795cc6feb7a61de7c8a53811c2f9","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.0.6.tgz","fileCount":29,"integrity":"sha512-MwNf8ARapmEYkM9By1mvx3oZEc7cPcFSpLfsNIkWeNKzXsh7o48MG6WfrzucLK8ms+9tVrv3DYRl8l7iH5deMw==","signatures":[{"sig":"MEYCIQDkPRG1q7zYQWIQgniGUA50aqGO24tOVyB7U8XAXNloXgIhANmnYGSVmLRXLbpvvsiHKXql04+G39VXPM9lOujEj06H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117618},"main":"dist/index.js","type":"module","gitHead":"db804906fae4b81f6b95b2d2fc5ad81dcd05727e","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.0.6_1786601204995_0.32817971201688323","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"flycode-mcp","version":"1.1.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.1.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"7b00acab465a0a40f92e1f17957c8cb963574b01","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.1.0.tgz","fileCount":37,"integrity":"sha512-DTx8lCaODKIqKVkxNb3hiDhhIzPJmtxR12G3g/u0a+T1sIosJmUWCjEAyzCXGrLVLyl8PCPs9IW4A1afkIC3+Q==","signatures":[{"sig":"MEQCICu0l1grK/NFVPqq6zZydoZLnbOW2ffazFr3Ep4G2k01AiAXZC0OpWgLzusJ9Kzhdt9jpQQuJBsNDmb00ZnY/tou4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131025},"main":"dist/index.js","type":"module","gitHead":"1baa85743b41c5564be4243da5da516e764c351b","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.1.0_1786615355716_0.28578842524745784","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"flycode-mcp","version":"1.1.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.1.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"31dabbb045ffe594649d8eaae301ff548949147f","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.1.1.tgz","fileCount":37,"integrity":"sha512-YEn0MM42ndaWl+V3quG0JRMrkbUbdVDfsGlwv+XO6aVfWgdiP/8WdaLgMqC+o7XPJR7L/a1CwxFGVs7diNZVzQ==","signatures":[{"sig":"MEQCIB5A7xQbKT9SkovpP0RVCn2i5uqTvnH20CB84jqnrxOAAiBsDD0Gfdoyif0VBldgeHNyNszMHu0Z83fITuW2Aon4Fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131051},"main":"dist/index.js","type":"module","gitHead":"500334071682850f48e70d17ec7100e15cce1f86","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.1.1_1786931516137_0.5634145568377824","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"flycode-mcp","version":"1.1.2","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.1.2","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"f30ed463f41c9f4579567fd2c65e570b567f5d9c","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.1.2.tgz","fileCount":37,"integrity":"sha512-F8oxq1tYSg0v4/K1pzk3KUSVg7966xE2m9MXrIN4cbyHEXKUqBOKUA1OtQ3MjY7EWAvs0BEVgZ4Uc4s+6n8HdQ==","signatures":[{"sig":"MEUCIA0zCOcRRGLFgXKPh83kdqwDr0dmA6ajZvlXqEiChgGrAiEAgADmDM5Jf6Gafw32LHnA1fhiRk74gMhnMEhR6+boVOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146020},"main":"dist/index.js","type":"module","gitHead":"e314c23065c02b3cb2f545bafbd9c512bb8ace00","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.1.2_1786947756237_0.8000749538049183","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"flycode-mcp","version":"1.2.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.2.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"6b24297b1b8e4e0e66ed45adb5360115706a88e5","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.2.0.tgz","fileCount":37,"integrity":"sha512-Of22U5Ar9+T/f6xwA9ptDtpSvpLF7n8YzKSmWzZUMFL41U4ODs+4GXOXMKlBdGYLvZGaiwZs0PLwASUaV91vfw==","signatures":[{"sig":"MEUCIQD3HZc4Lmgo05FPzokbZl7bZYiX9I9m++xkBecantflXwIgBkoFtp58jPCk0L6ByPmzdECO7d8a8EuH54ubCgGH6Lk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146020},"main":"dist/index.js","type":"module","gitHead":"03233840e528a6090bee748e7b2332c3948c01b8","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.2.0_1786947821282_0.6684123534141471","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"flycode-mcp","version":"1.3.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.3.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"5197b293e8165be98c5978be25ad72035f2a6816","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.3.0.tgz","fileCount":41,"integrity":"sha512-EOfVUlMzyxbFUz4NH+UuIGsMQvpPJijg6LdxRSHlMVH/bJYBlOVk539amau0O53R4nZwDimjrivXiq0siyAgSQ==","signatures":[{"sig":"MEQCIDXFa6u5SzjR963cbnhUCN1dW80QqTZqSeyb0YDCDvaBAiBTlbv7jrhX8Yf/YsM1tRGjZZesLEjCmP1qQg4tr8adNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162525},"main":"dist/index.js","type":"module","gitHead":"1ad2771b9bef8e992d81c1f1f5fe55536ae75387","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.3.0_1787023669571_0.8658598454918554","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"flycode-mcp","version":"1.4.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.4.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"b171983b5b1658122c12b9fbb99450f702bf3b35","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.4.0.tgz","fileCount":41,"integrity":"sha512-CBwqYztEgfM4xJr5jD6siEq3KnpqUcxDNCc0sH241cKDI7PBqlTkx/Z3rp6Q1/GzXsqVQfOrViDnI4y+YpHqzg==","signatures":[{"sig":"MEQCICkaSDWNTamUt6qZm1tYzBhxb6iW2/qsl6hV0Kg+VgEgAiBwWUKd7PlteLJ9pchGXb8xLJuy9MA5cAw2g1msS2po5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174085},"main":"dist/index.js","type":"module","gitHead":"a5e564144d684fa7541f86c93e6e7406e049014a","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.4.0_1787040515105_0.5514793231896142","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"flycode-mcp","version":"1.5.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.5.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"fa7424c1d2a2241e01d7131aa10ce3b1d7b29ad0","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.5.0.tgz","fileCount":45,"integrity":"sha512-YP4q+GRct83xG7qWRZyWSd8z90IhFqV7O4Ue/sf3Pq+HfSLPYo07oAsZTdPs2qZzB5ZCZOu6Y8pPq1PH9v4HHQ==","signatures":[{"sig":"MEQCICFuKRJO8w9iKWpwcRjaqI1coiieAGdLKstHlso3VcOwAiBOgg1D8d5LHfoTq0xkPSxZJTfPYBEd7g564yEjlThRHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187934},"main":"dist/index.js","type":"module","gitHead":"e842da2b27e7e323ca2ed7c50485e6af19853f5d","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.5.0_1787046182709_0.08985445433695394","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"flycode-mcp","version":"1.5.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.5.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"fcf17a041955201d0a3e099f4a9fc3bcc6279a35","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.5.1.tgz","fileCount":47,"integrity":"sha512-kGk921UJDAq8Diyk+YT0rjXmfP59EQBviig0WBS4CwG1aPmSmHuGoCQIAiA7l7Mtf+s8pgaZb2uU4YflC8du+g==","signatures":[{"sig":"MEQCICrtejuADs/mVbUbyMfapDVCqKi1axCuTPfckLhgAfEkAiA+GxZBqE3nLcMUNe2OpeKlYBLo0J3H/xAE3HLLI0HndQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198515},"main":"dist/index.js","type":"module","gitHead":"2d22445b8483463b831c959d00bc458d22b83e74","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.5.1_1787110502607_0.45625778354208224","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"flycode-mcp","version":"1.5.2","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.5.2","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"a9aa0d3a03876b59bf64aa4b796f37ac784178f3","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.5.2.tgz","fileCount":47,"integrity":"sha512-WJNjepwfky19WvA9zyy0B9QrgMzx3uJT6E52cntCYvbDI8H71cj0bRsRFAJLM9fVACe62PrNuTmgzYgt5iGcjg==","signatures":[{"sig":"MEUCIQCW6OswiuvPf18d0nsvORZn0s/c+/t2P11+UKS6QbPDPgIgTLpALrw5iJCxmZDahJcYPxnMnzq6JD4fa8ANva5WdxM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198496},"main":"dist/index.js","type":"module","gitHead":"41a26163bd3849b00ad89bbf10ea127a33dcc468","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.5.2_1787208880875_0.39413716656267295","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"flycode-mcp","version":"1.6.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.6.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"e025e71e5c92c5883ff12609cc07f4df352a68f8","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.6.0.tgz","fileCount":51,"integrity":"sha512-3T7xsHbtYMkAbZe9mFUU0nYMJaXiC1zPVKiL7XBDCZd6iEMmnMXFbB0QiDUUuzDXc/UM+sk9rfijIqGtr2+IvA==","signatures":[{"sig":"MEUCIQCCKoeZnzztsfJqtD9haX6YA03mIMSXXeQJvfLCF3tsQgIgTTDDHMoaH8HFLDH20nTS8pRdAAdUhAQio4y8WeIc/Zc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206675},"main":"dist/index.js","type":"module","gitHead":"081bc84d195ff7975d2221f65ad9e554a3acf1d2","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.6.0_1787290620916_0.16485385552834697","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"flycode-mcp","version":"1.6.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.6.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"1c90e059d9b8ff0f1e430b48058477d4b6ad72b8","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.6.1.tgz","fileCount":51,"integrity":"sha512-zzzx5rgp/2/2FBzEkT6+8IgW9yUxwPdjJSSCGIWsT2s57i4wphWijvjU/UqVEikCAaviPQsGS1wQzWmaxPeztQ==","signatures":[{"sig":"MEUCIQDUWoMVS+8p20icIIALXCTLYam0tqVyCu/hhtpBtRrgEwIgEu7z8YbLvlqRBmdc6WKr9mCDTBmUPHlx26XfVjnxxfY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214605},"main":"dist/index.js","type":"module","gitHead":"e4da61fc6f9f213a8598454af80ea56656038604","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.6.1_1787292081914_0.31992758363213336","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"flycode-mcp","version":"1.7.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.7.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"5d602e237d38946dca475d846655e3d054b1e15b","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.7.0.tgz","fileCount":55,"integrity":"sha512-0tYou3wMZF6huhKsotsYBwwQHJDoKcDjX0R59aUU4U0Cm4+a1olWNm1F7mVjVd7nU4y1tfAwxQQ5lX9G1LBAog==","signatures":[{"sig":"MEQCIGjeOjH5Cxz7PeveQKQabZc8nASYOyjIK9+gbNjdepbUAiBwVihrlfXmgRlcw6F9lCoazz3zglQjRsZ/vOUlisoAdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240585},"main":"dist/index.js","type":"module","gitHead":"989a6a5637f761b59700b6e5d0212923eaf6f1cb","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.7.0_1787883847641_0.1780986504502855","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"flycode-mcp","version":"1.8.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.8.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"bc668a43d89866f3eb609aedd70595efdd932f8c","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.8.0.tgz","fileCount":61,"integrity":"sha512-LywSuu4KIx7zjc7goPjuhukr4Yuwj7BNJdmGWROTtYX1OFAwz88dS+Xd+oyTjH/oDeOIEennkL6ACSvmrwxHRQ==","signatures":[{"sig":"MEUCIQCJfFs1Vjwq7NTCXBXVIObO96wZP6kV3WISK1ZFazcsqwIgC+fJ0Pfcwm2KY/nIeORJVx1G4rsoan1Z3qjfHAtfNGY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254543},"main":"dist/index.js","type":"module","gitHead":"0ff61eda7e1485663a41c8811c78d956c6e6db78","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.8.0_1787899852605_0.04974768378891126","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"flycode-mcp","version":"1.8.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.8.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"d93d9d7767913719d7d13522cbbf6ec6d3915e73","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.8.1.tgz","fileCount":61,"integrity":"sha512-JJgdhCYOLn0IJvOwz9G3Q6J31mxzkPEIJdjAkb6YnxgS1kT1rP4X7QZgf/8CXW7sOfu62cZ1U/FgPACgMiayzA==","signatures":[{"sig":"MEQCIDQkX3dlCVxKXII78x4aWD+HCXiJU914deKC/87Pgv84AiAiVzBTnryp6KJ9LcnzANMfYBu/7Bree9Uxowc4WFMxWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254624},"main":"dist/index.js","type":"module","gitHead":"4224becc2511a09fe7756bbbc13ca9ad9cacd275","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.8.1_1788170070577_0.4563821678815507","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"flycode-mcp","version":"1.9.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.9.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"9ea2ff85b8a6d9070044c1279abc7f144288e28d","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.9.0.tgz","fileCount":63,"integrity":"sha512-dDJp+xx/Iyod8Kmzffd6/geZXKEkdwVDrzGazwby3bCVMiK64zI3YaC77ZmMAbA9E8OeTZSy+xXsGv1JILRZEw==","signatures":[{"sig":"MEQCIBhogIIkpkHOVpIBpuso41nbUzU0xvB9g64axZwvpmEPAiBxWsEby91wOHtNwPqx3CUjBfhn6wTrzlxF/BqkiGVSXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316300},"main":"dist/index.js","type":"module","gitHead":"4c1e190f2c9a1e474d6bce277e8c312214b1e6eb","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.9.0_1788769152188_0.5053486489340597","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"flycode-mcp","version":"1.9.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.9.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"d95ee5f3d1401535989390b10ddfd24d49f741ec","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.9.1.tgz","fileCount":63,"integrity":"sha512-lypYvXIR9JO0whTjoZdkO1VdndHmDWtxn6ssplbwkJUODaB5YHYv/5xGIRQSf9KozJ9g4EQhJCdA15UEwIV3Zw==","signatures":[{"sig":"MEUCIBb7EMvzLzLLbzn+9jVgl7OmvQeOtwwHkhixbb+yFp3OAiEAuXmsmDWQl18WNz80no3lPM98ifqBTcxbnRn5UUz4oMA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316398},"main":"dist/index.js","type":"module","gitHead":"8e970ad129e671807648d53ca775c32546391cf5","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.9.1_1788830048502_0.3442646496000257","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"flycode-mcp","version":"1.9.2","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.9.2","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/index.js"},"dist":{"shasum":"b7399abf7afc72624b2744b3f9b2b495fb4593cb","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.9.2.tgz","fileCount":63,"integrity":"sha512-NckZzOHZJJsBTpAEF20PW6MFCPubTRVrZOMeYqG2NSVpEfbQiehsxrKAa2fOGzY4lgrwdSyCp22GSKkxru2E5g==","signatures":[{"sig":"MEYCIQCWLJM0XrtGa1rjdzkFc7qNkm7ZT6Od0hEI80X3a9zCRgIhAK3k50QCsDW53EFf9s1N9pRl2VZLYgikeuQaEDuEhbUl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316886},"main":"dist/index.js","type":"module","gitHead":"ee78088688b570e65aa99e5f0c6247bba4042311","private":false,"scripts":{"dev":"tsc -w -p tsconfig.json","build":"tsc -p tsconfig.json","start":"tsc -p tsconfig.json && node dist/index.js"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.9.2_1788852542309_0.785058418260711","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"flycode-mcp","version":"1.10.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.10.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"ed362cc9f0178049f7fdf8dfeccdb04917af3b64","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.10.0.tgz","fileCount":4,"integrity":"sha512-2qKtrrLBmtI9UknUywiiftlp62+OnNZATOl702X4zbab2/xA4wNc90EnteJ9/GwwZZGQIQrPXaX7lPNZ4TmA4Q==","signatures":[{"sig":"MEQCIFc7qm6GajVcXM5TBBWCUkv86aVKI7WC/s8IonQ4fg/8AiA4LHBeKOWidYBoHVW8jxUJlhuY3/8W2boIFRbecyquMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":197519},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"6f7b071461d0e45848ba63f333d01a890936a866","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.10.0_1789302334349_0.5814076364825425","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"flycode-mcp","version":"1.11.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.11.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"c335e43626321555ead2f435bc0cc7c95719ec4a","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.11.0.tgz","fileCount":4,"integrity":"sha512-LRooQQvOo1WHxuoxStP9skUxLi4JrGyCc4MBgMvIhU8M1+T3IbD1nhyvi4bqIGxAdYdInOcDLX+MbuzYo3paIQ==","signatures":[{"sig":"MEUCIQCc7w18V2jeyOfxXM2qsP1dLnjyzvpTDEKw9gxUFisY3wIgGUnpGG0T2FAzF91XXIj9snwpcpHtOBClsVQCY9KZ4O0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241526},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"12dad453399082a12e4cc9b8f49db0f76e46f0a4","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.11.0_1789612720702_0.6026441653188412","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"flycode-mcp","version":"1.11.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.11.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"fe51d5096a7fcf266458f10627bb8129b8ab1bc7","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.11.1.tgz","fileCount":4,"integrity":"sha512-Z4e7BVEJyya7cqeT7nfdhmik8fzb06MwB10vk0aqKGVLw6qZtkuc9LD3Z8fTrpD2O2K47+cKUvogMCBAMBSfYA==","signatures":[{"sig":"MEUCICQDPtpumXNWfxg1ILaElXWAWP2Ntxt6saRb+eFTFHMWAiEAynLicBkn14Ad7i+fC70KbatKAdGek2QA3ET2h16povw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCaIodORI7/9FDOjHSWST7VdueaX6uDc6Q2Mr3ObRrLvAIhAI0H/WKipVyfg2kBx9VzIWMumzdNeEYicGIpInlx8786","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240260},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"6e7907f3b35c9642ea19f2c0c73b743d374d6261","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"10.9.2","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.11.1_1789888090701_0.02069604343707976","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"flycode-mcp","version":"1.12.0","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.12.0","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"4ffb6ad3a42b5827a6d9eabfcc089c24259403ec","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.12.0.tgz","fileCount":4,"integrity":"sha512-18zrPueeNyeLH6W1nW1UL5WLVsRrPxzuEg+yC+xv3gxu+MQ5kyff33cid0O9dm06RwyjP6znWTsvxBJcw2ttQQ==","signatures":[{"sig":"MEYCIQCEw1yeRslM1LUBDLlBg/ApZDHoucB3eTY9a2u8ku3dhQIhAPH8+JNlLd9imCrsFLs5/43qc/YMSfskWE7ugYnyOiwG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEr2JUV/OesVn4dguswwcin8AuMTWppXDeeZJ3+SfnfXAiEAhjwsCnl/6+OZSerNzZhzPMqkAZzUV7nr7uUnj828Fvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":280701},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"12464639bc84b4926b0dec3ad8dd0e257581f69b","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"11.19.0","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.12.0_1790043210271_0.38196389760168126","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"flycode-mcp","version":"1.12.1","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.12.1","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"049f8681a92c113ad14d528274488801307a840f","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.12.1.tgz","fileCount":4,"integrity":"sha512-iCelY9kHjlOKgt4gGXPokdpZqpLb9Wlc4ogYoW6o+nw9D5EtGFyCZvDFdY2htPwohdnd+sqhN9/bX2RKaEErHw==","signatures":[{"sig":"MEYCIQDlht401nrJCu8XZPxNnh7NPxk/4dso8J2d48oH+9CvLQIhALd9ZDkWJhXt3l1II17nJjQWN2/98EPHoufDaJex7eZu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDMSoZXmjB+sdtiWo4PcAJMHLodMAIZGDQXPQERfmPnAAiEAoj2d4xmXmmW2/7dqo5s8ZaNRpic2HobKBGQlU8FCj/4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":285982},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"1c063f7af9dad148c26f9368034b79be035e0f98","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"11.19.0","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.12.1_1790072712441_0.20989527249298345","host":"s3://npm-registry-packages-npm-production"}},"1.12.2":{"name":"flycode-mcp","version":"1.12.2","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.12.2","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"372d6b1d6d6f4550e7b8ea41bb325115a7f32019","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.12.2.tgz","fileCount":4,"integrity":"sha512-RMDAs0dWEj1w0uTOmquTS6/l+mnMkWBzBdAyLSTFkBTANiwqcAcjvX6mtik9MWcY2vXV+FMM2edr1+6zqFTRDA==","signatures":[{"sig":"MEQCIAyCfS4W1edgYl4lUXpwTGEaoNe6LSqJg8b9z6jpKOy+AiAts08OeNvPDlQ+AUkNevM9TaDGCx0fXFCa7Qm/BsUBsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBl5AYPwYnUlzZFX+Ct4bYE3v2j8Um+kANgam/aFRiXxAiEAzM1bK56y9RSDf5rRdXTErbc6zF/izeBZeR4+EG72TtI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291190},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"cba9ea20d3b9543d5196f510c66104d67ddddf1b","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"11.19.0","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.12.2_1790135228494_0.11522648215820586","host":"s3://npm-registry-packages-npm-production"}},"1.12.3":{"name":"flycode-mcp","version":"1.12.3","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.12.3","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"f85ea83f6dc0f88b5ab5950918c2faaf7949e662","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.12.3.tgz","fileCount":4,"integrity":"sha512-Gz3ZZfC8DI6/nkwgnkiiUTOHm+NEorjHQSso2j5t0FY+GxL1xxy7DagmOXRvFuw6bYCf8mBrpWNfA+s3SDFlZQ==","signatures":[{"sig":"MEUCIDmtSkZQyR2EnSL2Qml5dUoTWnTtotHfmy076WjwEur4AiEA/0urdYWAbzOi0ATHZN3XehFaCxpduxFuk1H7eZphBoE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDDbNnDdft6aXe/LV9WNwxkT4G6iA2tOHDVUa6glJV5gAiAgHutjeROmpsetaswSOhC5hxIb48jHrXcVckTUtc1OQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257596},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"f6486f7588a3407576191bf1422842a81996bb8a","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","docs:dev":"npm --prefix website run docs:dev","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","docs:build":"npm --prefix website run docs:build","test:watch":"vitest","docs:preview":"npm --prefix website run docs:preview","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"11.19.0","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.12.3_1790158296876_0.06769853450927243","host":"s3://npm-registry-packages-npm-production"}},"1.12.4":{"name":"flycode-mcp","version":"1.12.4","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.12.4","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"fa7aee05f8fc20a5e0f482dfa60710be6c54c74b","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.12.4.tgz","fileCount":4,"integrity":"sha512-W+MMKrB0OuyhYY4GX11d6Z28gSR3sZTohKVAGHJChGdWSC+ykTvhb2XST/XMiNdCrfsSirkgUWQeeUMYw+1H3A==","signatures":[{"sig":"MEUCIBB01V0k5L3P1+gsu2jwLewb0sJyHxX5H0nFhQQ9KnNSAiEAvUOid1nH1sgfw9ytPhRhWl9eQ6ZTMhA97B8nLz6OTxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDHTmTklxxvoPAOjjLL73qV9u8vGR9JuDHXaXS/hY69gAIhAIbOAwzfu6h3MK6PWXNsNtVLlum1g+rxB79Ig9d2cP56","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266509},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"09281ee622d1ac985ab6865043aafb94cefdf694","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","docs:dev":"npm --prefix website run docs:dev","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","docs:build":"npm --prefix website run docs:build","test:watch":"vitest","docs:preview":"npm --prefix website run docs:preview","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"11.19.0","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.12.4_1790220544142_0.45197373299743226","host":"s3://npm-registry-packages-npm-production"}},"1.12.5":{"name":"flycode-mcp","version":"1.12.5","keywords":["flycode","mcp"],"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","_id":"flycode-mcp@1.12.5","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"c472ba2a26650fda05ce7cac569f4d771c9184f2","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.12.5.tgz","fileCount":4,"integrity":"sha512-2bLOpHL1RVdcb+gp9nGxWhLek5g1ToQYqUFiVTsL/3F2CosaHPqjIANaEbIn/UpBKaP9EKJi+YcEQg+S3mBLmQ==","signatures":[{"sig":"MEUCIF/broN/iOFKfN3lMtc6uBlp9zoWPgKCOcO195CoOikOAiEAjfW1aqLv3tQEaPpVtalq6qU2qrsJppZEJqwpwimT1KI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCc1anEaMMq0OUEXwLId2n3lt94lyAhn9Dq8vOvz/85MwIhAPJY7pGJnvsnxvvjlMt0ynr3JlNLo4FV8shQ0+WYQL97","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269958},"main":"dist/flycode-mcp.min.js","type":"module","gitHead":"990a61fe504900a21389c463335d81d9575f92b1","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && npm run typecheck:test && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","docs:dev":"npm --prefix website run docs:dev","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","docs:build":"npm --prefix website run docs:build","test:watch":"vitest","docs:preview":"npm --prefix website run docs:preview","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"_npmVersion":"11.19.0","description":"A MCP Server for flycode language.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flycode-mcp_1.12.5_1790227711024_0.30023446705189416","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"_id":"flycode-mcp@1.13.0","bin":{"flycode-mcp":"dist/flycode-mcp.min.js"},"dist":{"shasum":"cb1657b71935d4dc21440a9ef3ea183d9fd2584f","tarball":"https://registry.npmjs.org/flycode-mcp/-/flycode-mcp-1.13.0.tgz","fileCount":4,"integrity":"sha512-kwgharbb/wqV1xmAi7Osiu0KWizrrMXnCgfeERu6vNPFyzhmvWgfNPkVqgaOEVK+15NJ9qAucyQx4TcRryn0+w==","signatures":[{"sig":"MEUCIQCeW5gn8bqQjk6FP+AP+D6/GTIakOgD/sUSLSGYLSrtdAIgE4Li1xPdp07fBHjTnWPZETBSZCyNfUIyFqGTQPckKME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDhI5Hi3uhpYGDBEOrk0ORDWLuKunnJiz0IlmkBGEc7BAiEA7blsKH1H6ufmHpCj4wpHkin5ldlOzYQru6RZEdSnShA="}],"unpackedSize":284185},"main":"dist/flycode-mcp.min.js","name":"flycode-mcp","type":"module","author":{"name":"Trust会长"},"gitHead":"81d1cc968f2d199b18800c26a9534a710bbd1e56","license":"AGPL-3.0-or-later","private":false,"scripts":{"dev":"node scripts/build.mjs --watch","test":"vitest run","build":"npm run typecheck && npm run typecheck:test && node scripts/build.mjs","start":"npm run build && node dist/flycode-mcp.min.js","coverage":"vitest run --coverage","docs:dev":"npm --prefix website run docs:dev","test:live":"vitest run test/integration --reporter=verbose","test:unit":"vitest run test/unit","typecheck":"tsc -p tsconfig.json","docs:build":"npm --prefix website run docs:build","test:watch":"vitest","docs:preview":"npm --prefix website run docs:preview","prepublishOnly":"npm run build","typecheck:test":"tsc -p tsconfig.test.json --noEmit","test:integration":"vitest run test/integration"},"version":"1.13.0","_npmUser":{"name":"iamtrust","email":"1276492136@qq.com"},"keywords":["flycode","mcp"],"_npmVersion":"11.19.0","description":"A MCP Server for flycode language.","directories":{},"maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","axios":"^1.19.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","vitest":"^5.0.0","esbuild":"^0.28.2","ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^26.1.2","@vitest/coverage-v8":"^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flycode-mcp_1.13.0_1790922012867_0.7829140513563433"}}},"time":{"created":"2026-08-12T08:36:34.766Z","modified":"2026-10-02T06:20:13.113Z","1.0.0":"2026-08-12T08:36:35.199Z","1.0.1":"2026-08-12T08:50:32.687Z","1.0.2":"2026-08-12T08:55:56.399Z","1.0.3":"2026-08-12T09:25:36.817Z","1.0.4":"2026-08-12T09:26:17.862Z","1.0.5":"2026-08-12T10:02:21.545Z","1.0.6":"2026-08-13T06:06:45.200Z","1.1.0":"2026-08-13T10:02:35.899Z","1.1.1":"2026-08-17T01:51:56.288Z","1.1.2":"2026-08-17T06:22:36.373Z","1.2.0":"2026-08-17T06:23:41.414Z","1.3.0":"2026-08-18T03:27:49.742Z","1.4.0":"2026-08-18T08:08:35.278Z","1.5.0":"2026-08-18T09:43:02.860Z","1.5.1":"2026-08-19T03:35:02.767Z","1.5.2":"2026-08-20T06:54:41.020Z","1.6.0":"2026-08-21T05:37:01.120Z","1.6.1":"2026-08-21T06:01:22.087Z","1.7.0":"2026-08-28T02:24:07.788Z","1.8.0":"2026-08-28T06:50:52.745Z","1.8.1":"2026-08-31T09:54:30.708Z","1.9.0":"2026-09-07T08:19:12.423Z","1.9.1":"2026-09-08T01:14:08.654Z","1.9.2":"2026-09-08T07:29:02.434Z","1.10.0":"2026-09-13T12:25:34.471Z","1.11.0":"2026-09-17T02:38:40.851Z","1.11.1":"2026-09-20T07:08:10.774Z","1.12.0":"2026-09-22T02:13:30.367Z","1.12.1":"2026-09-22T10:25:12.521Z","1.12.2":"2026-09-23T03:47:08.590Z","1.12.3":"2026-09-23T10:11:36.985Z","1.12.4":"2026-09-24T03:29:04.261Z","1.12.5":"2026-09-24T05:28:31.111Z","1.13.0":"2026-10-02T06:20:12.959Z"},"author":{"name":"Trust会长"},"license":"AGPL-3.0-or-later","keywords":["flycode","mcp"],"description":"A MCP Server for flycode language.","maintainers":[{"name":"iamtrust","email":"1276492136@qq.com"}],"readme":"# flycode-mcp\n\nA [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for the **FlyCode** language platform\n（Flycode / 玄瞳科技 APaaS 平台）。它把 APaaS 平台的实体、领域相关能力以 MCP 工具的形式暴露给支持 MCP 的客户端\n（如各类 AI 编程助手），让模型能够直接检索实体、业务领域中的逻辑定义。\n\n---\n\n## 特性\n\n- 基于官方 `@modelcontextprotocol/sdk` 实现，使用标准 `stdio` 传输协议。\n- 启动即完成 APaaS IDE 平台鉴权链路：账号登录 → 获取租户信息 → 获取 IDE Token。\n- 内置统一请求层 `request`，自动按请求类型（`center` / `tenant` / `business`）切换中心服务地址、当前租户连接地址或当前租户业务地址，并自动注入鉴权 Token：`business` 类型主要用于 H5 表单查询（需以特定预览账号 token 发起）。\n- 当前提供工具：业务逻辑类 `page_model_logic_directories`（分页查询业务逻辑所属目录，返回各业务模型目录项，含 modellogic 用到的 modelcode）、`page_model_logic_list`（分页查询业务逻辑列表）、`get_model_logic`（查询单个业务逻辑详情）、`save_model_logic`（新增业务逻辑：保存完整 `LogicResult`）、`patch_model_logic`（局部补丁修改业务逻辑的 input/output 结构或顶层元数据，无需回传整份对象，替代旧版轻量保存）、`str_replace_flycode`（批量局部替换 flycode 脚本，或用 `rewrite: true` 整份重写）；实体类 `page_entity_list`（分页查询实体列表）、`get_entity`（查询实体详情）；表单 / 页面类 `page_form_directories`（查询表单所属目录，取回的 `directorytypecode` 即表单 `pageinfo.directorytypecode` 的取值；该接口不支持分页、全量数百条，故在服务层强制收敛——默认最多回 30 条、硬上限 200 条，未传筛选条件时只回顶级目录，并回 `truncated` / `hint` 提示）、`page_form_list`（分页查询表单 / 页面列表）、`get_form`（查询表单 / 页面详情）；H5 表单类 `page_h5_form`（分页查询 H5 表单列表）、`get_h5_form`（查询 H5 表单详情，含 `confjson` 内容 JSON）；函数类 `page_function_list`（分页查询 flycode 函数列表）、`get_function`（查询 flycode 函数详情，含 `confjson` 函数代码内容）；数据库函数类 `page_database_function_list`（分页查询 PostgreSQL 自定义数据库函数列表，列表结果随行返回函数体 `functionscript`）；SQL 执行类 `run_sql`（在业务库中执行一条 SELECT 查询，返回查询结果数据与结果总数）；通用类 `generate_unique_code`（生成唯一编码，用于新建实体 / 领域 / 表单时生成 JSON 中的 `code` 字段）。\n\n---\n\n## 工具渐进式披露（Progressive Disclosure）\n\n客户端在 `tools/list` 阶段会把全部工具的 schema 一次性塞进上下文，受预算 / 截断策略影响可能只保留一部分，导致 AI 看不到另一些工具。本服务采用 MCP 协议原生支持的渐进式披露机制缓解该问题：\n\n- **始终可见（连接后）**：`mcp_catalog`（工具目录）、`mcp_activate`（启用 / 收起域）两个网关联工具，外加 `core` 域的 `run_sql`、`generate_unique_code`，共 4 个工具。\n- **按需解锁**：其余工具按能力聚为 `entity` / `form` / `logic` / `function` / `h5` 五个域，默认隐藏。AI 先调 `mcp_catalog` 了解有哪些域与工具，再调 `mcp_activate('form')` 启用某域；服务端随即推送 `tools/list_changed` 通知，合规客户端重拉清单后即见该域工具。亦可 `mcp_activate('form', true)` 收起以回收上下文。\n\n实现要点：`src/tools/registry.ts` 预注册全部工具并维护「域 → 工具」映射，progressive 模式下对非核心域工具默认 `disable()`；`enable()/disable()` 由 `@modelcontextprotocol/sdk` 的 `RegisteredTool` 提供，并自动触发 `tools/list_changed`。回归用例见 `test/unit/gateway-registry.test.ts`。\n\n> **约定（勿回退）：`mcp_catalog` 不返回工具的入参 schema**，`registry.focus()` 只回「工具名 / 说明 / 启用状态」。原因有二：① 工具入参的 zod schema 经 SDK 转 JSON Schema 后会被**完全内联展开**（递归结构实测最大深度 28 层、`$defs` 为 0），再叠加 `JSON.stringify(..., null, 2)` 的缩进，logic 域单次 focus 曾返回 **504KB**（线上实测 526KB）；② 该信息与「启用后客户端重拉的 `tools/list`」**完全重复**，而工具返回值一旦进入上下文就无法撤回、`tools/list` 反倒可由客户端自行管理。参数细节以 `tools/list` 为准。\n\n> **两道防线**：① 工具返回体一律**紧凑序列化**（`JSON.stringify(data)`，不带缩进）——全仓库已无 `null, 2` 式美化输出；② `mcp_catalog` 返回体带**硬上限熔断**（`CATALOG_MAX_CHARS` = 32KB），超限会自动分级降级：先截断工具描述 → 再清空描述只留工具名 → 最后才丢弃工具清单，并在响应里回 `truncated` 与 `note`。降级顺序刻意牺牲描述、保住工具清单，因为「哪些工具可用」才是 catalog 的核心价值。回归用例见 `test/unit/catalog-budget.test.ts`。\n\n环境变量：\n\n- `PROGRESSIVE_DISCLOSURE=on`（默认）：启用渐进式披露。\n- `PROGRESSIVE_DISCLOSURE=off`：退化回「全部 22 个工具始终启用」的原有行为，作为客户端未实现 `tools/list_changed` 重拉时的兜底。若 `mcp_activate` 启用某域后调用域工具仍报 `tool not found`，说明当前客户端不支持该通知，请设为 `off`。\n\n---\n\n## 环境要求\n\n- Node.js ≥ 18（使用了 ES Module 与 `fetch`- 无关的现代语法，建议 18+）\n- npm（或 pnpm / yarn）\n\n---\n\n## 安装与构建\n\n```bash\n# 安装依赖\nnpm install\n\n# 类型校验(tsc -p tsconfig.json，tsconfig 设 noEmit) + esbuild 经 scripts/build.mjs 打包压缩为单文件 dist/flycode-mcp.min.js\nnpm run build\n\n# 仅做类型校验（不产出）\nnpm run typecheck\n\n# 开发模式：esbuild --watch 持续重建产物\nnpm run dev\n```\n\n构建产物为单个压缩文件 `dist/flycode-mcp.min.js`（已在 `package.json` 的 `bin` 中注册为 `flycode-mcp`；minify 后折叠为单行以减小体积，运行时依赖 `@modelcontextprotocol/sdk` / `axios` / `zod` 保持外置）。\n\n> **注意（构建期易踩坑）**：单行折叠由 `scripts/collapse.mjs` 完成，**不可**退化为 `code.replace(/\\n/g, '')`。\n> esbuild 为省一个字符会把含换行的字符串打印成「内含真实换行字符的模板字符串」（`` `\\<LF>` ``，而非转义写法 `\"\\n\"`），\n> 无差别删除换行会把字符串内部的换行一起吃掉（`'\\n'` → `''`），导致 `str_replace_flycode` 保存的 flycode 被整段压扁、\n> 工具描述的多行提示词被粘成一行（2026-09-20 线上事故根因）。\n> 该模块用扫描器区分「代码层换行」与「字符串内换行」，后者转写为 `\\n` 转义；\n> 结构无法可靠判定时整段放弃折叠，并由 `node --check` 兜底回退，回归用例见 `test/unit/build-collapse.test.ts`。\n\n---\n\n## 配置\n\n服务启动时需要一组连接参数，格式为**命令行参数字符串**，以 `&` 拼接的 `key=value` 形式传入（与 `URLSearchParams` 解析一致）：\n\n```\nusername=<账号>&password=<密码>&tenantCode=<租户号>&envName=<环境名>\n```\n\n参数说明：\n\n| 参数          | 必填 | 说明                |\n| ------------- | ---- |-------------------|\n| `username`    | ✅   | APaaS IDE平台登录账号   |\n| `password`    | ✅   | APaaS IDE平台登录密码   |\n| `tenantCode`  | ✅   | 租户号（用于匹配目标租户）     |\n| `envName`     | ✅   | 环境名（用于在租户下定位具体环境） |\n\n> ⚠️ **安全提示**：密码为明文传入，请勿在公开环境或版本库中泄露。仓库已通过 `.gitignore` 忽略 `mcp.json` 等含凭据文件。\n\n---\n\n## 客户端接入示例\n\n在你的 MCP 客户端（如 Cursor、Claude Desktop、VS Code 插件等）的配置中添加一个 server。\n**请使用你自己真实的账号信息替换占位符**，不要提交真实凭据：\n\n```json\n{\n  \"mcpServers\": {\n    \"flycode-mcp-你的环境\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"flycode-mcp\",\n        \"username=你的账号&password=你的密码&tenantCode=你的租户号&envName=你的环境名\"\n      ]\n    }\n  }\n}\n```\n\n---\n\n## 使用说明书网站（website/）\n\n本仓库在 `website/` 子目录下附带一份 **面向终端用户的使用说明书网站**（不是给贡献者看的开发文档，而是给「通过 AI 客户端使用本 MCP 的普通用户」看的图文向导）。它用 [VitePress](https://vitepress.dev) 构建，整体二次元卡通风格、带轻量动画，内容是本 README 的「小白友好版」：首页 → 快速开始 → 接入 WorkBuddy / Cursor / Claude Desktop → 准备账号 → 能力清单 → 常见场景 → 排错 FAQ → 版本更新记录。\n\n> 说明：本 README 是开发者与工具行为的权威参考；`website/` 是给最终用户阅读的上手向导，两者内容定位不同、需随工具变更同步更新。\n\n### 技术栈与目录\n\n- 构建工具：**VitePress 1.6.x**（Markdown 写文档、零前端框架门槛，产物为纯静态 HTML）。\n- 自定义二次元主题：`website/.vitepress/theme/style.css`（柔和粉紫渐变、圆角卡片、漂浮星星、星空暗色、动效，且尊重系统「减少动态效果」偏好）。\n- 卡通吉祥物：`website/public/mascot.svg`（SVG 自绘，无位图授权风险）。\n- 站点图标（favicon）：`website/public/favicon.svg`（浏览器页签，与吉祥物同源设计）+ `favicon.ico` / `favicon-32x32.png` / `apple-touch-icon.png`（位图兜底，由 `scripts/gen-favicon.py` 从同一设计生成）。\n- 内容源码：`website/*.md`（首页、`guide/`、`capabilities/`、`cookbook.md`、`faq.md`、`changelog.md`）。其中 `changelog.md` 为**版本更新记录**，按 git tag 从新到旧整理每个版本的变化（面向使用者表述）。\n\n### 本地预览 / 构建\n\n仓库根 `package.json` 已内置快捷脚本（通过 `--prefix website` 转发）：\n\n```bash\n# 本地开发预览（热更新，默认 http://localhost:5173）\nnpm run docs:dev\n\n# 生产构建（纯静态产物输出到 website/.vitepress/dist/）\nnpm run docs:build\n\n# 预览构建产物（默认 http://localhost:4173）\nnpm run docs:preview\n```\n\n也可进入子目录直接操作：\n\n```bash\ncd website\nnpm install      # 首次需安装 VitePress 依赖\nnpm run docs:dev\n```\n\n### 部署\n\n站点产物为纯静态文件，可托管到任意静态托管服务（如 GitHub Pages、腾讯云 COS 静态网站托管）。部署脚本随平台后续补充，源码与构建命令不变。\n\n---\n\n## 提供的工具\n\n### `page_model_logic_list` — 分页查询业务逻辑列表\n\n根据查询条件分页查询 IDE 领域中的业务逻辑定义（只读、幂等）。\n\n**输入参数：**\n\n| 参数      | 类型     | 必填 | 说明                       |\n| --------- | -------- | ---- | -------------------------- |\n| `keys`    | string   | 否   | 业务逻辑名，模糊匹配       |\n| `keywords`| string   | 否   | 代码中的关键字，模糊匹配   |\n| `page`    | string   | 否   | 当前页，从 1 开始，默认 1  |\n| `rows`    | string   | 否   | 每页记录数，默认 20        |\n\n**返回：** 业务逻辑列表的 JSON（`resp_data`），包含 `modellogiccode`、`modellogicname`、`modelname`、`functionname`、`status` 等字段。\n\n### `get_model_logic` — 查询业务逻辑详情\n\n根据业务逻辑的编码 `modellogiccode` 查询其完整详情（只读、幂等），包括 flycode 脚本、输入输出参数结构、操作步骤等。底层调用 `logicClient.getModelLogic`。\n\n**输入参数：**\n\n| 参数      | 类型     | 必填 | 说明                       |\n| --------- | -------- | ---- | -------------------------- |\n| `modellogiccode` | string | 是 | 要查详情的业务逻辑的编码 |\n\n**返回：** 业务逻辑详情的 JSON（`resp_data`），主要字段：\n\n- `modellogicname` / `modellogiccode` / `modelcode`：业务逻辑标题、编码、所属业务模型编码\n- `actiontype` / `actioncategory` / `execmode` / `executionmode`：操作/行为类型、执行方式\n- `input` / `output`：flycode 内置对象 `IN` / `OUT` 的结构与字段属性（含 `propertytypecode` 字段类型映射）\n- `operations`：操作步骤，其中 `templateparams.flycode` 内含具体的 flycode 脚本代码\n- `description` / `message` / `status` 等\n\n### `save_model_logic` — 保存业务逻辑（完整全量保存；仅新增，或全量 JSON 很小如微服务）\n\n将一条业务逻辑保存到 APaaS 平台（非破坏性写入）。本工具只适合两类场景，**其余改动请用另两个工具**：\n\n① **新增业务逻辑（最常见）**：首次创建一条业务逻辑时，回传从 `get_model_logic` 模板构造或新建的完整 `LogicResult` 对象（含 flycode 脚本、input/output、标题等），连同提交信息 `commitMessage` 一起保存；\n② **已有逻辑的全量 JSON 很小**（典型如微服务 `actioncategory=2`，往往只有几行）：`patch_model_logic` / `str_replace_flycode` 都没有针对微服务的专用 op，直接用本工具全量保存更省事。\n\n底层调用 `service/logic.ts` 的 `saveModelLogic`，再经 `logicClient.saveModelLogic` 以 `overwrite: false`（不覆盖他人最新版本）提交到 `/bizserv/bizmodel/saveModelLogic`。\n\n> **编辑已有逻辑（JSON 较大，如普通 flycode 接口）请勿用本工具回传整份对象**：回传整份 `LogicResult` 上下文占用极大、易因超长被截断，且易误改不相关字段。微服务 / 导出等 JSON 很小的已有逻辑可直接全量保存（见上文②）。\n> - 改 flycode 脚本 → 用 `str_replace_flycode`\n> - 改 input/output 结构或顶层元数据 → 用 `patch_model_logic`\n\n**输入参数：**\n\n| 参数           | 类型     | 必填 | 说明                                                                                                       |\n| -------------- | -------- | ---- | ---------------------------------------------------------------------------------------------------------- |\n| `logic`        | object   | 是   | 完整的业务逻辑 JSON 对象（`LogicResult`）。通常来自 `get_model_logic` 的返回，修改后原样回传；微服务 / 导出 / 内部函数等各类结构均兼容（未声明字段会被保留） |\n| `commitMessage`| object   | 是   | 提交信息，含以下字段：                                                                                      |\n| `committype`| enum     | 是   | 提交类型：`saverecord` / `feature` / `fix` / `stylefix` / `refactor` / `testfix`（与 `committypetext` 一一对应） |\n| `committypetext`| enum | 是   | 提交类型名称：`保存记录` / `新功能添加` / `bug修改` / `样式修改` / `重构` / `测试`（与 `committype` 一一对应） |\n| `msgbody`   | string   | 条件 | 提交内容。`committype=saverecord` 时忽略（服务端自动填入 `yyyy-MM-dd hh:mm` 格式的当前时间）；其他类型必填，按 git 提交规范书写 |\n\n**返回：** 保存操作的结果消息（服务端返回的 `resp_data` 字符串；失败时返回错误体 JSON）。\n\n> 注：保存后建议重新 `get_model_logic` 核对最新版本。`committype=saverecord` 的提交时间由服务端写入，无需在 `msgbody` 中重复填写。\n\n### `patch_model_logic` — 局部补丁修改业务逻辑（input/output/元数据，替代旧版 simple_save）\n\n以结构化补丁（delta ops）局部修改业务逻辑的 **input/output 结构或顶层元数据**，**无需回传完整 `LogicResult`，大幅节省上下文**（flycode 脚本不在本工具范围内，由 `str_replace_flycode` 负责）。底层调用 `service/logic.ts` 的 `patchLogic`：先按 `modellogiccode` 拉取最新完整对象，在内存副本上按顺序合并 ops，再一次性全量保存（服务端仅提供全量覆盖保存接口，故仍是一次性 `overwrite: false` 提交）。\n\n**事务性**：ops 具备事务性——全部 op 预演成功才落库，任一 op 失败（`PARAM_NOT_FOUND` / `PROP_NOT_FOUND` / `DUP_NAME` / `INVALID_PARAMS`）则整批中止、**不产生任何写入**。整批只发起一次保存请求，不存在「写一半再回滚」的中间态。改动较大或不确定时建议先 `dryRun=true` 预览摘要。\n\n**输入参数：**\n\n| 参数            | 类型   | 必填 | 说明                                                                                  |\n| --------------- | ------ | ---- | ------------------------------------------------------------------------------------- |\n| `modellogiccode`| string | 是   | 目标业务逻辑编码（即 `get_model_logic` 返回的 `modellogiccode`）                       |\n| `ops`           | array  | 是   | 补丁操作数组，**至少一个元素**（`min(1)`），按数组顺序依次作用于上一步结果（见下表）    |\n| `commitMessage` | object | 是   | 提交信息，整批 ops 共用一个；结构与 `save_model_logic` 的 `commitMessage` 一致          |\n| `dryRun`        | boolean | 否  | 只预演输出 diff、不落库，默认 `false`                                                 |\n| `verify`        | boolean | 否  | 保存后是否回读校验所有改动已生效，默认 `true`                                          |\n\n`ops[]` 共 12 类（按 `op` 字段区分的 discriminated union）：\n\n**input/output 结构类（6 类）**\n\n| `op`             | 必填载荷                            | 说明                                                                             |\n| ---------------- | ----------------------------------- | -------------------------------------------------------------------------------- |\n| `add_param`      | `target`(`input`/`output`) + `param`(单条 `LogicParameters`) + 可选 `position` | 向 input/output 追加一条参数（增加一个 input / 增加一个 output）               |\n| `remove_param`   | `target` + `name`                   | 按 `name` 从 input/output 删除整条参数（删除一个 input / output）                |\n| `set_param_attrs`| `target` + `name` + `patch`(`Record<string,unknown>`) | 按 `name` 定位参数，浅合并其顶层属性（如 `datatype`/`objectcode`/`objectname`） |\n| `add_property`   | `target` + `paramName` + `property`(单条 `LogicParameterProperties`) + 可选 `position` | 向指定参数的 `properties[]` 追加一个字段（增加 input 属性 / 增加 output 属性） |\n| `remove_property`| `target` + `paramName` + `propertyName` 或 `propertyCode`（二选一） | 从指定参数的 `properties[]` 删除一个字段                       |\n| `replace_property`| `target` + `paramName` + `propertyName`/`propertyCode` + `property` | 定位并整体替换一个字段                                        |\n\n**元数据类（1 类）**\n\n| `op`             | 必填载荷                            | 说明                                                                             |\n| ---------------- | ----------------------------------- | -------------------------------------------------------------------------------- |\n| `set_meta`       | `patch`(`Record<string,unknown>`)   | 浅合并顶层业务逻辑元数据（如 `modellogicname`/`description`/`actiontype`/`execmode`/`functionname`/`marktype`）；**不能含 `input`/`output`/`operations`** |\n\n**导出列类（仅 `actioncategory=5` 导出类，5 类）**\n\n> 仅导出类业务逻辑可用；若对微服务 / 普通 flycode 调用会报 `INVALID_PARAMS` 并引导改用 `save_model_logic`。**切勿用 `set_meta` 去碰 `bindjson`**——`set_meta` 会整体覆盖顶层字段、可能丢失导出列定义；改 `bindjson` 请用 `set_bind_meta`（自动排除 `bindcols`）。各导出 op 以 `field`（优先）或 `column` 定位，假设能唯一定位；若匹配到多个会报 `DUP_NAME` 并拒绝。空串 `field`/`column` 同属「未提供定位键」，不参与匹配（见下方空串约定）。\n\n| `op`                   | 必填载荷                                                  | 说明                                                                                                     |\n| ---------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |\n| `add_export_column`    | `column`(单条 `LogicBindColumn`，建议至少带 `field`) + 可选 `position` | 向 `bindjson.bindcols` 追加一列                                                                         |\n| `remove_export_column` | `field` 或 `column`（二选一）                              | 从 `bindjson.bindcols` 按 `field`/`column` 删除一列                                                       |\n| `replace_export_column`| `field`/`column`（二选一）+ `newColumn`(新的完整列对象)    | 按 `field`/`column` 定位并整体替换一列                                                                    |\n| `set_export_column_attrs`| `field`/`column`（二选一）+ `patch`(`Record<string,unknown>`) | 按 `field`/`column` 定位某列，浅合并其部分属性（如改 `column` 标题 / `width` 列宽 / `type` 类型；不改 `field`） |\n| `set_bind_meta`        | `patch`(`Record<string,unknown>`)                         | 安全浅合并 `bindjson` 顶层（如 `logicname`），**不影响 `bindcols`**；**不能含 `bindcols`**                 |\n\n> 注：`param` / `property` 结构与 `save_model_logic` 的 `input`/`output` 元素一致（`LogicParameters` / `LogicParameterProperties`，含 `datatype` / `marktype` / `name` / `objectcode` / `objectname` / `properties` 等字段）。`add_param` / `set_param_attrs` / 各 property op 均以 `name`（或 `propertyCode`）定位，假设同一 `target` 内 `name` 唯一；若同名会报 `DUP_NAME` 并拒绝。\n\n> **空字符串不是定位键（重要）**：自定义字段（未挂到实体字段上的属性）其 `propertycode` / `objectcode` 恒为空字符串 `\"\"`。空串一律视为「未提供该键」，不参与匹配与判重——所以新增自定义字段时 `propertycode` 传 `\"\"` 是安全且推荐的写法，**不会**与既有自定义字段误判为重复。相应地，`remove_property` / `replace_property` 若只传空串 `propertyCode` 而无 `propertyName`，会报 `INVALID_PARAMS`。\n>\n> 报 `DUP_NAME`「已存在」时，消息会明确指明命中了哪一个键（`name=xxx` 或 `propertycode=xxx`），据此核对即可；不要臆测为平台自动同步或外部改动——工具只按上述规则在服务端最新数据上判定。\n\n**返回：** `{ ok, applied, verified, errorCode, message, diff, ops[] }` —— `diff` 仅回每个 op 的执行摘要（不回整份对象），`ops[]` 与入参一一对应，便于定位失败项。\n\n### `str_replace_flycode` — 批量局部替换 / 整份重写 flycode 脚本\n\n以 str_replace_editor 模式局部修改业务逻辑的 flycode 脚本：**只需传入要改动的新旧代码片段**，不必回传整份脚本。底层调用 `service/logic.ts` 的 `replaceFlyCodeSegments`：按 `modelLogicCode` 拉取完整对象，在内存副本上完成定位与替换，再以 `overwrite: false` 提交一次 `saveModelLogic`。\n\n**与另两个写工具的分工：**\n\n| 场景                                             | 建议工具                                              |\n| ------------------------------------------------ | ----------------------------------------------------- |\n| 改 1~N 处局部片段（最常用）                      | `str_replace_flycode`（`oldString` / `newString`）     |\n| 整份脚本重写、大范围重构                         | `str_replace_flycode` + 单个 op 置 `rewrite: true`     |\n| 改 input/output 结构（增删参数、增删字段、改属性） | `patch_model_logic`                                   |\n| 改顶层元数据（标题 / 描述 / actiontype 等）       | `patch_model_logic`                                   |\n| 新增一条业务逻辑（首次创建）                       | `save_model_logic`                                    |\n| 已有逻辑全量 JSON 很小（如微服务 actioncategory=2） | `save_model_logic` 全量保存                          |\n\n**事务性**：`ops` 具备事务性——全部 op 预演成功才落库，任一 op 失败则整批中止、**不产生任何写入**。实现上整批只发起一次保存请求，因此不存在「写一半再回滚」的中间态。\n\n**执行顺序**：`ops` 按数组顺序依次执行，`ops[i+1]` 在 `ops[i]` 的结果上匹配，因此支持「先插入一段代码、再改这段里的某行」这类依赖。\n\n**输入参数：**\n\n| 参数             | 类型    | 必填 | 说明                                                                     |\n| ---------------- | ------- | ---- | ------------------------------------------------------------------------ |\n| `modelLogicCode` | string  | 是   | 要修改的业务逻辑编码                                                     |\n| `ops`            | array   | 是   | 替换操作数组，**至少一个元素**（`min(1)`），按数组顺序依次执行           |\n| `commitMessage`  | object  | 是   | 提交信息，整批 ops 共用一个                                              |\n| `dryRun`         | boolean | 否   | 只预演输出 diff、不落库，默认 `false`                                    |\n| `contextLines`   | number  | 否   | diff 中每个改动点上下保留的上下文行数，默认 `3`                          |\n| `verify`         | boolean | 否   | 保存后是否回读校验所有改动已生效，默认 `true`                            |\n\n`ops[]` 元素：\n\n| 参数             | 类型                       | 必填 | 说明                                                                 |\n| ---------------- | -------------------------- | ---- | -------------------------------------------------------------------- |\n| `oldString`      | string                     | 否   | 待替换原文；**partial 模式（默认）下必填**、非空且唯一命中。`rewrite: true` 时被忽略 |\n| `newString`      | string                     | 是   | partial 模式下为替换后的新文本（传空串表示删除）；`rewrite: true` 时为整份替换的目标全文 |\n| `rewrite`        | boolean                    | 否   | **整份替换开关**，默认 `false`。为 `true` 时忽略 `oldString`，把整个 operation 的脚本整体替换为 `newString` |\n| `operationIndex` | number                     | 否   | 作用于第几个 operation 的脚本，默认 `0`                              |\n| `replaceAll`     | boolean                    | 否   | 替换全部匹配，默认 `false`；与 `occurrence` 互斥                     |\n| `occurrence`     | number                     | 否   | 只替换第 N 个匹配（1-based）；与 `replaceAll` 互斥                   |\n| `matchMode`      | `'exact' \\| 'normalized'`  | 否   | 默认 `normalized`，容忍 CRLF/LF 与行尾空白差异；`exact` 为字节严格相等 |\n| `label`          | string                     | 否   | 可选标识，仅用于返回报告中辨认该 op                                  |\n\n**整份重写（`rewrite` 模式）**：整份脚本重写时无需把旧全文塞进 `oldString`（那会把刚读到的旧脚本又回传一遍、浪费上下文），改为给单个 op 置 `rewrite: true`、只传新全文 `newString` 即可：\n\n```jsonc\n{\n  \"modelLogicCode\": \"2087720632723837017\",\n  \"ops\": [{ \"rewrite\": true, \"newString\": \"/* 全新脚本全文 */\" }],\n  \"commitMessage\": { \"committype\": \"saverecord\", \"committypetext\": \"保存记录\" }\n}\n```\n\n`rewrite` op 可与后续 partial op 混用（如「先整份重写，再在其上局部微调」），`ops` 仍按数组顺序在新结果上依次执行。该模式下 `newString` 必填；`oldString` 被忽略。整份替换不渲染 unified hunk，只在 `diff` 中以一行「整份替换：N → M 字符」标记，长度变化见 `lengthBefore` / `lengthAfter`。\n\n**返回：** `ok` / `applied` / `verified` / `errorCode` / `message` / `lengthBefore` / `lengthAfter` / `diff` / `ops[]`。其中 `ops[].message` 说明失败原因，`NOT_FOUND` 时 `ops[].suggestions` 给出最相似的候选（行号 + 相似度 + 预览），`diff` 只回改动片段、不回整份脚本。\n\n**匹配与容错：** 默认 `normalized` 模式会先做归一化再匹配（CRLF/CR 统一为 LF、忽略行尾空白），并把 `newString` 的换行符统一成源脚本的主导换行符，避免混用。`oldString` 未命中 / 命中多处时分别报 `NOT_FOUND` / `NOT_UNIQUE` 并整批中止。partial 模式下 `oldString` 为空串报 `EMPTY_OLD_STRING`（整份重写请改用 `rewrite: true`）。\n\n**失败即关闭：** 成功后重复调用同一 `oldString` 会因原文已不存在而报 `NOT_FOUND`，不会重复写入。\n\n### `page_entity_list` — 分页查询实体列表\n\n根据查询条件分页查询 APaaS 平台中的实体定义（只读、幂等）。底层调用 `entityClient.pageEntityList`。\n\n**输入参数：**\n\n| 参数            | 类型   | 必填 | 说明                                                                       |\n| --------------- | ------ | ---- | -------------------------------------------------------------------------- |\n| `objectname`    | string | 否   | 实体中文名、实体表名、实体 objectcode，模糊匹配                            |\n| `page`          | string | 否   | 当前页，从 1 开始，默认 1                                                  |\n| `rows`          | string | 否   | 每页记录数，默认 20                                                        |\n| `updatetimestart` | string | 否 | 修改开始时间，格式 `yyyy-MM-dd hh:mm:ss`，与结束时间成对出现              |\n| `updatetimeend` | string | 否 | 修改结束时间，格式 `yyyy-MM-dd hh:mm:ss`，与开始时间成对出现              |\n| `datapattern`   | string | 否   | 实体类型（整数）：1-原生实体；2-衍生实体；3-视图；4-超级表单实体           |\n| `objecttypecode`| string | 否   | 实体分类（整数）：1-基本实体；2-树形实体；3-数据字典；4-关联实体           |\n\n**返回：** 实体列表的 JSON（`resp_data`），包含分页信封 `pageCount` / `pageIndex` / `pageSize` / `resultCount`，以及 `data` 数组中每个实体的基本信息：`objectcode`、`objectname`、`objectmark`、`tablename`、`directorytypename`、`datapattern`、`publishstatus`、`status`、`marktype`、`confsource`、`createaccountname`、`updateaccountname`、`createtime`、`updatetime` 等。\n\n> 注：接口另有固定默认参数（`centercode`、`directorytypecode`、`starttime`），已在工具内部硬编码传入，不对外暴露。\n\n### `get_entity` — 查询实体详情\n\n根据实体的编码 `objectcode` 查询其完整详情（只读、幂等），包含实体的基本信息与属性数组 `properties`（每个属性的列名、类型、关联实体、索引方式等）。底层调用 `entityClient.getEntity`。\n\n**输入参数：**\n\n| 参数        | 类型   | 必填 | 说明                       |\n| ----------- | ------ | ---- | -------------------------- |\n| `objectcode` | string | 是   | 要查详情的实体的编码       |\n\n**返回：** 实体详情的 JSON（`resp_data`），主要字段：\n\n- `objectcode` / `objectname` / `objectmark` / `tablename` / `metamodelcode`：实体编码、中文名、标记、数据库表名、领域模型编码\n- `objectdescr` / `objecttypecode` / `datapattern` / `directorytypecode`：描述、实体分类、数据模式、所属目录编码\n- `marktype` / `confsource` / `publishstatus` / `status` / `storagelevel`：创建标记、配置来源、发布状态、状态、存储等级\n- `parentobjectcode`：父实体的 objectcode\n- `message`：保存时编写的提交信息（作用类似 git 提交信息）\n- `properties`：实体属性数组，每个属性含 `propertyname` / `columnname` / `propertytypecode`（字段类型映射）/ `relationobjectcode`（关联实体）/ `idxtype`（索引方式）/ `publishstatus` / `status` 等\n\n### `page_form_list` — 分页查询表单 / 页面列表\n\n根据查询条件分页查询 APaaS 平台中的表单 / 页面定义（只读、幂等）。底层调用 `formClient.pageFormList`（接口 `POST /bizserv/bizpage/pageList`）。\n\n**输入参数：**\n\n| 参数            | 类型   | 必填 | 说明                                                                       |\n| --------------- | ------ | ---- | -------------------------------------------------------------------------- |\n| `status`        | string | 否   | 状态（整数）：1-启用；2-停用。示例传 `\"1\"`                                 |\n| `keys`          | string | 否   | 模糊匹配表单 `code` / `title`                                              |\n| `keywords`      | string | 否   | 模糊匹配表单中的关键词                                                     |\n| `clientcategorycode` | string | 否 | 用户端分类编码：1-web 端；2-app 端；6-小程序端                        |\n| `page`          | string | 否   | 当前页，从 1 开始，默认 1                                                  |\n| `rows`          | string | 否   | 每页记录数，默认 20                                                        |\n| `type`          | string | 否   | 类型（整数）：5-列表查询；1-普通页面；99-二开页面；10-switchpage；11-树导航列表；100-原生页面；101-空白页面；7-报表页面；12-排序页面；300-步骤管理表单；1000-全局函数 |\n| `updateopname`  | string | 否   | 最近修改人姓名，模糊匹配                                                   |\n| `updatetimestart` | string | 否 | 修改开始时间，格式 `yyyy-MM-dd hh:mm:ss`，与结束时间成对出现              |\n| `updatetimeend` | string | 否 | 修改结束时间，格式 `yyyy-MM-dd hh:mm:ss`，与开始时间成对出现              |\n\n**返回：** 表单 / 页面列表的 JSON（`resp_data`），包含分页信封 `pageCount` / `pageIndex` / `pageSize` / `resultCount`，以及 `data` 数组中每个表单 / 页面的基本信息。`code` 为必填字段，其余字段（如 `createtime`、`title`、`clientcategorycode`、`confsource`、`marktype`、`directorytypename`、`metamodelcode`、`pagetypename`、`pagedescr`、`status`、`type`、`updatetime`、`updateaccountname`、`versionnum` 等）均为可选，且值可能为 `null`。\n\n> 注：接口另有固定默认参数（`centercode`、`directorytypecode`、`starttime`），已在工具内部硬编码传入，不对外暴露。\n\n### `get_form` — 查询表单 / 页面详情\n\n根据表单 / 页面的唯一编码 `code` 获取其完整详情（只读、幂等）。底层调用 `formClient.getForm`（接口 `POST /bizserv/bizpage/getPage`）。\n\n**输入参数：**\n\n| 参数  | 类型   | 必填 | 说明                       |\n| ----- | ------ | ---- | -------------------------- |\n| `code` | string | 是   | 要查详情的表单 / 页面的唯一编码 |\n\n**返回：** 表单 / 页面详情的 JSON（`resp_data`），结构为顶层对象 `FormResult`，主要字段：\n\n- `pageinfo`：页面基础信息（`code` / `title` / `type` / `status` / `marktype` / `clientcategorycode` / `versionnum` / `pagetemplatecode` / `pagedescr` 等；`eventlist` 页面级事件、`reportdesclist` 关联报表、`cache` 缓存配置）\n- `businessmodel`：引用的后端业务模型 / 接口数组，结构同 `logicClient` 的 `LogicResult`（`actiontype` / `modelcode` / `modellogiccode` / `input` / `output` / `operations` 等）\n- `presenter`：事件处理器（`initial` 初始化 / `interface` 对外接口 / `handlers` 事件处理器），每项含 `code` / `key` / `condition` / `actions`\n- `view`：页面结构，递归的控件节点树；每个节点 `type` 为控件种类判别符（`layout` / `report` / `datagrid` / `textinput` / `button` / `table` / `select` / `checkbox` / `upload` 等），`content` 为递归子节点数组\n- `controls`：扁平控件数组（部分页面才有）\n- `pageswitch`：仅 switchpage 类型才有的页面切换配置（`mode` / `menu` / `pagerefs` / `eventlist`）\n- `message`：每次保存填写的提交信息（类似 git 提交信息）\n\n> 注：工具的 `description` 中附有「字段速查」，列出了各顶层对象的关键字段与编码枚举含义（如 `pageinfo.type` 页面类型、`marktype` 创建标记、`clientcategorycode` 用户端等），便于理解返回 JSON。详情类型的字段定义见 `src/clients/form.ts`（`FormResult` / `FormPageInfo` / `FormViewNode` / `FormControl` 等接口）。\n\n### `get_form_outline` — 查询表单 / 页面骨架\n\n获取表单 / 页面的轻量骨架（地址簿 / 决策依据），约 2–4KB，避免为日常改动拉取完整 88KB 的表单 JSON（只读、幂等）。底层调用 `service/form.ts` 的 `getFormOutline`。\n\n**输入参数：**\n\n| 参数   | 类型   | 必填 | 说明                             |\n| ------ | ------ | ---- | -------------------------------- |\n| `code` | string | 是   | 要查骨架的表单 / 页面的唯一编码 |\n\n**返回：** `pageinfo` 关键字段、`viewTree`（递归骨架，仅 `code` / `type` / `title` + `children`）、`handlers` 与 `interfaces` 清单、`businessModels`（仅逻辑名，不回内容）。\n\n`handlers` 清单同时覆盖 `presenter.handlers`（事件处理器）与 `presenter.initial`（页面初始化处理器），每项带 `scope` 字段标注所在容器（`handlers` / `initial`）。\n\n> 用途：在不知道全量内容时先拿到所有可改对象的 `code`，避免 `NODE_NOT_FOUND` 盲猜；随后用 `get_form_fragment` 看局部真实属性名，再用 `patch_form` 修改。\n>\n> 注意：页面初始化的 flycode 常位于 `presenter.initial`（`code` 形如 `initial_xxx_event`），outline 会一并列出并标注 `scope='initial'`，不要只按 `handlers` 找。\n\n### `get_form_fragment` — 查询表单 / 页面局部内容\n\n按 `code` 取表单的局部内容（几 KB），避免为改一处而拉完整 88KB 表单 JSON（只读、幂等）。三种寻址方式三选一，可组合。底层调用 `service/form.ts` 的 `getFormFragment`。\n\n**输入参数：**\n\n| 参数          | 类型   | 必填 | 说明                                                                            |\n| ------------- | ------ | ---- | ------------------------------------------------------------------------------- |\n| `code`        | string | 是   | 表单 / 页面的唯一编码                                                           |\n| `nodeCode`    | string | 否   | 目标控件 / 节点编码，返回其完整子树                                             |\n| `handlerCode` | string | 否   | 目标 presenter 处理器编码（`handlers` 与 `initial` 均检索），返回其完整定义与 `actionIndex` 清单 |\n| `handlerScope` | string | 否  | 限定处理器容器 `handlers` / `initial`；同名 code 跨容器时须指定以消歧           |\n| `section`     | string | 否   | 整段 `pageinfo` / `view` / `presenter` / `controls` / `pageswitch` / `businessmodel` |\n\n**返回：** 命中的 `node` / `handler` / `section`，以及 `actionIndex`（每个 action 的 `code` / `type` 与 `script` / `condition` / `expression` 长度），便于精确构造 `patch_form` 的 `replace_script`。同名 `code` 跨 `handlers` / `initial` 出现时 `handler` 为 `undefined`，并在 `message` 中提示加 `handlerScope` 消歧。\n\n### `patch_form` — 局部补丁修改表单 / 页面\n\n以结构化补丁（delta ops）局部修改表单 / 页面，**无需回传完整 88KB 的表单 JSON**（非只读、有事务性保护）。底层调用 `service/form.ts` 的 `patchForm`：先拉取最新完整对象 → 在内存副本上按 `ops` 顺序合并 → 一次性保存到 `POST /biserv/bizpage/saveNewPage`。\n\n**输入参数：**\n\n| 参数            | 类型    | 必填 | 说明                                                      |\n| --------------- | ------- | ---- | --------------------------------------------------------- |\n| `code`          | string  | 是   | 目标表单 / 页面的唯一编码                                 |\n| `ops`           | array   | 是   | 补丁操作数组，至少一个元素；10 类见下表，按数组顺序依次作用 |\n| `commitMessage` | object  | 是   | 提交信息，结构与 `save_model_logic` 的 `commitMessage` 一致 |\n| `dryRun`        | boolean | 否   | 只预演输出 diff、不落库，默认 `false`                      |\n| `verify`        | boolean | 否   | 保存后回读校验改动是否生效，默认 `true`                    |\n\n**10 类 ops：**\n\n| op                     | 关键参数                                                                | 说明                                                                        |\n| ---------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------- |\n| `set_pageinfo`         | `patch`                                                                 | 浅合并进 pageinfo（如改标题 / 状态）                                        |\n| `set_attrs`            | `code`、`patch`                                                         | 按 `code` 定位节点，浅合并属性（如 `hidden` / `required`）；patch 含数组属性时会整体覆盖该数组 |\n| `patch_node_array_item`| `nodeCode`、`arrayProp`、`itemKey?`、`itemKeyValue`、`patch`            | 按 `nodeCode`+`arrayProp` 定位节点内数组，按 `itemKey`（默认 `code`）找到单个元素浅合并（如只改表格某列的 `options`），其余元素与其它属性不受影响，避免整段覆盖数组与规避大 payload |\n| `insert_node`          | `parentCode`、`node`、`position?`                                       | 在父节点下插入新节点                                                        |\n| `remove_node`          | `code`、`checkRefs?`                                                    | 按 `code` 删除节点，默认校验引用                                            |\n| `move_node`            | `code`、`newParentCode`、`position?`                                    | 移动节点到新父节点下                                                        |\n| `set_section`          | `section`、`value`                                                      | 整段替换 `view` / `presenter` / `controls` / `pageswitch`                   |\n| `replace_script`       | `handlerCode`、`actionIndex?` / `actionCode?`、`field?`、`scope?`、`replacement?` / `ops?` | 改 action 的 `script` / `condition` / `expression`，支持整段覆盖或 old→new 局部替换；`handlerCode` 在 `handlers` 与 `initial` 两块容器中均会检索，`scope` 用于同名 code 跨容器消歧 |\n| `add_businessmodel`    | `modellogiccode`、`overwrite?`                                          | 仅给逻辑编码，MCP 自动拉取其完整 JSON 追加到 `businessmodel`                |\n| `remove_businessmodel` | `modellogiccode`、`checkRefs?`                                          | 从 `businessmodel` 移除指定逻辑                                             |\n\n**事务性：** 全部 `op` 预演成功才会落库，任一 `op` 失败（`NODE_NOT_FOUND` / `DUP_CODE` / `REF_VIOLATION` / `FETCH_FAILED`）则整批中止、零写入回滚；整批只发起一次保存请求，不存在写一半的中间态。\n\n**返回：** `ok` / `applied` / `verified` / `errorCode` / `message` / `diff` / `ops[]`，其中 `ops[].suggestions` 在 `NOT_FOUND` 时给出相似候选。\n\n> 错误码：`OK` / `DRY_RUN` / `EMPTY_OPS` / `FETCH_FAILED` / `NODE_NOT_FOUND` / `DUP_CODE` / `REF_VIOLATION` / `OPS_FAILED` / `SAVE_FAILED` / `VERIFY_FAILED`。\n\n> **回读校验口径**：平台普遍把脚本按 CRLF（`\\r\\n`）落库，而提交的 `oldString` / `newString` 多为 LF。回读校验与写入侧共用 `matchMode`（默认 `normalized`）的归一化口径，**仅容忍换行符与行尾空白差异**，内容不同依旧如实报 `VERIFY_FAILED`。因此 `applied:true` + `verified:false` 且报错为「新内容未出现」时，应先用 `get_form_fragment` 实际回读确认，不要仅凭该错误码重复提交；若确需字节严格校验，给对应 op 设 `matchMode:'exact'`。\n\n### `save_form` — 全量保存表单 / 页面\n\n整页重构（重排布局、模板迁移等）时没有其他表达方式，才用本工具：把从 `get_form` 查询到的完整 `FormResult` 对象按需修改后整份回传保存（非只读）。底层调用 `service/form.ts` 的 `saveForm` → `POST /biserv/bizpage/saveNewPage`。日常局部改动请优先用 `patch_form`。\n\n**输入参数：**\n\n| 参数            | 类型   | 必填 | 说明                                                           |\n| --------------- | ------ | ---- | -------------------------------------------------------------- |\n| `form`          | object | 是   | 完整的 `FormResult` 对象，通常来自 `get_form` 的返回，改后回传  |\n| `commitMessage` | object | 是   | 提交信息，结构与 `save_model_logic` 的 `commitMessage` 一致      |\n\n**返回：** `ok` / `code` / `message`。\n\n> 注：保存接口 `conf` / `ui` 要求传入完整对象，故 `businessmodel`（完整 `LogicResult[]`）**原样透传、不剥离**；`message` 作为顶层提交参数传入，不是 `FormResult` 内部的 `message` 字段。服务端按 `overwrite: false` 保存（不覆盖他人最新版本），`clearuserconfig` 默认 `true`。\n\n### `page_h5_form` — 分页查询 H5 表单列表\n\n根据查询条件分页查询智慧100 H5 引擎配置的 H5 表单列表（只读、幂等）。底层调用 `h5Client.pageH5List`（接口 `POST /api/masterserv/hpage/listH5Page`）。\n\n> 说明：列表结果**不包含** `confjson` 字段（该字段为 H5 表单的内容 JSON，体积较大）；如需获取表单的 `confjson`（含 Vue 代码与元数据配置），请调用 `get_h5_form` 获取详情。\n\n**输入参数：**\n\n| 参数            | 类型   | 必填 | 说明                                                                       |\n| --------------- | ------ | ---- | -------------------------------------------------------------------------- |\n| `keywords`      | string | 否   | H5 表单代码及其元数据中包含的关键字，模糊匹配                              |\n| `pagecode`      | string | 否   | H5 表单的唯一编码，模糊匹配                                               |\n| `status`        | string | 否   | 状态，整数：1-启用；2-停用。示例传 `\"1\"`                                  |\n| `title`         | string | 否   | H5 表单的标题，模糊匹配                                                   |\n| `updateopname`  | string | 否   | 最近修改人姓名，模糊匹配                                                   |\n| `page`          | string | 否   | 当前页，从 1 开始，默认 1                                                  |\n| `rows`          | string | 否   | 每页记录数，默认 20                                                        |\n\n**返回：** H5 表单列表的 JSON（`resp_data`），包含分页信封 `pageCount` / `pageIndex` / `pageSize` / `resultCount`，以及 `data` 数组中每个 H5 表单的基本信息：`pagecode`（唯一编码）/ `title`（标题）/ `status`（状态：1-启用；2-停用）/ `pagedescr`（描述）/ `platstatus`（平台状态）/ `platcreateop` / `platcreatetime` / `platupdateop` / `platupdatetime` 等。字段值可能为 `null`，且 `status` 以字符串或数字两种形态返回。\n\n> 注：当接口返回数据包含 `HTTP 404 Not Found` 时，说明此租户未安装 H5 引擎。该工具以宽松结构（`catchall`）透传服务端返回的额外字段，确保任意列表结果均可正常返回。字段定义见 `src/clients/h5.ts`（`H5PageResult` 接口）。\n\n### `get_h5_form` — 查询 H5 表单详情\n\n根据 H5 表单的唯一编码 `pagecode` 获取其完整详情（只读、幂等），核心内容 `confjson` 为 H5 表单的内容 JSON（含 Vue 代码与元数据配置）。底层调用 `h5Client.getH5`（接口 `POST /api/masterserv/hpage/listH5PageByOne`）。\n\n**输入参数：**\n\n| 参数       | 类型   | 必填 | 说明                       |\n| ---------- | ------ | ---- | -------------------------- |\n| `pagecode` | string | 是   | 要查详情的 H5 表单的唯一编码 |\n\n**返回：** H5 表单详情的 JSON（`resp_data`），主要字段：\n\n- `pagecode` / `title` / `pagedescr`：H5 表单唯一编码、标题、描述\n- `status`：状态（1-启用；2-停用），以字符串或数字返回\n- `confjson`：H5 表单的内容 JSON 字符串，包含 H5 表单的 Vue 代码与元数据配置（核心内容）\n- `platcreateop` / `platcreatetime`：创建人 / 创建时间\n- `platupdateop` / `platupdatetime`：最近更新人 / 最近更新时间\n- `platstatus`：平台状态\n\n> 注：当接口返回数据包含 `HTTP 404 Not Found` 时，说明此租户未安装 H5 引擎。详情类型的字段定义见 `src/clients/h5.ts`（`H5PageResult` 接口）。H5 查询接口需要以特定预览账号（职位为 `SFA系统管理员`）的 token 发起，该鉴权细节由 `service/h5.ts` 自动解析，调用方无需关心。\n\n### `page_function_list` — 分页查询 flycode 函数列表\n\n根据查询条件分页查询 APaaS 平台中的 flycode 函数定义（只读、幂等）。底层调用 `functionClient.pageFunctionList`（接口 `POST /bizserv/bizmodel/pageList`）。\n\n**输入参数：**\n\n| 参数          | 类型   | 必填 | 说明                                                                       |\n| ------------- | ------ | ---- | -------------------------------------------------------------------------- |\n| `classname`   | string | 否   | 函数英文名                                                                 |\n| `name`        | string | 否   | 函数中文名，通常和 `modelname` 一致                                        |\n| `modelname`   | string | 否   | 函数中文名，通常和 `name` 一致                                             |\n| `flycodekey`  | string | 否   | 函数内容关键字，模糊匹配                                                   |\n| `page`        | string | 否   | 当前页，从 1 开始，默认 1                                                  |\n| `rows`        | string | 否   | 每页记录数，默认 20                                                        |\n\n**返回：** flycode 函数列表的 JSON（`resp_data`），包含分页信封 `pageCount` / `pageIndex` / `pageSize` / `resultCount`，以及 `data` 数组中每个函数的基本信息：`classname`（函数英文名）/ `modelname`（函数中文名）/ `modeldescr`（函数描述）/ `modelcode`（函数编码）/ `metamodelcode`（领域模型编码）/ `dddlayer`（函数层级，固定 3）/ `marktype`（创建标记：0-平台；1-产品；2-租户）/ `status`（状态：1-启用；2-停用）/ `tablename` / `createtime` / `updatetime` / `createaccountname` / `updateaccountname` 等。字段值可能为 `null`，且 `marktype` / `status` / `dddlayer` 等部分字段以数字或字符串两种形态返回。\n\n> 注：接口另有固定默认参数（`dddlayer` 固定传 3、`directorytypecode`、`starttime`），已在工具内部硬编码传入，不对外暴露。\n\n### `get_function` — 查询 flycode 函数详情\n\n根据函数的编码 `modelcode` 查询其完整详情（只读、幂等），包含函数的基本信息与 flycode 函数代码内容 `confjson`。底层调用 `functionClient.getFunction`（接口 `POST /bizserv/bizmodel/get`）。\n\n**输入参数：**\n\n| 参数        | 类型   | 必填 | 说明                       |\n| ----------- | ------ | ---- | -------------------------- |\n| `modelcode` | string | 是   | 要查详情的函数的编码       |\n\n**返回：** flycode 函数详情的 JSON（`resp_data`），主要字段：\n\n- `classname` / `modelname` / `modeldescr` / `modelcode` / `metamodelcode`：函数英文名、中文名、描述、编码、领域模型编码\n- `dddlayer`：函数层级，固定为 3\n- `marktype` / `status`：创建标记（0-平台；1-产品；2-租户）、状态（1-启用；2-停用）\n- `tablename` / `createtime` / `updatetime` / `createaccountname` / `updateaccountname`：数据库表名（函数一般无对应表，通常为空）、时间戳与创建 / 更新人\n- `confjson`：flycode 函数代码内容，是函数实现体的核心字段\n\n> 注：详情接口返回结构不稳定（部分字段调用时可能缺省），工具以宽松结构（`z.looseObject`）透传服务端返回的额外字段，确保任意详情均可正常返回。字段定义见 `src/clients/function.ts`（`FunctionResult` / `FunctionPageResult` 接口）。\n\n### `page_database_function_list` — 分页查询数据库函数列表\n\n根据查询条件分页查询 APaaS 平台中的 PostgreSQL 自定义数据库函数定义（只读、幂等）。底层调用 `databaseFunctionClient.pageDatabaseFunctionList`（接口 `POST /bizserv/customfunction/list`）。\n\n> 说明：数据库函数的函数体 `functionscript`（PostgreSQL 函数体）已在列表查询中随行返回，因此该工具**只提供列表查询**，无需单独的详情查询工具。\n\n**输入参数：**\n\n| 参数            | 类型   | 必填 | 说明                                                                       |\n| --------------- | ------ | ---- | -------------------------------------------------------------------------- |\n| `dbfunctionname`| string | 否   | 数据库函数名，模糊匹配                                                     |\n| `name`          | string | 否   | 函数中文名，模糊匹配                                                       |\n| `pageindex`     | string | 否   | 当前页，从 1 开始，默认 1                                                  |\n| `pagesize`      | string | 否   | 每页记录数，默认 20                                                        |\n\n**返回：** 数据库函数列表的 JSON（`resp_data`），包含分页信封 `pageCount` / `pageIndex` / `pageSize` / `resultCount`，以及 `data` 数组中每个数据库函数的基本信息：`dbfunctionname`（数据库函数名）/ `functionname`（函数中文名）/ `functioncode`（函数唯一编码）/ `functionscript`（数据库函数内容，PostgreSQL 函数体，列表随行返回）/ `metamodelcode`（领域模型编码）/ `marktype`（创建标记：0-平台；1-产品；2-租户）/ `publishstatus`（发布状态：1-已发布；2-未发布）/ `status`（状态：1-启用；2-停用）/ `creator` / `updator` / `createtime` / `updatetime` / `remark` 等。字段值可能为 `null`，且 `marktype` / `publishstatus` / `status` 等部分字段以数字或字符串两种形态返回。\n\n> 注：返回的 `data` 为服务端实际结构透传，工具以宽松结构（`catchall`）保留服务端返回的额外字段，确保任意列表结果均可正常返回。字段定义见 `src/clients/database-function.ts`（`DatabaseFunctionPageParams` / `DatabaseFunctionPageResult` 接口）。\n\n### `run_sql` — 执行 SQL 查询\n\n在业务库中执行一条 SELECT 查询 SQL（只读、幂等），直接探查业务表数据、核对字段值、验证同步结果等。底层调用 `runClient.sqlRun`（接口 `POST /api/biz/sqlrun`）。\n\n**输入参数：**\n\n| 参数  | 类型   | 必填 | 说明                                                                       |\n| ----- | ------ | ---- | -------------------------------------------------------------------------- |\n| `sql` | string | 是   | 要执行的 SQL 查询语句，只支持 SELECT 查询，一次只能一条 SQL                 |\n\n**返回：** 查询结果的 JSON（`resp_data`），主要字段：\n\n- `data`：查询结果数据，数组中的每一项为一条查询结果记录（对象）；查询无结果时为 `null` 或空数组\n- `influenceCount`：查询结果总数（数值）\n\n> 注：接口仅支持 SELECT 查询，不支持 INSERT / UPDATE / DELETE 等写操作。返回的 `data` 行结构不可预知，工具以宽松结构透传，确保任意查询结果均可正常返回。\n\n### `generate_unique_code` — 生成唯一编码\n\n通过雪花算法（`src/utils/snowflake.ts`）生成一个全局唯一 ID（code）。在新建实体、领域、表单等内容时，其 JSON 字段中通常需要携带一个唯一 `code`（如实体的 `objectcode`、表单的 `code` 等），可调用本工具获取并填入。底层直接调用 snowflake 实例的 `nextId()`。\n\n**输入参数：**\n\n| 参数    | 类型   | 必填 | 说明                                                                         |\n| ------- | ------ | ---- | ---------------------------------------------------------------------------- |\n| `prefix`| string | 否   | 可选前缀，拼接到生成的唯一 ID 之前（例如实体编码前缀）；不传则只返回纯数字 ID 字符串 |\n\n**返回：** 一个 JSON 对象 `{ \"code\": \"...\" }`：\n\n- `code`：生成的唯一编码。以**字符串**形式返回，避免雪花 ID 超过 `Number.MAX_SAFE_INTEGER` 时的大整数精度丢失。\n\n> 注：本工具仅在本地生成 ID，**不修改任何服务端数据**，且每次调用返回不同的 ID（非幂等）。如需带固定前缀的编码（如 `kx_877483974950260736`），传入 `prefix` 即可。\n\n---\n\n## 项目结构\n\n```\nflycode-mcp/\n├── website/                    # 使用说明书网站（VitePress，面向终端用户，二次元卡通风格）\n│   ├── .vitepress/\n│   │   ├── config.ts           # 站点导航 / 侧边栏 / 本地搜索配置\n│   │   └── theme/              # 二次元卡通主题（style.css / index.ts）\n│   ├── public/                 # 静态资源（mascot.svg 卡通吉祥物）\n│   ├── guide/                  # 快速开始 / 接入客户端 / 准备账号\n│   ├── capabilities/           # 能力清单与详解（20 个工具，用户视角）\n│   ├── cookbook.md             # 常见场景话术\n│   ├── faq.md                  # 排错 FAQ\n│   ├── changelog.md            # 版本更新记录（按 git tag 整理，用户视角）\n│   └── index.md                # 首页 Hero\n├── src/\n│   ├── index.ts                 # 入口：启动鉴权、注册工具、启动 stdio 服务\n│   ├── types.ts                 # 跨模块共用的通用类型（如提交信息 CommitMessage）\n│   ├── service/                 # 业务封装\n│   │   ├── auth.ts              # 登录 → 获取租户信息 → 获取 IDE Token\n│   │   ├── logic.ts             # 保存业务逻辑（saveModelLogic / patchLogic（12 类 ops，事务性）/ replaceFlyCodeSegments）：提交信息处理 + 局部补丁 + 异常兜底\n│   │   ├── form.ts              # 表单骨架 getFormOutline / 局部读取 getFormFragment / 补丁合并引擎 patchForm（10 类 ops，事务性）/ 全量保存 saveForm\n│   │   └── h5.ts                # H5 表单查询鉴权（解析 SFA系统管理员预览账号 token） + 列表/详情查询 service 封装\n│   ├── clients/                 # 平台接口封装\n│   │   ├── auth.ts              # 登录 / 获取租户信息 / 获取 IDE Token 请求\n│   │   ├── logic.ts             # 业务逻辑分页/详情查询、保存请求；LogicResult 等类型定义\n│   │   ├── entity.ts            # 实体列表 pageEntityList / 详情 getEntity 请求；EntityResult 等类型定义\n│   │   ├── function.ts          # flycode 函数列表 pageFunctionList、详情 getFunction 请求；FunctionResult 等类型定义\n│   │   ├── database-function.ts # 数据库函数（PostgreSQL 自定义函数）列表 pageDatabaseFunctionList 请求；DatabaseFunctionPageResult 等类型定义\n│   │   ├── form.ts              # 表单 / 页面列表 pageFormList、详情 getForm、保存 saveForm（POST /biserv/bizpage/saveNewPage）请求；FormResult 等详情类型定义\n│   │   ├── h5.ts                # H5 表单列表 listH5Page、详情 listH5PageByOne 请求；H5PageResult 等类型定义\n│   │   ├── run.ts               # SQL 查询 sqlRun 请求（POST /api/biz/sqlrun）\n│   │   ├── test-case.ts         # 预览账号列表 getPreviewAccounts 请求（H5 查询鉴权所需的 SFA系统管理员 token 来源）\n│   │   └── types.ts             # 公共响应信封类型（DataResponse / PageResponse / CommonResponse）\n│   ├── store/                   # 运行时内存存储\n│   │   ├── token.ts             # 鉴权 Token 存储器\n│   │   └── tenant.ts            # 当前租户及连接信息存储器\n│   ├── tools/                   # 按能力分类的 MCP 工具定义\n│   │   ├── common.ts            # 通用工具（generate_unique_code：雪花算法生成唯一编码）\n│   │   ├── logic/\n│   │   │   ├── read.ts          # 只读类工具（page_model_logic_list / get_model_logic）\n│   │   │   ├── write.ts         # 写入类工具（save_model_logic / patch_model_logic / str_replace_flycode）\n│   │   │   └── schemas.ts       # 业务逻辑共享 zod schema（LogicResult / 参数 / operations / bindjson）\n│   │   ├── entity/\n│   │   │   ├── read.ts          # 只读类工具（page_entity_list / get_entity）\n│   │   │   └── schemas.ts       # 实体共享 zod schema（EntityResult / EntityProperty，宽松透传结构）\n│   │   ├── form/\n│   │   │   ├── read.ts          # 只读类工具（page_form_list / get_form / get_form_outline / get_form_fragment）\n│   │   │   └── write.ts         # 写入类工具（patch_form / save_form）\n│   │   ├── h5/\n│   │   │   └── read.ts          # 只读类工具（page_h5_form / get_h5_form）\n│   │   ├── function/\n│   │   │   └── read.ts          # 只读类工具（page_function_list / get_function）\n│   │   ├── database-function/\n│   │   │   └── read.ts          # 只读类工具（page_database_function_list：数据库函数列表，函数体随行返回）\n│   │   └── run/\n│   │       └── read.ts          # 只读类工具（run_sql：执行 SQL 查询）\n│   └── utils/\n│       ├── config.ts            # 从命令行参数解析连接配置（BASE_URL / 账号等）\n│       ├── request.ts           # 统一 axios 请求层（中心/租户地址切换 + Token 注入）\n│       ├── mcp-types.ts         # MCP 工具统一定义类型 ToolDef\n│       ├── snowflake.ts         # 雪花算法 ID 生成器（generate_unique_code 依赖）\n│       ├── date.ts              # 日期格式化工具（saverecord 提交时间用）\n│       ├── error.ts             # 统一错误信息提取\n│       └── str-replace.ts       # str_replace_editor 模式纯文本替换（归一化匹配 / 批量 applyOps / diff hunk / 候选建议）\n├── dist/                        # 编译产物（由 tsc 生成，已忽略）\n├── package.json\n├── tsconfig.json\n└── .gitignore\n```\n\n---\n\n## 工作原理\n\n1. **解析配置**：从 `process.argv` 读取 `username / password / tenantCode / envName`（由 `utils/config.ts` 解析）。\n2. **登录**：`service/auth.ts` 中的 `authenticate()` 调用 `/api/multiplat/auth/login` 获取 Token，存入内存。\n3. **定位租户与环境**：`authenticate()` 调用 `/api/multiplat/auth/getTenantInfo`，依据 `tenantCode + envName` 匹配出目标租户，保存其连接信息（`conn.config`）到内存。\n4. **获取 IDE Token**：`authenticate()` 调用 `/api/multiplat/auth/getIdeToken` 换取 IDE 专用 Token 并覆盖内存中的 Token。\n5. **注册并启动**：创建 `McpServer`，注册 `page_model_logic_list`、`get_model_logic`、`save_model_logic`、`patch_model_logic`、`str_replace_flycode`、`page_entity_list`、`get_entity`、`page_form_list`、`get_form`、`get_form_outline`、`get_form_fragment`、`patch_form`、`save_form`、`page_h5_form`、`get_h5_form`、`page_function_list`、`get_function`、`page_database_function_list`、`run_sql`、`generate_unique_code` 等工具，通过 `StdioServerTransport` 监听请求。\n6. **业务请求**：工具被调用时，`logicClient` / `entityClient` / `formClient` / `functionClient` / `runClient` / `h5Client` 通过 `request({ type: \"tenant\" })` 或 `request({ type: \"business\" })` 自动切换到当前租户连接地址或业务地址。`h5Client` 的 H5 表单查询需以特定预览账号（职位为 `SFA系统管理员`）的 token 发起，该 token 由 `service/h5.ts` 通过 `test-case.ts` 的预览账号列表接口解析后，以 `request({ type: \"business\", token })` 显式传入。`request` 在请求头统一注入 Token：若调用方在配置里显式传入 `token`（如 `request({ url, method, type: \"business\", token: \"xxxx\" })`），则优先使用该传入 Token；否则回退到内存中的 Token（由 `authenticate()` 写入或通过 `setToken` 设置）。注入后自定义 `token` 字段会被剔除，不会泄漏给后端。\n\n---\n\n## 许可证\n\n本项目采用 **GNU Affero 通用公共许可证 v3（AGPL-3.0-or-later）**。\n\n- 完整许可证文本见仓库根目录的 [LICENSE](./LICENSE) 文件。\n- AGPL 是强 Copyleft 许可证：如果你修改本项目、或将本项目作为网络服务（SaaS）提供给他人使用，你必须以相同许可证开源并免费提供对应版本的完整源代码（含你服务端运行的修改版本）。\n\nCopyright © 2026 Trust会长\n","readmeFilename":"README.md"}