MCP Fusion/Operate and integrate/Typisierter Client

Typisierter Client

Frag die KI über Vinkius

Rufen Sie einen Connector aus TypeScript mit einem aus seinen Buildern abgeleiteten Router auf: Führen Sie punktierte Aktionen aus, bündeln Sie Aufrufe, verwenden Sie einen fließenden Proxy und analysieren Sie tool_error als MCPFusionClientError.

MCP Fusion ist auf beiden Seiten der Grenze nützlich. Der Server verwaltet die Sicherheitspipeline; der typisierte Client gibt der aufrufenden Anwendung einen vom Compiler geprüften Vertrag. Kein generiertes SDK und keine doppelten Argument-Interfaces.

Router einmal exportieren

Umschließen Sie auf dem Server die Builder im curryfizierten typisierten Register und exportieren Sie den inferierten Router-Typ:

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>;

Der Laufzeitwert ist registry.registry; _builders und _context sind typtragende Felder. InferRouter schneidet die von jedem Builder gesammelten Phantom-Router-Maps, sodass eine Änderung an einem .withString()-Parameter den Client-Kompilierungsvertrag ohne Codegenerierung ändert.

Mit dem Vertrag ausführen

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',
});

Eine punktierte Aktion wird auf den Wire-Namespace abgebildet: projects.create wird zu callTool('projects', { ...args, action: 'create' }). Ein einzelnes Segment wird unverändert weitergegeben. Der Standardname des Discriminators ist action und kann mit discriminatorKey konfiguriert werden.

Batch und Proxy

executeBatch(calls) verwendet Promise.all und gibt Ergebnisse in Aufrufreihenfolge zurück. Übergeben Sie { sequential: true }, wenn der zweite Aufruf vom ersten abhängt. Der fließende Proxy ist ein rekursiver JavaScript-Proxy:

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

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

Die DevTools-Inspektion und die Suche nach then bei Promise sind geschützt, damit der Proxy nicht versehentlich ausgeführt wird, wenn ein Debugger oder Test-Runner ihn untersucht.

Client-Middleware

Die Client-Middleware wird einmalig beim Erstellen des Clients kompiliert:

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;
  }],
});

Die Signatur lautet (action, args, next) => Promise<ToolResponse>. Verwenden Sie sie für clientseitiges Tracing, Wiederholungen mit einer ausdrücklichen Richtlinie oder zum Hinzufügen eines Korrelations-Headers. Der Server bleibt für Authentifizierung, Validierung und Schwärzung verantwortlich.

Fehleranalyse

Mit throwOnError: false gibt der Client immer ToolResponse zurück. Prüfen Sie isError. Mit true wird eine Antwort mit isError: true zu MCPFusionClientError mit code, recovery, eingefrorenem availableActions, severity und der Rohantwort. Der Client analysiert das frameworkeigene XML <tool_error>, einschließlich älterer, durch Kommas getrennter Aktionslisten.

Externe KI-Clients

Es gibt keine MCP-Fusion-Adapter mit Markenbindung für Modell-Frameworks. Verwenden Sie deren offizielle MCP-Clients:

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 })

Das Framework auf dem Server bleibt für den MVA-Presenter, DLP und die Tenant-Grenze verantwortlich. Die Modell-Laufzeit nutzt nur die daraus entstandene MCP-Oberfläche.

Nächste Schritte