FastMCP es un framework en TypeScript diseñado específicamente para construir servidores Model Context Protocol (MCP). Proporciona un conjunto completo de herramientas y funcionalidades, permitiendo a los desarrolladores crear rápidamente servidores MCP de alto rendimiento capaces de manejar sesiones de cliente.
Dirección del Proyecto: https://github.com/punkpeye/fastmcp
npm install fastmcp
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",
});
Las herramientas permiten al servidor exponer funciones ejecutables a los clientes, las cuales pueden ser invocadas por el cliente y utilizadas por LLM para ejecutar operaciones.
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);
},
});
Las herramientas pueden incluir anotaciones, proporcionando un contexto más rico e información de control:
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);
},
});
Los recursos representan cualquier tipo de dato que el servidor MCP desea proporcionar al cliente, incluyendo:
server.addResource({
uri: "file:///logs/app.log",
name: "Application Logs",
mimeType: "text/plain",
async load() {
return {
text: await readLogFile(),
};
},
});
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}`,
};
},
});
Los prompts permiten al servidor definir plantillas de prompts y flujos de trabajo reutilizables:
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}`;
},
});
FastMCP soporta funcionalidades de autenticación 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,
};
},
});
Soporte para la funcionalidad SSE para comunicación en tiempo real:
server.start({
transportType: "sse",
sse: {
endpoint: "/sse",
port: 8080,
},
});
FastMCP asigna una nueva instancia de servidor a cada conexión de cliente, implementando comunicación 1:1:
server.on("connect", (event) => {
console.log("Client connected:", event.session);
});
server.on("disconnect", (event) => {
console.log("Client disconnected:", event.session);
});
npx fastmcp dev src/examples/addition.ts
npx fastmcp inspect src/examples/addition.ts
Añade la configuración en Claude Desktop:
{
"mcpServers": {
"my-mcp-server": {
"command": "npx",
"args": ["tsx", "/PATH/TO/YOUR_PROJECT/src/index.ts"],
"env": {
"YOUR_ENV_VAR": "value"
}
}
}
}
FastMCP ha sido adoptado por varios proyectos, incluyendo:
FastMCP es un framework en TypeScript potente y fácil de usar, que proporciona una solución completa para construir servidores MCP. Ya sea para una simple integración de herramientas o la construcción de servicios de IA complejos, FastMCP puede proporcionar la funcionalidad y flexibilidad necesarias. Su rico conjunto de características y su buena experiencia de desarrollador lo convierten en una herramienta importante en el ecosistema MCP.