关于 nats-trail
nats-trail 通过 Web UI、命令行和 MCP 服务提供统一查询引擎,用于检查 NATS 与 JetStream。它帮助运维人员和 Agent 追踪请求流并诊断问题,同时从设计上限制 Agent 只能读取数据。
主要功能
- 01跨流追踪请求
- 02按严重程度排列健康问题
- 03发现主题和载荷结构
- 04执行有界搜索并共享已保存筛选器
- 05浏览 JetStream、KV 和 Object Store
- 06将人工写入与 Agent 访问隔离
适用场景
- 01定位请求流程失败的位置
- 02检查死信消息和重试状态
- 03查看消费者与服务器健康状况
- 04为 Agent 提供经审计的生产环境只读查询
MCP 相关
向 MCP 客户端提供 25 个有界只读工具,用于 NATS 主题发现、健康摘要、流程重建、消息查询和事件上下文整理。Agent 运行时不具备写入操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @nats-trail/mcpNATS_TRAIL_APIURL of the NATS Trail bridge, e.g. http://127.0.0.1:4000. Without it the server answers only from local state and cannot reach JetStream.NATS_TRAIL_TOKEN密钥Bearer token for the bridge, required when it has auth enabled. A read-scoped token is enough: this server never mutates.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
28收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 是 | 必需:结果数量上限。 |
详细介绍
让 AI Agent 安全地访问你的生产事件总线。
通过一个范围受限的查询引擎,提供 Web UI、命令行工具和 MCP 服务,让人类与 Agent 基于同一真实数据源调试 NATS。
为何构建
每个 NATS GUI 都能回答 “这个流里有什么?” 这只是简单的问题。
事件驱动系统中,难题是**“这一次流程为何失败?”**——要回答这个问题,
就得跨越四个流、三个服务和一个死信主题追踪同一个 request_id。
如今,你只能为每个流打开一个终端,手动完成这件事。
NATS Trail 直接回答这个问题,并将答案作为类型明确、范围受限、 只读的工具契约提供给 Agent——这样你就能让 Claude 查看生产环境并提出问题。
nats-trail trace --request-id req-0001d --limit 20
或者,你可以向 Agent 提问:“s3-events 的刷新为何失败?”——它会定位到 真正导致故障的消息,并已提取出重试状态和关联 ID:
别人都没做到的部分
市面上有好几个 NATS MCP 服务。它们通过 nats CLI 执行命令,返回原始数据转储,
还提供 publish 和 delete 操作,却自称只读。
NATS Trail 将 Agent 接口视为一份契约,而非包装层:
| NATS Trail | 典型的 NATS MCP 服务 | |
|---|---|---|
| 工具架构 | 每个工具都有明确的 JSON 输入和输出架构 | 没有,或仅有输入架构 |
| 结果大小 | limit 为必填项,上限为 200,并支持游标 | 不受限制 |
| 长时间扫描 | 设有 maxScan 预算,并在截断时明确警告 | 一直扫描,直到崩溃 |
| 消息结构 | subject、时间戳、stream/seq、截断标记,以及提取出的 request_id / correlation_id | 原始数据负载转储 |
| 错误 | 包含 code 和 retriable 的结构化封装 | 堆栈跟踪或纯文本字符串 |
| 写入 | Agent 运行时无法触及 | 可执行 publish、KV 和对象写入 |
| 审计 | 记录每次调用的来源和令牌身份;记录变更操作及其参数 | 无 |
这里的“只读”意味着无法访问,而非已禁用
NATS Trail 可以写入:发布、清除、删除消息、消费者和流。这些功能位于
/api/mutate 后面,可从 UI 和 CLI 访问。
executeMcpTool() 接收的 McpRuntimeData 接口只公开读取函数。这里并不存在由功能标志控制的已禁用 publish——根本没有可调用的 publish。 环境变量配置错误也无法清除生产环境中的流,因为代码路径并不存在。CLI 写入命令在 --agent 模式下也会拒绝运行,而且测试套件会读取源码,确保这些限制不会被悄悄取消。
这也是将 prod 上下文交给 Agent 的唯一合理依据。
安装
npx nats-trail serve
打开 **http://127.0.0.1:4000**——一个进程即可同时提供 UI 和 API。
更喜欢容器?compose 文件会在启用了 JetStream 的服务旁启动 NATS Trail:
docker compose up
在 Kubernetes 上,Helm chart 会在 values.yaml 中声明上下文和关联键,并将凭据保存在 Secret 中:
helm install nats-trail ./charts/nats-trail -f my-values.yaml
请参阅 charts/nats-trail/README.md,了解声明式配置、为何使用单副本 StatefulSet,以及如何将身份验证委托给服务前端的组件。
从源码构建
git clone https://github.com/solsolettidev/nats-trail
cd nats-trail
npm install
npm start
启用热重载进行开发
npm run dev
- UI:http://localhost:5173(将
/api和/ws代理到桥接服务) - API 桥接服务:http://localhost:4000
npm run dev 会同时运行 TypeScript 监视器、API 桥接服务和 UI。
要求: Node.js >= 22(用于关联索引内置的 SQLite),以及可访问的 NATS 服务(nats-server -js 即可)。
将其用作 MCP 服务
让任意 MCP 客户端连接到 stdio 服务。Claude Code 的配置方式:
claude mcp add nats-trail -- npx -y @nats-trail/mcp
或者手动接入:
{
"mcpServers": {
"nats-trail": {
"command": "natstrail-mcp",
"env": {
"NATS_TRAIL_API": "http://127.0.0.1:4000",
"NATS_TRAIL_TOKEN": "<bearer token>"
}
}
}
}
提供 25 个只读工具,所有工具都返回相同的封装格式:
# start here when the topology is unknown
natstrail.discover_subjects subjects that carry traffic + inferred payload shapes
natstrail.get_health_summary what is broken right now, ranked
natstrail.reconstruct_flow the causal chain for one request_id
natstrail.enrich_incident flat context for an incident: flow + dead letters + health
# messages
natstrail.search_messages natstrail.get_message_detail
natstrail.trace_by_request_id natstrail.trace_by_correlation_id
natstrail.search_dlq natstrail.run_filter
# topology
natstrail.list_streams natstrail.get_stream_info
natstrail.list_consumers natstrail.list_kv_buckets
natstrail.list_kv_keys natstrail.get_kv_history
natstrail.list_object_buckets natstrail.list_objects
# operations
natstrail.get_server_health natstrail.list_server_connections
natstrail.list_contexts natstrail.get_connection_status
natstrail.list_filters natstrail.list_audit
natstrail.enrich_sentry
请参阅 docs/mcp-agent.md。
三种界面,一个引擎
┌── Web UI explore visually, save filters
Query Engine ───┼── CLI scripts, pipelines, humans in a terminal
(core) └── MCP + HTTP API agents, Sentry, dashboards
你在 UI 中保存的筛选器,与 nats-trail filter run 执行的筛选器相同,也与 natstrail.run_filter 提供给 Agent 的筛选器相同。只需配置一次上下文,即可随处使用。
packages/ui— React + Vite。仅负责呈现。packages/server— Express + WebSocket 桥接服务。负责管理连接和凭据。packages/core— 查询引擎:封装格式、限制、截断、筛选器、错误规范化。packages/cli—nats-trail二进制程序:查询命令、serve和交互式 Shell。packages/mcp— 工具契约和 stdio 服务。
请参阅 docs/architecture.md。
功能
检查 — 上下文选择器(本地 / 开发 / 预发布 / 生产),带有生产环境确认门槛;实时主题订阅;支持树状视图和载荷内搜索的 JSON 美化显示;流和消费者浏览;自动检测的 DLQ 面板。
![]() JetStream — 流、主题、数量和消费者健康状况。 | ![]() NATS Core — 带筛选条件的实时主题订阅。 |
![]() DLQ — 自动检测死信,并显示原因和来源。 | ![]() 查看器 — 树状视图、原始内容、搜索、全屏、复制路径。 |
理解 — 主题发现会根据真实流量推断载荷结构;流重建会将一个 request_id 转化为因果链;健康摘要会按实际故障情况排序。
查询 — 通过游标和时间窗口进行有界流扫描;按主题、日期、文本和 JSON 事件类型筛选;在所有三个界面中共享已保存的筛选条件。二进制载荷(protobuf、msgpack)会被检测出来,并以十六进制转储显示,而不是乱码。
浏览 — KV 存储桶及其每个键的修订历史(包括删除记录)、Object Store 元数据,以及来自监控端口(varz / jsz / connz)的服务健康状况。
更改 — 通过 UI 和 CLI 发布消息、请求/回复、清空和删除消息、消费者及流,并要求确认。Agent 界面绝不提供这些操作。
集成 — /api/integration 下的只读 HTTP API、带有每个令牌审计身份的 bearer 令牌,以及用于在不暴露凭据的情况下将 NATS 上下文附加到错误的 POST /api/integration/enrich/sentry。
完整列表见 docs/features.md · CLI 参考见 docs/cli.md。
安全
凭据保存在本地 data/ 下的上下文中(已加入 git 忽略)。UI 不会直接持有 NATS 连接 — 始终通过桥接服务进行连接,该服务会为每个上下文建立一个连接池。
服务器默认绑定到 127.0.0.1,因为 /api/contexts 和 /api/connect 是未经身份验证的本地端点。若要开放 Integration API 和 WebSocket,请通过 NATS_TRAIL_TOKENS=name:token 或 data/tokens.json 配置 bearer 令牌;之后,审计条目会记录每次调用所使用的已验证令牌名称。
共享部署有意不内置登录功能:身份验证由服务前端负责(例如带 OIDC 的 ingress、oauth2-proxy、Cloudflare Access、Teleport 或网络隔离),因此此处不会存储密码。通过 NATS_TRAIL_CONFIG 声明的上下文会从环境中解析 ${VAR},且无法通过 API 编辑或删除。
路线图
记录在 docs/roadmap.md 中。
阶段 0–3 已完成。 npm 发布 · KV 和对象存储浏览 · 服务健康状态 · 二进制 负载处理 · nkey 身份验证 · subject 发现 · 流重建 · 健康摘要 · Sentry、Grafana、Datadog 和 PagerDuty 的事件 增强 · stream、consumer 和 KV 管理 · MCP 注册表列表 · 索引关联搜索 · 声明式配置和 Helm chart。所有写入操作 仅供人工执行,须使用受限令牌,并会连同操作参数一起审计。
**下一步:**集群感知功能,特意延后,而非待办工作。
明确不在计划内 — protobuf 和 msgpack 字段解码(需要按 subject 配置架构注册表),
以及在 GUI 功能广度上与 NUI 竞争。请参阅
docs/roadmap.md。
计划中,尚未开始:对于明确希望允许 Agent 写入的团队,提供一个独立的可选二进制文件
(natstrail-mcp-write),需要用户主动安装。绝不会在只读服务中添加切换标志:
只有当上述保障不会因意外操作而被关闭时,它才有意义。
参与贡献
欢迎提交问题和 PR。有关构建布局,请参阅 docs/development.md。
许可证
Apache-2.0 © Sol Soletti
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。


