Data Engineering Tutor MCP Server

Un tutor de Data Engineering que proporciona actualizaciones personalizadas sobre conceptos, patrones y tecnologías.

Documentación

Data Engineering Tutor MCP Server

Este repositorio contiene un servidor simple de Protocolo de Contexto de Modelo (MCP) construido con Node.js y TypeScript. Actúa como un "Tutor de Ingeniería de Datos", proporcionando actualizaciones personalizadas sobre conceptos, patrones y tecnologías de Ingeniería de Datos a un cliente de IA conectado.

Este servidor demuestra conceptos clave de MCP: definir Recursos, Herramientas y Prompts para crear un asistente de agente interactivo y con estado.

Prerrequisitos

  • Node.js (v18 o posterior recomendado)
  • npm (o tu gestor de paquetes de Node.js preferido como yarn o pnpm)
  • Un cliente de IA capaz de conectarse a un servidor MCP (por ejemplo, Cursor, la aplicación de escritorio de Claude)
  • Una clave de API de OpenRouter (para obtener actualizaciones en vivo de Ingeniería de Datos a través de Perplexity)

Configuración

  1. Clonar el repositorio:

    # If you haven't already
    # git clone <repository-url>
    # cd <repository-directory>
    
  2. Instalar dependencias:

    npm install
    
  3. Preparar la clave de API: La herramienta de_tutor_get_updates requiere una clave de API de OpenRouter.

    • Obtén tu clave de OpenRouter.
    • Crea un archivo .env en la raíz del proyecto (puedes copiar .env.example).
    • Añade tu clave al archivo .env:
      OPENROUTER_API_KEY=sk-or-xxxxxxxxxxxxxxxxxxxxxxxxxx
      
      (Reemplaza el marcador de posición con tu clave real.)
  4. Compilar el servidor: Compila el código TypeScript.

    npm run build
    

Ejecutar el servidor

Puedes ejecutar el servidor directamente usando Node:

node build/index.js

Alternativamente, configura tu cliente MCP (como Cursor o la aplicación de escritorio de Claude) para lanzar el servidor. El nombre del servidor es de-tutor y el nombre del binario (si es necesario para la configuración del cliente) también es de-tutor.

Ejemplo de configuración del cliente (por ejemplo, para Claude Desktop):

{
  "mcpServers": {
    "de-tutor": {
      "command": "node",
      "args": ["/full/path/to/your/project/build/index.js"],
      "env": {
        "OPENROUTER_API_KEY": "sk-or-xxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

(Asegúrate de que la ruta en args sea la ruta absoluta correcta al archivo index.js compilado en tu sistema. Puede que no necesites la sección env aquí si ya estás usando el archivo .env, ya que el servidor lo carga directamente a través de dotenv.)

Uso con Cursor

Cursor es un editor de código centrado en IA que puede actuar como cliente MCP. Configurar este servidor con Cursor requiere configurar el lanzamiento del servidor y potencialmente configurar una Regla de Proyecto para el prompt de guía, aunque Cursor también podría recoger el prompt proporcionado por el servidor.

  1. Configurar el servidor en Cursor:

    • Ve a Cursor Settings > MCP > Add new global MCP server.
    • Pega el mismo JSON que en el ejemplo de configuración del cliente anterior, asegurándote de que la ruta a build/index.js sea correcta para tu sistema.
  2. (Opcional) Crear una Regla de Proyecto de Cursor para el Prompt: Si prefieres reglas explícitas o descubres que Cursor no está usando el prompt del servidor automáticamente, puedes proporcionar la guía usando la función de Reglas de Proyecto de Cursor.

    • Crea el directorio .cursor/rules en la raíz de tu proyecto si no existe.

    • Crea un archivo dentro de él llamado de-tutor.rule (o cualquier nombre de archivo .rule).

    • Pega el siguiente texto de guía en de-tutor.rule:

      You are a helpful assistant connecting to a Data Engineering knowledge server. Your goal is to provide the user with personalized updates about new Data Engineering concepts, patterns, and technologies they haven't encountered yet.
      
      Available Tools:
      1.  `de_tutor_get_updates`: Fetches recent general news and articles about Data Engineering. Use this first to see what's new.
      2.  `de_tutor_read_memory`: Checks which Data Engineering concepts the user already knows based on their stored knowledge profile.
      3.  `de_tutor_write_memory`: Updates the user's profile to mark whether they have learned or already know a specific Data Engineering concept mentioned in an update.
      
      Your Workflow:
      1.  Call `de_tutor_get_updates` to discover recent Data Engineering developments.
      2.  Call `de_tutor_read_memory` to understand the user's current knowledge base.
      3.  Present the new developments to the user, highlighting things they likely don't know.
      4.  If the user confirms they know a concept or have learned it, call `de_tutor_write_memory` to update their profile.
      
      Be concise and focus on delivering relevant, new information tailored to the user's existing knowledge.
      
  3. Conectar y usar:

    • Asegúrate de que el servidor de-tutor esté habilitado en la configuración de MCP de Cursor.
    • Si usas un archivo de regla: Inicia un nuevo chat o solicitud de generación de código (por ejemplo, Cmd+K) e incluye @de-tutor-rule (o como hayas nombrado tu archivo de regla) en tu solicitud. Esto le dice a Cursor que cargue el contenido de la regla, proporcionando instrucciones sobre cómo usar las herramientas.
    • Si confías en el prompt del servidor: Simplemente comienza a interactuar con Cursor; debería tener acceso a las herramientas y al prompt de guía proporcionado por el servidor.

Características y uso

Este servidor proporciona las siguientes capacidades:

  • Recurso (data_engineering_knowledge_memory): Almacena un objeto JSON simple en data/data-engineering-knowledge.json que mapea conceptos conocidos (cadenas) a banderas booleanas (true).
  • Herramientas:
    • de_tutor_read_memory: Lee los conceptos conocidos actuales del archivo JSON.
    • de_tutor_write_memory: Actualiza el archivo JSON para marcar un concepto como conocido (true) o desconocido (false). Toma concept (cadena) y known (booleano) como entrada.
    • de_tutor_get_updates: Usa tu clave de API de OpenRouter para consultar a Perplexity (perplexity/sonar-small-online) sobre noticias, patrones y tecnologías recientes de Ingeniería de Datos.
  • Prompt (data-engineering-tutor-guidance): Proporciona instrucciones al cliente de IA conectado sobre cómo usar las herramientas en un flujo de trabajo:
    1. Obtener las últimas actualizaciones.
    2. Leer los conceptos conocidos de la memoria.
    3. Presentar nueva información al usuario.
    4. Actualizar la memoria según los comentarios del usuario.

Desarrollo y depuración

  • Compilación: npm run build compila TypeScript a JavaScript en el directorio build/.
  • Estructura del código: Consulta src/ para ver los detalles de implementación:
    • src/index.ts: Punto de entrada del servidor. Importa McpServer y StdioServerTransport desde rutas específicas del SDK. Instancia McpServer. Importa y llama a las funciones de registro (registerPrompts, registerResources, registerTools) desde otros módulos, pasando la instancia del servidor. Configura y conecta el servidor usando StdioServerTransport.
    • src/prompts/index.ts: Define el texto del prompt de guía. Exporta registerPrompts, que toma la instancia de McpServer y usa server.prompt() para registrar el prompt de guía estático con su callback.
    • src/resources/index.ts: Exporta el tipo KnowledgeMemory y funciones auxiliares (readMemoryFile, writeMemoryFile) para E/S de archivos en data/data-engineering-knowledge.json. Exporta registerResources, que toma la instancia de McpServer y usa server.resource() para registrar el recurso data_engineering_knowledge_memory con un URI específico y un ReadResourceCallback.
    • src/tools/index.ts: Exporta registerTools, que toma la instancia de McpServer y usa server.tool() para registrar cada herramienta (de_tutor_read_memory, de_tutor_write_memory, de_tutor_get_updates). Define esquemas de entrada usando Zod cuando sea necesario (para write_memory). Las funciones de las herramientas usan ayudantes de resources/index.ts o fetch para realizar acciones y devolver resultados en el formato esperado.
  • Inspector MCP: Usa @modelcontextprotocol/inspector para ver el flujo de mensajes en bruto:
    npx @modelcontextprotocol/inspector node ./build/index.js
    
    (Asegúrate de que OPENROUTER_API_KEY esté configurado en tu entorno si ejecutas de esta manera y no dependes únicamente del archivo .env cargado por el propio servidor.)

Notas

  • Este servidor usa un archivo simple (data/data-engineering-knowledge.json) para almacenar el conocimiento del usuario. Para aplicaciones más robustas, considera una base de datos adecuada.
  • El manejo de errores es básico; los servidores de producción necesitarían una gestión de errores más completa.

Conclusión

Esta demostración muestra los pasos principales involucrados en la creación de un servidor MCP funcional usando el SDK de TypeScript y la clase McpServer. Definimos un recurso para gestionar el estado, herramientas para realizar acciones (incluyendo la interacción con una API externa) y un prompt para guiar al cliente de IA.

Esto proporciona una base para construir capacidades agénticas más complejas y útiles con MCP.

(Además, si encuentras algún 🐛error, no dudes en abrir un issue.)