Skip to main content
Glama
delian
by delian

Coding Guides MCP Server

Ein Model-Context-Protocol-Server (MCP), der Zugriff auf Coding-Guides und Best Practices für KI-Assistenten wie Claude und GitHub Copilot bietet.

Was ist das?

Dieser MCP-Server stellt Codierungsrichtlinien und Styleguides als Ressourcen bereit, auf die MCP-Clients zugreifen können. Er wurde entwickelt, um AGENTS.md-Dateien zu erweitern oder zu ersetzen, indem er eine strukturierte Möglichkeit bietet, Coding-Praktiken und Richtlinien während der Entwicklung an KI-Assistenten auszuliefern.

Related MCP server: Code Understanding MCP Server

Funktionen

  • Ressourcenbasierte API: Stellt Coding-Guides über MCP-Ressourcen bereit

  • GitHub-Integration: Lädt Guides aus GitHub-Repositories über das Web

  • Automatisches Caching: Speichert heruntergeladene Guides lokal für den Offline-Zugriff

  • Fallback-Unterstützung: Verwendet lokalen Cache oder Verzeichnis, wenn das Netzwerk nicht verfügbar ist

  • Einfache dateibasierte Speicherung: Guides können lokal als Markdown-Dateien gespeichert werden

  • Offizielles MCP-SDK: Basiert auf dem Python-mcp-SDK (MCPServer, ehemals FastMCP)

  • Einfache Integration: Funktioniert mit jedem MCP-kompatiblen Client (Claude Desktop, Cline usw.)

Verfügbare Ressourcen

  • guides://list – Listet alle verfügbaren Coding-Guides auf

  • guides://{guide_name} – Ruft den Inhalt eines bestimmten Guides ab (z. B. guides://python.md)

Installation

Aus dem Quellcode

# Clone the repository
git clone https://github.com/delian/codeguide-mcp.git
cd codeguide-mcp

# Install with uv (recommended)
uv sync

# Or with pip
pip install -e .

Mit Docker

docker build -t codeguide-mcp .
docker run -i codeguide-mcp

In VS Code

Install in VS Code

Oder suchen Sie in der MCP-Serverliste der Extensions-Ansicht nach codeguide-mcp (geben Sie @mcp in die Extensions-Suchleiste ein) oder fügen Sie es manuell zu .vscode/mcp.json hinzu:

{
  "servers": {
    "codeguide-mcp": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "delian/codeguide-mcp"]
    }
  }
}

Konfiguration

Konfigurieren Sie den Server, indem Sie eine config.toml-Datei erstellen oder Umgebungsvariablen festlegen:

GitHub-Konfiguration (empfohlen)

Um Guides aus einem GitHub-Repository zu laden:

github_repo = "owner/repository"  # e.g., "delian/codeguide-mcp"
github_path = "guides"            # Path to guides directory in repo
github_branch = "main"            # Branch to fetch from
  cache_dir = ".guides-cache"       # Local cache directory
log_level = "INFO"

Konfiguration des lokalen Verzeichnisses

Um nur lokale Guides zu verwenden:

guides_dir = "guides"
log_level = "INFO"

Umgebungsvariablen

  • GUIDES_GITHUB_REPO – GitHub-Repository (Format: owner/repo)

  • GUIDES_GITHUB_PATH – Pfad zum Guides-Verzeichnis im Repository (Standard: guides)

  • GUIDES_GITHUB_BRANCH – Abzurufender Branch (Standard: main)

  • GUIDES_CACHE_DIR – Lokales Cache-Verzeichnis (Standard: .guides-cache)

  • GUIDES_DIR – Lokales Verzeichnis mit Guide-Dateien (Standard: guides)

  • GUIDES_LOG_LEVEL – Protokollierungsstufe (Standard: INFO)

Transport (siehe Remote-Bereitstellung):

  • GUIDES_TRANSPORT – stdio, streamable-http oder auto (Standard: auto – HTTP, wenn eine PORT-Umgebungsvariable vorhanden ist, andernfalls stdio)

  • PORT – Port, auf dem im HTTP-Modus gelauscht wird; hat Vorrang vor GUIDES_PORT (Cloud Run injiziert diesen)

  • GUIDES_HOST – Bind-Adresse im HTTP-Modus (Standard: 0.0.0.0)

  • GUIDES_HTTP_PATH – MCP-Endpunktpfad (Standard: /mcp)

  • GUIDES_STATELESS_HTTP – Jede Anfrage unabhängig behandeln (Standard: true; erforderlich, wenn Replikate automatisch skaliert werden)

  • GUIDES_ALLOWED_HOSTS – Host-Header-Allowlist, die DNS-Rebinding-Schutz ermöglicht (Standard: leer = keine Host-Validierung)

Verhalten

  1. Netzwerk verfügbar + GitHub konfiguriert: Ruft Guides von GitHub ab und speichert sie lokal zwischen

  2. Netzwerk nicht verfügbar: Verwendet lokalen Cache, falls verfügbar

  3. Kein Cache verfügbar: Fällt auf das lokale guides_dir zurück, falls konfiguriert

Remote-Bereitstellung (Google Cloud Run)

Dasselbe Image bedient beide Transporte: Es spricht standardmäßig stdio über eine Pipe und wechselt zu Streamable HTTP, wenn eine PORT-Umgebungsvariable vorhanden ist – die Cloud Run immer injiziert. Es ist kein separates Image oder Entrypoint erforderlich.

1. Image veröffentlichen

docker build -t delian/codeguide-mcp:0.1.0 -t delian/codeguide-mcp:latest .
docker push delian/codeguide-mcp:0.1.0
docker push delian/codeguide-mcp:latest

2. Bereitstellen

gcloud run deploy codeguide-mcp \
  --image=docker.io/delian/codeguide-mcp:0.1.0 \
  --region=europe-west1 \
  --allow-unauthenticated \
  --port=8080 \
  --set-env-vars=GUIDES_TRANSPORT=streamable-http,GUIDES_GITHUB_REPO= \
  --memory=512Mi --cpu=1 \
  --min-instances=0 --max-instances=4 --concurrency=40

GUIDES_GITHUB_REPO= (leer) bewirkt, dass der Dienst die im Image enthaltenen Guides ausliefert. Wenn GitHub aktiviert bleibt, entsteht pro Guide ein Netzwerk-Roundtrip und die unauthentifizierte GitHub-API-Beschränkung von 60 Anfragen/Stunde pro Egress-IP wird erreicht, woraufhin der Server stillschweigend auf dieselben eingebetteten Dateien zurückfällt.

Der MCP-Endpunkt ist dann https://<service-url>/mcp:

gcloud run services describe codeguide-mcp --region=europe-west1 \
  --format='value(status.url)'

Cloud Run antwortet auf zwei Hostnamen für denselben Dienst – die von gcloud run deploy ausgegebene Form SERVICE-PROJECTNUMBER.REGION.run.app und die ältere Form SERVICE-HASH-REGIONCODE.a.run.app, die status.url meldet. Beide sind gleichwertig; beide funktionieren in einer Client-Konfiguration.

3. Clients darauf ausrichten

Siehe Verbinden mit einem Remote-Server unten für die client-spezifische Konfiguration.

Von Docker Hub abrufen

Cloud Run stellt öffentliche Docker-Hub-Images direkt bereit, speichert sie aber nur eine Stunde zwischen und zieht sie danach anonym erneut ab. Bei einer Skalierung kann daher das anonyme Pull-Limit von Docker Hub erreicht werden und Instanzen können nicht gestartet werden. Für alles über den gelegentlichen Gebrauch hinaus spiegeln Sie das Image über ein Remote-Repository in Artifact Registry:

gcloud artifacts repositories create dockerhub \
  --repository-format=docker --location=europe-west1 \
  --mode=remote-repository --remote-docker-repo=DOCKER-HUB

gcloud run deploy codeguide-mcp \
  --image=europe-west1-docker.pkg.dev/PROJECT_ID/dockerhub/delian/codeguide-mcp:0.1.0 \
  ...

Hinweise zum öffentlichen Betrieb

  • --allow-unauthenticated macht den Endpunkt weltweit aufrufbar. Der Server ist schreibgeschützt, aber der clear_cache-Prompt ist für jeden Aufrufer erreichbar und verwirft die In-Memory-Caches, und der Datenverkehr treibt die Autoskalierungskosten in die Höhe – halten Sie --max-instances begrenzt. Um den Zugriff einzuschränken, lassen Sie das Flag weg und lassen Sie Clients ein Identitätstoken senden, oder stellen Sie den Dienst hinter Cloud Armor / API Gateway.

  • GUIDES_STATELESS_HTTP muss true bleiben, es sei denn, Sie aktivieren auch Sitzungsaffinität, da Cloud Run die Anfragen einer Sitzung auf verschiedene Instanzen verteilen kann.

  • GET / gibt absichtlich 404 zurück; nur /mcp wird bedient. Der Standard-Startprobe von Cloud Run ist ein TCP-Check auf $PORT, das ist also in Ordnung – konfigurieren Sie keinen HTTP-Health-Check auf /.

  • Setzen Sie GUIDES_ALLOWED_HOSTS auf Ihren Diensthostnamen, um die Host-Header-Validierung zu aktivieren, wenn Sie den Dienst unter einer benutzerdefinierten Domain bereitstellen.

Veröffentlichung im MCP-Registry

Die MCP-Serverliste in der VS-Code-Extensions-Ansicht (geben Sie @mcp in die Suchleiste ein) wird vom GitHub-MCP-Registry gespeist, das aus dem offiziellen MCP-Registry übernimmt. Die Veröffentlichung dort ist daher der Weg, wie dieser Server in VS Code auffindbar wird – eine eigene VS-Code-Erweiterung ist nicht erforderlich.

server.json enthält die Registry-Metadaten: das Docker-Image für Clients, die es lokal ausführen möchten, und die gehostete URL für Clients, die das nicht möchten. Der Besitz des Images wird durch das Label io.modelcontextprotocol.server.name im Dockerfile nachgewiesen, dessen Wert muss gleich .name in server.json sein.

Authentifizieren Sie sich einmal (ein interaktiver Device-Code-Flow) und führen Sie dann das Veröffentlichungsskript aus:

mcp-publisher login github     # namespace io.github.<your-username>/*
tools/publish.sh

tools/publish.sh erledigt die gesamte Veröffentlichung: Es prüft die erforderlichen Tools und den Docker-Login, verifiziert, dass server.json und pyproject.toml in der Version übereinstimmen und dass das Dockerfile-Label mit dem Servernamen übereinstimmt, baut und pusht :VERSION und :latest, validiert server.json gegen das Live-Registry, veröffentlicht und liest den Eintrag zur Bestätigung zurück.

tools/publish.sh --dry-run          # everything except push and publish
tools/publish.sh --version 0.2.0    # bump server.json + pyproject + image tag, then release
tools/publish.sh --skip-build       # reuse images already on Docker Hub

Installieren Sie mcp-publisher aus dem Registry-Quickstart, falls Sie es nicht haben. Nach der Veröffentlichung kann die Aufnahme in die kuratierte Liste von GitHub eine Anfrage an partnerships@github.com erfordern.

Hinzufügen von Guides

Verwenden von GitHub (empfohlen)

Wenn Sie github_repo konfiguriert haben, fügen Sie einfach Markdown-Dateien zum angegebenen Verzeichnis in Ihrem GitHub-Repository hinzu. Der Server ruft sie automatisch ab und speichert sie zwischen.

Verwenden eines lokalen Verzeichnisses

Fügen Sie Markdown-Dateien zum Verzeichnis guides/ hinzu. Jede Datei ist automatisch als Ressource verfügbar.

Beispiel:

echo "# Python Style Guide\n\nUse PEP 8..." > guides/python.md

Verwendung mit MCP-Clients

Der Server kann auf zwei Arten verwendet werden:

Modus

Transport

Wie der Client ihn erreicht

Lokal

stdio

Client startet python main.py oder docker run -i und kommuniziert über eine Pipe

Remote

Streamable HTTP

Client stellt HTTPS-Anfragen an eine gehostete …/mcp-URL

Der lokale Modus benötigt kein Netzwerk und kein Hosting; der Remote-Modus ermöglicht es einem Team, eine Bereitstellung zu teilen und hält die Guides für alle identisch.

Verbinden mit einem Remote-Server

Eine bereitgestellte Instanz stellt ihren MCP-Endpunkt unter /mcp bereit. Die folgenden Ausschnitte verwenden die Referenzbereitstellung:

https://codeguide-mcp-86057491046.europe-west1.run.app/mcp

Sie ist öffentlich und benötigt keine Anmeldeinformationen. Ersetzen Sie sie durch Ihre eigene URL, wenn Sie den Dienst selbst betreiben – siehe Remote-Bereitstellung.

VS Code – .vscode/mcp.json für einen Arbeitsbereich oder Ihre Benutzer-mcp.json für alle Arbeitsbereiche:

{
  "servers": {
    "codeguide-mcp": {
      "type": "http",
      "url": "https://codeguide-mcp-86057491046.europe-west1.run.app/mcp"
    }
  }
}

Claude Code:

claude mcp add --transport http codeguide-mcp \
  https://codeguide-mcp-86057491046.europe-west1.run.app/mcp

Cursor – ~/.cursor/mcp.json (global) oder .cursor/mcp.json (pro Projekt):

{
  "mcpServers": {
    "codeguide-mcp": {
      "url": "https://codeguide-mcp-86057491046.europe-west1.run.app/mcp"
    }
  }
}

Claude Desktop – Fügen Sie es als benutzerdefinierten Connector in den Einstellungen hinzu oder überbrücken Sie den Remote-Endpunkt in einen stdio-Client mit mcp-remote:

{
  "mcpServers": {
    "codeguide-mcp": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://codeguide-mcp-86057491046.europe-west1.run.app/mcp"]
    }
  }
}

Jeder Client, der Streamable HTTP spricht, funktioniert – richten Sie ihn auf die /mcp-URL. Für Server hinter Authentifizierung übergeben Sie ein Token mit --header "Authorization: Bearer $(gcloud auth print-identity-token)" (Claude Code) oder den entsprechenden headers-Block des Clients.

Überprüfen eines Remote-Endpunkts

Ein einzelnes curl bestätigt, dass eine Bereitstellung live und öffentlich ist:

curl -s -X POST https://codeguide-mcp-86057491046.europe-west1.run.app/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
       "protocolVersion":"2025-06-18","capabilities":{},
       "clientInfo":{"name":"curl","version":"1"}}}'

Ein gesunder Server antwortet mit einem SSE-event: message-Frame, der seine Fähigkeiten und Anweisungen enthält. Beachten Sie, dass GET / absichtlich 404 zurückgibt – nur /mcp wird bedient.

Um stattdessen jede Ressource, jedes Tool und jeden Prompt über HTTP zu testen:

uv run python verify_server.py --http https://codeguide-mcp-86057491046.europe-west1.run.app/mcp

Lokale Verwendung

Claude Desktop

Fügen Sie zu Ihrer mcp.json hinzu:

{
  "mcpServers": {
    "coding-guides": {
      "command": "python",
      "args": ["-m", "main"]
    }
  }
}

oder

{
  "mcpServers": {
    "coding-guides": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "docker.io/delian/codeguide-mcp"]
    }
  }
}

Andere MCP-Clients

Führen Sie den Server aus und verbinden Sie sich über stdio:

python main.py

Entwicklung

# Install development dependencies
uv pip install -e ".[dev]"

# Run pre-commit hooks
pre-commit install
pre-commit run --all-files

# Run the server
python main.py

Lizenz

MIT

Mitwirken

Beiträge sind willkommen! Bitte öffnen Sie ein Issue oder einen Pull-Request.

Available Tools

1 tool
get_guideBInspect

Get the content of a specific coding guide.

ParametersJSON Schema
NameRequiredDescriptionDefault
guide_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of disclosing behavior. 'Get the content' implies a read-only operation with no side effects, but it does not mention error handling, authentication requirements, or anything about the response format. It meets the minimum but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with zero wasted words. It is front-loaded and directly states the core purpose, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (1 parameter) and has an output schema, so return values are covered. However, the description is too sparse to be considered complete: it does not explain how to specify guide_name, nor does it provide any usage context or caveats. An agent would struggle to invoke this tool correctly without additional information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, guide_name, has no description in the schema (0% coverage) and the tool description does not clarify what format the name should take, whether it must be exact, case-sensitive, or how to discover valid guide names. The description provides absolutely no additional meaning beyond the parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (get) and the resource (content of a specific coding guide). It is unambiguous and distinguishes the tool as a retrieval operation, even though there are no sibling tools to differentiate from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when you need the content of a guide, but it does not provide explicit context on when to use it versus alternatives, mention prerequisites, or state any exclusions. With no sibling tools, the lack of explicit guidance is acceptable but still leaves room for improvement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedget_guide

TDQS

B3.4/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no possibility of confusing it with other tools. The purpose is singular and clear.

Naming Consistency5/5

The single tool uses a clear verb_noun convention ('get_guide'), which is consistent and readable. There are no competing naming patterns.

Tool Count2/5

The server has only one tool, which is too few for the apparent scope of a code guide service. Users would typically need additional tools such as listing or searching guides.

Completeness2/5

The tool set lacks any discovery mechanism. An agent must know the exact guide identifier upfront, with no way to enumerate or search available guides, leading to significant gaps in functionality.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers