FDEP MCP Server
Provides 40+ static code analysis tools for enterprise-scale Haskell codebases, including module analysis, function call graphs, type system relationships, typeclass analysis, import dependencies, and complexity metrics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FDEP MCP Server analyze the call graph for the processPayment function in the Billing module"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FDEP MCP Server
A Static Code Analysis Model Context Protocol (MCP) server delivering 40+ comprehensive analysis tools for enterprise-scale Haskell codebases. Seamlessly integrates with MCP-compatible AI tools and clients to provide real-time code intelligence and architectural insights.
π MCP Protocol Compliant | ποΈ 40+ Analysis Tools | β‘ Real-time Queries
β¨ MCP Server Features
π 40+ Comprehensive Analysis Tools
Module Analysis: 7 tools for module structure and dependencies
Function Analysis: 8 tools for call graphs and complexity metrics
Type System: 6 tools for type relationships and usage patterns
Class Analysis: 3 tools for typeclass and instance analysis
Import Analysis: 4 tools for dependency visualization
Advanced Queries: 4 tools for complex JSON-based code queries
Pattern Analysis: 5 tools for code pattern detection
Source Location: 3 tools for location-based analysis
Enhanced Analysis: 3 tools for advanced structural analysis
Related MCP server: OrgBrain MCP Server
π Quick Start
Prerequisites
Python 3.13+
UV package manager
PostgreSQL database (must be running)
FDEP output from Spider plugin (for comprehensive analysis)
Database Setup
Before installation, ensure PostgreSQL is running and create the required database:
# Start PostgreSQL (if not already running)
# On macOS with Homebrew:
brew services start postgresql
# On Ubuntu/Debian:
sudo systemctl start postgresql
# Create the database
createdb code_as_data # this should match with you $DB_NAME value in .env file (DEFAULT: code_as_data)Installation
# Clone the repository
git clone https://github.com/juspay/fdep-mcp-server.git
cd fdep_mcp
# Install globally with UV (recommended)
uv tool install .
# OR install globally with pipx
# pipx install .
# OR system-wide installation
# pip install .vi Database Setup and Data Import
Important: Complete this step before using the MCP server with any client.
fdep-mcp-server --setup --verboseThis command will:
Initialize the PostgreSQL database schema
Import and process your FDEP data (if FDEP_PATH is configured)
Set up all necessary indexes and relationships
Note: The first run takes time as it processes large FDEP datasets.
Configure Environment
cp .env.example .env
# Edit .env with your database settings and FDEP_PATHπ MCP Client Configuration
After installation, configure your preferred MCP client to connect to the FDEP server:
Claude Code
Add to your ~/.claude/settings.json:
{
"mcpServers": {
"fdepAnalyzer": {
"command": "fdep-mcp-server",
"args": [],
"env": {
"FDEP_PATH": "/path/to/your/fdep/output"
}
}
}
}Note: The first time running the server takes time as it imports and processes the FDEP data.
Cursor
Add to your Cursor settings (Cmd/Ctrl + , β Extensions β MCP):
{
"mcp.servers": {
"fdepAnalyzer": {
"command": "fdep-mcp-server",
"args": [],
"env": {
"FDEP_PATH": "/path/to/your/fdep/output",
"LOG_LEVEL": "INFO"
}
}
}
}Note: The first time running the server takes time as it imports and processes the FDEP data.
VS Code
Install the MCP extension and add to settings.json:
{
"mcp.servers": [
{
"name": "fdepAnalyzer",
"command": "fdep-mcp-server",
"args": [],
"env": {
"FDEP_PATH": "/path/to/your/fdep/output"
}
}
]
}Note: The first time running the server takes time as it imports and processes the FDEP data.
Cline
Add to your Cline configuration:
{
"mcpServers": {
"fdepAnalyzer": {
"command": "fdep-mcp-server",
"args": [],
"env": {
"FDEP_PATH": "/path/to/your/fdep/output"
}
}
}
}Note: The first time running the server takes time as it imports and processes the FDEP data.
Continue.dev
Add to your .continue/config.json:
{
"mcpServers": [
{
"name": "fdepAnalyzer",
"command": "fdep-mcp-server",
"args": [],
"env": {
"FDEP_PATH": "/path/to/your/fdep/output"
}
}
]
}Note: The first time running the server takes time as it imports and processes the FDEP data.
Generic MCP Client
For any MCP-compatible client:
{
"server_name": "fdepAnalyzer",
"command": "fdep-mcp-server",
"args": [],
"environment": {
"FDEP_PATH": "/path/to/your/fdep/output",
"DB_HOST": "localhost",
"DB_NAME": "code_as_data",
"LOG_LEVEL": "INFO"
}
}Note: The first time running the server takes time as it imports and processes the FDEP data.
Environment Variables for All Clients
# Required
FDEP_PATH=/path/to/your/fdep/output
# Database (if different from defaults)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=code_as_data
DB_USER=postgres
DB_PASSWORD=postgres
# Optional
LOG_LEVEL=INFO
DEV_MODE=falseVerify Connection
After configuring your client, verify the connection:
Start your MCP client
Look for "fdepAnalyzer" in available tools/servers
Test with a simple query:
list_modules(limit=5)You should see your Haskell modules listed
π οΈ MCP Tools Available (40+ Total)
π Module Analysis (7 tools)
Tool | Description |
| Setup database and import FDEP data |
| Get list of modules with filtering |
| Detailed module info with statistics |
| List all functions in a module |
| Pattern-based module search |
| Module dependency analysis |
| Comprehensive codebase statistics |
β‘ Function Analysis (8 tools)
Tool | Description |
| Detailed function information |
| Search functions by pattern |
| Find frequently called functions |
| Function call hierarchy |
| Who calls this function |
| What functions this calls |
| Function complexity metrics |
| Complete function context with dependencies |
ποΈ Type System Analysis (6 tools)
Tool | Description |
| Get types by module/pattern with categories |
| Type info with constructors/fields |
| Advanced type search with filtering |
| Type dependency analysis |
| Type usage patterns |
| Get nested type definitions |
π Class Analysis (3 tools)
Tool | Description |
| Get class definitions with filtering |
| Class info with instances |
| Pattern-based class search |
π¦ Import Analysis (4 tools)
Tool | Description |
| Import patterns and dependencies |
| Module import relationship graphs |
| Potential cleanup candidates |
| Comprehensive import information |
π Advanced Queries (4 tools)
Tool | Description |
| Basic SQL queries |
| JSON-based complex queries with joins |
| Custom SQL queries with parameters |
| Cross-module function usage |
π― Pattern Analysis (5 tools)
Tool | Description |
| Find functions similar to a given function |
| Find recurring code patterns |
| Group functions by similarity |
| Build comprehensive type dependency graph |
| Analyze deep type relationships |
π Source Location (3 tools)
Tool | Description |
| Find code elements by source location |
| Get context around a source location |
| Generate import statements for functions |
π¬ Enhanced Analysis (3 tools)
Tool | Description |
| Advanced pattern matching for code structures |
| Comprehensive dependency analysis |
| Enhanced call graphs with advanced options |
π Example Queries
Basic Analysis
# Search for validation functions
search_functions(pattern="validation", limit=10)
# Get details about main functions
get_function_details(function_name="main")
# Find most called functions
get_most_called_functions(limit=20)
# List modules in a specific area
list_modules(limit=50)Advanced Analysis
# Get function call hierarchy
get_function_call_graph(function_name="processData", depth=3)
# Analyze type dependencies
get_type_dependencies(type_name="User", include_dependents=true)
# Find cross-module function calls
find_cross_module_calls(source_module="Services", target_module="Database")
# Complex JSON query
execute_advanced_query({
"type": "function",
"conditions": [
{"field": "name", "operator": "like", "value": "%Handler%"}
],
"limit": 50
})Architectural Analysis
# Module dependency analysis
get_module_dependencies(module_name="Core.Services", include_dependents=true)
# Import relationship graph
get_import_graph(root_module="Main", depth=3)
# Complexity analysis
analyze_function_complexity(module_name="BusinessLogic", min_complexity=5)
# Comprehensive statistics
get_code_statistics(include_details=true)βοΈ Configuration
Environment Variables (.env)
# Database
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432
DB_NAME=code_as_data
# FDEP Data Source
FDEP_PATH=/path/to/your/fdep/output
# Logging
LOG_LEVEL=INFOSpider Plugin Integration
For Haskell projects using GHC 9.2.8:
Add Spider flake input
Configure cabal with fdep and fieldInspector plugins
Run socket server during build
Generate FDEP output for analysis
Tool Distribution
π Module Analysis: 7 tools
β‘ Function Analysis: 8 tools
ποΈ Type System: 6 tools
π Class Analysis: 3 tools
π¦ Import Analysis: 4 tools
π Advanced Queries: 4 tools
π― Pattern Analysis: 5 tools
π Source Location: 3 tools
π¬ Enhanced Analysis: 3 tools
Available Tools
42 toolsanalyze_cross_module_dependenciesC
Comprehensive analysis of cross-module dependencies and coupling
Inputs: analysis_type, module_pattern, include_metrics, threshold, +1 more.
analyze_function_complexityC
Analyze function complexity metrics including call count and signature complexity
Inputs: module_name, min_complexity, limit.
analyze_importsC
Analyze import patterns and dependencies for modules
Inputs: module_name, import_pattern, include_qualified, limit.
analyze_type_relationshipsC
Analyze deep type relationships and dependencies
Inputs: type_name (required), source_module (required), analysis_depth, include_dependents, +1 more.
analyze_type_usageC
Analyze how types are used throughout the codebase
Inputs: type_name, module_name, usage_threshold, limit.
build_type_dependency_graphC
Build a comprehensive type dependency graph showing relationships between types
Inputs: root_type, module_pattern, include_external, max_depth.
enhanced_function_call_graphC
Generate enhanced function call graphs with advanced options
Inputs: function_name (required), module_name, max_depth, graph_format, +2 more.
execute_advanced_queryC
Execute complex JSON-based queries with joins and advanced conditions
Inputs: query (required).
execute_custom_queryC
Execute custom SQL queries on the code database with parameters
Inputs: query (required), parameters, limit.
execute_queryC
Execute a basic SQL query on the code database
Inputs: query_type (required), filters.
find_code_patternsC
Find recurring code patterns across functions
Inputs: pattern_code (required), min_matches, module_pattern, limit.
find_cross_module_callsC
Find function calls that cross module boundaries
Inputs: source_module, target_module, limit.
find_element_by_locationC
Find code elements (functions, types, classes, imports) by source location
Inputs: file_path (required), line_number (required), base_directory, element_types.
find_similar_functionsC
Find functions similar to a given function based on signature and code
Inputs: function_name (required), module_name, similarity_threshold, limit.
find_unused_importsC
Find potentially unused imports in modules
Inputs: module_name, package_pattern, limit.
generate_function_importsB
Generate all necessary import statements for a function or code element
Inputs: element_name (required), source_module (required), element_type, import_style.
get_class_detailsB
Get detailed information about a specific class including methods and instances
Inputs: class_name (required), module_name, include_instances.
get_code_statisticsC
Get comprehensive statistics about the codebase
Inputs: include_details.
get_function_calleesC
Get all functions called by a specific function
Inputs: function_name (required), module_name, limit.
get_function_callersB
Get all functions that call a specific function
Inputs: function_name (required), module_name, limit.
get_function_call_graphB
Get function call hierarchy showing what functions this function calls and what calls it
Inputs: function_name (required), module_name, depth, include_callers, +1 more.
get_function_contextC
Get complete context for a function including all used types and functions
Inputs: function_name (required), module_name, include_prompts, include_local_definitions, +1 more.
get_function_detailsB
Get detailed information about a specific function
Inputs: function_name (required), module_name.
get_functions_by_moduleB
Get all functions defined in a specific module
Inputs: module_name (required), limit, include_signatures.
get_import_detailsC
Get detailed information about imports in a module
Inputs: module_name (required), include_source_info.
get_import_graphC
Generate module import relationship graph
Inputs: root_module, depth, include_external, limit.
get_location_contextC
Get comprehensive context around a source location
Inputs: file_path (required), line_number (required), context_radius, include_dependencies.
get_module_dependenciesC
Analyze module dependencies and imports
Inputs: module_name (required), include_imports, include_dependents.
get_module_detailsC
Get detailed information about a specific module including function counts and statistics
Inputs: module_name (required).
get_most_called_functionsC
Get the most frequently called functions
Inputs: limit.
get_nested_typesC
Get all nested type definitions for specified types
Inputs: type_names (required), gateway_name (required), exclude_pattern, include_raw_definitions.
get_type_dependenciesC
Analyze type dependencies and relationships
Inputs: type_name (required), module_name, include_dependents, depth.
get_type_detailsC
Get detailed information about a specific type including constructors and fields
Inputs: type_name (required), module_name, include_constructors, include_fields.
group_similar_functionsC
Group functions by similarity to identify common patterns
Inputs: similarity_threshold, module_pattern, min_group_size, limit.
list_classesB
Get class definitions with filtering by module or pattern
Inputs: module_name, pattern, limit.
list_modulesC
Get list of all modules in the database
Inputs: limit.
list_typesC
Get types by module or pattern with support for different type categories
Inputs: module_name, pattern, type_category, limit.
pattern_match_codeC
Advanced pattern matching to find code structures
Inputs: pattern_type (required), pattern_config (required), limit.
search_classesC
Search for classes by name pattern with module filtering
Inputs: pattern (required), module_pattern, limit.
search_functionsB
Search for functions by name pattern
Inputs: pattern (required), limit.
search_modulesC
Search for modules by name pattern
Inputs: pattern (required), limit.
search_typesC
Search for types by name pattern with advanced filtering
Inputs: pattern (required), module_pattern, type_category, limit.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
TDQS
Scored across 42 tools
The tools cover distinct aspects of code analysis, but there is significant overlap in purpose that could cause confusion. For example, 'analyze_imports', 'get_import_details', and 'get_module_dependencies' all deal with imports, while 'analyze_type_relationships', 'analyze_type_usage', 'get_type_dependencies', and 'build_type_dependency_graph' focus on type analysis. Descriptions help differentiate them, but agents might struggle to choose the optimal tool for a given task due to these overlaps.
Most tools follow a consistent verb_noun naming pattern (e.g., 'analyze_cross_module_dependencies', 'get_function_details'), which aids readability. However, there are minor deviations such as 'enhanced_function_call_graph' (adjective-based) and 'pattern_match_code' (verb_noun order reversed), slightly disrupting the overall consistency. The naming is largely predictable but not perfectly uniform.
With 42 tools, the count is excessive for a code analysis server, making it heavy and potentially overwhelming for agents. While the domain is broad, many tools could be consolidated (e.g., multiple import-related tools) without losing functionality. This large number suggests poor scoping and may lead to inefficiency in tool selection and usage.
The tool set provides comprehensive coverage for code analysis, including dependency tracking, complexity metrics, query execution, and search capabilities across modules, functions, classes, and types. It supports CRUD-like operations for code elements (e.g., get, list, search, analyze) and handles advanced scenarios like pattern matching and graph generation, leaving no obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
AI-powered codebase analysis β call graphs, security, dead code, complexity. 150+ tools.
Enterprise code intelligence for M&A, security audits, and tech debt. Hosted server with 200k free.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
30+ deterministic dev and delivery tools: linting, metrics, diagrams, model advice, AI-text checks.
Related MCP Servers
- AlicenseAqualityDmaintenanceAnalyzes codebases to generate dependency graphs and architectural insights across multiple programming languages, helping developers understand code structure and validate against architectural rules.653 npm20MIT
- AlicenseNot gradedqualityDmaintenanceProvides knowledge extraction and cross-repo analysis tools for multi-repository organizations. It enables users to query type definitions, service dependencies, and infrastructure configurations across an entire organization's codebase.MIT
- AlicenseAqualityDmaintenanceMaps function and component dependencies in Haskell and ReScript codebases, providing LLMs with a real dependency graph for accurate test generation and change-impact analysis.10167 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides intelligent codebase analysis, dependency scanning, architecture detection, security vulnerability scanning, and automatic documentation generation for modern development teams.22 npmMIT