Skip to main content
Glama

SharpLensMcp

NuGet npm License: MIT

Ein Model Context Protocol (MCP)-Server, der 62 KI-optimierte Tools für die semantische .NET/C#-Codeanalyse, Navigation, Refactoring und Codegenerierung mittels Microsoft Roslyn bereitstellt.

Entwickelt für KI-Coding-Agenten – bietet compilergenaues Codeverständnis, das eine KI allein durch das Lesen von Quelldateien nicht ableiten kann.

Installation

Via NuGet (Empfohlen)

dotnet tool install -g SharpLensMcp

Anschließend ausführen mit:

sharplens

Via npm

npx -y sharplens-mcp

Aus Quellcode bauen

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

Claude Code Einrichtung

  1. Tool installieren (eines auswählen):

dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcp
  1. .mcp.json im Projektstammverzeichnis erstellen:

{
  "mcpServers": {
    "sharplens": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "sharplens-mcp"],
      "env": {
        "DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
      }
    }
  }
}
  1. Claude Code neu starten, um den MCP-Server zu laden

  2. Überprüfen, indem Sie Claude bitten, einen Health-Check auf dem Roslyn-Server durchzuführen

Warum dies mit Claude Code verwenden?

Claude Code verfügt über native LSP-Unterstützung für grundlegende Navigation (Gehe zu Definition, Referenzen finden). SharpLensMcp fügt tiefe semantische Analyse hinzu:

Fähigkeit

Natives LSP

SharpLensMcp

Gehe zu Definition

Referenzen finden

Async-Methoden ohne CancellationToken finden

Auswirkungsanalyse (was geht kaputt?)

Erkennung von totem Code

Komplexitätsmetriken

Sicheres Refactoring mit Vorschau

Batch-Operationen

Konfiguration

Umgebungsvariable

Beschreibung

Standard

DOTNET_SOLUTION_PATH

Pfad zur .sln oder .slnx Datei zum automatischen Laden beim Start

Keine (muss load_solution aufrufen)

SHARPLENS_ABSOLUTE_PATHS

Absolute statt relative Pfade verwenden

false (relative Pfade sparen Tokens)

ROSLYN_LOG_LEVEL

Ausführlichkeit der Protokollierung: Trace, Debug, Information, Warning, Error

Information

ROSLYN_TIMEOUT_SECONDS

Timeout für lang laufende Operationen

30

ROSLYN_MAX_DIAGNOSTICS

Maximale Anzahl der zurückzugebenden Diagnosen

100

ROSLYN_ENABLE_SEMANTIC_CACHE

Semantisches Modell-Caching aktivieren

true (auf false setzen zum Deaktivieren)

Wenn DOTNET_SOLUTION_PATH nicht gesetzt ist, müssen Sie das Tool load_solution aufrufen, bevor Sie andere Tools verwenden.

Tipps zur Konfiguration von KI-Agenten

KI-Modelle können eine trainierte Tendenz haben, ihre nativen Tools (Grep, Read, LSP) anstelle von MCP-Server-Tools zu verwenden, selbst wenn SharpLensMcp bessere Fähigkeiten bietet.

Um eine optimale Tool-Nutzung sicherzustellen:

  1. Claude Code: Fügen Sie dies zu Ihrer CLAUDE.md im Projekt hinzu:

    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. Andere MCP-Clients: Konfigurieren Sie die Tool-Priorität im System-Prompt Ihres Agenten

Die semantische Analyse von Roslyn ist genauer als textbasierte Suche, insbesondere bei überladenen Methoden, partiellen Klassen und Vererbungshierarchien.

Verantwortung des Agenten: Dokumentensynchronisierung

Wichtig: SharpLensMcp unterhält eine In-Memory-Repräsentation Ihrer Lösung für schnelle Abfragen. Wenn Dateien extern geändert werden (über Edit/Write-Tools), ist der Agent für die Synchronisierung der Änderungen verantwortlich.

Wann sync_documents aufrufen:

Aktion

sync_documents aufrufen?

Edit-Tool zum Ändern von .cs-Dateien verwendet

Ja

Write-Tool zum Erstellen neuer .cs-Dateien verwendet

Ja

.cs-Dateien gelöscht

Ja

SharpLensMcp Refactoring-Tools verwendet (umbenennen, extrahieren, etc.)

❌ Nein (automatisch aktualisiert)

.csproj-Dateien geändert

❌ Nein (verwenden Sie stattdessen load_solution)

Verwendung:

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

# After bulk changes - sync all documents
sync_documents()

Warum dieses Design?

Dies spiegelt die Funktionsweise von LSP (Language Server Protocol) wider – der Client (Editor) benachrichtigt den Server über Änderungen. Dieser Ansatz:

  • Eliminiert Race Conditions (der Agent steuert das Timing)

  • Vermeidet die Komplexität von Datei-Watchern und plattformspezifische Eigenheiten

  • Ist schneller als ein vollständiges Neuladen der Lösung

  • Gibt Agenten explizite Kontrolle über den Workspace-Status

Wenn Sie nicht synchronisieren: Abfragen können veraltete Daten zurückgeben (alte Methodensignaturen, fehlende neue Dateien, etc.)

Funktionen

  • 62 semantische Analysetools – Navigation, Refactoring, Codegenerierung, Diagnose, Erkennung

  • KI-optimierte Beschreibungen – Klare USAGE/OUTPUT/WORKFLOW-Muster

  • Strukturierte Antworten – Konsistentes success/error/data-Format mit suggestedNextTools

  • Nullbasierte Koordinaten – Klare Warnungen zur Vermeidung von Off-by-One-Fehlern

  • Vorschaumodus – Sicheres Refactoring mit Vorschau vor der Anwendung

  • Batch-Operationen – Mehrere Abfragen in einem Aufruf zur Reduzierung des Kontextverbrauchs

Tool-Kategorien

Navigation & Erkennung (17 Tools)

Tool

Beschreibung

get_symbol_info

Semantische Info an Position

go_to_definition

Zu Symboldefinition springen

find_references

Alle Referenzen in der gesamten Lösung

find_implementations

Interface-/abstrakte Implementierungen

find_callers

Auswirkungsanalyse - wer ruft dies auf?

get_type_hierarchy

Vererbungskette

search_symbols

Glob-Mustersuche (*Handler, Get*)

semantic_query

Multi-Filter-Suche (async, public, etc.)

get_type_members

Alle Member nach Typname

get_type_members_batch

Mehrere Typen in einem Aufruf

get_method_signature

Detaillierte Signatur nach Name

get_derived_types

Alle Unterklassen finden

get_base_types

Vollständige Vererbungskette

get_attributes

Attribute eines Symbols auflisten

get_containing_member

Umschließendes Symbol an Position

get_method_overloads

Alle Überladungen einer Methode

find_attribute_usages

Typen/Member nach Attribut finden

Analyse (11 Tools)

Tool

Beschreibung

get_diagnostics

Compiler-Fehler/-Warnungen

analyze_data_flow

Variablenzuweisungen und -nutzung

analyze_control_flow

Verzweigung/Erreichbarkeit

analyze_change_impact

Was geht bei Änderung kaputt?

check_type_compatibility

Kann A nach B zugewiesen werden?

get_outgoing_calls

Was ruft diese Methode auf?

find_unused_code

Erkennung von totem Code

validate_code

Kompilierungsprüfung ohne Schreiben

get_complexity_metrics

Zyklomatisch, Verschachtelung, LOC, kognitiv

find_circular_dependencies

Projekt- und Namespace-Zykluserkennung

get_missing_members

Nicht implementierte Interface-/abstrakte Member

Refactoring (14 Tools)

Tool

Beschreibung

rename_symbol

Sicheres Umbenennen in der gesamten Lösung

change_signature

Parameter hinzufügen/entfernen/neu anordnen

extract_method

Extrahieren mit Datenflussanalyse

extract_interface

Interface aus Klasse generieren

generate_constructor

Aus Feldern/Eigenschaften

organize_usings

Sortieren und ungenutzte entfernen

organize_usings_batch

Batch-Organisierung mehrerer Dateien

format_document_batch

Batch-Formatierung von Dateien im Projekt

get_code_actions_at_position

Alle Roslyn-Refactorings an Position

apply_code_action_by_title

Beliebiges Refactoring nach Titel anwenden

implement_missing_members

Interface-Stubs generieren

encapsulate_field

Feld zu Eigenschaft

inline_variable

Temporäre Variable inlinen

extract_variable

Ausdruck in Variable extrahieren

Codegenerierung (2 Tools)

Tool

Beschreibung

add_null_checks

ArgumentNullException-Wächter generieren

generate_equality_members

Equals/GetHashCode/Operatoren

Zusammengesetzte Tools (6 Tools)

Tool

Beschreibung

get_type_overview

Vollständige Typinfo in einem Aufruf

analyze_method

Signatur + Aufrufer + ausgehende Aufrufe + Ort

get_file_overview

Dateizusammenfassung mit Diagnosen

get_method_source

Quellcode nach Name

get_method_source_batch

Mehrere Methodenquellen in einem Aufruf

get_instantiation_options

Wie man einen Typ erstellt

Erkennung (2 Tools)

Tool

Beschreibung

get_di_registrations

DI-Dienstregistrierungen scannen

find_reflection_usage

Reflexions-/dynamische Nutzung erkennen

Infrastruktur (10 Tools)

Tool

Beschreibung

health_check

Serverstatus

load_solution

.sln/.slnx für Analyse laden

sync_documents

Dateiänderungen in geladene Lösung synchronisieren

get_project_structure

Lösungsstruktur

dependency_graph

Projektabhängigkeiten

get_code_fixes

Verfügbare Korrekturen für eine Diagnose

apply_code_fix

Spezifische Code-Korrektur anwenden

get_nuget_dependencies

NuGet-Paketliste pro Projekt

get_source_generators

Aktive Source-Generatoren auflisten

get_generated_code

Generierten Quellcode anzeigen

Andere MCP-Clients

Für andere MCP-Clients als Claude Code, fügen Sie dies zu Ihrer Konfiguration hinzu:

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

Verwendung

  1. Lösung laden: Rufen Sie roslyn:load_solution mit dem Pfad zur .sln oder .slnx Datei auf (oder setzen Sie DOTNET_SOLUTION_PATH)

  2. Code analysieren: Verwenden Sie eines der 57 Tools für Navigation, Analyse, Refactoring

  3. Sicher refactoren: Änderungen vor der Anwendung mit preview: true in der Vorschau anzeigen

Architektur

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

Anforderungen

  • .NET 8.0 SDK oder neuer — funktioniert mit .NET 8, 9, 10 und zukünftigen Versionen. Analysiert jedes .NET 8+ Projekt/Lösung.

  • MCP-kompatibler KI-Agent

Entwicklung

Neue Tools hinzufügen

  1. Methode zu src/RoslynService.cs hinzufügen:

public async Task<object> YourToolAsync(string param1, int? param2 = null)
{
    EnsureSolutionLoaded();
    // Your logic...
    return CreateSuccessResponse(
        data: new { /* results */ },
        suggestedNextTools: new[] { "next_tool_hint" }
    );
}
  1. Tool-Definition zu src/McpServer.cs hinzufügen in HandleListToolsAsync

  2. Routing zu src/McpServer.cs hinzufügen im HandleToolCallAsync Switch

  3. Bauen und veröffentlichen:

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

Wichtige Dateien

Datei

Zweck

src/RoslynService.cs

Tool-Implementierungen (57 Methoden)

src/McpServer.cs

MCP-Protokoll, Tool-Definitionen, Routing

Lizenz

MIT - Siehe LICENSE für Details.

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