AstroWay/api v2.190.0 · ja
すべてのシステムが正常です

型付けされたMCP出力: 600以上のツールがoutputSchemaを持つ理由

ほとんどのMCPサーバーはエージェントに型付けされていないJSONを返します - モデルは応答の形式を推測する必要があります。私たちは600以上のツールのための厳密なoutputSchemaを公開しています。これがどのように機能し、どのようなバグをstrict-modeクライアントで開き、どのように公開スキーマを通じて修正したかを解説します。

MCPツールは何でも返せるため、プロトコルは応答の形式を記述することを要求しません。そのため、ほとんどのサーバーはエージェントに生のJSONを返し、モデルはテキストから構造を推測します。これは、エージェントが存在しないフィールドを取得したり、ネストを誤って解釈したりするまでは機能します。

私たちは厳格な道を選びました。600以上のMCPツールが、REST APIと同じOpenAPIコントラクトから生成された機械可読な応答スキーマであるoutputSchemaを公開しています。

ツールが出力スキーマを宣言すると、クライアントは呼び出し前に応答の形式を知ることができます。エージェントは推測せず、chart.houses.ascendantが存在し、「数値、度数での黄道経度」という型を持つことを確認します。構造に関する幻覚が減り、より正確な呼び出しチェーンが実現し、クライアント側で応答を検証する機能が得られます。

カタログは段階的に成長しました。開始時には285ツール、次に624、現在は630以上となり、型付き出力もほぼ完全にカバーされるようになりました(630以上のうち600以上)。スキーマは手書きではなく、ビルド時にジェネレーターがライブの/v1/openapi.jsonを読み込むため、RESTとMCP間のドリフトは構造上不可能です。

厳格な型付けが明らかにしたバグ

Section titled “厳格な型付けが明らかにしたバグ”

厳格さには代償が伴います。ツールがクローズドスキーマ(リストされたフィールド以外のフィールドは許可しない)を宣言し、応答に余分なメタデータが含まれている場合、厳格モードのクライアントはそれを拒否します。チャートファミリーツールで、まさにこの問題に遭遇しました。

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

原因は、生成されたZodスキーマがクローズド形式であり、実際のバックエンド応答にはスキーマで宣言されていないいくつかのサービスメタデータフィールドが含まれていたためです。クライアントはstructuredContentを厳格モードでスキーマに対して検証し、-32602を返しました。

興味深いニュアンスとして、Claude DesktopとCursorはこのバグを示しませんでした。これらはルーズモードであり、追加フィールドをスキップするためです。厳密に検証する厳格モードのSDKクライアントだけが失敗しました。つまり、この問題は最も人気のあるクライアントでは見えず、MCP SDK上の独自の統合でのみ表面化しました。

修正:クローズドスキーマの代わりにオープンなスキーマ

Section titled “修正:クローズドスキーマの代わりにオープンなスキーマ”

解決策は、型付けを捨てるのではなく、スキーマをオープンにすることです。ツールジェネレーターでは、出力ZodObjectスキーマがパストスルー形式に変換されます。これにより、宣言されたフィールドは必須かつ型付けされたままですが、追加のサービスフィールドは呼び出しを失敗させることなく検証を通過します。

ホスト型カタログでは、別途代替策が適用されました。スキーマが完全にオープンになるまで厳格なクライアントが失敗しないように、すでに検証が壊れていたツールからoutputSchemaの登録を解除しました。これは意図的な妥協です。厳格な失敗よりも、クライアント側での検証なしで正しい呼び出しができる方が良いからです。

教訓はシンプルです。MCPの型付き出力は有用ですが、応答スキーマは追加フィールドに対してオープンである必要があります。APIは進化し、メタデータは出現します。クローズドスキーマは、そのような追加を厳格なクライアントにとっての破壊的変更に変えてしまいます。

型付きカタログは両方の方法で利用できます。

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

または、ASTROWAY_API_KEYにキーを設定したstdioパッケージnpx -y @astroway/mcpを使用します。どちらも同じ型付きカタログを提供します。クライアントに関する完全なガイドは/agent-setup/にあります。

MakSeong · AstroWay

AstroWay API を作っている: Swiss Ephemeris を純粋な REST にラップし、実際に重要な退屈な詳細を書いています。

// この上に構築

Solar Fireと同じSwiss Ephemeris - 4行のコードで。

無料のキー(カード不要)。最初の支払いまでに月5,000回の呼び出し。

より多くのブログ

Engineering 2026-07-15

3つの公式SDK: TypeScript、Python、PHP - 生のcurlの代わりに

生のHTTPは動作しますが、型付けされたクライアントは時間を節約します: パスの自動補完、リクエストとレスポンスの型、408/409/429/5xx用の組み込みリトライ、Stainlessスタイルのエラーヒエラルキー。3つの公式SDK - @astroway/sdk (npm)、astroway (PyPI)、astroway/sdk (Packagist) - と、それらが1つのOpenAPI契約から生成される方法を解説します。

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.