Joern MCP
๐ ๐ท๏ธ joern-mcp
A Model Context Protocol (MCP) server that equips AI assistants with static code analysis capabilities using Joern's Code Property Graph (CPG) technology.
๐ Quick Start
Prerequisites
- Python 3.8+
- Docker
- Redis
- Git
Installation
- Clone the repository and install dependencies:
git clone https://github.com/Lekssays/joern-mcp.git
cd joern-mcp
pip install -r requirements.txt
- Setup (builds Joern image and starts Redis):
./setup.sh
- Configure (optional):
cp config.example.yaml config.yaml
# Edit config.yaml as needed
- Run the server:
python main.py
# Server will be available at http://localhost:4242
โจ Features
- Multi-Language Support: Java, C/C++, JavaScript, Python, Go, Kotlin, C#, Ghidra, Jimple, PHP, Ruby, Swift
- Docker Isolation: Each analysis session runs in a secure container
- GitHub Integration: Analyze repositories directly from GitHub URLs
- Session-Based: Persistent CPG sessions with automatic cleanup
- Redis-Backed: Fast caching and session management
- Async Queries: Non-blocking CPG generation and query execution
- Built-in Security Queries: Pre-configured queries for common vulnerabilities
๐ป Usage Examples
Basic Usage
# Create session from GitHub
{
"tool": "create_cpg_session",
"arguments": {
"source_type": "github",
"source_path": "https://github.com/user/repo",
"language": "java"
}
}
# Get codebase overview
{
"tool": "get_codebase_summary",
"arguments": {
"session_id": "abc-123-def"
}
}
# List all methods in the codebase
{
"tool": "list_methods",
"arguments": {
"session_id": "abc-123-def",
"include_external": false,
"limit": 50
}
}
# Get source code for a specific method
{
"tool": "get_method_source",
"arguments": {
"session_id": "abc-123-def",
"method_name": "authenticate"
}
}
# Find what methods call a specific function
{
"tool": "get_call_graph",
"arguments": {
"session_id": "abc-123-def",
"method_name": "execute_query",
"depth": 2,
"direction": "incoming"
}
}
# Search for hardcoded secrets
{
"tool": "find_literals",
"arguments": {
"session_id": "abc-123-def",
"pattern": "(?i).*(password|secret|api_key).*",
"limit": 20
}
}
# Get code snippet from a file
{
"tool": "get_code_snippet",
"arguments": {
"session_id": "abc-123-def",
"filename": "src/main.c",
"start_line": 10,
"end_line": 25
}
}
# Run custom CPGQL query
{
"tool": "run_cpgql_query",
"arguments": {
"session_id": "abc-123-def",
"query": "cpg.method.name.l"
}
}
Advanced Usage
The list_queries tool provides 20+ pre-configured queries including those for security, memory safety, and code quality.
Security:
- SQL injection detection
- XSS vulnerabilities
- Hardcoded secrets
- Command injection
- Path traversal
Memory Safety:
- Buffer overflow risks
- Memory leaks
- Null pointer dereferences
- Uninitialized variables
Code Quality:
- All methods/functions
- Control structures
- Function calls
- String literals
๐ Documentation
Integration with GitHub Copilot
The server uses Streamable HTTP transport for network accessibility and supports multiple concurrent clients.
Add to your VS Code settings.json:
{
"github.copilot.advanced": {
"mcp": {
"servers": {
"joern-mcp": {
"url": "http://localhost:4242/mcp",
}
}
}
}
}
Make sure the server is running before using it with Copilot:
python main.py
Available Tools
Core Tools
create_cpg_session: Initialize analysis session from local path or GitHub URLrun_cpgql_query: Execute synchronous CPGQL queries with JSON outputrun_cpgql_query_async: Execute asynchronous queries with status trackingget_session_status: Check session state and metadatalist_sessions: View active sessions with filteringclose_session: Clean up session resourceslist_queries: Get pre-built security and quality queries
Code Browsing Tools
get_codebase_summary: Get high-level overview of codebase (file count, method count, language)list_files: List all source files with optional regex filteringlist_methods: Discover all methods/functions with filtering by name, file, or external statusget_method_source: Retrieve actual source code for specific methodslist_calls: Find function call relationships and dependenciesget_call_graph: Build call graphs (outgoing callees or incoming callers) with configurable depthlist_parameters: Get detailed parameter information for methodsfind_literals: Search for hardcoded values (strings, numbers, API keys, etc)get_code_snippet: Retrieve code snippets from files with line range
Configuration
Key settings in config.yaml:
server:
host: 0.0.0.0
port: 4242
log_level: INFO
redis:
host: localhost
port: 6379
sessions:
ttl: 3600 # Session timeout (seconds)
max_concurrent: 50 # Max concurrent sessions
cpg:
generation_timeout: 600 # CPG generation timeout (seconds)
supported_languages: [java, c, cpp, javascript, python, go, kotlin, csharp, ghidra, jimple, php, ruby, swift]
Environment variables override config file settings (e.g., MCP_HOST, REDIS_HOST, SESSION_TTL).
Example CPGQL Queries
Find all methods:
cpg.method.name.l
Find hardcoded secrets:
cpg.literal.code("(?i).*(password|secret|api_key).*").l
Find SQL injection risks:
cpg.call.name(".*execute.*").where(_.argument.isLiteral.code(".*SELECT.*")).l
Find complex methods:
cpg.method.filter(_.cyclomaticComplexity > 10).l
๐ง Technical Details
Architecture
- FastMCP Server: Built on FastMCP 2.12.4 framework with Streamable HTTP transport
- HTTP Transport: Network-accessible API supporting multiple concurrent clients
- Docker Containers: One isolated Joern container per session
- Redis: Session state and query result caching
- Async Processing: Non-blocking CPG generation
- CPG Caching: Reuse CPGs for identical source/language combinations
Development
Project Structure
joern-mcp/
โโโ src/
โ โโโ services/ # Session, Docker, Git, CPG, Query services
โ โโโ tools/ # MCP tool definitions
โ โโโ utils/ # Redis, logging, validators
โ โโโ models.py # Data models
โโโ playground/ # Test codebases and CPGs
โโโ main.py # Server entry point
โโโ config.yaml # Configuration
โโโ requirements.txt # Dependencies
Running Tests
# Install dev dependencies
pip install -r requirements.txt
# Run tests
pytest
# Run with coverage
pytest --cov=src --cov-report=html
Code Quality
# Format
black src/ tests/
isort src/ tests/
# Lint
flake8 src/ tests/
mypy src/
Troubleshooting
Setup issues
# Re-run setup to rebuild and restart services
./setup.sh
Docker issues
# Verify Docker is running
docker ps
# Check Joern image
docker images | grep joern
# Check Redis container
docker ps | grep joern-redis
Redis connection issues
# Test Redis connection
docker exec joern-redis redis-cli ping
# Check Redis logs
docker logs joern-redis
# Restart Redis
docker restart joern-redis
Server connectivity
# Test server is running
curl http://localhost:4242/health
# Check server logs for errors
python main.py
Debug logging
export MCP_LOG_LEVEL=DEBUG
python main.py
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make changes and add tests
- Run tests:
pytest && black . && flake8 - Submit a pull request
Acknowledgments
- Joern - Static analysis platform
- FastMCP - MCP framework
- Model Context Protocol - MCP specification

Notion Api MCP
Certified
A Python-based MCP Server that provides advanced to-do list management and content organization functions through the Notion API, enabling seamless integration between AI models and Notion.
Python
18.3K
4.5 points

Duckduckgo MCP Server
Certified
The DuckDuckGo Search MCP Server provides web search and content scraping services for LLMs such as Claude.
Python
57.5K
4.3 points

Gitlab MCP Server
Certified
The GitLab MCP server is a project based on the Model Context Protocol that provides a comprehensive toolset for interacting with GitLab accounts, including code review, merge request management, CI/CD configuration, and other functions.
TypeScript
19.7K
4.3 points

Markdownify MCP
Markdownify is a multi-functional file conversion service that supports converting multiple formats such as PDFs, images, audio, and web page content into Markdown format.
TypeScript
29.0K
5 points

Unity
Certified
UnityMCP is a Unity editor plugin that implements the Model Context Protocol (MCP), providing seamless integration between Unity and AI assistants, including real - time state monitoring, remote command execution, and log functions.
C#
25.3K
5 points

Figma Context MCP
Framelink Figma MCP Server is a server that provides access to Figma design data for AI programming tools (such as Cursor). By simplifying the Figma API response, it helps AI more accurately achieve one - click conversion from design to code.
TypeScript
53.6K
4.5 points

Gmail MCP Server
A Gmail automatic authentication MCP server designed for Claude Desktop, supporting Gmail management through natural language interaction, including complete functions such as sending emails, label management, and batch operations.
TypeScript
19.3K
4.5 points

Minimax MCP Server
The MiniMax Model Context Protocol (MCP) is an official server that supports interaction with powerful text-to-speech, video/image generation APIs, and is suitable for various client tools such as Claude Desktop and Cursor.
Python
38.9K
4.8 points
ยฉ 2025AIBase
