The Mnemosyne MCP server provides AI-powered knowledge graph management through a FastAPI backend integration.
Core Capabilities:
Session Management - Create and manage MCP sessions for authenticated users with client name specification
Graph Management - List all accessible graphs with optional statistics/metadata, create new persistent or temporary graphs with custom configurations (size limits, descriptions), and delete graphs with safety confirmations and optional backups
Data Ingestion - Upload RDF files in multiple formats (Turtle, RDF/XML, N-Triples, JSON-LD) with configurable validation levels, namespace management, and options to replace or append data
Querying - Execute SPARQL queries against graphs with customizable result formats (JSON, CSV, XML) and timeout settings
Schema & Analysis - Retrieve comprehensive graph information including detailed statistics, metadata, schema previews, and structural analysis
Technical Features:
Real-time job streaming via WebSocket with HTTP polling fallback
Browser-based OAuth authentication with token management and dev mode bypass for local development
Support for multiple MCP clients (Claude Code, Codex, Goose)
Kubernetes-native with kubectl port-forwarding support
Mnemosyne MCP
THIS IS A WORK IN PROGRESS AND THE DOCUMENTATION IS AI-GENERATED AND WILL BE REWRITTEN BY HUMAN BEFORE PEOPLE ARE WIDELY ENCOURAGED TO READ IT AND USE THIS CODE. THANK YOU FOR YOUR ATTENTION TO THIS MATTER XOXO VERA
AI-powered knowledge graph integration for Claude Code, Goose & Codex
The Mnemosyne MCP (neem) historically exposed a full suite of graph management tools. We are currently rebuilding those tools from scratch against a new FastAPI backend that runs inside our local kubectl context.
Status: The stdio server now focuses solely on wiring Codex/Claude to the local FastAPI backend. All MCP tools have been removed intentionally while we redesign the interface.
Current focus:
π Reliable connectivity to a local FastAPI backend (via env vars or kubectl port-forward)
π©Ί Automatic startup health probe so you know whether the backend is reachable
π Browser-based OAuth authentication (
neem init) remains unchangedπ§± Clean slate for the upcoming tool rearchitecture
Installation
While developing locally with uv:
Commands
Quick Start
Step 1: Install and authenticate
neem inithandles authentication onlyβthe next steps show how to connect each MCP client manually.
Before registering the MCP server, expose the FastAPI backend from your kubectl context (adjust service/namespace/ports as needed):
Step 2: Add MCP server to your agent
Skaffoldβs default profile port-forwards mnemosyne-api on 8080 for HTTP and mnemosyne-ws on 8001 for WebSockets. Point MNEMOSYNE_FASTAPI_URL at the HTTP port and the MCP server will automatically assume the split WebSocket port on localhost (you can override it with MNEMOSYNE_FASTAPI_WS_PORT or MNEMOSYNE_FASTAPI_WS_URL if your layout differs).
Using Claude Code:
Using Codex
Dev Mode (skip OAuth)
If the backend runs with MNEMOSYNE_AUTH__MODE=dev_no_auth, set both env vars before launching the MCP server to bypass the OAuth flow entirely:
Both HTTP requests and the WebSocket handshake will send X-User-ID: alice plus Sec-WebSocket-Protocol: Bearer.alice, satisfying the backendβs dev-mode guards. Unset these envs when targeting production.
Usage Examples
After registering the server, ask your MCP client to run list_graphs. It submits a job, streams realtime events over /ws, and falls back to HTTP polling when the backend does not advertise push hints.
FastAPI Backend Configuration
The MCP server now assumes it should talk to the FastAPI backend that runs in your local kubectl context.
Point
kubectlat the desired cluster (kubectl config use-context ...).Port-forward the FastAPI service so it is reachable on your workstation (example:
kubectl port-forward svc/mnemosyne-fastapi 8001:8000).Start
neem-mcp-serverwith one of the supported backend configuration options:MNEMOSYNE_FASTAPI_URL(preferred) or the legacyMNEMOSYNE_API_URL.MNEMOSYNE_FASTAPI_HOST,MNEMOSYNE_FASTAPI_PORT, and optionalMNEMOSYNE_FASTAPI_SCHEMEif you want to supply host/port separately (handy for kubectl port-forward scripts).MNEMOSYNE_FASTAPI_HEALTH_PATHif the FastAPI app exposes a non-standard health endpoint (defaults to/health).
If none of these environment variables are set the server defaults to http://127.0.0.1:8001, which lines up with the sample port-forward above. On startup we issue a lightweight health probe so you immediately know whether the backend is reachable.
Token Management
Tokens expire after a day. Re-run neem init --force whenever you need a fresh token, and restart Claude Code afterwards.
Important: Set LOG_LEVEL=ERROR for Codex CLI to avoid any stderr interference with the stdio protocol.
Tooling Status
The first push-enabled tool is available:
list_graphsβ submits alist_graphsjob, streams realtime updates via the backendβs/wsgateway when available, and falls back to HTTP polling otherwise. Ask Claude/Codex to βrun list_graphsβ after registering the MCP server to see a proof-of-concept end-to-end.
More graph/query tools will land once the FastAPI contract solidifies.
Configuration
Tokens are stored at
~/.mnemosyne/config.json(override withMNEMOSYNE_CONFIG_DIR).
Architecture
This package contains two main components:
1. CLI Tool (neem)
Located in neem.cli:
OAuth PKCE authentication flow (
neem.utils.oauth)Secure token storage (
neem.utils.token_storage)Claude Code configuration management (
neem.utils.claude_config)
2. MCP Server (neem-mcp-server)
Located in neem.mcp.server:
Stdio transport β Communicates with Claude Code via stdin/stdout
Backend resolver β Determines the FastAPI base URL from env vars or kubectl service hosts
Health probe β Pings the FastAPI backend on startup so you know whether the port-forward/context is correct
Realtime job wiring β
neem.mcp.jobsships a websocket-friendly client that tools can use to subscribe to job progress once the backend emits hintsStructured logging β All logs go to stderr (stdio-safe) with optional file output
Key design principles for this reset:
Local-first loops β Assume developers are targeting a FastAPI pod through kubectl
Minimal surface area β Keep the server slim until the new tool contract is finalized
Explicit configuration β Prefer environment variables over hidden defaults so CLI harnesses can inject settings
Development
Local Development
Project Structure
Environment Variables
MNEMOSYNE_FASTAPI_URLβ Preferred FastAPI base URL (defaults tohttp://127.0.0.1:8001). The legacyMNEMOSYNE_API_URLis still honored if set.MNEMOSYNE_FASTAPI_HOST,MNEMOSYNE_FASTAPI_PORT,MNEMOSYNE_FASTAPI_SCHEMEβ Specify host/port separately (handy for scripted kubectl port-forwards).MNEMOSYNE_FASTAPI_HEALTH_PATHβ Alternate health-check path if your FastAPI app doesn't expose/health.MNEMOSYNE_FASTAPI_WS_URLβ Override the WebSocket gateway directly (defaults tows(s)://<host>/wsderived from the HTTP base).MNEMOSYNE_FASTAPI_WS_PATHβ Custom path appended to the derived WebSocket URL whenMNEMOSYNE_FASTAPI_WS_URLis unset.MNEMOSYNE_FASTAPI_WS_PORTβ Override just the WebSocket port while keeping the same host/path (useful when HTTP and WS are forwarded on different local ports).MNEMOSYNE_FASTAPI_WS_DISABLEβ Set totrueto opt out of WebSocket streaming (falls back to HTTP polling).MNEMOSYNE_CONFIG_DIRβ Token storage location (default:~/.mnemosyne)MNEMOSYNE_DEV_TOKENβ Optional dev-only override that skips the OAuth flow by injecting the provided bearer token directly (use only on trusted local stacks).CLAUDE_CODE_SETTINGS_PATHβ Claude settings file (default:~/.claude/settings.json)LOG_LEVELβ Logging verbosity (default:INFO)DEBUGβ Verbose logging for troubleshootingINFOβ Normal operational logging (default)WARNINGβ Quiet mode, only warnings and errorsERRORβ Silent mode, only errors (recommended for Codex CLI)CRITICALβ Minimal logging, critical errors only
Sessions are stored in-memory by default; no external cache service is required.
Troubleshooting
MCP Server Not Loading
For Claude Code:
Check configuration:
cat ~/.claude.json | grep mnemosyne-graphTest server directly:
echo '{"jsonrpc": "2.0", "method": "initialize", "id": 1}' | neem-mcp-serverCheck logs: Look for stderr output when Claude Code starts
Verify token:
neem statusshould show "Active" authenticationRestart Claude Code: Configuration changes require a complete restart
For Goose CLI:
Check configuration:
cat ~/.config/goose/config.yaml | grep mnemosyne-graphVerify extension is enabled:
enabled: truein the configCheck timeout: Increase to 600 seconds if server is slow to start
Test in session: Start a new Goose session and ask it to list available tools
Check environment: Ensure
MNEMOSYNE_FASTAPI_URL(or legacyMNEMOSYNE_API_URL) is set correctly
For Codex CLI:
Enable debug logging: Codex intentionally silences stderr, making debugging difficult
Set LOG_LEVEL: Use
LOG_LEVEL=ERRORin the environment to prevent stderr interferenceTest manually: Run
echo '{"jsonrpc":"2.0","method":"initialize","id":1}' | neem-mcp-serverto verify it worksCheck configuration: Ensure
codex.jsonor your config file has the correct command and environment variables
Authentication Issues
Token expired: Run
neem init --forceto get a fresh tokenCheck token:
neem configto see token detailsVerify API access: The token should have access to the API endpoint
Upload Issues
File not found: Ensure the file path is absolute or relative to working directory
Format detection: Explicitly specify format with
rdf_formatparameter if auto-detection failsValidation errors: Try
validation_level="lenient"for less strict parsing
Schema/Proto Errors (Goose/Gemini)
If you see errors like "Unknown name 'type'" or "Proto field is not repeating, cannot start list":
Cause: This was caused by using JSON Schema reserved keywords (
format,type, etc.) as parameter namesFixed in: Latest version uses
result_formatandrdf_formatinstead offormatSolution: Update to latest version with
pip install --upgrade neem
Note: Parameter names were changed to avoid conflicts with JSON Schema keywords:
formatβresult_format(insparql_query)formatβrdf_format(inupload_file_to_graph)validationβvalidation_level(inupload_file_to_graph)
Goose + Gemini users: If you get proto errors even with the latest version, disable Goose's built-in extensions temporarily:
This is a known issue with Goose's built-in extensions and Gemini compatibility (not a Mnemosyne MCP issue).
See the docs/ directory for end-user quick start and detailed guides that can
ship with the package or be published separately.