AstroWay/api v2.190.0 · de
alle Systeme in Ordnung

Typisierte Ausgabe MCP: warum 600+ Werkzeuge ein outputSchema haben

Die meisten MCP-Server liefern dem Agenten nicht typisiertes JSON – das Modell muss die Antwortform erraten. Wir veröffentlichen ein strenges outputSchema für 600+ Werkzeuge. Wir erklären, wie es funktioniert, welchen Bug das im strict-mode der Clients ausgelöst hat und wie wir ihn über offene Schemas behoben haben.

MCP‑Instrument kann beliebiges zurückgeben – das Protokoll verlangt nicht, die Form der Antwort zu beschreiben. Deshalb geben die meisten Server dem Agenten nacktes JSON zurück, und das Modell errät die Struktur aus dem Text. Das funktioniert, bis es bricht: Der Agent greift auf ein Feld zu, das nicht existiert, oder interpretiert die Verschachtelung falsch.

Wir haben den strengen Weg gewählt: über 600 unserer MCP‑Instrumente veröffentlichen outputSchema – ein maschinelles Antwort‑Schema, das aus demselben OpenAPI‑Vertrag wie die REST‑API generiert wurde.

Wenn ein Instrument ein Ausgangsschema deklariert, weiß der Client die Form der Antwort bereits vor dem Aufruf. Der Agent muss nicht raten – er sieht, dass chart.houses.ascendant existiert und den Typ „Zahl, ekliptikale Länge in Grad“ hat. Weniger Halluzinationen über die Struktur, genauere Aufrufkette, Möglichkeit, die Antwort clientseitig zu validieren.

Der Katalog ist schrittweise gewachsen: 285 Instrumente zu Beginn, dann 624, jetzt über 630 – und die typisierte Ausgabe hat fast die vollständige Abdeckung erreicht (über 600 von 630+). Schemas werden nicht von Hand geschrieben: Der Generator liest live /v1/openapi.json beim Build, sodass ein Drift zwischen REST und MCP per Konstruktion unmöglich ist.

Strenge Typisierung hat ihren Preis. Wenn ein Instrument ein closed‑Schema (keine Felder außer den aufgelisteten) deklariert und die Antwort zusätzliche Metadaten enthält, lehnt der strict‑Mode‑Client das ab. Bei chart‑family‑Instrumenten haben wir genau das erwischt:

McpError: MCP error -32602: Structured content does not match
the tool's output schema: data must NOT have additional properties

Ursache: Die generierten Zod‑Schemas waren im closed‑Modus, während die tatsächliche Backend‑Antwort mehrere service‑metadata‑Felder enthielt, die im Schema nicht deklariert waren. Der Client validierte structuredContent gegen das Schema im strict‑Modus und warf -32602.

Interessanter Hinweis: Claude Desktop und Cursor zeigten den Bug nicht – sie laufen im loose‑Modus und lassen zusätzliche Felder durch. Es waren die strict‑Mode‑SDK‑Clients, die hart validierten, die abstürzten. Das Problem war also in den populärsten Clients unsichtbar und trat nur in eigenen Integrationen über das MCP‑SDK auf.

Die Lösung – die Typisierung nicht verwerfen, sondern die Schemas offen machen. Im Instrument‑Generator werden die Ausgangs‑ZodObject‑Schemas in eine passthrough‑Form konvertiert: deklarierte Felder bleiben verpflichtend und typisiert, während zusätzliche service‑Felder die Validierung passieren, ohne den Aufruf zu brechen.

Für den gehosteten Katalog wird ein separater Fallback verwendet – das outputSchema aus der Registrierung jener Instrumente entfernen, bei denen die Validierung bereits gebrochen war, damit strict‑Clients nicht abstürzen, bis die Schemas vollständig offen sind. Der Kompromiss ist bewusst: ein korrekter Aufruf ohne clientseitige Validierung ist besser als ein harter Fehler.

Die Lehre ist einfach: Die typisierte Ausgabe von MCP ist nützlich, aber das Antwort‑Schema muss für zusätzliche Felder offen sein. Die API entwickelt sich weiter, Metadaten tauchen auf, und ein closed‑Schema macht jede solche Ergänzung zu einem breaking change für strict‑Clients.

Der typisierte Katalog ist auf beiden Wegen verfügbar:

// hosted, без установки
{
"mcpServers": {
"astroway": {
"url": "https://mcp.astroway.info/mcp",
"headers": { "Authorization": "Bearer aw_live_..." }
}
}
}

Oder das stdio‑Paket npx -y @astroway/mcp mit dem Schlüssel in ASTROWAY_API_KEY. Beide liefern denselben typisierten Katalog; die vollständige Anleitung zu den Clients findest du unter /agent-setup/.

MakSeong · AstroWay

Ich entwickle das AstroWay API: packe Swiss Ephemeris in reines REST und schreibe über langweilige Details, die eigentlich wichtig sind.

// darauf aufbauen

Derselbe Swiss Ephemeris wie in Solar Fire - in 4 Zeilen Code.

Kostenloser Schlüssel ohne Kreditkarte. 5.000 Aufrufe pro Monat vor der ersten Zahlung.

Mehr aus dem Blog alle Beiträge →

Engineering 2026-07-15

Drei offizielle SDK: TypeScript, Python, PHP anstelle des rauen curl

Der räudige HTTP funktioniert, aber der typisierte Client spart Stunden: Autocomplete für Routen, Typen für Anfragen und Antworten, eingebauter retry für 408/409/429/5xx und eine Stahlschicht-Struktur für Fehler. Wir zerlegen die drei offiziellen SDK - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - und aus welchem OpenAPI-Kontrakt sie generiert wurden.

Industry 2026-06-05

Free Astrology API: Which One Has the Best Free Tier in 2026?

A side-by-side of free tiers across the major astrology APIs - credits, request caps, card requirements - and how much you can actually build for free.

Engineering 2026-06-05

Horoscope API Tutorial: Build a Daily Horoscope Feature

Add daily, weekly and monthly horoscopes to your app via API - sign-based text vs transit-based personalization - with TypeScript and Python code.