Skip to main content
Glama
muhammadwaqasmbd

mcp-server-template

mcp-server-template

Ein produktionsreifer Ausgangspunkt für einen MCP-Server.

Der Schnellstart in der MCP-Dokumentation liefert dir in zehn Zeilen ein funktionierendes Tool. Das ist das, was du in den folgenden drei Wochen hinzufügst, sobald dieses Tool von etwas aufgerufen wird, das du nicht kontrollierst.

@mcp.tool()
def add(a: int, b: int) -> int:
    return a + b          # fine on a laptop

Was dort fehlt, sind keine Funktionen. Es ist das, was passiert, wenn das Tool hängt, eine Exception auslöst, einen Roman zurückgibt oder vierzig Mal gleichzeitig aufgerufen wird – und was das Modell in diesen Fällen sehen darf.


Das Problem, das dieses Template löst

Der Aufrufer eines MCP-Tools ist ein Sprachmodell, und das verändert die Technik.

  • Ein Modell kann keinen Stacktrace lesen, aber es gibt freudig einen an deine Benutzer weiter. Ein ausgeleckter Stacktrace ist also sowohl nutzlos als auch eine Offenlegung.

  • Ein Modell hat eine eigene Deadline. Ein Tool, das hängt, erzeugt keine langsame Antwort; es erzeugt eine tote Konversation.

  • Ein Modell kann ein abgeschnittenes Ergebnis nicht von einem vollständigen unterscheiden. Wenn sein Kontext stillschweigend überläuft, wird kein Fehler ausgelöst – es verschlechtert die Antwort, und du erfährst es von einem Kunden.

  • Ein Modell wird wiederholen, wenn du es lässt. „Nicht gefunden" und „Upstream ist down" müssen also unterschiedliche Antworten sein, sonst hämmert es einen Dienst für einen Datensatz, der nie existiert hat.

Jeder dieser Fälle wird nur einmal behandelt, und zwar an einer zentralen Stelle, sodass ein Tool, das am Freitagnachmittag hinzugefügt wird, denselben Schutz erbt wie das, das am ersten Tag sorgfältig geschrieben wurde.


Related MCP server: Graft

Was du bekommst

Timeout pro Tool

Wirklicher Abbruch, nicht nur eine Warnung im Nachhinein. Gibt einen retryable-Fehler zurück, auf den das Modell reagieren kann

Parallelitäts-Obergrenze

Begrenzte parallele Ausführung, sodass eine Burst nicht das überrennt, was deine Tools aufrufen

Fehlergrenze

Deklarierte Fehler erreichen den Aufrufer; unerwartete werden zu internal_error ohne Details, und der Stacktrace geht ins Log

Geheimnis-Schwärzung

Wird auf Logs und ausgehende Nachrichten angewendet, weil Schlüssel häufiger über interpolierte Exception-Strings nach außen gelangen als über Code

Sichtbare Kürzung

Zu große Ergebnisse werden sichtbar abgeschnitten, niemals still

Korrelations-IDs

Eine ID pro Aufruf, im Log und im Fehler – die der Benutzer dir nennen kann

Strukturierte Logs auf stderr

stdout gehört zum Protokoll – ein falsches print() beschädigt den Stream

Fail-fast-Konfiguration

Falsche Einstellungen stoppen Server beim Boot, spät nicht bei der ersten Anfrage

Offline-Tests

Die Suite läuft im Zug. Keine Live-Schlüssel, kein Netzwerk


Schnellstart

git clone https://github.com/muhammadwaqasmbd/mcp-server-template
cd mcp-server-template
make install
make test
make run          # stdio, ready for a desktop MCP client

Stattdessen über das meinene Firefox anbieten:

TRANSPORT=streamable-http PORT=8000 python -m mcp_server_template

Einen Desktop-Client darauf gespeichert

{
  "mcpServers": {
    "template": {
      "command": "python",
      "args": ["-m", "mcp_server_template"],
      "cwd": "/absolute/path/to/mcp-server-template"
    }
  }
}

Ein eigenes Tool hinzufügen

Schreibe die Funktion. Sonst nichts.

# src/mcp_server_template/tools/orders.py
from ..errors import InvalidInput, UpstreamUnavailable

async def cancel_order(order_id: str) -> dict:
    """Cancel an order. Returns the order's new state."""
    if not order_id.strip():
        raise InvalidInput("order_id must not be empty")     # model can fix this
    ...
    raise UpstreamUnavailable("order service timed out")     # model may retry

Registriere es hinter der Die „schütz“:

mcp.tool(name="cancel_order", description="Cancel an order by id.")(
    guard.wrap(orders.cancel_order)
)

Es hat jetzt den Timeout, die Obergrenze, die Fehlergrenze, die Kürzung und es Logging. Du hast davon nichts geschrieben.

Wirf InvalidInput, wenn das Modell es korrigieren kann. Wirf UpstreamUnavailable, wenn ein weiterer Versuch helfen könnte. Gib für schlicht negative Ergebnisse einfach normal zurück – ein fehlender Datensatz ist eine Antwort, kein Fehler.


Stylish

server.py      the ONLY module that imports the MCP SDK
   │
   ├── guard.py          timeout · concurrency · error boundary · truncation · timing
   ├── errors.py         what a model is allowed to see, and secret redaction
   ├── observability.py  JSON logs on stderr, correlation ids
   ├── config.py         validated once at boot, immutable thereafter
   └── tools/            plain functions. No protocol knowledge. No decorators

Der Beunruhigt Diepteilt zeigt in eine Richtung: Tools wissen nichts über das Programm, und die Schutzschicht weiß nichts über Tools. Deshalb laufen die Tests in Millisekunden ohne einen Server, und deshalb betrifft eine SD-Kerne genau eine Datei.


Was dieses Bewusst nicht tut

Die „Ränder“ ehrlich darüber zu sagen ist gerade Funktionen mehr.

  • Keine Authentifizierung. Über stdio der System des Betriebssystems ist die Sicherheitsgrenze. Wenn du in HTTP machst, Getreide ein echter Schulschutz davor – die SDK unterstützt das, es hier zu verdrahten in einem Gefahrenmodell implizieren.

  • Keine Retry-Logik in den Tools. Die STUFF gibt mit, ob ein Fehler wieder anfällig ist; sagt euch nicht ob, der Aufrufer hat die Kontext und das Budget.

  • Keine Beschleunigungsbegrenzung pro Anfrage. Die Obergrenze begrenzt die Gesamtarbeit, nicht die Fairness zwischen Identitäten. Wenn du das brauchst, brauchst du zuerst eine Identität.

  • Keine anhaltende, Warteschlange oder Scheduler. Der Tool-Erf ist zu einem „Job Runner“ ohne Schritt wurde und wurde dies, ist ein verteiltes System, das niemanden absichtlich entwaren – eine Wendung.

  • Keine Streaming-Ergebnisse. Sinnvoll einge, wenn langlaufende Tools, kannst du es an; die Fehlergrenze macht es schwieriger – die meisten Tools brauchen es nicht.


Testen

make test

Zuversicht, die Suite schlägt fehl: Es gibt keinen Fehler, einangehaltenes Tool wird abgebrochen, eine unerwartete Exception kann die Nachricht nicht warten, Überdimensionierte Ausgabe wird sichtbar gekürzt, die Obergrenze keine unter zehn Aufrufen liegt, und es wird kein nicht blockierender Sync-Tool kann jedoch den Event-Loop nicht wirklich – ale.


Lizenz

MIT – Siehe LICENSE.

Gebaut von Muhammad Waqas, der den größten Teil seiner Zeit im Agentensystemen verbraucht in regulierten Regionen, wo eine sichere falsche Antwort ein meldepflichtiger Unfall ist.

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A production-grade, extensible Python template for building Model Context Protocol servers with support for Streamable HTTP and stdio transports. It provides a structured framework for implementing tools, resources, and prompts with built-in authentication, observability, and background task management.
    11
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables building agent-ready APIs that expose tools as both HTTP and MCP endpoints from a single server definition, with automatic OpenAPI, discovery docs, and interactive API reference.
    5
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    A production-ready foundation for building secure, observable MCP servers with built-in authentication, rate limiting, and reference tools like database-query and semantic-search.
    15
    78
    MIT

View all related MCP servers

Related MCP Connectors

  • Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.

  • MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.

  • An MCP server for Arcjet - the runtime security platform that ships with your AI code.

View all MCP Connectors

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/muhammadwaqasmbd/mcp-server-template'

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