Projeto Typedb-MCP-Server
Este projeto implementa um servidor Model Context Protocol (MCP) de alta performance em Rust, projetado para atuar como uma ponte segura e eficiente entre clientes MCP (incluindo Grandes Modelos de Linguagem - LLMs) e um backend de banco de dados TypeDB. Ele permite que clientes interajam com o TypeDB de forma padronizada, acessando dados, manipulando esquemas e administrando bancos de dados através do protocolo MCP baseado em JSON-RPC sobre WebSocket.
Principais Funcionalidades
- Gateway MCP para TypeDB: Traduz requisições do protocolo MCP para operações nativas no TypeDB.
- Comunicação via WebSocket: Utiliza WebSocket como transporte principal para sessões interativas.
- Segurança: Suporta TLS (HTTPS/WSS) e autenticação de cliente opcional via OAuth2/JWT com validação de escopos.
- Observabilidade: Expõe métricas no formato Prometheus e suporta tracing distribuído com OpenTelemetry.
- Gerenciamento de Bancos de Dados: Ferramentas MCP para criar, listar, verificar a existência e deletar bancos TypeDB.
- Operações de Esquema: Ferramentas MCP para definir, remover definições e obter o esquema TypeDB.
- Consultas de Dados: Ferramentas MCP para executar queries TypeQL de leitura, inserção, deleção e atualização.
- Recursos e Templates: Expõe recursos informativos estáticos (como guias de TypeQL) e templates para recursos dinâmicos (como o esquema de um banco de dados).
- Configurabilidade Flexível: Configuração via arquivo TOML e variáveis de ambiente.
Instalação
A forma mais recomendada para iniciar rapidamente é utilizando Docker Compose:
- Clone o repositório do GitHub.
- Navegue até o diretório do projeto clonado.
- Certifique-se de ter o Docker e Docker Compose instalados e em execução.
- Configure a senha do seu TypeDB (se aplicável) através de uma variável de ambiente 'TYPEDB_PASSWORD' em um arquivo '.env' na raiz do projeto (consulte '.env.example').
- Execute 'docker-compose up -d --build' para construir e iniciar o servidor MCP e uma instância TypeDB de teste.
Alternativamente, você pode compilar e executar a partir do código-fonte Rust (requer Rust 1.87+ e um TypeDB Server acessível):
- Clone o repositório.
- Navegue até o diretório do projeto.
- Exporte a variável de ambiente 'TYPEDB_PASSWORD' se o seu TypeDB exigir autenticação.
- Compile o projeto com 'cargo build --release'.
- Execute o binário gerado em 'target/release/typedb_mcp_server'.
Configuração do Servidor (para Clientes MCP)
Um cliente MCP precisa saber como se conectar a este servidor. A configuração para o cliente dependerá do transporte e se a segurança está habilitada.
Assumindo que o servidor está rodando localmente (via Docker Compose padrão ou binário com config padrão):
- Protocolo: WebSocket
- URL do Endpoint MCP: 'ws://localhost:8788/mcp/ws'
- Se TLS (HTTPS/WSS) estiver habilitado no servidor MCP: 'wss://localhost:8444/mcp/ws'
- Autenticação (Opcional): Se OAuth2 estiver habilitado no servidor, o cliente precisará enviar um token JWT válido no cabeçalho 'Authorization: Bearer <token>'.
Um exemplo conceitual de como um cliente MCP (como um framework LLM) poderia configurar a conexão JSON (sem mostrar código):
{ // Nome amigável para o servidor (para exibição no cliente) "name": "TypeDB MCP Server Local", // Tipo de transporte utilizado "transport": { // O transporte é WebSocket "type": "websocket", // A URL completa para se conectar ao endpoint MCP no servidor "url": "ws://localhost:8788/mcp/ws" // Se o servidor MCP usar TLS (WSS), a URL seria: "wss://localhost:8444/mcp/ws" }, // Configuração de autenticação (Opcional - incluir apenas se o servidor MCP exigir OAuth2) "auth": { // Tipo de autenticação "type": "bearer_token", // O token Bearer a ser usado. O cliente LLM/aplicação deve obter este token // do provedor de identidade configurado no servidor MCP (via oauth.jwks_uri). // ESTE CAMPO DEVE SER GERADO DINAMICAMENTE PELO CLIENTE COM UM TOKEN VÁLIDO. "token": "<SEU_TOKEN_JWT_VALIDO_AQUI>" }, // Informações adicionais sobre as capacidades ou provedor do servidor (Opcional) // O cliente tipicamente obtém isso via requisição 'initialize' após a conexão. "serverInfo": { "name": "Typedb-MCP-Server", "version": "X.Y.Z" // Versão do servidor } }
Nota: A URL exata e a porta dependem da configuração 'server.bind_address', 'server.mcp_websocket_path' e 'server.tls_enabled' no arquivo de configuração TOML do servidor.
Uso Básico
Uma vez que o servidor esteja rodando e o cliente MCP (como um framework de ferramentas para LLMs) esteja configurado para conectar-se a ele:
- Inicialização: O cliente estabelece a conexão WebSocket e envia a requisição MCP 'initialize' para obter as capacidades do servidor.
- Listagem de Ferramentas/Recursos: O cliente pode chamar 'tools/list' para descobrir as ferramentas disponíveis (query_read, define_schema, etc.) e 'resources/list' / 'resources/templates/list' para descobrir recursos informativos.
- Chamada de Ferramentas: O cliente envia requisições 'tools/call' especificando o 'name' da ferramenta desejada e os 'arguments' necessários (ex: 'database_name', 'query'). O servidor executa a operação no TypeDB e retorna o resultado ou erro via JSON-RPC.
- Leitura de Recursos: O cliente envia requisições 'resources/read' com a 'uri' do recurso desejado (estático ou dinâmico) para obter seu conteúdo.
信息
分类
数据库与文件