MCP Fusion/Operate and integrate/型付きクライアント

型付きクライアント

VinkiusについてAIに質問

Builderから推論されたルーターを使ってTypeScriptからコネクタを呼び出します。ドット区切りのアクションを実行し、呼び出しをまとめ、流暢なプロキシを使い、tool_errorをMCPFusionClientErrorとして解析できます。

MCP Fusionは境界の両側で役立ちます。サーバーはセキュリティパイプラインを管理し、型付きクライアントは呼び出し元のアプリケーションにコンパイラーで検証された契約を提供します。生成SDKも引数インターフェースの重複も必要ありません。

ルーターを一度だけエクスポートする

サーバーでは、builderをカリー化された型付きレジストリでラップし、推論されたルーター型をエクスポートします。

typescript
import { createTypedRegistry } from '@mcpfusion/core';
import type { InferRouter } from '@mcpfusion/core';

const registry = createTypedRegistry<AppContext>()(
  listProjects,
  createProject,
);

registry.registry.attachToServer(server, { contextFactory });
export type AppRouter = InferRouter<typeof registry>;

実行時の値は registry.registry です。_builders_context は型を保持するフィールドです。InferRouter は各builderが蓄積したファントムルーターマップを交差させるため、.withString() パラメーターを変更すると、コード生成の手順なしでクライアントのコンパイル契約が変わります。

契約に沿って実行する

typescript
import { createMCPFusionClient } from '@mcpfusion/core/client';
import type { AppRouter } from './server.js';

const client = createMCPFusionClient<AppRouter>(transport, {
  throwOnError: true,
});

await client.execute('projects.create', {
  workspace_id: 'ws_1',
  name: 'V2',
});

ドット区切りのアクションはワイヤーネームスペースに対応します。projects.createcallTool('projects', { ...args, action: 'create' }) になります。セグメントが1つの場合はそのまま渡されます。デフォルトの識別キーは action で、discriminatorKey で設定できます。

バッチとプロキシ

executeBatch(calls)Promise.all を使い、呼び出し順に結果を返します。2つ目の呼び出しが1つ目に依存する場合は { sequential: true } を渡します。流暢なプロキシは再帰的なJavaScript Proxyです。

typescript
await client.proxy.projects.create({
  workspace_id: 'ws_1',
  name: 'V2',
});

await client.proxy.platform.users.list({ limit: 10 });

DevToolsの検査とPromiseの then 検索は保護されているため、デバッガーやテストランナーが調べている間にプロキシが誤って実行されることはありません。

クライアントミドルウェア

クライアントミドルウェアはクライアント作成時に一度だけコンパイルされます。

typescript
const client = createMCPFusionClient<AppRouter>(transport, {
  middleware: [async (action, args, next) => {
    const started = Date.now();
    const result = await next(action, args);
    metrics.record(action, Date.now() - started, result.isError);
    return result;
  }],
});

シグネチャは (action, args, next) => Promise<ToolResponse> です。クライアント側のトレーシング、明示的なポリシーに基づくリトライ、相関ヘッダーの追加に使用します。認証、検証、redactは引き続きサーバーが担当します。

エラーの解析

throwOnError: false の場合、クライアントは常に ToolResponse を返すため、isError を確認します。true の場合、isError: true を持つレスポンスは MCPFusionClientError になり、coderecovery、凍結された availableActionsseverity、生のレスポンスを含みます。フレームワークの <tool_error> XMLを解析し、従来のカンマ区切りアクションリストにも対応します。

外部AIクライアント

モデルフレームワーク向けのMCP Fusionブランドアダプターはありません。それぞれの公式MCPクライアントを使用してください。

RuntimePackageShape
Vercel AI SDK@ai-sdk/mcpcreateMCPClient() then client.tools() for generateText or streamText
LangChain@langchain/mcp-adaptersMultiServerMCPClient.loadTools() then a LangGraph agent
LlamaIndex@llamaindex/toolsmcp(...).tools() then agent({ tools })

サーバー側のフレームワークは、MVA Presenter、DLP、テナント境界を引き続き担当します。モデルランタイムは結果として得られるMCPサーフェスだけを利用します。

次のステップ

  • Errors: クライアントが解析するXML
  • Tool exposition: ドット区切りのアクションがツールになる仕組み
  • Runtime architecture: サーバーがそれらをディスパッチする方法