FDEP MCP Server

Un servidor de análisis estático de código para bases de código Haskell a escala empresarial, que proporciona más de 40 herramientas de análisis exhaustivas.

Documentación

Servidor FDEP MCP

Un servidor de Protocolo de Contexto de Modelo (MCP) de Análisis Estático de Código que ofrece más de 40 herramientas integrales de análisis para bases de código Haskell a escala empresarial. Se integra perfectamente con herramientas y clientes de IA compatibles con MCP para proporcionar inteligencia de código y perspectivas arquitectónicas en tiempo real.

🔌 Cumple con el Protocolo MCP | 🏗️ Más de 40 Herramientas de Análisis | ⚡ Consultas en Tiempo Real

✨ Características del Servidor MCP

📊 Más de 40 Herramientas Integrales de Análisis

  • Análisis de Módulos: 7 herramientas para estructura de módulos y dependencias
  • Análisis de Funciones: 8 herramientas para grafos de llamadas y métricas de complejidad
  • Sistema de Tipos: 6 herramientas para relaciones de tipos y patrones de uso
  • Análisis de Clases: 3 herramientas para análisis de typeclass e instancias
  • Análisis de Importaciones: 4 herramientas para visualización de dependencias
  • Consultas Avanzadas: 4 herramientas para consultas complejas de código basadas en JSON
  • Análisis de Patrones: 5 herramientas para detección de patrones de código
  • Ubicación de Código Fuente: 3 herramientas para análisis basado en ubicación
  • Análisis Mejorado: 3 herramientas para análisis estructural avanzado

🚀 Inicio Rápido

Requisitos Previos

  • Python 3.13+
  • Gestor de paquetes UV
  • Base de datos PostgreSQL (debe estar en ejecución)
  • Salida de FDEP del plugin Spider (para análisis integral)

Configuración de la Base de Datos

Antes de la instalación, asegúrese de que PostgreSQL esté en ejecución y cree la base de datos requerida:

# 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)

Instalación

# 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 

Configuración de la Base de Datos e Importación de Datos

Importante: Complete este paso antes de usar el servidor MCP con cualquier cliente.

fdep-mcp-server --setup --verbose

Este comando:

  • Inicializará el esquema de la base de datos PostgreSQL
  • Importará y procesará sus datos de FDEP (si FDEP_PATH está configurado)
  • Configurará todos los índices y relaciones necesarios

Nota: La primera ejecución toma tiempo ya que procesa conjuntos de datos FDEP grandes.

Configurar el Entorno

cp .env.example .env
# Edit .env with your database settings and FDEP_PATH

🔌 Configuración del Cliente MCP

Después de la instalación, configure su cliente MCP preferido para conectarse al servidor FDEP:

Claude Code

Agregue a su ~/.claude/settings.json:

{
  "mcpServers": {
    "fdepAnalyzer": {
      "command": "fdep-mcp-server",
      "args": [],
      "env": {
        "FDEP_PATH": "/path/to/your/fdep/output"
      }
    }
  }
}

Nota: La primera vez que se ejecuta el servidor toma tiempo ya que importa y procesa los datos de FDEP.

Cursor

Agregue a su configuración de Cursor (Cmd/Ctrl + , → Extensiones → MCP):

{
  "mcp.servers": {
    "fdepAnalyzer": {
      "command": "fdep-mcp-server",
      "args": [],
      "env": {
        "FDEP_PATH": "/path/to/your/fdep/output",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

Nota: La primera vez que se ejecuta el servidor toma tiempo ya que importa y procesa los datos de FDEP.

VS Code

Instale la extensión MCP y agregue a settings.json:

{
  "mcp.servers": [
    {
      "name": "fdepAnalyzer",
      "command": "fdep-mcp-server", 
      "args": [],
      "env": {
        "FDEP_PATH": "/path/to/your/fdep/output"
      }
    }
  ]
}

Nota: La primera vez que se ejecuta el servidor toma tiempo ya que importa y procesa los datos de FDEP.

Cline

Agregue a su configuración de Cline:

{
  "mcpServers": {
    "fdepAnalyzer": {
      "command": "fdep-mcp-server",
      "args": [],
      "env": {
        "FDEP_PATH": "/path/to/your/fdep/output"
      }
    }
  }
}

Nota: La primera vez que se ejecuta el servidor toma tiempo ya que importa y procesa los datos de FDEP.

Continue.dev

Agregue a su .continue/config.json:

{
  "mcpServers": [
    {
      "name": "fdepAnalyzer",
      "command": "fdep-mcp-server",
      "args": [],
      "env": {
        "FDEP_PATH": "/path/to/your/fdep/output"
      }
    }
  ]
}

Nota: La primera vez que se ejecuta el servidor toma tiempo ya que importa y procesa los datos de FDEP.

Cliente MCP Genérico

Para cualquier cliente compatible con MCP:

{
  "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"
  }
}

Nota: La primera vez que se ejecuta el servidor toma tiempo ya que importa y procesa los datos de FDEP.

Variables de Entorno para Todos los Clientes

# 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=false

Verificar la Conexión

Después de configurar su cliente, verifique la conexión:

  1. Inicie su cliente MCP
  2. Busque "fdepAnalyzer" en las herramientas/servidores disponibles
  3. Pruebe con una consulta simple: list_modules(limit=5)
  4. Debería ver sus módulos Haskell listados

🛠️ Herramientas MCP Disponibles (Más de 40 en Total)

📁 Análisis de Módulos (7 herramientas)

HerramientaDescripción
initialize_databaseConfigurar la base de datos e importar datos de FDEP
list_modulesObtener lista de módulos con filtrado
get_module_detailsInformación detallada del módulo con estadísticas
get_functions_by_moduleListar todas las funciones en un módulo
search_modulesBúsqueda de módulos basada en patrones
get_module_dependenciesAnálisis de dependencias de módulos
get_code_statisticsEstadísticas integrales de la base de código

⚡ Análisis de Funciones (8 herramientas)

HerramientaDescripción
get_function_detailsInformación detallada de la función
search_functionsBuscar funciones por patrón
get_most_called_functionsEncontrar funciones llamadas con frecuencia
get_function_call_graphJerarquía de llamadas de funciones
get_function_callersQuién llama a esta función
get_function_calleesQué funciones llama esta
analyze_function_complexityMétricas de complejidad de funciones
get_function_contextContexto completo de la función con dependencias

🏗️ Análisis del Sistema de Tipos (6 herramientas)

HerramientaDescripción
list_typesObtener tipos por módulo/patrón con categorías
get_type_detailsInformación de tipos con constructores/campos
search_typesBúsqueda avanzada de tipos con filtrado
get_type_dependenciesAnálisis de dependencias de tipos
analyze_type_usagePatrones de uso de tipos
get_nested_typesObtener definiciones de tipos anidados

📚 Análisis de Clases (3 herramientas)

HerramientaDescripción
list_classesObtener definiciones de clases con filtrado
get_class_detailsInformación de clases con instancias
search_classesBúsqueda de clases basada en patrones

📦 Análisis de Importaciones (4 herramientas)

HerramientaDescripción
analyze_importsPatrones de importación y dependencias
get_import_graphGrafos de relaciones de importación de módulos
find_unused_importsCandidatos potenciales de limpieza
get_import_detailsInformación integral de importaciones

🔍 Consultas Avanzadas (4 herramientas)

HerramientaDescripción
execute_queryConsultas SQL básicas
execute_advanced_queryConsultas complejas basadas en JSON con uniones
execute_custom_queryConsultas SQL personalizadas con parámetros
find_cross_module_callsUso de funciones entre módulos

🎯 Análisis de Patrones (5 herramientas)

HerramientaDescripción
find_similar_functionsEncontrar funciones similares a una función dada
find_code_patternsEncontrar patrones de código recurrentes
group_similar_functionsAgrupar funciones por similitud
build_type_dependency_graphConstruir grafo integral de dependencias de tipos
analyze_type_relationshipsAnalizar relaciones profundas de tipos

📍 Ubicación de Código Fuente (3 herramientas)

HerramientaDescripción
find_element_by_locationEncontrar elementos de código por ubicación de fuente
get_location_contextObtener contexto alrededor de una ubicación de fuente
generate_function_importsGenerar declaraciones de importación para funciones

🔬 Análisis Mejorado (3 herramientas)

HerramientaDescripción
pattern_match_codeCoincidencia avanzada de patrones para estructuras de código
analyze_cross_module_dependenciesAnálisis integral de dependencias
enhanced_function_call_graphGrafos de llamadas mejorados con opciones avanzadas

🔍 Consultas de Ejemplo

Análisis Básico

# 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)

Análisis Avanzado

# 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
})

Análisis Arquitectónico

# 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)

⚙️ Configuración

Variables de Entorno (.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=INFO

Integración con el Plugin Spider

Para proyectos Haskell que usan GHC 9.2.8:

  1. Agregar la entrada flake de Spider
  2. Configurar cabal con los plugins fdep y fieldInspector
  3. Ejecutar el servidor socket durante la compilación
  4. Generar la salida de FDEP para el análisis

Distribución de Herramientas

  • 📁 Análisis de Módulos: 7 herramientas
  • ⚡ Análisis de Funciones: 8 herramientas
  • 🏗️ Sistema de Tipos: 6 herramientas
  • 📚 Análisis de Clases: 3 herramientas
  • 📦 Análisis de Importaciones: 4 herramientas
  • 🔍 Consultas Avanzadas: 4 herramientas
  • 🎯 Análisis de Patrones: 5 herramientas
  • 📍 Ubicación de Código Fuente: 3 herramientas
  • 🔬 Análisis Mejorado: 3 herramientas