{"_id":"@last9/mcp-server","_rev":"39-96b1611de2a41b3fba1aeb7e73fef0c0","name":"@last9/mcp-server","dist-tags":{"latest":"0.23.0"},"versions":{"0.0.9":{"name":"@last9/mcp-server","version":"0.0.9","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.0.9","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"5030282f0ef39d935479539e10b70164896aa1a4","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.0.9.tgz","fileCount":5,"integrity":"sha512-2gSiCW+Lt1WY5uxoHHYkLXAEN/437XwAyUnSpiG3TJ8EmVvQlGNqM0AHuXJgfNGM5BV6LQtoGtfkww2nvumoBw==","signatures":[{"sig":"MEUCIBJdq0+c1tU6jHUQNW10XWN6QP76cQ89fQEqhGAqfCrBAiEAlOjfCqVSp4s6DZ3hyKvdmiZOZ5V6XWSD0SAaaRctvlU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2480648},"engines":{"node":">=14"},"gitHead":"ae6ead4b8d5cec6bb869ae6adf48492c355ecc4b","scripts":{"preversion":"go run main.go --version","postinstall":"node bin/download-binary.js","postversion":"git push && git push --tags"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.5.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"20.12.2","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.0.9_1743232212090_0.36497147592069257","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@last9/mcp-server","version":"0.1.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"e4901b181697e2006e72bd96ff05520056239e8e","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.0.tgz","fileCount":5,"integrity":"sha512-iv4AaI1FuIxjQ9P/fWkrIw46AlFzol0aGNsdkhWCqL6/Ewx/S1bj7bW9Pz2qVRGzAT2lnXya7QmRzWxrlrTfXA==","signatures":[{"sig":"MEQCICYBt+8DDWxy2CKsdnPNbqlj7A6JFXLnOHVuhRdY/oJfAiAEi76JZEplFVmd+j4sc+nQKY5fyldkU64SKu8ttKyLQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2480785},"engines":{"node":">=14"},"gitHead":"846ffbf8271e503e32b109ded835ce377a203c4a","scripts":{"preversion":"go run main.go --version","postinstall":"node bin/download-binary.js","postversion":"git push && git push --tags"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.5.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"20.12.2","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.0_1743233424281_0.5405363341884142","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@last9/mcp-server","version":"0.1.1","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.1","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"ef326687ab232b554bb424604894644c8984f876","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.1.tgz","fileCount":5,"integrity":"sha512-HUIgar4QTEDGJGEWgD/RDDxaD0mFp+zMKf4wUlKj+5KC7L+L1biQgoKtekDBro3V7k8AkYU72+K2V2X4MT0hFQ==","signatures":[{"sig":"MEUCIHzM2aF2It1p0bQf+ECUQQE6k0VMWFAM2Pmyb8IYt5MDAiEAsrg9X/sAoTBfjDuoIj2DWBg2365AsRTIz4myAMKt3I4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2482106},"engines":{"node":">=14"},"gitHead":"49021c936d8cc0be907611c4240f08c36b83ba25","scripts":{"preversion":"go run main.go --version","postinstall":"node bin/download-binary.js","postversion":"git push && git push --tags"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"9.5.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"18.16.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.1_1743496139546_0.15489180863135377","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@last9/mcp-server","version":"0.1.2","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.2","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"2da81c76785fa0541f856e5c1a876df8d3bbd250","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.2.tgz","fileCount":5,"integrity":"sha512-LPB6Pi0ntx+jsahQwT6RELr776V7fDJyOHiTo2NlnhiIXH60kKK+dTrS22qACBvYlPvWz2pwRx/+IyCcOnbIjA==","signatures":[{"sig":"MEUCIHvreM+C94Kvbnr7knqbIEGlqzD152ZHG+1+f7WtfKJbAiEA8R1Hooz8wjm73LJ9KG5yT1jzXgm8PowJsfZK1+nQGEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2485105},"engines":{"node":">=14"},"gitHead":"ef3119f74645850197c630535613e94ecf1e22d0","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"9.5.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"18.16.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.2_1743644965707_0.10328794630314131","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@last9/mcp-server","version":"0.1.3","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.3","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"935890b0b60ffefdffd4799de6c7a6d45be607cd","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.3.tgz","fileCount":5,"integrity":"sha512-DDAurxOexJNy2X0ztiLjbX8HfA9YxVzDACmZO8H6LSLHzTwkjdSaz391aYpUX9veh0AiZaqhJ/KmAUgoabfCQQ==","signatures":[{"sig":"MEQCIE+xxPe+ozzMacLHqRgdiv01ZejcQkvgcW4o8PYTsX+RAiA0HO+rxGuXg2o4UnWVHvUt+vfDHH9xRFFJxueV7GodhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2486570},"engines":{"node":">=14"},"gitHead":"13aa54902ee5858dd117656c24cc958eab450f90","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"9.5.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"18.16.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.3_1745131377199_0.4793155438059691","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@last9/mcp-server","version":"0.1.4","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.4","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"b87e6ff49687bebfa0d05332aa5534489b4d9045","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.4.tgz","fileCount":6,"integrity":"sha512-g4Yu92uejCnDE0oUjf3TvAI++XxKVGtoviRrcVQ3QJ3NMffqeVAE1awzFJwCArJboSmkfCIh1jYJewENNdlvxA==","signatures":[{"sig":"MEQCICGrE+TdpMJmYdhupPc7bcz9aJjdg2ZL06wRRmfEDcvPAiA0jIqRICRptayPdy6TgpJXAnds5CTwVdpXiN0yEIoPiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2497927},"engines":{"node":">=14"},"gitHead":"8d9aca1e49168fbfaf684ac266fa1defb19b1956","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"9.5.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"18.16.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.4_1745563276180_0.18692069876583717","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@last9/mcp-server","version":"0.1.5","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.5","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"f6f81348907ce764f59b7f95ccc5efa4a1f5154a","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.5.tgz","fileCount":6,"integrity":"sha512-NxeG5V9/rd2aO+IJ+yh5oI6opHKLHEttxaSYYNUILroc7/9Q42wjQreirOksYqHJ2nx52vlTZWBM2qNwcR3u9w==","signatures":[{"sig":"MEQCIF0BNBsBWmp0XjAuPWXbC0kU4Y2LyqQhnymupj0vv6inAiBy1131c/nm8mmBwhhSHoEmnmC0aon65b3hH1z4yxo/sw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2497842},"engines":{"node":">=14"},"gitHead":"9b51910dc1ad8a758b5db341e78a7058e5d44b11","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","actor":{"name":"prathamesh-sonpatki","type":"user","email":"prathamesh@last9.io"},"email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"9.5.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"18.16.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.5_1751218455897_0.42419206662780184","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@last9/mcp-server","version":"0.1.8","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.8","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"769f124192f1fa4c64176178e84bc2f617fc206b","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.8.tgz","fileCount":6,"integrity":"sha512-jqVemVCZm99bVV2scGk1GHvBMIzQjKhIonW71ZGZ2bY/rxoe0tHe+/SW/6NYVHLJkfxNquBhI4axnbClHzkZ5Q==","signatures":[{"sig":"MEUCIFg3M+kRQbqhwLmlCeqAsHLrnwI7M1/zDBWR6yP0Q3sUAiEA6JiNokmkYjryfJm+7XBl6bP2Py6eE71gL/mj2h1oVyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2497842},"engines":{"node":">=14"},"gitHead":"28e5601410c490d09d16c41c4873b6a28949cff6","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","actor":{"name":"prathamesh-sonpatki","type":"user","email":"prathamesh@last9.io"},"email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"9.5.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"18.16.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.8_1751220350009_0.8892667541716639","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@last9/mcp-server","version":"0.1.11","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"MIT","_id":"@last9/mcp-server@0.1.11","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"cb8b2e68a6116580acc0b97d5e4209fabfed0f20","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.11.tgz","fileCount":5,"integrity":"sha512-k/KtaFG5AMGXplz4Oa0MaV5NxlIm6Rke40x0L30cLUAdi/y8FZHSE7dT+JyTGHJwC4B+104wVadI+Jvka2U2ww==","signatures":[{"sig":"MEYCIQCssaBy7B9mYnzIEYTH1N/2yXjA1QGYrm54hr7j5m8a8wIhALwC15HUOtjYrFV4He2vK+uvMY+6I/MA+M9nKbfL0aEV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29647},"engines":{"node":">=14"},"gitHead":"7be7b9aa24925218ab52508b476a61ff81f31bbf","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"22.16.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.11_1756311796427_0.22889357144170908","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@last9/mcp-server","version":"0.1.12","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.1.12","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"be57ca053d3e7ff74c32c32c1e1dc0a7f68a37da","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.12.tgz","fileCount":8,"integrity":"sha512-8WmAHBqO1b04ICTSXgpPQ2jwW0ToiN05E9nUzInhBeWdq4irN+BUw5RnZFc5i5IMcA0+7gDEVyWBW1CUJ/7XyQ==","signatures":[{"sig":"MEQCIGAxt7iKIEiTCB3hNyoiwomy6AQPUmWVceB2oMw1aFCWAiBF7ZNOnXLMEasxOsskvSF38iJcxszvsgs/yGVpUslGYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6758968},"engines":{"node":">=14"},"gitHead":"0d95a44cfb6555875ced7826297a2a0c02548ab2","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"22.16.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.12_1758400425618_0.5897985989229555","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@last9/mcp-server","version":"0.1.13","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.1.13","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"321f1ae8df97ff057f7f26dece4a09330d2ae5b0","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.13.tgz","fileCount":8,"integrity":"sha512-yuMgJ0DXz6qu9JMsreLAs0fcKNiNRylNtPeFQPuHOTJEZQoOFNGT9F7EfjJW/Ijrejn7tm+qcaNGfr9cpBUf7A==","signatures":[{"sig":"MEQCIDfmqR4+SfefOSYmvGbdqt8DyF6NFKplgkUsei7hksRxAiA3emCwvkurP6g8HoJxMzzRoQfcGqS0Zz3iH+F0TJBTRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6758968},"engines":{"node":">=14"},"gitHead":"44b55ea0029a08ed0f5f6131234b6238b3aedc9b","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"22.16.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.13_1758401863858_0.5507735579728061","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@last9/mcp-server","version":"0.1.15","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.1.15","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"f8406ab0c52d11f93fc7dcb2d4a4e20387d1dc0d","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.1.15.tgz","fileCount":8,"integrity":"sha512-bjZQ63pDckO3D8+QNhsZryJ2myFTNvK5x++6sQE1FFW5676zQYrmhiROlSD3eVduV5UehO09HOHgwWKMivGTdA==","signatures":[{"sig":"MEQCIDk0vtzjdS5u8u7vytXMD2dQZGBYceJpY5LjJuNk28/1AiBiHyLs+cj3baOUUw0+CDpyWNOm6B0dtb0h21JcqtEBLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6838235},"engines":{"node":">=14"},"gitHead":"587e512577930c26f6a1468054d7eeeccb5800ed","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"22.16.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.15_1759441794441_0.6254617071660669","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@last9/mcp-server","version":"0.2.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.2.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"},{"name":"tushar_last9","email":"tushar@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"b3a742aba201bf1c2e884c9b30d397d5446925f6","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.2.0.tgz","fileCount":8,"integrity":"sha512-kyOStTdyas7AXnWhO8BaZXyf2tT+ejy/cik9ysF235s94M8vae56nlAFuOV6A99xvRVcSY1jIbau5sMJ5tOq0Q==","signatures":[{"sig":"MEUCIAMBa0c9jzehFOOIzMXT2jMsdIFfABjwJ9tM1WFrha2bAiEAsoBgp6e93Lmq0eZdyRSM2oO4+8E7JIXL0dQUgFOvXG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6841288},"engines":{"node":">=14"},"gitHead":"2973cdad1971f8c25a115e964a332e23cc5932a0","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"22.16.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.2.0_1762158281191_0.8476423004330564","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@last9/mcp-server","version":"0.4.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.4.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},{"name":"last9-dev","email":"hi@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"956ebc5ab4ec26a70dd7dab4dc0fec18316af7f8","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.4.0.tgz","fileCount":5,"integrity":"sha512-6BQxWPXWgBXdoiaFG1fodZceBsJ1g3gANXFKomFJbmj3gj+uXP8xwh7EkG6VC5JZM60qB/CG4G45nOvXPUcgVg==","signatures":[{"sig":"MEYCIQCLmjFqrC92e9x4tOLSv/S6ZrTLci8DP6F5vsSET0eziwIhAOiFrLJuybZGLVxFVqkj/o4WmFMmBuIsufKC5iTll/4W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46492},"engines":{"node":">=14"},"gitHead":"a2e6c5c74b9b29b8d1b6494f0fdcc99938cf4d4d","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"10.9.4","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"22.21.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.4.0_1771379598351_0.6209846147570861","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@last9/mcp-server","version":"0.5.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.5.0","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"e4372b9abbfe0e6ba21635bcc47531cebf43cc0f","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.5.0.tgz","fileCount":5,"integrity":"sha512-usKz0RhtOeuDC0iJ757WcVuzA7vno3n2qXnezbdwaj63ZngVrMcWcXo6DlPGKpDkZe/KIJU2fEw1wU1CaDe8qA==","signatures":[{"sig":"MEQCIHroQ6/Gu7tFJvJfXV4PeOQDilp678mcYQZZCBeMykCBAiAeC+yFCq0O3BZZuELL1UUgyYpENZXbU1Z2vO4qdOob7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51763},"engines":{"node":">=14"},"gitHead":"1d1b3394b3796e78ef015e9c00ed4c05a8d2c160","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.9.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"25.6.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.5.0_1772265897652_0.3034271756475784","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@last9/mcp-server","version":"0.5.1","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.5.1","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"dad18847a36a0fa574c129b2472b48f54497b87f","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.5.1.tgz","fileCount":5,"integrity":"sha512-GQTngeFWhw4/wZUyu6q4liPFKNXX1bfocTGEf0OeXXy5moDnH/Jwo8WwBntn5/JvgIXW18Hf8xAVfvTvTIpRWQ==","signatures":[{"sig":"MEQCIDJ4Qdd2osrtPHZJFjTq3XesN+ulb8d9UCP24nkw0IBQAiAdJ2c1lw3RSY85/W3iDFQ/cag1RjcwL5Ay+q2oKp7yaQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51996},"engines":{"node":">=14"},"gitHead":"f38a2478e1e200ee500accbf9dc2e0bbd64af871","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.9.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"25.6.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.5.1_1772447557703_0.3960160672928421","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@last9/mcp-server","version":"0.6.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.6.0","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"898909b90c9ac6aa9e56547e49c240c5c61e2e57","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.6.0.tgz","fileCount":5,"integrity":"sha512-5GoBPRzCYTIlTvznfsHbW+ywTLvlFvRj0VR+O4yiXAdvjVIAG3KmdtzSEoqfhAFT5eTtsGtlzcFPgSf7cAj1+Q==","signatures":[{"sig":"MEUCIQCGK7Q8gBWzQkGZkQ+1fDhiy8myPctFtAfrii1PAx77LAIgdu6ArvszWng8qR29VOkW/3tXgOgtGbkkzZ7rESdLg1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36537},"engines":{"node":">=14"},"gitHead":"2a35327d2c4d71d2e5ca14398be77f854a481b6f","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.9.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"25.6.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.6.0_1776834352858_0.15997606789246133","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@last9/mcp-server","version":"0.7.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.7.0","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"bd0958cfe72dda6487d4f8b40866e4ca772e2acc","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.7.0.tgz","fileCount":5,"integrity":"sha512-qf6hq4iNQ68GlbFAN57L0BVGSVdTjGRokKCz6s2ckbNsLXRt/veSVwu/gr+BfJbMgtzla5fXxY066rXiR0k82g==","signatures":[{"sig":"MEUCIQD6EiCyQbaIGNazGLkjkXiuLy0AIEa5uOJ95igSI8LPxgIgIxinzjr4Gji42BYhdtCfFNKUNIgmMSOzzbQPv9R6NI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36537},"engines":{"node":">=14"},"gitHead":"674d65c53ff726850e997c61d6575ac0f375e40a","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.9.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"25.6.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.7.0_1777348701551_0.16759256551173562","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@last9/mcp-server","version":"0.7.1","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.7.1","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"f06da6beb26928f981fee44abaca44363ee5a37f","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.7.1.tgz","fileCount":5,"integrity":"sha512-DprwVOZ+20X8inIImU0puZHTvJk51I8/gLt7WpsIczdqLgcrZvr7cQa7mZB4Azm/cHuBOIiiWZR1Z3LNAkNRiQ==","signatures":[{"sig":"MEYCIQCR1SNaUeanE46pJM2hxFelAne3Clg8PgZ8cmiZzxJLKwIhAMcJeej7ewVEdTnlcCImA/mMf5rie/wh33ve6EEekNJV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36537},"engines":{"node":">=14"},"gitHead":"e87b6bad71f94c5344052315cfa4521838f44a85","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.9.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"25.6.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.7.1_1778152246507_0.8554004058647606","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@last9/mcp-server","version":"0.7.2","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.7.2","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"2c516e39361d5d3ba960110e6bc8df4e3fec980e","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.7.2.tgz","fileCount":5,"integrity":"sha512-YzKITzdlX58xGxPe7P9xUtp74bPUAaU6RUxFlylSPemIwiwwYMpPP2hNtlM/RHdfdXuhmHzLNbSsvR8hgvb0WQ==","signatures":[{"sig":"MEQCIBI5l21dxbQHAu/n4K0nS1hHcwUpszb5cd3fTV7bxrLzAiBzTzbAgFU8Hc16ILDLAZx+BE38yh6BTJA7nyJgzcQIsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38042},"engines":{"node":">=14"},"gitHead":"735a426c4071b29e603ca6cab5d80a915ea8f218","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.9.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"25.6.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.7.2_1779268579166_0.04835161014696787","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@last9/mcp-server","version":"0.9.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.9.0","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"4061552a6f8aac714c75ad66b551b840c195b62b","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.9.0.tgz","fileCount":6,"integrity":"sha512-v1TCtlCs8F9oPBBumE1Z1IlpMbV9gzQ0xzXdHu3kciAZFJapEVCea8vNzHCYtUTNeSDdRrATvbWCdq/hS5t/yw==","signatures":[{"sig":"MEUCIQDBUG3exJRHKjYx7ojPPnKBlEdw/AfeWNVZ/L4Lzn2hOQIgNsVTsocijchvdZOWt07wLok3BBXsOvbgB/z+8EvyckA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41566},"engines":{"node":">=14"},"gitHead":"db4d3f2731fea9bc0fce40d127e2bd38bfeecf81","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"26.0.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.9.0_1782381389342_0.5335719187490873","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@last9/mcp-server","version":"0.10.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.10.0","maintainers":[{"name":"rizwan_last9","email":"rizwan@last9.io"},{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"a51aa650da82356dcf754006c34ad25cd3e8e468","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.10.0.tgz","fileCount":6,"integrity":"sha512-clRhya9hxcWAOkltajNwLLnXfe+OoA+JKQ7fy9mvykCH8I1repzud7NDnjQyibYPmvXkzJwUfEh71XPXYPZr3g==","signatures":[{"sig":"MEUCIQDWug/TbpMAPq8Y5oBfsjmLUMVBnOIC4nRcFT/xFY8xfAIgVygqSrGjChXoeCFKxrAufjXKUJjXJ07riR2eStBGyhc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41274},"engines":{"node":">=14"},"gitHead":"845dd7fea37a019beda9f0311e169b6cc66cb1f8","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"26.0.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.10.0_1783324261649_0.09062856506869954","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@last9/mcp-server","version":"0.16.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.16.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"d01d4805c0b96a599bebddefe00e1a91e4fda144","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.16.0.tgz","fileCount":5,"integrity":"sha512-kBQs0VfPQOBFy5SAdUuJrrHkkcBtqsX5FTS0JiA2DNOQ2Yx2N7A6SmNsJpV00KwVN57Of6uOIFNR+3qUoYx2EQ==","signatures":[{"sig":"MEQCIBdq2UPSbLCgcisoVC8gS0AV874OlLntBu2wt4o47/NCAiBzlx61QNAIA78gU3TQZvLeJRA8g167qspPkhtiq/URig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46204},"engines":{"node":">=14"},"gitHead":"a05b7aa7a57407f6e314ee0a9be795d67684f7a2","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.19.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.19.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.16.0_1787826310086_0.35023964000623287","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@last9/mcp-server","version":"0.17.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.17.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"bcb4a7200b6dd082ef1f27ac1d5e96f69ab22d01","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.17.0.tgz","fileCount":5,"integrity":"sha512-Dv2M9XMDe9aomZrFOK3gUC+FE5TGMdOatenaJMmW2NrscI3+oU2AXCo/XWt0EyCTMDM/O7q1NH9IiwCOecmIiQ==","signatures":[{"sig":"MEUCIHNsQjqOrF3SEp3w6ETTbB7gw+dr6Mu5uo/gOnk5N914AiEAnHuXOQ5xqYKLeyPMWJBRewuZGlSrFgGevBDnTM8r2CE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48927},"engines":{"node":">=14"},"gitHead":"7750c43d7e443ad4d0f4e43feee23395fbc7c704","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.19.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.20.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.17.0_1789115775037_0.11805985836653399","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@last9/mcp-server","version":"0.18.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.18.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"4f216840a8eaa90a447bca7c6b0d18841b743e5c","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.18.0.tgz","fileCount":5,"integrity":"sha512-5BTEHeGkgAGFQefphjQoTc5kcSk41hhojnvAtUpGZeOitddjc7T+vvadW4MWh7XZJYdRiw0tqogO3hClimbikg==","signatures":[{"sig":"MEUCIQD76t45mulld4CFMJPsapLmZGRtm6tV2qkHzA22pJ0XdgIgXVFnwD7gR19+rP4iKcexQo/duFmQiBDT8k8vYQVQRNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDMwJquX/xoPmbnM+7LmsEHTmVM6ugCuxvFa4bsXdvKWgIgBBlHkYlbOv89vuQvhFTVRYTQHeEK9IPDNUeNzPhn2Wo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53736},"engines":{"node":">=14"},"gitHead":"d707a924b47b36ad7374a85d89cc7270760b0768","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.19.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.20.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.18.0_1789978389923_0.1133928080305926","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@last9/mcp-server","version":"0.19.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.19.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"a8c7f1fdd8dede7d2b73049244081628bc30b1df","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.19.0.tgz","fileCount":5,"integrity":"sha512-b2mUx/+S2rnzzwgCzNSxIXmu8aKK+zNDuE7V28h/R1A0dSHH30G+o8W70Gu34J1iqbWZpqBY0b2lpf7rc1EpmQ==","signatures":[{"sig":"MEQCIADO9x10qbgJFVrZzADSlr+qUxWuA35W43xdDMhj7Q6bAiARjQl3TpMogsKnS7oIfXv8SVNMjUeZHmgb5++BMz6lAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDXdJy3IM75HhTwIs93JZ5ZE+Ej8ArVzABeA9k7yRy5/AIhAKoQ96zSl+jpQzfeFz3cgh1fN9BEIARNvJl0cBafvsdI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53736},"engines":{"node":">=14"},"gitHead":"3842c9e4e84eca2b31b4ebcc56f7cb2e0db23b79","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.20.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.21.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.19.0_1790151179725_0.8922085485143871","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"@last9/mcp-server","version":"0.19.1","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.19.1","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"d9f5a57a6bcf7575bcb84bfe0bf95b66ab0d0b92","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.19.1.tgz","fileCount":5,"integrity":"sha512-xs5qF0BRZHpopM5+GC4DNPE2uu+ADqUH7X0zRoKNu+OtLKGWhnn2jDJ4Ka/lxKSTSTS9vETvuYPKdUjDYLef8A==","signatures":[{"sig":"MEYCIQC8gQ1Bq6uYsx6TYNo5nr0kVM8HepyzikMlaoO8ycXR1AIhAIOsMeMtJSOEPmWp805GAI+1sjmggWGWQiu6ekmPqFtk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDzfpw8Z4Bu8ktyrRbX3D9vd3qZgGMbm02tyhLOdz9vWAiBzIdoOxtIM+i7PzfB4uKGYcZLr2qpO8I5O3cdH2vTkuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.19.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53915},"engines":{"node":">=14"},"gitHead":"31969a3186063b1c9e4b92f9f178db696f093234","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.20.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.20.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.19.1_1790189891515_0.7819456009218335","host":"s3://npm-registry-packages-npm-production"}},"0.19.2":{"name":"@last9/mcp-server","version":"0.19.2","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.19.2","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"df9d7b45dce1c335a7c98008315d5060dfe16428","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.19.2.tgz","fileCount":5,"integrity":"sha512-xXrGOEjyxH7LuWBMVxeT2/VZH2MiEvB1BP4xNT+4+b+lwFQUzojm4TtQULqYT95pe+QHHI7YCCQoEb0nKpRgjw==","signatures":[{"sig":"MEUCIQDlFZ3esAquvnSQ83B2cOkEoSIUcA99tXq/A8K7Kyi6QQIgEB7sDbLURofDo8Q5aiHHDHxejIF9pBri7pm9UhF8Lw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH1oVoao3GrKG18aWPm4ZJAvgncTHYkq7EdpP/PvjYEVAiAV+H8ECwns1kVO16YUsiFnxEskg1mClxvplRZPxYw2gQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.19.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53915},"engines":{"node":">=14"},"gitHead":"79099b73a002cf61952ca3085129b76c04fa6362","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.20.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.21.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.19.2_1790705450209_0.7877283944313447","host":"s3://npm-registry-packages-npm-production"}},"0.19.3":{"name":"@last9/mcp-server","version":"0.19.3","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.19.3","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"119c5cf0201200e3db4eb57287b44eb3392b7ed5","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.19.3.tgz","fileCount":5,"integrity":"sha512-3bs71ruZHS5U5wgwqowtjAx91NV/QfNSDsO9S2YlB55iBwmZEJfsUH/HQ4Q5nxO/Nwd/Pl08gL1LESKT16lV4w==","signatures":[{"sig":"MEQCIET7HTUsPoTAYIoI0b9Q1mZ2ZG3bbSHYvizj1oKWV1JxAiB2+pnRcmqLPpvDSM96LcbN/Z5R8nbLbIXmwvJqSz/LeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIETSBllkZ7gU9vCBrbNpjlTWuGeGfNwUqjyqm/4ZTnHyAiBaRtdG4qFfh92S0Wip6QBrUwZj7x7k98XGYyt0gf1ZIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.19.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53915},"engines":{"node":">=14"},"gitHead":"52d1b2186eca47e68e0ac87452a07c9b70e39deb","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.20.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.21.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.19.3_1790750410806_0.357431162509273","host":"s3://npm-registry-packages-npm-production"}},"0.19.4":{"name":"@last9/mcp-server","version":"0.19.4","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.19.4","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"fd7b376f92cbb24b2a2241399622a4c46c318a77","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.19.4.tgz","fileCount":5,"integrity":"sha512-4EcQJI+DEa1nnspeA9i79b8/jyl8p/HMY8LZxwBUPKV5xoQ+lNvqXplJwASmVSUmdY9ek4QLxxei0ZGO+xvppA==","signatures":[{"sig":"MEUCIAGplYSmLhXlEEyS68w2iYdzWhohNYmsu8t99XPrO7GEAiEAvgwFl05Ms+zj/yf6enrIDho0MGh3OG1F9bSbviQ+0es=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHC+43ghKjgdkN1eT27IU5evNlUtjvXZcM74C6aYdFVDAiEA04E6GmcReDITvuTuE4y9ZHS7wTOsx/m2NsxjpoV76dw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.19.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53915},"engines":{"node":">=14"},"gitHead":"671adab4b4ccd174c606bd3e5acf3092d66de59f","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.21.0","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.21.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.19.4_1791261687515_0.22400144767626884","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@last9/mcp-server","version":"0.20.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.20.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"03a769056addb5d1516c583848f7243b868b92ae","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.20.0.tgz","fileCount":5,"integrity":"sha512-pKB7sNdVrvpR44O6hDGwU6cDPo3iyJ/EfimTbezNE4LnMIMr9r/TdjXn9vc0xHz7ZPZ9RQz7+8xY5FjEY5xUww==","signatures":[{"sig":"MEQCICCSb6xfOLF2un0bGT/PUDGJttNHhv/6E+0PgzoZcGrMAiAhhnmBr6dJReW9qFxvZ3/h7FXza2ck+VSndWfZcTcDtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCxdb0akwQwKZiPcwAkftn5N7lj4f5UBxn8taZ3qQ5q0AIgUl+i0Wh/572hpQz5+8t+ltsZXLbtrPbDSRka9tsFQRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":86374},"engines":{"node":"^22.23.4 || ^24.22.1 || >=26.12.1"},"gitHead":"e6c3ab779aba5a20ad42d6cd37de776920e90da9","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.21.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.22.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.20.0_1792998940042_0.2589661820681699","host":"s3://npm-registry-packages-npm-production"}},"0.20.1":{"name":"@last9/mcp-server","version":"0.20.1","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.20.1","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"0d0a7af89b424acd947f5d9abc9ab81164796f68","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.20.1.tgz","fileCount":5,"integrity":"sha512-9iruK8LMuIKvSo9Rvi2LDTq3P2gP14Xcax0KzI93P3zz6Y2WPw3m2+Ghv57okqskADU3I5Dq6bKVwrVjMDOxig==","signatures":[{"sig":"MEYCIQD0dqZU3i0D+fPq13SR6NRsbY7FGD9jbhUAEDBnfV8ZnQIhAOq++bAeqV+4t+P0WdlBXTOJl0R90ExRArPzSNll13ON","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDOspqvAfthy9bXi2f+D7aLauYEaX+/k1iy2R6K9G0X/AiBYvRcAuvx6qPOnWqnMazesUzB7N4ntrEwcYK68xmLzAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":86924},"engines":{"node":"^22.23.4 || ^24.22.1 || >=26.12.1"},"gitHead":"f7f5b1a84888142fd522327d9e36d7c15db1473d","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.21.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.22.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.20.1_1793086474531_0.7871290422355602","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@last9/mcp-server","version":"0.21.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.21.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"af83eb18f2ad241ab48cface603f63a2529b8bb9","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.21.0.tgz","fileCount":5,"integrity":"sha512-L94eqsxsfba8fPo99p3tMZsBDNtpecfi3DdDBhTVWWclITGX5d8QzMRtCLeQLQ3zqqkh/2HlyFwyPpt3VyTj7w==","signatures":[{"sig":"MEYCIQD8nNwJPjMCvQoK2WDtc2sAqGJBTImrLuUktzV2xiuW9QIhAM21Q/aorhshS59Eiins9zVVU35Qj0+q6oAsHMk0QWDq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCGtqIXm1GxDBA9v/C724DZfSqMvOloYw1dsUVc6p262wIhAIdS+fVC9fkKA8w/HFtg04Ik2J3iZLgmCXlzJKZCM9oz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":87254},"engines":{"node":"^22.23.4 || ^24.22.1 || >=26.12.1"},"gitHead":"c53e095c2a7a4be00b5511ee5b86b9f0cd7b8536","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.21.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.22.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.21.0_1793187907455_0.09318709184907348","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@last9/mcp-server","version":"0.22.0","keywords":["last9","mcp","ai","claude"],"author":{"name":"Last9"},"license":"Apache-2.0","_id":"@last9/mcp-server@0.22.0","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"homepage":"https://last9.io/mcp","bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"bin":{"last9-mcp":"bin/cli.js"},"dist":{"shasum":"99d66119bcda95f66cdf98fcd4957e8db5b65135","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.22.0.tgz","fileCount":5,"integrity":"sha512-E4aS0Dq+CvqjOaZd3WMmYh7W5w4WmOcsg8RgepaMbgRSZXQBbOiRkbhL2WdtCH1nLAf4pMv5W64xPCspEH2UMA==","signatures":[{"sig":"MEYCIQCBBYJdlaPRMgvB34hdMrTSbItMdFdUh6ngNsiiS19+rgIhAP7+SAQoC1uCPUm1891DL+LMRu2GwytbpXd3J2lZH3Ih","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDkd6A2sCmtMCem9QxEQgmXyO5THOct6O+0QlgVzQesagIhAKMsc3bHT4Sbv1w815I7abmkmvW+OTnraaSveTlks19T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":92834},"engines":{"node":"^22.23.4 || ^24.22.1 || >=26.12.1"},"gitHead":"d8e89b95e02c576c39c6885404dbe80c38c82756","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.21.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"_nodeVersion":"24.22.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.22.0_1793640200404_0.10324741420128525","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"_id":"@last9/mcp-server@0.23.0","bin":{"last9-mcp":"bin/cli.js"},"bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"dist":{"shasum":"2510b27ce0581a993e12868d167ef4475d8e9b8d","tarball":"https://registry.npmjs.org/@last9/mcp-server/-/mcp-server-0.23.0.tgz","fileCount":5,"integrity":"sha512-g8pwIRvzzGxDim66t26uHwZvPV+1Chby1gqLPMGQXtE6mCE6H1T3wXGTZdf4K1das7k3HBN/6v3nvuKv989+Jg==","signatures":[{"sig":"MEUCIQCPuNtCdHxbn6ShviChlIJ2JDsXnF4I449DyzWmk0ph7wIgT7PMrFBAGPaWLjoQuCUJQ1TH0m/oaa4wliRDx2SyK8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEhL2zxEsLqsxngyCMENOJk5t1uEsOvOg8emdVRQ/g3vAiEAjx+i8cW5tWeOkxq3malJBIzWd80nHauI68otjEjcQlI="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@last9%2fmcp-server@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":99736},"name":"@last9/mcp-server","author":{"name":"Last9"},"engines":{"node":"^22.23.4 || ^24.22.1 || >=26.12.1"},"gitHead":"29fe090137da0507123a3f614cd3deec5ff00801","license":"Apache-2.0","scripts":{"preversion":"go run . --version","postinstall":"node bin/download-binary.js"},"version":"0.23.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bc568134-b443-46ba-97c5-ac4a47cb99e9"}},"homepage":"https://last9.io/mcp","keywords":["last9","mcp","ai","claude"],"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"_npmVersion":"11.21.1","description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","directories":{},"maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"_nodeVersion":"24.22.1","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-server_0.23.0_1793764785484_0.9178166384233534"}}},"time":{"created":"2025-03-29T07:10:11.991Z","modified":"2026-11-04T03:59:46.136Z","0.0.9":"2025-03-29T07:10:12.371Z","0.1.0":"2025-03-29T07:30:24.529Z","0.1.1":"2025-04-01T08:28:59.797Z","0.1.2":"2025-04-03T01:49:25.952Z","0.1.3":"2025-04-20T06:42:57.472Z","0.1.4":"2025-04-25T06:41:16.427Z","0.1.5":"2025-06-29T17:34:16.143Z","0.1.8":"2025-06-29T18:05:50.250Z","0.1.11":"2025-08-27T16:23:16.641Z","0.1.12":"2025-09-20T20:33:45.890Z","0.1.13":"2025-09-20T20:57:44.107Z","0.1.15":"2025-10-02T21:49:54.679Z","0.2.0":"2025-11-03T08:24:41.521Z","0.4.0":"2026-02-18T01:53:18.505Z","0.5.0":"2026-02-28T08:04:57.795Z","0.5.1":"2026-03-02T10:32:37.847Z","0.6.0":"2026-04-22T05:05:53.027Z","0.7.0":"2026-04-28T03:58:21.720Z","0.7.1":"2026-05-07T11:10:46.641Z","0.7.2":"2026-05-20T09:16:19.302Z","0.9.0":"2026-06-25T09:56:29.499Z","0.10.0":"2026-07-06T07:51:01.793Z","0.16.0":"2026-08-27T10:25:10.223Z","0.17.0":"2026-09-11T08:36:15.192Z","0.18.0":"2026-09-21T08:13:10.009Z","0.19.0":"2026-09-23T08:12:59.815Z","0.19.1":"2026-09-23T18:58:11.607Z","0.19.2":"2026-09-29T18:10:50.314Z","0.19.3":"2026-09-30T06:40:10.883Z","0.19.4":"2026-10-06T04:41:27.611Z","0.20.0":"2026-10-26T07:15:40.119Z","0.20.1":"2026-10-27T07:34:34.610Z","0.21.0":"2026-10-28T11:45:07.536Z","0.22.0":"2026-11-02T17:23:20.495Z","0.23.0":"2026-11-04T03:59:45.671Z"},"bugs":{"url":"https://github.com/last9/last9-mcp-server/issues"},"author":{"name":"Last9"},"license":"Apache-2.0","homepage":"https://last9.io/mcp","keywords":["last9","mcp","ai","claude"],"repository":{"url":"git+https://github.com/last9/last9-mcp-server.git","type":"git"},"description":"Last9 MCP Server - Model Context Protocol server implementation for Last9","maintainers":[{"name":"prathamesh-sonpatki","email":"prathamesh@last9.io"}],"readme":"# Last9 MCP Server\n\n![last9 mcp demo](mcp-demo.gif)\n\nYour AI agent doesn't know what's broken in production. This fixes that.\n\n[Last9 MCP Server](https://last9.io/mcp/) connects Claude, Cursor, Windsurf, and any other MCP-capable AI assistant directly to your production observability data — logs, metrics, traces, exceptions, database queries, alerts, and deployments. The agent stops guessing and starts reading the actual signal.\n\n- [Watch the demo](https://www.youtube.com/watch?v=AQH5xq6qzjI)\n- [Announcement post](https://last9.io/blog/launching-last9-mcp-server/)\n\n---\n\n## Start in 30 seconds (Hosted)\n\nNo binary to install. No tokens to manage. One URL, OAuth in your browser, done.\n\nFind your org slug in your Last9 URL: `app.last9.io/<org_slug>/...`\n\n### Claude Code\n\n```bash\nclaude mcp add --transport http last9 https://app.last9.io/api/v4/organizations/<org_slug>/mcp\n```\n\nType `/mcp`, select last9, authenticate. That's it.\n\n### Cursor\n\n**Settings > MCP > Add New MCP Server:**\n\n```json\n{\n  \"mcpServers\": {\n    \"last9\": {\n      \"type\": \"http\",\n      \"url\": \"https://app.last9.io/api/v4/organizations/<org_slug>/mcp\"\n    }\n  }\n}\n```\n\nClick **Connect**, complete OAuth.\n\n### VS Code\n\nRequires v1.99+. Open Command Palette → **MCP: Add Server**, paste the URL, authenticate.\n\nOr directly in `settings.json`:\n\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"last9\": {\n        \"type\": \"http\",\n        \"url\": \"https://app.last9.io/api/v4/organizations/<org_slug>/mcp\"\n      }\n    }\n  }\n}\n```\n\n### Windsurf\n\n**Settings > Cascade > Open MCP Marketplace > gear icon (`mcp_config.json`):**\n\n```json\n{\n  \"mcpServers\": {\n    \"last9\": {\n      \"serverUrl\": \"https://app.last9.io/api/v4/organizations/<org_slug>/mcp\"\n    }\n  }\n}\n```\n\n### Claude Web/Desktop\n\n**Settings > Connectors > Add custom connector.** Name it `last9`, paste the URL, authenticate.\n\n> Requires admin access to your Claude organization.\n\n---\n\n## Self-Hosted (STDIO)\n\nUse this when your MCP client doesn't support HTTP transport, or when you need the server running locally.\n\n### Install\n\n**Homebrew:**\n\n```bash\nbrew install last9/tap/last9-mcp\n```\n\n**NPM:**\n\nRequires Node.js 22.23.4+, 24.22.1+ or 26.12.1+: earlier releases accept TLS certificates from the compromised eMudhra intermediates when the installer downloads the binary.\n\n```bash\nnpm install -g @last9/mcp-server@latest\n# or directly:\nnpx -y @last9/mcp-server@latest\n```\n\n**Binary releases** (Windows / manual):\n\nDownload from [GitHub Releases](https://github.com/last9/last9-mcp-server/releases/latest):\n\n| Platform        | Archive                                 |\n| --------------- | --------------------------------------- |\n| Windows (x64)   | `last9-mcp-server_Windows_x86_64.zip`   |\n| Windows (ARM64) | `last9-mcp-server_Windows_arm64.zip`    |\n| Linux (x64)     | `last9-mcp-server_Linux_x86_64.tar.gz`  |\n| Linux (ARM64)   | `last9-mcp-server_Linux_arm64.tar.gz`   |\n| macOS (x64)     | `last9-mcp-server_Darwin_x86_64.tar.gz` |\n| macOS (ARM64)   | `last9-mcp-server_Darwin_arm64.tar.gz`  |\n\n### Get a Refresh Token\n\nOnly **admins** can create tokens.\n\n1. Go to [API Access](https://app.last9.io/settings/api-access)\n2. Click **Generate Token** with Write permissions\n3. Copy it\n\n### Client Configuration\n\n**Homebrew:**\n\n```json\n{\n  \"mcpServers\": {\n    \"last9\": {\n      \"command\": \"/opt/homebrew/bin/last9-mcp\",\n      \"env\": {\n        \"LAST9_REFRESH_TOKEN\": \"<your_refresh_token>\"\n      }\n    }\n  }\n}\n```\n\n**NPM:**\n\n```json\n{\n  \"mcpServers\": {\n    \"last9\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@last9/mcp-server@latest\"],\n      \"env\": {\n        \"LAST9_REFRESH_TOKEN\": \"<your_refresh_token>\"\n      }\n    }\n  }\n}\n```\n\n**Where to paste this:**\n\n| Client             | Location                                                                                                                                |\n| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |\n| Claude Web/Desktop | Settings > Developer > Edit Config (`claude_desktop_config.json`)                                                                       |\n| Cursor             | Settings > Cursor Settings > MCP > Add New Global MCP Server                                                                            |\n| Windsurf           | Settings > Cascade > MCP Marketplace > gear icon (`mcp_config.json`)                                                                    |\n| VS Code            | Wrap in `{ \"mcp\": { \"servers\": { ... } } }` in `settings.json` — [details](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) |\n\n<details>\n<summary>VS Code STDIO config</summary>\n\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"last9\": {\n        \"type\": \"stdio\",\n        \"command\": \"/opt/homebrew/bin/last9-mcp\",\n        \"env\": {\n          \"LAST9_REFRESH_TOKEN\": \"<your_refresh_token>\"\n        }\n      }\n    }\n  }\n}\n```\n\nFor NPM: use `\"command\": \"npx\"` and add `\"args\": [\"-y\", \"@last9/mcp-server@latest\"]`.\n\n</details>\n\n<details>\n<summary>Windows</summary>\n\nAfter downloading from [GitHub Releases](https://github.com/last9/last9-mcp-server/releases/latest), extract and point to the full path:\n\n```json\n{\n  \"mcpServers\": {\n    \"last9\": {\n      \"command\": \"C:\\\\Users\\\\<user>\\\\AppData\\\\Local\\\\Programs\\\\last9-mcp-server.exe\",\n      \"env\": {\n        \"LAST9_REFRESH_TOKEN\": \"<your_refresh_token>\"\n      }\n    }\n  }\n}\n```\n\nThe NPM route is easier on Windows — no path management.\n\n</details>\n\n### Environment Variables\n\n| Variable                     | Default              | Description |\n| ---------------------------- | -------------------- | ----------- |\n| `LAST9_REFRESH_TOKEN`        | *(required)*         | Refresh token from [API Access](https://app.last9.io/settings/api-access) |\n| `LAST9_DATASOURCE`           | org default          | Datasource/cluster name — useful when you have multiple Levitate clusters |\n| `LAST9_FAKE_NOW_ISO`         | *(unset)*            | **For evals/replays only; never set in production.** RFC3339 instant (e.g. `2026-01-02T15:04:05Z`) that replaces the current time when resolving relative windows such as `lookback_minutes`, so runs are reproducible. An invalid value is a startup error. Timeouts, caches and token expiry keep using real time |\n| `LAST9_API_HOST`             | `app.last9.io`       | Override the API host |\n| `LAST9_TOOLSETS`             | all tools            | Comma-separated toolsets to expose (`logs`, `traces`, `metrics`, `alerts`, `dashboards`, `profiles`, `grafana`, `investigate`, `all`). Alias: `LAST9_MCP_TOOLSETS` |\n| `LAST9_MCP_READ_ONLY`        | `false`              | Set `true` to serve only read-only tools; see [Read-only mode](#read-only-mode). A value that is not a boolean is a startup error. Alias: `LAST9_READ_ONLY` |\n| `LAST9_MCP_ALLOW_WRITE_TOOLS`| —                    | Comma-separated write tools still served in read-only mode. Alias: `LAST9_ALLOW_WRITE_TOOLS` |\n| `LAST9_MAX_GET_LOGS_ENTRIES` | `5000`               | Max entries for chunked `get_logs` requests |\n| `LAST9_USE_LOG_SEARCH_API`   | `false`              | Set `true` to answer `get_logs` and `get_service_logs` with one server-side search call instead of client-side chunking. Each call gets 90 seconds, then returns advice to narrow the window; a 502 or 503 is retried once within it |\n| `LAST9_DEBUG_CHUNKING`       | `false`              | Set `true` to log chunk-planning details for `get_logs`, `get_service_logs`, `get_traces` |\n| `LAST9_DISABLE_TELEMETRY`    | `true`               | Set `false` to enable internal OTel tracing |\n| `OTEL_SDK_DISABLED`          | —                    | Standard OTel env var. Overrides `LAST9_DISABLE_TELEMETRY` |\n| `OTEL_EXPORTER_OTLP_ENDPOINT`| —                    | OTLP collector endpoint (only when telemetry is enabled) |\n| `OTEL_EXPORTER_OTLP_HEADERS` | —                    | OTLP auth headers (only when telemetry is enabled) |\n\n### Read-only mode\n\n`--read-only` (or `LAST9_MCP_READ_ONLY=true`) serves only tools annotated `readOnlyHint: true`, so no tool can create, change or delete alert rules, notification channels, dashboards or drop rules, acknowledge or reassign alerts, or mute groups. A tool without annotations counts as a write tool and is hidden.\n\nTo keep a few write tools, list them with `--allow-write-tools` (or `LAST9_MCP_ALLOW_WRITE_TOOLS`):\n\n```bash\nlast9-mcp --read-only --allow-write-tools=acknowledge_alert,mute_alert_group\n```\n\n- The server refuses to start if an allowed name is not a write tool (a typo, or a read tool's name); the error lists the valid write tools.\n- `--allow-write-tools` without `--read-only` is a startup error, because every write tool is already served.\n- Read-only combines with `--toolsets`: a tool is served only when it passes both. `--toolsets=alerts --read-only --allow-write-tools=mute_alert_group` serves the alerts read tools plus `mute_alert_group`; an allowed write tool outside the chosen toolsets stays hidden.\n- `--http` mode and `dump-tools` honor the same flags and env vars: `go run . dump-tools --read-only` prints the read-only surface, with the server instructions it serves in `instructions`.\n- Read tools' descriptions, schemas and results, and the server instructions, never name a hidden write tool. An allowed write tool can still name its hidden siblings (`create_alert` creates a disabled rule that `patch_alert` enables), so allow such pairs together.\n\n---\n\n## What It Can Do\n\n### Orientation\n\n- **`get_workspace_overview`** — Recommended first call when a request names no service or tool (one that does goes straight to its tool): environments, which signals (logs, traces, metrics) were seen in the last hour, service and alert-group counts, firing alerts, and the current time in one cheap call. A signal not seen in that hour can still have older data, so it stays queryable. A failed sub-call leaves its field `null` and adds an `errors[]` entry. Served under every toolset\n- **`get_current_time`** — Current time, plus absolute bounds for `last 2h`, `yesterday` or `since yesterday 9am IST`, in any IANA zone or common abbreviation. Served under every toolset\n\n### Service Health\n\n- **`get_service_summary`** — Ranked fleet `(service, env)` rows: interval request_count, throughput_rpm, HTTP 4xx/5xx counts, and gRPC error counts\n- **`get_service_environments`** — Available environments for your services. Run this first — other APM tools need `env` from here\n- **`get_service_performance_details`** — Full breakdown: throughput, error rate, p50/p90/p95/avg/max, apdex, availability (summarized by default; full series with `include_series`)\n- **`get_service_operations_summary`** — Operations grouped by HTTP endpoints, DB calls, messaging, HTTP clients\n- **`get_service_dependency_graph`** — Dependency map with throughput, latency, and error rates for upstream/downstream/infra\n- **`get_apm_service_deviations`** — Compare a current window against an equal-duration baseline: regressions/improvements, Apdex reconciliation, and a terminal outcome (fleet or single service)\n- **`get_exceptions`** — Server-side exceptions with service and span filters\n\n### Database Observability\n\nFour tools that go directly at your database performance, derived from OpenTelemetry trace spans and, where traces are absent, infrastructure metrics such as CloudWatch. No extra instrumentation needed if you're already using OTel.\n\n- **`get_databases`** — Discover all databases across your infrastructure: DB type, host, throughput (queries/min), p95 latency, error rate, number of dependent services. Also discovers databases from infrastructure metrics such as CloudWatch, with no trace instrumentation needed — those rows carry an activity value instead of trace metrics\n- **`get_database_slow_queries`** — The actual slowest query executions, ordered by duration, with trace IDs for drilling into full traces\n- **`get_database_queries`** — Query patterns and aggregates: how often a query runs, average/p95 duration, error rate\n- **`get_database_server_metrics`** — Server-side metrics from the DB host itself (CPU, connections, buffer hit rates — depends on your DB system)\n\nSupports PostgreSQL, MySQL, MongoDB, Redis, Aerospike, and anything else OTel traces with a `db_system` attribute — plus databases discovered from infrastructure metrics such as CloudWatch, whose rows carry an activity value instead of trace metrics.\n\n### Prometheus / PromQL\n\n- **`prometheus_range_query`** — PromQL range queries over any metric\n- **`prometheus_instant_query`** — Instant queries; use rollup functions like `avg_over_time`, `sum_over_time`\n- **`prometheus_label_values`** — Label values for a given series\n- **`prometheus_labels`** — All labels available for a series\n\nPoint these at a different datasource/cluster than the default by setting `LAST9_DATASOURCE`, or per call with `datasource`. An omitted `datasource` uses the default; a unique near miss that the matcher considers safe (such as a case variant) uses its closest match. A missing, extra or transposed letter is not guaranteed to resolve automatically: even one candidate can require confirmation when the edit could affect a region or environment code. Looser or ambiguous matches return candidates and run no query (not an error); unknown names return an error. An additional content block names the datasource used whenever you did not name it exactly. `get_metric_status`, `get_service_profile`, and `get_apm_service_deviations` resolve `datasource` the same way.\n\n### Logs\n\n- **`get_logs`** — Full JSON pipeline log queries (aggregations, filters, field extraction)\n- **`get_service_logs`** — Log lines for a service, filterable by severity and body content; summarized over 20 lines unless `response_mode` is `raw`\n- **`get_log_patterns`** — A service's log lines in a window clustered into message templates, with count, first/last seen, severity mix and a sample\n- **`get_emerging_log_patterns`** — Log templates that are new, increased, decreased or disappeared against a baseline window, with counts from both\n- **`get_log_attributes`** — Global catalog of attributes in the log schema for a time window\n- **`get_log_attributes_for_pipeline`** — Log fields actually present for an in-progress pipeline (scoped discovery), each with its exact `filter_field`\n- **`get_drop_rules`** — Log drop rules from [Last9 Control Plane](https://last9.io/control-plane)\n- **`add_drop_rule`** — Create a new drop rule to cut log volume at the source\n\n### Traces\n\n- **`get_traces`** — JSON pipeline trace queries for broad searches and aggregations\n- **`get_service_traces`** — Traces by exact trace ID or service name. Use this when you have a trace ID — it's faster\n- **`get_trace_attributes`** — Global catalog of attributes in the trace schema\n- **`get_trace_attributes_for_pipeline`** — Attributes actually present for an in-progress pipeline (scoped discovery), each with its exact `filter_field`\n- **`get_trace_attribute_values`** — Distinct values for a trace attribute, optionally scoped to a pipeline\n- **`get_trace_attribute_deviations`** — Ranks attribute values that differ between two bounded span cohorts (slow vs fast, error vs non-error, or two time windows). Correlation, not cause\n- **`get_trace_waterfall`** — One exact trace as a parent/child waterfall with interval-union self-time, slowest spans, and graph warnings\n\n### Change Events & Alerts\n\n- **`get_change_events`** — Deployments, config changes, rollbacks. Correlate incidents with what changed\n- **`analyze_change_impact`** — Did a change break anything? Compares a service and its direct callers before and after a change: golden signals, APM and trace-attribute deviations, new firing alerts, and a verdict (`regression likely` / `no significant change` / `insufficient data`)\n- **`get_alert_groups`** — Configured Compass alert groups with metadata labels, team, tier, and rule counts — including groups with zero rules and groups that are not firing\n- **`get_alert_coverage`** — What you are not alerting on: uncovered golden signals, fully disabled or unrouted alert groups, and rules muted too long, each with a suggested fix tool. Read-only.\n- **`get_alert_config`** — Alert rule configurations — searchable by name, severity, type, tags\n- **`get_entity_kpis`** — Every KPI (id, name, PromQL, unit) on one alert group, including KPIs no rule uses yet — the ids `create_alert` and `validate_alert_expression` need\n- **`create_kpi`** — Create a KPI (PromQL + unit) on an alert group when no existing KPI fits. Create once and keep the returned id\n- **`get_alerts`** — Currently firing alerts within a time window\n- **`get_alert_rule_state`** — Historical firing state (1/0) per alert rule over a time range, grouped by `rule_id`. Filterable by alert group, rule name, label filters, and state.\n- **`get_notification_channels`** — Configured notification channels (Slack, PagerDuty, email, etc.). `scope=channels` lists the channels themselves (ids for attaching); the default `attached` lists per-alert-group attachments\n- **`recommend_alert_config`** — Read-only design guidance (lifecycle, validation gates, responder context) before creating an alert rule\n- **`validate_alert_expression`** — Dry-run an alert expression against an alert group's KPIs without saving anything\n- **`describe_alert_chart`** — Read-only: the alertable signals (key, unit) on a Discover chart (`discover-service`, `discover-exceptions`)\n- **`create_alert`** — Create an alert rule (static, or adaptive via `adaptive_std_cmp`) in an existing alert group; always created disabled as a draft. Create once; refine with `update_alert` / `patch_alert`\n- **`create_alert_from_chart`** — Create a static-threshold alert rule from a Discover chart in one call. Like `create_alert`, the rule is created disabled as a draft\n- **`update_alert`** — Full replacement of a rule's evaluation config (may return a replacement rule ID)\n- **`patch_alert`** — Partial change to a rule: enable/pause, `mute_until`, responder `properties`, weekly `recurring_mute_schedule` (or `clear_recurring_mute_schedule`)\n- **`delete_alert`** — Permanently delete an alert rule\n- **`mute_alert_group`** — Mute (or unmute) every rule in an alert group until a deadline\n- **`acknowledge_alert`** — Take ownership of a firing alert, or release it\n- **`reassign_alert`** — Hand an already-acknowledged alert to another user\n- **`create_notification_channel`** — Create a Slack, PagerDuty, Opsgenie, email, or generic webhook channel\n- **`attach_notification_channel`** — Route an existing channel to an alert group for `breach`, `threat`, or both\n- **`detach_notification_channel`** — Remove one channel-to-alert-group attachment\n- **`delete_notification_channel`** — Permanently delete a channel that has no attachments\n\nThe alert write tools (`create_kpi`, `create_alert`, `update_alert`, `patch_alert`, `delete_alert`, `create_alert_from_chart`, `mute_alert_group`, `acknowledge_alert`, `reassign_alert`, `create_notification_channel`, `attach_notification_channel`, `detach_notification_channel`, `delete_notification_channel`) need a token with write scope; `delete_alert`, `detach_notification_channel` and `delete_notification_channel` need delete scope instead. They are exposed only in the `alerts` toolset.\n\nRules, channels and attachments these tools create are marked `created_via: last9-mcp` together with the MCP client's name and version (on rules, the `_l9_created_via_` and `_l9_created_via_client_` annotations, which `patch_alert` and `update_alert` keep and callers cannot set). `get_entity_alert_rules` and `get_notification_channels` show the marker, and `delete_alert`, `detach_notification_channel` and `delete_notification_channel` tell agents to clean up only marked resources unless the user names one.\n\n### Custom Dashboards\n\n- **`list_dashboards`** — All custom dashboards in your org: IDs, names, and metadata\n- **`get_dashboard`** — Full dashboard definition by ID, including panels and queries\n- **`preview_dashboard`** — Read-only preview of an unsaved dashboard or patch: resolved queries, bounded per-panel results and a net panel diff; never saves\n- **`validate_dashboard`** — Read-only lint + execute + classify for a saved dashboard id or an inline `dashboard_definition` over a ≤24h window. Never creates or updates dashboards\n- **`create_dashboard`** — Create a net-new custom dashboard once (panels, queries, metadata). After the id is returned, edit panels with `patch_dashboard`.\n- **`update_dashboard`** — Restructure most of an existing dashboard by ID (full replacement; readonly system dashboards return an error). For individual panel edits use `patch_dashboard`\n- **`patch_dashboard`** — Targeted edits to an existing dashboard by ID (add/update/remove/move panel, set title, set variable); returns a compact diff, not the full dashboard\n- **`delete_dashboard`** — Delete a custom dashboard by ID\n- **`list_dashboard_snapshots`** — Frozen point-in-time snapshots for a dashboard (metadata only)\n- **`get_dashboard_snapshot`** — Full frozen snapshot including panel data for RCA / shareable views\n- **`delete_dashboard_snapshot`** — Delete a frozen snapshot by ID\n\nDashboard authoring is available through MCP `prompts/list` and `prompts/get`, without installing a skill. All three prompts take no arguments:\n\n- **`create_dashboard_guide`** — Discovery, layout and panel selection; validate the complete candidate and run each panel's query before approval, create once, patch targeted edits, then read back.\n- **`dashboard_examples`** — A complete example covering service RED, endpoint latency, status classes, host health, log counts and trace panels, with dependent variables.\n- **`query_guide`** — Counter/gauge/histogram and derived trace metric semantics, instant versus range, rate windows, percentage bounds, and logjson/tracejson rules.\n\nThe same content is readable at `last9://reference/create_dashboard_guide`, `last9://reference/dashboard_examples`, and `last9://reference/query_guide`. Prompts and resources remain discoverable under every toolset; executing the workflow needs the relevant tools (for mixed-signal authoring, use `--toolsets=dashboards,investigate`, which also serves `list_datasources`). Read-only sessions can prepare and validate but cannot save. Check tool availability before following a step.\n\nPanel checks currently use `prometheus_range_query`, `prometheus_instant_query`, `get_logs` and `get_traces` alongside `validate_dashboard`. The validator's unsupported query types and simplified defaults do not establish rendering parity. The separate query-check step will switch to `query_panel` after #475 lands.\n\n### Continuous Profiling\n\nRequires continuous profiling enabled for the org. Discover services first with `get_profile_services`, then pull a flamegraph or ranked functions.\n\n- **`get_profile_services`** — Services that have profiling data in the window (index before querying)\n- **`get_flamegraph`** — Nested flamegraph tree for one service (`cpu` default; also `alloc`, `wall`)\n- **`get_top_functions`** — Self-sample ranking of hottest functions for one service\n- **`get_profile_summary`** — Short natural-language triage of the profile for one service\n\n### Grafana Dashboards\n\nRead-only tools against the org's Grafana instance (via Last9's Grafana proxy). Credential fields are never returned to the model. Enable with `LAST9_TOOLSETS=grafana` (or leave toolsets unset for all tools).\n\n- **`grafana_search_dashboards`** — Search dashboards by title substring (paginated; `truncated: true` when the cap is hit)\n- **`grafana_get_dashboard`** — Dashboard summary by uid (panels, variables, PromQL targets); `full_json=true` for raw Grafana JSON\n- **`grafana_list_folders`** — Folder tree\n- **`grafana_list_folder_dashboards`** — Dashboards in one folder (paginated)\n- **`grafana_list_datasources`** — Datasource inventory without credentials\n\n### Fuzzy Name Resolution\n\n- **`did_you_mean`** — When the agent isn't sure about an entity name, this returns the closest matches from your catalog (services, environments, hosts, databases, K8s deployments/namespaces, jobs). Up to 3 suggestions with similarity scores. The server calls this automatically before most tools when a name lookup returns empty.\n\n### Service Profile\n\n- **`get_service_profile`** — What a service's telemetry actually looks like, before you query it: which signals exist, language and runtime, deployment environments, the shape of its logs, and a recommended ingest fix where one applies. Lets the agent skip trace tools when a service has no traces, and parse severity from the log body when `SeverityText` is empty instead of filtering on it and finding nothing.\n\n---\n\n## How It Works\n\n**Deep links on every response.** Every tool returns a `deep_link` field — a direct URL into the Last9 dashboard for that exact query and time range. The agent can hand you the link; you click it; you're there.\n\n**Toolsets.** By default the server exposes every tool. Automation hosts that only need investigation (logs/traces/metrics/profiles) can set `LAST9_TOOLSETS=investigate` (or pass `--toolsets=investigate`) so `tools/list` stays small without client-side mass-disable. Named packs: `logs`, `traces`, `metrics`, `alerts`, `dashboards`, `profiles`, `grafana`, `investigate`, `all`. Unknown names fail fast. `get_current_time` and `get_workspace_overview` are served under every toolset. In HTTP mode a request can narrow this further with the `X-Last9-Toolsets` header (see [Per-request toolsets](#per-request-toolsets)). The `alerts` pack also serves the read-only `prometheus_range_query` and `get_dashboard`, which the `author-alert` prompt calls. The `metrics` pack alone does **not** include `list_datasources` or `did_you_mean` — use `investigate` (or combine toolsets) when you need those discovery helpers.\n\n**Tool reference resources.** Long logjson/tracejson/service-logs/metrics manuals are MCP resources (`last9://reference/logjson`, `last9://reference/tracejson`, `last9://reference/service_logs`, `last9://reference/metrics`, `last9://reference/investigation`, `last9://reference/alerting`), not always-on tool description text. The alerting manual covers the alert expression grammar, static vs adaptive fields, units, what `validate_alert_expression` checks, and latency / error-rate / saturation rule templates. Critical query rules stay on the tool description so agents that never call `resources/read` still get correct construction guidance. Discover org-specific fields with `get_log_attributes` / `get_log_attributes_for_pipeline` (and the trace equivalents)—they are not injected into descriptions.\n\n**Chunked large results.** `get_logs` and `get_traces` handle large result sets through chunking rather than truncating. The default limit is 5000 entries for logs; configurable via `LAST9_MAX_GET_LOGS_ENTRIES`.\n\n---\n\n## Development\n\n<details>\n<summary>HTTP mode, curl testing, building from source</summary>\n\n### Run in HTTP Mode\n\n```bash\nexport LAST9_REFRESH_TOKEN=\"your_refresh_token\"\nexport LAST9_HTTP=true\nexport LAST9_PORT=8080\n./last9-mcp-server\n```\n\nServer starts at `http://localhost:8080/mcp`.\n\n### Test with curl\n\nThe Streamable HTTP handler runs in **stateless** mode, so any request is served independently. An `initialize` handshake and an `Mcp-Session-Id` header are optional — clients that send them still work (the header is accepted and ignored), and clients can also skip straight to `tools/list` / `tools/call`. Every tool is an independent request/response query; the server issues no server→client notifications, so `GET /mcp` (the SSE stream) returns `405`.\n\n```bash\n# List tools — a session handshake is optional in stateless mode\ncurl -s -X POST http://localhost:8080/mcp \\\n    -H \"Content-Type: application/json\" \\\n    -H \"Accept: application/json, text/event-stream\" \\\n    -d '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"tools/list\", \"params\": {}}'\n\n# Call a tool\ncurl -s -X POST http://localhost:8080/mcp \\\n    -H \"Content-Type: application/json\" \\\n    -H \"Accept: application/json, text/event-stream\" \\\n    -d '{\n      \"jsonrpc\": \"2.0\",\n      \"id\": 2,\n      \"method\": \"tools/call\",\n      \"params\": {\n        \"name\": \"get_service_logs\",\n        \"arguments\": {\n          \"service_name\": \"your-service-name\",\n          \"lookback_minutes\": 30,\n          \"limit\": 10\n        }\n      }\n    }'\n```\n\n### Per-request toolsets\n\nIn HTTP mode a request can narrow its tool surface with the `X-Last9-Toolsets` header, or the `toolsets` query parameter for clients that cannot set headers (`/mcp?toolsets=logs,traces`). A non-blank header wins when both are sent. The value takes the same comma-separated names as `--toolsets`. The request sees the intersection with the startup `--toolsets`: it can narrow, never widen, and `all` or an empty value keeps the startup set. An unknown name returns `400` naming it. `tools/list`, `tools/call` and the `initialize` instructions all follow the effective set; `get_current_time` and `get_workspace_overview` stay in every set.\n\n```bash\ncurl -s -X POST http://localhost:8080/mcp \\\n    -H \"Content-Type: application/json\" \\\n    -H \"Accept: application/json, text/event-stream\" \\\n    -H \"X-Last9-Toolsets: logs,alerts\" \\\n    -d '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"tools/list\", \"params\": {}}'\n```\n\nEach distinct effective set is served by its own server, built on its first request (tens of milliseconds) and kept until shutdown; a request restating the startup set reuses the startup server. There is no eviction: only named toolsets are accepted, so the cache holds at most one server per combination of them (135 today, about 75 MB of live heap together; a full cache settled near 230 MB resident in testing).\n\n### Build from Source\n\n```bash\ngit clone https://github.com/last9/last9-mcp-server.git\ncd last9-mcp-server\ngo build -o last9-mcp-server\nLAST9_HTTP=true ./last9-mcp-server\n```\n\n`LAST9_HTTP=true` is for local development. For actual usage, the [hosted HTTP endpoint](#start-in-30-seconds-hosted) is easier.\n\n</details>\n\n---\n\n## Tool Reference\n\n<details>\n<summary>All parameters, time input standards, and details</summary>\n\n### Time Input\n\n- Absolute times (`start_time_iso`/`end_time_iso`, or `time_iso`) take precedence over `lookback_minutes`.\n- For relative windows: use `lookback_minutes`.\n- For absolute windows: use RFC3339/ISO8601 — `2026-02-09T15:04:05Z`.\n- Legacy `YYYY-MM-DD HH:MM:SS` is accepted for compatibility only.\n- Resolve phrases like `since yesterday 9am IST` to RFC3339 bounds with `get_current_time`.\n\n### get_workspace_overview\n\nNo parameters. Probes the last 60 minutes concurrently, each sub-call with a short timeout, and returns `current_time`, `lookback_minutes`, `environments`, `telemetry` (`logs`/`traces`/`metrics` booleans), `service_count` (distinct services `get_service_summary` ranks, every env), `alert_group_count`, `firing_alert_count` and `errors` (`[{field, error}]`). A field whose sub-call failed is `null` (unknown), never `0` or `false`. The probes are not narrowed by `--toolsets`: toolsets filter which tools are served, and the API token scopes what the server can read.\n\n### get_current_time\n\n- `range` (string, optional): `last 2h`, `past 30 minutes`, `last 7d` (s, m, h, d = 24h, w = 7d; at most 366d); `today`; `yesterday`; `since <point>`; `<point> to <point>`. A point is RFC3339, or `today` / `yesterday` / a weekday (`monday`, `mon`: its latest occurrence, today included) / `YYYY-MM-DD` with an optional `9am`, `9:30pm` or `14:30`. A trailing zone overrides `timezone` for both bounds; a zone anywhere else is an error. Omit for just `now`.\n- `timezone` (string, optional): IANA name or abbreviation (IST = Asia/Kolkata, PST/PDT, EST/EDT, UTC, GMT). Default UTC. Unknown zones are an error, and so is the ambiguous `CST` (pass `America/Chicago` or `Asia/Shanghai`).\n\nReturns `now` (and `start`/`end` with `range`) as `{iso, epoch_seconds, local}`; `local` appears only for a non-UTC zone.\n\n### get_exceptions\n\n- `limit` (integer, optional): Max exceptions. Default: 20.\n- `lookback_minutes` (integer, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional): Absolute time range.\n- `service_name` (string, optional): Filter by service.\n- `span_name` (string, optional): Filter by span name.\n- `env` (string, optional): Filter by environment.\n\n### get_service_summary\n\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `env` (string, optional): PromQL regex. Defaults to `.*`. Exact match needs anchors (e.g. `^prod$`).\n- `sort_by` (string, optional): `request_count` (default), `throughput_rpm`, `http_4xx_count`, `http_5xx_count`, or `grpc_error_count`.\n- `limit` (integer, optional): Max ranked rows. Omit or 0 means 10; values above 100 clamp to 100.\n\n### get_service_environments\n\n- `start_time_iso` / `end_time_iso` (string, optional)\n\n> All other APM tools require an `env` value. Use `\"\"` if this returns empty.\n\n### get_service_performance_details\n\nReturns a per-series summary by default: `points`, `missing_points` (availability buckets with no traffic, excluded from the stats), `min`, `p50`, `p90`, `p99` (nearest-rank), `max`, `mean`, `last`, `baseline_mean` (mean of the first half of the valid points, not of the window), `delta_pct` (second half of the valid points vs baseline; absent if baseline is 0) and up to 3 `change_points` (`timestamp`, `before_mean`, `after_mean`), for up to 4 series per metric and every response-time quantile (highest mean first; `series_omitted` counts the rest). A series with `points: 0` carries no statistics, and `baseline_mean`/`delta_pct` need at least 6 points (3 per half). `full_series` marks that raw points are available via `include_series`.\n\n- `service_name` (string, required)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `env` (string, optional): Defaults to `prod`.\n- `top_n` (integer, optional): Max entries per top-operations/top-errors list. Default: 5, or 10 with `include_series=true`. Max 100.\n- `include_series` (boolean, optional): Return every point of every series instead of the summary. Default: false.\n\n### get_service_operations_summary\n\n- `service_name` (string, required)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `env` (string, optional): Defaults to `prod`.\n\n### get_service_dependency_graph\n\n- `service_name` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `env` (string, optional): Defaults to `prod`.\n\n### get_apm_service_deviations\n\n- `service_name` (string, optional): Omit for fleet scope; provide for one service and its operation correlations.\n- `lookback_minutes` (integer, optional): Current window. Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional): Explicit current window.\n- `baseline_start_time_iso` / `baseline_end_time_iso` (string, optional): Explicit baseline. Defaults to the immediately preceding equal-duration window.\n- `datasource` (string, optional): Omit for the default; approximate names resolve as for the Prometheus tools. The response names the default or closest match used; ambiguous names return candidates without querying.\n- `env` (string, optional): Defaults to `prod`.\n- `max_services` / `max_operations` (integer, optional): Default 10, max 10 each.\n\n### get_databases\n\n- `env` (string, optional): Filter by environment. Accepts a regular expression. Default: all.\n- `lookback_minutes` (integer, optional): Default: 60. Window may not exceed 7 days.\n- `start_time_iso` / `end_time_iso` (string, optional)\n\n### get_database_slow_queries\n\n- `db_system` (string, optional): e.g. `postgresql`, `mysql`, `mongodb`, `redis`.\n- `host` (string, optional): Database host (`net_peer_name`).\n- `service_name` (string, optional): Calling service name.\n- `env` (string, optional)\n- `min_duration_ms` (float, optional): Minimum query duration in ms.\n- `lookback_minutes` (integer, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `limit` (integer, optional): Default: 20.\n\n### get_database_queries\n\n- `db_system` (string, optional)\n- `host` (string, optional)\n- `service_name` (string, optional)\n- `env` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `limit` (integer, optional): Default: 20.\n\n### get_database_server_metrics\n\n- `db_system` (string, required): e.g. `postgresql`, `mysql`, `mongodb`, `redis`, `aerospike`.\n- `host` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n\n### prometheus_range_query\n\n- `query` (string, required): The PromQL query.\n- `start_time_iso` / `end_time_iso` (string, optional): Defaults to last 60 min.\n- `lookback_minutes` (float, optional): Default: 60.\n\n### prometheus_instant_query\n\n- `query` (string, required)\n- `time_iso` (string, optional): Defaults to now.\n- `lookback_minutes` (float, optional)\n\n### prometheus_label_values\n\n- `match_query` (string, optional): PromQL filter.\n- `label` (string, required): Label name.\n- `lookback_minutes` (float, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n\nWhen no window is given and `match_query` names one metric (`metric{...}` or `{__name__=\"metric\"}`), an empty 60-minute result is retried once over 4 days; a second text block says which window the result covers.\n\n### prometheus_labels\n\n- `match_query` (string, optional): PromQL filter.\n- `lookback_minutes` (float, optional): Default: 60.\n- `start_time_iso` / `end_time_iso` (string, optional)\n\nRetries an empty single-metric lookup over 4 days, like `prometheus_label_values`.\n\n### get_logs\n\n- `logjson_query` (array, required): JSON pipeline query.\n- `lookback_minutes` (integer, optional): Default: 5.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `limit` (integer, optional): Server default: 5000.\n- `index` (string, optional): `physical_index:<name>` or `rehydration_index:<block_name>`.\n- `response_mode` (string, optional): `summary` (default; also for `null`) or `raw`. A raw-line result over 20 lines comes back as `summary`: `lines_summarized`, `severity_counts` (top six labels, the rest in `other_severities`), `first_timestamp`/`last_timestamp`, a 10-bucket `histogram` over the query window (over the returned lines, with `truncated: true`, when the limit cut the result), and the top `patterns` (`template`, `count`, up to two `samples`) with the rest totalled in `other`, at most 4000 characters; top-level metadata that still does not fit is dropped and named in `dropped_fields`. `raw` returns the lines. Aggregate results are never summarized.\n\nFor log-based service inventory, query `physical_index_service_count` first:\n\n```promql\nsum by (name, service_name, env) (physical_index_service_count{destination=\"logs\"})\n```\n\nUse `service_name` as `ServiceName`, `env` as the environment when present, and `name` as the physical index name. If `name=\"default\"`, omit `index`; for a non-default physical index selected by the user, pass `index: \"physical_index:<name>\"`. If the backend rejects explicit physical index filtering, retry without `index` and report that explicit physical index filtering is unavailable for that backend.\n\n### get_service_logs\n\n- `service_name` (string, required)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `limit` (integer, optional): Default: 100, or 20 with `response_mode: \"raw\"`.\n- `env` (string, optional)\n- `severity_filters` (array, optional): e.g. `[\"error\", \"warn\"]`. OR logic.\n- `body_filters` (array, optional): e.g. `[\"timeout\", \"failed\"]`. OR logic.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `index` (string, optional)\n- `response_mode` (string, optional): `summary` (default; also for `null`) or `raw`. Over 20 lines, `logs` is replaced by the same `summary` as `get_logs`, with the other fields kept; `raw` returns the entries.\n\nMultiple filter types combine with AND. Each array uses OR internally.\nUse `get_logs` for broad aggregate counts first; use `get_service_logs` only after narrowing to a service/env/index and a small sample set.\n\n### get_log_patterns\n\n- `service_name` (string, required)\n- `env` (string, optional)\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `severity_filters` / `body_filters` (array, optional): OR logic, as in `get_service_logs`. Set `severity_filters` only when `get_service_profile` reports `severity_set` `all`; with `none` or `partial` it drops lines whose severity is in the body.\n- `index` (string, optional)\n- `sample_size` (integer, optional): Lines sampled from the window, newest first. Default: 1000, maximum: 5000.\n- `top_n` (integer, optional): Templates returned by count. Default: 20, maximum: 100. The rest are totalled in `other`.\n\nClustering runs in the MCP server over the sampled lines, so counts, `first_seen` and `last_seen` are within the sample; `window.sample_limit_reached` says when the sample may miss matching lines (it holds `sample_size` lines and the API does not report an exact `total_matching_lines` equal to that, or the search was `logs_truncated`), in which case it holds only the window's newest lines. Each `template` and `sample` is cut at 500 characters, ending in `…`, so a body that does not cluster (such as JSON without a `message` field) cannot fill the response. A search with failed chunks is a tool error; a truncated or capped search still returns patterns, flagged by `sample_limit_reached`. An empty `patterns` list means nothing matched only while `sample_limit_reached` is false; when it is true the search stopped early and may have missed matching lines.\n\n### get_emerging_log_patterns\n\nTakes every `get_log_patterns` parameter (the time range is the current window), plus:\n\n- `baseline_start_time_iso` / `baseline_end_time_iso` (string, optional): Set both or neither. Default: the window of equal length immediately before the current one.\n- `min_count` (integer, optional): Lines a changed pattern needs in the window it is larger in: current for `new`/`increased`, baseline for `decreased`/`disappeared`. Default: 3 (or `sample_size` if smaller), maximum: `sample_size`.\n- `change_factor` (number, optional): Frequency ratio, greater than 1, that a pattern seen in both windows must reach (`increased`) or fall to the inverse of (`decreased`). Default: 2.\n\nBoth thresholds must hold, so a high-volume template whose frequency did not change by `change_factor` is never reported. Returns only changed templates (`new`, `increased`, `decreased`, `disappeared`) with `current` and `baseline` counts; `unchanged_patterns` counts templates in both windows that changed by less than `change_factor`, and `below_min_count_patterns` counts changes dropped for having fewer than `min_count` lines. Frequencies are compared per minute while both samples hold every matching line, per minute estimated from a capped sample's exact `total_matching_lines`, and otherwise as shares of the sample, where `increased`/`decreased` describe composition rather than rate (`comparison_basis`). An empty `patterns` list means no change above both thresholds, not unchanged logs: rarer changes are counted in `below_min_count_patterns`, and a window with `sample_limit_reached` compares samples, not whole windows.\n\n### get_log_attributes\n\n- `lookback_minutes` (integer, optional): Default: 15.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `region` (string, optional)\n- `index` (string, optional)\n\n### get_log_attributes_for_pipeline\n\n- `pipeline` (array, required): Prior filter stages to scope discovery, e.g. `[{\"type\":\"filter\",\"query\":{\"$eq\":[\"ServiceName\",\"<service>\"]}}]`.\n- `lookback_minutes` (integer, optional): Default: 15.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `region` (string, optional)\n- `index` (string, optional)\n\n### get_drop_rules\n\nNo parameters. Lists drop rules via `GET /otel_settings/drop?region=...`.\n\n### add_drop_rule\n\n- `name` (string, required)\n- `filters` (array, required): Each filter: `key`, `value`, `operator` (`equals`/`not_equals`), `conjunction` (`and`).\n- Filter keys must use `attributes[\"key_name\"]` or `resource.attributes[\"key_name\"]` (required by the Last9 API).\n- Creates the rule via `POST /otel_settings/drop?region=...&cluster_id=...`.\n\n### get_traces\n\nUse for broad searches and aggregations. For exact trace ID lookup, use `get_service_traces`.\n\n- `tracejson_query` (array, required)\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `limit` (integer, optional): Default: 5000.\n\n### get_service_traces\n\nExactly one of `trace_id` or `service_name` is required.\n\n- `trace_id` (string, optional): Default lookback: 72 hours.\n- `service_name` (string, optional): Default lookback: 60 min.\n- `lookback_minutes` (integer, optional)\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `limit` (integer, optional): Default: 10.\n- `env` (string, optional)\n\n### get_trace_attributes\n\n- `lookback_minutes` (integer, optional): Default: 15.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `region` (string, optional)\n\n### get_trace_attributes_for_pipeline\n\n- `pipeline` (array, required): Prior filter stages to scope discovery, e.g. `[{\"type\":\"filter\",\"query\":{\"$eq\":[\"ServiceName\",\"<service>\"]}}]`.\n- `lookback_minutes` (integer, optional): Default: 15.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `region` (string, optional)\n\n### get_trace_attribute_values\n\n- `tag_name` (string, required): Attribute name from `get_trace_attributes` (e.g. `resource_department` or `attributes['http.method']`).\n- `pipeline` (array, optional): Prior filter stages to scope the values; omit for global values.\n- `lookback_minutes` (integer, optional): Default: 15.\n- `start_time_iso` / `end_time_iso` (string, optional): Historical RFC3339 bounds; take precedence over `lookback_minutes`.\n- `region` (string, optional)\n\n### get_trace_attribute_deviations\n\n- `comparison_mode` (string, required): `latency`, `errors`, or `time`.\n- `service_name` (string, required)\n- `environment` (string, required): Exact `deployment.environment` value.\n- `operation` (string, optional)\n- `filters` (array, optional): Trace JSON filter conditions.\n- `candidate_attributes` (array, optional): Maximum 8; omit for bounded discovery.\n- `latency_threshold_ms` (number, optional): Required for `latency` mode; rejected for other modes.\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 15. Maximum: 15.\n- `baseline_start_time_iso` / `baseline_end_time_iso` (string, optional): Required for `time` mode; non-overlapping and equal in duration to the target window.\n- `minimum_cohort_size` (integer, optional): Default: 100. Minimum: 20.\n- `minimum_value_support` (integer, optional): Default: 20. Minimum: 10.\n- `limit` (integer, optional): Default: 10. Maximum: 10.\n\nRequires the companion backend capability to be enabled.\n\n### get_trace_waterfall\n\n- `trace_id` (string, required)\n- `environment` (string, optional)\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 4320 (72 hours).\n- `selected_span_id` (string, optional): Returns attributes, events, and links for that span only.\n- `max_spans` (integer, optional): Default: 500. Maximum: 1000; the org's redaction policy may cap it lower.\n\nReturns the trace service's `investigation-evidence/v1` envelope unchanged; the waterfall is under `data`. The service builds the waterfall and redacts values under a per-org policy (credentials, query literals, URLs, emails, IPs, user identifiers) before it leaves the backend: `sanitizer` names the policy that ran and `evidence.sanitization` counts what it redacted or truncated. If something needed is redacted, ask an org admin to adjust the policy rather than working around it. The tool refuses a response with no `sanitizer` block, a `sanitizer.version` other than `trace-evidence-sanitizer/v1`, a body that repeats a JSON key, or a body over 512 KiB (lower `max_spans`). Requires the companion backend capability to be enabled.\n\n### get_change_events\n\n- `start_time_iso` / `end_time_iso` (string, optional)\n- `lookback_minutes` (integer, optional): Default: 60.\n- `service_name` (string, optional)\n- `env` (string, optional)\n- `event_name` (string, optional): Call without this first to get `available_event_names`.\n\n### analyze_change_impact\n\nPass exactly one of `change_event` or `service` + `timestamp`.\n\n- `change_event` (object, optional): One element of `get_change_events` `change_events[]`, unchanged. Uses `metric.service`, `metric.deployment_environment` and the earliest `values[].timestamp`.\n- `service` (string, optional): Required with `timestamp` when `change_event` is omitted.\n- `timestamp` (string, optional): RFC3339 or unix seconds, rounded down to the minute.\n- `env` (string, optional): Exact environment. Default: the event's, else all.\n- `baseline_minutes` (integer, optional): Default: 60. Clamped to 30..120.\n- `after_minutes` (integer, optional): Default: `baseline_minutes`. Clamped to 30..120 and capped at now.\n\n`regression likely` when any holds: error rate up at least 1 percentage point, p95 up at least 40%, or throughput (rpm) down at least 50% for the service or one of its top 10 callers, ranked by throughput over both windows together (only with at least 100 requests before the change and, but for throughput, after it; p95 counts only `latency_env`'s requests); an alert for them starts firing after the change and is still firing at the end of the after window (matched case-insensitively by alert group name or a `service`, `service_name` or `service.name` label, else annotation (never free text such as a summary); with `env`, alerts labelled with another environment, ignoring case, are dropped and unlabelled ones are marked `env_match: unlabelled`); a regression from `get_apm_service_deviations`. `insufficient data` when the after window is under 5 minutes (including a change in the future), the service has too few requests, or golden signals, the direct-caller lookup, alerts or `get_apm_service_deviations` failed, wholly or in any query listed in `deviations.apm.unavailable`: missing evidence never yields `no significant change`, and a regression found anyway names what failed. `no significant change` is a valid answer, not a failure. Trace-attribute deviations run only when `env` is set, over at most 15 minutes each side; they explain a verdict but never set one, so skipping them or failing to fetch them leaves it unchanged. Each list keeps 10 items and reports how many it dropped; a failed upstream call leaves an `error` on its section only. Golden-signal latency comes from one environment in both windows, named in `latency_env`: with no `env`, the busiest. Golden-signal error rate counts 5xx and gRPC errors; `deviations.apm` also counts error-status spans and 429s. A caller's signals are its own server spans, so client-only callers show 0 rpm.\n\n`regressions` lists one entry per trigger behind `regression likely`, in `reason`'s order, and is `[]` for the other verdicts. Each has `service`, `role` (`changed` or `dependent`), `env`, `metric` (exactly one of `error_rate_pct`, `latency_p95_ms`, `throughput_rpm`, `alert`, `apm_deviation`) and `baseline`/`after` in the metric's unit (%, ms, rpm, or the APM signal's own value; null for `alert`). An `alert` item adds `rule_id` and `state`, the instance's state in the newest alerts-monitor slice of the after window that lists it, always `firing`: an alert that started after the change but resolved by the end of the after window is not a regression, so it files no ticket; it stays in `alerts.started` with its `state`, and `reason` counts it. `env` is the environment the metric was measured in: the requested `env`, else error rate and throughput sum every environment (`env: \"\"`) while p95 uses the busiest, `latency_env`; an alert uses its own env label and an APM deviation its own env. Every regression is service-wide, so none names an endpoint.\n\n### get_alert_groups\n\nConfigured Compass alert-group inventory for changeboard / label-coverage audits. Includes groups with zero rules and groups that are not firing. Does not return PromQL.\n\n- `alert_group_name` / `alert_group_type` / `data_source_name` (string, optional): Case-insensitive substring match.\n- `team` / `tier` (string, optional): Exact case-insensitive match on configured metadata.\n- `label_key` + `label_value` (string, optional): Must be set together. Exact case-insensitive match on one `metadata.labels` pair — both key and value.\n\nReturns compact JSON `{\"count\":N,\"groups\":[...]}` with `id`, `name`, `type`, `entity_class`, `team`, `tier`, `metadata.labels`, and rule counts. Empty `team` / `labels` means unset.\n\n### get_alert_coverage\n\nAnswers \"what am I not alerting on?\" for a service, an environment, one alert group, or the whole organization when no scope is given. Read-only: it never creates, changes, or unmutes anything. Also served in the `investigate` toolset.\n\n- `service` (string, optional): Service name.\n- `environment` (string, optional): Deployment environment (for example `prod`).\n- `entity_id` (string, optional): Alert group (entity) UUID, as returned by `get_alert_groups`.\n- `muted_days` (integer, optional): Whole days, 1 to 3650. Default: 7; 0 means the default. A rule muted longer than this is a `muted_too_long` gap.\n\nValues are trimmed; blank strings are ignored. Gap kinds: **uncovered_signal** (no enabled rule on latency, error_rate, throughput, or saturation; names a disabled rule that would cover it), **all_rules_disabled** (an alert group whose rules are all disabled), **no_notification_channel** (a rule whose severity no channel on its alert group routes), **muted_too_long** (muted indefinitely or for more than `muted_days`; `muted_since` is the rule's last update and `mute_until` is omitted for an indefinite mute).\n\nReturns compact JSON `{scope, generated_at, complete, summary, counts, groups}`. `groups` holds one `{kind, count, gaps, omitted}` entry per kind present, listing at most 10 gaps per kind (`omitted` counts the rest; narrow the scope to see them); each gap carries `suggested_tool` (`create_alert`, `create_alert_from_chart`, `attach_notification_channel`, or `patch_alert`) and `suggested_args`, holding only inputs that tool accepts (`patch_alert`: `entity_id`, `id` and `is_disabled=false` or `mute_until=0`; `attach_notification_channel`: `alert_group_id` and a `breach`/`threat` `severity`; `create_alert`: `entity_id`; `create_alert_from_chart`: `service_name`); the gap's own `entity_id`, `rule_id` and `signal` are listed beside them. Call the suggested tool only if it is available in the session and the user confirms. `complete` is true only when the API lists no gaps, every count is 0, and at least one alert group matches the scope (exact `service_name` / `env` labels, checked against `get_alert_groups`' list); a scope matching none, a failed lookup, or counts with no listed gaps are not complete, and `summary` says why.\n\n### get_alert_config\n\n- `search_term` (string, optional): Free-text search across name, group, data source, tags.\n- `rule_name` (string, optional)\n- `severity` (string, optional)\n- `rule_type` (string, optional): `static` or `anomaly`.\n- `alert_group_name` / `alert_group_type` / `data_source_name` (string, optional)\n- `tags` (array, optional): All must match (AND logic).\n\nEach rule lists `Recent Evaluations`: 5 one-minute samples, newest first, each labelled by the UTC minute it ends; the newest ends 1–2 minutes before the call, since the monitor fills the latest minute late. `firing`; `ok` = the monitor reported the rule not firing (normal, resolved, pending or empty state, as `is_firing=0` in `get_alert_rule_state`); `unknown` = no monitor row for the rule (not evaluated yet, or that minute's lookup failed, noted at the top of the response), or a row whose state is none of firing, normal, resolved, pending or empty (e.g. `no_data`, `silenced`). Disabled rules show none. When more than 25 enabled rules match, history is omitted for all of them and the response says so.\n\n### get_entity_kpis\n\nRead-only; in the `alerts` and `investigate` toolsets. Lists every KPI on one alert group, including KPIs no alert rule uses yet. Use the returned ids in `expression_args` / `indicators_used`; never invent one.\n\n- `entity_id` (string, required): Alert group/entity UUID, from `get_alert_groups` or `get_alert_config`.\n\nReturns JSON `{\"entity_id\",\"count\",\"kpis\":[{\"id\",\"name\",\"description\",\"query\",\"unit\"}]}`, sorted by name. `unit` is a display label: thresholds compare against the raw query value. When no KPI fits, create one with `create_kpi`. An empty group's result names `create_kpi` only when the session serves it; with `--read-only` (unless `--allow-write-tools=create_kpi`) or the `investigate` toolset it says KPI creation needs a writable `alerts` session instead.\n\n### create_kpi\n\nCreates a KPI on an existing alert group; `alerts` toolset only. Use it only when `get_entity_kpis` has no KPI with the query you need. Check the query returns data with `prometheus_range_query` first: the API rejects only a query that does not parse, and saves a valid query for a metric that does not exist.\n\n- `entity_id` (string, required): Alert group/entity UUID.\n- `name` (string, required): Unique within the alert group; a second create with the same name is rejected as a conflict.\n- `query` (string, required): PromQL. To alert on a dashboard panel, take the panel's PromQL from `get_dashboard`.\n- `unit` (string, required): Unit of the query's raw value, e.g. `seconds`, `ms`, `percent`, `ratio`, `count`, `req/s`. It is a label only and converts nothing, so thresholds compare against the raw value.\n- `description` (string, optional)\n- `data_source_id` (string, optional): Defaults to the alert group's data source.\n\nNo MCP tool deletes or edits a KPI (use the Last9 UI), so confirm name, query and unit before creating. Create once and keep the returned id for `expression_args` / `indicators_used`; on a name conflict, reuse the existing KPI's id from `get_entity_kpis`. On a timeout or connection error the create may or may not have been applied: check by name with `get_entity_kpis` before retrying. Returns `{\"id\",\"name\",\"query\",\"unit\"}`.\n\n### get_alerts\n\n- `time_iso` (string, optional): Evaluation time in RFC3339.\n- `window` (integer, optional): Lookback in seconds. Default: 900. Range: 60–86400.\n- `lookback_minutes` (integer, optional): Range: 1–1440.\n\n### get_alert_rule_state\n\n- `start_time` (integer or string, required): Start of the range (inclusive): Unix epoch seconds (`1718000000`) or RFC3339 (`2024-06-10T06:13:20Z`). Epoch milliseconds, microseconds and nanoseconds are converted to seconds; values before 2000-01-01 are rejected.\n- `end_time` (integer or string, required): End of the range (inclusive), in the same formats.\n- `step` (integer, required): Resolution in seconds between samples. The number of samples `((end_time - start_time) / step + 1)` is capped at 100. Each sample is one upstream call covering the `min(step, 3600)` seconds ending at its timestamp; samples are fetched 5 at a time, and the tool returns an error with retry guidance if they take longer than 60s.\n- `alert_group_id` (string, optional): Filter by alert group ID.\n- `rule_name` (string, optional): Regex filter on rule name.\n- `alert_group_name` (string, optional): Regex filter on alert group name.\n- `label_filters` (string, optional): Comma-separated `key=value` label filters.\n- `state` (string, optional): Filter by state (e.g. `firing`).\n\nReturns a JSON map of `rule_id -> [{timestamp, is_firing}]`. A timestamp at which a rule is absent from the upstream response is reported as `is_firing=0` — this means \"not observed as firing\", not a confirmed normal state.\n\n### get_notification_channels\n\n- `scope` (string, optional): `attached` (default) returns one row per alert-group attachment; the `id` is an attachment id, as taken by `detach_notification_channel`. `channels` returns the org's channels (`id`, `name`, `type`, `send_resolved`, `created_via`); the `id` is a channel id, as taken by `attach_notification_channel`. Destinations, headers, and certificates are never returned.\n\nReturns configured notification channels (Slack, PagerDuty, email, webhooks, etc.) as a TSV table. Attachment rows (`service_fqid` set) show `global` false and `services` `-`; `services` lists only legacy service bindings. On attachment rows `send_resolved` is the row's stored default, not what delivery uses; resolve notifications follow the channel's own `send_resolved` (`scope=channels`). Both scopes include `created_via` (`last9-mcp` for rows an MCP agent created, else `-`).\n\n### recommend_alert_config\n\nRead-only. Returns lifecycle guidance, validation gates, and responder-context requirements; it is not evidence by itself, so ground thresholds with telemetry tools.\n\n- `signal` (string, required): Metric or user-impact signal, including unit and dimensions.\n- `objective` (string, required): Symptom or user impact to detect.\n- `rule_type` (string, optional): `static` (default) or `anomaly`.\n- `severity` (string, optional): `breach` (default) or `threat`.\n- `environment` (string, optional): Environment and traffic profile.\n\n### validate_alert_expression\n\nDry-runs an expression without saving. Use before `create_alert` / `update_alert`.\n\n- `entity_id` (string, required): Alert group/entity UUID.\n- `expression` (string, required): Arithmetic over indicators named by their KPI's exact name, e.g. `errors / requests`. At most 3 indicators. Write names with spaces, dots or dashes as-is (`Test Alert / errors`), exactly as `create_alert` saves them.\n- `indicators_used` (object, required, non-empty): Indicator name to KPI UUID owned by `entity_id`; list the group's KPI ids and names with `get_entity_kpis`. Use each KPI's exact name: this dry-run accepts any name, but `create_alert` and `update_alert` reject `expression_args` keys that are not the bound KPI's name.\n\nOnly the arithmetic expression is checked (pass the inner metric expression, not an `adaptive_std_cmp(...)` wrapper); `condition` / `alert_condition` are not. The at-least-one-timeseries check runs only when more than one indicator is used.\n\nReturns `{\"valid\":true}` or `{\"valid\":false,\"reason\":\"...\"}`; an invalid expression is a normal result, not a tool error.\n\n### describe_alert_chart\n\nRead-only. Lists the alertable signals (`key`, `unit`, `eval_query`, `query_kind`) on a covered Discover chart. Viewer-role tokens are rejected.\n\n- `surface` (string, required): `discover-service` or `discover-exceptions`; any other surface, including custom dashboards, is rejected before calling the API (use `create_alert` with a KPI instead).\n- `chart_key` (string, required): e.g. `apdex`, `error_rate`, `response_time`, `exception_count`.\n- `service_name` (string, required)\n- `env` (string, optional)\n- `attributes` (object, optional): Extra identity dimensions, using the key names this tool reports.\n\n### create_alert\n\nCreates a rule in an existing alert group, always disabled (a draft, even if `is_disabled=false` is passed). Call `recommend_alert_config` first, then promote with `patch_alert` `is_disabled=false` only after the user confirms. Create once and keep the returned rule ID. A `rule_name` the alert group already uses (case-insensitive) is refused without creating anything, naming the existing rule's id.\n\n- `entity_id` (string, required): Alert group/entity UUID.\n- `alert_rule` (object, required): Complete typed rule body, including `primary_indicator` and `expression_args` bound to real KPIs of the entity. Each `expression_args` key must be the exact name of the KPI it binds (not a placeholder such as `x`), and `primary_indicator` and `expression` use those names. Static rules require `condition`, `alert_condition`, and `eval_window` (0–60 minutes). Adaptive rules use `expression` = `adaptive_std_cmp(<primary_indicator>, sensitivity, window)`; the three fields are then optional (defaults `expr > 0`, `count_true(result) >= 1`, `1`). `algorithm` cannot be set. Responder context goes in `properties` (description, runbook, annotations, `query_mode`).\n\nNotification routing is configured on the alert group, not the rule.\n\n### create_alert_from_chart\n\nCreates a static-threshold rule from a chart described by `describe_alert_chart`. Like `create_alert`, the rule is created disabled as a draft and does not fire; promote it with `patch_alert` `is_disabled=false` only after the user confirms. The chart API creates rules enabled, so the tool disables the rule right after creating it; if that fails, the result is an error naming the rule id, which may be live.\n\n- `surface` / `chart_key` / `service_name` / `signal_key` / `name` (string, required)\n- `env` (string, optional)\n- `attributes` (object, optional)\n- `threshold` (number, optional): In the signal's unit; must be 0 or more. Score-unit signals such as apdex need an explicit value.\n- `threshold_operator` (string, optional): `>` (default), `<`, `>=`, `<=`, `==`, `!=`.\n- `eval_window` (integer, optional): Minutes, 1–60. Default: 5.\n- `bad_minutes` (integer, optional): 1–`eval_window`. Default: 3.\n- `severity` (string,","readmeFilename":"README.md"}