ssh-mcp-server
ssh-mcp-server
基于 SSH 的 MCP 服务器:代理在远程机器上执行命令,而密钥、密码和 sudo 密码始终保留在我们这一侧。
基于 classfang/ssh-mcp-server 的 fork,采用 ISC 许可证。
俄语 | English
这是什么
ssh-mcp-server 是 MCP 客户端(Claude Desktop、Cursor、Cline)与 SSH 之间的桥梁。代理调用工具,服务器连接到机器并返回输出。模型既看不到私钥,也看不到密码,更看不到 sudo 密码:这些都从本地配置和进程的环境变量中读取。
一个服务器可以服务任意数量的主机。主机通过 ~/.ssh/config 中的别名动态选择,因此无需把每台机器都写进 MCP 客户端的配置。
Related MCP server: ssh-mcp-server
本 fork 新增的内容
功能 | 用途 |
动态读取 | 一个 MCP 覆盖整个机器集群。别名传给 |
ProxyJump | 位于堡垒机之后的主机可通过别名访问, |
从环境变量获取 sudo | 代理请求 |
禁止核心 | 某些操作永远不会执行:无论在 sudo 下、任何配置下,还是通过 SFTP |
Guards 配置 | 现成的 |
隧道 | SOCKS5(对应 |
主机密钥校验 | 默认校验 |
现代加密算法 | Ed25519 优先,不使用 SHA-1、CBC 和 DSA |
审计日志 | 每次调用都写入 JSONL,支持日志轮转和 gzip 归档 |
无文件上传 |
|
工具
工具 | 功能 |
| 执行命令,支持 |
| 从服务器下载文件 |
| 显示已配置的连接、它们的当前状态,以及已启用的 guards 配置文件 |
| 显示 SSH 配置中可用作 |
| 通过连接建立 SOCKS / 端口转发 |
| 关闭隧道 |
| 显示打开的隧道和连接计数 |
list-ssh-hosts 仅在传入 --ssh-config-hosts 标志时出现;隧道工具可通过 --disable-tunnels 标志移除。upload 工具不在列表中:仅在传入 --enable-upload 标志时发布。
无需多余命令即可获取主机信息
连接时,服务器会一次性采集机器状态:主机名、地址、操作系统、内核、运行时长、磁盘、内存、进程数。所有探测都合并为带标记的单独命令,因此这是一次 SSH 往返,而不是六次。
服务器缓存结果,并在 list-servers 中返回:
[connected] prod-1 | deploy@10.0.0.5:22 | hostname=prod-1 | os=Linux | updated=2026-08-19T18:14:23Z
Raw JSON:
[{"name":"prod-1","connected":true,"guards":"guards=safe ruleset=2026.08.19 ...",
"status":{"reachable":true,"osVersion":"Ubuntu 24.04.1 LTS","kernelVersion":"6.8.0-51-generic",
"uptime":"12 days","diskSpace":{"free":"9.8G","total":"229.6G"},
"memory":{"free":"5.6G","total":"15.5G"},"processes":{"running":214}}}]也就是说,无需请求 uname -a、df -h、free -h 和 uptime 的返回,因为答案已经得到。代理只需调用一次 list-servers 即可从中读取状态。
探测项会一个接一个地通过各 guards 规则。当使用白名单时,状态中只会保留允许的字段。状态不完整并不意味着主机不可达。
一条命令成功但没有输出时,会返回 [exit code] 0,而不是空字符串。模型会把空回复理解为未知结果,并尝试用 echo $? 重新检查,这就增加了额外的服务器访问和额外的 token。
快速开始:一个服务器治理整个机器集群
MCP 客户端配置:
{
"mcpServers": {
"ssh": {
"command": "npx",
"args": [
"-y",
"@perhamm/ssh-mcp-server",
"--ssh-config-hosts",
"--guards-profile", "safe"
],
"env": {
"SSH_MCP_SUDO_PASSWORD": "..."
}
}
}
}代理的工作方式如下:
调用
list-ssh-hosts,找到所需的别名,例如r-ulybka-prod-master。对于大型配置,列表会被截断,因此代理会传递filter,也就是子字符串或r-ulybka-*这样的模式。使用
connectionName: "r-ulybka-prod-master"调用execute-command。服务器从
~/.ssh/config读取别名,并从中获取HostName、User、Port、IdentityFile和ProxyJump,建立连接并执行命令。
密钥不会离开当前机器:服务器自行读取文件,对话中只会出现 SSH 配置中的路径。如果没有指定 IdentityFile,则使用 SSH_AUTH_SOCK 中的 ssh-agent。缺少 HostName 的别名会像 ssh 本身那样按自身名称连接。
只有配置中通过单独 Host 块声明的别名才可访问。Host * 块提供默认值,但不会把任意名称变成可访问的主机。
可以通过以下方式缩小别名列表范围:
"args": [
"-y", "@perhamm/ssh-mcp-server",
"--ssh-config-hosts",
"--allowed-hosts", "r-ulybka-*,*-stage-*",
"--ssh-config-file", "/home/user/.ssh/config_work"
]模式支持 * 和 ?。如果别名不匹配任何模式,则不会建立连接,代理会收到 SSH_HOST_NOT_ALLOWED 错误。
安全模式与 Guards
Guards 是一套带版本管理的规则集,它在每条命令发送到服务器之前对其进行校验。Rules 位于 guards/default-guards.json 中,并与仓库一起更新。
Guards 配置
配置 | 行为 |
| The profile rules are disabled,只生效禁止核心。这是默认值 |
| 另外禁止破坏性命令;其余放行 |
| 只允许读取和诊断;继承 |
"args": ["-y", "@perhamm/ssh-mcp-server", "--ssh-config-hosts", "--guards-profile", "safe"]safe 规则在核心之外还会拦截:shutdown 和 reboot、重置防火墙、停止 sshd 和 kubelet、kubectl delete、helm uninstall、docker system prune、删除软件包、DROP DATABASE、curl | sh、git push --force、清理日志、卸载内核模块、交互式编辑器。完整的列表及其原因见 JSON。
readonly 另外要求命令的每一部分都命中白名单:ls、cat、grep、find、ps、ss、df、journalctl、systemctl status、kubectl get/describe/logs、docker ps/logs 等等。该配置文件中的 sudo 被整体禁止,包括 su、doas 和 pkexec。
禁止核心
部分操作永远不会执行:即使在 off 配置中、sudo 下、任何配置文件之外,还是绕过命令的 SFTP,也都不会执行。The list in the forbidden block.
类别 | 被禁止的内容 |
用户账户 |
|
sudo | 写 |
计划任务 |
|
systemd | 写入 |
SSH | 修改 |
解释器 |
|
批量删除 | 对一级目录或系统子目录执行 |
磁盘和机密 |
|
普通操作仍可通过:crontab -l、cat /etc/ssh/sshd_config、systemctl restart nginx、rm -rf /var/lib/myapp/cache/tmp。可解析的 bash -c "..." 也会按相同规则校验其内容。
核心限制也适用于文件工具。download 不会取走 /etc/shadow 或 ~/.ssh 中的内容,而 allowedRemotePaths 在这里也不能重新放行它们。本地一侧同样受保护:download 不会把文件写入我们自己的 ~/.ssh。
文件上传是完全被禁止的。除非传入 --enable-upload,否则 upload 工具不会发布;即使带该标志,readonly 配置也会拒绝上传。
如果服务器正好用于创建用户或修改 cron,就必须有意识地修改 fork 中的禁止核心:没有可禁用它返回命令行标志。
为什么用分号绕过不了
命令会按 ;、|、&&、||、&、换行符和 $(...) 替换拆分成多个片段,每个片段单独校验。Split时会考虑引号。因此,ls; rm -rf / 在任何配置中都不会通过,尽管整行以允许的 ls 开头。
外壳包装在执行时会被去除:sudo、env、timeout 5、nohup 以及 LC_ALL=C 这样的变量赋值,都不能把命令藏起来。bash -c "..." 中的脚本会单独解析,并应用相同的规则。命令长度上限为 5000 个字符。
Guards 防范的是代理的错误疏漏,而不是蓄意绕过。像 python -c 这种内部可包含任意命令的解释器,规则无法对其进行解析。对于那些不能绕过的地方,就需要限制 SSH 用户本身的权限。
更新规则
有三种方式可以让规则保持最新:
将上游合并到自己的 fork。规则文件在
version字段中进行版本管理,在list-servers和规则校验失败的文本中可见。保存自己的文件,并通过
--guards-file /etc/ssh-mcp/guards.json指定。其中的规则会合并到内置规则中,版本号表示形式为2026.08.19+local-1。通过计划任务更新文件:
node scripts/update-guards.js https://example.com/guards.json /etc/ssh-mcp/guards.json脚本会校验 JSON 并编译每个正则表达式,然后才替换文件。出现异常加载不会破坏正在使用的规则集。
此文件格式为:
{
"version": "local-1",
"profiles": {
"safe": {
"deny": [
{ "id": "no-ansible", "pattern": "^ansible-playbook\\b", "reason": "выкат идёт из CI" }
]
}
}
}scope: "command" 字段会让一条规则检查整条命令,而不是命令片段。curl、curl | sh 和 SQL 的规则就是这样工作的。在 forbidden 中可以额外添加自己的自定义规则,但无法移除内置规则:这些规则会被合并。
旧的 --whitelist 和 --blacklist 仍然有效,并且执行顺序在 guards 之前。
在对话中无需密码使用 sudo
sudo 密码存放在服务器进程的环境变量中。代理传递 sudo: true,但密码既不会出现在调用参数中,也不会出现在输出中。
{
"mcpServers": {
"ssh": {
"command": "npx",
"args": ["-y", "@perhamm/ssh-mcp-server", "--ssh-config-hosts", "--guards-profile", "safe"],
"env": {
"SSH_MCP_SUDO_PASSWORD": "..."
}
}
}
}工具调用:
{
"tool": "execute-command",
"params": {
"cmdString": "systemctl restart nginx",
"connectionName": "r-ulybka-prod-master",
"sudo": true
}
}命令以 sudo -S -k -p '' -u root -- /bin/sh -c '<命令>' 的形式发送到服务器,密码写入通道的标准输入。命令行中不包含密码,因此不会出现在 ps 或历史记录中。此类命令会禁用伪终端,否则 tty 会将输入回显到输出中。为保险起见,密码会从输出和错误文本中剔除。
变量名和目标用户可通过 --sudo-password-env 和 --sudo-user 标志修改。如果变量为空,调用会在连接前以 SUDO_PASSWORD_MISSING 失败。readonly 配置文件完全禁止 sudo。
在 shell 模式下,密码会作为单独一行附加在命令之后,因为 sudo 读取的是与 shell 相同的标准输入。-k 标志确保始终请求密码,且该行不会作为命令执行。对于 sudo,exec 模式更合适。
隧道
open-tunnel 启动本地监听器,并通过 SSH 连接转发流量。当无法直接访问集群服务但可以访问节点时,此功能非常有用。
SOCKS5 在端口 8777 上:
{
"tool": "open-tunnel",
"params": {
"type": "socks5",
"localPort": 8777,
"connectionName": "r-ulybka-prod-master"
}
}之后任何客户端都通过代理访问,域名在远端解析:
curl --socks5-hostname 127.0.0.1:8777 http://prometheus.monitoring.svc:9090/api/v1/query?query=up
kubectl --request-timeout=30s ... # через HTTPS_PROXY=socks5h://127.0.0.1:8777单端口转发,类似 ssh -L:
{
"tool": "open-tunnel",
"params": {
"type": "local",
"localPort": 15432,
"remoteHost": "pg-master.internal",
"remotePort": 5432
}
}如果未指定 localPort,系统会自动选择端口并在响应中返回。隧道一直存在,直到 close-tunnel、SSH 连接断开或服务器停止。
限制通过标志设置:
标志 | 默认值 | 作用 |
|
| 隧道监听的地址 |
| 无限制 | 允许占用的端口列表 |
| 8 | 同时保持的隧道数量 |
| 关闭 | 从列表中移除隧道工具 |
默认监听器在回环地址上启动。将地址扩展到回环之外会将代理暴露到您的网络中,因此请谨慎修改。
3. 主机密钥验证
每次连接时都会将服务器密钥与 known_hosts 进行比对,包括 ProxyJump 链中的中间主机。默认模式为 strict:主机不在 known_hosts 中则拒绝连接。
模式 | 行为 |
| 默认。仅连接到 |
| 首次连接时记录未知主机,密钥不匹配仍然拒绝 |
| 不进行验证,行为与上游一致 |
检查 ~/.ssh/known_hosts、~/.ssh/known_hosts2 和 /etc/ssh/ssh_known_hosts,对于带有 UserKnownHostsFile 的别名,则检查 SSH 配置中指定的文件。可通过 --known-hosts-file 标志指定自定义列表。支持哈希记录、模式、[host]:port 格式和 @revoked 标记。
拒绝时返回 SSH_HOST_KEY_REJECTED 代码和包含指纹的文本:
Host key of prod.example.com is not in known_hosts (~/.ssh/known_hosts): ssh-ed25519 SHA256:xxxx.
Verify that fingerprint, add the host to known_hosts, or start the server with --host-key-checking accept-new.密钥不匹配在任何模式下都绝不接受:服务器拒绝连接并提示主机可能被重新创建,或存在中间人攻击。
对于首次接触服务器群,建议使用 --host-key-checking accept-new 进行一次,然后恢复为 strict。
4. 审计日志
每次调用都会以 JSON 行格式记录:命令、连接、sudo 标志、守卫判定、持续时间、输出大小。输出内容不会进入日志,sudo 密码会被剔除。
{"time":"2026-08-19T08:12:44.101Z","pid":8123,"event":"command","result":"blocked","connection":"r-ulybka-prod-master","command":"useradd deploy","sudo":true,"code":"COMMAND_VALIDATION_FAILED","reason":"Blocked by the forbidden core ..."}
{"time":"2026-08-19T08:12:51.880Z","pid":8123,"event":"command","result":"ok","connection":"r-ulybka-prod-master","command":"systemctl status nginx","sudo":false,"durationMs":412,"bytes":1840}记录 connect、command、download、upload、tunnel-open、tunnel-close、host-key 事件。
默认文件位于 $XDG_STATE_HOME/ssh-mcp-server/audit.jsonl,通常为 ~/.local/state/ssh-mcp-server/audit.jsonl,权限为 0600。
标志 | 默认值 | 作用 |
| XDG 状态目录 | 日志路径, |
| 10485760 | 文件大小达到后轮转。 |
| 10 | 保留的 gzip 归档数量 |
内置轮转:达到限制后,当前文件重命名为 audit.jsonl.1.gz,旧归档依次移位,超出 --audit-keep 的删除。十个 10 MiB 的归档在未压缩时约为 100 兆字节,gzip 后明显更小。
如果日志已由 logrotate 管理,设置 --audit-max-size 0 并使用 copytruncate 模式配置轮转。
写入错误不会导致命令失败:服务器在 stderr 中记录一次,然后继续运行。
5. 连接方式
以下是从简单到复杂的场景。在 args 中,每个标志及其值都是数组中的两个独立元素:"--host", "192.168.1.1",而不是 "--host 192.168.1.1"。
5.1 用户名和密码
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@perhamm/ssh-mcp-server",
"--host", "192.168.1.1",
"--port", "22",
"--username", "root",
"--password", "pwd123456"
]
}
}
}5.2 私钥
"args": [
"-y", "@perhamm/ssh-mcp-server",
"--host", "192.168.1.1",
"--username", "root",
"--privateKey", "~/.ssh/id_rsa",
"--passphrase", "pwd123456"
]密钥密码可以不写入配置,而是放在 SSH_MCP_PASSPHRASE 环境变量中。
5.3 来自 ~/.ssh/config 的单个别名
"args": ["-y", "@perhamm/ssh-mcp-server", "--host", "myserver"]服务器从 Host myserver 块中读取 HostName、Port、User、IdentityFile 和 ProxyJump,包括 Include 指令和模板。命令行标志优先级更高:--port 2222 会覆盖配置中的端口。
5.4 堡垒主机和 ProxyJump
如果别名有 ProxyJump,链会自动建立:
Host r-ulybka-prod-master
HostName 10.20.30.40
User ops
ProxyJump bastion
IdentityFile ~/.ssh/prod_key每个后续跳点都通过前一个跳点的通道连接,就像 ssh -J 一样。链也可以手动指定:--proxy-jump "bastion,gateway:2222"。链深度限制为五个跳点。
5.5 代理
"args": [
"-y", "@perhamm/ssh-mcp-server",
"--host", "192.168.1.1",
"--username", "root",
"--password", "pwd123456",
"--proxy", "socks5://user:pwd@proxy-host:1080"
]支持 socks://、socks5://、http:// 和 https://。HTTP 和 HTTPS 使用 CONNECT 方法,支持 Basic 认证,默认端口分别为 80 和 443。SOCKS5 必须指定端口。旧标志 --socksProxy 仍然有效,但仅支持 SOCKS。--proxy 和 --proxy-jump 不能同时使用。
5.6 带交互式 shell 的跳板主机
transportMode 默认为 exec。如果登录后命令无法执行,或设备仅提供交互式会话,则切换到 shell:
"args": [
"-y", "@perhamm/ssh-mcp-server",
"--host", "bastion.example.com",
"--username", "ops",
"--password", "pwd123456",
"--transport-mode", "shell",
"--shell-ready-timeout", "15000"
]在 shell 模式下,命令通过单个持久会话顺序执行,upload 和 download 不可用:SFTP 已禁用。
5.7 双因素认证
--try-keyboard 标志启用键盘交互。密码和密钥自动提供,第二因素代码从 SSH_MCP_2FA_CODE 环境变量中读取。
5.8 同一服务器上的多个连接
除了 SSH 配置中的别名,旧方法仍然可用:包含连接描述的文件。
[
{
"name": "dev",
"host": "1.2.3.4",
"port": 22,
"username": "alice",
"privateKey": "~/.ssh/dev_key",
"guardProfile": "safe",
"commandTimeoutMs": 120000
},
{
"name": "prod",
"host": "5.6.7.8",
"port": 22,
"username": "bob",
"privateKey": "~/.ssh/prod_key",
"guardProfile": "readonly",
"allowedRemotePaths": ["/var/log", "/tmp"]
}
]"args": ["-y", "@perhamm/ssh-mcp-server", "--config-file", "/abs/path/ssh-config.json"]也支持对象格式,其中键是连接名称。通过 connectionName 参数选择连接,未指定时使用第一个。
6. 命令和路径限制
6.1 白名单和黑名单
"args": [
"-y", "@perhamm/ssh-mcp-server",
"--host", "192.168.1.1",
"--username", "root",
"--privateKey", "~/.ssh/id_rsa",
"--whitelist", "^ls( .*)?,^cat .*,^df.*",
"--blacklist", "^rm .*,^shutdown.*"
]模板是逗号分隔的正则表达式。命令首先检查白名单,然后检查黑名单,最后检查守卫配置文件,必须通过所有三项检查。
6.2 命令模板
--command-template 包装每条命令。<quotedCommand> 将命令作为转义参数插入,<command> 原样插入。模板在工作目录替换后应用。
su root -c <quotedCommand>
docker exec -i mycontainer sh -c <quotedCommand>6.3 文件操作路径
--allowed-local-paths 扩展了 upload 和 download 可访问的本地目录列表(默认仅当前目录)。--allowed-remote-paths 限制远程路径,使用逗号分隔的绝对 POSIX 路径。如果没有此标志,SFTP 可以访问主机的整个文件系统,服务器启动时会发出警告。
7. 超时和输出限制
参数 | 默认值 | 限制对象 |
工具调用中的 | 无 | 单条命令,覆盖连接设置 |
| 30000 |
|
| 30000 |
|
| 30000 | 连接建立和握手 |
| 300000 | SFTP 操作 |
| 10485760 | 单条命令捕获的输出 |
| 10000 | keepalive 间隔 |
超过输出限制时,命令被终止,工具返回 OUTPUT_LIMIT_EXCEEDED 以及已收集的部分。错误以 code、message 和 retriable 结构返回。
8. 命令行标志
--config-file <path> Файл с описанием соединений
--ssh-config-file <path> Путь к SSH-конфигу (по умолчанию ~/.ssh/config)
--ssh <config> Соединение как JSON или пары key=value
-h, --host <host> Хост или алиас из SSH-конфига
-p, --port <port> Порт
-u, --username <name> Пользователь
-w, --password <password> Пароль
-k, --privateKey <path> Путь к приватному ключу
-P, --passphrase <passphrase> Пароль от ключа
-a, --agent <path> Сокет ssh-agent
-W, --whitelist <patterns> Белый список команд, через запятую
-B, --blacklist <patterns> Чёрный список команд, через запятую
--proxy <url> Прокси SOCKS5, HTTP или HTTPS
-s, --socksProxy <url> Старый флаг только для SOCKS5
--allowed-local-paths <paths> Локальные каталоги для upload и download
--allowed-remote-paths <paths> Удалённые каталоги для SFTP
--transport-mode <mode> exec или shell (по умолчанию exec)
--shell-ready-timeout <ms> Таймаут готовности shell (по умолчанию 10000)
--command-template <template> Шаблон с <command> или <quotedCommand>
--pty Псевдотерминал для exec (по умолчанию включён)
--try-keyboard Keyboard-interactive для 2FA
--pre-connect Подключиться ко всем хостам при старте
--ssh-config-hosts Разрешить хосты из SSH-конфига на лету
--allowed-hosts <patterns> Шаблоны разрешённых алиасов, через запятую
--proxy-jump <chain> Цепочка ProxyJump, через запятую
--guards-profile <name> off, safe или readonly (по умолчанию off)
--guards-file <path> Свой набор правил поверх встроенного
--sudo-password-env <var> Переменная с паролем sudo
--sudo-user <user> Пользователь для sudo (по умолчанию root)
--host-key-checking <mode> strict, accept-new или off (по умолчанию strict)
--known-hosts-file <paths> Свои файлы known_hosts, через запятую
--host-key-algorithms <list> Алгоритмы хост-ключа, через запятую
--enable-upload Опубликовать инструмент upload (по умолчанию выключен)
--audit-log <path|off> Путь к аудит-логу (по умолчанию каталог состояния XDG)
--audit-max-size <bytes> Порог ротации, 0 отключает (по умолчанию 10485760)
--audit-keep <count> Сколько архивов держим (по умолчанию 10)
--disable-tunnels Убрать туннельные инструменты
--tunnel-bind-address <addr> Адрес для туннелей (по умолчанию 127.0.0.1)
--allowed-tunnel-ports <ports> Разрешённые порты туннелей, через запятую
--max-tunnels <count> Лимит одновременных туннелей (по умолчанию 8)
--version, -v Версия пакета
--help Справка9. 安全
生产环境启用
--guards-profile safe,readonly适用于事件分析。使用off时,仅保留禁止的核心:其他所有内容都会执行,服务器会在日志中记录警告。密钥、密钥密码和 sudo 密码从文件和环境变量中读取。在 MCP 客户端配置中存储密钥路径,而不是密钥本身。
隧道监听回环地址。SOCKS5 没有认证,因此将代理暴露在
0.0.0.0上会将内部网络暴露给任何能访问该端口的人,服务器启动时会发出警告。没有
--allowed-remote-paths,SFTP 可以读取和写入主机上的任何路径,包括~/.ssh/authorized_keys。主机密钥在
strict模式下与known_hosts验证。仅在实验室中才应通过--host-key-checking off禁用验证。没有调用频率限制。
10. 开发
npm install
npm run build
npm test测试使用 Node.js 内置运行器运行,位于 test/。
11. 上游和许可证
该项目源自 classfang/ssh-mcp-server(作者 junki.cn),ISC 许可证。上游版权保留在 LICENSE 中,其中还包含原始仓库的链接。
守卫集合部分基于 tufantunc/ssh-mcp(MIT)的想法。
NPM 包:@perhamm/ssh-mcp-server。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityFmaintenanceAn MCP server that allows AI models to execute system commands on local machines or remote hosts via SSH, supporting persistent sessions and environment variables.13228MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables remote SSH command execution and bidirectional file transfers through a standardized interface. It allows AI assistants to securely manage remote servers while keeping credentials isolated and applying command-level security controls.ISC
- AlicenseAqualityBmaintenanceMCP server for managing multiple SSH servers via AI assistants, offering tools for remote command execution, file operations, and system monitoring.11MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents SSH capabilities to execute commands, transfer files, and inspect remote systems through a preconfigured host list.43MIT
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/perhamm/ssh-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server