NeuralOS
GuideAdvanced

Construa seu próprio servidor MCP em TypeScript com FastMCP

Até hoje você foi inquilino: instala MCPs que outros escreveram e sua IA os usa. Ótimo. Mas chega um momento em que isso fica curto — você tem uma API interna, um banco de dados, um script que só você entende, e quer que o Claude o toque diretamente, sem copiar e colar saídas no chat. É aí que você deixa de consumir e começa a publicar. Um servidor MCP é a tomada padrão: você descreve suas ferramentas uma vez, e qualquer IA que fale o protocolo as invoca como se fossem dela. O FastMCP é o framework de TypeScript que envolve o SDK oficial do MCP (o que a Anthropic abriu) e tira o boilerplate do seu caminho — o mesmo salto que o Express te deu sobre o módulo http do Node. Neste guia passamos de um tool 'add' sobre stdio em quinze minutos, a tools com esquemas Zod que se validam sozinhos, resources que expõem dados, prompts reutilizáveis, e por fim produção de verdade: autenticação, HTTP streaming, sessões e edge. No final você terá um MCP próprio que o Claude Code invoca pra valer — não uma demo, uma tubulação sua conectada ao seu mundo.

Jul 19, 202616 min
Para quem é isto?
Para você, que já consome MCPs — instalou o do GitHub, o do Playwright, talvez o agent-browser — e sua IA os usa diariamente. Agora você tem algo que nenhum deles cobre: uma API interna, um banco de dados com seus clientes, um script que faz a mágica estranha do seu negócio. Você quer que o Claude o toque diretamente, e não ficar colando saídas no chat como um entregador. Este guia é a travessia do rio: de inquilino de MCPs alheios a autor do seu. Você sabe um pouco de TypeScript, não precisa ser especialista. Em uma tarde você tem um servidor que o Claude Code invoca de verdade.

O MOMENTO: quando consumir fica curto

Faz semanas que você está com a IA conectada a ferramentas. Você pede que ela abra um navegador e ela abre. Pede que leia um repo e ela lê. Tudo isso são MCPs que outros escreveram — tomadas padrão que alguém publicou e você instalou. Funciona porque falam uma língua comum: o Model Context Protocol, o padrão aberto para que qualquer IA descubra e invoque ferramentas externas sem se acoplar a nenhuma.

O momento chega quando o que você precisa não existe como MCP. Você tem um endpoint interno que devolve o status dos seus pedidos. Uma planilha que só você sabe ler. Um script de 40 linhas que calcula algo específico do seu domínio. Hoje, cada vez que você quer que a IA use isso, faz a dança do entregador: você executa, copia a saída, cola no chat, espera. Funciona uma vez. Na décima, você se pergunta por que a IA não faz isso sozinha.

A analogia da tomada
Antes das tomadas padrão, cada aparelho vinha com o próprio fio soldado na parede. Você mudava de casa e nada encaixava. A tomada resolveu isso: uma interface, mil aparelhos. Um servidor MCP é exatamente isso para a IA. Você descreve suas ferramentas uma vez com o protocolo, e qualquer cliente que o fale — Claude Desktop, Claude Code, outros — as pluga sem saber nada do seu código interno. Você para de soldar fios.

Este recurso fecha um arco. No agent-browser você aprendeu a dar à sua IA uma capacidade externa para consumir o mundo — ver páginas, clicar, extrair. Aqui você gira a câmera: aprende a publicar suas próprias capacidades para que outras IAs as consumam. De usuário a autor. É o mesmo protocolo, visto do outro lado do fio.

A DOR: o SDK oficial é potente mas hostil

Quando você abre o SDK oficial do MCP pela primeira vez, a sensação é a de abrir o capô de um carro de corrida: tudo está ali, tudo é correto, e nada é óbvio. Você tem que registrar handlers na mão, mapear os requests do protocolo, serializar respostas no formato exato que o cliente espera, gerenciar o ciclo de conexão, fazer o parse dos parâmetros de entrada e validá-los por conta própria. Para expor um único tool que soma dois números, você escreve dezenas de linhas de encanamento antes de chegar à linha que faz a soma.

De onde vem essa dor? Do fato de o SDK oficial ser de baixo nível de propósito. É a base sobre a qual se constrói, não a ergonomia final — assim como o módulo http do Node é correto mas ninguém escreve um servidor web com ele diretamente, usa Express. O SDK te dá acesso total ao protocolo; o preço é que você carrega todo o boilerplate. É ótimo para quem constrói frameworks. É hostil para quem só quer plugar sua API.

O que acontece se você não atravessar este rio (honesto, não apocalíptico)
Nada quebra se você continuar como consumidor. Seus MCPs instalados seguem funcionando. Mas você fica com um teto: sua IA só pode tocar o que outros já empacotaram. Sua API interna, seu banco de dados, sua lógica de negócio — tudo isso fica do outro lado do vidro, e você de entregador colando saídas. Não é um acidente grave. É uma capacidade que você deixa sobre a mesa, dia após dia, até que um concorrente a recolha.

O FastMCP existe para apagar exatamente esse boilerplate. É um framework de TypeScript que envolve o SDK oficial do MCP — não o substitui, fica em cima dele — e te dá uma API declarativa: você descreve o tool, seu esquema e sua função, e o FastMCP cuida do resto (registro, serialização, ciclo de conexão, validação). O tool de somar passa daquela confusão de encanamento para pouco mais de uma dúzia de linhas. E são as que importam: as que de verdade fazem a soma.

punkpeye/fastmcp
REPO

Framework de TypeScript para construir servidores MCP sem boilerplate. Fica em cima do SDK oficial do MCP (@modelcontextprotocol/sdk, o que a Anthropic abriu) e adiciona tools com validação por esquema (Zod e outros Standard Schema), resources, prompts, autenticação, HTTP streaming, sessões e um CLI de desenvolvimento. A forma mais rápida de passar de ideia a servidor MCP que o Claude invoca de verdade.

TypeScriptMITView on GitHub

O HÁBITO: em que momentos você publica um MCP

Publicar um servidor MCP não é algo que você faz uma vez e esquece. É um reflexo que se ativa em momentos concretos. Aprenda a reconhecê-los e você saberá sempre quando vale a pena o tempo de construí-lo.

Momentos que pedem um MCP próprio
Você repete a dança do entregador. Se pela terceira vez você executa algo na mão e cola a saída no chat, esse algo quer ser um tool.
Você tem uma API interna que a IA deveria tocar. Status de pedidos, métricas, um CRUD seu — envolva uma vez, use a partir de qualquer cliente.
Você quer que vários agentes compartilhem uma capacidade. Um MCP é uma tomada comum: escreva uma vez, e todos os seus agentes o plugam.
Sua lógica de negócio vive em um script. Aquele cálculo estranho que só você entende merece ser um tool com nome e esquema, não um copia-e-cola.
Você precisa de dados de contexto, não de ações. Aí não vai um tool: vai um resource (veremos). Documentos, logs, configuração que a IA lê.
Você repete o mesmo template de prompt. Um prompt do MCP o empacota e o oferece a qualquer cliente com um nome.
A regra do terceiro copia-e-cola
A primeira vez que você cola uma saída no chat, é exploração. A segunda, é coincidência. A terceira é um sinal. Quando você notar que está fazendo de ponte manual entre uma ferramenta sua e a IA pela terceira vez, pare. Isso já não é trabalho pontual: é um tool esperando para nascer. O tempo que você investe em envolvê-lo se paga na primeira semana.

Preparar o terreno (2 minutos)

O FastMCP se instala como qualquer pacote do npm. Roda sobre Node moderno com TypeScript. Um projeto novo mínimo cabe em uma pasta com três arquivos.

bash
# En una carpeta nueva para tu servidor
mkdir mi-mcp && cd mi-mcp
npm init -y

# FastMCP + Zod (para los esquemas de entrada) + tsx (para correr TS sin compilar)
npm install fastmcp zod
npm install -D tsx typescript
Por que Zod
O Zod é a biblioteca que descreve a forma dos dados de entrada de cada tool: a é um número, email é uma string com formato de e-mail, edad é um inteiro opcional. O FastMCP pega esse esquema e faz duas coisas de graça: (1) diz ao cliente quais parâmetros seu tool espera, para que a IA os preencha bem; e (2) valida a entrada antes que ela chegue ao seu código. Se a IA mandar lixo, quem rejeita é o esquema, não sua função. É um guarda na porta que você não precisa escrever. (O FastMCP também aceita outros validadores do mesmo padrão — ArkType, Valibot — mas o Zod é o caminho mais batido.)

Seu primeiro servidor: o tool 'add' (15 minutos)

Começamos pelo 'olá mundo' do MCP: um servidor com um único tool que soma dois números. É deliberadamente bobo — a graça não é a soma, é ver o fio completo: definir o servidor, registrar um tool com seu esquema, iniciá-lo, e o Claude invocá-lo. Assim que você tem esse esqueleto, todo o resto são variações.

typescript
// server.ts
import { FastMCP } from "fastmcp";
import { z } from "zod";

const server = new FastMCP({
  name: "Mi Servidor",
  version: "1.0.0",
});

server.addTool({
  name: "add",
  description: "Suma dos números",
  parameters: z.object({
    a: z.number(),
    b: z.number(),
  }),
  execute: async (args) => {
    return String(args.a + args.b);
  },
});

server.start({
  transportType: "stdio",
});

Leia de cima a baixo, porque este padrão se repete em tudo o que você construir. new FastMCP cria o servidor com nome e versão — é isso que o Claude verá na lista de conexões. addTool registra uma ferramenta: um nome (com o qual a IA a invoca), uma descrição (que a IA lê para decidir quando usá-la — escreva-a bem, é marketing dirigido à máquina), os parameters como esquema Zod, e execute, a função que roda de verdade. Você devolve uma string e o FastMCP a envolve no formato do protocolo por você.

stdio: a tomada local
transportType: "stdio" significa que o servidor fala pela entrada e saída padrão — o mesmo canal pelo qual um programa de terminal recebe e emite texto. É o transporte mais simples: o cliente (Claude Code) lança seu servidor como um subprocesso e conversa com ele por esse cano. Zero rede, zero portas, zero configuração. Perfeito para ferramentas locais suas. Quando você quiser expô-lo pela internet, trocará este transporte por HTTP — mas para começar, stdio é tudo o que você precisa.

Testá-lo antes de conectá-lo: o CLI do FastMCP

Antes de plugá-lo ao Claude, teste-o isolado. O FastMCP traz um CLI que inicia seu servidor e te deixa falar com ele, mais o Inspector oficial do MCP para vê-lo em uma interface visual. É o seu loop de desenvolvimento: você muda o código, testa aqui, e só quando funciona conecta ao cliente real.

bash
# Arranca tu servidor en modo desarrollo (interactúas con los tools)
npx fastmcp dev server.ts

# Ábrelo en el MCP Inspector (interfaz visual para inspeccionar tools/resources/prompts)
npx fastmcp inspect server.ts
O loop de ouro
Não conecte ao Claude cada vez que você muda uma vírgula. É lento e contamina o teste. Use npx fastmcp dev como sua bancada de trabalho: ali você vê o erro cru, a saída exata, o esquema tal como seu servidor o publica. Só quando o tool faz o que você quer, você dá o passo de conectá-lo ao cliente. Assim como você não faz deploy para produção para testar um if — testa local primeiro.

Conectá-lo ao Claude Code (para que o invoque de verdade)

Aqui é onde deixa de ser um exercício e vira real. Um cliente MCP (Claude Desktop, Claude Code) lança seu servidor como subprocesso e fala com ele por stdio. Ele só precisa saber como iniciá-lo: qual comando e quais argumentos. Isso vive em um arquivo de configuração com a lista de servidores MCP.

json
{
  "mcpServers": {
    "mi-servidor": {
      "command": "npx",
      "args": ["tsx", "/ruta/absoluta/a/mi-mcp/server.ts"]
    }
  }
}

command é o executável que lança seu servidor e args seus argumentos — aqui usamos npx tsx para rodar o TypeScript diretamente sem compilar. Use caminho absoluto: o cliente não sabe de qual pasta você o lança. Uma vez salvo e reiniciado o cliente, seu servidor aparece na lista, e quando você pedir ao Claude "soma 128 e 45", verá como ele invoca o seu tool add em vez de calcular de cabeça. Esse momento — o primeiro tool seu que a IA chama sozinha — é o que engancha.

Caminhos relativos: o erro clássico
A falha número um ao conectar um MCP local é colocar um caminho relativo (./server.ts) em args. O cliente lança o subprocesso a partir do diretório de trabalho dele, não do seu, então ./server.ts aponta para o nada e o servidor não inicia — normalmente em silêncio. Se o seu MCP não aparece ou falha ao conectar, revise isso primeiro: caminho absoluto, sempre.

Subir de nível: esquemas Zod que se validam sozinhos

O tool add usava Zod para o mínimo. Mas o verdadeiro poder aparece com tools reais, onde a entrada tem forma e regras. Imagine um tool que cria um usuário: o e-mail deve ter formato de e-mail, a idade deve ser um inteiro positivo, o papel só pode ser um de uma lista. Com Zod, você descreve tudo isso e o FastMCP rejeita a entrada inválida antes que ela toque no seu código. Você nunca escreve um if (!email.includes('@')). O esquema é o guarda.

typescript
server.addTool({
  name: "crear_usuario",
  description: "Crea un usuario en el sistema con validación completa",
  parameters: z.object({
    nombre: z.string().min(2),
    email: z.string().email(),
    edad: z.number().int().positive().optional(),
    rol: z.enum(["admin", "editor", "lector"]),
  }),
  execute: async (args) => {
    // Si llegaste aquí, args YA está validado: email es email, rol es válido.
    const usuario = await miBaseDeDatos.insertar(args);
    return `Usuario ${usuario.id} creado con rol ${args.rol}`;
  },
});
O esquema é documentação viva
Esse esquema Zod faz um trabalho triplo. Um: valida — nada inválido entra. Dois: documenta — o cliente mostra à IA exatamente quais campos o tool espera e de que tipo, para que a IA preencha bem os argumentos em vez de adivinhar. Três: tipa — dentro de execute, args vem tipado em TypeScript, com autocompletar. Um único bloco de código que valida, documenta e tipa. Isto é o que o SDK oficial te obrigava a escrever três vezes na mão.

Resources: expor dados, não só ações

Um tool é um verbo — a IA o executa para que algo aconteça. Mas às vezes você não quer uma ação, quer dar contexto: um arquivo de logs, um documento de configuração, o conteúdo de um README. Para isso existem os resources. São dados que seu servidor expõe e que a IA pode ler quando precisa, identificados por uma URI. Pense nos tools como os botões de um controle, e nos resources como as telas que mostram informação.

typescript
server.addResource({
  uri: "file:///logs/app.log",
  name: "Logs de la Aplicación",
  mimeType: "text/plain",
  async load() {
    const contenido = await fs.readFile("/var/log/app.log", "utf-8");
    return { text: contenido };
  },
});

A uri é o identificador único do resource — o cliente a usa para pedi-lo. mimeType diz à IA de que tipo é o conteúdo (texto simples, JSON, markdown), para que ela o interprete bem. E load é a função que traz o conteúdo quando alguém o pede — preguiçosa por design: você não lê o arquivo até que seja necessário. Para dados binários você devolve { blob } em base64 em vez de { text }. Um resource é a forma limpa de dizer "IA, aqui estão os dados frescos quando você precisar", sem gastá-los no prompt até o momento exato.

Prompts: empacotar seus templates reutilizáveis

O terceiro ingrediente do protocolo são os prompts. Se você tem um template que usa o tempo todo — 'gera uma mensagem de commit a partir deste diff', 'resume esta reunião com este formato' — um prompt do MCP o empacota com um nome e uns argumentos, e qualquer cliente pode invocá-lo. Você deixa de copiar e colar a mesma instrução longa: você a oferece como mais uma capacidade do seu servidor.

typescript
server.addPrompt({
  name: "git-commit",
  description: "Genera un mensaje de commit a partir de un diff",
  arguments: [
    {
      name: "changes",
      description: "El diff de git o una descripción de los cambios",
      required: true,
    },
  ],
  load: async (args) => {
    return `Genera un mensaje de commit conciso para estos cambios:\n${args.changes}`;
  },
});
Tools, resources, prompts: os três verbos do protocolo
Com estes três você constrói qualquer servidor MCP. Tools = ações que a IA executa (criar, buscar, enviar). Resources = dados que a IA lê (logs, docs, config). Prompts = templates que a IA reutiliza (formatos, instruções recorrentes). A maior parte do seu trabalho serão tools. Mas saber que os outros dois existem evita que você enfie à força em um tool algo que era, na verdade, um resource ou um prompt.

O salto para produção: de stdio a HTTP streaming

Tudo o que veio antes rodava por stdio: local, seu, um subprocesso na sua máquina. Perfeito para começar. Mas quando você quer que outros usem o seu MCP — seu time, um cliente, você mesmo de vários lugares — você precisa expô-lo pela internet. Aí entra o transporte HTTP streaming: em vez de um cano local, seu servidor escuta em uma porta e responde por HTTP com streaming de eventos. O código dos seus tools não muda uma linha; você só muda como ele inicia.

typescript
server.start({
  transportType: "httpStream",
  httpStream: {
    port: 8080,
    endpoint: "/mcp", // opcional, por defecto es /mcp
  },
});

Esse é o interruptor completo. Mesmos tools, mesmos resources, mesmos prompts — agora servidos por HTTP na porta 8080, endpoint /mcp. Um cliente remoto aponta para https://tu-dominio/mcp e pluga. Aqui é onde seu MCP deixa de ser uma ferramenta pessoal e vira um serviço. E onde surge a pergunta que separa um brinquedo de um produto: quem pode chamá-lo?

Autenticação: a doutrina cadeado + tubulação

Um MCP por HTTP sem autenticação é uma porta aberta: qualquer um que saiba a URL invoca seus tools, toca seu banco de dados, gasta seus recursos. O FastMCP resolve isso com uma opção authenticate: uma função que roda em cada conexão, inspeciona a requisição (headers, API key, token), e decide se passa ou não. Se passa, devolve um objeto de sessão que estará disponível dentro de cada tool.

typescript
const server = new FastMCP({
  name: "Mi Servidor",
  version: "1.0.0",
  authenticate: (request) => {
    const apiKey = request.headers["x-api-key"];
    if (apiKey !== process.env.MCP_API_KEY) {
      throw new Response(null, { status: 401, statusText: "Unauthorized" });
    }
    return { id: 1, role: "user" }; // esto se vuelve la sesión
  },
});

server.addTool({
  name: "sayHello",
  execute: async (args, { session }) => {
    return `Hola, usuario ${session.id}!`; // session viene de authenticate
  },
});
O cadeado e a tubulação
Aqui se torna tangível uma doutrina chave do mundo das integrações: a autenticação é o cadeado, o MCP é a tubulação, e eles se combinam. O protocolo MCP move as chamadas (a tubulação). Mas quem tem o direito de mover algo por essa tubulação é decidido pelo cadeado — a API key, o OAuth, o token que o authenticate valida. Não são rivais: um MCP de produção é tubulação com cadeado. Sem cadeado, sua tubulação é uma torneira pública que qualquer um abre.
A API key vai em variável de ambiente, nunca no código
Repare em process.env.MCP_API_KEY. A chave jamais se escreve literal no código nem se sobe pro git — é a mesma regra de ouro do recurso de segredos: fora do repo, em uma variável de ambiente ou um gerenciador de segredos. Um MCP com a key hardcoded é um MCP com a porta pintada de 'fechado' mas sem fechadura de verdade. Qualquer um que veja o código, entra.

Sessões, progresso e streaming: tools que respiram

Os tools reais não são instantâneos. Um tool que processa um arquivo grande, chama uma API lenta ou gera conteúdo demora segundos. O FastMCP te dá, dentro de execute, um contexto com ferramentas para que esse tool respire: reportar progresso, emitir conteúdo em streaming, logar, e acessar a sessão do usuário autenticado.

typescript
server.addTool({
  name: "procesar_lote",
  description: "Procesa un lote reportando progreso en vivo",
  parameters: z.object({ total: z.number() }),
  annotations: { streamingHint: true },
  execute: async (args, { streamContent, reportProgress, log, session }) => {
    log.info(`Iniciando lote para ${session.id}`);
    await streamContent({ type: "text", text: "Empezando..." });
    await reportProgress({ progress: 50, total: 100 });
    // ... trabajo real ...
    return "Completado";
  },
});

reportProgress({ progress, total }) diz ao cliente 'estou nos 50%', e a IA (e o humano) veem uma barra em vez de um silêncio angustiante. streamContent emite saída em pedaços conforme se gera, em vez de esperar o final — a diferença entre ver o texto aparecer e olhar um spinner. log deixa rastro estruturado para depurar. E session é o usuário que o authenticate validou, então cada tool sabe quem está chamando. Com estes, seus tools deixam de ser caixas-pretas que demoram e viram processos observáveis.

O PROMPT MESTRE: arranque seu servidor MCP

Aqui está o único prompt que você precisa guardar. Em vez de escrever o servidor na mão, você o descreve para sua IA — que já tem todo o contexto do FastMCP deste guia diante dela — e ela gera o esqueleto completo, testado, pronto para conectar. Preencha os colchetes com seu caso real e deixe ela construir. Um único prompt, não cinco: este arranca o projeto inteiro.

O gerador de servidores MCPtext
Aja como engenheiro sênior de MCP. Vamos construir um servidor MCP em TypeScript com FastMCP (o framework que envolve o SDK oficial do MCP, o que a Anthropic abriu; se instala com `npm install fastmcp zod`).

MEU SERVIDOR:
- Nome: [nome do seu servidor, ex. "CRM Interno"]
- O que expõe: [descreva em 2 linhas quais ferramentas/dados você quer que a IA toque]

OS TOOLS QUE PRECISO (ações que a IA executará):
1. [nome_tool] — [o que faz] — entradas: [campos e seus tipos/regras]
2. [nome_tool] — [o que faz] — entradas: [campos e seus tipos/regras]

RESOURCES (dados que a IA lerá, se aplicável):
- [nome] — [quais dados expõe, ex. logs, config]

MODO: [comece em "stdio local" para desenvolvimento | depois migro para "httpStream com autenticação por API key" para produção]

CONSTRUA:
1. server.ts completo: `new FastMCP` com nome e versão, cada tool com `addTool` (name, description clara orientada a que a IA saiba quando usá-lo, parameters como esquema Zod que VALIDE de verdade — .email(), .int().positive(), .enum() onde couber, e .optional() no opcional, execute tipado).
2. Os resources com `addResource` (uri, name, mimeType, load preguiçoso que devolva {text} ou {blob}) se eu pedi.
3. O `server.start` com o transporte que escolhi (stdio ou httpStream com port/endpoint).
4. Se pedi produção: a opção `authenticate` que lê a API key de `process.env` (NUNCA hardcoded), lança `new Response(null, {status: 401})` se não bater e devolve a sessão, mais um tool que use `session`.
5. O bloco JSON de `mcpServers` para conectá-lo ao Claude Code, com `npx tsx` e caminho ABSOLUTO.
6. Os comandos exatos: instalar, testar com `npx fastmcp dev server.ts`, e inspecionar com `npx fastmcp inspect server.ts`.

RESTRIÇÕES: zero segredos no código; descrições de tools escritas PARA que a IA decida bem quando invocá-las; valide toda entrada com Zod, não com ifs na mão. Explique-me cada tool em uma linha antes do código.
Como usar este prompt
Não dispare e vá embora. Comece no modo stdio local com um ou dois tools — o mínimo que você possa testar com npx fastmcp dev. Quando isso funcionar e o Claude o invocar de verdade, volte ao mesmo prompt trocando o MODO para produção com autenticação. Assim você constrói em camadas verificáveis em vez de cuspir um servidor gigante sem testar. E aplique o hábito de sempre: primeiro um commit do esqueleto que funciona, depois o resto.

OS CAMINHOS MAIS FÁCEIS: chat vs. web

Publicar um MCP tem dois caminhos conforme onde você está parado, e convém saber quando tomar cada um.

Por chat (com sua IA, gerando o código)
Ideal quando você começa do zero. Cole o prompt mestre, descreva seus tools, e a IA gera server.ts completo com Zod, transporte e config.
Ideal para iterar rápido. "Adicione um tool que apague por id", "mude stdio para httpStream com auth" — mudanças conversacionais sobre o mesmo arquivo.
Ideal para conectar. A IA te dá o bloco mcpServers com o caminho correto e os comandos de fastmcp dev para testar antes de plugar.
Pela web / terminal (você no comando)
Para o deploy real. Subir o servidor HTTP a um host (edge, um contêiner, seu VPS), configurar o domínio e as variáveis de ambiente com a API key.
Para testar isolado. npx fastmcp inspect server.ts abre o Inspector visual — ali você vê seus tools, resources e prompts como um cliente os vê.
Para versionar. git commit do esqueleto que funciona antes de adicionar mais — o hábito de salvar antes que a IA quebre algo continua mandando.

O arco completo: de consumidor a autor

Recue e olhe o caminho. Você começou consumindo MCPs que outros escreveram — sua IA usava ferramentas alheias. Aprendeu com o agent-browser a dar a ela uma capacidade para ver e tocar o mundo. E aqui, com o FastMCP, você girou a câmera: agora você publica suas próprias capacidades para que qualquer IA as consuma. Um tool add em quinze minutos virou tools com Zod, resources, prompts, autenticação e HTTP. Você fechou o arco usuário→autor. Já não é inquilino do ecossistema MCP: é dono de uma tomada.

No NeuralOS: o catálogo de tools já cabeado
Tudo o que você constrói aqui na mão — envolver uma API, colocar um cadeado nela, expô-la como tubulação — é exatamente o trabalho que o NeuralOS já traz resolvido nas suas integrações: um motor que cabeia cada serviço com sua autenticação e guarda as credenciais em um Vault criptografado por tenant, com suporte multi-conta. É o catálogo de tools já montado, com o cadeado posto. E a frente MCP (B8) — que hoje vive como visão na interface — aponta para que esse catálogo fale o mesmo protocolo padrão que você acabou de aprender a publicar. Você escreve seu MCP próprio para suas coisas estranhas; o NeuralOS te poupa as comuns, já cabeadas e asseguradas. A tubulação e o cadeado, sem escrever o boilerplate.
Agent-browser: para sua IA não construir às cegas
O outro lado do arco: você aprendeu a CONSUMIR uma capacidade externa. Este recurso te ensinou a PUBLICAR as suas. Leia-os juntos para ver o ciclo completo usuário→autor.
Proteja seu app: RLS, CORS e headers
Seu MCP por HTTP é uma superfície exposta. Antes de deixá-lo aberto ao mundo, o cadeado (auth), CORS e os headers são a diferença entre uma tubulação segura e uma torneira pública.
#MCP#TypeScript#FastMCP#Claude Code#Agentes#Zod
Ready to build?

Start building in
under 3 minutes

Join 4,200+ builders. No credit card. Build your first app with AI in minutes.