Home
Login

Um framework TypeScript para construir servidores MCP

MITTypeScript 1.9kpunkpeye Last Updated: 2025-06-21

FastMCP - Framework TypeScript para Servidores MCP

Visão Geral do Projeto

FastMCP é um framework TypeScript projetado especificamente para construir servidores Model Context Protocol (MCP). Ele oferece um conjunto completo de ferramentas e funcionalidades, permitindo que desenvolvedores criem rapidamente servidores MCP de alto desempenho capazes de lidar com sessões de clientes.

Endereço do Projeto: https://github.com/punkpeye/fastmcp

Características Principais

Funcionalidades Básicas

  • Definição simples de ferramentas, recursos e prompts: Fornece uma API intuitiva para definir funcionalidades do servidor
  • Suporte à autenticação: Mecanismo de autenticação integrado para garantir acesso seguro
  • Gerenciamento de sessão: Suporte para tratamento de sessões de clientes e gerenciamento de estado
  • Suporte a conteúdo multimídia: Suporte para retorno de conteúdo de imagem e áudio
  • Registro de logs: Sistema de logs completo para depuração e monitoramento
  • Tratamento de erros: Mecanismo unificado de tratamento de erros
  • Server-Sent Events (SSE): Suporte para envio de dados em tempo real
  • Suporte a CORS: Compartilhamento de recursos de origem cruzada habilitado por padrão

Funcionalidades Avançadas

  • Notificações de progresso: Feedback de progresso em tempo real durante a execução de ferramentas
  • Eventos de servidor tipados: Sistema de eventos TypeScript com segurança de tipo
  • Autocompletar parâmetros de prompt: Funcionalidade de preenchimento automático inteligente de parâmetros
  • Solicitações de amostragem: Suporte para solicitações de amostragem de modelos de IA
  • Heartbeat SSE automatizado: Mantém a estabilidade da conexão
  • Gerenciamento de diretório raiz: Configuração do diretório raiz do sistema de arquivos
  • Ferramenta CLI: Fornece ferramentas de linha de comando para teste e depuração

Instalação e Uso

Instalação

npm install fastmcp

Exemplo Básico

import { FastMCP } from "fastmcp";
import { z } from "zod"; 

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

server.addTool({
  name: "add",
  description: "Add two numbers",
  parameters: z.object({
    a: z.number(),
    b: z.number(),
  }),
  execute: async (args) => {
    return String(args.a + args.b);
  },
});

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

Principais Módulos de Funcionalidade

1. Definição de Ferramentas (Tools)

As ferramentas permitem que o servidor exponha funções executáveis para o cliente, que podem ser chamadas pelo cliente e usadas pelo LLM para executar operações.

Bibliotecas de Validação de Schema Suportadas

  • Zod: A biblioteca de validação de schema TypeScript mais popular
  • ArkType: Biblioteca de validação de tipo moderna
  • Valibot: Biblioteca de validação de schema leve

Exemplo Zod

import { z } from "zod";

server.addTool({
  name: "fetch-zod",
  description: "Fetch the content of a url (using Zod)",
  parameters: z.object({
    url: z.string(),
  }),
  execute: async (args) => {
    return await fetchWebpageContent(args.url);
  },
});

Anotações de Ferramentas

As ferramentas podem conter anotações, fornecendo contexto e informações de controle mais ricos:

server.addTool({
  name: "fetch-content",
  description: "Fetch content from a URL",
  parameters: z.object({
    url: z.string(),
  }),
  annotations: {
    title: "Web Content Fetcher", 
    readOnlyHint: true, 
    openWorldHint: true,
  },
  execute: async (args) => {
    return await fetchWebpageContent(args.url);
  },
});

2. Gerenciamento de Recursos (Resources)

Os recursos representam qualquer tipo de dado que o servidor MCP deseja fornecer ao cliente, incluindo:

  • Conteúdo de arquivos
  • Capturas de tela e imagens
  • Arquivos de log
  • Outros dados
server.addResource({
  uri: "file:///logs/app.log",
  name: "Application Logs",
  mimeType: "text/plain",
  async load() {
    return {
      text: await readLogFile(),
    };
  },
});

Templates de Recursos

server.addResourceTemplate({
  uriTemplate: "file:///logs/{name}.log",
  name: "Application Logs",
  mimeType: "text/plain",
  arguments: [
    {
      name: "name",
      description: "Name of the log",
      required: true,
    },
  ],
  async load({ name }) {
    return {
      text: `Example log content for ${name}`,
    };
  },
});

3. Gerenciamento de Prompts (Prompts)

Os prompts permitem que o servidor defina templates de prompt e fluxos de trabalho reutilizáveis:

server.addPrompt({
  name: "git-commit",
  description: "Generate a Git commit message",
  arguments: [
    {
      name: "changes",
      description: "Git diff or description of changes",
      required: true,
    },
  ],
  load: async (args) => {
    return `Generate a concise but descriptive commit message for these changes:\n\n${args.changes}`;
  },
});

4. Autenticação

FastMCP suporta funcionalidades de autenticação personalizadas:

import { AuthError } from "fastmcp";

const server = new FastMCP({
  name: "My Server",
  version: "1.0.0",
  authenticate: ({ request }) => {
    const apiKey = request.headers["x-api-key"];
    if (apiKey !== "123") {
      throw new Response(null, {
        status: 401,
        statusText: "Unauthorized",
      });
    }
    return {
      id: 1,
    };
  },
});

5. Server-Sent Events (SSE)

Suporte para a funcionalidade SSE para comunicação em tempo real:

server.start({
  transportType: "sse",
  sse: {
    endpoint: "/sse",
    port: 8080,
  },
});

6. Gerenciamento de Sessão

FastMCP atribui uma nova instância de servidor para cada conexão de cliente, implementando comunicação 1:1:

server.on("connect", (event) => {
  console.log("Client connected:", event.session);
});

server.on("disconnect", (event) => {
  console.log("Client disconnected:", event.session);
});

Ferramentas de Desenvolvimento

Teste e Depuração


npx fastmcp dev src/examples/addition.ts


npx fastmcp inspect src/examples/addition.ts

Integração com Claude Desktop

Adicione a configuração no Claude Desktop:

{
  "mcpServers": {
    "my-mcp-server": {
      "command": "npx",
      "args": ["tsx", "/PATH/TO/YOUR_PROJECT/src/index.ts"],
      "env": {
        "YOUR_ENV_VAR": "value"
      }
    }
  }
}

Casos de Uso Práticos

FastMCP foi adotado por vários projetos, incluindo:

  • apinetwork/piapi-mcp-server: Usando Midjourney/Flux/Kling para gerar conteúdo de mídia
  • domdomegg/computer-use-mcp: Ferramentas de controle de computador
  • Meeting-Baas/meeting-mcp: Robô de reunião e gerenciamento de transcrição
  • drumnation/unsplash-smart-mcp-server: Integração de pesquisa de imagens Unsplash
  • aiamblichus/mcp-chat-adapter: Interface de conclusão de chat LLM

Vantagens Técnicas

  1. Segurança de tipo: Suporte completo a TypeScript garante qualidade do código
  2. Schema flexível: Suporte a várias bibliotecas de validação, atendendo a diferentes necessidades
  3. Arquitetura moderna: Baseado nos mais recentes padrões da Web e melhores práticas
  4. Funcionalidades ricas: Suporte abrangente de funcionalidades básicas a avançadas
  5. Fácil de estender: Design modular facilita a expansão de funcionalidades
  6. Amigável ao desenvolvimento: Ferramentas CLI completas e suporte à depuração

Resumo

FastMCP é um framework TypeScript poderoso e fácil de usar que fornece uma solução completa para construir servidores MCP. Seja para uma simples integração de ferramentas ou para a construção de serviços de IA complexos, o FastMCP pode fornecer a funcionalidade e a flexibilidade necessárias. Seu rico conjunto de recursos e boa experiência do desenvolvedor o tornam uma ferramenta importante no ecossistema MCP.