{"_id":"@aiondadotcom/mcp-ssh","_rev":"17-7ea27c5f14b87107e421f579137cd974","name":"@aiondadotcom/mcp-ssh","dist-tags":{"security":"1.0.4","latest":"1.3.9"},"versions":{"1.0.0":{"name":"@aiondadotcom/mcp-ssh","version":"1.0.0","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.0.0","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"server-simple.mjs"},"dist":{"shasum":"16e6cacadc691588bc5a823d639a5d02fbfaf972","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.0.0.tgz","fileCount":6,"integrity":"sha512-Hi4ew31udFvqg+d88IeBVS1hpn2lwrINyDfUOhhll+ZE4bNQTDZ/7oSShsK5QtL29pgQsADgnnWi3ki03yYiUA==","signatures":[{"sig":"MEQCIC7VG7xfijfNd5U8Gm9OG9UMucL/dFKbwi60BNi0ssEpAiAIG+fMlIiJsyRwO4dJy/P6vgHBC2vdtPuJgczLcy50uQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35542},"main":"server-simple.mjs","type":"module","gitHead":"2007d12e4f3544d37d8485e1671436d7903af3c2","scripts":{"dev":"node server-simple.mjs","test":"echo \"No tests specified\" && exit 0","build":"tsc","start":"node server-simple.mjs","version":"npm run build && git add -A","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.0.0_1749203274869_0.7499364278316245","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aiondadotcom/mcp-ssh","version":"1.0.2","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.0.2","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"server-simple.mjs"},"dist":{"shasum":"6b0464599408e3cc172481995f72d85c36afcf77","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.0.2.tgz","fileCount":9,"integrity":"sha512-/4dmHwHX6Cl/22X+CbQiL6p7INWCGGGtjuHxkrP9+vgvnL7uFJrpKo/fERZFOMGfZVElMAr/+53RqUxJQqwM7A==","signatures":[{"sig":"MEUCIH8hOlma7WT317YckQ4S3NcWpmGLMKZkD38aFqZpiu6HAiEA+L9PCWwibu+k/hqJbq6CtMi3QH3LAfukrTEzq9tdvRk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44449},"main":"server-simple.mjs","type":"module","gitHead":"1eb73b0d9079fc567149bc370dd7701ce19eac23","scripts":{"dev":"node server-simple.mjs","test":"echo \"No tests specified\" && exit 0","build":"echo \"Build skipped\"","start":"node server-simple.mjs","version":"git add -A","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.0.2_1749204174101_0.43753848390851435","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aiondadotcom/mcp-ssh","version":"1.0.3","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.0.3","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"5822722a29c729f57a8f27d5949029afa47dcb10","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.0.3.tgz","fileCount":10,"integrity":"sha512-EFOLhYJ9eixnqrGI7bFRRk5QIGDAmAX3PpTLuPzv/zreIy3y40f9Vb/YcD/oTqiDXLgCbOqxDDOLQEqbIK8UWA==","signatures":[{"sig":"MEUCIQCko5eVuCrY2HsMtLhDQWLIlOWuX2i+bidgMKfI+W0HKAIgFXB8N3S4OR5dnd6Kyn2BmMoWmBqq4plKGYgq0bihX6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44805},"main":"server-simple.mjs","type":"module","gitHead":"43a2c48d5014e0f6e9070ba4e795661857a14d0d","scripts":{"dev":"node server-simple.mjs","test":"echo \"No tests specified\" && exit 0","build":"echo \"Build skipped\"","start":"node server-simple.mjs","version":"git add -A","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.0.3_1749204362727_0.9504232222744189","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aiondadotcom/mcp-ssh","version":"1.0.4","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.0.4","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"4680075dc907ee5313e9a2be4bfe2dd025acf625","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.0.4.tgz","fileCount":17,"integrity":"sha512-Uc+ksoIK7aq8Ri/Qt9frtQDjbvk4/DsKICiJhC0hrZ3+z2zjx+43U5kXDhLPG/we0r+ld4lAr1e/e2Irz8v9Kw==","signatures":[{"sig":"MEUCIBcCz67Le5WFmgvO4JBnLebey4OKtG94rOOmrCoThgGyAiEAzi3NjWD6Aq+8vkDF3MHebCrx6XZ1oE3LF55go3fg5A0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8860988},"main":"server-simple.mjs","type":"module","gitHead":"cd2566a948b696501abfa6c6b03462cac5fb43d8","scripts":{"dev":"node server-simple.mjs","test":"echo \"No tests specified\" && exit 0","build":"echo \"Build skipped\"","start":"node server-simple.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tmp":">=0.2.4","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.0.4_1755422000654_0.4158487837615097","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aiondadotcom/mcp-ssh","version":"1.1.0","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.1.0","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"1fed096ee1c871eb3a3e3f9e03d6fe9a2695b742","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.1.0.tgz","fileCount":18,"integrity":"sha512-D6e0iOgKJo1ksKlXea0pOjLXUD9fb9jjgXpiXtfEM8ybdLlL7lJml3j141BOdFEekzVfwrrnO/opYrBVb4kwfQ==","signatures":[{"sig":"MEQCIB4d/m9EAOaZEx574fkE7/GQuijVFcusckNWO9liKFMLAiBk2syT4VaSpFNFdRkx7/R3OH2fVzHRc8izNbdANSeNOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8866631},"main":"server-simple.mjs","type":"module","gitHead":"f46fc72adb9f5777a4ce11319bfd6969d360af0b","scripts":{"dev":"node server-simple.mjs","test":"echo \"No tests specified\" && exit 0","build":"echo \"Build skipped\"","start":"node server-simple.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.1.0_1755423371957_0.3324255067883555","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aiondadotcom/mcp-ssh","version":"1.2.0","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.2.0","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"30dc2287b8589e5db13eb38c80798e961887a4c0","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.2.0.tgz","fileCount":18,"integrity":"sha512-LqWFIAQZKuPAl1wojkpg9UaLWe5hjr+6VlLI55bLnW8FjTcPpWu6+lnn8x2JWlNVwrcOLz6ZlbVCbxlXL3Ijqw==","signatures":[{"sig":"MEQCIAq1WQbjSrtcO3MJ2D+UE39cy/N88wjuKR2Ig7B+gT4AAiBADMoSMrdTvV/MZ4Z8PssJzmlKcHtRHcXP+pPA0BnzXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8867377},"main":"server-simple.mjs","type":"module","gitHead":"edcca3facc86b8cf4d3c2a730cd1986bcd785054","scripts":{"dev":"node server-simple.mjs","test":"echo \"No tests specified\" && exit 0","build":"echo \"Build skipped\"","start":"node server-simple.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.2.0_1772048727080_0.6707046567940875","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.0","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.0","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"fb39ea9db87779350c3e375be4614bae69274546","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.0.tgz","fileCount":21,"integrity":"sha512-NVqhjksdbQ8TSOaksWyDSCVHF3F6eCet0d9dwLho4WX/VG+CMWU5zMXdRJW7XYXfhFor6wFS8878nSIqzmilPA==","signatures":[{"sig":"MEUCIBDsoqp2lI7TVoPh0a5B9FMooygXzZuwL7SoOoxax+a3AiEA8Jnfj8TjuWgeK3MtPXLNIEBd02J53NkEJptsWPTKks0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263877},"main":"server.mjs","type":"module","gitHead":"53e0047a9267ab0d9862cce24cdb38ffa28f4382","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.0_1772965184603_0.9563390002608361","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.1","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.1","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"008abde4f4b29f8588bf4b601ee923c654b37a91","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.1.tgz","fileCount":10,"integrity":"sha512-12/Vq7QCxAfcDM4sBm4cgFrLi5088cnIxtPdeL9qnVWdGLsU9jLIYXTEzIxmERd0cTkFpFiyYRj0+6KnDUr/uQ==","signatures":[{"sig":"MEUCIH+skBFkruZ13KTpSA02DGD5mm5JWhHDOhlctohLgIVyAiEA7ab6zu7puheYWFA+f3cQrcVJHA7oXRsqvfSxUsobYuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57347},"main":"server.mjs","type":"module","gitHead":"4654b1fbe66e4f56fa81d5f55f4173e55b861af2","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.1_1772965202462_0.8696233971715965","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.2","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.2","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"0aa10034992f414aca402f02d2f78d32f98afdbc","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.2.tgz","fileCount":10,"integrity":"sha512-uSgKXxZv1CbCahzVT03+Qp6swi95qomvHY9BTy1ZceRZC/qfM+ECkHC++Rufv2V62yZ+U+oKj9P0iWOMRMho9g==","signatures":[{"sig":"MEUCIGBHzFVj5h3t+Lzq2XaFTLgq0Y00KiOOMpuhOv8UHavXAiEAg4xynOgUkZQ/ZQ66svplOj5aRGYsNf8eYhR5DlAr8Fk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57386},"main":"server.mjs","type":"module","engines":{"node":">=20"},"gitHead":"a06aac38a8ef1eb73c32f92c42636442a2b58f1b","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.2_1772965377215_0.48172765756314084","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.3","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.3","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"00d9206b7ea3b2c4ee94d6f18336a3ad016971dc","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.3.tgz","fileCount":10,"integrity":"sha512-ISoPpq06ZusJ/tdILgU0wbTUQPyL04d4qQuxqMXJbbb12MkKxJ498xV9yCVAp70umPGExre0fv+VzI6+vzbN5Q==","signatures":[{"sig":"MEQCIEBa4gADCS4pvcpEhorjOe6Qbd8SYovGL9SlUBDyuOkKAiB5z77oJ6ePNCs0csK926cwtaB7OgM1Bbd1nhwejXQR6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57502},"main":"server.mjs","type":"module","engines":{"node":">=20"},"gitHead":"d1be421ca31669fa5bb02fea5e4391c666c756d5","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.3_1773077140862_0.6700562121915081","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.4","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.4","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"e5d279faee1b02ee409211f4cc4a6888327e96f6","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.4.tgz","fileCount":10,"integrity":"sha512-pyC2C7gRJIY3hWJjSqpsQTPtEs0TqXkAy2c5ztJ4MshDZpuDooOrUKmyirZrzbA7IZrcnTXIe1y/GydHwEUFfA==","signatures":[{"sig":"MEUCIDkAf16JJ7ihNS/Og1DmjvxUY64kXc403ILpwLh6ms7yAiEAsDzZaRlZZyXtSJlRCV+srNi7RivmYOIhH+hGsZIMTfM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58724},"main":"server.mjs","type":"module","engines":{"node":">=20"},"gitHead":"c7638cb0afa938f2342e083f40c2e9d8374fb2f7","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.4_1773230110016_0.0985538441858762","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.5","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.5","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"958c34e84e1df8e841bc22a57f0ae88492a37b76","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.5.tgz","fileCount":10,"integrity":"sha512-YjPWQGMFH/r4tNjkv0kLv3QKEpeCndXbIXrsnh2evZw7jbZ8UYEMXAYHa/fQHp/RIrSGxCprzmfH5FR+eA07Sg==","signatures":[{"sig":"MEUCIQCjRigYFV8/mjIOGsWDU4FJptHSlQXbwf1KJOP4KeB+6wIgPr4U1ZXZjTSb5pB7sXOH8TMS320cf5OFlg2xV6kmps4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69434},"main":"server.mjs","type":"module","engines":{"node":">=20"},"gitHead":"1b6ac6d1ce99b299ada88ffc04a05a3b6d06820c","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.5_1775918235444_0.5045350281443375","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.6","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.6","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"34dab04dd692961670c6eef01eaa05f558cb5846","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.6.tgz","fileCount":10,"integrity":"sha512-LN6lhxV8yk7sIqAz5smRPBQ7/yuHnC8TSaxTlzrkIvRSyp0lAQS7YYeyPYwGk5V6y6uig4ugae7xmz4JbP0fCw==","signatures":[{"sig":"MEYCIQDNHnIC/0hKn4E6cgf/xdArlNnvpsulnNQDl/zdyMHqNwIhAIsXYNggRdGsPHwiW4k35b4f/32KMKvWPuLQ+r8uAOpX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70141},"main":"server.mjs","type":"module","engines":{"node":">=20"},"gitHead":"2f12bd9d577561b31bb9d36a6729f3f0d4b34fee","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.6_1775918915695_0.78446833880692","host":"s3://npm-registry-packages-npm-production"}},"1.3.7":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.7","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.7","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"15ad36c649ed3c7afbada96c9afbad83ed4a833c","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.7.tgz","fileCount":10,"integrity":"sha512-lGD000YwoNcyPV1Ax2RP8YIovFhXByl9kB+ZlhdhBCL0cz2WVKlU9LCBH4UgeXiMiIryyIwzbVGHesAyNayDrQ==","signatures":[{"sig":"MEQCIHpI+pA3hl4iClHYdCNjo7YRuFNUuECT1AkVd/fyW+AJAiBC4buBNHRZpzSGnHF6yqWNUifKJv8/yyVBKaz1C+crqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70993},"main":"server.mjs","type":"module","engines":{"node":">=20"},"gitHead":"bbcc9860a700a3a37e9b66bf4bccb87a6b389f78","scripts":{"dev":"node server.mjs","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node server.mjs","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.1.4","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.7_1775924416571_0.07750371929757582","host":"s3://npm-registry-packages-npm-production"}},"1.3.8":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.8","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","_id":"@aiondadotcom/mcp-ssh@1.3.8","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"bin":{"mcp-ssh":"bin/mcp-ssh.js"},"dist":{"shasum":"1eef399df5d3dd947ac4a1e9d823e33d5fda88f8","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.8.tgz","fileCount":11,"integrity":"sha512-BJzyMuuqS8iX/B6ERdhWdn0lSTCmlnKnxJnG0074UEZEyfw79EMOQhlhOPW0TxE2uQvTqzGp4jWozPBkAkXKoQ==","signatures":[{"sig":"MEUCIFOasf33gSsDbQH5ju5Hifa5OwgIqWEXOydJjMb5D2TCAiEAp4Gv9/hbnlK0mxE9URr3Obuo+C/lyOqbvchVAh6vQF8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24191603},"main":"server.mjs","type":"module","engines":{"node":">=20"},"gitHead":"a5f9ca3ebcbdc8c5b751eced64fd8f972f8a2ec3","scripts":{"dev":"node bin/mcp-ssh.js","test":"vitest run --coverage","build":"echo \"Build skipped\"","start":"node bin/mcp-ssh.js","version":"git add -A","build:dxt":"./scripts/build-dxt.sh","test:watch":"vitest","postversion":"git push && git push --tags","prepublishOnly":"npm run test"},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"overrides":{"tmp":">=0.2.4"},"repository":{"url":"git+https://github.com/aiondadotcom/mcp-ssh.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^11.0.3","ssh-config":"^5.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tmp":">=0.2.4","vitest":"^4.1.4","ts-node":"^10.9.2","typescript":"^5.4.3","@types/node":"^20.11.26","@types/ssh2":"^1.15.0","@anthropic-ai/dxt":"^0.2.5","@vitest/coverage-v8":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/mcp-ssh_1.3.8_1776184193617_0.9883979818806061","host":"s3://npm-registry-packages-npm-production"}},"1.3.9":{"name":"@aiondadotcom/mcp-ssh","version":"1.3.9","description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","main":"dist/server.js","bin":{"mcp-ssh":"bin/mcp-ssh.js"},"type":"module","engines":{"node":">=20"},"scripts":{"start":"node bin/mcp-ssh.js","dev":"node bin/mcp-ssh.js","build":"tsc -p tsconfig.build.json","build:dxt":"./scripts/build-dxt.sh","test":"vitest run --coverage","test:watch":"vitest","prepublishOnly":"npm run build && npm test","version":"git add -A","postversion":"git push && git push --tags","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","prepare":"npm run build","lint":"eslint .","lint:fix":"eslint . --fix"},"keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"author":{"name":"aionda.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aiondadotcom/mcp-ssh.git"},"homepage":"https://github.com/aiondadotcom/mcp-ssh","bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","glob":"^11.0.3","ssh-config":"^5.0.0"},"devDependencies":{"@anthropic-ai/dxt":"^0.2.6","@eslint/js":"^10.0.1","@types/node":"^20.11.26","@vitest/coverage-v8":"^4.1.10","eslint":"^10.8.1","tmp":">=0.2.6","typescript":"^5.4.3","typescript-eslint":"^8.66.0","vitest":"^4.1.10"},"overrides":{"tmp":">=0.2.6","brace-expansion":">=5.0.9","fast-uri":">=3.1.5","ip-address":">=10.5.0","hono":">=4.13.1","@hono/node-server":">=2.0.5","body-parser":">=2.3.0","qs":">=6.15.2","express-rate-limit":">=8.5.1"},"_id":"@aiondadotcom/mcp-ssh@1.3.9","gitHead":"358bec947872f20d2c400d790fc16a08a4836179","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-1X0QnauMGqyv+oV0wUokVD2PnyZy7o3EekuHYRGuFRl2XFuwv3X3u9/cRwe9Wtnj9ULf9FoRAO17+XwPqnReSg==","shasum":"6c1431b9516bcfc25e4a469bbc4eb97c020a8b06","tarball":"https://registry.npmjs.org/@aiondadotcom/mcp-ssh/-/mcp-ssh-1.3.9.tgz","fileCount":23,"unpackedSize":137886,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQClLMJYxPiOTLilTvymejRQarJZ5DyZHAJnUYiDmAi0NgIgJy19bA+Yxy0dEbFJoW5DBBy8OwP0c7jYv21j7fFA8/Q="}]},"_npmUser":{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"},"directories":{},"maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-ssh_1.3.9_1786370927486_0.9833278286045657"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-06T09:47:54.755Z","modified":"2026-08-10T14:08:48.153Z","1.0.0":"2025-06-06T09:47:55.030Z","1.0.2":"2025-06-06T10:02:54.285Z","1.0.3":"2025-06-06T10:06:02.967Z","1.0.4":"2025-08-17T09:13:21.029Z","1.1.0":"2025-08-17T09:36:12.298Z","1.2.0":"2026-02-25T19:45:27.493Z","1.3.0":"2026-03-08T10:19:44.779Z","1.3.1":"2026-03-08T10:20:02.637Z","1.3.2":"2026-03-08T10:22:57.370Z","1.3.3":"2026-03-09T17:25:41.021Z","1.3.4":"2026-03-11T11:55:10.158Z","1.3.5":"2026-04-11T14:37:15.593Z","1.3.6":"2026-04-11T14:48:35.856Z","1.3.7":"2026-04-11T16:20:16.694Z","1.3.8":"2026-04-14T16:29:54.339Z","1.3.9":"2026-08-10T14:08:47.652Z"},"bugs":{"url":"https://github.com/aiondadotcom/mcp-ssh/issues"},"author":{"name":"aionda.com"},"license":"MIT","homepage":"https://github.com/aiondadotcom/mcp-ssh","keywords":["mcp","ssh","agent","model-context-protocol","claude","ai","remote","server"],"repository":{"type":"git","url":"git+https://github.com/aiondadotcom/mcp-ssh.git"},"description":"MCP Agent for managing SSH hosts - A Model Context Protocol server for SSH operations","maintainers":[{"name":"stephanferraro","email":"stephan.ferraro@aionda.com"}],"readme":"# MCP SSH Agent\n\n[![Tests](https://github.com/AiondaDotCom/mcp-ssh/actions/workflows/test.yml/badge.svg)](https://github.com/AiondaDotCom/mcp-ssh/actions/workflows/test.yml)\n\nA Model Context Protocol (MCP) server for managing and controlling SSH connections. This server integrates seamlessly with Claude Desktop and other MCP-compatible clients to provide AI-powered SSH operations.\n\n## Overview\n\nThis MCP server provides SSH operations through a clean, standardized interface that can be used by MCP-compatible language models like Claude Desktop. The server automatically discovers SSH hosts from your `~/.ssh/config` and `~/.ssh/known_hosts` files and executes commands using native SSH tools for maximum reliability.\n\n## Quick Start\n\n### Desktop Extension Installation (Recommended)\n\nThe easiest way to install MCP SSH Agent is through the Desktop Extension (.dxt) format:\n\n1. Download the latest `mcp-ssh-*.dxt` file from the [GitHub releases page](https://github.com/aiondadotcom/mcp-ssh/releases)\n2. Double-click the `.dxt` file to install it in Claude Desktop\n3. The SSH tools will be automatically available in your conversations with Claude\n\n### Alternative Installation Methods\n\n#### Installation via npx\n\n```bash\nnpx @aiondadotcom/mcp-ssh\n```\n\n#### Manual Claude Desktop Configuration\n\nTo use this MCP server with Claude Desktop using manual configuration, add the following to your MCP settings file:\n\n**On macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n**On Windows**: `%APPDATA%/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-ssh\": {\n      \"command\": \"npx\",\n      \"args\": [\"@aiondadotcom/mcp-ssh\"]\n    }\n  }\n}\n```\n\nAfter adding this configuration, restart Claude Desktop. The SSH tools will be available for use in your conversations with Claude.\n\n#### Global Installation\n```bash\nnpm install -g @aiondadotcom/mcp-ssh\n```\n\n#### Local Development\n```bash\ngit clone https://github.com/aiondadotcom/mcp-ssh.git\ncd mcp-ssh\nnpm install   # also compiles src/ -> dist/\nnpm start\n```\nThe server is TypeScript under `src/`; `npm install` builds it. After editing sources run\n`npm run build` (or `npm test`, which reads `src/` directly).\n\n## Example Usage\n\n![MCP SSH Agent Example](doc/example.png)\n\nThe screenshot above shows the MCP SSH Agent in action, demonstrating how it integrates with MCP-compatible clients to provide seamless SSH operations.\n\n### Integration with Claude\n\n![Claude MCP Integration](doc/Claude.png)\n\nThis screenshot demonstrates the MCP SSH Agent integrated with Claude, showing how the AI assistant can directly manage SSH connections and execute remote commands through the MCP protocol.\n\n## Key Features\n\n- **Reliable SSH**: Uses native `ssh`/`scp` commands instead of JavaScript SSH libraries\n- **Automatic Discovery**: Finds hosts from SSH config and known_hosts files\n- **Full SSH Support**: Works with SSH agents, keys, and all authentication methods\n- **Password Authentication**: Supports password-based SSH login and key passphrases via `@password` annotation — passwords never leave your machine\n- **File Operations**: Upload and download files using `scp`\n- **Batch Commands**: Execute multiple commands in sequence\n- **Error Handling**: Comprehensive error reporting with timeouts\n\n## Functions\n\nThe agent provides the following MCP tools:\n\n1. **listKnownHosts()** - Lists all known SSH hosts, prioritizing entries from ~/.ssh/config first, then additional hosts from ~/.ssh/known_hosts\n2. **runRemoteCommand(hostAlias, command)** - Executes a command on a remote host using `ssh`\n3. **getHostInfo(hostAlias)** - Returns detailed configuration for a specific host\n4. **checkConnectivity(hostAlias)** - Tests SSH connectivity to a host\n5. **uploadFile(hostAlias, localPath, remotePath)** - Uploads a file to the remote host using `scp`\n6. **downloadFile(hostAlias, remotePath, localPath)** - Downloads a file from the remote host using `scp`\n7. **runCommandBatch(hostAlias, commands)** - Executes multiple commands sequentially\n\n## Configuration Examples\n\n### Claude Desktop Integration\n\nHere's how your Claude Desktop configuration should look:\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-ssh\": {\n      \"command\": \"npx\",\n      \"args\": [\"@aiondadotcom/mcp-ssh\"]\n    }\n  }\n}\n```\n\n### Manual Server Configuration\n\nIf you prefer to run the server manually or integrate it with other MCP clients:\n\n```json\n{\n  \"servers\": {\n    \"mcp-ssh\": {\n      \"command\": \"npx\",\n      \"args\": [\"@aiondadotcom/mcp-ssh\"]\n    }\n  }\n}\n```\n\n## Requirements\n\n- Node.js 20 or higher\n- SSH client installed (`ssh` and `scp` commands available)\n- SSH configuration files (`~/.ssh/config` and `~/.ssh/known_hosts`)\n\n## Usage with Claude Desktop\n\nOnce configured, you can ask Claude to help you with SSH operations like:\n\n- \"List all my SSH hosts\"\n- \"Check connectivity to my production server\" \n- \"Run a command on my web server\"\n- \"Upload this file to my remote server\"\n- \"Download logs from my application server\"\n\nClaude will use the MCP SSH tools to perform these operations safely and efficiently.\n\n## Usage\n\nThe agent runs as a Model Context Protocol server over STDIO. When installed via npm, you can use it directly:\n\n```bash\n# Run via npx (recommended)\nnpx @aiondadotcom/mcp-ssh\n\n# Or if installed globally\nmcp-ssh\n\n# For development - run with debug output\nnpm start\n```\n\nThe server communicates via clean JSON over STDIO, making it perfect for MCP clients like Claude Desktop.\n\n## Advanced Configuration\n\n### Environment Variables\n\n- `MCP_SILENT=true` - Disable debug output (automatically set when used as MCP server)\n\n### SSH Configuration\n\nThe agent reads from standard SSH configuration files:\n- `~/.ssh/config` - SSH client configuration (supports Include directives)\n- `~/.ssh/known_hosts` - Known host keys\n\nMake sure your SSH keys are properly configured and accessible via SSH agent or key files.\n\n#### Password Authentication\n\nFor hosts that require password-based authentication (common with network infrastructure like switches and routers), you can store the password directly in your `~/.ssh/config` using a special comment annotation:\n\n```ssh-config\nHost myrouter\n    HostName 192.168.1.1\n    User admin\n    # @password:yourSecretPassword\n\nHost myserver\n    HostName 10.0.0.5\n    User deploy\n    IdentityFile ~/.ssh/id_rsa\n    # @password:myKeyPassphrase\n```\n\n**How it works:**\n- The `# @password:` annotation is read **locally** by the MCP server — the password **never** reaches the AI model or any cloud provider\n- Works for both login passwords and SSH key passphrases\n- The password is split at the first `:`, so passwords containing `:` are supported\n- When listing hosts, only `passwordAuth: true` is shown — the actual password is never exposed\n\n**Security requirements:**\n- Your SSH config file **must** have `600` permissions when using `@password` annotations\n- The MCP server will refuse to start if the file permissions are too open\n- Fix with: `chmod 600 ~/.ssh/config`\n\n#### Include Directive Support\n\nThe MCP SSH Agent fully supports SSH `Include` directives to organize your configuration across multiple files. However, there's an important SSH bug to be aware of:\n\n**⚠️ SSH Include Directive Bug Warning**\n\nSSH has a configuration parsing bug where `Include` statements **must be placed at the beginning** of your `~/.ssh/config` file to work correctly. If placed at the end, SSH will read them but won't properly apply the included configurations.\n\n**✅ Correct placement (at the beginning):**\n```ssh-config\n# ~/.ssh/config\nInclude ~/.ssh/config.d/*\nInclude ~/.ssh/work-hosts\n\n# Global settings\nServerAliveInterval 55\n\n# Host definitions\nHost myserver\n    HostName example.com\n```\n\n**❌ Incorrect placement (at the end) - won't work:**\n```ssh-config\n# ~/.ssh/config\n# Global settings\nServerAliveInterval 55\n\n# Host definitions\nHost myserver\n    HostName example.com\n\n# These Include statements won't work properly due to SSH bug:\nInclude ~/.ssh/config.d/*\nInclude ~/.ssh/work-hosts\n```\n\nThe MCP SSH Agent correctly processes `Include` directives regardless of their placement in the file, so you'll get full host discovery even if SSH itself has issues with your configuration.\n\n#### Example ~/.ssh/config\n\nHere's an example SSH configuration file that demonstrates various connection scenarios including Include directives and `@password` annotations for password-based authentication:\n\n```ssh-config\n# Include directives must be at the beginning due to SSH bug\nInclude ~/.ssh/config.d/*\nInclude ~/.ssh/work-servers\n\n# Global settings - keep connections alive\nServerAliveInterval 55\n\n# Production server with jump host\nHost prod\n    Hostname 203.0.113.10\n    Port 22022\n    User deploy\n    IdentityFile ~/.ssh/id_prod_rsa\n\n# Root access to production (separate entry)\nHost root@prod\n    Hostname 203.0.113.10\n    Port 22022\n    User root\n    IdentityFile ~/.ssh/id_prod_rsa\n\n# Router with password authentication (no SSH key)\nHost router\n    Hostname 192.168.1.1\n    User admin\n    # @password:cQbG0q@019TAoehZel7V\n\n# Archive server accessed through production jump host\nHost archive\n    Hostname 2001:db8:1f0:cafe::1\n    Port 22077\n    User archive-user\n    ProxyJump prod\n\n# Web servers with specific configurations\nHost web1.example.com\n    Hostname 198.51.100.15\n    Port 22022\n    User root\n    IdentityFile ~/.ssh/id_ed25519\n\nHost web2.example.com\n    Hostname 198.51.100.25\n    Port 22022\n    User root\n    IdentityFile ~/.ssh/id_ed25519\n\n# Database server with custom key and passphrase-protected key\nHost database\n    Hostname 203.0.113.50\n    Port 22077\n    User dbadmin\n    IdentityFile ~/.ssh/id_database_rsa\n    IdentitiesOnly yes\n    # @password:U1Jqn=NoKdELYn&h1jVT\n\n# Mail servers (password auth, no SSH key)\nHost mail1\n    Hostname 198.51.100.88\n    Port 22078\n    User mailuser\n    # @password:7iBiV8lyoq*zANv46ALD\n\nHost root@mail1\n    Hostname 198.51.100.88\n    Port 22078\n    User root\n    # @password:MRDHI2h!zhhN=ZJIxWzH\n\n# Monitoring server\nHost monitor\n    Hostname 203.0.113.100\n    Port 22077\n    User monitoring\n    IdentityFile ~/.ssh/id_monitor_ed25519\n    IdentitiesOnly yes\n\n# Load balancers\nHost lb-a\n    Hostname 198.51.100.200\n    Port 22077\n    User root\n\nHost lb-b\n    Hostname 198.51.100.201\n    Port 22077\n    User root\n\n# One host reachable under several aliases - both names work\nHost docker-lxc hlab\n    Hostname 10.9.0.105\n    User root\n```\n\nThis configuration demonstrates:\n- **Global settings**: `ServerAliveInterval` to keep connections alive\n- **Custom ports**: Non-standard SSH ports for security\n- **Multiple users**: Different user accounts for the same host (e.g., `prod` and `root@prod`)\n- **Multiple aliases**: One host declared under several names (e.g., `docker-lxc hlab`) — reachable under each\n- **Jump hosts**: Using `ProxyJump` to access servers through bastion hosts\n- **IPv6 addresses**: Modern networking support\n- **Identity files**: Specific SSH keys for different servers\n- **Security options**: `IdentitiesOnly yes` to use only specified keys\n- **Password authentication**: `# @password:` annotations for devices without SSH key support (e.g., routers, switches) or for passphrase-protected keys\n\n#### Which Hosts Are Discovered\n\n`listKnownHosts()` reports every connectable host it finds in `~/.ssh/config` (including\neverything pulled in through `Include`), followed by any additional hostnames from\n`~/.ssh/known_hosts`. Three rules decide what counts as connectable:\n\n**Multi-alias blocks work under every alias.** `Host` takes a list of patterns, not a single\nname, so a block can declare several aliases at once:\n\n```ssh-config\nHost docker-lxc hlab\n    Hostname 10.9.0.105\n    User root\n```\n\nBoth `docker-lxc` and `hlab` reach this host. The response carries the full list in an\n`aliases` field, while `alias` holds the first one.\n\n**Defaults blocks are skipped.** A block whose patterns are only wildcards and negations\nsets defaults for other hosts — it is not something you can connect to, so it is left out\nof the host list:\n\n```ssh-config\nHost *\n    ServerAliveInterval 55\n\nHost * !bastion          # \"everything except bastion\" — a defaults block, not a host\n    User deploy\n    IdentityFile ~/.ssh/id_deploy\n```\n\n(OpenSSH lets you negate a pattern with `!`. A negated match vetoes the whole line, which\nis why negation only makes sense as an exception to a wildcard.)\n\n**Hosts without a `Hostname` are skipped**, since there is nothing to connect to.\n\nPlain top-level directives such as a bare `ServerAliveInterval 55` are configuration for\n`ssh` itself and are ignored by host discovery — `ssh` still applies them, because every\noperation runs through your system's `ssh` binary.\n\n#### How MCP SSH Agent Uses Your Configuration\n\nThe MCP SSH agent automatically discovers and uses your SSH configuration:\n\n1. **Host Discovery**: Every connectable host from `~/.ssh/config` is available — see the rules above\n2. **Native SSH**: Uses your system's `ssh` command, so all config options work\n3. **Authentication**: Respects your SSH agent, key files, and authentication settings\n4. **Jump Hosts**: Supports complex proxy chains and bastion host setups\n5. **Port Forwarding**: Can work with custom ports and connection options\n\n**Example Usage with Claude Desktop:**\n- \"List my SSH hosts\" → Shows all configured hosts including `prod`, `archive`, `web1.example.com`, etc.\n- \"Connect to archive server\" → Uses the ProxyJump configuration automatically\n- \"Run 'df -h' on web1.example.com\" → Connects with the correct user, port, and key\n- \"Upload file to database server\" → Uses the specific identity file and port configuration\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Command not found**: Ensure `ssh` and `scp` are installed and in your PATH\n2. **Permission denied**: Check SSH key permissions and SSH agent\n3. **Host not found**: Verify the host exists in `~/.ssh/config` or `~/.ssh/known_hosts`, and that its block has a `Hostname` — blocks without one, and pure defaults blocks such as `Host *`, are not connectable hosts. See [Which Hosts Are Discovered](#which-hosts-are-discovered)\n4. **Connection timeout**: Check network connectivity and firewall settings\n5. **Windows: every command fails with exit 255 and empty output**: Fixed after 1.3.8. Earlier versions inherit a stripped environment from the MCP host that omits `%ProgramData%`, which Win32-OpenSSH needs at startup. Upgrade, or add `\"ProgramData\": \"C:\\\\ProgramData\"` to the `env` block of your client configuration\n\n### Debug Mode\n\nRun with debug output to see detailed operation logs:\n\n```bash\n# Enable debug mode\nMCP_SILENT=false npx @aiondadotcom/mcp-ssh\n```\n\n## SSH Key Setup Guide\n\nFor the MCP SSH Agent to work properly, you need to set up SSH key authentication. Here's a complete guide:\n\n### 1. Creating SSH Keys\n\nGenerate a new SSH key pair (use Ed25519 for better security):\n\n```bash\n# Generate Ed25519 key (recommended)\nssh-keygen -t ed25519 -C \"your-email@example.com\"\n\n# Or generate RSA key (if Ed25519 is not supported)\nssh-keygen -t rsa -b 4096 -C \"your-email@example.com\"\n```\n\n**Important**: When prompted for a passphrase, **leave it empty** (press Enter). The MCP SSH Agent cannot handle password-protected keys as it runs non-interactively.\n\n```\nEnter passphrase (empty for no passphrase): [Press Enter]\nEnter same passphrase again: [Press Enter]\n```\n\nThis creates two files:\n- `~/.ssh/id_ed25519` (private key) - Keep this secret!\n- `~/.ssh/id_ed25519.pub` (public key) - This gets copied to servers\n\n### 2. Installing Public Key on Remote Servers\n\nCopy your public key to the remote server's authorized_keys file:\n\n```bash\n# Method 1: Using ssh-copy-id (easiest)\nssh-copy-id user@hostname\n\n# Method 2: Manual copy\ncat ~/.ssh/id_ed25519.pub | ssh user@hostname \"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys\"\n\n# Method 3: Copy and paste manually\ncat ~/.ssh/id_ed25519.pub\n# Then SSH to the server and paste into ~/.ssh/authorized_keys\n```\n\n### 3. Server-Side SSH Configuration\n\nTo enable secure key-only authentication on your SSH servers, edit `/etc/ssh/sshd_config`:\n\n```bash\n# Edit SSH daemon configuration\nsudo nano /etc/ssh/sshd_config\n```\n\nAdd or modify these settings:\n\n```ssh-config\n# Enable public key authentication\nPubkeyAuthentication yes\nAuthorizedKeysFile .ssh/authorized_keys\n\n# Disable password authentication (security best practice)\nPasswordAuthentication no\nChallengeResponseAuthentication no\nUsePAM no\n\n# Root login options (choose one):\n# Option 1: Allow root login with SSH keys only (recommended for admin access)\nPermitRootLogin prohibit-password\n\n# Option 2: Completely disable root login (most secure, but less flexible)\n# PermitRootLogin no\n\n# Optional: Restrict SSH to specific users\nAllowUsers deploy root admin\n\n# Optional: Change default port for security\nPort 22022\n```\n\nAfter editing, restart the SSH service:\n\n```bash\n# On Ubuntu/Debian\nsudo systemctl restart ssh\n\n# On CentOS/RHEL/Fedora\nsudo systemctl restart sshd\n\n# On macOS\nsudo launchctl unload /System/Library/LaunchDaemons/ssh.plist\nsudo launchctl load /System/Library/LaunchDaemons/ssh.plist\n```\n\n### 4. Setting Correct Permissions\n\nSSH is very strict about file permissions. Set them correctly:\n\n**On your local machine:**\n```bash\nchmod 700 ~/.ssh\nchmod 600 ~/.ssh/id_ed25519\nchmod 644 ~/.ssh/id_ed25519.pub\nchmod 644 ~/.ssh/config\nchmod 644 ~/.ssh/known_hosts\n```\n\n**On the remote server:**\n```bash\nchmod 700 ~/.ssh\nchmod 600 ~/.ssh/authorized_keys\n```\n\n### 5. Testing SSH Key Authentication\n\nTest your connection before using with MCP SSH Agent:\n\n```bash\n# Test connection\nssh -i ~/.ssh/id_ed25519 user@hostname\n\n# Test with verbose output for debugging\nssh -v -i ~/.ssh/id_ed25519 user@hostname\n\n# Test specific configuration\nssh -F ~/.ssh/config hostname\n```\n\n### 6. Multiple Keys for Different Servers\n\nYou can create different keys for different servers:\n\n```bash\n# Create specific keys\nssh-keygen -t ed25519 -f ~/.ssh/id_production -C \"production-server\"\nssh-keygen -t ed25519 -f ~/.ssh/id_staging -C \"staging-server\"\n```\n\nThen configure them in `~/.ssh/config`:\n\n```ssh-config\nHost production\n    Hostname prod.example.com\n    User deploy\n    IdentityFile ~/.ssh/id_production\n    IdentitiesOnly yes\n\nHost staging\n    Hostname staging.example.com\n    User deploy\n    IdentityFile ~/.ssh/id_staging\n    IdentitiesOnly yes\n```\n\n## Threat Model and Trust Boundaries\n\nMCP SSH Agent gives an LLM the ability to drive `ssh` and `scp` on your behalf. Before using it, it is important to understand what an attacker who controls the LLM's instructions (for example via **prompt injection** through web pages, e‑mails, repository files, or another MCP server's output) can do:\n\n- **`runRemoteCommand` is full remote code execution on every host you have configured.** If your `~/.ssh/config` contains an entry for `production`, the LLM can run arbitrary commands as that user on that host. This is the tool's purpose, not a bug — but it means you should only configure hosts that you are willing to let the LLM touch, and prefer least-privilege accounts.\n- **`uploadFile` and `downloadFile` give the LLM access to the local filesystem** with the privileges of the user running the MCP server. The LLM can read any file the process can read (including `~/.ssh/id_*`, browser data, source trees, `.env` files) and write to any path it can write to (including `~/.ssh/authorized_keys`). The path arguments are not sandboxed because the tool's contract is \"transfer arbitrary files\".\n- **The MCP server runs locally over STDIO, but the LLM is not trusted.** STDIO only describes the transport — the *content* of tool arguments is chosen by the model, which can be steered by any untrusted text it ingests during the conversation.\n- **`# @password:` annotations are kept out of the LLM's context**, but they live in `~/.ssh/config` on disk. Anything that gives an attacker arbitrary local file read (see above) also exposes those passwords. The annotation only protects against the LLM seeing the password through the MCP protocol, not against local file disclosure.\n\n### Recommendations\n\n- Run MCP SSH Agent under a **dedicated, unprivileged OS user** whose home directory only contains the SSH config and keys you actually want the LLM to be able to use.\n- Or run it inside a **container / sandbox** with a minimal `~/.ssh` and no access to other secrets on your machine.\n- Keep `~/.ssh/config` to the smallest set of hosts you trust the LLM with. Use restricted shell users on the remote side where possible.\n- Treat any session where the LLM ingests untrusted content (web pages, e‑mails, third‑party repos, other MCP servers' output) as potentially hostile to MCP SSH operations.\n- Report suspected vulnerabilities via GitHub's private vulnerability reporting on this repository.\n\n## Security Best Practices\n\n### SSH Key Security\n- **Never use password-protected keys** with MCP SSH Agent\n- **Never share private keys** - they should stay on your machine only\n- **Use Ed25519 keys** when possible (more secure than RSA)\n- **Create separate keys** for different environments/purposes\n- **Regularly rotate keys** (every 6-12 months)\n\n### Server Security\n- **Disable password authentication** completely\n- **Use non-standard SSH ports** to reduce automated attacks\n- **Limit SSH access** to specific users with `AllowUsers`\n- **Choose appropriate root login policy**:\n  - `PermitRootLogin prohibit-password` - Allows root access with SSH keys only (recommended for admin tasks)\n  - `PermitRootLogin no` - Completely disables root login (most secure, but requires sudo access)\n- **Enable SSH key-only authentication** for all accounts\n- **Consider using jump hosts** for additional security layers\n\n### Network Security\n- **Use VPN or bastion hosts** for production servers\n- **Implement fail2ban** to block brute force attempts\n- **Monitor SSH logs** regularly\n- **Use SSH key forwarding carefully** (disable when not needed)\n\n## Building Desktop Extensions\n\nFor developers who want to build DXT packages locally:\n\n### Prerequisites\n\n- Node.js 20 or higher\n- npm\n\n### Building DXT Package\n\n```bash\n# Install dependencies\nnpm install\n\n# Build the DXT package\nnpm run build:dxt\n```\n\nThis creates a `.dxt` file in the `build/` directory that can be installed in Claude Desktop.\n\n### Publishing DXT Releases\n\nTo publish a new DXT release:\n\n```bash\n# Build the DXT package\nnpm run build:dxt\n\n# Create a GitHub release with the DXT file\ngh release create v1.0.3 build/mcp-ssh-1.0.3.dxt --title \"Release v1.0.3\" --notes \"MCP SSH Agent v1.0.3\"\n```\n\nThe DXT file will be available as a release asset for users to download and install.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n```bash\nnpm install        # also compiles src/ -> dist/ via the prepare script\nnpm run build      # tsc\nnpm run typecheck  # tsc --noEmit, strict for src/ and relaxed for tests\nnpm run lint       # eslint with type-aware rules\nnpm test           # vitest with coverage\nnpm run test:watch # watch mode\n```\n\nThe server is written in TypeScript under `src/` and compiled to `dist/`, which is what\n`bin/mcp-ssh.js` loads and what ships to npm. `dist/` is not in git — a fresh checkout gets\nit from `npm install`.\n\nThree things to know before opening a PR:\n\n- **Coverage is a build gate.** `vitest.config.mjs` pins statements, branches, functions and\n  lines of `src/` at 100%, so a change that adds an untested line fails CI. If a branch\n  is genuinely unreachable, removing it is usually better than working around the threshold.\n- **Lint rules are calibrated, not stock.** Where a rule is relaxed, the reason is in a comment\n  next to it. `prefer-nullish-coalescing` in particular exempts strings and numbers on purpose:\n  `||` and `??` are *not* interchangeable for environment variables (a stripped launcher env\n  reports an empty string, see issue #10) or for `timeout || DEFAULT`.\n- **CI runs on Linux and Windows** across Node 20, 22 and 24. Platform-specific code paths are\n  tested from either OS by re-importing the module with `process.platform` faked — see\n  `loadServerAs()` in `src/test-helpers.ts` — rather than by skipping tests on one platform.\n\n## License\n\nMIT License - see LICENSE file for details.\n\n## Project Structure\n\n```\nmcp-ssh/\n├── src/                       # TypeScript sources\n│   ├── server.ts              # Entry point: MCP server wiring and main()\n│   ├── tools.ts               # Tool definitions and dispatch\n│   ├── ssh-client.ts          # All ssh/scp operations\n│   ├── ssh-config-parser.ts   # Host discovery from config and known_hosts\n│   ├── config-values.ts       # ssh-config value normalization\n│   ├── platform.ts            # Platform detection, binary resolution, logging\n│   ├── types.ts               # Shared types\n│   └── server.test.ts         # Test suite (vitest)\n├── dist/                      # Compiled output (generated, not in git)\n├── bin/\n│   └── mcp-ssh.js             # Executable entry point (loads dist/server.js)\n├── tsconfig.json              # Strict compiler options for src/\n├── tsconfig.build.json        # Build config (excludes tests)\n├── tsconfig.test.json         # Relaxed options for test files\n├── eslint.config.mjs          # typescript-eslint, type-aware rules\n├── vitest.config.mjs          # Test and coverage configuration\n├── manifest.json              # DXT package manifest\n├── package.json               # Dependencies and scripts\n├── README.md                  # Documentation\n├── LICENSE                    # MIT License\n├── CHANGELOG.md               # Release history\n├── PUBLISHING.md              # Publishing instructions\n├── .gitattributes             # Forces LF checkout on every platform\n├── start.sh                   # Development startup script\n├── start-silent.sh            # Silent startup script\n├── scripts/\n│   └── build-dxt.sh           # DXT package build script\n└── doc/                       # Documentation assets\n    ├── example.png            # Usage example screenshot\n    └── Claude.png             # Claude Desktop integration example\n```\n\n## About\n\nThis project is maintained by [aionda.com](https://aionda.com) and provides a reliable bridge between AI assistants and SSH infrastructure through the Model Context Protocol.\n","readmeFilename":"README.md"}