Home
Login

Un framework TypeScript pour construire des serveurs MCP

MITTypeScript 1.9kpunkpeye Last Updated: 2025-06-21

FastMCP - Framework de serveur MCP TypeScript

Aperçu du projet

FastMCP est un framework TypeScript spécialement conçu pour la construction de serveurs Model Context Protocol (MCP). Il fournit un ensemble complet d'outils et de fonctionnalités permettant aux développeurs de créer rapidement des serveurs MCP performants capables de gérer les sessions client.

Adresse du projet: https://github.com/punkpeye/fastmcp

Caractéristiques principales

Fonctionnalités de base

  • Définition simple des outils, des ressources et des invites : Fournit une API intuitive pour définir les fonctionnalités du serveur
  • Prise en charge de l'authentification : Mécanisme d'authentification intégré pour garantir un accès sécurisé
  • Gestion des sessions : Prise en charge du traitement des sessions client et de la gestion de l'état
  • Prise en charge du contenu multimédia : Prise en charge du retour de contenu image et audio
  • Journalisation : Système de journalisation complet pour le débogage et la surveillance
  • Gestion des erreurs : Mécanisme unifié de gestion des erreurs
  • Server-Sent Events (SSE) : Prise en charge de la diffusion de données en temps réel
  • Prise en charge de CORS : Activation par défaut du partage de ressources inter-origines

Fonctionnalités avancées

  • Notifications de progression : Retour d'information en temps réel sur la progression de l'exécution des outils
  • Événements de serveur typés : Système d'événements TypeScript à sécurité de type
  • Complétion automatique des paramètres d'invite : Fonctionnalité de complétion intelligente des paramètres
  • Requêtes d'échantillonnage : Prise en charge des requêtes d'échantillonnage de modèles d'IA
  • Battement de cœur SSE automatisé : Maintien de la stabilité de la connexion
  • Gestion du répertoire racine : Configuration du répertoire racine du système de fichiers
  • Outil CLI : Fournit des outils de ligne de commande pour les tests et le débogage

Installation et utilisation

Installation

npm install fastmcp

Exemple de base

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

Principaux modules fonctionnels

1. Définition des outils (Tools)

Les outils permettent au serveur d'exposer aux clients des fonctions exécutables, qui peuvent être appelées par les clients et utilisées par les LLM pour effectuer des opérations.

Bibliothèques de validation de schéma prises en charge

  • Zod: La bibliothèque de validation de schéma TypeScript la plus populaire
  • ArkType: Bibliothèque de validation de type moderne
  • Valibot: Bibliothèque de validation de schéma légère

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

Annotations d'outils

Les outils peuvent contenir des annotations, fournissant un contexte et des informations de contrôle plus riches :

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. Gestion des ressources (Resources)

Les ressources représentent tout type de données que le serveur MCP souhaite fournir au client, notamment :

  • Contenu du fichier
  • Captures d'écran et images
  • Fichiers journaux
  • Autres données
server.addResource({
  uri: "file:///logs/app.log",
  name: "Application Logs",
  mimeType: "text/plain",
  async load() {
    return {
      text: await readLogFile(),
    };
  },
});

Modèles de ressources

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. Gestion des invites (Prompts)

Les invites permettent au serveur de définir des modèles d'invite et des flux de travail réutilisables :

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. Authentification

FastMCP prend en charge les fonctionnalités d'authentification personnalisées :

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)

Prise en charge de la fonctionnalité SSE pour la communication en temps réel :

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

6. Gestion des sessions

FastMCP attribue une nouvelle instance de serveur à chaque connexion client, permettant une communication 1:1 :

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

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

Outils de développement

Tests et débogage


npx fastmcp dev src/examples/addition.ts


npx fastmcp inspect src/examples/addition.ts

Intégration de Claude Desktop

Ajouter la configuration dans Claude Desktop :

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

Cas d'utilisation réels

FastMCP a été adopté par plusieurs projets, notamment :

  • apinetwork/piapi-mcp-server: Utilisation de Midjourney/Flux/Kling pour générer du contenu multimédia
  • domdomegg/computer-use-mcp: Outils de contrôle informatique
  • Meeting-Baas/meeting-mcp: Robot de réunion et gestion de la transcription
  • drumnation/unsplash-smart-mcp-server: Intégration de la recherche d'images Unsplash
  • aiamblichus/mcp-chat-adapter: Interface d'achèvement de chat LLM

Avantages techniques

  1. Sécurité de type: La prise en charge complète de TypeScript garantit la qualité du code
  2. Schéma flexible: Prise en charge de plusieurs bibliothèques de validation, répondant à différents besoins
  3. Architecture moderne: Basée sur les dernières normes Web et les meilleures pratiques
  4. Fonctionnalités riches: Prise en charge complète des fonctionnalités de base aux fonctionnalités avancées
  5. Facile à étendre: La conception modulaire facilite l'extension des fonctionnalités
  6. Convivial pour les développeurs: Outils CLI complets et prise en charge du débogage

Résumé

FastMCP est un framework TypeScript puissant et facile à utiliser qui fournit une solution complète pour la construction de serveurs MCP. Qu'il s'agisse d'une simple intégration d'outils ou de la construction de services d'IA complexes, FastMCP peut fournir les fonctionnalités et la flexibilité nécessaires. Son riche ensemble de fonctionnalités et sa bonne expérience de développement en font un outil important dans l'écosystème MCP.