Data Engineering Tutor MCP Server

Um tutor de Engenharia de Dados que fornece atualizações personalizadas sobre conceitos, padrões e tecnologias.

Documentação

Data Engineering Tutor MCP Server

Este repositório contém um servidor simples de Model Context Protocol (MCP) construído com Node.js e TypeScript. Ele atua como um "Tutor de Engenharia de Dados", fornecendo atualizações personalizadas sobre conceitos, padrões e tecnologias de Engenharia de Dados para um cliente de IA conectado.

Este servidor demonstra conceitos-chave do MCP: definindo Recursos, Ferramentas e Prompts para criar um assistente de agente interativo e com estado.

Pré-requisitos

  • Node.js (v18 ou posterior recomendado)
  • npm (ou seu gerenciador de pacotes Node.js preferido, como yarn ou pnpm)
  • Um cliente de IA capaz de se conectar a um servidor MCP (ex.: Cursor, aplicativo desktop Claude)
  • Uma Chave de API OpenRouter (para buscar atualizações ao vivo de Engenharia de Dados via Perplexity)

Configuração

  1. Clonar o Repositório:

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

    npm install
    
  3. Preparar a Chave de API: A ferramenta de_tutor_get_updates requer uma chave de API OpenRouter.

    • Obtenha sua chave em OpenRouter.
    • Crie um arquivo .env na raiz do projeto (você pode copiar .env.example).
    • Adicione sua chave ao arquivo .env:
      OPENROUTER_API_KEY=sk-or-xxxxxxxxxxxxxxxxxxxxxxxxxx
      
      (Substitua o espaço reservado pela sua chave real.)
  4. Compilar o Servidor: Compile o código TypeScript.

    npm run build
    

Executando o Servidor

Você pode executar o servidor diretamente usando Node:

node build/index.js

Alternativamente, configure seu cliente MCP (como Cursor ou o aplicativo desktop Claude) para iniciar o servidor. O nome do servidor é de-tutor e o nome do binário (se necessário para a configuração do cliente) também é de-tutor.

Exemplo de Configuração do Cliente (ex.: para Claude Desktop):

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

(Certifique-se de que o caminho em args seja o caminho absoluto correto para o arquivo index.js compilado no seu sistema. Você pode não precisar da seção env aqui se já estiver usando o arquivo .env, pois o servidor o carrega diretamente via dotenv.)

Usando com Cursor

Cursor é um editor de código com foco em IA que pode atuar como cliente MCP. Configurar este servidor com Cursor requer configurar o lançamento do servidor e potencialmente configurar uma Regra de Projeto para o prompt de orientação, embora o Cursor também possa captar o prompt fornecido pelo servidor.

  1. Configurar o Servidor no Cursor:

    • Vá para Cursor Settings > MCP > Add new global MCP server.
    • Cole o mesmo JSON do exemplo de configuração do cliente acima, garantindo que o caminho para build/index.js esteja correto para o seu sistema.
  2. (Opcional) Criar uma Regra de Projeto no Cursor para o Prompt: Se você preferir regras explícitas ou descobrir que o Cursor não está usando o prompt do servidor automaticamente, você pode fornecer a orientação usando o recurso de Regras de Projeto do Cursor.

    • Crie o diretório .cursor/rules na raiz do seu projeto, se ele não existir.

    • Crie um arquivo dentro dele chamado de-tutor.rule (ou qualquer nome de arquivo .rule).

    • Cole o seguinte texto de orientação em 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 e Usar:

    • Certifique-se de que o servidor de-tutor esteja habilitado nas configurações de MCP do Cursor.
    • Se estiver usando um arquivo de regra: Inicie uma nova conversa ou solicitação de geração de código (ex.: Cmd+K) e inclua @de-tutor-rule (ou como você nomeou seu arquivo de regra) na sua solicitação. Isso informa ao Cursor para carregar o conteúdo da regra, fornecendo instruções sobre como usar as ferramentas.
    • Se estiver contando com o prompt do servidor: Simplesmente comece a interagir com o Cursor; ele deve ter acesso às ferramentas e ao prompt de orientação fornecido pelo servidor.

Recursos e Uso

Este servidor fornece os seguintes recursos:

  • Recurso (data_engineering_knowledge_memory): Armazena um objeto JSON simples em data/data-engineering-knowledge.json mapeando conceitos conhecidos (strings) para flags booleanas (true).
  • Ferramentas:
    • de_tutor_read_memory: Lê os conceitos conhecidos atuais do arquivo JSON.
    • de_tutor_write_memory: Atualiza o arquivo JSON para marcar um conceito como conhecido (true) ou desconhecido (false). Recebe concept (string) e known (booleano) como entrada.
    • de_tutor_get_updates: Usa sua chave de API OpenRouter para consultar o Perplexity (perplexity/sonar-small-online) em busca de notícias, padrões e tecnologias recentes de Engenharia de Dados.
  • Prompt (data-engineering-tutor-guidance): Fornece instruções ao cliente de IA conectado sobre como usar as ferramentas em um fluxo de trabalho:
    1. Obter as atualizações mais recentes.
    2. Ler conceitos conhecidos da memória.
    3. Apresentar novas informações ao usuário.
    4. Atualizar a memória com base no feedback do usuário.

Desenvolvimento e Depuração

  • Compilação: npm run build compila TypeScript para JavaScript no diretório build/.
  • Estrutura do Código: Veja src/ para detalhes de implementação:
    • src/index.ts: Ponto de entrada do servidor. Importa McpServer e StdioServerTransport de caminhos específicos do SDK. Instancia McpServer. Importa e chama funções de registro (registerPrompts, registerResources, registerTools) de outros módulos, passando a instância do servidor. Configura e conecta o servidor usando StdioServerTransport.
    • src/prompts/index.ts: Define o texto do prompt de orientação. Exporta registerPrompts, que recebe a instância de McpServer e usa server.prompt() para registrar o prompt de orientação estático com seu callback.
    • src/resources/index.ts: Exporta o tipo KnowledgeMemory e funções auxiliares (readMemoryFile, writeMemoryFile) para I/O de arquivo em data/data-engineering-knowledge.json. Exporta registerResources, que recebe a instância de McpServer e usa server.resource() para registrar o recurso data_engineering_knowledge_memory com uma URI específica e um ReadResourceCallback.
    • src/tools/index.ts: Exporta registerTools, que recebe a instância de McpServer e usa server.tool() para registrar cada ferramenta (de_tutor_read_memory, de_tutor_write_memory, de_tutor_get_updates). Define esquemas de entrada usando Zod quando necessário (para write_memory). As funções de ferramenta usam auxiliares de resources/index.ts ou fetch para executar ações e retornar resultados no formato esperado.
  • Inspetor MCP: Use @modelcontextprotocol/inspector para ver o fluxo bruto de mensagens:
    npx @modelcontextprotocol/inspector node ./build/index.js
    
    (Certifique-se de que OPENROUTER_API_KEY esteja definido no seu ambiente se estiver executando desta forma e não contando apenas com o arquivo .env carregado pelo próprio servidor.)

Notas

  • Este servidor usa um arquivo simples (data/data-engineering-knowledge.json) para armazenar o conhecimento do usuário. Para aplicações mais robustas, considere um banco de dados adequado.
  • O tratamento de erros é básico; servidores de produção precisariam de um gerenciamento de erros mais abrangente.

Conclusão

Esta demonstração mostra os passos principais envolvidos na criação de um servidor MCP funcional usando o SDK TypeScript e a classe McpServer. Definimos um recurso para gerenciar estado, ferramentas para executar ações (incluindo interação com uma API externa) e um prompt para orientar o cliente de IA.

Isso fornece uma base para construir capacidades de agente mais complexas e úteis com MCP.

(Além disso, se você encontrar algum 🐛bug, sinta-se à vontade para abrir uma issue.)