Atlas / MCP servers / mifazhan / jms-client

jms-clientBLOCK

mcp/mifazhan/jms-client

JumpServer v4 bastion CLI and MCP server in Go: pooled connections, endpoint failover, SFTP transfers, interactive login

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
—
Transport
stdio
License
MIT
Stars
1
01

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 .  # 下载文
Read from source at commit 565438753494OBSERVED · 2026-10-12
02

Trust 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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (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)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/connpool/pool.go:424
func (p *TerminalPool) Exec(ctx context.Context, srv *config.ServerConfig, sess *auth.Session,
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMFilesystem / path · fs.destructive · CWE-22, CWE-59
internal/atomicfile/atomicfile.go:49
_ = os.Remove(tmpName)
MEDIUMFilesystem / path · fs.destructive · CWE-22, CWE-59
internal/cli/config.go:314
if err := os.Remove(path); err != nil && !os.IsNotExist(err) {
MEDIUMFilesystem / path · fs.destructive · CWE-22, CWE-59
internal/ipc/endpoint_unix.go:60
if rmErr := os.Remove(l.path); rmErr != nil && !errors.Is(rmErr, os.ErrNotExist) && err == nil {
MEDIUMFilesystem / path · fs.destructive · CWE-22, CWE-59
internal/ipc/endpoint_unix.go:85
if err := os.Remove(addr); err != nil {
LOWInventory / provenance · inv.hidden_file · CWE-1104
.goreleaser.yaml
.goreleaser.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/connpool/terminal_test.go:27
t.Fatalf("Exec(%q) = %v, want nil", cmd, err)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/connpool/terminal_test.go:56
t.Fatalf("Exec(%q) = %v, want nil", asset, err)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/connpool/terminal_test.go:82
t.Fatalf("Exec(%+v) = %v, want nil", o, err)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/connpool/terminal_test.go:152
t.Fatalf("first Exec() = %v, want nil", err)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.destructive · CWE-22, CWE-59
internal/connpool/terminal_test.go:348
res, err := p.Exec(context.Background(), srv, sess, "web-01", "rm -rf /srv", ExecOptions{})
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
DESIGN.md:321
internal = "http://192.168.1.10:2280/"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:80
internal = "http://192.168.1.10:2280/"        # 内网地址(可缺省)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:100
internal = "http://192.168.1.10:2280/"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
internal/api/client_test.go:135
c := New("http://127.0.0.1:1/") // nothing listens there
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
internal/api/proxy_test.go:24
t.Setenv("HTTP_PROXY", "http://127.0.0.1:1")
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
internal/cli/sftp_test.go:72
t.Errorf("Verify = false, want the default true")
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
scripts/release.sh:477
| python -c "import sys,base64,json; print(json.loads(base64.b64decode(sys.stdin.read().strip()))['version'])")
LOWInventory / provenance · mcp.no_tools_extracted · CWE-1104
mcpb/server.json
Why it matters. the tool list is enumerated at runtime by tools/list, not declared in source
Fix. the page says so rather than showing an empty table

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 565438753494full audit observations/trust-audit/mcp-server/mifazhan__jms-client.json · Report an issue / request a re-scan
03

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12565438753494BLOCKD69first audit
04

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.

Advertisement