FalkorDB
Consulte e interaja com bancos de dados gráficos FalkorDB usando modelos de IA.
Documentação
Servidor MCP FalkorDB
Um servidor Model Context Protocol (MCP) para FalkorDB, permitindo que modelos de IA consultem e interajam com bancos de dados de grafos. O Servidor MCP FalkorDB permite que assistentes de IA como o Claude interajam com bancos de dados de grafos FalkorDB usando linguagem natural. Consulte seus dados de grafo, crie relacionamentos e gerencie seu grafo de conhecimento — tudo por meio de IA conversacional.
🎯 O que é isso?
Este servidor implementa o Model Context Protocol (MCP), permitindo que modelos de IA:
- Consultem bancos de dados de grafos usando OpenCypher (com suporte a modo somente leitura)
- Criem e gerenciem nós e relacionamentos
- Listem e explorem múltiplos grafos
- Excluam grafos quando necessário
- Consultas somente leitura para instâncias de réplica ou para evitar gravações acidentais
🚀 Início Rápido
Pré-requisitos
- Node.js 18+
- Instância FalkorDB (executando localmente ou remotamente)
- Aplicativo Claude Desktop (para integração com IA)
Executando a partir do npm
Adicione à sua configuração do Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json no macOS):
{
"mcpServers": {
"falkordb": {
"command": "npx",
"args": [
"-y",
"@falkordb/mcpserver@latest"
],
"env": {
"FALKORDB_HOST": "localhost",
"FALKORDB_PORT": "6379",
"FALKORDB_USERNAME": "",
"FALKORDB_PASSWORD": ""
}
}
}
}
Executando com npx
Você pode executar o servidor diretamente da linha de comando usando npx:
Usando variáveis de ambiente inline:
# Run with stdio transport (default)
FALKORDB_HOST=localhost FALKORDB_PORT=6379 npx -y @falkordb/mcpserver
# Run with HTTP transport
MCP_TRANSPORT=http MCP_PORT=3005 FALKORDB_HOST=localhost FALKORDB_PORT=6379 npx -y @falkordb/mcpserver
Usando um arquivo .env:
# Using dotenv-cli to load environment variables from .env
npx dotenv-cli -e .env -- npx @falkordb/mcpserver
Isso é útil para:
- Testes rápidos e desenvolvimento
- Executar o servidor de forma autônoma sem o Claude Desktop
- Integrações personalizadas e scripts
Docker Compose
Execute FalkorDB e o servidor MCP juntos:
cp .env.example .env # create env file; edit to set MCP_API_KEY, FALKORDB_PASSWORD, etc.
docker compose up -d
Nota: Pular o arquivo
.envdeixa variáveis comoMCP_API_KEYeFALKORDB_PASSWORDvazias, o que desativa a autenticação por chave de API e não usa senha de banco de dados.
Dica: Defina
REDIS_ARGSem.envpara passar sinalizadores extras aoredis-serverdo FalkorDB incluído, por exemploREDIS_ARGS=--appendonly yes. O valor é dividido por espaços em branco, e os sinalizadores de autenticação derivados deFALKORDB_PASSWORDsão anexados depois, então eles vencem em caso de conflito.Sinalizadores que gravam em disco ainda não sobrevivem a um
docker compose down: a imagem executaredis-server --dir /var/lib/falkordb/data— anexado depois deREDIS_ARGS, então o diretório não pode ser substituído aqui — enquanto o volumefalkordb-dataé montado em/data. Até que #174 mova a montagem para o diretório de dados real, arquivos RDB e AOF são gravados na camada gravável do contêiner.
Isso inicia FalkorDB com verificações de integridade e volumes persistentes, além do servidor MCP pré-configurado para se conectar a ele.
O servidor MCP executa no modo transporte HTTP e é exposto em localhost:8080 por padrão. Para conectar um cliente, configure-o para usar:
- Transporte:
http - URL:
http://localhost:8080 - Chave de API: Definida pela variável de ambiente
MCP_API_KEY(opcional)
Consulte docker-compose.yml para a porta exata e valores de configuração.
Instalação
-
Clone e instale:
git clone https://github.com/FalkorDB/FalkorDB-MCPServer.git cd FalkorDB-MCPServer npm install -
Configure o ambiente:
cp .env.example .envEdite
.env:# Environment Configuration NODE_ENV=development # FalkorDB Configuration FALKORDB_HOST=localhost FALKORDB_PORT=6379 FALKORDB_USERNAME= # Optional FALKORDB_PASSWORD= # Optional FALKORDB_DEFAULT_READONLY=false # Set to 'true' for read-only mode (useful for replicas) # Logging Configuration (optional) ENABLE_FILE_LOGGING=false -
Compile o projeto:
npm run build
🤖 Integração com Claude Desktop
Adicione à sua configuração do Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json no macOS):
{
"mcpServers": {
"falkordb": {
"command": "node",
"args": [
"/absolute/path/to/falkordb-mcpserver/dist/index.js"
]
}
}
}
Reinicie o Claude Desktop e você verá as ferramentas FalkorDB disponíveis!
📚 Ferramentas MCP Disponíveis
Uma vez conectado, você pode pedir ao Claude para:
🔍 Consultar Grafos
"Show me all people who know each other"
"Find the shortest path between two nodes"
"What relationships does John have?"
"Run a read-only query on the replica instance"
Nota: A ferramenta query_graph agora suporta um parâmetro readOnly para executar consultas em modo somente leitura usando GRAPH.RO_QUERY. Isso é ideal para:
- Executar consultas em instâncias de réplica
- Prevenir operações de gravação acidentais
- Garantir integridade dos dados em ambientes de produção
Há também uma ferramenta dedicada query_graph_readonly que sempre executa consultas em modo somente leitura.
Consultas parametrizadas: As ferramentas query_graph e query_graph_readonly aceitam um objeto params opcional para que valores possam ser passados separadamente do texto da consulta (referenciados como $name), em vez de concatená-los como strings no Cypher. Isso evita riscos de injeção de consulta e consultas malformadas. Por exemplo, uma consulta de MATCH (p:Person {name: $name}) RETURN p com params: { "name": "Alice" }. Nomes de parâmetros (incluindo chaves de mapas aninhados) devem ser identificadores válidos. Nota: FalkorDB não permite parâmetros em cláusulas LIMIT/SKIP.
📝 Gerenciar Dados
"Create a new person named Alice who knows Bob"
"Add a 'WORKS_AT' relationship between Alice and TechCorp"
📊 Explorar Estrutura
"List all available graphs"
"Show me the schema of the movies graph"
"What properties do Person nodes usually have in the movies graph?"
"What properties are on ACTED_IN relationships in the movies graph?"
"Delete the old_test graph"
Descoberta de esquema: FalkorDB é sem esquema, então três ferramentas ajudam um agente a se orientar antes de consultar:
get_graph_schema— retorna rótulos de nós, tipos de relacionamento e (opcionalmente) a topologia de conexões. Cada conexão é{ source, relationship, target }ondesourceetargetsão arrays de rótulos de nós (um nó pode ter múltiplos rótulos) erelationshipé o tipo de relacionamento. A topologia é derivada de uma amostra limitada de relacionamentos (connectionSampleSize, padrão10000) e pode ser desativada comincludeConnections: falseem grafos muito grandes.get_node_schema/get_relationship_schema— amostram atésampleSize(padrão100) nós/relacionamentos de um determinado rótulo/tipo e classificam suas chaves de propriedade por frequência, retornando ossampledCountreais junto comrequestedSampleSize. Útil para detectar desvios na nomenclatura de propriedades.
Todas as três ferramentas de esquema sempre executam somente leitura (GRAPH.RO_QUERY), então são seguras para executar contra implantações de réplica/somente leitura.
Um fluxo de orientação típico é: list_graphs → get_graph_schema → get_node_schema / get_relationship_schema → query_graph.
🛠️ Desenvolvimento
Comandos
# Development with hot-reload
npm run dev
# Development with TypeScript execution (faster startup)
npm run dev:ts
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage report
npm run test:coverage
# Lint code
npm run lint
# Lint and auto-fix issues
npm run lint:fix
# Build for production
npm run build
# Start production server
npm start
# Inspect MCP server with debugging tools
npm run inspect
# Clean build artifacts
npm run clean
# Full CI pipeline (test, lint, build)
npm run prepublish
Estrutura do Projeto
src/
├── index.ts # MCP server entry point
├── services/ # Core business logic
│ ├── falkordb.service.ts # FalkorDB operations
│ └── logger.service.ts # Logging and MCP notifications
├── mcp/ # MCP protocol implementations
│ ├── tools.ts # MCP tool definitions
│ ├── resources.ts # MCP resource definitions
│ └── prompts.ts # MCP prompt definitions
├── errors/ # Error handling framework
│ ├── AppError.ts # Custom error classes
│ └── ErrorHandler.ts # Global error handling
├── config/ # Configuration management
│ └── index.ts # Environment configuration
├── models/ # TypeScript type definitions
│ ├── mcp.types.ts # MCP protocol types
│ └── mcp-client-config.ts # Configuration models
└── utils/ # Utility functions
└── connection-parser.ts # Connection string parsing
🔧 Configuração Avançada
Modos de Transporte
O servidor suporta dois modos de transporte:
stdio (padrão)
Usado para integração direta com clientes de IA como o Claude Desktop. A comunicação ocorre via entrada/saída padrão.
MCP_TRANSPORT=stdio
HTTP Streamable
Expõe o servidor MCP via HTTP para acesso remoto ou em rede. Suporta múltiplas sessões concorrentes via protocolo MCP Streamable HTTP.
MCP_TRANSPORT=http
MCP_PORT=8080
MCP_API_KEY=your-secret-api-key # Optional but recommended
Ao usar transporte HTTP, os clientes se conectam enviando uma solicitação POST com uma mensagem initialize. O servidor retorna um cabeçalho Mcp-Session-Id que deve ser incluído nas solicitações subsequentes. A autenticação por chave de API é aplicada via cabeçalho Authorization: Bearer <key> quando MCP_API_KEY está definido.
Testando transporte HTTP:
-
Inicie o servidor:
MCP_TRANSPORT=http MCP_PORT=8080 npm start -
Use o MCP Inspector para conectar:
npx @modelcontextprotocol/inspector --transport streamable-http --url http://localhost:8080
Nota:
npm run inspectusa transporte stdio. Para HTTP, inicie o servidor e o inspector separadamente, como mostrado acima.
Autenticação por Chave de API:
Quando MCP_API_KEY está definido, todas as solicitações HTTP devem incluir um cabeçalho Authorization:
MCP_TRANSPORT=http MCP_API_KEY=my-secret-key npm start
Os clientes devem então enviar:
Authorization: Bearer my-secret-key
Solicitações sem uma chave válida recebem uma resposta 401 Unauthorized. A autenticação só é aplicada no modo HTTP — o modo stdio ignora MCP_API_KEY já que apenas o processo pai pode se comunicar.
Usando com Docker
Usando imagens pré-construídas do Docker Hub:
# Use the latest stable release
docker pull falkordb/mcpserver:latest
docker run -p 8080:8080 \
-e FALKORDB_HOST=host.docker.internal \
-e FALKORDB_PORT=6379 \
-e MCP_API_KEY=your-secret-key \
falkordb/mcpserver:latest
# Or use the edge version (latest main branch)
docker pull falkordb/mcpserver:edge
# Or pin to a specific version
docker pull falkordb/mcpserver:1.0.0
Compilando localmente:
docker build -t falkordb-mcpserver .
docker run -p 8080:8080 \
-e FALKORDB_HOST=host.docker.internal \
-e FALKORDB_PORT=6379 \
-e MCP_API_KEY=your-secret-key \
falkordb-mcpserver
Ou use com docker-compose junto com FalkorDB:
services:
falkordb:
image: falkordb/falkordb:latest
ports:
- "6379:6379"
mcp-server:
image: falkordb/mcpserver:latest # or use 'build: .' to build locally
ports:
- "8080:8080"
environment:
- FALKORDB_HOST=falkordb
- FALKORDB_PORT=6379
- MCP_TRANSPORT=http
- MCP_PORT=8080
- MCP_API_KEY=your-secret-key
depends_on:
- falkordb
Usando com FalkorDB Remoto
Para instâncias FalkorDB hospedadas na nuvem:
FALKORDB_HOST=your-instance.falkordb.com
FALKORDB_PORT=6379
FALKORDB_USERNAME=your-username
FALKORDB_PASSWORD=your-secure-password
Modo Somente Leitura para Instâncias de Réplica
Se você está se conectando a uma instância de réplica FalkorDB ou deseja garantir que nenhuma operação de gravação seja realizada, você pode habilitar o modo somente leitura por padrão:
FALKORDB_DEFAULT_READONLY=true
Isso fará com que todas as consultas sejam executadas usando GRAPH.RO_QUERY por padrão. Você ainda pode substituir isso por consulta, definindo o parâmetro readOnly na ferramenta query_graph.
Casos de uso:
- Instâncias de réplica: Evite gravações em réplicas de leitura em configurações de replicação
- Segurança em produção: Garanta que dados críticos não sejam modificados acidentalmente
- Relatórios/análises: Execute consultas para painéis sem risco de alterações de dados
- Ambientes multi-tenant: Forneça acesso somente leitura a certos usuários
Executando Múltiplas Instâncias
Você pode executar múltiplos servidores MCP para diferentes instâncias FalkorDB:
{
"mcpServers": {
"falkordb-dev": {
"command": "node",
"args": ["path/to/server/dist/index.js"],
"env": {
"FALKORDB_HOST": "dev.falkordb.local",
"FALKORDB_DEFAULT_READONLY": "false"
}
},
"falkordb-prod-replica": {
"command": "node",
"args": ["path/to/server/dist/index.js"],
"env": {
"FALKORDB_HOST": "replica.falkordb.com",
"FALKORDB_DEFAULT_READONLY": "true"
}
}
}
}
📖 Exemplo de Uso
Aqui está o que você pode fazer uma vez conectado:
// Claude can help you write queries like:
MATCH (p:Person)-[:KNOWS]->(friend:Person)
WHERE p.name = 'Alice'
RETURN friend.name, friend.age
// Or create complex data structures:
CREATE (alice:Person {name: 'Alice', age: 30})
CREATE (bob:Person {name: 'Bob', age: 25})
CREATE (alice)-[:KNOWS {since: 2020}]->(bob)
// And even analyze your graph:
MATCH path = shortestPath((start:Person)-[*]-(end:Person))
WHERE start.name = 'Alice' AND end.name = 'Charlie'
RETURN path
🤝 Contribuindo
Aceitamos contribuições! Consulte nossas Diretrizes de Contribuição para detalhes.
Fluxo de Trabalho de Desenvolvimento
- Faça um fork do repositório
- Crie um branch de funcionalidade (
git checkout -b feature/amazing-feature) - Faça commit das suas alterações (
git commit -m 'Add amazing feature') - Envie para o branch (
git push origin feature/amazing-feature) - Abra um Pull Request
📝 Licença
Este projeto é licenciado sob a Licença MIT — consulte o arquivo LICENSE para detalhes.
🙏 Agradecimentos
- Construído sobre o Model Context Protocol SDK
- Desenvolvido por FalkorDB
- Inspirado pelo ecossistema MCP em crescimento
🔗 Recursos
Feito com ❤️ pela equipe FalkorDB e Katie Mulliken