Joern MCP
J

Joern MCP

2.5 points
5.6K

Installation

Copy the following command to your Client for configuration
Note: Your key is sensitive information, do not share it with anyone.

๐Ÿš€ ๐Ÿ•ท๏ธ 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

  1. Clone the repository and install dependencies:
git clone https://github.com/Lekssays/joern-mcp.git
cd joern-mcp
pip install -r requirements.txt
  1. Setup (builds Joern image and starts Redis):
./setup.sh
  1. Configure (optional):
cp config.example.yaml config.yaml
# Edit config.yaml as needed
  1. 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 URL
  • run_cpgql_query: Execute synchronous CPGQL queries with JSON output
  • run_cpgql_query_async: Execute asynchronous queries with status tracking
  • get_session_status: Check session state and metadata
  • list_sessions: View active sessions with filtering
  • close_session: Clean up session resources
  • list_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 filtering
  • list_methods: Discover all methods/functions with filtering by name, file, or external status
  • get_method_source: Retrieve actual source code for specific methods
  • list_calls: Find function call relationships and dependencies
  • get_call_graph: Build call graphs (outgoing callees or incoming callers) with configurable depth
  • list_parameters: Get detailed parameter information for methods
  • find_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

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature-name
  3. Make changes and add tests
  4. Run tests: pytest && black . && flake8
  5. Submit a pull request

Acknowledgments

Alternatives

C
Claude Context
Claude Context is an MCP plugin that provides in - depth context of the entire codebase for AI programming assistants through semantic code search. It supports multiple embedding models and vector databases to achieve efficient code retrieval.
TypeScript
9.5K
5 points
A
Acemcp
Acemcp is an MCP server for codebase indexing and semantic search, supporting automatic incremental indexing, multi-encoding file processing, .gitignore integration, and a Web management interface, helping developers quickly search for and understand code context.
Python
10.9K
5 points
B
Blueprint MCP
Blueprint MCP is a chart generation tool based on the Arcade ecosystem. It uses technologies such as Nano Banana Pro to automatically generate visual charts such as architecture diagrams and flowcharts by analyzing codebases and system architectures, helping developers understand complex systems.
Python
9.0K
4 points
M
MCP Agent Mail
MCP Agent Mail is a mail - based coordination layer designed for AI programming agents, providing identity management, message sending and receiving, file reservation, and search functions, supporting asynchronous collaboration and conflict avoidance among multiple agents.
Python
10.5K
5 points
M
MCP
The Microsoft official MCP server provides search and access functions for the latest Microsoft technical documentation for AI assistants
12.7K
5 points
A
Aderyn
Aderyn is an open - source Solidity smart contract static analysis tool written in Rust, which helps developers and security researchers discover vulnerabilities in Solidity code. It supports Foundry and Hardhat projects, can generate reports in multiple formats, and provides a VSCode extension.
Rust
10.2K
5 points
D
Devtools Debugger MCP
The Node.js Debugger MCP server provides complete debugging capabilities based on the Chrome DevTools protocol, including breakpoint setting, stepping execution, variable inspection, and expression evaluation.
TypeScript
10.4K
4 points
S
Scrapling
Scrapling is an adaptive web scraping library that can automatically learn website changes and re - locate elements. It supports multiple scraping methods and AI integration, providing high - performance parsing and a developer - friendly experience.
Python
11.6K
5 points
N
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
D
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
G
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
M
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
U
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
F
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
G
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
M
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