关于 Jarroba Tools · Logs
Jarroba Tools · Logs 是供 AI 排查超出上下文容量的日志的本地 MCP 服务。它按文件路径读取日志,并返回趋势、模式、堆栈跟踪和精简片段等分析结果。
主要功能
- 01直接按文件路径分析日志
- 02发现趋势、新模式和消失的事件
- 03归并重复消息并识别罕见项
- 04追踪堆栈错误的根因
- 05按字符预算精简日志
- 06检查日志质量并转换格式
适用场景
- 01排查大型 CI 故障日志
- 02查明错误模式何时出现或停止
- 03将异常追踪到应用代码
- 04为 AI 准备精简日志片段
MCP 相关
通过本地 stdio 向 MCP 客户端提供 12 种只读日志工具。服务读取其宿主进程可访问的文件,并返回筛选后的结果,无需粘贴日志文本。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @jarroba/mcp-logsJARROBA_MCP_DOMAINSWhich tool domains to publish, comma-separated. Defaults to what this package is for. Valid: core, calc, diagram, kg, db, ai, logs, queue, project, tests, api, chip, chem, access, archsim, security, experiments, payroll. Fewer domains means less of your context window spent on tool definitions.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
11收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| from | enum | 否 | 文件超过 32 MB 时要读取哪一端start | end |
| path | string | 否 | 日志文件的路径。处理大型日志时请使用此参数:它们无法放入一次工具调用中。 |
| text | string | 否 | 日志文本。`path` 的替代方式。 |
| format | enum | 否 | 强制使用指定格式,而不是自动检测json | logfmt | syslog5424 | syslog3164 | clf | combined | plain |
详细介绍
@jarroba/mcp-logs
一个 MCP 服务,让你的 AI 读取超出上下文容量的日志。
claude mcp add jarroba-logs -- npx -y @jarroba/mcp-logs
// Claude Desktop, Cursor, Cline, VS Code…
{ "mcpServers": { "jarroba-logs": { "command": "npx", "args": ["-y", "@jarroba/mcp-logs"] } } }
12 个工具 · 约 5.5k 个 token 的上下文 · stdio,在你的设备上运行 · 不会上传任何内容。
为什么要开发这个工具
所有供 AI 使用的日志工具都需要粘贴文本。生产环境或 CI 日志有几十或几百 MB,因此无法粘贴,而且有意思的部分往往不是你会粘贴的部分。
这些工具接收文件路径。服务在 Node 中运行,因此会自行打开文件,只返回能放入上下文的内容。调试 CI 失败任务的 Agent 无法读取日志,但可以针对日志提问。
工具
log_analyze | 格式、事件数量(40 行堆栈跟踪算作一个事件)、级别、时间范围、已找到根本原因的错误、最常见的模式。 |
log_trends | 从什么时候开始的。 将每种模式与自身比较,而不是与总量比较——在繁忙的服务中,所有内容都会在上午 9 点增加,但这并不意味着发生了什么。返回激增的内容、新出现的内容,以及不再出现的内容:最后一种不会增加任何计数,往往意味着更糟的情况。 |
log_around | 某个时刻前后还发生了什么。之前开始的内容可能是原因;之后发生的通常是结果。相关性不代表因果关系,先后顺序才是区分两者的关键。 |
log_distinguish | 一组事件与其他事件有何不同:其中出现比例偏高的 field=value 对(默认在错误中查找)。在 300 个错误中,version=2.4.1 占 92%,而其他事件中只占 4%,这就是导致故障的部署——无需阅读 300 个错误即可找到。每个事件中都唯一的字段会被跳过:它们只能用于识别,不能用于区分。 |
log_patterns | 将行分组成模板(Drain):“connected to 10.0.0.1”和“connected to 10.0.0.7”会被视为同一条消息。还会返回罕见模式,而这通常正是你要找的内容。 |
log_reduce | 将内容缩减到字符数预算,同时保留完整错误跟踪、之前的时间窗口以及只出现一次的内容。重复内容会合并为 [xN]。适合将大型日志交给模型,避免把上下文浪费在重复行上。 |
log_stacktrace | 支持 Java/JVM、Python、Node、Go、.NET、Rust、Ruby、PHP:返回 Caused by 链、根本原因,以及你的代码中的第一个堆栈帧——如果你没有指定,会从跟踪中推断。 |
log_lint | 检查日志写得是否规范,而非发生了什么:是否打印了密钥、是否有一行刷满整个文件、时间戳是否缺少时区(这会导致无法关联两台机器上的日志)、时钟是否倒退、是否缺少请求 ID。密钥会在结果中被遮蔽。 |
log_convert | JSON / logfmt / syslog 5424 / CSV / OpenTelemetry / ECS——会事先说明转换会丢失哪些内容。 |
log_rotation | 按时间顺序排列轮转日志。轮转编号与时间顺序相反(app.log.3 比 app.log.1 旧),按字母排序时 app.log.10 也会排在 app.log.9 前面。先使用此工具,否则你会按倒序读取日志。 |
log_profile_checklog_profile_suggest | 描述团队日志格式的可复用配置文件。check 会返回每个错误及其确切字段,让模型一次就能修正。 |
让你的 Agent 使用该工具(Claude Code hook)
使用这些工具的 Agent 仍可能习惯性地用 Read 读取 300 MB 的日志。hooks/big-log-read.mjs
是一个 PreToolUse hook,可阻止 Read 读取大型日志(按名称判断:*.log、轮转文件 *.log.N[.gz]、*.jsonl、
logs/ 下的任何文件;按大小判断:2 MB,可通过 JT_BIG_LOG_BYTES 修改),并提示 Agent 改为使用路径调用
log_analyze / log_reduce。其他内容不受影响。
{ "hooks": { "PreToolUse": [ { "matcher": "Read", "hooks": [
{ "type": "command", "command": "node /path/to/big-log-read.mjs" } ] } ] } }
它不会做的两件事
- 它不会臆测服务器的时区。 日志中没有记录时区,猜测时区会让整条时间线发生偏移,却无人察觉。
log_profile_suggest会明确说明这一点,而不会擅自填入时区。 - 如果日志没有时间戳,它不会告诉你任何事情花了多久。 它会说明无法判断。
隐私,以及坦诚说明
传输方式为 stdio:你的 MCP 主机将其作为子进程启动,并通过 stdin/stdout 通信。没有端点、没有账户,也没有遥测。npx 首次会从 npm 将软件包下载到你的机器;之后不会有任何数据传出。
有两件事值得提前了解,以免之后才发现:
- 这些工具会读取启动它们的进程能够读取的所有内容。 这正是它们的用途——让一个 200 MB 的日志也能回答问题——因此,它们拥有的权限与 MCP 主机完全相同。
- 工具返回的内容会进入模型的上下文。 含有恶意文本的日志文件会成为间接提示词注入渠道,和网页的情况一样。这里不会对内容进行净化处理。
每个工具都声明了 MCP annotations:它们的 readOnlyHint: true,并且由于答案来自磁盘而非参数,因此 openWorldHint: true。
更多信息
属于 Jarroba Tools — 使用与 Web 工具相同的引擎,因此答案完全一致。想要获取全部内容(90 个工具、数据库、图表、测试审计、SPARQL)?
@jarroba/mcp。
MIT — 参见 LICENSE。源代码:github.com/Invarato/jarroba-mcp。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。