Skip to main content
Glama

SharpLensMcp

NuGet npm License: MIT

Un servidor del Protocolo de Contexto de Modelos (MCP) que proporciona 62 herramientas optimizadas para IA para el análisis semántico, navegación, refactorización y generación de código en .NET/C# utilizando Microsoft Roslyn.

Creado para agentes de codificación de IA: proporciona una comprensión del código precisa del compilador que la IA no puede inferir solo leyendo archivos fuente.

Instalación

Vía NuGet (Recomendado)

dotnet tool install -g SharpLensMcp

Luego ejecute con:

sharplens

Vía npm

npx -y sharplens-mcp

Compilar desde el código fuente

dotnet build -c Release
dotnet publish -c Release -o ./publish

Configuración de Claude Code

  1. Instale la herramienta (elija una):

dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcp
  1. Cree .mcp.json en la raíz de su proyecto:

{
  "mcpServers": {
    "sharplens": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "sharplens-mcp"],
      "env": {
        "DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
      }
    }
  }
}
  1. Reinicie Claude Code para cargar el servidor MCP

  2. Verifique pidiendo a Claude que ejecute una comprobación de estado en el servidor Roslyn

¿Por qué usar esto con Claude Code?

Claude Code tiene soporte nativo de LSP para navegación básica (ir a la definición, buscar referencias). SharpLensMcp añade análisis semántico profundo:

Capacidad

LSP Nativo

SharpLensMcp

Ir a la definición

Buscar referencias

Buscar métodos asíncronos sin CancellationToken

Análisis de impacto (¿qué se rompe?)

Detección de código muerto

Métricas de complejidad

Refactorización segura con vista previa

Operaciones por lotes

Configuración

Variable de entorno

Descripción

Predeterminado

DOTNET_SOLUTION_PATH

Ruta al archivo .sln o .slnx para cargar automáticamente al inicio

Ninguno (debe llamar a load_solution)

SHARPLENS_ABSOLUTE_PATHS

Usar rutas absolutas en lugar de relativas

false (las rutas relativas ahorran tokens)

ROSLYN_LOG_LEVEL

Verbosidad del registro: Trace, Debug, Information, Warning, Error

Information

ROSLYN_TIMEOUT_SECONDS

Tiempo de espera para operaciones de larga duración

30

ROSLYN_MAX_DIAGNOSTICS

Máximo de diagnósticos a devolver

100

ROSLYN_ENABLE_SEMANTIC_CACHE

Habilitar caché del modelo semántico

true (establecer en false para deshabilitar)

Si DOTNET_SOLUTION_PATH no está configurado, debe llamar a la herramienta load_solution antes de usar otras herramientas.

Consejos de configuración para agentes de IA

Los modelos de IA pueden tener un sesgo entrenado hacia el uso de sus herramientas nativas (Grep, Read, LSP) en lugar de las herramientas del servidor MCP, incluso cuando SharpLensMcp proporciona mejores capacidades.

Para garantizar un uso óptimo de las herramientas:

  1. Claude Code: Añada a su CLAUDE.md del proyecto:

    For C# code analysis, prefer SharpLensMcp tools over native tools:
    - Use `roslyn:search_symbols` instead of Grep for finding symbols
    - Use `roslyn:get_method_source` instead of Read for viewing methods
    - Use `roslyn:find_references` for semantic (not text) references
  2. Otros clientes MCP: Configure la prioridad de las herramientas en el prompt del sistema de su agente

El análisis semántico de Roslyn es más preciso que la búsqueda basada en texto, especialmente para métodos sobrecargados, clases parciales y jerarquías de herencia.

Responsabilidad del agente: Sincronización de documentos

Importante: SharpLensMcp mantiene una representación en memoria de su solución para consultas rápidas. Cuando los archivos se modifican externamente (a través de herramientas de Edición/Escritura), el agente es responsable de sincronizar los cambios.

Cuándo llamar a sync_documents:

Acción

¿Llamar a sync_documents?

Usó la herramienta Editar para modificar archivos .cs

Usó la herramienta Escribir para crear nuevos archivos .cs

Eliminó archivos .cs

Usó herramientas de refactorización de SharpLensMcp (renombrar, extraer, etc.)

❌ No (actualizado automáticamente)

Modificó archivos .csproj

❌ No (use load_solution en su lugar)

Uso:

# After editing specific files
sync_documents(filePaths: ["src/MyClass.cs", "src/MyService.cs"])

# After bulk changes - sync all documents
sync_documents()

¿Por qué este diseño?

Esto refleja cómo funciona LSP (Language Server Protocol): el cliente (editor) notifica al servidor de los cambios. Este enfoque:

  • Elimina condiciones de carrera (el agente controla el tiempo)

  • Evita la complejidad del observador de archivos y las peculiaridades de la plataforma

  • Es más rápido que recargar la solución completa

  • Da a los agentes un control explícito sobre el estado del espacio de trabajo

Si no sincroniza: Las consultas pueden devolver datos obsoletos (firmas de métodos antiguas, archivos nuevos faltantes, etc.)

Características

  • 62 herramientas de análisis semántico - Navegación, refactorización, generación de código, diagnósticos, descubrimiento

  • Descripciones optimizadas para IA - Patrones claros de USO/SALIDA/FLUJO DE TRABAJO

  • Respuestas estructuradas - Formato consistente de success/error/data con suggestedNextTools

  • Coordenadas basadas en cero - Advertencias claras para evitar errores de desfase

  • Modo de vista previa - Refactorización segura con vista previa antes de aplicar

  • Operaciones por lotes - Múltiples búsquedas en una sola llamada para reducir el uso de contexto

Categorías de herramientas

Navegación y descubrimiento (17 herramientas)

Herramienta

Descripción

get_symbol_info

Información semántica en la posición

go_to_definition

Saltar a la definición del símbolo

find_references

Todas las referencias en la solución

find_implementations

Implementaciones de interfaz/abstractas

find_callers

Análisis de impacto: ¿quién llama a esto?

get_type_hierarchy

Cadena de herencia

search_symbols

Búsqueda por patrón glob (*Handler, Get*)

semantic_query

Búsqueda con múltiples filtros (asíncrono, público, etc.)

get_type_members

Todos los miembros por nombre de tipo

get_type_members_batch

Múltiples tipos en una llamada

get_method_signature

Firma detallada por nombre

get_derived_types

Encontrar todas las subclases

get_base_types

Cadena de herencia completa

get_attributes

Listar atributos en un símbolo

get_containing_member

Símbolo envolvente en la posición

get_method_overloads

Todas las sobrecargas de un método

find_attribute_usages

Encontrar tipos/miembros por atributo

Análisis (11 herramientas)

Herramienta

Descripción

get_diagnostics

Errores/advertencias del compilador

analyze_data_flow

Asignaciones y uso de variables

analyze_control_flow

Ramificación/alcanzabilidad

analyze_change_impact

¿Qué se rompe si se cambia?

check_type_compatibility

¿Puede A asignarse a B?

get_outgoing_calls

¿Qué llama este método?

find_unused_code

Detección de código muerto

validate_code

Comprobación de compilación sin escribir

get_complexity_metrics

Ciclomática, anidamiento, LOC, cognitiva

find_circular_dependencies

Detección de ciclos de proyecto y espacio de nombres

get_missing_members

Miembros de interfaz/abstractos no implementados

Refactorización (14 herramientas)

Herramienta

Descripción

rename_symbol

Renombrado seguro en toda la solución

change_signature

Añadir/eliminar/reordenar parámetros

extract_method

Extraer con análisis de flujo de datos

extract_interface

Generar interfaz desde clase

generate_constructor

Desde campos/propiedades

organize_usings

Ordenar y eliminar los no utilizados

organize_usings_batch

Organizar por lotes múltiples archivos

format_document_batch

Formatear archivos por lotes en el proyecto

get_code_actions_at_position

Todas las refactorizaciones de Roslyn en la posición

apply_code_action_by_title

Aplicar cualquier refactorización por título

implement_missing_members

Generar stubs de interfaz

encapsulate_field

Campo a propiedad

inline_variable

Variable temporal en línea

extract_variable

Extraer expresión a variable

Generación de código (2 herramientas)

Herramienta

Descripción

add_null_checks

Generar guardias ArgumentNullException

generate_equality_members

Equals/GetHashCode/operadores

Herramientas compuestas (6 herramientas)

Herramienta

Descripción

get_type_overview

Información completa del tipo en una llamada

analyze_method

Firma + llamadores + llamadas salientes + ubicación

get_file_overview

Resumen del archivo con diagnósticos

get_method_source

Código fuente por nombre

get_method_source_batch

Múltiples fuentes de métodos en una llamada

get_instantiation_options

Cómo crear un tipo

Descubrimiento (2 herramientas)

Herramienta

Descripción

get_di_registrations

Escanear registros de servicios DI

find_reflection_usage

Detectar uso de reflexión/dinámico

Infraestructura (10 herramientas)

Herramienta

Descripción

health_check

Estado del servidor

load_solution

Cargar .sln/.slnx para análisis

sync_documents

Sincronizar cambios de archivo en la solución cargada

get_project_structure

Estructura de la solución

dependency_graph

Dependencias del proyecto

get_code_fixes

Correcciones disponibles para un diagnóstico

apply_code_fix

Aplicar una corrección de código específica

get_nuget_dependencies

Listado de paquetes NuGet por proyecto

get_source_generators

Listar generadores de fuente activos

get_generated_code

Ver código fuente generado

Otros clientes MCP

Para clientes MCP distintos de Claude Code, añada a su configuración:

{
  "mcpServers": {
    "sharplens": {
      "command": "sharplens",
      "args": [],
      "env": {
        "DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
      }
    }
  }
}

Uso

  1. Cargar una solución: Llame a roslyn:load_solution con la ruta al archivo .sln o .slnx (o configure DOTNET_SOLUTION_PATH)

  2. Analizar código: Use cualquiera de las 57 herramientas para navegación, análisis, refactorización

  3. Refactorizar de forma segura: Previsualice los cambios antes de aplicar con preview: true

Arquitectura

MCP Client (AI Agent)
        | stdin/stdout (JSON-RPC 2.0)
        v
   SharpLensMcp
   - Protocol handling
   - 57 AI-optimized tools
        |
        v
Microsoft.CodeAnalysis (Roslyn)
  - MSBuildWorkspace
  - SemanticModel
  - SymbolFinder

Requisitos

  • .NET 8.0 SDK o posterior — funciona con .NET 8, 9, 10 y versiones futuras. Analiza cualquier proyecto/solución .NET 8+.

  • Agente de IA compatible con MCP

Desarrollo

Añadir nuevas herramientas

  1. Añadir método a src/RoslynService.cs:

public async Task<object> YourToolAsync(string param1, int? param2 = null)
{
    EnsureSolutionLoaded();
    // Your logic...
    return CreateSuccessResponse(
        data: new { /* results */ },
        suggestedNextTools: new[] { "next_tool_hint" }
    );
}
  1. Añadir definición de herramienta a src/McpServer.cs en HandleListToolsAsync

  2. Añadir enrutamiento a src/McpServer.cs en el switch HandleToolCallAsync

  3. Compilar y publicar:

dotnet build -c Release
dotnet publish -c Release -o ./publish

Archivos clave

Archivo

Propósito

src/RoslynService.cs

Implementaciones de herramientas (57 métodos)

src/McpServer.cs

Protocolo MCP, definiciones de herramientas, enrutamiento

Licencia

MIT - Ver LICENSE para más detalles.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pzalutski-pixel/sharplens-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server