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)¶
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¶
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¶
Solución: Instalar el servidor:
gopls no se encuentra¶
Solución: Añadir ~/go/bin al PATH:
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¶
- CI/CD: No usar LSP (añade dependencias y tiempo)
- Desarrollo local: Usar LSP para análisis más preciso
- Auditorías: Siempre con LSP para máxima precisión