jms-clientBLOCK
JumpServer v4 bastion CLI and MCP server in Go: pooled connections, endpoint failover, SFTP transfers, interactive login
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
JumpServer v4 堡垒机的命令行客户端与 MCP 服务器。 单二进制,用 Go 编写,面向日常运维与 AI 辅助运维场景。
通过 JumpServer 的 REST API 与 KoKo 终端网关访问资产:列出资产、执行命令、交互式 shell、SFTP 传输;同时提供 stdio MCP 服务器,让 Claude Code、Codex、pi 等 AI 客户端直接操作堡垒机资产。
特性
- 单二进制 — 静态编译,Linux / macOS / Windows 交叉编译
- 双地址故障转移 — 内网/外网双地址自动探测选择,last-good 记忆加速冷启动
- 连接池 — MCP 场景下登录态与终端连接按
服务器/资产/账号/协议复用,空闲回收、损坏重建 - 凭据不落盘 — 密码与 TOTP secret 存 OS 凭据库(Windows Credential Manager / macOS Keychain / Linux Secret Service),配置文件只有元数据,可备份可同步
- MCP 服务器 — 8 个工具,供 AI 客户端列资产、执行命令、传输文件
- 本地审计流 — 结构化 JSONL 落盘,
jms tail实时观察,jms attach人工接入同一连接池
安装
预编译二进制(推荐,无需 Go 工具链):从 Releases 下载对应平台,解压后把 jms(Windows 为 jms.exe)放进 PATH:
每个压缩包同时带 checksums.txt 可供校验。
用 Go 安装(需 Go 1.25+):
go install github.com/MiFaZhan/jms-client/cmd/jms@latest
从源码构建:
git clone https://github.com/MiFaZhan/jms-client cd jms-client go build -o jms ./cmd/jms
MCP 客户端(Claude Desktop 等)
下载 Releases 里的 jms-client.mcpb 双击安装。这一个文件已包含全部 6 个平台(macOS/Linux/Windows × x86_64/arm64)的预编译二进制,启动时由内置 launcher 自动选择当前平台,无需按平台挑文件。
也可以手动配置,让 MCP 客户端直接调用已安装的 jms:
{
"mcpServers": {
"jms": { "command": "jms", "args": ["mcp"] }
}
}快速开始
jms config add bastion # 录入双地址、用户名、密码(隐藏输入) jms config test # 验证两端可达性与登录 jms ls # 列出资产 jms exec web-01 "uptime" # 单次命令,进程退出码即远端退出码 jms login web-01 # 交互式 shell(Ctrl+] 退出) jms sftp web-01:/etc/hosts . # 下载文
565438753494OBSERVED · 2026-10-12Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- UNDECLARED (4 observation(s))
- Network
- declared (1 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (19)
func (p *TerminalPool) Exec(ctx context.Context, srv *config.ServerConfig, sess *auth.Session,
_ = os.Remove(tmpName)
if err := os.Remove(path); err != nil && !os.IsNotExist(err) {if rmErr := os.Remove(l.path); rmErr != nil && !errors.Is(rmErr, os.ErrNotExist) && err == nil {if err := os.Remove(addr); err != nil {.goreleaser.yaml
t.Fatalf("Exec(%q) = %v, want nil", cmd, err)t.Fatalf("Exec(%q) = %v, want nil", asset, err)t.Fatalf("Exec(%+v) = %v, want nil", o, err)t.Fatalf("first Exec() = %v, want nil", err)res, err := p.Exec(context.Background(), srv, sess, "web-01", "rm -rf /srv", ExecOptions{})internal = "http://192.168.1.10:2280/"
internal = "http://192.168.1.10:2280/" # 内网地址(可缺省)
internal = "http://192.168.1.10:2280/"
c := New("http://127.0.0.1:1/") // nothing listens theret.Setenv("HTTP_PROXY", "http://127.0.0.1:1")t.Errorf("Verify = false, want the default true")| python -c "import sys,base64,json; print(json.loads(base64.b64decode(sys.stdin.read().strip()))['version'])")
Gates applied: no_behavioural_pass.
565438753494full audit observations/trust-audit/mcp-server/mifazhan__jms-client.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | 565438753494 | BLOCK | D | 69 | first audit |
Questions
What is the jms-client MCP server?
JumpServer v4 bastion CLI and MCP server in Go: pooled connections, endpoint failover, SFTP transfers, interactive login
Is jms-client safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.
What credentials does jms-client need?
No credential environment variables were found in its source, so it appears to need none.
How does jms-client run?
It speaks stdio, so it runs as a local process your client starts.
How current is this page?
The grade is for one exact copy of the source (565438753494), read on 2026-10-12. The repository is watched and re-audited when it changes.