一个简单的Joern的MCP Server。
本项目是一个基于Joern的MCP Server,提供了一系列功能来帮助开发者进行代码审查和安全分析。
- Python >= 3.10(默认3.12) & uv
- Joern
-
克隆项目到本地:
git clone https://github.com/sfncat/mcp-joern.git cd mcp-joern -
安装Python依赖:
uv venv .venv source .venv/bin/activate uv sync
├── server.py # MCP Server主程序
├── test_mcp_client.py # joern server和 mcp tool测试程序
├── test_sc_tools.py # 直接测试sc中的tool程序
├── common_tools.py # 通用工具函数
├── server_tools.py # 服务器工具函数
├── server_tools.sc # 服务器工具函数的scala实现
├── server_tools_source.sc # 服务器工具函数的scala实现,使用sourceCode获取method的code
├── requirements.txt # Python依赖文件
├── sample_cline_mcp_settings.json # cline mcp 配置样例文件
└── env_example.txt # 环境变量样例文件
-
启动Joern服务器:
joern -J-Xmx40G --server --server-host 127.0.0.1 --server-port 16162 --server-auth-username user --server-auth-password password --import server_tools.sc 或 joern -J-Xmx40G --server --server-host 127.0.0.1 --server-port 16162 --server-auth-username user --server-auth-password password --import server_tools_source.sc
如果是在Windows下使用,可能需要通过命令行或在系统环境变量中设置JVM系统变量解决加载脚本失败的问题
set _JAVA_OPTIONS=-Dfile.encoding=UTF-8设置joern通用日志级别
set SL_LOGGING_LEVEL=ERROR //windows export SL_LOGGING_LEVEL=ERROR //linux如果有下面的告警
Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)可以通过设置环境变量关闭
set TERM=dumb export TERM=dumb恢复
set TERM=xterm-256color export TERM=xterm-256color -
复制env_example.txt为.env 修改配置信息和joern server启动配置的信息一致
-
运行测试连接: 修改
test_mcp_client.py中的信息,确认joern server正常uv run test_mcp_client.py Starting MCP server test... ================================================== Testing server connection... [04/16/25 20:38:54] INFO Processing request of type CallToolRequest server.py:534 Connection test result: Successfully connected to Joern MCP, joern server version is XXX
-
配置MCP server 在cline中配置mcp服务器,可参考
sample_cline_mcp_settings.json。 -
使用MCP server 向大模型提问,可参考
prompts_cn.md
.env文件用于存储环境变量.gitignore文件定义了Git版本控制需要忽略的文件pyproject.toml定义了项目的Python配置- mcp tool开发
- 在
server_tools.sc中实现,在server_tools.py增加定义,在test_mcp_client.py中增加测试
- 在
欢迎提交Issue和Pull Request来帮助改进项目。
欢迎增加更多的tool。