bpf mcp
A. 模型上下文协议(MCP) 该服务器向AI助手公开Linux内核BPF(Berkeley Packet Filter)功能。此服务器提供对内核级BPF信息的结构化访问,包括跟踪点、内核函数、BTF类型数据和BPF程序/映射类型。
特性
- 内核跟踪点发现 -列出debugfs中的所有可用跟踪点
- 内核函数枚举 -访问kprobe/kretprobe目标的kallsyms
- BTF类型反思 -查询内核BTF数据以获取结构/联合/枚举定义
- BPF参考数据 -BPF程序类型和映射类型的静态列表
- 柔性运输 -支持stdio和HTTP传输
- 集装箱准备就绪 -具有特权内核访问的Docker/Podman部署
MCP工具
list_tracepoints
列出所有可用的内核跟踪点 /sys/kernel/debug/tracing/events.
参数:
category(可选)-按类别名称筛选(子字符串匹配)pattern(可选)-按跟踪点名称或类别筛选(子字符串匹配)limit(可选)-返回的最大结果数(默认值:100)offset(可选)-分页时要跳过的结果数
退货: 带有名称、类别和格式详细信息的跟踪点对象的JSON数组。
例子:
[
{
"name": "sched:sched_switch",
"category": "sched",
"format": "name: sched_switch\nID: 314\n..."
}
]list_kernel_functions
列出可用于kprobes/kretprobes的内核函数 /proc/kallsyms.
参数:
pattern(可选)-按函数名筛选(子字符串匹配)limit(可选)-返回的最大结果数(默认值:100)offset(可选)-分页时要跳过的结果数
退货: 包含名称、地址和模块的内核函数对象的JSON数组。
get_btf_types
在以下位置从内核检索BTF(BPF类型格式)类型信息 /sys/kernel/btf/vmlinux.
参数:
pattern(可选)-按类型名称筛选(子字符串匹配)limit(可选)-返回的最大结果数(默认值:100)offset(可选)-分页时要跳过的结果数
退货: BTF类型信息的JSON数组,包括结构、联合、枚举、typedef等。
例子:
[
{
"name": "file",
"kind": "Struct",
"size": 184,
"members": ["f_lock", "f_mode", "f_op", "f_mapping", ...]
}
]list_bpf_program_types
列出所有支持的BPF程序类型及其说明。
退货: JSON对象将程序类型名称映射到描述(例如。, kprobe, tracepoint, xdp).
list_bpf_map_types
列出所有支持的BPF映射类型及其说明。
退货: JSON对象映射将类型名称映射到描述(例如。, hash, array, ringbuf).
需求
- Linux x86_64 -目标平台
- 内核功能:
- Debugs安装在 /sys/kernel/debug (用于追踪点) - 内核中的BTF支持(用于类型自检) - 可读的 /proc/kallsyms (用于内核函数)
- 特权访问 -需要读取内核调试接口
- Rust 2024版 -从源头进行建设
安装
从源代码构建
cargo build --release二进制文件将在 target/release/bpf-mcp.
构建Docker镜像
make image
# or
docker build -t bpf-mcp -f Containerfile .用法
标准传输(默认)
默认模式使用stdio进行MCP通信,适用于与MCP客户端直接集成:
cargo runHTTP传输
构建与 http_service 在端口1337上启用HTTP传输的功能:
cargo build --features http_service
cargo run --features http_serviceMCP服务器将在 http://localhost:1337/mcp.
Docker部署
使用所需的内核访问权限运行容器化服务器:
docker run --rm -i --privileged \
-v /sys/kernel/debug:/sys/kernel/debug:ro \
-v /proc:/proc:ro \
bpf-mcp或使用提供的MCP配置 .mcp.json:
{
"mcpServers": {
"bpf-mcp": {
"command": "podman",
"args": [
"run", "--rm", "-i", "--privileged",
"-v", "/sys/kernel/debug:/sys/kernel/debug:ro",
"bpf-mcp"
]
}
}
}发展
代码质量
# Run linter
cargo clippy
# Format code
cargo fmt
# Generate documentation
cargo doc测试
单元测试:
cargo test集成测试:
# Test stdio transport
./tests/test_server.sh
# Test Docker deployment
./tests/test_server_docker.sh建筑
建立在 rmcp Rust MCP SDK包含以下关键组件:
src/main.rs-具有传输层设置的入口点(stdio/HTTP)src/tools/mod.rs-MCP工具实现使用#[tool]宏- 异步运行时 -Tokio用于并发操作
- 传输层 -用于进程通信的标准,通过Axum的HTTP
依赖项
rmcp(0.8.5)-官方Rust MCP SDKtokio(1.x)-异步运行时btf-rs(1.1)-BTF解析库libbpf-rs(0.24)-BPF库绑定axum(0.8)-HTTP服务器框架serde/serde_json-JSON序列化
用例
- 人工智能辅助BPF开发 -发现BPF程序开发的可用跟踪点和内核函数
- 内核探索 -通过BTF自省了解内核数据结构
- BPF教育 -了解BPF程序类型、映射类型和内核接口
- 安全性研究 -调查安全工具的内核接口
- 系统可观测性 -识别内核中的监视和跟踪点
贡献
本项目使用Rust 2024版本。请确保:
- 代码传递
cargo clippy没有警告 - 代码格式为
cargo fmt - 测试通过
cargo test - stdio和Docker部署的集成测试成功
许可证
有关详细信息,请参阅LICENSE文件。
