这个五一我发布了一个很有用的 MCP!
这个五一假期,我捣鼓了一个实用小工具——Log-MCP。起初只是自己调试时需要查看日志,顺手发了个朋友圈展示效果,没想到有好几位朋友私信询问:“这个工具看起来很好用,有链接吗?”这次反馈让我确认:后端开发中日志查询确实是一个普遍存在的痛点。
日常工作中,最让人头疼的场景无非以下两类:
- 日志查询——每次排查问题,先找运维申请服务器权限,或请他们帮忙拉取日志。一来一回,仅沟通就要耗费5到10分钟。
- 数据查询——想统计某个数据,得找DBA执行SQL,或者等待数据报表,整个过程效率极低,让人抓狂。
这些看似简单的操作,被权限隔离、团队协作等因素叠加后,便成了开发效率的瓶颈。于是趁五一假期,我完善了这个工具并直接开源——Log-MCP,让AI助手能够直接查询远程服务器日志,无需在多个工具和角色之间来回切换。
什么是 Log-MCP?
Log-MCP 是一个基于 MCP 协议的远程日志查询服务。它通过 SSH 连接远程服务器,为 Claude Code 这类 AI 助手提供日志查询能力。
核心价值主要体现在以下几点:
- 直接在 Claude Code 中查询远程服务器日志,无需切换工具
- 不需要找运维要权限,也无需手动 SSH 登录服务器
- 支持关键词搜索、正则表达式、日志级别过滤、日期范围查询
- AI 能理解您的意图,自动选择合适的查询方式
实际效果展示
先看两个真实的使用场景。
场景 1:排查离线数据问题
有用户反馈推送的离线数据出现异常。我在 Claude Code 中直接说:“帮我查一下 5.9 上昨天(2026-04-29)关于推送离线数据缺失的问题”。
AI 自动完成了以下操作:
- 连接 5.9 服务器
- 搜索相关日期的 error 日志
- 定位到
Instant exceeds minimum or maximum instant异常 - 找到具体的代码位置和时间戳问题
传统方式需要:找运维要权限 → SSH 登录 → cd 到日志目录 → grep 查找 → 分析上下文,至少需要 10 分钟。而使用 Log-MCP,30 秒就搞定。
场景 2:分析请求参数异常
接下来需要进一步排查实际接收到的请求参数,我继续询问:“帮我查一下实际接收到的请求参数是哪些”。
AI 自动完成的事情:
- 调用 log-mcp 3 次,逐步缩小范围
- 找到两次失败的请求参数
- 分析出异常特征:时间戳字段值异常
- 给出根本原因和修复建议
整个过程就像与一位懂业务的同事对话,AI 理解你的意图,自动选择合适的查询方式,并给出分析结果。
效率对比如下:
| 操作 | 传统方式 | 使用 Log-MCP | 提升 |
|---|---|---|---|
| 查看错误日志 | 5-10 分钟 | 30 秒 | 95% |
| 搜索关键词 | 3-5 分钟 | 20 秒 | 93% |
| 分析日志趋势 | 10-15 分钟 | 1 分钟 | 93% |
开发过程中的核心问题
开发过程中踩了几个坑,简单总结一下。
问题 1:SSH 私钥权限问题
开发初期遇到的第一个坑:SSH 私钥文件权限设置不对,出现大段 WARNING: UNPROTECTED PRIVATE KEY FILE! 报错。
原因很简单:SSH 要求私钥文件权限必须是 600(仅所有者可读写)。解决方案就是一个命令:
chmod 600 ~/id_rsa
问题 2:SSH 连接池优化
挑战在于,每次查询都建立新连接导致性能很差,每次需要 1-2 秒。解决方案是使用 Apache Commons Pool2 实现连接池,配置为每台服务器最多保持 3 个连接,借用时测试连接有效性。优化后,首次连接仍需 1-2 秒,但后续查询基本控制在 100ms 以内。
问题 3:Shell 命令注入防护
这是安全层面必须考虑的事情。用户输入可能包含特殊字符,比如如果用户输入的 keyword 是 ; rm -rf /,后果不堪设想。因此实现了一个 Shell 转义工具,使用单引号包裹输入,并转义内部的单引号,从源头上防止注入风险。
问题 4:STDIO 模式调试困难
在 STDIO 模式下,标准输入输出被 MCP 协议占用,无法直接输出调试信息。如果使用 System.out.println 调试,会直接破坏 MCP 协议。最终采用了文件日志方式:配置 logback 将日志输出到 /tmp/log-mcp.log,然后用 tail -f /tmp/log-mcp.log 查看调试信息。
快速开始
整个配置过程大约 5 分钟即可完成。
- 构建项目:git clone 项目后,运行
mvn clean package即可。 - 配置服务器:编辑
src/main/resources/config.json,填写服务器名称、主机地址、端口、用户名、私钥路径、日志根路径等信息。 - 配置 SSH 认证:生成密钥对,将公钥添加到服务器,并设置私钥权限为 600。
- 添加 MCP 服务:使用 STDIO 模式,通过
claude mcp add log-mcp-stdio ja va -- -Dssh.cert.path=... -Dlog.config=... -jar /path/to/log-mcp-1.0.0.jar命令添加。 - 开始使用:在 Claude Code 中直接用自然语言查询,例如“帮我查看生产服务器上最近的错误日志”、“搜索包含 NullPointerException 的日志”、“查看 5 月 4 日到 5 月 6 日的所有 error 日志”。
技术架构
核心技术栈包括 Ja va 21、Apache MINA SSHD 2.12.0(SSH 客户端)、Apache Commons Pool2 2.12.0(连接池管理)、Jackson 2.17.0(JSON 序列化)、SLF4J + Logback(日志框架)。
整体架构:用户通过 Claude Code 以自然语言查询,通过 MCP 协议(STDIO)与 Log-MCP Server 交互,Log-MCP 通过 SSH 连接池连接到远程服务器,操作日志文件系统。
可用的工具包括:
list_servers:列出所有配置的服务器list_log_files:列出日志文件,支持 server、level、startDate、endDate 参数read_log_file:读取日志文件内容,支持 filePath、startLine、endLine 参数search_logs:搜索日志关键词,支持 keyword、levels、startDate、endDate 参数tail_logs:获取最新日志,支持 level、lines 参数
安全特性
整个工具在安全方面做了大量工作:
- SSH 私钥认证:仅支持私钥认证,不支持密码
- 路径遍历防护:禁止
../等路径遍历操作 - Shell 注入防护:所有参数都经过转义处理
- 参数验证:严格的输入验证和限制
- 只读访问:不提供任何写入、删除功能,确保日志文件的安全性
总结
Log-MCP 的核心价值十分明确:效率提升 90% 以上,从 10 分钟降到 30 秒;安全可靠,具备 SSH 私钥认证和多重防护;开箱即用,5 分钟即可完成配置;并且基于 MCP 标准协议,易于扩展。
如果您也有类似的痛点,不妨试试这个工具。项目地址在 GitHub 上,欢迎试用。
