{"_id":"ssh-mcp","_rev":"61-e4b9baac04862346e2827c73177f0afb","name":"ssh-mcp","dist-tags":{"latest":"2.20.2"},"versions":{"1.0.0":{"name":"ssh-mcp","version":"1.0.0","_id":"ssh-mcp@1.0.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"55ef4bf428c1c8f64dd7c5325e5674904a47bb37","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.0.tgz","fileCount":4,"integrity":"sha512-UqEc8gGtR0I151yXMkYE3p/GJy9QT+0Yu8HgcHyzU8s0+zKajCH25J4WetnO9NjukRON/ANetL03q1SlhWFINQ==","signatures":[{"sig":"MEQCIDij07h3r747Hr94ggibb7YK8N3ZTYISIAxFD0d+09pbAiBPMxOyxfp0hqj3za6BRnIByqhXw1cTZruQmWH1K1vjQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7807},"type":"module","gitHead":"7d16f75735606737b7c245ec098c0ccb33ac9765","scripts":{"build":"tsc --outDir build","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.0","dependencies":{"zod":"^3.24.3","ssh2":"^1.11.0","dotenv":"^16.3.1","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^20.17.31","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.0_1745710529553_0.6304318065269259","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"ssh-mcp","version":"1.0.1","_id":"ssh-mcp@1.0.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"e2d285b0bc7566b1360db2f2ce8a5a3c2a44e173","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.1.tgz","fileCount":4,"integrity":"sha512-vSooUAb9ughCPW4LJaLzKRlOSpLo+sVppVs1/9MdMbqqdExX894FSLXHoFvsX6T4/nl2nhf+nrvWEsbK3FMPxQ==","signatures":[{"sig":"MEQCIHFeZ4VYq4YXJLbyd/0f4TtkxDh2LMKSf05KKMNKwDDvAiANq8bUfoT3J0SbZWkZZkYTNJcaM05nOvQgcb9CVnn+Eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7809},"type":"module","gitHead":"3fec5184f3f88bb153cd755ee21704973f62df50","scripts":{"build":"tsc --outDir build","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.0","dependencies":{"zod":"^3.24.3","ssh2":"^1.11.0","dotenv":"^16.3.1","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^20.17.31","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.1_1745711486660_0.9180963164520095","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"ssh-mcp","version":"1.0.3","_id":"ssh-mcp@1.0.3","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"527a00538f1840832bd15082722f62c0192d6665","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.3.tgz","fileCount":4,"integrity":"sha512-JckD6s2td+mpepCD1fv6JTdi1Ls7J+5ZsPf0fWXNdlEY0CJG7jGiFoDX1z26SdiqRHUnm1z0efi5f85jI1drDA==","signatures":[{"sig":"MEUCIGuiaWA3qXe2YJ1Xt7IsiXpwJJ53V3MA2a0a/WGOonQ5AiEA9F9QFyj7oU9uLFkBlFMxNCd6iehfEVkQraXDNCAE+Ks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7840},"type":"module","gitHead":"6c5809465423ab709863e04de4ca84fdb2386fe5","scripts":{"build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.0","dependencies":{"zod":"^3.24.3","ssh2":"^1.11.0","dotenv":"^16.3.1","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","typescript":"^5.4.5","@types/node":"^20.17.31","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.3_1745713579551_0.717929733786874","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"ssh-mcp","version":"1.0.4","license":"MIT","_id":"ssh-mcp@1.0.4","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"70fe56e396b9bc949d6460922cc106914202e96c","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.4.tgz","fileCount":4,"integrity":"sha512-d/aA8Xc2QUpD/CARKeUaMFLtpeuaA62Yz1iBQwQjAc11rSu7x/FqnhrckJgkY/jDg2zq7WjVj910gkECy/r4OA==","signatures":[{"sig":"MEUCIQCWINRs+TJvISfRmTzM0lePk4QsArpd38YA7jshbQHnjgIgIgmgvpk4C7KGIfz0l0InEs/KvI7XtiX9Xd/AfgVXSa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8621},"type":"module","gitHead":"cda050bcbe45cb3181590f7dab22777c2d692829","scripts":{"build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.0","dependencies":{"zod":"^3.24.3","ssh2":"^1.11.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","typescript":"^5.4.5","@types/node":"^20.17.31","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.4_1745714708645_0.2065686273045777","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"ssh-mcp","version":"1.0.5","license":"MIT","_id":"ssh-mcp@1.0.5","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"871a61b3c8a82dae72019e9ed1b0793cff2f2245","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.5.tgz","fileCount":4,"integrity":"sha512-gkBA7FibWpeDszuaRZvX7VdC6d3V74tCSYTogyqQyWrofuYfIOQwNv6r2LJley5iU+7f4M6EP2QRJtUPvdeIzQ==","signatures":[{"sig":"MEQCIDBKwC33ygfecOVKsdpdZa960kRvfvmVu4EHZhR6k3DSAiAifHhWWPMDSiTVREo2EUMC/Nuyb9Z67X2sgMuCsFmmrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8603},"type":"module","gitHead":"1e0e0c1fa070d8d9ad5ff594e54068b663318522","scripts":{"build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.0","dependencies":{"zod":"^3.24.3","ssh2":"^1.11.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","typescript":"^5.4.5","@types/node":"^20.17.31","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.5_1745715241270_0.9524623716441021","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"ssh-mcp","version":"1.0.6","license":"MIT","_id":"ssh-mcp@1.0.6","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"a505bbdcf7294ffc1109001d4c2ec524ee4d08a1","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.6.tgz","fileCount":4,"integrity":"sha512-Z5sSXkE3IhpWZkPJegVlDER5sN13QYMNVKrbigcScJDeV+CgDyHaOc40/AZEYZbY1VukStBH+bL6cKmPz6L0aA==","signatures":[{"sig":"MEYCIQC8DkisDJeCkWiruLh98fTqCCPj30rTHJkaX0E/a3dAMwIhANkI+eUUotsAr+PW4kzYN8/9n/FBb7yy7sriD7pEQeJQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11065},"type":"module","gitHead":"7548dfb825b7c00a0d039f5a0f561d7b7377f795","scripts":{"build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","actor":{"name":"tufantunc","type":"user","email":"tufan.tunc.91@gmail.com"},"email":"tufan.tunc.91@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.2","dependencies":{"zod":"^3.24.3","ssh2":"^1.11.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","typescript":"^5.4.5","@types/node":"^20.17.31","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.6_1751641926512_0.9444957082785905","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"ssh-mcp","version":"1.0.7","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.0.7","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"22b833a06affe3d6faeb8afa92fd4aa0cf63edf4","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.7.tgz","fileCount":4,"integrity":"sha512-dAp8PCkQy3Qp8t3uwlTk13Kaee2SGUS7OPBdsCsWDF5TQ+VD5XT3q2As+U9KtMDrsuxFmi3/F+T1ZNAOOm9orQ==","signatures":[{"sig":"MEUCIQCOQtBLIEx/oX2cWboXGpNrK3Iryo+DY1JnRoU2x8CLEwIgNTTxaJCgM3uyFiUzXx9VfyqWqn+5JnNpMROU2LOVlnM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12486},"type":"module","engines":{"node":">=18"},"gitHead":"168215242d50f257ecaaadf1470eff76e390b8db","scripts":{"build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","actor":{"name":"tufantunc","type":"user","email":"tufan.tunc.91@gmail.com"},"email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.2","dependencies":{"zod":"^3.24.3","ssh2":"^1.11.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","typescript":"^5.4.5","@types/node":"^20.17.31","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.7_1751793263361_0.6255774201742665","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"ssh-mcp","version":"1.0.8","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.0.8","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"0ea79552e57cbefba2af7e2fa50c4fa296993fef","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.8.tgz","fileCount":4,"integrity":"sha512-rJiN2OiZA7yuSmJvJAT+8OB8hZ5A+TRIhSqJh1ayW69sLUWtzo9BQ1L1ESVwT3Kjez6zhQueoUbeco/vQWMOWg==","signatures":[{"sig":"MEUCIBbKp4/a2BsmewF5rIzBcjFIlF5kHmdt2wdS+CV6pvl3AiEAoeTcgL8cYWqfFZ6dSnOs6Va7LG3xa0nJerzTpDa6JoU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13314},"type":"module","engines":{"node":">=18"},"gitHead":"e627be95dcfd384114c8bee7442c4603ada15c89","scripts":{"build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^4.1.5","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","typescript":"^5.9.2","@types/node":"^24.3.0","@types/ssh2":"^1.15.5"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.8_1759074925300_0.7320576840416073","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"ssh-mcp","version":"1.0.9","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.0.9","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"1455993162c51b65081b48a9ab9ba5b213fee3c1","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.0.9.tgz","fileCount":4,"integrity":"sha512-878X9CqpWI3Et23rHrnKx+1HXGdM9wXacer4aUgx+GvfJnAv+/Db3pImTtBbWSsUKIuqb/mNr7/YA/vI/4cpAw==","signatures":[{"sig":"MEQCIBbSEHC26fXDxlSemI3jsC9lLbHfiOXqDEJrkh2KXlqmAiBRNHK1f7huXR0n4lqku1bVMvZ3j2nv1iuLiejsMVCUUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13878},"type":"module","engines":{"node":">=18"},"gitHead":"e5174468565e203ebce8ba8ec214d3fdccd2a5db","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"3.23.8","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.0.9_1759147126893_0.3797560194123266","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"ssh-mcp","version":"1.1.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.1.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"a4ffcf742f60281240dca9504a4b565da924d72b","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.1.0.tgz","fileCount":4,"integrity":"sha512-pY1kbAYG2iI8g4+AICpOiTAPa28/fSJQJkK8xFuJde+5jeMWu9UaAf7CJ54JB1KrxE+soMsJByeZiQS6Egpsog==","signatures":[{"sig":"MEQCIE2YMsaK3bMfgmFBmnJ7E7fYrIJLYraIr3o5HY5Y0jw+AiAz9fSs2k9Qu8ZF5MR4SB3R6jKAf3ODrL9nKlPCrKbOpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14991},"type":"module","engines":{"node":">=18"},"gitHead":"3479558e04336497e3e54d77770a2b14af449ccb","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"3.23.8","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.1.0_1759506636022_0.33620873765670534","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"ssh-mcp","version":"1.2.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.2.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"bacc1fb9f62bea112bd76d7eb5803bdea9bda009","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.2.0.tgz","fileCount":4,"integrity":"sha512-6irFfvqwcSKXyArakNahxJ8cZttneZ7o+2mvNf5lQJgn4S+9fYG45llwaBhKdTQ0IZSGhN5Zf2V8M86e3iNIdQ==","signatures":[{"sig":"MEUCIGUcKe5qDeiV0DScguGZV3ga2kkT486k7yicUPN+HaHtAiEAj3Tq3mNx9hes7UxggKtU2p2XwI8Wl5hzGJjBK6cE0o8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21198},"type":"module","engines":{"node":">=18"},"gitHead":"cc0a2cd20060c4625c81079a169931f837a32673","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"3.23.8","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.2.0_1760278607775_0.7379911986102718","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"ssh-mcp","version":"1.2.2","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.2.2","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"df8c93246d7aa396ec84d7098ceb15ec4b1f0ec1","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.2.2.tgz","fileCount":4,"integrity":"sha512-iXNWvliHfCIxfu+u97FJND1UEEdJQQENsUSntovqAD/lyi4HpxEM4Ab2yBQCXoyHXw5zjDjAn+N5aiBNgbmxpg==","signatures":[{"sig":"MEYCIQD7RRoNUKGJh6IQGDeLtvRPcxFdoJz9F2sAuUdhE5Zz7AIhAK7/gJRjZUgSBbxDRMiproHtkt45UfcRDnkCh0BjTF1a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23148},"type":"module","engines":{"node":">=18"},"gitHead":"6fe9a5accdeebffbf1dcdc99683a872c4de10fec","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"3.23.8","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.2.2_1761022828420_0.35879637138700105","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"ssh-mcp","version":"1.3.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.3.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"da2cbd81057755618015b2ca4879476b6cbd4ce3","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.3.0.tgz","fileCount":4,"integrity":"sha512-N+PrZFGUh5gL3H4Sn5ZEizesOkvz1gN/roZ35rfSRWC3IL9ceaM1gNT+qyNaVWaDFQ+8zlMB3aR4ysGdK7a9XQ==","signatures":[{"sig":"MEUCIAYX0jp6r99SouAfQGMoBHdWCZsducilRdH3xQU6FfEUAiEAtnPjadJgK2oa8Njwl+dNOjkFsYXqy979v1MadWUOymo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34064},"type":"module","engines":{"node":">=18"},"gitHead":"2aebce7e8e958d212961d6056133829284c82f8f","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"3.23.8","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.3.0_1762456485159_0.9557747998001582","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"ssh-mcp","version":"1.4.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.4.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"0e81aab67f19b781357b1f62619150fa4ff1c766","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.4.0.tgz","fileCount":4,"integrity":"sha512-C411Rw9OO3cik4A31qcDuAQI/2VQsgxhxpFDgCTwyDEUsLndpVdoRmPSOHDSzzpve09d4YDG+ysJS6hPA3fE3A==","signatures":[{"sig":"MEUCIQC4I/YuCHJf2sjVcp6Ner7VYU5QZ9aCDAergSJkKXfZIwIgORR0XQXPAz2ru7MkAzRAgYLg5wVpC6MSwW7I4D+MyKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36785},"type":"module","engines":{"node":">=18"},"gitHead":"a0348f55d5eadb51ba852d1c0268fe2f4da8765e","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"3.23.8","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.4.0_1765815970130_0.7801815515373345","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"ssh-mcp","version":"1.5.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@1.5.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"78da354e60e74fe914a2b11c80481d73707e56df","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-1.5.0.tgz","fileCount":4,"integrity":"sha512-b1F+cnyQ4ssKtg7lQCBs2yDAOOn5O/xTf5/Vvehd3BDVOPdcQPn9YEXvF2rtpuwhrhwg+gFMESfGAbH7ogczFg==","signatures":[{"sig":"MEUCIDXbjB00ucq42DR9qBKVb65OlRC48Njek+KZ9wx+OvFUAiEAiu8pkH4GtpWaWRjzP5Vt1ObtWwu4V0jgTqwPU3hse44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37685},"type":"module","engines":{"node":">=18"},"gitHead":"463d25fee532990be75794afd674523eac423321","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest"},"_npmUser":{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server exposing SSH control for Linux and Windows systems via Model Context Protocol.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"3.23.8","ssh2":"^1.17.0","@modelcontextprotocol/sdk":"^1.17.5"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_1.5.0_1767468106263_0.014912227044520554","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"ssh-mcp","version":"2.0.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.0.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"bc7e739500e933b2f70228c1fdb540bfc39219d9","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.0.0.tgz","fileCount":35,"integrity":"sha512-XJKRIvW8Rb7L5lzsbfUTh9W5bfwQ7+Mbrpr7dWU9l3Cn5dUrd0VaYD5n8OHc6erq8kqCP4tWBTvJ/VaD/NOZXA==","signatures":[{"sig":"MEUCID4LW6YDJlRAsZVsYmAZ5HOmAnPCus942IBAtqIcRvTwAiEAgzW6lEIp2gzAj8R7fjzm0PtwFeeiGH9EYaGucSTkfQM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":164103},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"1896230cf4f9dc2a9e63f839f5011e2b8ba7e8da","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"12.0.2","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","fast-check":"^3.23.2","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0","@changesets/cli":"^2.31.0","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.0.0_1786268714495_0.25187673425555146","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"ssh-mcp","version":"2.0.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.0.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"56ac64abfaac7df6254e2f8003b8265fd69f7e6e","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.0.1.tgz","fileCount":35,"integrity":"sha512-g8v7ALW6yPSjzhgAzu0P269uvwmZo12iDrCPXv+JD/qzQhfyMBBTkwTROCh+rxsLvmKN3KMBjNHmNrWqKzdg3Q==","signatures":[{"sig":"MEUCIQCRb/68XnP09bI/GtmOriQ1AWDKW1YMgzz/NfWv3Q9jlQIgEiS5UqhNlLTZiLIUHqeKCSusjfnKiuAGGw68OQ7nEBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":166480},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"045172e9e518cee3ad8e20190a464ff0fb63732b","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","fast-check":"^3.23.2","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0","@changesets/cli":"^2.31.0","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.0.1_1786271924910_0.9276174968965245","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"ssh-mcp","version":"2.0.2","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.0.2","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"9fc8d6517a802b14addac80917243185dd9e6479","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.0.2.tgz","fileCount":35,"integrity":"sha512-uMJ912ee9WaSz8b76arT1NA+qGjFxnW6leY+bjSWG8w6Fvz3UXJk4XgC9bDHIrjpfDJczo1RFtbfXgll71sOlA==","signatures":[{"sig":"MEQCIDZdHJ5BsVwt74uGNcJyDy+VxiGmJuQ78DcrrlL2dkuiAiAw8PYDrjs9DWJupGXlViQ9uV/0hnod66R5I+6FPlNQOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":167555},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"8b80b7d21b8af917839858f20c31c282d3858c4d","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","fast-check":"^3.23.2","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^3.2.7","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.0.2_1786314645688_0.36088452925230974","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"ssh-mcp","version":"2.0.3","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.0.3","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"a5f11b9d622feb536ea37341c048cb43b691c1a3","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.0.3.tgz","fileCount":35,"integrity":"sha512-wTtOVov2igmZ4v5lj1sRJg3Zq7c2GBvgx9H7PBGWKI/WVkmK/LhLiqRR61PXr6jxw8AkEGIwzOGKZLHHLNUr6A==","signatures":[{"sig":"MEQCIE2Aei6Iy/GDpkVDEmf1N+/XBq0MUJwlDW2olGDceXC+AiAQq3+enm8yeuwELokMx5gjCbvZ6JnpkD8tCmDy9iTh3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":168352},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"6e48985cc42cd6683580658c0e0829db32388c19","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","fast-check":"^3.23.2","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^3.2.7","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.0.3_1786316667116_0.07005742004475302","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"ssh-mcp","version":"2.0.4","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.0.4","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"35ee45863e0e1abffa95609b3df9ae8fea65d84d","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.0.4.tgz","fileCount":35,"integrity":"sha512-uuEptzqDHuGxe9/TZs1eo0kBt6LSl6i9cR6pQQTwB8Y5OBLCtkcWLGbUmZcGrju+TXcALfMdpHtdCf9xfEL8Ug==","signatures":[{"sig":"MEYCIQD/52UKTUWZ32Z0Tvvsxd+LWOtssjm7ikuMrestw/Gs6QIhAKd/EfRW/YsxLb85QtufvjDjFo3bhw4EL/5DzWGkszsy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":169355},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"1b757ee0d2cdaac208dc721978a699e1ad626d60","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","fast-check":"^3.23.2","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^3.2.7","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.0.4_1786342376075_0.7522588705404578","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"ssh-mcp","version":"2.1.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.1.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"b7e332b8f3c4a792756dd3874728ddc8c9acd166","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.1.0.tgz","fileCount":35,"integrity":"sha512-7UwgSW8xgGhnaxsizc70YMjBCpSsnOJ+h0txhcZwpmyDzMKcs98sdbwTjXiUIk4PhJNS/71alUzE98avOG9ZEA==","signatures":[{"sig":"MEUCIQCLnmMiiX64rAPWSU2tA5pBsSMsrfdTaBZSXtUaT96UyQIgNX/F9/i0BU2OviL3gl7r2AjUHaYT8qQkPKBFlteU4Vo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":172710},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"bd200d31e16de5b87a0b7ae4d4590c07e0c2ad4f","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.20.6","vitest":"^3.2.4","ts-node":"^10.9.2","cross-env":"^7.0.3","fast-check":"^3.23.2","typescript":"^5.9.2","@types/node":"^24.5.2","@types/ssh2":"^1.15.5","testcontainers":"^11.7.0","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^3.2.7","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.1.0_1786362334946_0.5403271221171915","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"ssh-mcp","version":"2.2.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.2.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"4a92c5c8b8df77b667748bc503d3b60fa458dcd8","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.2.0.tgz","fileCount":35,"integrity":"sha512-xnNBACIke1nSg8Q4rrocoufELbpfc7Dy6AfCir43r1wSYLWTscDPFuP0LH0JfkPYt68zq4gJnUu6Em/9k7E2ZA==","signatures":[{"sig":"MEUCIBthvrSHmVMDkCuz+kGZgPv4OkE9t42AsvIXXWxKvWQZAiEA7QPl49jAj4zrqqTIlnFhht1DkNyLyyWof+72bq0pPeI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":185993},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"863fbe550b2128e341591059da9990ed120f7b8c","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.2.0_1786516835989_0.3321694696781221","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"ssh-mcp","version":"2.2.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.2.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"09dde7c139160366da8a1f7afcd70307580ba9cd","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.2.1.tgz","fileCount":35,"integrity":"sha512-Fdj4LRpChHIW9A/hWn81sRabYRhr3aIPCu0iMN6XiNFJKgm2dISSN4FO4MUtosg4wnG3z/XYbBPPIgNj9ZmMgw==","signatures":[{"sig":"MEUCICoXaAUcUHwOuS12fYp2fgrry/G8u1PsCIdBSRz5a9ycAiEA3isKhvI6R+DtkoC3ACwa0lOGlhpQUVe+w9uzAWxY/B8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191966},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"716d6bc2afcf9aa39b295ea7c460f889355dda8b","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.2.1_1786523339038_0.8568556673975547","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"ssh-mcp","version":"2.2.2","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.2.2","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"891158daf3361d5994d37f8428f5f7771cb635fc","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.2.2.tgz","fileCount":35,"integrity":"sha512-wtY+Ze+wlGMgv5ScxsrHvNzXmoL2KD2iZ7XzxqN8cyzgz/UZJ+JS7w9P6vDBwRFgcorD/K7J5SNG2e7Zj7zBlw==","signatures":[{"sig":"MEYCIQCuz+aMCDrj5RmTI/Y2pKgtZOppRGLq4m8egTV9odjjGAIhAJE/26rdyrNjj/ETxa+1FzjHVFGJAZUgh2+H6OSQAaJu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":196052},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"cb3f4e517d0a8ac972acea52e8899341e8b7a219","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.2.2_1786540325317_0.8169406920989535","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"ssh-mcp","version":"2.2.3","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.2.3","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"7afd20f4b2054abbe5479b18b25aab66cf96d087","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.2.3.tgz","fileCount":35,"integrity":"sha512-Szqtf0icMyblx8X2wVWtv1r8kZaMxZDR0PjssP1+FQiCIa+kOwCUNfa4eXn3uFFjorej46qidfIH2GCmKhqbkg==","signatures":[{"sig":"MEQCIHDkZCZSTtFV6+xlpuDQYCAudedJjxNChgz7FTcRMYn5AiBvl6HGBFD+1cXXH5nmEwBP1YO0DceWZM1yu7Vw5i2C1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":200518},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"22363b2f13ef93ef02b1077e91f54afa4d239ac7","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.2.3_1786606435638_0.9223536990891943","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"ssh-mcp","version":"2.2.4","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.2.4","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"05263da7278f3df084ed8a2b778b2b033731253a","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.2.4.tgz","fileCount":35,"integrity":"sha512-eJxq1rQWEYCrsjDfXrhu83tObeNM7nwkbj/eoDI+REVveiRlk72W9Kz+cRMf5Sk1hA9dxD6NaI+U/bJQXL1xpw==","signatures":[{"sig":"MEQCIDmbFD4uEiwwSFqtx9ytUhvw/1BEfI9jP+SYvZ00/U0QAiASQelHGP2/w+Tr7bRZ3Vh0cVZ59vHOW76xj4ry+a6mTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":205044},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"f585923f031310e27b50fabc66773456b646f5da","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.2.4_1786690412921_0.6010034792006187","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"ssh-mcp","version":"2.2.5","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.2.5","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"b581bcdaaf66ae9d49e0e1c90e3c175ba07bf1dc","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.2.5.tgz","fileCount":35,"integrity":"sha512-WHUGp5tkrovh0lrIdhQZLYyCnYtHqxr6BOaRDFqkn4qY7gjvwOos/OSKg8Ntx7fADUILvASaAK5tROqaNH4cHA==","signatures":[{"sig":"MEUCIDOD9Q1HuK2qnHoRgIr/8E3rOyPFyQhTpAEWPOvJA0NTAiEA2Nv9d37swYaLZUn6i6r8tBMLKXDUMevafcesUmV+wxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":206032},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"849fda41e0b08e2833a85dbccb9fde509790a71d","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.2.5_1786710691150_0.9728282504086088","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"ssh-mcp","version":"2.2.6","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.2.6","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"ea030798bbbb4fcf6ae1ffa1b58e5b4823160d15","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.2.6.tgz","fileCount":35,"integrity":"sha512-NaqxnJu99FIeQ3oHtalzouveUB5nRn0vzkknDlu3o2vX9CgEddasNVL2XT8wU4xT+o69it6A5Q2D2EtmXJsXIQ==","signatures":[{"sig":"MEUCICF9U09HB7e61eKyvlMPa340kAG8RkxDUyK2QtcPLQaMAiEAkdsum1vGHiOb+XjhXybCo/OIkQ0gFukJcduCNC9Ue3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":209981},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"ed0007eaeee40b11794217e94e148f8159884031","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.2.6_1787047356671_0.0018738715357380364","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"ssh-mcp","version":"2.3.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.3.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"6a5d08d97847d9861ef96037f7b5390b9257bd24","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.3.0.tgz","fileCount":37,"integrity":"sha512-5BoJdqow1nYMm7obpApaEgQkwLqO+44ibmR/m7kpY33Bu9Y3EIHSxPMvuz5BuIlU+TWEAk8qoJnHwPzWLIlo9w==","signatures":[{"sig":"MEUCIGrpUVLkql2AvvpbVtGmii3Q4qKs8So00UWhEZ6Y4HmxAiEApkKSKLj2ZC1fP0QojB9k2U6KJMBocmlDVauoovk6iR0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":264031},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"0b499290c33d649c4f2c353f9e96d9c7de4c8f89","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.3.0_1787141558406_0.12265246182383116","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"ssh-mcp","version":"2.3.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.3.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"db07460c84b7253134d3d4aa4f3f3728e69a6659","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.3.1.tgz","fileCount":37,"integrity":"sha512-PjZTe2r2fDuLS2e9PDVEBC8mnafr+SdNusqfyTXjD4r+Xk6fSFStsBEfSASDcW1DDdR5HNTerQh5IhTcxdSwtA==","signatures":[{"sig":"MEQCIGtboA7bVBNBbDz7mA5wB8tCN9bcjdjuVhl10kPiMGU/AiAWNQeWYvRj7VLZMXvP/YB0MIb+F7ZcO19V7cxyot131g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":264508},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"1c22c25d0d2705a172d4c9aa2ca389784ff098b1","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.3.1_1787207603585_0.0731984495923923","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"ssh-mcp","version":"2.3.2","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.3.2","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"bf2f35d2facbc21006894b2447ffc53cddfba5de","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.3.2.tgz","fileCount":37,"integrity":"sha512-ny/C3nQHjCc5pwey79khlPxCPp9FBViNKS0oVSlYIARk0cf73C/eFvGIEj/R175ql1R16mjZvE3xDJX9/O4ilw==","signatures":[{"sig":"MEUCIC/jnnrPh0KKN7VA0iQIF7MomxGxt1vBP3YlHgYDwckKAiEAgTwvIuBUB4bCP/qrIepIMrjWyX1PGZLEjbEu0Hsjuko=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":271088},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"104dfa6cdbda59f832be5f5a8e3b65058f0b790e","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.3.2_1787211410001_0.16045115064943238","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"ssh-mcp","version":"2.3.3","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.3.3","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"c7b1c411044c81011dfaf4d6b3781cc0d9c48f35","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.3.3.tgz","fileCount":38,"integrity":"sha512-mqIut6uWZtEqiOwpgw/gMQQOtZ9vZko7YzXYPHgYV4OLKCdBulCfSjdxCOGFZaKsGSWMfAaAYWIfUgKDY6LlKQ==","signatures":[{"sig":"MEYCIQD4bKpn3sDEhz0+WEwU+y9VzBbj2iqRPyWFK+zV8maphAIhAPICp3FK29ZnecCEHbqw7J5bnk5PzEsW+KXeBCULYyHM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":291633},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"93ead8d8a2b5dacc7b24fd16060dafb3923d4c3e","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.3.3_1787243672670_0.9433268183382149","host":"s3://npm-registry-packages-npm-production"}},"2.3.4":{"name":"ssh-mcp","version":"2.3.4","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.3.4","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"ab8fa02b376f9cf6ecca52488001576878eef4d7","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.3.4.tgz","fileCount":40,"integrity":"sha512-ZlUVPADiLj8nlKHV2AUV9xsBmNREEwekQKbIyNgcKjNulKFWyhS3UOAwvfPjgwTR6/+RUtauj5KtPQxacNxQ4w==","signatures":[{"sig":"MEUCIDsYcQt2HnHXgdOFrzz5RPvcWvjKWOUanjbtSfCTZIP2AiEAhTgRulq2mBnSqIr3HppcFYsKg67JKEVyqVIgmUhnqiE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEw2I0m3g1p0ADxJ0iRg/o8XSCb+8f8p6MQ2jdMYs0EnAiEAn7S9ZFUDPtMhZtVEAoZlPbFEpEQtcF78zFKT59aRcTQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":294737},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"7243fbeee244df090ce8c95afa5fa3940ce3421e","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.3.4_1787583531312_0.0196469293160777","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"ssh-mcp","version":"2.4.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.4.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"b2ccdc5be8feaa5249d5bf4d4266ad5a9992d842","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.4.0.tgz","fileCount":40,"integrity":"sha512-QGOdlcUbBPfXGXqOtUaGsQJ1FXDRoQSMZ1iY7TRRS+xoVZr2qmEcNFgDIVXh8bXLJNZFYmBEm34IdSun4+edhw==","signatures":[{"sig":"MEUCIGpsZXwFThcVZ0/MYG9pNakA4kIDWpxNiR6kajLMMVBiAiEAoBsDqPik1t9OUR8DPOL/K8XmegTIcfpkihjnTPO1UcA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBltfZ1rMpqIxb34WFwvDrbzelmaa8gSR9w7Z4avk0JvAiEAqY6Ar4MbqUDHeATMDTA9i9gujZN5u7f6UK6rjjiZK94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":304488},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"05fabb575e86748501a6326be7b28c24c4ebc324","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.4.0_1787592237088_0.5477996899164983","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"ssh-mcp","version":"2.4.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.4.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"166e66024ce04a4e637ada7b5c85ce006fb72e91","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.4.1.tgz","fileCount":40,"integrity":"sha512-i3sp3MPlFVfabhWUsbKDeQy55DfRDxY+fKM5YdnVG8VtRZOaB2J0RBDsSTBzkbkYO9ygDHkyNdretzZCp23LZg==","signatures":[{"sig":"MEYCIQD6Ep0yATIEUnO19UHbw8oydPLm+oMqJ2jBvmK6c44KpQIhAPx129dwBJ5ktni4VaQTx3YV33TMvGMjudDXgB3vWg19","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDCx6pzKYkwTpt//ATR0ulQSn1gT2G/V8pz0/KPq8pcWQIhAP5QQdQBY64m9n7lBop8cwojS6Slt7c8th8uruVK1aeo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":314288},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"c1f6a7b04427b43dc897606d1beaddf0c17ce0c1","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.4.1_1787661052546_0.6385898513149255","host":"s3://npm-registry-packages-npm-production"}},"2.4.2":{"name":"ssh-mcp","version":"2.4.2","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.4.2","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"b1e0930aa75e8e07a9d70f093bb041c7e108d206","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.4.2.tgz","fileCount":40,"integrity":"sha512-2HJ/pPSojxVDoPqH/tZR6A1QwIBJm0yIYUSgWZjz2SwSE2Lx7weTytDaPqwmpZ6DE2snBIz5MMxpEJxzyCZ4DQ==","signatures":[{"sig":"MEYCIQCxtirayKIYlXXD/jCa1U7GF6iH9H6fTAALIu9APkGx7wIhAIfWC+0lYQ2Umifnp9KDrTf7zwlvFD4is4B1LZPRsn36","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBs2PmzSTnlgW1ON2LV2z0G23FMz/ie2PuqO9Gxyl0gPAiEAwwP+4t5w3PxLXP6+DzG4KPjWtTTIqjFno+KdgT4iDCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":317128},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"062e695a2644ad1f88596da770c39e251d609c80","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"overrides":{"zod-to-json-schema":"3.24.6"},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.25.28","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.4.2_1787663753466_0.24462882699371757","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"ssh-mcp","version":"2.5.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.5.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"5d0776207ce4d8de311d8014939d322fa2c58593","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.5.0.tgz","fileCount":40,"integrity":"sha512-lNiF6OkGTYy84FppTKZxlVjWXFPsvGMzYXqcBFL9yD0cRVW2SQANted1uSG5vZS4f44qZ9mh+7J1ZPvG56sDAA==","signatures":[{"sig":"MEUCIF1ttO+39jxrIFGZQCb4SBJA3ZeTOBBQoChjB11opxWaAiEAnehum2WkCRt8vaiaBkb9vDrTRCk5nvd0UeV9UaNuJQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCg/1ZdMnFQl2cJpgi7E1YGgW1VlHi+t2ujIrw59hQdVgIhAM56MLKn9v3KmGukoRRrBjb9Z/PMSF+B7pn1MsLwYrr8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":320982},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"0b0548420466cc99d81b41580e4fa383100a789e","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.220.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.5.0_1787734910218_0.1312537765426689","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"ssh-mcp","version":"2.5.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.5.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"5e9cbbb700b0f2680e2ce76448c722bd4c815ebd","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.5.1.tgz","fileCount":40,"integrity":"sha512-tPx5qHt0R+rq5kgf8fwCIBdxeg6iFkG0QGoLx9aHHK9ffa3uJV2VSVhyJB/TXHmLBLY7PqL+PyKIYAyKDi0WCA==","signatures":[{"sig":"MEYCIQCoTz6uxYM18L+2tRi4MxNnAcCOPXJgMFkBi6YjAezuXQIhAKMrS/Offkj6G4dsfn5niInLrHEc6tWsToo4zB6MW8tR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCO9SseVxglngBip+DduXjugJoQZEsbFFuNLk419g3glQIgErVNIa4J714pNVc5l+gWeGzC5KFJxK8hee0quFCpR5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":322660},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"6d4df493a1e9537e6795a3ea351d68fa93ed01d3","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.5.1_1788245262523_0.6683993862381838","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"ssh-mcp","version":"2.6.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.6.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"f7d4a019e47064474043eb897fed93d81414a9dc","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.6.0.tgz","fileCount":40,"integrity":"sha512-Op5GRVmuVWOviM6aSi2EYQ5AGY9K5uX9mpeywgfNU2veGvvol8idvn0BRaKNbQUNE32zfdm3lUoT8nUdQrxxiw==","signatures":[{"sig":"MEYCIQCqoEpxNbNXy4o5CR39naFarPPV2PIlq/dU/KWXgaaLdwIhANAsHdkxzA6ROKa5uKVu8BARkyy+b1WLYhXXbZFgo5hE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIA7ZfMdU7ixLEW218N228qp/1KM2Csc3PG88RvK/mi1EAiA50+2nI93Y3vk7FW+GNyz3pnZWyOAOYU6BwH11J76PkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":345370},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"5b35751e31f5339954c4cf7e35ca7fd3a5b94a35","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^2.31.0","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^0.7.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.6.0_1788332111904_0.6732415188880281","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"ssh-mcp","version":"2.7.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.7.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"f3da0544b1697fa773537a408f82b55ee55372d6","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.7.0.tgz","fileCount":40,"integrity":"sha512-CELgsaZjeA96gCuFFKUUdLfDkWZ1zR/V5uGZoPCaSZ93eLlRqWXws9nrwltSbapazdB7Lz8yMplKhRWGeYTKxg==","signatures":[{"sig":"MEUCIQCyECRIb1E8TwJ83q8NG6Vh4kM3BrcTf+K8gDM+fkpMBgIgLeUNTAJzKDynXo5fL3ny4DMsftsGzO3udxLvVsMwLEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCTLv7mgE/YaT7X7QYT/b2NTkRA4kvkGAvjIPm++oOLPgIgKlPLrKBGd1Wv/9lLoN6MaiFHBtCb9rAjSH++cThwJJE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":370660},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"425cae009638a3e119a882f9869a6646866a6f4e","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.7.0_1788374737641_0.8185414563814843","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"ssh-mcp","version":"2.8.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.8.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"faa4375033e92d1b4fd47747675b2660354877c0","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.8.0.tgz","fileCount":40,"integrity":"sha512-jd/0hFQd0Yol+Es2wv5J6DhVGInZwPhPOb8CnpJwlqAssvHddIl8OYZcqO1enTtE9Sz0SA2XbK5d0EIG4uX5+Q==","signatures":[{"sig":"MEUCIQCGdGNLhXXrC1uYq9ycagNsaxZ2q6Od7JI7up80RerZhQIgFueHl7b6+t/KlK8bV4/uIh/MyH9s/XcmMI5Ql94ThrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDu0WnlWnvhgZ7Z12HbYgX5tbwjRaRs7PRYAruBCsKNxwIgMCXh32zT/QftAUg0eEpFST8xOZm0PO2KD9JIh45GGOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":375498},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"d2d769684701e0939c1d8e56cbdde3d77fed53ef","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.8.0_1788503587887_0.14094907881079854","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"ssh-mcp","version":"2.8.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.8.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"672bf5fad2daf6d54c947fe672598bc2a7eea497","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.8.1.tgz","fileCount":40,"integrity":"sha512-6iJzab8uxS6ysg/3RGfaMW4vB7etRqmyCahQkRXL4l1tdSfu47bJ2l3avt9frxz2RG51ucwbw/7t6fHAVpT7FA==","signatures":[{"sig":"MEQCICNU6XYutnqIM+MibIrX7NoNwxhzIQkc4m9E+UyxAi02AiA0HT2kyKKvlHQG06NuRL1xABIwON88Dn3CEIvq3eNZQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAsYVMsF0QXukAaiymRFhJXsn4SBK0sLJjhvHh+KZvFfAiEAxMoYY3wHvge/EnYK3OfYDyTTX8cByQx3pygb8G9IsKA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":375847},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"bbb284d56ea1a80b43a8e94fa4ceea5d909aff65","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.8.1_1789022691703_0.3592725219694215","host":"s3://npm-registry-packages-npm-production"}},"2.8.2":{"name":"ssh-mcp","version":"2.8.2","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.8.2","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"6c1fd701ea981b1987fc91b9e0da29c5c4b98906","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.8.2.tgz","fileCount":42,"integrity":"sha512-RAfCraUhY2KCsxVmpHd2ns3JavHEtk/R6Y5DNNZsFIeKpukp3gmvGN4kW6UYhK1oMnBX+qt3dG09sCGKubLKzw==","signatures":[{"sig":"MEYCIQCruXjIB1bTjRatLwzSS/OtH3dhwUfhQu+zCyt6b1yM6wIhAJAOWUQkFVDhIhlnLIo7+sjVr0KyqkeNTg6y/7MwFQhM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEHJQfXnG+t5wLEzrfr0f4X7QAO2qGviSpTJMbkmVj8rAiAzPUd4qaScmUMGtPJm2ZbhkIKpVClecenxUFkmTSNwMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":417595},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"56394ed87b4741715f30c47ec7f69d03308e072c","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.8.2_1789366020097_0.8512041383846998","host":"s3://npm-registry-packages-npm-production"}},"2.8.3":{"name":"ssh-mcp","version":"2.8.3","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.8.3","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"ff42509e4c2440b2f6e94df871ce535e541b455b","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.8.3.tgz","fileCount":42,"integrity":"sha512-IOKR7ZgXSu1OPKO5mLMAtrm0pDlp4cUt9oGSj9da1ALFYkwcUwSID+dJKlRwImMDy1weuvCchWoSTzvkprf6/A==","signatures":[{"sig":"MEYCIQDDF45zMCH9hinPfBB+o/dypRQf+tpV90eUN3NkUcThagIhANF+nTadz8ORxwojFQHbgoFgC+jSpnZRdxhdYJKGWtYT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDRVkTBdSZ12MKcc+GVrpAeHwYFI0wcpCwGN0SZAgP9HgIhAOSIHWv9Ti/CdhXhHIMjtoHFFCPPxVguX1xqxoTRpK0H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.8.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":420936},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"41729d3d820f12dba849d2ea2ce1d3cfb56824b9","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.8.3_1789465828688_0.5511547435562785","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"ssh-mcp","version":"2.9.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.9.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"ef62361ca728879a59708bedd9ad4e2d3a792670","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.9.0.tgz","fileCount":44,"integrity":"sha512-ICceB/ANFGaSXllV+SUl4RDoKQMywkt0mv8HfKANZG6sSqSXcOlRw7+/T88If2Vd5BSZHTpej6bC6ViC7gTRrw==","signatures":[{"sig":"MEQCICvUk+G/JO8ooauDTB/EDs4rf/bwMi+ZZ/avgHA9oJeUAiBxTQTSX8Zmvws3/dkoFhKiXSELi6DBjHWZE0voudbybA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDsbQLl9XSAJcwpu8Vmzrs85RER39kVrvUN7PYID8Ou7AIgL6B6j0SBFZhQPzEpwVhprrz6KaJevGwNCqlUfWvpOy8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":457955},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"d52008a75aad68d957047935e1a252755aac1cc1","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.9.0_1789636373894_0.8157808550614809","host":"s3://npm-registry-packages-npm-production"}},"2.9.1":{"name":"ssh-mcp","version":"2.9.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.9.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"fd23114bdebce3c9a738f67f459851c2ad18d7c3","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.9.1.tgz","fileCount":45,"integrity":"sha512-I0JO//H0/BtrHkLxNweNe3brZGBgL9IofISeJvLTQYni6s0U8Ig6uGcw1PZ7xANWzlPzrMUeb+qhSdftL2Qh+w==","signatures":[{"sig":"MEQCIHpb0d33AWV9Jim/St0coPWyAWDG1zvAfF/4snAdl0S4AiAsuHfHyEVEtxiEaxXlE/G9eSBRFSe1XgkF9y7ERq1yPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEyNXAkKvdd+ZQuKfOWHrjCouEMdjkvRfXogVIItr5/ZAiBecSIqXGPJfahQE2Lsr52+NkMWKsqV6+N0xi91SH7exQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":482781},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"a1a0404e54ba0eaf6909bc0a253b077fc7e9664c","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.9.1_1789904674885_0.7633131230706021","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"ssh-mcp","version":"2.10.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.10.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"41176f2b34b5ffd34a33e9c561d1e655c21041cf","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.10.0.tgz","fileCount":45,"integrity":"sha512-mVFdXxMEdIzVA3tc1OsbuZIVr+vLO8hILbOzPUxmnE7O4vo0W754bvt6r6GbCRi3+DZnzlwtcFMkIoUVqKNM0Q==","signatures":[{"sig":"MEYCIQC46/JUpVBO1s8kS2qF940a1v1MhTMA9skAUj0WOjGSsAIhAMp3Hw7kiFrU7nWFcSFfMJNMS2wTA3tzSNFIZvOu1cM/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICrtuvnU6ySHQffHaVGzRQ8p0nVRPKdT7vBSWD1mW6J2AiEA5WgtpwyROfJjAKvCpc97hpbgi+A5NnyxHl82lnPTLzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":489432},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"8adf530d7d81b36d4f9268488753d8d5c286a7e7","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.10.0_1790055825774_0.8499413885284626","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"ssh-mcp","version":"2.11.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.11.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"1beaf90a3c6f28323754f6309960de92fcf3da5f","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.11.0.tgz","fileCount":46,"integrity":"sha512-Ipn3jFDWVYbXMmsZc/A6v3/Qjj/eV8vcH/X5QmxXVihL8FZtw8SPDAM8vaqCeHSZbP3IWYTXO38Z8LV5hzPcpA==","signatures":[{"sig":"MEUCIGn12iuRISi1NHXFsu8DZno9h1mX5TI+cUa7eyPFQ0f3AiEAsTHR70IdAzHTk8TaqgQkb248X9SryfTstXUnYHfDhkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDs02doW3ugwyFRANuueQeoech+CEDYk2zE6dyAf84m2wIgboFiOT+bbyevkLk6j9Uw2JchWr6eTfhMn4wypdU64Co=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":504031},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"14abe3349b7f559601af1552c48e2a8e2fd82662","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.11.0_1790083487540_0.31118176310230505","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"ssh-mcp","version":"2.12.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.12.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"3092a72cdcbb18b1ff73be984132ebac2a83970d","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.12.0.tgz","fileCount":46,"integrity":"sha512-TchyIS5AnQKR+ptkI6MEi1UCRUVS+Og2HNN9FU1B/jLuRr0UzhlBpxjvRHMBqvLjHucGWslmzE7bwU9OevxLaA==","signatures":[{"sig":"MEYCIQC9VmSrvp4dKeEZAsdET7xn+4T/X8USWaVmTqm/20X39AIhANcq1yai2jKoChzR8kg+t3dxE8w4PedqZCOZmWhmAxF4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIECHeqgAVglQTfvCqSz0TUR//SlUlzEV2YAxEbHBLdWmAiEArCvFLVgYUQX9EvNWJ5ovAU6ZRwzjv0Pp9ya/cfuyym4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":531837},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"a297c732c46a03285695dba39d566efeadbeb0a4","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.12.0_1790292035126_0.6427126454870509","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"ssh-mcp","version":"2.13.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.13.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"ce12ca2aa5a9b1ec0dd806fba8836363f83baebc","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.13.0.tgz","fileCount":47,"integrity":"sha512-yd/69mxlEEJGSI25gaohtX+9l7z92/yyVAEPyXbg3m/cz8MDs3nGpaTgOzpE9EksBnyZCLq8xQUIT3PN3zwBdQ==","signatures":[{"sig":"MEYCIQCG6rZI7dHDWSK5Nc7og4vtJOnSxgIrnudtH4D0SEhP4gIhAIz+/vSDbUeu/v0ggqhAQibRRfIawrywCc2TcY0o29vB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCMf9oWZ9yZb6SehnmxJj4agLpjBrQj/M+N7JEi7ndJegIgeXCtikNsbCNptzInnZn3uF00Fqz0bbKdeJPlQ92PIjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":588970},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"1ccee48219d8be10af3c3b75a5f369b660cd897c","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.13.0_1790459368107_0.6861999572781423","host":"s3://npm-registry-packages-npm-production"}},"2.14.0":{"name":"ssh-mcp","version":"2.14.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.14.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"bd8807b9bf9ee3d22a57d386b44be6fea68ba458","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.14.0.tgz","fileCount":47,"integrity":"sha512-DOU5vKos1/ANxqfA1jeeWXrxjw5WHzmkzEQYmMK1Scsy8GXfcLSwm/07R7leHVFbNnaUachgcLw8TwhWRnwTAw==","signatures":[{"sig":"MEUCIQCGqHod8j0JYoyo1MURWX8sDi4UQC6ZW6XNi3MX7d+6rgIgCo7j/QMKYm2wxPGcLpiyDxUTTPH6oxQstaUalGJYd48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHaHqMYt0I1HH1YMfDE7wC1q/vvbt0OW4BhrlJ1Jd04mAiBdDVQLG5TdEhnfhiVp82dPz7tRzWk8EbCt6wc21RQbvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":592950},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"10964ebd27a01d7aa6ed7c7726137d8c0e517b8f","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.14.0_1790598962751_0.420804977435971","host":"s3://npm-registry-packages-npm-production"}},"2.15.0":{"name":"ssh-mcp","version":"2.15.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.15.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"17d0412f04c63d8d2f26e53e8e4df4965d5fe94c","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.15.0.tgz","fileCount":47,"integrity":"sha512-x3o0P6Yh+wMKFiwsdINePVPStr+vQc0WSgnDGx2E8wcWRsLscQCFoy+jd7I+GLZx0ntIeS/1moMIMPxcMvTC4Q==","signatures":[{"sig":"MEYCIQCcysyxeG5wvOwZG/u6z6VYspr/5NL11XDGfLICENM7JgIhAPEfszDRUPqhrSNtOwfN827sP0QEaHImJlK02uisTJC1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDzsseuZsbKLBr04CWYfTMq7+u3+wpWIydCFxYTKm53ugIgLGpv6RwE8l363JS4d3lPqzvhZDWe0Ku/azUBKD1LEnM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":597901},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"ed0be4742d59ba84dac8d4cb759a17a93c345ce1","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.15.0_1791031681452_0.8503177932791441","host":"s3://npm-registry-packages-npm-production"}},"2.16.0":{"name":"ssh-mcp","version":"2.16.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.16.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"79357534bb618f1440797c70f4c77fe63e088ff7","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.16.0.tgz","fileCount":47,"integrity":"sha512-pqmZJRvZ/w6MTJ0UJl8XTMXueVvvWSrk8aIegt//V18Wk9HGgjGAWX3IlTaWA/5hhD5GRRSSre63fsqh+ljibg==","signatures":[{"sig":"MEQCIA6XYjyyf5HzG4yEM3IR7BnKJzz9Bm5HQr9V2gwLQjIgAiA4W0gUd/cFoDXUZlel8TrPbE5NVJg3fxbipLzx7Uq38A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFDXX1Rjh+IiCUS1RX/h57jELF7Mw3mylG14oL1VGDZkAiAvOG5GjsJ5LkxUhSt9aXjj3rslrg2ZAlmmiz8Cuu4xkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":601824},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"b5fc51542a2b0f58410595a14b2a290ccbf42f54","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.221.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.221.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.10","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^4.1.10","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.16.0_1791035585930_0.7386084336672127","host":"s3://npm-registry-packages-npm-production"}},"2.17.0":{"name":"ssh-mcp","version":"2.17.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.17.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"0861e18b3dc89f99cc7ad9d8f4bdd36c2b5bb6e4","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.17.0.tgz","fileCount":47,"integrity":"sha512-6kgLdJ/oF8AGZSjjRMJRpfhHE71pmQdbPXbpPMnPo/wo6KpOHoiM2TgtfaIXXtb3U3AX3eqr9lewZDrvN2rYgQ==","signatures":[{"sig":"MEQCIBU8SrYlxlxGRp4XeBphewsLa1elyBWlAYBaP3nPqUaKAiBy9y3IvcLjTBFc03QuzKCbIHLlOkLmgVI7fSObudTYTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD6hKgcPnclqETxXXTrzDLr2PhXKntoc95GsSQIe2HgQgIgME71igTw3VQW80esE5tk3qNBeQUZsX1IB9lkpnD+gmU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":613989},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"210cc54cd49aa0382c138eda700165898405e29e","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.222.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.222.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.17.0_1791111465546_0.5295559984618536","host":"s3://npm-registry-packages-npm-production"}},"2.18.0":{"name":"ssh-mcp","version":"2.18.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.18.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"e0290170e75ad040e7ab0c58cbdacd1ce1f490ea","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.18.0.tgz","fileCount":48,"integrity":"sha512-ccXi65Ry+4C7T8TmFnwzcyCFpoUHcHiRrpOelHDjYQYPUofjicwRCvk5uMdFjGzCDP5VvpC5xVEtHeKDnxTZOQ==","signatures":[{"sig":"MEYCIQC3SV8LtsgtPvKGMi9rx/jQHndqvaCOc5kHm8ETLqj3RwIhAIBWSrjWU+LxJoVYroBZQJotWm/H7QWbQrMOyxBUf6AZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDu0h2GmDRvL2tJmNRXoiQkvFmChoxlmnx5aO7DcXHyxAIgJDQLQ1YH+yR3GhXQfGf0lCmRr6EaxaEGFaOTC6FMGRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":626253},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"723a7c5a4846dfba822894d566212b1a58656b5e","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.222.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.222.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.18.0_1791124469144_0.2877754192383968","host":"s3://npm-registry-packages-npm-production"}},"2.19.0":{"name":"ssh-mcp","version":"2.19.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.19.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"14d592f9844dca925a6da52884e8dd3b568e5c8c","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.19.0.tgz","fileCount":49,"integrity":"sha512-TXpcs5KmwwcC/IExs5l+rzcUelSeFDtXuVd/ioXR1grt+lRfi2JLvuwHgN6OwGXA7LqvG6stzKEbc/IqCnsFQw==","signatures":[{"sig":"MEQCICofFUl1dXZRsUdtlnp5xiRKgH+JgP94YRx9xG6BgKdEAiADowqZAhorgBmQdhckgDzN6pQmCkuZWz1u0zt5ICPLYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCcEQ5lb9ighVw0iAtaq5YP9E12/0BFcGkFxxL6GrweGwIgCoZjNFK4XxfeDtu1q8YUC1VRJrNYEW40cMfGbuqb8MU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":643474},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"8e7ba95f8599e2b068abff8ad0994a88d7de32cd","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.222.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.30.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.222.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.19.0_1791809656343_0.04377090643945625","host":"s3://npm-registry-packages-npm-production"}},"2.19.1":{"name":"ssh-mcp","version":"2.19.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.19.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"6299fb8c5972d2ca3023084ac8b3faf72407c336","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.19.1.tgz","fileCount":49,"integrity":"sha512-w20emJPqb7kLXdzTFJK9NDRg5Mm7qKAxmY9Eu+LiCWHYRYlsFry4vkNF1X5LRkru0M4tVdE2qab/vbYHw4uoNg==","signatures":[{"sig":"MEYCIQDsqj6OxTkpBRJKXPXbraY3h8Nad/C0DSwAXRiIjZxCBQIhANDpyYlLg2SGtkn9ObLAJ/ZJZIlCJyoGTRyG7E4vYC+8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCyOq9NuoRy1A19woG1hiXaQZd3mcLwGEIZzLeySyaKSgIhAOeGpiJf9pRlW3Xf8tR1vseLlJjdTK2bW67736NcY0iw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.19.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":646183},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"58b03f10b0d184fa31573b2ea79f378aa8285ff2","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs && node scripts/sync-lockfile-version.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.222.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.31.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.222.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.19.1_1791973967844_0.698322801954766","host":"s3://npm-registry-packages-npm-production"}},"2.19.2":{"name":"ssh-mcp","version":"2.19.2","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.19.2","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"61b7218af688b4b5c9adbfcdaba76aab0933b288","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.19.2.tgz","fileCount":49,"integrity":"sha512-IvRuW4a3V+vLpG8RZWrlR2B40hlFHDjq2+fARAAjJ7RMAN2e0R+gFEWPc67/a8W/83awnjcUnko5PPBYyLToRw==","signatures":[{"sig":"MEYCIQCuMLuYoHCjXw+M8/TYBQPA5lpLy6Jd0gRldN+mkJp5XAIhANYyHJ2879pgJ/Hf2tBI84lstRAiOoz7Mb3kBs2wuOhv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCwIqB411sttTklU349m/kciGX6zx0SWKVUJ0HVzW8F4gIhAPyU3uKxa4CKgFiNIfpqWwo1vY7XYqK9VutpjbjOLzWi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.19.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":647699},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"fef504d091cddc538be6563dff1d7d5578547f78","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs && node scripts/sync-lockfile-version.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.1","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.22.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.222.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.31.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.222.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.19.2_1792583768049_0.45548304988541366","host":"s3://npm-registry-packages-npm-production"}},"2.20.0":{"name":"ssh-mcp","version":"2.20.0","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.20.0","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"859349a2adbc4d8b25d0bdc49295eb9f1750976d","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.20.0.tgz","fileCount":49,"integrity":"sha512-SmO9YEuqBvZXdedryFR/0qLNp37FLwkReQnTeXAIuZbi96u65vkMOpJtWN1WhXghIBrh9yL2qTHvW8kO+AyDEg==","signatures":[{"sig":"MEYCIQDgcfbgwMD9f1ewhdayDQ14cYUDaSN4FcnUZclaPk9s8gIhAI0zLeCw7Ot1aLGuLLi8lJjhhb9OJv80BvmsZQSq1nOa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDj0ZafLJ6YnWWR8TeR+AOzVJ+Xpc6gndQgnCxzmbHx3gIgcuVJ37ZDanfVSwgccLgEkCTiD+1b3LtzkLQ4DFlL8Qw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":660068},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"7b46f2b5f826dd95b2b7e9c38683440f790b289d","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs && node scripts/sync-lockfile-version.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.1","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.22.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.222.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.31.0","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.222.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.20.0_1792588916415_0.6244470747022277","host":"s3://npm-registry-packages-npm-production"}},"2.20.1":{"name":"ssh-mcp","version":"2.20.1","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"author":{"name":"tufantunc"},"license":"MIT","_id":"ssh-mcp@2.20.1","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"homepage":"https://github.com/tufantunc/ssh-mcp#readme","bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"bin":{"ssh-mcp":"build/index.js"},"dist":{"shasum":"f505b210fe7123d0d0749aef59deb979fa5ce863","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.20.1.tgz","fileCount":49,"integrity":"sha512-nl92M36sA7zFTjQPjkFqbFJdDa52q3GCrhSerF5WZZtDv/54q2zznTGefdEr88C2XsBhpCLoy0jzqZabcy2qZA==","signatures":[{"sig":"MEYCIQD/QzhBVLd2nS2IszrIAm0sA336d4iJoTl76BVIOFKbPQIhAIFHq2A9pouSuFffIaEnFujKAIfbKnSgJfS+ZaWxk4lP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCsg3OBZNM1QTHYP4JgMnWNebotm3gNn9z7qpKxnC431wIhAOu/dcfBcES380bNCs5ELyTgt5sJJCbCGTMwLqjMfRUR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":660068},"type":"module","engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"5c5b8476492cda568fca779b307ff8a2ca0bbbb7","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs && node scripts/sync-lockfile-version.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.1","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"_nodeVersion":"24.22.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.223.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.32.1","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.223.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/ssh-mcp_2.20.1_1792616736616_0.4758582835108016","host":"s3://npm-registry-packages-npm-production"}},"2.20.2":{"_id":"ssh-mcp@2.20.2","bin":{"ssh-mcp":"build/index.js"},"bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"dist":{"shasum":"de32438b76d75cf4f83fb9c4b580e47f17db5ac2","tarball":"https://registry.npmjs.org/ssh-mcp/-/ssh-mcp-2.20.2.tgz","fileCount":49,"integrity":"sha512-13WPShFNHL/7B6+JOOxKfu84e2QxQS64ZP3Y4XRI5WRKRtNPAgEBdJ6UeKEimlHit2jng6wwRUWT+h67hvrvcw==","signatures":[{"sig":"MEQCIBC+1MrBm08yEvPUMU3S4vTUCx0NDgSOpCt6uoq/RCs2AiAmBEJVNdKVD7vmY7ZasBchIgXkMoh1jng6Tmd87ED54g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBIGrT2VLKIuuG8KJW8XuSwRclMQgPgOLNlJyhANwC9oAiEA3qBddCVvAYpNdeLkMpwEFEqDAAo10aeRYwG2dZQ4Y34="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ssh-mcp@2.20.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":669901},"name":"ssh-mcp","type":"module","author":{"name":"tufantunc"},"engines":{"node":"^18.19.0 || >=20.6.0"},"gitHead":"81fce39bc3ddd394ac7ae589b450190b6a790bf7","license":"MIT","mcpName":"io.github.tufantunc/ssh-mcp","scripts":{"test":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run","build":"tsc && shx chmod +x build/*.js","inspect":"npx @modelcontextprotocol/inspector node build/index.js","prepare":"npm run build","version":"changeset version && node scripts/sync-server-json.mjs && node scripts/sync-lockfile-version.mjs","coverage":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage","test:e2e":"npm run build && cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/e2e/","changeset":"changeset","test:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/unit/ test/property/","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest","coverage:unit":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run --coverage test/unit/ test/property/","test:integration":"cross-env SSH_MCP_DISABLE_MAIN=1 vitest --run test/integration/"},"version":"2.20.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d01f0704-2df9-4757-8304-c99739816d97"}},"homepage":"https://github.com/tufantunc/ssh-mcp#readme","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","directories":{},"maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","ssh2":"^1.17.0","smol-toml":"^1.7.1","@opentelemetry/api":"^1.9.1","@opentelemetry/sdk-node":"^0.223.0","@opentelemetry/resources":"^2.9.0","@modelcontextprotocol/sdk":"^1.32.1","@opentelemetry/semantic-conventions":"^1.43.0","@opentelemetry/exporter-trace-otlp-http":"^0.223.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.2","cross-env":"^10.1.0","fast-check":"^4.9.0","typescript":"^5.9.2","@types/node":"^26.2.0","@types/ssh2":"^1.15.5","@changesets/cli":"^3.0.1","@vitest/coverage-v8":"^5.0.2","@changesets/changelog-github":"^1.0.0"},"optionalDependencies":{"@napi-rs/keyring":"^2.1.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ssh-mcp_2.20.2_1792745475133_0.7359650681976777"}}},"time":{"created":"2025-04-26T23:35:29.438Z","modified":"2026-10-23T08:51:15.648Z","1.0.0":"2025-04-26T23:35:29.726Z","1.0.1":"2025-04-26T23:51:26.827Z","1.0.3":"2025-04-27T00:26:19.731Z","1.0.4":"2025-04-27T00:45:08.884Z","1.0.5":"2025-04-27T00:54:01.443Z","1.0.6":"2025-07-04T15:12:06.726Z","1.0.7":"2025-07-06T09:14:23.543Z","1.0.8":"2025-09-28T15:55:25.518Z","1.0.9":"2025-09-29T11:58:47.043Z","1.1.0":"2025-10-03T15:50:36.207Z","1.2.0":"2025-10-12T14:16:47.965Z","1.2.2":"2025-10-21T05:00:28.608Z","1.3.0":"2025-11-06T19:14:45.349Z","1.4.0":"2025-12-15T16:26:10.261Z","1.5.0":"2026-01-03T19:21:46.419Z","2.0.0":"2026-08-09T09:45:14.747Z","2.0.1":"2026-08-09T10:38:45.052Z","2.0.2":"2026-08-09T22:30:45.878Z","2.0.3":"2026-08-09T23:04:27.250Z","2.0.4":"2026-08-10T06:12:56.234Z","2.1.0":"2026-08-10T11:45:35.092Z","2.2.0":"2026-08-12T06:40:36.124Z","2.2.1":"2026-08-12T08:28:59.162Z","2.2.2":"2026-08-12T13:12:05.471Z","2.2.3":"2026-08-13T07:33:55.827Z","2.2.4":"2026-08-14T06:53:33.088Z","2.2.5":"2026-08-14T12:31:31.290Z","2.2.6":"2026-08-18T10:02:36.852Z","2.3.0":"2026-08-19T12:12:38.573Z","2.3.1":"2026-08-20T06:33:23.738Z","2.3.2":"2026-08-20T07:36:50.158Z","2.3.3":"2026-08-20T16:34:32.848Z","2.3.4":"2026-08-24T14:58:51.410Z","2.4.0":"2026-08-24T17:23:57.189Z","2.4.1":"2026-08-25T12:30:52.701Z","2.4.2":"2026-08-25T13:15:53.559Z","2.5.0":"2026-08-26T09:01:50.325Z","2.5.1":"2026-09-01T06:47:42.657Z","2.6.0":"2026-09-02T06:55:12.002Z","2.7.0":"2026-09-02T18:45:37.722Z","2.8.0":"2026-09-04T06:33:08.061Z","2.8.1":"2026-09-10T06:44:51.825Z","2.8.2":"2026-09-14T06:07:00.190Z","2.8.3":"2026-09-15T09:50:28.776Z","2.9.0":"2026-09-17T09:12:53.981Z","2.9.1":"2026-09-20T11:44:34.994Z","2.10.0":"2026-09-22T05:43:45.872Z","2.11.0":"2026-09-22T13:24:47.638Z","2.12.0":"2026-09-24T23:20:35.230Z","2.13.0":"2026-09-26T21:49:28.200Z","2.14.0":"2026-09-28T12:36:02.852Z","2.15.0":"2026-10-03T12:48:01.562Z","2.16.0":"2026-10-03T13:53:06.012Z","2.17.0":"2026-10-04T10:57:45.651Z","2.18.0":"2026-10-04T14:34:29.244Z","2.19.0":"2026-10-12T12:54:16.501Z","2.19.1":"2026-10-14T10:32:47.981Z","2.19.2":"2026-10-21T11:56:08.205Z","2.20.0":"2026-10-21T13:21:56.519Z","2.20.1":"2026-10-21T21:05:36.709Z","2.20.2":"2026-10-23T08:51:15.228Z"},"bugs":{"url":"https://github.com/tufantunc/ssh-mcp/issues"},"author":{"name":"tufantunc"},"license":"MIT","homepage":"https://github.com/tufantunc/ssh-mcp#readme","keywords":["ssh","mcp","model-context-protocol","server","windows","linux","automation","remote","cli","typescript"],"repository":{"url":"git+https://github.com/tufantunc/ssh-mcp.git","type":"git"},"description":"MCP server exposing policy-gated, audited SSH access for Linux and Windows hosts via the Model Context Protocol.","maintainers":[{"name":"tufantunc","email":"tufan.tunc.91@gmail.com"}],"readme":"# SSH MCP Server v2\n\n[![NPM Version](https://img.shields.io/npm/v/ssh-mcp)](https://www.npmjs.com/package/ssh-mcp)\n[![Downloads](https://img.shields.io/npm/dm/ssh-mcp)](https://www.npmjs.com/package/ssh-mcp)\n[![CI](https://github.com/tufantunc/ssh-mcp/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/tufantunc/ssh-mcp/actions/workflows/ci.yml)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/tufantunc/ssh-mcp/badge)](https://scorecard.dev/viewer/?uri=github.com/tufantunc/ssh-mcp)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/15082/badge)](https://www.bestpractices.dev/projects/15082)\n[![codecov](https://codecov.io/gh/tufantunc/ssh-mcp/graph/badge.svg?branch=main)](https://codecov.io/gh/tufantunc/ssh-mcp)\n[![License](https://img.shields.io/github/license/tufantunc/ssh-mcp)](./LICENSE)\n[![GitHub issues](https://img.shields.io/github/issues/tufantunc/ssh-mcp)](https://github.com/tufantunc/ssh-mcp/issues)\n\n**SSH MCP Server** is a security-first Model Context Protocol server that gives LLM agents controlled SSH access to remote hosts — with command classification, policy-based authorization, human-in-the-loop approval, and full audit logging.\n\n> **The risk this server exists to manage.** Giving an LLM shell access on a remote host puts private data, untrusted input and network egress in one place — Simon Willison's [\"lethal trifecta\"](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/). Prompt injection has no general fix, so ssh-mcp assumes any command may be attacker-influenced: it classifies before executing, authorizes against a role × host-group matrix, gates destructive work behind approval, and records the decision either way. That narrows the blast radius; it does not remove the risk. Two things stay yours: **never point it at a root account**, and **never set `auto` approval on a production profile**. [SECURITY.md](./SECURITY.md) has the full threat model.\n\n---\n\n## Quick Start\n\n### 1. Install\n\n```bash\nnpm install -g ssh-mcp\n```\n\n### 2. Configure\n\nWithout a config the server still starts, so a client or directory can complete the MCP\nhandshake and read `tools/list` — but **every tool call is refused** until you configure it,\nwith a message naming the path below. Nothing runs on a host until this step is done.\n\nCreate the config file at the path for your platform:\n\n| Platform | Path |\n|---|---|\n| Linux | `~/.config/ssh-mcp/config.toml` (or `$XDG_CONFIG_HOME/ssh-mcp/config.toml`) |\n| macOS | `~/Library/Application Support/ssh-mcp/config.toml` |\n| Windows | `%APPDATA%\\ssh-mcp\\config.toml` |\n\n```toml\n[defaults]\ndefaultProfile = \"dev\"\napprovalMode = \"ask-destructive\"\n\n[[profiles]]\nname = \"dev\"\nhost = \"192.168.1.100\"\nport = 22\nuser = \"deploy\"           # NOT root!\nauth = \"key\"\nkeyRef = \"~/.ssh/id_ed25519\"\nrole = \"admin\"\napprovalPolicy = \"auto\"    # dev is permissive\n```\n\n```bash\nchmod 700 ~/.config/ssh-mcp && chmod 600 ~/.config/ssh-mcp/config.toml\n```\n\nThe config decides which hosts, roles and policy rules this server honours, so it checks\nthat nobody but you can read it — and treats the two platforms differently, because the\nquestion has a much clearer answer on one of them.\n\n**Linux and macOS: enforced.** The mode check above, on the file *and* the directory —\nwhich is why `chmod 700` is in that command, since `mkdir -p` under the default umask\nleaves the directory 0755. The server refuses to start otherwise. \"Only the owner\" is\nunambiguous here and `chmod` is a one-line fix.\n\n**Windows: split by what the ACL actually allows.** There are no mode bits, so the ACL is\nread instead — and read exposure and write exposure are not treated alike, because Windows\nis much clearer about one of them than the other.\n\n| The ACL lets another account… | Default |\n|---|---|\n| only **read** the config | reported, and the server starts |\n| **change** the config | refused |\n| nothing (no ACL at all) | refused — that is full control for everyone |\n| …and if the ACL could not be read | refused, except when `icacls` is absent or the check timed out |\n\nA config under `%APPDATA%` inherits access for you, `SYSTEM` and `Administrators` and needs\nnothing done to it. One created elsewhere does not: a file under `C:\\` inherits *read* for\nevery local account and *modify* for every authenticated one. The message names the two\n`icacls` commands that fix it either way.\n\nRead exposure is reported rather than refused because that is where Windows is genuinely\nmuddier than POSIX, and refusing over it blocked a config at the documented location\n([#138](https://github.com/tufantunc/ssh-mcp/issues/138)). Write exposure is refused\nbecause it is not muddy at all: another account being able to rewrite the file that decides\nwhich hosts, roles and approval policy this server honours is an authorization bypass, not\na disclosure.\n\nTwo flags move the whole thing: `--strictConfigAcl` refuses everything the check objects\nto, read-only grants included; `--allowUncheckedConfigAcl` reports everything and refuses\nnothing. Neither combination leaves you without an exit, which is the lesson of #138.\n\n### Exit statuses\n\n| Status | Meaning |\n|---|---|\n| `0` | Clean shutdown |\n| `1` | A defect in the server — printed with a stack trace; please report it |\n| `2` | How it was invoked or configured — printed as a message, no stack |\n\nA supervisor that treats any non-zero status as a failure needs no change. One\nthat matched on `1` to detect a startup problem should match on `2` as well.\n\nStarting with nothing configured is **not** an exit-2 condition, as of the release that\nadded introspection without a config: the server starts so it can be described, and\nrefuses each tool call instead. A supervisor that used a non-zero exit to catch an\nunconfigured deployment should watch for `starting unconfigured` on stderr, or read\n`configured` from `GET /health` when running the HTTP transport.\n\n### 3. Set credentials via environment variables\n\n```bash\nexport SSH_MCP_PASSWORD=\"your-password\"        # if using auth=password\n# OR use SSH agent (recommended):\nexport SSH_AUTH_SOCK=\"$SSH_AUTH_SOCK\"           # already set if agent running\n```\n\n### 4. Connect from your MCP client\n\n**Claude Code:**\n```bash\nclaude mcp add --transport stdio ssh-mcp -- ssh-mcp\n```\n\n**Claude Desktop / Cursor / Windsurf:**\n```json\n{\n  \"mcpServers\": {\n    \"ssh-mcp\": {\n      \"command\": \"ssh-mcp\",\n      \"env\": {\n        \"SSH_MCP_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n**Never pass passwords as CLI arguments** — they're visible via `ps aux`. Use env vars, config files, SSH agent, or OS keychain.\n\n---\n\n## Tools (14)\n\n| Tool | Purpose | readOnly | destructive |\n|------|---------|:--------:|:----------:|\n| `list-connections` | Discover available hosts and connection status | ✅ | — |\n| `list-sessions` | List active sessions per host | ✅ | — |\n| `open-session` | Create a named interactive (stateful) or background session | — | — |\n| `close-session` | Close a session. A background session's command is signalled (INT/TERM/KILL) before its channel is dropped | — | ✅ |\n| `read-session-output` | Read output from background sessions (e.g., `tail -f`) | ✅ | — |\n| `read-command` | Execute allowlisted read-only commands (`ls`, `cat`, `grep`, ...) | ✅ | — |\n| `run-command` | Execute arbitrary commands (destructive/privileged need approval, unless `approvalPolicy = \"auto\"`) | — | — |\n| `privileged-command` | Execute with sudo (needs approval, unless `approvalPolicy = \"auto\"`) | — | ✅ |\n| `sftp-upload` | Upload a file via SFTP (replaces the destination unconditionally) | — | ✅ |\n| `sftp-download` | Download a file via SFTP | ✅ | — |\n| `sftp-list` | List a remote directory, bounded in entries and bytes | ✅ | — |\n| `sftp-upload-file` | Stream a local file to the remote host, never through model context | — | ✅ |\n| `sftp-download-file` | Stream a remote file to local disk, never through model context | — | ✅ |\n| `signal-process` | Send INT/TERM/KILL to a remote PID | — | ✅ |\n\n### Streaming file transfer\n\n`sftp-upload`/`sftp-download` move file *contents* through the model's context:\nthe text is an argument on the way out and a response on the way back. That is\nwhat you want for a config snippet and exactly what you do not want for a 200 MB\ntarball or anything binary.\n\nThe two also differ on what they do to an existing destination, and the approved\nstring now says which is which. `sftp-upload` replaces unconditionally and spells\n`--overwrite` every time, because that is what it always does; `sftp-upload-file`\nrefuses unless you pass `overwrite: true`, and only then carries the flag. Since\n`sftp-upload` takes its content as an argument rather than naming a local file,\nits string also carries `--bytes=<n> --sha256=<32 hex>` — without that, two\nuploads to the same path are the same string, which means one approval covers\nboth and an auditor cannot tell which set of bytes landed. The digest is 128\nbits rather than a short prefix because that claim has to hold against a caller\nwho picks both payloads, not only against an accidental repeat.\n\n`[policy].denylist` patterns are tested against that whole string and, for every\nSFTP tool, against the remote path on its own — as given, lexically normalized,\nand read the way Windows reads it (see \"Policy Engine\"). A rule written for the\npath, such as `authorized_keys$`, therefore does not depend on where the string\nputs it or on how the file is spelled. A rule anchored on the *whole* string\n(`^sftp:upload /root/.*$`) still does: that layout is ours to change, so anchor\non the path instead.\n\n`sftp-upload-file` and `sftp-download-file` stream between the remote host and\nlocal disk instead. Neither the bytes nor a base64 encoding of them ever reaches\nthe model — the response is a byte count and two paths.\n\nThe two transfer tools are **off until you configure `defaults.transferRoot`**,\nand refuse with an explanation until then. (`sftp-list` has no local side and\nneeds none of this.) That directory is the whole of their local reach:\n\n```toml\n[defaults]\ntransferRoot = \"/srv/ssh-mcp-transfers\"\ntransferMaxBytes = 268435456        # 256MB per transfer\ntransferTimeoutMs = 300000          # 5min with no bytes moving\n```\n\nChecked on every call, and refused rather than degraded if any of it fails: the\ndirectory must be `0700` and owned by the account running this server, with no\ngroup- or world-writable parent, and must not overlap the ssh-mcp installation,\nthe config directory, the audit log directory, or `~/.ssh`. Caller paths are\nconfined to it, symlinks are refused rather than followed, and a download is\nstaged as a sibling `.part` file and published atomically, so a failed transfer\nnever leaves a half-written file at the destination.\n\n`transferTimeoutMs` is an **idle** budget, not a total one: it bounds one\nmetadata round-trip, or one stretch of the copy with no bytes moving, and is\nre-armed on progress. A slow but live transfer of a large file survives it; a\nstalled channel still fails within one window. That is why the byte cap above\ndoes not have to be divided by it — a total budget would have made a 256MB cap\nmean \"only if the link sustains 900 KB/s\".\n\nNot available on Windows, where the transfer root cannot yet be verified\nprivate; the two transfer tools refuse there rather than writing into a\ndirectory other accounts may be able to read.\n\n`sftp-upload-file` takes an optional `mode` (1–511; setuid, setgid and the\nsticky bit are refused). Omitted, a new remote file is published `0600`; an\noverwritten one inherits the replaced file's permission bits — its permission\nbits only, not its setuid or setgid.\n\nWhat a transfer is authorized for includes these arguments: the string the\npolicy engine classifies, the approval prompt a human reads, and the audit\nrecord all name `--overwrite` and `--mode` when they are given. So approving one\nupload to a path does not approve a different one to the same path, and an\napproval grant (`approvalGrantTtlMs`) cannot be replayed with a different mode.\n\n### Interactive Sessions\n\nSessions maintain state (CWD, environment variables) between commands:\n\n```\nAgent: open-session(name=\"deploy\", type=\"interactive\")\nAgent: run-command(session=\"deploy\", command=\"cd /opt/myapp\")\nAgent: run-command(session=\"deploy\", command=\"git pull\")    # runs in /opt/myapp\nAgent: run-command(session=\"deploy\", command=\"npm ci\")      # CWD persists\nAgent: close-session(name=\"deploy\")\n```\n\n### Background Sessions\n\nLong-running processes (logs, builds):\n\n```\nAgent: open-session(name=\"logs\", type=\"background\", command=\"tail -f /var/log/syslog\")\nAgent: read-session-output(name=\"logs\", lines=20)   # poll\nAgent: close-session(name=\"logs\")\n```\n\n### Remote host support\n\nTested against Linux (Debian/bash, Alpine/busybox ash), Dropbear, and Windows\nOpenSSH on Windows 11.\n\n| | Linux / BSD / macOS | Windows OpenSSH |\n|---|:---:|:---:|\n| `read-command`, `run-command`, `privileged-command`, `signal-process` | ✅ | ✅ |\n| `sftp-upload`, `sftp-download` | ✅ | ✅ |\n| `sftp-list` | ✅ | ✅ |\n| `sftp-upload-file`, `sftp-download-file` | ✅ | ❌ (local side unverifiable) |\n| Background sessions | ✅ | ✅ |\n| **Interactive sessions** | ✅ | ❌ |\n\n**Interactive sessions require a POSIX shell** (sh, bash, ash, zsh). They work by\nbracketing each command with `printf` markers and reading `$?` and `$PWD` from a\ntrailer — none of which exist in `cmd.exe`, the default shell for Windows\nOpenSSH. Opening one against such a host fails immediately with an explicit\nerror rather than timing out; everything else works normally.\n\nSetting PowerShell as the OpenSSH `DefaultShell` does not help: the protocol is\nPOSIX-specific, not merely non-`cmd`.\n\n---\n\n## Configuration\n\n### Profile options\n\n```toml\n[defaults]\ndefaultProfile = \"dev\"\nsessionMaxPerConnection = 5\nsessionIdleTimeoutMs = 600000       # 10min\nsessionBackgroundMaxMs = 3600000    # 1hr\ncommandTimeoutMs = 60000\ncommandMaxChars = 5000              # 0 = unlimited, the config spelling of --maxChars=none\ncommandMaxOutputBytes = 1048576     # 1MB\nconnectionIdleReapMs = 900000       # 15min\ncommandQuotaPerDay = 0              # 0 = unlimited; circuit breaker for runaway agents\napprovalGrantTtlMs = 0              # 0 = always prompt; see \"Approval Grants\"\napprovalMode = \"ask-destructive\"    # auto | ask-destructive | ask-all | deny\n# transferRoot = \"/srv/ssh-mcp-transfers\"   # enables the streaming file tools; see above\ntransferMaxBytes = 268435456        # 256MB per streaming transfer\ntransferTimeoutMs = 300000          # 5min with no bytes moving (idle, not total)\n\n[[profiles]]\nname = \"prod-web-1\"\nhost = \"10.0.1.50\"\nport = 22\nuser = \"deploy\"\nauth = \"agent\"                      # agent | key | password | keychain\nkeyRef = \"~/.ssh/id_ed25519\"        # for auth=key\nkeychainEntry = \"ssh-mcp/prod\"      # for auth=keychain (requires @napi-rs/keyring)\nvia = \"bastion\"                     # ProxyJump — route through bastion profile\ngroup = \"prod\"                      # Policy tier: prod | staging | dev, or your own (see [policy])\nworkdir = \"/var/www\"\ntrustedHostKey = \"SHA256:...\"       # Pin host key (optional)\ntty = false\nrole = \"operator\"                   # viewer | operator | admin\nreadOnly = false\napprovalPolicy = \"ask-all\"\ncert = false                        # SSH CA cert auth — auto-detects keyRef-cert.pub\nannounceAgent = true                # Send AI_AGENT=ssh-mcp to this host (see below); clear it for a host you do not control\nsessionMaxPerConnection = 3         # per-profile override\nsessionIdleTimeoutMs = 300000       # stricter for prod\ncommandQuotaPerDay = 200            # per-profile override\nmaxChars = 2000                     # per-profile override; stricter for prod\ntransferMaxBytes = 16777216         # per-profile override; transferRoot is not per-profile\ntransferTimeoutMs = 60000           # per-profile override\n\n# Optional. Merged over the built-in role matrix; see \"Policy Engine\" below.\n# roleBindings is keyed by role and then by tier, so the block below changes\n# operator on prod and leaves operator's other tiers, and viewer and admin,\n# on their defaults.\n[policy]\ndenylist = [\"^terraform\\\\s+destroy\", \"\\\\.ssh/authorized_keys$\"]\n\n[policy.roleBindings.operator]\nprod = [\"read-only\", \"safe\", \"destructive\"]\n```\n\nUnknown sections and keys are a startup error, not a warning, so a typo cannot\nleave you running defaults you thought you had overridden. That extends to role\nand tier names: every one you write under `[policy.roleBindings]` has to be\nreachable by some profile, and every profile's role and tier has to resolve to\nreal bindings. Both directions are checked at startup.\n\n### Host-side identification\n\nEvery command this server runs announces itself to the host as the environment\nvariable `AI_AGENT=ssh-mcp`, so an operator can tell an agent's session from a\nperson's from anything on the host that reads the session environment — a\n`/etc/profile` snippet or a `ForceCommand` wrapper, for instance. It covers all\nthree channels a command can run on: one-shot commands, background sessions and\ninteractive sessions. SFTP transfers do not carry it, because the SSH library\nthis server uses offers no way to send an environment request on a subsystem\nchannel.\n\n**The variable only lands in the session if the host opts in** with\n`AcceptEnv AI_AGENT` in `sshd_config`. Without that line sshd ignores it and the\nsession environment is unchanged — measured against Dropbear, which has no\n`AcceptEnv` mechanism at all, and against Windows OpenSSH on a default\nconfiguration: the command runs, the exit code is unchanged, the variable is\nsimply absent.\n\n**The request is nevertheless sent to every host, opted in or not.** `AcceptEnv`\nis the server's policy about what it stores; it is not a gate on what this client\ntransmits. A host that has not opted in — including one that is hostile — can\nstill see on the wire that an agent rather than a person is driving the session.\nThat is why `announceAgent = false` exists on the profile: set it for any host you\ndo not control and nothing is sent to it. It is on by default, because the\noperators who benefit are the ones running the hosts you do control.\n\nNo version is sent, deliberately. A version would narrow a hostile host to one\nspecific build; the tool's name alone does not. (The SSH transport already\ndiscloses the *library* version in its identification string, which is one\nlibrary's version across every program that uses it.)\n\nTreat the variable as a courtesy label, not an attestation. Any SSH client can\nset it and any agent can omit it, so it is useful for attributing sessions you\nalready trust and must not be used as an authorization or intrusion-detection\ninput. Authoritative attribution belongs to the key or principal that\nauthenticated.\n\n### ProxyJump (Bastion)\n\nReach internal hosts behind a bastion/jump server. The `via` field specifies a profile name to tunnel through:\n\n```toml\n[[profiles]]\nname = \"bastion\"\nhost = \"bastion.example.com\"\nuser = \"deploy\"\nauth = \"agent\"\n\n[[profiles]]\nname = \"internal-db\"\nhost = \"10.0.1.50\"                 # private IP — not directly reachable\nuser = \"dbadmin\"\nauth = \"key\"\nkeyRef = \"~/.ssh/db_key\"\nvia = \"bastion\"                     # tunnel through bastion\n```\n\nNo agent forwarding — only a TCP tunnel via `forwardOut`. The bastion stays connected and reusable for multiple internal hosts.\n\n### SSH CA Certificates\n\nFor enterprise setups with a central SSH Certificate Authority:\n\n```toml\n[[profiles]]\nname = \"prod-db\"\nhost = \"db.internal\"\nuser = \"admin\"\nauth = \"key\"\nkeyRef = \"~/.ssh/id_ed25519\"\ncert = true                         # enable CA cert auth\n```\n\nThe certificate file is auto-detected using OpenSSH convention (`keyRef` + `-cert.pub`, e.g. `~/.ssh/id_ed25519-cert.pub`). You can override the path with `SSH_MCP_<NAME>_CERT` env var. The cert is concatenated with the private key per ssh2 convention.\n\n### Credential Resolution Order\n\n1. **SSH agent** (`SSH_AUTH_SOCK`) — no key material in process memory\n2. **OS keychain** (macOS Keychain / Windows Credential Manager / Linux Secret Service) — requires `auth = \"keychain\"` and `@napi-rs/keyring`\n3. **Environment variables** — `SSH_MCP_PASSWORD`, `SSH_MCP_KEY`, `SSH_MCP_SUDO_PASSWORD`, or profile-specific `SSH_MCP_<NAME>_PASSWORD`\n4. **Key file** — `keyRef` path or `SSH_MCP_KEY` env var\n\n**Never CLI arguments.** v2 removes `--password`, `--sudoPassword`, `--suPassword` entirely.\n\n---\n\n## Policy Engine\n\n### Roles\n\n| Role | Dev | Staging | Prod |\n|------|-----|---------|------|\n| **viewer** | read-only | read-only | read-only |\n| **operator** | read-only, safe, destructive | read-only, safe, destructive | read-only, safe |\n| **admin** | all | all | read-only, safe, destructive |\n\nWhich column applies comes from the profile's `group`. Set it explicitly —\nwithout it the tier is guessed from the profile name (`prod`/`staging`/`dev`,\n`local`, `test`, `sandbox`), and **an unrecognised name resolves to `prod`**,\nthe strictest tier. A production host named `web-01` is therefore treated as\nproduction rather than silently getting dev permissions.\n\nNote what this means for `sudo`: **`admin` has no `privileged` on `prod`**, so\n`privileged-command` is refused there by design — including on a quick-start\nprofile, which has no name to infer from and therefore lands on `prod`. If the\nhost is not production, say so:\n\n```bash\nnpx ssh-mcp --host=10.0.0.5 --user=deploy --group=dev\n```\n\n```toml\n[[profiles]]\nname = \"build-box\"\ngroup = \"dev\"\n```\n\n### Configuring the matrix\n\nThe table above is the default, not a limit. An optional `[policy]` section is\nmerged over it at startup, so granting sudo on a host you have honestly\nlabelled `prod` is a reviewable line in a config file rather than a relabelling:\n\n```toml\n[policy.roleBindings.admin]\nprod = [\"read-only\", \"safe\", \"destructive\", \"privileged\"]\n```\n\nThe merge is at role *and* tier depth. That block changes `admin` on `prod` and\nnothing else: `admin` on `staging` and `dev` keep their defaults, and `viewer`\nand `operator` are untouched. Roles and tiers the defaults have never heard of\nare added rather than rejected, which is what makes a custom `group` resolve to\nreal bindings instead of falling back to the strictest tier:\n\n```toml\n[[profiles]]\nname = \"build-box\"\nrole = \"admin\"\ngroup = \"tier-1\"\n\n[policy.roleBindings.admin]\n\"tier-1\" = [\"read-only\", \"safe\", \"destructive\"]\n```\n\nExtra deny patterns live in the same section, and are applied on top of the\nnever-allowed list rather than replacing it:\n\n```toml\n[policy]\ndenylist = [\"^terraform\\\\s+destroy\", \"\\\\.ssh/authorized_keys$\"]\n```\n\nEach pattern is a regular expression tested against the command string of every\ncall. For the five SFTP tools it is also tested against the remote path on its\nown, three ways: as given; in a normalized reading, where `//` and `/./`\ncollapse, `..` resolves against the segment before it, a trailing `/` is\ndropped, and `\\` is read as `/`; and in a **Windows reading**, tested\ncase-insensitively. The refusal says which matched.\n\nThe Windows reading is what Win32 resolves a path to, measured over SFTP on\nWindows 11 (build 26200): the case variants, a trailing run of dots and spaces,\nand the `::$DATA` default-stream spelling all reach the same file, so a rule\nthat caught one spelling and not another was a bypass, not a distinction. On\ntop of the normalized reading it strips those spellings, roots a\ndrive-relative path (`C:x/…`) at its drive — where it actually resolves\ndepends on process state this server cannot see, and rooting is the fail-closed\nreading — drops `\\\\?\\` and `\\\\.\\` device prefixes, and keeps a UNC root\n(`\\\\server\\share\\…` → `//server/share/…`). Tested case-insensitively, it also\ncatches `Authorized_Keys` with a rule written for `authorized_keys`; on a POSIX\ntarget those are different files, but erring toward refusal is the direction\nthis engine takes everywhere else too.\n\nWhat the readings do not do:\n\n- **resolve anything on the target.** A relative path stays relative, so a rule\n  anchored on `/root/` does not see `.ssh/authorized_keys`; symlinks are not\n  followed; and an 8.3 short name (`AUTHOR~1`) is not expanded — no lexical\n  reading can, it takes the target's own directory listing to know the long\n  name.\n- **test the local path** of `sftp-upload-file` or `sftp-download-file` on its\n  own. That side is confined by `transferRoot`. The local path does end those two\n  tools' command strings, so a pattern anchored on the end of the string can\n  still match it there, as it always could.\n\nSo anchor a path rule on its trailing segments: `\\.ssh/authorized_keys$` matches\nthe absolute, relative and Windows spellings alike — including the case,\ntrailing-dot and `::$DATA` variants of each. A pattern written for a command is\ntested against SFTP paths too — `^rm` refuses an `sftp-download` of a file\ncalled `rmlist.txt`.\n\nOne performance note: patterns are ordinary regular expressions run against\ncaller-supplied path bytes — bounded by the remote-path length limit, the same\nexposure the command string has always had. Prefer anchored, linear patterns; a\ncatastrophically backtracking one stalls the tool call it matches.\n\nBecause role and tier names are free strings, nothing in the merge itself can\ntell a new custom role from a misspelling of an existing one. A cross-check at\nstartup does, and these all fail there rather than at the point of use:\n\n- a command class outside `read-only | safe | destructive | privileged`, so a\n  `priviledged` typo cannot parse into a grant of nothing and then read as a\n  policy decision when a command is refused;\n- any unrecognised section or key anywhere in the config, so a block the parser\n  does not understand is an error rather than a clean startup with none of the\n  behaviour you configured;\n- a role or tier under `[policy.roleBindings]` that no profile uses, so\n  `[policy.roleBindings.operater]` cannot merge in as a fourth role while the\n  profiles you meant to restrict keep running on defaults;\n- a profile whose `role` has no bindings, or whose tier has none under that\n  role, so a host cannot end up on `read-only` for a reason nobody wrote down.\n\nThe last one covers the tier you did not set as well as the one you did. A\nprofile with no `group` still resolves to one by name, and that inferred tier\nhas to exist under the profile's role like any other.\n\nA tier with no bindings for a role grants `read-only`, and never another tier's\nclasses. There is no fallback between tiers: while the matrix was compiled in,\nfalling back to `prod` meant falling back to a role's strictest cell, but a\n`[policy]` block can write that cell now.\n\nAn OPA sidecar is not an alternative route to the same grant. OPA is consulted\nonly for commands the local policy already allows, so it can refuse more but\nnever widen. Widening happens here or not at all.\n\n### Command Classification\n\nEvery command is classified before execution:\n\n- **read-only**: Allowlisted commands (`ls`, `cat`, `grep`, `df`, `stat`, `systemctl status`, ...),\n  and only when every argument is provably data under a grammar declared for that binary — see\n  below\n- **safe**: Non-destructive mutations (`npm install`, `git pull`, ...)\n- **destructive**: mutations that need approval (`rm -rf /tmp/build`, ...)\n- **privileged**: `sudo`, `su`, `doas`, `pkexec`\n\n**`read-only` is granted by argument grammar, not by binary name alone.** An allowlisted\nbinary's argument list is checked word by word against a grammar declared for it\n(`src/policy/reader-grammar.ts`); an option the grammar does not list, an abbreviation of one\nit does, a short-option cluster with an unlisted letter, an argument carrying an unquoted\nshell glob (`*`, `?`, `[`), or an operand shaped like something\nthe binary would write to, all fall the whole command to `safe` instead. This is what a\n`readOnly` profile is confined to, what `viewer` holds on prod and staging (on dev the viewer\nholds `safe` too), and what `read-command`\nrequires — all of these refuse `safe` except the viewer on dev, so a command that used to\nrun under the old, name-only\nrule can now be refused. The refusal names the rejected word (for example, `` `journalctl` is\nread-only only with the options and operands its grammar lists; `--foo` is not accepted\nthere. ``), so the caller can see which spelling of the same command still works. See\n[SECURITY.md](./SECURITY.md) for the residual risks this leaves open.\n\nA reader also falls to `safe` when its command carries a shell metacharacter — `;` `&` `|`\n`<` `>` `` ` `` `$` `(` `)` `{` `}`, a newline or a carriage return — quoted or not, because\nthe allowlist vouches for the binary, never for what a shell might do with the rest of the\nline. The refusal names the first such character. For `sftp-list` and `sftp-download` it is\nin the remote path, so `/srv/backup(old)` is refused for a `readOnly` profile with\n`` The remote path contains `(`, which counts as a shell metacharacter here, so `sftp:list`\nis read-only only for a path without one. ``\n\nA separate **forbidden** list is never allowed, whatever the role or approval\npolicy: `rm -rf /`, `mkfs`, `dd of=/dev/`, `shutdown`, `curl|sh`, fork bombs,\nwrites naming `/etc/cron`, `/etc/systemd` or any user's `authorized_keys`,\n`iptables -F`, and recursive `chmod 777 /` / `chown /`. A write *names* one of\nthose paths when it is the remote path of an upload tool, the target of a shell\nredirect, or a destination of `tee`, `cp`, `mv`, `install` or `dd of=` — in any\nspelling the path readings above resolve. The two `/etc` families match by\nprefix, so `/etc/crontab` is covered along with everything under `/etc/cron.d`,\nand a sibling that merely starts like the directory (say `/etc/cronography`) is\nrefused too — the fail-closed direction. Writes spelled any other way (`sed -i`,\n`rsync`, cmd.exe's `copy`, `move` and `robocopy`, a program handed to an\ninterpreter, a path the target computes) are not on this list; class and approval\ngovern them, and the operator denylist can close them. Add your own patterns via\nthe policy denylist; an invalid pattern fails at\nstartup rather than degrading silently.\n\n### Approval Modes\n\n- `auto` — no prompts (dev only!)\n- `ask-destructive` — prompt for destructive/privileged (default). Narrower than it sounds:\n  outside the never-allowed list, `destructive` is one `rm -rf /path` pattern, `find` with a\n  write/exec flag, an unresolvable command word, a program handed to an interpreter this\n  server cannot read (`python3 -c`, `perl -e`, `node -e`, a program arriving on a pipe —\n  but not `awk`, whose program is not read), and `sftp-upload`/interactive `open-session` — elevation classifies `privileged`, which also\n  prompts. Ordinary writes, service control and signals do not. See\n  [SECURITY.md](./SECURITY.md) before relying on this in production.\n- `ask-all` — prompt for every command\n- `deny` — reject destructive/privileged commands outright (no prompt)\n\n### Approval Grants (just-in-time)\n\n`approvalGrantTtlMs` lets one explicit approval cover repeats of the **exact\nsame** command on the same profile for a bounded time (e.g. `300000` for five\nminutes). It exists because approving `rm -rf /tmp/build` every few seconds\nduring an iterative task trains you to click through prompts — which is worse\nfor safety than a grant you chose deliberately.\n\nA grant is bound to the exact command text, the profile and the command class:\napproving `rm -rf /tmp/build` does not cover `rm -rf /tmp/build-prod`, the same\ncommand on another host, or the same command escalated to `sudo`. Runs covered\nby a grant appear in the audit log with `approver: \"jit-grant\"`, so they stay\ndistinguishable from a fresh human answer.\n\n**Off by default** (`0` = always prompt). Auto-approval weakens the gate that\nmakes destructive commands safe, so turning it on should be a decision.\n\n#### Answering the prompt\n\nApproval goes through the MCP elicitation request, so what you see is your\nclient's dialog. Accepting it approves the command — there is no second field to\nfill in.\n\nYou have **10 minutes** to answer. Past that the request expires and the command\nis refused rather than left pending, and the refusal says so; the prompt may\nstill be open in your client, in which case run the command again once you are\nready. If your client does not support elicitation at all, every destructive and\nprivileged command is refused with `APPROVAL_UNAVAILABLE` naming that cause —\napproval fails closed by design.\n\n### Command Quota\n\n`commandQuotaPerDay` bounds how many commands a profile may run in a rolling\n24-hour window (0 = unlimited). The approval gate stops *destructive* commands\nand the HTTP rate limiter caps request rate, but neither bounds total work — a\nprompt-injected agent looping over allowed commands stays under both. The quota\nis the circuit breaker for that case.\n\nCounted after policy allows a command and before it runs, so a denied command\ndoes not spend budget. The window slides rather than resetting at midnight,\nwhich would let an agent spend a full quota just before the reset and another\nimmediately after.\n\n### External Policy Engine (OPA)\n\nFor organizations that standardize on Open Policy Agent / Rego:\n\n```bash\nssh-mcp --opaUrl=http://localhost:8181\n```\n\nWhen `--opaUrl` is set, commands the built-in engine allows are additionally\nevaluated by OPA. **OPA can only narrow.** A command the built-in engine has\nalready denied returns that denial without OPA being consulted at all, so a\nsidecar answering `allow` cannot grant a class the role bindings withhold. To\nwiden, edit `[policy]`.\n\nAn outage falls back to the local decision and logs one warning per minute. That is the\ndefault because OPA is an *additional* deny layer and stopping all work would be the worse\nfailure — but an operator who deployed OPA *as* the authorization gate loses that gate\nduring the outage, and the only signal is a stderr line MCP clients usually discard.\n`--opaFailClosed` makes the gate being down mean no; the refusal carries `ruleId:\n\"opa-unavailable\"` so the audit record says the gate was down rather than implying a policy\nrefused the command.\n\nThe request shape is modeled on the AuthZEN Access Evaluation contract:\n\n```json\n{\n  \"input\": {\n    \"subject\": { \"role\": \"operator\", \"profile\": \"prod-web-1\" },\n    \"action\": { \"tool\": \"run-command\", \"commandClass\": \"destructive\" },\n    \"resource\": { \"command\": \"rm -rf /tmp/cache\", \"binary\": \"rm\", \"host\": \"10.0.1.50\" },\n    \"context\": { \"readOnly\": false }\n  }\n}\n```\n\nFor the five SFTP tools, `resource` also carries three path keys: `remotePath`,\nthe path as given; and `remotePathNormalized` and `remotePathWindows`, the same\ntwo readings the local denylist tests, so a rule can match a canonical spelling\nwithout parsing `command` or reimplementing either reading in Rego. The two\nupload tools add `remoteWrite: true`, the fact the local policy refuses the\nnever-allowed write paths on — a rule can gate writes without parsing `command`\neither. Other tools omit all four, and so does an empty path. `remotePath` is **as given** —\n`/root//.ssh/x` arrives spelled that way, so a `startswith` rule on a directory\nmisses it: match trailing segments, or match the normalized keys.\n`remotePathWindows` keeps the case it was given; `lower()` both sides in the\npolicy for case-insensitive rules. Match fields rather than the whole\n`resource` object — its keys vary by tool.\n\nOPA responds with `{ \"result\": true/false }`. If OPA denies (`result: false`), the command is blocked even if the built-in engine allows it. If OPA is unreachable, the built-in engine's decision stands by default (fail-open, to avoid locking out access); `--opaFailClosed` refuses instead. A 200 that carries no boolean `result` counts as unreachable — that is what OPA answers for an undefined document, so a misnamed package or an unactivated bundle is an outage rather than consent.\n\nExample Rego policy (`ssh-mcp.rego`):\n```rego\npackage ssh.mcp\n\ndefault allow := false\n\n# Admins pass the OPA gate on dev hosts. The built-in policy still applies on\n# top: this widens nothing that the role bindings withhold.\nallow if {\n  input.subject.role == \"admin\"\n  startswith(input.subject.profile, \"dev\")\n}\n\n# Deny all destructive commands on prod\ndeny if {\n  input.action.commandClass == \"destructive\"\n  startswith(input.subject.profile, \"prod\")\n}\n```\n\n---\n\n## Security\n\n### Threat Model\n\nSee [SECURITY.md](./SECURITY.md) for the full threat model, vulnerability reporting policy, and deployment checklist.\n\n### Supply chain\n\nReleases carry signed attestations, published through [Sigstore](https://www.sigstore.dev/)\nand recorded in its public transparency log. They live in **two different stores**, which is\nwhat decides how each is verified:\n\n| Attestation | Predicate | Stored by | Since |\n|---|---|---|---|\n| Build provenance — [SLSA](https://slsa.dev/) Build **Level 2** | `slsa.dev/provenance/v1` | npm | every release |\n| SBOM — CycloneDX and SPDX | `cyclonedx.org/bom`, `spdx.dev/Document` | GitHub | releases after v2.4.0 |\n\nProvenance comes from npm [trusted publishing](https://docs.npmjs.com/trusted-publishers):\nthe release workflow authenticates with a short-lived OIDC token and no stored credential,\nso there is no long-lived npm token to leak.\n\n```bash\nnpm audit signatures        # provenance, against an installed tree\n\nnpm pack ssh-mcp            # the SBOM attestation is bound to the tarball, so fetch it\ngh attestation verify ssh-mcp-*.tgz --repo tufantunc/ssh-mcp --predicate-type https://cyclonedx.org/bom\n```\n\nBoth flags on the last command are load-bearing. `gh attestation verify` defaults to the\nSLSA predicate, so without `--predicate-type` it filters the SBOM out and reports nothing\nfound — and the provenance it would look for instead is in npm's store, not the GitHub\nstore `--repo` queries. Use `https://spdx.dev/Document` for the SPDX one.\n\nBoth SBOMs are also attached to each\n[GitHub release](https://github.com/tufantunc/ssh-mcp/releases), for reading rather than\nverifying.\n\n**Level 2, not 3.** Provenance is signed by the generic GitHub-hosted runner —\n`builder.id` is `https://github.com/actions/runner/github-hosted` — which the build itself\ncan influence; Build L3 requires an isolated builder it cannot. Reaching L3 is not\ncurrently compatible with trusted publishing: npm turns on its own provenance whenever that\nsetting is left at its default, and then ignores any externally generated one. So L3 today\nwould mean returning to a long-lived npm token — trading the property described above for a\nlevel number.\n\n### Safe Defaults\n\n- **Non-root** user in all examples\n- **TOFU** host key verification (accept on first connect, verify after — within one process; see [SECURITY.md](./SECURITY.md#host-key-trust-does-not-survive-a-restart))\n- **RFC 9142** algorithm allow-list (no SHA-1, no CBC, no ssh-rsa)\n- **exec()-only for elevation** (`privileged-command` takes no `session`, so sudo never runs in a persistent shell — fixes PTY leak. Interactive sessions exist for ordinary commands; this bullet is about elevation, not about every path being an exec channel)\n- **Sudo via stdin** (not argv — fixes process list leak)\n- **Sanitizer** strips CR/LF/NUL from all metadata\n- **3-layer redaction** (field → regex → entropy) on audit logs\n- **No CLI-arg secrets** (use env vars, keychain, or config)\n- **Agent announcement is disclosed, not hidden** — every command tells the host `AI_AGENT=ssh-mcp`, including hosts that never opted in to storing it; clear `announceAgent` on a profile pointing at a host you do not control (see [Host-side identification](#host-side-identification))\n\n### Hardening Checklist\n\n- [ ] Create dedicated low-privilege service account on target hosts\n- [ ] Use command-specific `sudoers` instead of `NOPASSWD: ALL`\n- [ ] Enable `ask-all` approval for production profiles\n- [ ] Restrict network egress on target hosts\n- [ ] Use `readOnly = true` for monitoring profiles\n- [ ] Review audit logs regularly\n- [ ] Run `chmod 700 <config dir> && chmod 600 config.toml` (Windows: the ACL under `%APPDATA%` is already restricted)\n\n---\n\n## Transports\n\n### stdio (default)\n\nFor local MCP clients (Claude Code, Cursor, Windsurf). No network exposure.\n\n```bash\nssh-mcp                          # reads config from XDG path\nssh-mcp --config=/path/to.toml   # custom config path\n```\n\n### HTTP (optional)\n\nFor remote/web clients behind a reverse proxy with TLS:\n\n```bash\nssh-mcp --transport=http --httpPort=3000 --bearerToken=secret\nssh-mcp --transport=http --httpPort=3000 --bearerToken=secret --rateLimit=60\n```\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--bearerToken` | required | Bearer token for authentication (all routes except `GET /health`) |\n| `--httpPort` | 3000 | HTTP listen port |\n| `--httpHost` | 127.0.0.1 | Bind address |\n| `--rateLimit` | 0 (off) | Max authenticated requests per minute, per client (0 = unlimited) |\n| `--httpSessionTtl` | 1800000 | Idle timeout of an MCP client session over HTTP, in ms (a session with a request in flight or an open SSE stream does not expire). At the 64-session cap a new client evicts the least recently active session with no request in flight, one holding an SSE stream only when no other can go |\n| `--authFailureLimit` | 10 | Failed bearer-auth attempts allowed per client per minute (0 = off) |\n| `--trustProxy` | false | Read the client address from `X-Forwarded-For`, but only when the peer is the proxy — bare means a loopback peer |\n| `--trustedProxies` | — | Comma-separated peer addresses allowed to send `X-Forwarded-For`. Empty means loopback only |\n\nEndpoints: `POST /` (MCP Streamable HTTP), `GET /status`, `GET /health`\n\n`GET /health` answers `{\"healthy\": true, \"configured\": <bool>}`. It stays `200` either way —\n`healthy` is liveness — while `configured` is false when no profile is set, which is the\ncase of a config bind mount that silently did not attach: the server binds the port and\nrefuses every tool call. `GET /status` carries the profile list itself and stays behind the\nbearer token.\n\n`--rateLimit` is a budget per client, keyed the same way as the failed-auth budget below,\nand every authenticated request spends from it: `POST /` and the rest of the MCP route,\n`GET /status`, and an authenticated request to a path that does not exist. `GET /health`\nnever does. A wrong token never does either, so unauthenticated traffic cannot spend a\nworking client's budget. When a client's budget is spent the server returns HTTP 429 with\na JSON-RPC error body, and `Retry-After` gives the seconds until that client's next request\nwill be accepted.\n\nFailed authentication is throttled separately, and on by default. `--rateLimit` never saw a\nwrong bearer token, because the auth check answers before the limiter is reached — so\nguessing ran at network speed. `--authFailureLimit` gives each client its own small budget,\nspent only on a 401; a correct token never consumes from it, so a working client never\nthrottles itself. Once an address has spent its budget every request from it waits,\nincluding one with the right token — that is deliberate, since answering the guess would\notherwise tell the caller which token was right. Clients are told apart by socket address,\nfor this budget and for `--rateLimit` alike. **Behind a reverse proxy that means every\nclient shares one of each**, so set `--trustProxy` when the proxy is yours — the server\nprints a warning the first time it sees `X-Forwarded-For` without it. `--trustProxy` takes\nthe *rightmost* `X-Forwarded-For` entry, which is the hop the proxy itself appended;\neverything to its left came from the client, so reading the leftmost would let a client\nchoose its own budget or spend a victim's. That only holds if a proxy actually appended\nthe entry, so the header is read **only when the peer is the proxy** — bare `--trustProxy`\nmeans a loopback peer, which is the deployment above; name a proxy elsewhere with\n`--trustedProxies`. When the header cannot be read as an address, or the peer is not\ntrusted, the server falls back to the socket address and says so once, so a flag that is\nnot taking effect is not silent. One trusted hop is assumed. A malformed\n`--authFailureLimit` is refused at startup rather than silently disabling the check; only\n`0` turns it off.\n\nAn IPv6 client is told apart by its /64 rather than its full address, for both budgets. A\n/64 is usually the smallest block a subscriber is handed, so hosts that share one — a home\nor office network, or customers a hosting provider places on one /64 — share a budget, the\nway hosts behind one IPv4 NAT do. An IPv6 address that carries an IPv4 address (IPv4-mapped,\nor the NAT64 prefix `64:ff9b::/96`) counts as that IPv4 client. A NAT64 or SIIT translator\nthat uses a prefix of its own is not recognised: every IPv4 client it translates shares that\nprefix's /64, and so one budget.\n\n**Always terminate TLS at a reverse proxy** (Caddy/nginx). The server listens on `127.0.0.1` only.\n\n---\n\n## Docker\n\n```bash\n# Build\ndocker build -t ssh-mcp .\n\n# Run (config file + env vars for credentials)\ndocker run -i \\\n  -v ./config.toml:/home/appuser/.config/ssh-mcp/config.toml:ro \\\n  -e SSH_MCP_PASSWORD=secret \\\n  ssh-mcp\n```\n\nOr with docker-compose:\n\n```bash\ndocker-compose --profile app up\n```\n\nThe Docker image runs as non-root UID 65532, with a minimal `node:22-slim` base.\n\n---\n\n## CLI Flags (v2)\n\nSecrets are **never** passed as CLI arguments.\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--config` | platform config dir (see [Configure](#2-configure)) | Path to TOML config file |\n| `--host` | — | Quick start: SSH host (creates single-profile config) |\n| `--user` | — | Quick start: SSH username |\n| `--port` | 22 | Quick start: SSH port |\n| `--key` | — | Quick start: Path to private key |\n| `--workdir` | — | Quick start: Working directory for commands and sessions |\n| `--group` | prod | Quick start: Policy tier — `prod`, `staging` or `dev` |\n| `--timeout` | 60000 | Command timeout in ms |\n| `--maxChars` | 5000 | Max command length (`none` or `0` disables the limit; in a config file the same setting is `commandMaxChars = 0`) |\n| `--sessionMax` | 5 | Max concurrent sessions per connection |\n| `--sessionTtl` | 600000 | Idle timeout of an SSH session in ms |\n| `--transport` | stdio | `stdio` or `http` |\n| `--httpPort` | 3000 | HTTP transport port |\n| `--httpHost` | 127.0.0.1 | HTTP bind address |\n| `--bearerToken` | — | Bearer token for HTTP transport auth (required for `--transport=http`) |\n| `--rateLimit` | 0 | Max authenticated requests per minute, per client (0 = unlimited) |\n| `--httpSessionTtl` | 1800000 | Idle timeout of an MCP client session over HTTP, in ms (a session with a request in flight or an open SSE stream does not expire). At the 64-session cap a new client evicts the least recently active session with no request in flight, one holding an SSE stream only when no other can go |\n| `--authFailureLimit` | 10 | Failed bearer-auth attempts allowed per client per minute (0 = off) |\n| `--trustProxy` | false | Read the client address from `X-Forwarded-For`, but only when the peer is the proxy — bare means a loopback peer |\n| `--trustedProxies` | — | Comma-separated peer addresses allowed to send `X-Forwarded-For`. Empty means loopback only |\n| `--allowedHosts` | bind address + localhost | Comma-separated Host headers accepted by the DNS-rebinding guard |\n| `--hostKeyMode` | `tofu` | `tofu \\| strict \\| insecure`. `strict` accepts only hosts pinned with `trustedHostKey`. See [SECURITY.md](./SECURITY.md#host-key-trust-does-not-survive-a-restart) |\n| `--insecureHostKey` | false | Disable host key verification for hosts with no `trustedHostKey` — a pin still refuses (test only!) |\n| `--allowUncheckedConfigAcl` | false | Windows: report every ACL finding and refuse none |\n| `--strictConfigAcl` | false | Windows: refuse on every ACL finding, including a read-only over-grant |\n| `--disableApproval` | false | Skip the approval gate (quick start profile only) |\n| `--opaUrl` | — | OPA sidecar URL for external policy |\n| `--opaFailClosed` | false | Refuse every command while OPA is unreachable, instead of falling back to local policy |\n| `--opaTimeoutMs` | 10000 | How long to wait for the OPA sidecar. Lower makes the fail-open cheaper to reach; higher makes an outage slower to notice |\n| `--commandQuota` | 0 (off) | Max commands per rolling 24h per profile |\n| `--approvalGrantTtl` | 0 (off) | Auto-approve an identical command for this many ms after approval |\n| `--auditEntropyScan` | false | Enable entropy-based secret scanning in audit |\n| `--auditTamperEvident` | false | Enable hash-chained tamper-evident audit log |\n| `--otelEndpoint` | — | OTLP/HTTP endpoint for OpenTelemetry traces |\n| `--otelServiceName` | ssh-mcp | Service name reported on trace spans |\n| `--dumpToolHashes` | — | Print SHA-256 hashes of the tool descriptions and exit |\n\n---\n\n## Migrating from v1\n\nv2 is a breaking release. Passing a removed flag now fails at startup with the\nreplacement, rather than failing later as a confusing auth error.\n\n### Tools\n\n| v1 | v2 | Notes |\n|----|----|-------|\n| `exec` | `read-command` | Allowlisted read-only commands. Prefer this for reads. |\n| `exec` | `run-command` | Arbitrary commands. Destructive and privileged ones go through the approval gate, unless `approvalPolicy = \"auto\"`. |\n| `sudo-exec` | `privileged-command` | Requires approval unless `approvalPolicy = \"auto\"`. Password is piped via stdin. |\n| `description` parameter | — | Removed. It was an injection vector (#44) and never reached the host. |\n\n**Command results now carry status.** In v1 a failed command rejected with\n`Error (code N)`. In v2 a non-zero exit comes back as an error result including\nthe exit code and stderr — so an empty response no longer means \"it worked\".\n\n### Flags\n\n| v1 flag | Replacement |\n|---------|-------------|\n| `--password` | `SSH_MCP_PASSWORD` env var (or `SSH_MCP_<PROFILE>_PASSWORD`) |\n| `--suPassword` | `SSH_MCP_SUDO_PASSWORD` env var |\n| `--sudoPassword` | `SSH_MCP_SUDO_PASSWORD` env var |\n| `--disableSudo` | Use a role/policy that disallows the `privileged` class |\n\nCredentials moved off the command line because CLI arguments are world-readable\nvia `/proc/<pid>/cmdline` on Linux (CWE-214). Credentials now resolve through an\nSSH agent → OS keychain → env var → key file cascade.\n\n### Example\n\n```jsonc\n// v1\n{ \"command\": \"npx\", \"args\": [\"ssh-mcp\", \"--host=1.2.3.4\", \"--user=root\", \"--password=hunter2\"] }\n\n// v2 — credentials via env\n{\n  \"command\": \"npx\",\n  \"args\": [\"ssh-mcp\", \"--host=1.2.3.4\", \"--user=root\"],\n  \"env\": { \"SSH_MCP_PASSWORD\": \"hunter2\" }\n}\n```\n\nFor more than one host, move to a TOML config file (see [Configuration](#configuration))\nand pass `--config <path>`; profiles carry per-host roles and approval policy.\n\n### Host key verification\n\nv1 did not verify host keys. v2 defaults to trust-on-first-use and records the\nkey **in memory, for the life of the process**; a later mismatch in that same\nprocess fails the connection. Nothing is written to disk and `~/.ssh/known_hosts`\nis not consulted, so a restart accepts afresh — see\n[SECURITY.md](./SECURITY.md#host-key-trust-does-not-survive-a-restart). Pin\nexplicitly with `trustedHostKey` in a profile, which is the only control here that\nsurvives a restart — and which no host key mode overrides, so `--insecureHostKey`\nis an opt-out only for hosts you have not pinned (test environments only).\n\n---\n\n## Testing\n\n```bash\n# Start test SSH servers. --build matters: compose reuses an existing image, and a\n# fixture change (such as the alpine target's AcceptEnv line) then never lands,\n# which shows up as a product failure in the integration suite.\ndocker compose --profile test up -d --build\n\n# Run all tests\nnpm test\n\n# Run only unit tests\nnpm test -- test/unit/\n\n# Run with coverage\nnpm run coverage\n```\n\n## MCP Inspector\n\n```bash\nnpm run inspect\n```\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md). Please follow the [security checklist](./SECURITY.md#security-checklist-for-contributors) in all PRs.\n\n## Support\n\nIf you find SSH MCP Server helpful, consider starring the repository or [sponsoring](https://github.com/sponsors/tufantunc)!\n\n## Listed on\n\n[![SSH MCP Server on Glama](https://glama.ai/mcp/servers/tufantunc/ssh-mcp/badge)](https://glama.ai/mcp/servers/tufantunc/ssh-mcp)\n\nAlso on the [official MCP registry](https://registry.modelcontextprotocol.io) as `io.github.tufantunc/ssh-mcp`.\n","readmeFilename":"README.md"}