MCP Fusion/Operate and integrate/Cliente tipado

Cliente tipado

Pergunte à IA sobre a Vinkius

Chame um conector a partir do TypeScript com um roteador inferido dos builders: execute ações pontuadas, agrupe chamadas, use um proxy fluente e analise tool_error em MCPFusionClientError.

O MCP Fusion é útil nos dois lados da fronteira. O servidor é responsável pelo pipeline de segurança; o cliente tipado oferece à aplicação que o chama um contrato verificado pelo compilador. Sem SDK gerado e sem interfaces de argumentos duplicadas.

Exporte o roteador uma vez

No servidor, envolva os builders no registro tipado curried e exporte o tipo de roteador inferido:

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

O valor de execução é registry.registry; _builders e _context são campos que carregam tipos. InferRouter cruza os mapas de roteador fantasma acumulados por cada builder, então mudar um parâmetro .withString() muda o contrato de compilação do cliente sem uma etapa de geração de código.

Execute com o contrato

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

Uma ação pontuada mapeia para o namespace da rede: projects.create se torna callTool('projects', { ...args, action: 'create' }). Um único segmento passa sem alterações. A chave discriminadora padrão é action e é configurável com discriminatorKey.

Lote e proxy

executeBatch(calls) usa Promise.all e retorna resultados na ordem das chamadas. Passe { sequential: true } quando a segunda chamada depender da primeira. O proxy fluente é um Proxy JavaScript recursivo:

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

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

A inspeção do DevTools e a busca por then da Promise são protegidas, para que o proxy não seja executado por engano enquanto um depurador ou executor de testes o examina.

Middleware do cliente

O middleware do cliente é compilado uma vez quando o cliente é criado:

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

A assinatura é (action, args, next) => Promise<ToolResponse>. Use-a para rastreamento no cliente, novas tentativas com uma política explícita ou adição de um cabeçalho de correlação. O servidor continua responsável pela autenticação, validação e redação.

Análise de erros

Com throwOnError: false, o cliente sempre retorna ToolResponse; inspecione isError. Com true, uma resposta com isError: true se torna MCPFusionClientError com code, recovery, availableActions congelado, severity e a resposta bruta. Ele analisa o XML <tool_error> do framework, incluindo listas de ações legadas separadas por vírgulas.

Clientes de IA externos

Não há adaptadores com a marca MCP Fusion para frameworks de modelos. Use os clientes MCP oficiais deles:

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

O framework no servidor continua responsável pelo MVA Presenter, DLP e limite do tenant. O runtime do modelo apenas consome a superfície MCP resultante.

Próximos passos