Agenten sind nur so gut wie der Kontext, den du ihnen gibst. Ein Knowledge Graph liefert ein abfragbares Gedächtnis. Das hier ist das kleinste Setup, das ich finden konnte, um einem Agenten einen echten Neo4j-Graph über das Model Context Protocol (MCP) zu erschließen - ein Docker-Compose-Service, eine .env für die Zugangsdaten und eine .mcp.json, die den Neo4j-MCP-Server in Claude Code einbindet.

Docker Compose

Ein Container, zwei Ports. Über die Browser-UI auf 7474 wirfst du einen Blick auf den Graph; Bolt auf 7687 ist die Leitung, über die Claude tatsächlich spricht. Persistente Volumes sorgen dafür, dass der Graph einen Neustart übersteht. APOC ist Neo4js Erweiterungs-Werkzeugkasten - eine Sammlung zusätzlicher Tools, die nicht von Haus aus mit der Datenbank kommen, die aber fast jeder früher oder später braucht, also schalten wir sie von Anfang an ein.

docker-compose.yaml
services:
neo4j:
image: neo4j:5
ports:
- "7474:7474" # Browser UI
- "7687:7687" # Bolt protocol
volumes:
- neo4j_data:/data
- neo4j_logs:/logs
environment:
- NEO4J_AUTH=${NEO4J_AUTH:-neo4j/changeme}
- NEO4J_server_memory_heap_initial__size=512m
- NEO4J_server_memory_heap_max__size=1G
- NEO4J_server_memory_pagecache_size=512m
- NEO4J_PLUGINS=["apoc"]
restart: unless-stopped
volumes:
neo4j_data:
neo4j_logs:

Environment-Datei

Neo4j erwartet die Zugangsdaten als einen einzigen String im Format username/password, nicht als zwei Felder. Leicht zu übersehen. Halte sie in .env und aus git heraus.

Terminal window
# Neo4j-Zugangsdaten (Format: username/password)
NEO4J_AUTH=neo4j/changeme

MCP-Server installieren

Keine globale Installation nötig. uvx führt den Neo4j-MCP-Server direkt von PyPI in einer flüchtigen Umgebung aus - der erste Lauf lädt ihn herunter, spätere Läufe nutzen den Cache. Das Paket heißt neo4j-mcp-server, sein CLI ist neo4j-mcp, also zeigst du uvx mit --from auf das Paket.

Terminal window
# einmaliger Check, dass er startet
uvx --from neo4j-mcp-server neo4j-mcp

MCP-Konfiguration

Das ist die Verdrahtung. Die .mcp.json weist Claude Code an, den Neo4j-MCP-Server via uvx zu starten, der Claudes Anfragen in Cypher übersetzt und über Bolt gegen den Graph ausführt. Ändere changeme passend zu deiner .env, sonst kommt keine Verbindung zustande.

.mcp.json
{
"mcpServers": {
"neo4j": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "neo4j-mcp-server", "neo4j-mcp"],
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USERNAME": "neo4j",
"NEO4J_PASSWORD": "changeme",
"NEO4J_DATABASE": "neo4j"
}
}
}
}

Starten

  1. docker compose up -d ausführen, um Neo4j zu starten.
  2. Die Browser-UI unter http://localhost:7474 öffnen.
  3. Ein paar Nodes anlegen, um den Graph zu befüllen.
  4. Claude Code im Projektverzeichnis starten und den Graph via MCP abfragen.

Das ist alles. Kein Cloud-Account, keine API-Keys zum Rotieren, keine Schema-Migrationen. Nur eine Graphdatenbank auf localhost, durch die Claude mit Cypher navigieren kann - frag es, wie zwei Nodes zusammenhängen, und sieh zu, wie es die Abfrage selbst schreibt.