Cómo construí un servidor MCP conectado a Claude Desktop con Typescript

En esta guía, construiremos un servidor MCP TypeScript desde cero y lo conectaremos a Claude Desktop.

Daniel Costa

Daniel Costa

9 April 2025

Cómo construí un servidor MCP conectado a Claude Desktop con Typescript

El Protocolo de Contexto del Modelo (MCP, por sus siglas en inglés) representa un avance significativo en la forma en que los asistentes de IA interactúan con herramientas y fuentes de datos externas. Desarrollado por Anthropic, MCP permite a Claude comunicarse sin problemas con servidores personalizados, lo que le permite acceder a información en tiempo real, ejecutar flujos de trabajo complejos e interactuar con las API sin salir del contexto de la conversación. Esta capacidad transforma a Claude de un LLM independiente en un asistente versátil que puede aprovechar la funcionalidad externa manteniendo la coherencia de la conversación.

En esta guía completa, lo guiaremos a través del proceso de creación de un servidor TypeScript MCP desde cero y lo conectaremos a Claude Desktop. Al implementar esta integración, permitirá a Claude realizar tareas como recuperar datos en tiempo real, ejecutar cálculos o interactuar con su lógica empresarial personalizada directamente dentro de las conversaciones.

Antes de sumergirnos en la implementación de nuestro servidor MCP, vale la pena mencionar que su elección de herramienta de desarrollo de API puede afectar significativamente la eficiencia de su flujo de trabajo.

A medida que construimos nuestro servidor TypeScript MCP, considere cómo las funciones de colaboración y el enfoque centrado en el desarrollo de Apidog pueden mejorar la productividad de su equipo y garantizar que sus API sigan siendo coherentes, estén bien probadas y estén completamente documentadas durante todo el proceso.

button

Comprensión del Protocolo de Contexto del Modelo

El Protocolo de Contexto del Modelo define una forma estandarizada para que Claude se comunique con servicios externos. Cuando Claude identifica que necesita información de una fuente externa, puede invocar un servidor MCP a través de una solicitud JSON con un formato especial. El servidor procesa esta solicitud y devuelve los datos solicitados, que Claude puede incorporar a su respuesta.

MCP ofrece varias ventajas sobre los enfoques de integración de IA tradicionales:

Requisitos previos

Antes de comenzar a construir nuestro servidor MCP, asegúrese de tener lo siguiente:

Configuración de su proyecto TypeScript

Comencemos creando un nuevo proyecto TypeScript para nuestro servidor MCP:

mkdir claude-mcp-server
cd claude-mcp-server
npm init -y
npm install typescript @types/node ts-node express @types/express cors @types/cors
npx tsc --init

A continuación, actualice su tsconfig.json para incluir esta configuración:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

Implementación del servidor MCP

Cree un nuevo archivo llamado server.ts en el directorio raíz de su proyecto. Este será el punto de entrada para nuestro servidor MCP:

import express from 'express';
import cors from 'cors';
import { Request, Response } from 'express';

// Define types for the MCP protocol
interface MCPRequest {
  query: string;
  conversation_id: string;
  request_id: string;
  parameters?: Record<string, any>;
}

interface MCPResponse {
  response: string;
  status: 'success' | 'error';
  error?: string;
}

const app = express();
app.use(cors());
app.use(express.json());

// Health check endpoint
app.get('/health', (req: Request, res: Response) => {
  res.status(200).json({ status: 'healthy' });
});

// MCP endpoint
app.post('/mcp', (req: Request, res: Response) => {
  try {
    const mcpRequest = req.body as MCPRequest;
    console.log('Received MCP request:', JSON.stringify(mcpRequest, null, 2));

    // Process the request based on the query
    const response = processQuery(mcpRequest);
    
    res.status(200).json({
      status: 'success',
      response
    } as MCPResponse);
  } catch (error) {
    console.error('Error processing MCP request:', error);
    res.status(500).json({
      status: 'error',
      error: error instanceof Error ? error.message : 'Unknown error',
      response: 'Sorry, there was an error processing your request.'
    } as MCPResponse);
  }
});

// Function to process different query types
function processQuery(request: MCPRequest): string {
  const { query, parameters } = request;

  // Example query handling - customize this for your use case
  switch (query) {
    case 'getCurrentTime':
      return `The current time is ${new Date().toLocaleTimeString()}`;
    
    case 'getWeather':
      const location = parameters?.location || 'Unknown';
      // In a real app, you would call a weather API here
      return `The weather in ${location} is currently sunny and 72°F`;
    
    case 'calculateSum':
      if (parameters?.numbers && Array.isArray(parameters.numbers)) {
        const sum = parameters.numbers.reduce((a: number, b: number) => a + b, 0);
        return `The sum of the numbers is ${sum}`;
      }
      return 'Invalid parameters for sum calculation';

    default:
      return `Unrecognized query: ${query}`;
  }
}

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`MCP server running on port ${PORT}`);
});

Ejecución de su servidor MCP

Para ejecutar su servidor, ejecute:

npx ts-node server.ts

Su servidor MCP ahora debería estar ejecutándose en el puerto 3000 (o el puerto especificado).

Conexión a Claude Desktop

Ahora que su servidor MCP está en funcionamiento, debe configurar Claude Desktop para que se conecte a él. Así es cómo:

  1. Abra la aplicación Claude Desktop
  2. Vaya a Configuración (generalmente en la esquina superior derecha)
  3. Navegue a la sección "Funciones experimentales"
  4. Habilite el interruptor "Protocolo de contexto del modelo"
  5. Agregue un nuevo punto final MCP con la URL http://localhost:3000/mcp
  6. Guarde su configuración

Claude Desktop ahora podrá comunicarse con su servidor MCP personalizado.

Prueba de la integración

Para probar su servidor MCP con Claude, intente hacerle a Claude preguntas que desencadenen las consultas específicas que ha implementado. Por ejemplo:

Cuando Claude reconoce que necesita información externa para responder a estas preguntas, enviará automáticamente una solicitud MCP a su servidor e incorporará la respuesta a su respuesta.

Extensión de su servidor MCP

El servidor básico que hemos construido es solo un punto de partida. Aquí hay algunas ideas para extender su funcionalidad:

Agregar autenticación

Para proteger su servidor MCP, agregue autenticación:

// Middleware for basic auth
const authenticateMCP = (req: Request, res: Response, next: Function) => {
  const apiKey = req.headers['x-api-key'];
  if (!apiKey || apiKey !== process.env.MCP_API_KEY) {
    return res.status(401).json({
      status: 'error',
      error: 'Unauthorized',
      response: 'Authentication failed'
    });
  }
  next();
};

// Apply middleware to MCP endpoint
app.post('/mcp', authenticateMCP, (req: Request, res: Response) => {
  // Existing handler code
});

Implementar la integración de la base de datos

Conecte su servidor MCP a una base de datos para recuperar o almacenar información:

import { MongoClient } from 'mongodb';

// Initialize database connection
const dbClient = new MongoClient('mongodb://localhost:27017');
let db: any;

async function connectToDb() {
  await dbClient.connect();
  db = dbClient.db('mcpDatabase');
  console.log('Connected to database');
}

connectToDb().catch(console.error);

// Add a query handler for database interactions
case 'getUserData':
  if (parameters?.userId) {
    const user = await db.collection('users').findOne({ id: parameters.userId });
    return user ? JSON.stringify(user) : 'User not found';
  }
  return 'Invalid user ID';

Agregar soporte de Webhook

Implemente la funcionalidad de webhook para notificar a los servicios externos:

case 'sendNotification':
  if (parameters?.message && parameters?.destination) {
    // Call external notification service
    await fetch('https://your-webhook-url.com', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ message: parameters.message })
    });
    return `Notification sent to ${parameters.destination}`;
  }
  return 'Invalid notification parameters';

Mejores prácticas para el desarrollo de servidores MCP

  1. Maneje los errores con elegancia: Siempre capture las excepciones y devuelva mensajes de error informativos
  2. Implemente el registro: Registre todas las solicitudes y respuestas para la depuración y la auditoría
  3. Use interfaces TypeScript: Defina interfaces claras para todas las estructuras de datos
  4. Establezca tiempos de espera: Implemente tiempos de espera de solicitud para evitar operaciones colgantes
  5. Valide las entradas: Valide cuidadosamente todos los parámetros de entrada antes de procesarlos
  6. Agregue pruebas unitarias: Pruebe a fondo sus controladores de consultas para garantizar la confiabilidad

Conclusión

La creación de un servidor TypeScript MCP abre posibilidades interesantes para extender las capacidades de Claude. Siguiendo esta guía, ha creado una base para integrar Claude con sus propios servicios y datos. El Protocolo de Contexto del Modelo permite una experiencia de usuario perfecta donde Claude puede acceder a información externa sin interrumpir el flujo de la conversación.

A medida que MCP continúa evolucionando, podemos esperar integraciones aún más sofisticadas entre los grandes modelos de lenguaje y los sistemas externos. Ya sea que esté creando herramientas de productividad, sistemas de gestión del conocimiento o aplicaciones comerciales personalizadas, MCP proporciona una forma poderosa de combinar la inteligencia de Claude con su funcionalidad especializada.

Comience a explorar las posibilidades extendiendo su servidor con controladores de consultas adicionales específicos para sus casos de uso y comparta sus experiencias con la creciente comunidad de desarrolladores de MCP.

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs