一个容器化的模型上下文协议(MCP)服务器,使用Joern的代码属性图(CPG)技术提供静态代码分析,支持Java、C/C++、JavaScript、Python、Go、Kotlin、C#、Ghidra、Jimple、PHP、Ruby和Swift。
在开始之前,请确保您已安装:
验证您的设置:
docker --version
docker-compose --version
python --version
# 创建虚拟环境(可选但推荐)
python -m venv venv
# 安装依赖
pip install -r requirements.txt
docker compose up -d
这将启动:
验证服务是否正在运行:
docker compose ps
# 启动服务器
python main.py &
MCP服务器将在http://localhost:4242可用。
# 停止MCP服务器(终端中按Ctrl+C)
# 停止Docker服务
docker-compose down
# 可选:清理一切
bash cleanup.sh
使用提供的清理脚本来重置您的环境:
bash cleanup.sh
这将:
__pycache__,.pytest_cache)编辑VS Code中的MCP配置文件(GitHub Copilot):
路径:
~/.config/Code/User/mcp.json
示例配置:
{
"inputs": [],
"servers": {
"codebadger": {
"url": "http://localhost:4242/mcp",
"type": "http"
}
}
}
要将codebadger集成到Claude Desktop,编辑:
路径:
Claude → 设置 → 开发者 → 编辑配置 → claude_desktop_config.json
添加以下内容:
{
"mcpServers": {
"codebadger": {
"url": "http://localhost:4242/mcp",
"type": "http"
}
}
}
generate_cpg:为代码库生成CPG(从本地路径或GitHub URL)get_cpg_status:通过codebase_hash获取CPG的状态和存在情况run_cpgql_query:执行CPGQL查询(同步)get_codebase_summary:获取代码库概述
list_files:列出源文件
list_methods:发现方法/函数
get_method_source:检索方法源代码
list_calls:查找函数调用关系
get_call_graph:构建调用图
list_parameters:获取参数信息
find_literals:搜索硬编码值
get_code_snippet:检索代码片段
find_taint_sources:定位外部输入点
find_taint_sinks:定位危险接收点
find_taint_flows:查找数据流路径
find_argument_flows:查找表达式复用
check_method_reachability:检查调用图连接
list_taint_paths:列出详细的污染路径
get_program_slice:构建程序切片
感谢您的贡献!这里有一个快速指南,帮助您开始运行测试和贡献代码。
python -m venv venv
pip install -r requirements.txt
docker-compose up -d
pytest tests/ -q
# 在后台启动MCP服务器
python main.py &
# 运行集成测试
pytest tests/integration -q
# 停止MCP服务器
pkill -f "python main.py"
pytest tests/ -q
bash cleanup.sh
docker-compose down
请遵循以下准则进行贡献:
MCP服务器可以通过环境变量或config.yaml进行配置。
关键设置(可选,默认值显示):
# 服务器
MCP_HOST=0.0.0.0
MCP_PORT=4242
# Joern
JOERN_BINARY_PATH=joern
JOERN_JAVA_OPTS="-Xmx4G -Xms2G -XX:+UseG1GC -Dfile.encoding=UTF-8"
# CPG生成
CPG_GENERATION_TIMEOUT=600
MAX_REPO_SIZE_MB=500
# 查询
QUERY_TIMEOUT=30
QUERY_CACHE_ENABLED=true
QUERY_CACHE_TTL=300
从config.example.yaml创建config.yaml:
cp config.example.yaml config.yaml
然后根据需要自定义。