MCP Fusion/Operate and integrate/Cliente tipado
Cliente tipado
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:
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
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:
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:
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:
| Runtime | Package | Shape |
|---|---|---|
| Vercel AI SDK | @ai-sdk/mcp | createMCPClient() then client.tools() for generateText or streamText |
| LangChain | @langchain/mcp-adapters | MultiServerMCPClient.loadTools() then a LangGraph agent |
| LlamaIndex | @llamaindex/tools | mcp(...).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
- Errors: o XML que seu cliente analisa
- Tool exposition: como ações pontuadas se tornam ferramentas
- Runtime architecture: como o servidor as despacha
