article
README
🚀 bpftrace MCP Server:生成eBPF以跟踪Linux内核
bpftrace MCP Server是一个轻量级的MCP(模型上下文协议)服务器,它为AI助手提供了访问bpftrace内核跟踪功能的途径,可助力开发者高效地对Linux内核进行跟踪和分析。

✨ 主要特性
- list_probes:列出可用的bpftrace探测点,并支持可选的过滤功能。
- list_helpers:获取bpftrace辅助函数的相关信息。
- exec_program:执行bpftrace程序,并以缓冲输出的方式返回结果。
- get_result:异步检索程序执行的结果。
📦 安装指南
前提条件
- 安装Rust(若尚未安装):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 确保已安装bpftrace:
sudo apt-get install bpftrace # Ubuntu/Debian
# 或者
sudo dnf install bpftrace # Fedora
- 构建服务器:
cargo build --release
快速设置
可以使用我们提供的自动化设置脚本:
- Claude桌面版:
./setup/setup_claude.sh - Claude代码版:
./setup/setup_claude_code.sh
如需详细的设置说明和手动配置方法,请参阅 setup/SETUP.md。
🚀 快速开始
直接执行
./target/release/bpftrace-mcp-server
通过Cargo执行
cargo run --release
手动配置
如需Claude桌面版或Claude代码版的手动设置说明,请参阅 setup/SETUP.md。
💻 使用示例
列出系统调用探测点
await list_probes(filter="syscalls:*read*")
获取BPF系统信息
info = await bpf_info()
# 返回系统信息、内核辅助函数、特性、映射类型和探测点类型
执行简单跟踪
result = await exec_program(
'tracepoint:syscalls:sys_enter_open { printf("%s\\n", comm); }',
timeout=10
)
exec_id = result["execution_id"]
获取执行结果
output = await get_result(exec_id)
print(output["output"])
🔧 技术细节
Rust服务器采用了以下技术和组件:
- Tokio异步运行时,以实现并发操作。
- 子进程管理,用于执行bpftrace程序。
- DashMap,实现线程安全的内存缓冲。
- 自动清理旧缓冲区。
- rmcp crate,用于实现MCP协议。
⚠️ 安全注意事项
- 服务器需要sudo权限才能运行bpftrace。
- 密码处理:创建一个
.env文件并存储你的sudo密码:echo "BPFTRACE_PASSWD=your_sudo_password" > .env - 替代方法:为bpftrace配置无密码sudo:
sudo visudo # 添加:your_username ALL=(ALL) NOPASSWD: /usr/bin/bpftrace - 无脚本验证 - 信任AI客户端生成安全的脚本。
- 资源限制:最大执行时间为60秒,缓冲区最多可容纳10000行。
- 详细的安全配置请参阅 SECURITY.md。
📄 局限性
- 不支持实时流式传输(需使用
get_result进行轮询)。 - 密码处理方式简单(生产环境中需改进)。
- 执行记录无持久化存储。
- 错误处理机制较为基础。
📚 详细文档
- 设置指南 - 详细的安装和配置说明。
- Claude代码版设置 - Claude代码版的特定说明。
- CLAUDE.md - AI助手的开发指南。
- 设计文档 - 架构和设计细节。
🚧 未来改进方向
- 增加SSE传输,以支持实时流式传输。
- 实现适当的身份验证机制。
- 增加脚本验证和沙箱功能。
- 支持保存/加载跟踪会话。
- 与eBPF程序进行集成。
微信扫一扫