Skip to content

Integración con Servidores de Lenguaje (LSP)

Versión: 1.0 Última actualización: 2026-01-26


Introducción

mcp-scan puede usar Language Server Protocol (LSP) para obtener análisis más preciso basado en tipos. Esto permite detectar vulnerabilidades que requieren conocimiento del sistema de tipos del lenguaje.


Qué es LSP

LSP (Language Server Protocol) es un protocolo estándar para comunicarse con servidores de lenguaje. Estos servidores proporcionan:

  • Información de tipos
  • Navegación a definiciones
  • Búsqueda de referencias
  • Jerarquía de llamadas

mcp-scan usa esta información para mejorar la detección de vulnerabilidades.


Servidores Soportados

Lenguaje Servidor Instalación
Python Pyright npm install -g pyright
TypeScript typescript-language-server npm install -g typescript typescript-language-server
JavaScript typescript-language-server npm install -g typescript typescript-language-server
Go gopls go install golang.org/x/tools/gopls@latest

Instalación de Servidores

Python (Pyright)

# Instalar con npm
npm install -g pyright

# Verificar
pyright-langserver --version

TypeScript/JavaScript

# Instalar servidor y TypeScript
npm install -g typescript typescript-language-server

# Verificar
typescript-language-server --version

Go (gopls)

# Instalar gopls
go install golang.org/x/tools/gopls@latest

# Añadir ~/go/bin al PATH (si no está)
echo 'export PATH=$PATH:~/go/bin' >> ~/.bashrc
source ~/.bashrc

# Verificar
gopls version

Uso

Habilitar LSP en Escaneo

# Escaneo con LSP
mcp-scan scan --lsp ./mi-proyecto

# Escaneo con modo debug para ver actividad LSP
LSP_DEBUG=1 mcp-scan scan --lsp ./mi-proyecto

Configuración en YAML

# .mcp-scan.yaml
lsp:
  enabled: true
  languages:
    - python
    - typescript
    - javascript
    - go

Output

Normal

[*] Scanning ./mi-proyecto...
[*] LSP: enabled
[*] Discovered 5 files
[*] Running pattern analysis...
[+] Scan completed in 2.3s
[+] Found 3 findings (2 high, 1 medium)

Con Debug (LSP_DEBUG=1)

[LSP] Found 5 symbols, 4 functions in server.py
[LSP] Analyzing tool get_company_data at server.py:31:4
[LSP]   type: (function) def get_company_data(data_type: str) -> str
[LSP]   call graph: get_company_data -> 1 callees

Qué Detecta

LSP-TYPE-001: Tipos Peligrosos

Detecta parámetros con tipos inseguros como Any u object.

# VULNERABLE - detectado por LSP
from typing import Any

@mcp.tool()
async def process(data: Any):  # Tipo peligroso
    eval(str(data))

LSP-SINK-001: Camino a Sink Peligroso

Detecta cuando un tool puede llegar a una función peligrosa.

# VULNERABLE - detectado por call graph
@mcp.tool()
async def execute(cmd: str):
    helper(cmd)

def helper(command):
    os.system(command)  # Sink peligroso

Beneficios vs Sin LSP

Aspecto Sin LSP Con LSP
Detección de tipos Solo patrones Tipos reales del servidor
Call graph Basado en AST Preciso con resolución
Falsos positivos Más Menos
Velocidad Más rápido Un poco más lento
Requisitos Ninguno Servidor instalado

Troubleshooting

El servidor no se encuentra

Error: language server not found: pyright-langserver

Solución: Instalar el servidor:

npm install -g pyright

gopls no se encuentra

Error: command not found: gopls

Solución: Añadir ~/go/bin al PATH:

export PATH=$PATH:~/go/bin

No hay información de tipos

Verificar que el proyecto tiene configuración: - Python: pyproject.toml o setup.py - TypeScript: tsconfig.json - Go: go.mod

Verificar instalación

# Test rápido de cada servidor
pyright-langserver --version
typescript-language-server --version
gopls version

Recomendaciones

  1. CI/CD: No usar LSP (añade dependencias y tiempo)
  2. Desarrollo local: Usar LSP para análisis más preciso
  3. Auditorías: Siempre con LSP para máxima precisión

Ver También