mcpField
S
StitchAPI Docs

StitchAPI Docs

リモート
stitchapi.dev開発ツール216 日前に更新
リポジトリ公式サイト

StitchAPI Docs について

StitchAPIは、個々のAPIエンドポイントを型付き関数として宣言するTypeScript開発者向けライブラリです。呼び出し時のレスポンス検証やリトライなどに対応し、コード生成やサーバーのデプロイなしで、同じ定義をコード、CLI、HTTP、MCPから利用できます。

主な機能

  1. 01APIエンドポイントを型付き関数として宣言
  2. 02レスポンス検証とスキーマドリフト検出
  3. 03リトライ、スロットリング、タイムアウト、サーキットブレーカーの設定
  4. 04認証と認証情報の境界を管理
  5. 05関数、CLI、HTTP、MCPで定義を公開

活用シーン

  1. 01OpenAPI仕様のないエンドポイントの呼び出しを構築
  2. 02APIレスポンス変更時のスキーマドリフトを検出
  3. 03API呼び出しのリトライとスロットリングを設定
  4. 04同じエンドポイント定義をエージェントやMCPクライアントに提供

MCP 対応

`stitch mcp`を使って、エンドポイント定義をMCPツールとして公開できます。同じstitch定義は関数、CLIコマンド、HTTPエンドポイントとしても利用できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://stitchapi.dev/api/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@stitchapi/docs-mcp1.0.0-rc.5

ツール

2
パラメーター型必須説明
limitintegerいいえ返す結果の最大数(既定値は 5)。
querystringはい自然言語の検索クエリ。

詳細

ウクライナと共に

StitchAPI — あらゆる API を型安全で堅牢な関数に変換

API のステッチング:あらゆる API を型安全で堅牢な関数に変換します。エンドポイントを一度定義すれば、型、認証、堅牢性が整い、ローカル関数のように呼び出せます。サーバーも、コード生成も、設定ファイルも不要です。同じ定義をコード、CLI、AI エージェントのいずれからも利用できます。

📚 stitchapi.dev — ドキュメント、ガイド、ライブプレイグラウンド

依存関係:0 バンドルサイズ:~21 kB min+gzip OpenSSF Scorecard npm provenance:署名済み

コード品質:77(B) カバレッジ:行 90% · 分岐 78%

実行時依存関係ゼロ · ~21 kB min+gzip — 一般的な import { stitch } はツリーシェイク後に ~19 kB になり、依存関係のツリーがないため、追加でインストールや監査が必要なものはありません。キャッシュエンジンと OTLP エクスポーターは初回使用時に遅延読み込みされるため、これらの数値には含まれていません。このサイズは目標ではなく、CI で強制される予算です。

検証可能なサプライチェーン — すべてのパッケージは GitHub Actions から OIDC を介して公開され、署名付きのnpm ビルド来歴証明が付与されます。これにより、インストールした tarball を生成したコミットとワークフローを確認できます。各リリースには SPDX と CycloneDX の両形式でSBOMも同梱され、リポジトリはOpenSSF Scorecardによって公開スコアが付けられています。

StitchAPI のデモ — ステッチが応答をストリーミングし、出力を検証し、502 エラーを再試行して、エージェントのツール呼び出しに応答します

詳細を見る

メモ

StitchAPI は 1.0.0-rc.9 です。 コアランタイムは機能が完成しており、依存関係はゼロで、テストゲートもすべて合格し、すでに2つのプロジェクトで本番稼働しています。安定版 1.0.0 をリリースする前に実環境で検証を進めています。正確なバージョンを固定し、小規模で文書化された変更のみを想定してください。フィードバックをお待ちしています。


目次

stitch とは?

stitch は StitchAPI の中核となるプリミティブです。単一のエンドポイントを受け取り、呼び出し可能なものを返します。入力、出力、認証、耐障害性といったコントラクトを一度だけ宣言すれば、ローカル関数のように呼び出せます。コードが呼び出す定義と同じものを、CLI が実行し、AI エージェントが呼び出します。そして、すべての呼び出し元に渡されるのは認証情報ではなく、機能です。複数のエンドポイントを持つサービスは seam です。これは、ベース URL、認証、1つのランタイム(スロットリング予算、ストア、トレースシンク)を共有する stitch のグループです。

import { stitch } from 'stitchapi';
import { z } from 'zod';

const getUser = stitch({
    path: 'https://api.example.com/users/{id}',
    output: z.object({ id: z.number(), name: z.string() }),
    pick: 'data',
});

const user = await getUser({ params: { id: 1 } }); // typed · validated

既存の fetch や axios はそのまま使えます。これらは下層のアダプターです。stitch はトランスポートの_上位_に位置し、呼び出しを置き換えるのではなく、エンドポイントを関数に変換します。

動機

ほとんどすべてのプロジェクトには、HTTP リクエストを送信し、レスポンスからペイロードを取り出すだけの薄い関数をまとめた src/api/ フォルダーがあります。認証のライフサイクル、再試行、レート制限、タイムアウト、レスポンスの検証、ドリフトの検出、可観測性など、統合の信頼性を実際に支える仕組みはすべて、呼び出し箇所ごとに再実装され、それぞれのラッパーが独立して劣化していきます。fetch が返すのは不透明なバイト列であり、アプリケーションコード(または AI エージェント)が必要とするのは生のバイト列ではありません。どちらも、構造化され、検証済みで、可観測な結果を必要とします。

stitch はこうした仕組みをすべて呼び出しにまとめます。

生の fetch を使う場合、自分で実装するもの……stitch なら一度宣言するだけです
解析して正しい形式か期待する、不透明なバイト列スキーマで検証された型付きの結果。呼び出しごとにドリフトを検出
最初の失敗で例外が発生し、あとは自分で対処バックオフとジッターによる再試行。Retry-After を尊重
思い出した場合に限り、単一の大まかなタイムアウト実際の中断を伴う、全体/試行ごとの多層タイムアウト
レート制御なし。本番環境で 429 エラーに直面積極的なスロットリング:ホストごとに共有されるレートと同時実行数の上限
自分でフレーム化し、ページネーションする生のバイトストリームSSE のフレーミング、差分の連結、自動ページネーション
呼び出しで何が起きたかを把握できない型付きイベントストリームとオプトインのトレース:レイテンシ、再試行、ドリフト

StitchAPI を選ぶ理由

型付き API クライアントを手に入れる方法はたくさんあります。仕様ベースのジェネレーター、手書きのコントラクトクライアント、ワークフロープラットフォーム、あるいは手作りの fetch ラッパーを集めたフォルダーなどです。StitchAPI は、それらのどれもカバーしていない領域を担います。一度に 1 つのエンドポイントを、堅牢で検証可能、かつ観測可能な関数に変換します。仕様も、コード生成も、設定ファイルも、サーバーも不要で、明示的な合成だけで実現します。

  • 仕様優先ではなく、アトミックです。 仕様ベースのジェネレーター(openapi-generator、Orval、Kubb、…)は、まず完全な OpenAPI ドキュメントを必要とします。しかし、実際の API の多く(社内向け、ドキュメント化されていないもの、ニッチなもの)には、そもそもドキュメントがありません。スティッチに必要なのは URL とレスポンスの例 1 つだけです。
  • コードジェネレーターではなく、ランタイムです。 コミットし、差分を確認し、再生成する必要のある生成済み SDK はありません。宣言そのものがクライアントであり、実際の呼び出しごとに検証されます。そのため、フィールド名がひそかに変更された場合でも、下流の 3 層先で undefined になるのではなく、明確なレベル付きのドリフトシグナルとして検知できます。
  • 堅牢性は自分で実装するのではなく、宣言します。 リトライ、スロットリング、タイムアウト、サーキットブレーカー、ページネーションをスティッチに設定すれば、すべての統合で一貫して適用されます。
  • 認証は境界です。 スティッチは自身の認証情報とライフサイクルを管理し、呼び出し側に渡すのは認証情報ではなく、機能へのアクセス権です。呼び出し側が AI エージェントの場合は、特に重要です。
  • エージェントは第一級の呼び出し元です。 1 つの定義から、関数、CLI コマンド、HTTP エンドポイント、MCP ツールが生成されます。返されるのは不透明なバイト列ではなく、構造化され、スキーマ検証済みで、追跡可能な結果です。
  • プラットフォームではなく、ライブラリです。 ランタイム依存関係はゼロで、プロジェクトに組み込め、運用するものはありません。
代替手段必要なもの管理するものStitchAPI が提供するもの
仕様ベースのコード生成(openapi-generator、Orval、Kubb、…)完全な OpenAPI 仕様API の変更ごとに再生成する SDK一度に 1 つのエンドポイントを扱い、ランタイムで実際に検証
型付きランタイムクライアント(Zodios、ts-rest、…)手書きのコントラクト独自のリトライ/認証/レート制限のコード堅牢性、認証ライフサイクル、ドリフト検出をプリミティブに組み込み
ワークフロープラットフォーム(Windmill、n8n、…)デプロイするサーバー他者のランタイム内にあるフロー依存関係ゼロのライブラリ。合成はコードだけで実現
手作りの fetch ラッパーなしプロジェクトごとに独自の認証、リトライ、制限を再実装同じ懸念事項を各スティッチで一度だけ宣言

競合状況とポジショニングの全容については、概要をご覧ください。

StitchAPI が目指さないもの

ツールが何にならないことを選んでいるかを知ることが、それが何であるかを信頼する方法です。

  • HTTP クライアントや fetch の代替ではありません — fetch/axios は基盤であり、スティッチはトランスポートの上位に位置します。
  • コードジェネレーターではありません — コミットし、差分を確認し、再生成する SDK はありません。宣言がランタイムとなり、実際の呼び出しで検証されます。
  • 仕様優先ではありません — OpenAPI ドキュメントは不要です。URL とレスポンスの例 1 つで十分です。
  • デプロイするサーバーではありません — 自分で管理していない API のためにインポートして使う、依存関係ゼロのライブラリです。
  • ワークフローエンジンや iPaaS ではありません — オーケストレーション、キュー、ビジュアルビルダーはありません。合成はプレーンな TypeScript で行います。
  • 設定ファイルや隠れた継承はありません — スティッチがひそかに読み込む暗黙の設定はありません。

サーバーも、コード生成も、設定ファイルも、暗黙の継承もなく、明示的な合成だけです。

機能

  • サーフェスごとにスコープされた単一のプリミティブ — stitch(url | config) は型付きの呼び出し可能な値を返します。複数のエンドポイントを持つサービスは seam となり、メンバー間でベース URL、認証、スロットル予算、ストア、トレースシンクを共有します。
  • イベントストリームを中核に設計 — すべての呼び出しは型付きストリーム(start → progress → drift → result → done)を生成します。最終的な検証済みの値を返す await は糖衣構文です。
  • バリデーションは自由に選択 — Zod または任意の Standard Schema バリデーター(Valibot、ArkType、…)を使用できます。型はスキーマから推論されます。
  • 段階的なドリフト検出 — 実際のレスポンスを宣言済みスキーマ(コントラクト)に照らして検証します。必須フィールドの欠落や不整合は 例外をスロー します。一方、ソフトドリフト(型変換、未宣言フィールド、デフォルト値が設定されたフィールド)は、undefined を黙って返すのではなく、致命的ではない warn / info / verbose の検出結果として通知されます。
  • 宣言的な耐障害性 — バックオフと Retry-After による再試行、先行スロットリング、階層型タイムアウト、サーキットブレーカー、冪等性キーを備えています。
  • 読み取り時キャッシュ — オプトイン方式のレスポンスキャッシュとプロセス内のリクエスト集約を提供します。派生したプリンシパルスコープのキーを使い、stitchapi/cache から遅延ロードされます。
  • 境界としての認証 — bearer、apiKey、basic、cookieSession(自動ログイン/再ログイン)、oauth2 に対応しています。シークレットは呼び出し時に解決され、呼び出し元に渡ることはありません。
  • あらゆるリクエスト形式に対応 — デフォルトは http です。graphql、sse、stream、download、llm、shell、postmessage はサブパスインポートから利用できる、同等のサーフェスです。
  • プラガブルな状態ストア — スロットル状態、キャッシュ、セッションは、任意のアトミック操作を備えた get / set ストアで管理できます。Redis/Postgres に切り替えれば、分散環境で利用できます。
  • インフラ不要の可観測性 — トレースは デフォルトでオフ です。スティッチごと、または STITCH_TRACE_* 環境変数で有効化できます。コレクターもダッシュボードも不要です。
  • 4 つの入口、定義は 1 つ — プロセス内関数、CLI(stitch run)、HTTP(stitch serve)、MCP(stitch mcp)から利用できます。
  • ランタイム依存関係ゼロ — "dependencies": {} で、グローバルな fetch を使用し、ツリーシェイク可能です。エントリー全体で min+gzip 約 21 kB、一般的な import { stitch } では 約 19 kB です(キャッシュエンジンと OTLP エクスポーターは初回使用時に遅延ロードされます)。

インストール

npm install stitchapi@rc   # or: pnpm add stitchapi@rc · yarn add stitchapi@rc

バリデーションは自由に選択できます。Zod のスキーマまたは任意の Standard Schema バリデーターを渡してください。どちらも同梱されていません。以下の例では、わかりやすさのために Zod を使用し、例示用ホストとして api.example.com を使っています。実行するには、ご自身の API に向けるか、プレイグラウンドでそのままお試しください。プレイグラウンドでは、ブラウザー内シミュレーターからこのホストにアクセスできます。

クイックスタート

最もシンプルなスティッチは URL です。一度宣言すれば、何度でも呼び出せます。

import { stitch } from 'stitchapi';

const getUsers = stitch('https://api.example.com/users');

const users = await getUsers(); // GET, parsed JSON

パスパラメーターには RFC 6570 URI テンプレートを使用します。params、query、headers、body はすべて 1 つの入力オブジェクトで渡します。

const getUser = stitch('https://api.example.com/users/{id}');

await getUser({ params: { id: 1 }, query: { expand: 'roles' } });
// → GET https://api.example.com/users/1?expand=roles

必要な場合に限り、各種オプションをすべて設定できます。デフォルトでは無効です。

const getUser = stitch({
    path: 'https://api.example.com/users/{id}',
    output: User, // a validator of your choice
    pick: 'data',
    retry: 3, // ≡ { attempts: 3 }
    timeout: '5s', // ≡ { total: '5s' }
    cache: '1m', // ≡ { ttl: '1m' }
});

const user = await getUser({ params: { id: 42 } });
// → typed · validated · retried · cached

スティッチは型付きの イベントストリーム を生成します。await はストリームを消費して最終的な値を返します。一方、.safe() は { ok, data, error } を返し、.stream() は進行状況、スロットル待機、再試行、ドリフトを発生時に逐次出力します。

合成:seam、extends、.with()

再利用可能なものはすべて名前付きの値であり、スティッチはそれらを組み合わせます。グローバル設定は一切不要です。 複数のエンドポイントを持つサービスは seam です。共通のベース URL、認証、予算を一度だけ宣言すれば、各エンドポイントがその設定を継承し、1 つのランタイム(スロットルバケット、ストア、トレースシンク)を共有します。

import { seam } from 'stitchapi';

const api = seam({
    baseUrl: 'https://api.example.com',
    retry: { attempts: 3, on: [429, 503] },
    timeout: { total: '30s' },
});

const listUsers = api.stitch({
    path: '/users',
    output: User.array(),
    pick: 'data',
});
const getUser = api.stitch({
    path: '/users/{id}',
    output: User,
    pick: 'data',
});

より軽い再利用には、extends: [fragment | stitch] で設定を左から右へマージできます(自身のフィールドが優先されます)。また、.with() は入力の一部を事前にバインドし、同じランタイムを再利用します。詳細なガイド:オーサリング。

検証と段階的なドリフト

宣言された output スキーマが契約そのものです。これを drift() でラップします。レスポンスが検証され(呼び出しは検証済みの値を返します。値は型変換され、デフォルト値が設定され、未知のキーは除去されます)、生の本文と検証済みの値との差分が、致命的ではない段階的なシグナルとして報告されます。

変更意味レベル
invalid必須フィールドがない、または互換性がない — 例外が発生しますerror
coerced型変換("42"→42):ワイヤー上の型の変化が検証によって隠された状態warn
undeclaredスキーマによって除去されるキーinfo
defaulted.default() が適用された(フィールドが存在しない)verbose
import { drift, stitch } from 'stitchapi';
import { z } from 'zod';

const listOrders = stitch({
    path: 'https://api.example.com/users/{id}/orders',
    pick: 'data',
    output: drift(
        z.array(z.object({ id: z.number(), total: z.number().optional() })),
        {
            ignore: ['[].meta'], // acknowledged, unconsumed — don't report it
            level: { coerced: 'info' }, // re-level a kind, or pass a level/list to filter
        },
    ),
});

ドリフトはスキーマを基準とするため、管理するスナップショットは不要です。重大度はスキーマに基づきます。必須フィールドがない、または互換性がない場合は、致命的な invalid となり、例外が発生します。それ以外はすべて、イベントストリーム上の致命的ではないドリフトです。宣言された差異(オプションフィールド、nullable、空の配列)は問題なく検証されるため、誤検知にはなりません。ignore は既知だが使用されないフィールドを無視し、level はソフトシグナルをフィルタリングするか、レベルを変更します。リクエスト側も検証されます。input にはパートごとにスキーマを指定でき、リクエストの送信前にすばやく失敗します。詳細なガイド:検証とドリフト。

レジリエンス:リトライ、スロットリング、タイムアウト

すべての src/api/ フォルダーで独自に実装されがちな機能を、ここでは設定として用意し、すべてのスティッチで統一しています。

const listUsers = stitch({
    baseUrl: 'https://api.example.com',
    path: '/users',
    retry: { attempts: 4, on: [429, 502, 503] },
    throttle: { rate: '1/s', concurrency: 2, pool: 'host' },
    timeout: { total: '30s', each: '10s' },
});

throttle は事前に制御します(制限に達する前に上限以下に保ちます。pool: 'host' はスティッチ間でリミッターを共有します)。retry は事後に対応します(バックオフと Retry-After)。timeout は実際の AbortSignal で中断します。さらに、3 つの設定があります。circuit はすでに停止している依存先への処理を即座に失敗させ、idempotency は書き込み時に安定した Idempotency-Key を挿入し、verdict は成功とみなす条件を宣言します。accept は 404 などの非2xxを例外ではなく通常の結果として扱い、flag は本文が失敗を示す 200 を失敗とします。詳細なガイド:レジリエンス。

キャッシュ

読み取り時に使用するレスポンスキャッシュで、プロセス内のリクエストを集約します。デフォルトでは無効で、スティッチに cache が設定された場合にのみ stitchapi/cache から遅延読み込みされます。キーは解決済みのリクエストから導出されるため、呼び出し側で作成するキーのドリフトを防げます。また、デフォルトでプリンシパルごとに分離されるため、ユーザーAにユーザーBのキャッシュ済みレスポンスが返されることはありません。

const getUser = stitch({
    path: 'https://api.example.com/users/{id}',
    output: User,
    pick: 'data',
    cache: '5m',
});

const listAnnouncements = stitch({
    path: 'https://api.example.com/announcements',
    output: z.array(z.object({ id: z.number(), title: z.string() })),
    pick: 'data',
    cache: {
        ttl: '1h',
        tenancy: 'app',
        vary: ['accept-language'],
        entries: 500,
        fingerprint: 1, // pins the shape — cacheable without a fingerprinter
    },
});

キャッシュは設計上、安全です。output スキーマを持つスティッチでは、そのスキーマのフィンガープリントを計算できる場合、または fingerprint タグを固定した場合にのみキャッシュします。それ以外の場合、古い形状のデータを返すのではなく、キャッシュを拒否します。機密データには sensitive: true を設定して、キャッシュを完全に無効にしてください。

境界としての認証

認証はスティッチのフィールドであり、グローバル設定ではありません。シークレットは呼び出し時(env()、credential.file())に解決され、宣言はコミット可能で、呼び出し側は認証情報を見ることなくデータを取得できます。

import { stitch } from 'stitchapi';
import { bearer, env } from 'stitchapi/auth';

const getUser = stitch({
    path: 'https://api.example.com/users/{id}',
    auth: bearer(env('API_TOKEN')), // resolved per call; the caller passes no secret
});

bearer、apiKey、basic はヘッダー方式です。oauth2() はクライアントクレデンシャルグラントを実行し、トークンをキャッシュして更新します。cookieSession はログインを実行してCookieを取得し、それを再送信します。また、セッションの期限が切れると再ログインします。呼び出し側がパスワードを見ることも、Cookieをやり取りする処理を書くこともありません。詳細なガイド:認証。

サーフェス:あらゆるリクエスト形式

サーフェスとは、stitch が扱うリクエストの 形式 です。デフォルトは http で、その他は同じエンジン上で対等なサーフェスです。auth、retry、throttle、timeout、バリデーション、イベントストリームは、どのサーフェスとも組み合わせられます。それぞれが独立したサブパスからインポートされるため、import { stitch } では http のみが読み込まれます。

サーフェスインポート形式await の戻り値
httpstitch (デフォルト)JSON over HTTP の呼び出しバリデーション済みの本文
graphqlstitchapi/graphqlPOST { query, variables }、data を取得data ペイロード
ssestitchapi/ssetext/event-stream リーダー(fetch 経由)解析済みの各イベントを収集
streamstitchapi/stream生の ReadableStream リーダーデコード済みの各チャンクを収集
downloadstitchapi/downloadバッファリングされたバイナリ GET{ blob, filename }
llmstitchapi/llmプロバイダーコントラクトを介したチャット補完正規化された { text, … }
shell@stitchapi/shell (ピアパッケージ)ローカルコマンド、引数+stdinコマンドの stdout
postmessagestitchapi/postmessage型付き iframe ↔ 親間の RPC/イベント呼び出し型付き RPC レスポンス

詳細ガイド:サーフェス。

4 つの呼び出し方法

同じ型付きユニットには 4 つの方法でアクセスできるため、人間もエージェントも、まったく同じバリデーション済みで観測可能な処理を呼び出せます。

呼び出し方法方法例
プロセス内関数インポートして呼び出すawait listUsers()
CLI コマンドstitch run$ stitch run listUsers
HTTP エンドポイントstitch servePOST /stitch/listUsers
MCP/エージェントツールstitch mcprun_stitch { "name": "listUsers" }

関数以外の 3 つの呼び出し方法では、stitch のエクスポート名で指定します。この名前は、list_stitches と GET / が一覧表示する名前と同じです。

stitch run はすべてのイベントを stdout に 1 行 1 件の JSON としてストリーム出力するため(jq ですぐに処理できます)。stitch trace は実行ログの概要として、実行、失敗、再試行、ドリフト、レイテンシのパーセンタイルを表示します。詳細ガイド:サーフェス → CLI。

エージェントネイティブ

stitch は AI エージェントから呼び出されることを前提に構築されています。認証情報は stitch に紐付けられるため、エージェントが得るのは認証情報ではなく、機能です。また、エンドポイントごとに MCP ツールを 1 つ用意するのではなく(モデルのコンテキストがあふれるため)、エージェントは単一のコードモードツール run_stitch を操作します。このツールは stitchapi をインポートして stitch を呼び出す短い TypeScript スニペットを記述します。list_stitches と describe_stitch による検出機能も備えているため、カタログが拡大してもコンテキストの使用量は一定に保たれます。

エージェントにとって作成も簡単です。curl/HAR/ドキュメントの例を 1 つエージェントに渡すと、stitch 宣言が生成されます。よくあるケースには、決定論的なショートカットも用意されています。

$ stitch from-curl 'curl https://api.example.com/users/7 -H "authorization: Bearer …"'
# prints a ready-to-commit stitch: id-like segments lifted to {params}, secrets → env()

stitch init は、「fetch を手書きせず、stitch を宣言する」というルールを、コーディングエージェントが読むファイル(AGENTS.md、Cursor/Windsurf/Cline のルール、CLAUDE.md のセクション)に書き込みます。また、ドキュメントのビルド時に、自動生成される llms.txt も出力されます。詳細ガイド:エージェントからの利用。

エラーと注意点

ステッチに失敗すると、.status、.attempts、および(レスポンスエラーの場合は).body(解析済みのエラーペイロード。トレースシンクには決して送られない、列挙不可のチャネル上にあります)と .url を持つ Error のサブクラス、StitchError がスローされます。分岐したい場合は、.safe() を使うと { ok, data, error } が返されます。.status と .attempts(および instanceof RateLimitError)で分岐してください。以下の STITCH_* 名はドキュメント上の ID であり、実行時の値ではないため、照合する error.code はありません。

カタログ ID該当する状況
STITCH_VALIDATIONレスポンスが出力スキーマに適合しなかった場合
STITCH_DRIFTレスポンスのドリフトが許容したレベルを超えた場合
STITCH_AUTH_WALL認証に失敗した場合、またはソフトな 200 のログイン画面を再読み込みできなかった場合
STITCH_TIMEOUT呼び出しがタイムアウト予算を超過した場合
STITCH_CIRCUIT_OPEN繰り返し失敗した結果、サーキットブレーカーがオープン状態になった場合
STITCH_GRAPHQLGraphQL レスポンスが 200 で返されたものの、errors 配列を含んでいた場合
RateLimitErrorデリゲートバックオフを使うステッチで、外側のゲートにレート制限が表面化した場合

カタログ全体:エラーと注意点。

インフラ不要の可観測性

可観測性はイベントストリームの利用者であり、独立したシステムではありません。また、デフォルトではオフです。ステッチごとに(trace: 'console'/fileSink(path)/TraceSink)、または環境変数でグローバルに有効化できます。コレクターも、ダッシュボードも、デプロイするものも必要ありません。

STITCH_TRACE_CONSOLE=1 node app.js          # live, colored, one line per event on stderr
STITCH_TRACE_FILE=./run.jsonl node app.js   # append JSONL to a path
STITCH_EXPORT=otlp node app.js              # also fan events to an OTLP collector

組み込みシンクはシンクの境界でシークレットをマスキングします(実行中のリクエストには決して触れません)。stitch trace は JSONL を要約します。@stitchapi/pino は同じイベントを構造化ログとして出力します。

パッケージ

このリポジトリは pnpm ワークスペースです。公開ライブラリは stitchapi です。それ以外は、独自の機能を追加しない、依存関係をピアとして持つ薄い統合パッケージです。以下の表は pnpm gen:readme によって生成され(CI では pnpm check:readme によって検証されます)、公開可能なワークスペースパッケージをすべて一覧表示するため、パッケージが追加されても内容が古くなりません。各パッケージの README から npm 上のページにリンクしています。

パッケージ説明
コア
stitchapiあらゆる API を型安全で回復力のある関数に変換します
サーバーフレームワーク
@stitchapi/elysiaコンテキスト上の Web 標準のシーム。SSE とエラーマッピングに対応します
@stitchapi/expressreq 上のリクエストスコープのシーム。SSE とエラーマッピングに対応します
@stitchapi/fastifyアプリ/リクエストのシーム。SSE、エラー、Pino ロガーのブリッジに対応します
@stitchapi/honoリクエストコンテキスト上のエッジ対応シーム。SSE とエラーに対応します
@stitchapi/nestNest の DI グラフに接続されたインジェクション可能な Stitch
@stitchapi/nextApp Router で Stitch を SSE Response としてストリーミングします
クライアントと UI バインディング
@stitchapi/angularStitch のライフサイクルを Angular シグナルと RxJS オブザーバブルとして提供します
@stitchapi/expoセキュアストアのトークンストアを使い、expo/fetch 経由でストリーミングします
@stitchapi/query-coreUI バインディングを支えるフレームワーク非依存のリアクティブストア
@stitchapi/reactティアリングのない useStitch / useStitchStream フック
@stitchapi/react-nativeストリーミング対応の XHR アダプターと AsyncStorage ベースのストア
@stitchapi/solidcreateStitch プリミティブを Solid ストアに調整して取り込みます
@stitchapi/svelteSvelte 4 と 5 向けの Stitch ストア(一方向+ストリーミング)
@stitchapi/vueリアクティブな useStitch / useStitchStream コンポーザブル
データ取得ライブラリ
@stitchapi/rtk-queryストリーム更新に対応し、Stitch を RTK Query エンドポイントとして実行します
@stitchapi/swrStitch を SWR フェッチャーとして実行し、キャッシュは SWR が管理します
状態ストア
@stitchapi/cloudflare-kvWorkers KV によるエッジキャッシュと共有セッション
@stitchapi/deno-kvDeno KV による分散スロットリングとセッション
@stitchapi/redisRedis による分散スロットリングと共有セッション
認証
@stitchapi/aws-sigv4AWS SigV4 でリクエストに署名します(エッジ対応の Web Crypto)
AI
@stitchapi/vercel-ai認証情報を安全に保ちながら、Stitch をモデルから呼び出し可能なツールとして公開します
オブザーバビリティ
@stitchapi/pinoStitch のイベントストリームを構造化された Pino ログとして出力します
@stitchapi/sentryエラーのキャプチャに対応し、Stitch のイベントを Sentry のブレッドクラムとして記録します
サーフェス
@stitchapi/shell静的なローカルコマンドを Stitch として実行します(インジェクションを防止)
キャッシュフィンガープリントアダプター
@stitchapi/fingerprint-arktypeArkType スキーマ向けのキャッシュフィンガープリント戦略
@stitchapi/fingerprint-effectEffect Schema 向けのキャッシュフィンガープリント戦略
@stitchapi/fingerprint-typeboxTypeBox スキーマ向けのキャッシュフィンガープリント戦略
@stitchapi/fingerprint-valibotValibot スキーマ向けのキャッシュフィンガープリント戦略
@stitchapi/fingerprint-zodZod スキーマ向けのキャッシュフィンガープリント戦略
その他
@stitchapi/docs-mcpMCP stdio 経由でローカル実行する StitchAPI ドキュメント検索
@stitchapi/json-schema実行時に検出された JSON Schema を、StitchAPI が受け入れる Standard Schema バリデーターに変換します
@stitchapi/openapiOpenAPI ドキュメントから選択したオペレーションを切り出し、そのまま所有できる StitchAPI ソースとして生成します
## ドキュメント

ドキュメントサイトの全内容は stitchapi.dev にあります。クイックスタート、機能ごとのガイド、概念、サーフェス、エージェント向け、および生成されたリファレンスをご覧ください。

公開ライブラリ自体の README(npm に表示されるもの)は packages/core/README.md にあります。設計ノートは docs/ にあります:Feature Lenses、概要、設計。

コントリビューション

ローカル環境のセットアップ、開発ループ、バンドルサイズの予算、worktree と PR のワークフローについては CONTRIBUTING.md に記載されています。

ライセンス

Apache-2.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。