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
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mnemosyne MCPquery my knowledge graph for all documents about machine learning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 MCP server provides 23+ tools for knowledge graph management, SPARQL queries, real-time document editing, and workspace organization via Hocuspocus/Y.js.
Features:
π 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)π Full graph CRUD operations (create, list, delete)
π SPARQL query and update support
π Real-time document editing via Y.js CRDT
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:
The MCP server defaults to http://127.0.0.1:8080 which matches this port-forward. Both HTTP and WebSocket connections go through port 8080.
Step 2: Add MCP server to your agent
Using Claude Code:
Using Codex
Dev-mode shortcut: Append
--env MNEMOSYNE_DEV_TOKEN=<user>and--env MNEMOSYNE_DEV_USER_ID=<user>when the backend runs withMNEMOSYNE_AUTH__MODE=dev_no_auth. Both HTTP and WebSocket will impersonate that user without OAuth.Custom port? Add
--env MNEMOSYNE_FASTAPI_URL=http://127.0.0.1:XXXXif your port-forward differs from the default 8080.
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 are automatically refreshed in the background using OAuth refresh tokens. After initial authentication, you'll stay logged in for approximately 30 days without any manual intervention.
When the refresh token eventually expires, simply run neem init to re-authenticate.
Important: Set LOG_LEVEL=ERROR for Codex CLI to avoid any stderr interference with the stdio protocol.
Available MCP Tools
Graph Management
list_graphsβ List all knowledge graphs owned by the authenticated user (useinclude_deleted=trueto show soft-deleted graphs)create_graphβ Create a new knowledge graph with ID, title, and optional descriptiondelete_graphβ Delete a graph (soft delete by default, usehard=trueto permanently delete)
SPARQL Operations
sparql_queryβ Execute read-only SPARQL SELECT/CONSTRUCT queries against your graphssparql_updateβ Execute SPARQL INSERT/DELETE/UPDATE operations to modify graph data
Namespace Reference: When writing SPARQL queries, use these exact prefixes:
PREFIX doc: <http://mnemosyne.dev/doc#> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX nie: <http://www.semanticdesktop.org/ontologies/2007/01/19/nie#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>WARNING: Do NOT use
urn:mnemosyne:schema:doc:as the doc namespace β it will match nothing.
Context & Workspace
get_active_contextβ Get the currently active graph and document from the Mnemosyne UIget_workspaceβ Get the folder/file structure of a graph
Folder Operations
create_folderβ Create a new folder in the workspacerename_folderβ Rename a foldermove_folderβ Move a folder to a different parentdelete_folderβ Delete a folder (with optional cascade to delete contents)
Document Operations (via Hocuspocus/Y.js)
read_documentβ Read document content as TipTap XMLwrite_documentβ Replace document content with TipTap XMLappend_to_documentβ Add a block to the end of a documentmove_documentβ Move a document to a different folderdelete_documentβ Remove a document from workspace navigation
Block-Level Operations
get_blockβ Read a specific block by its ID (includes text_length and formatting runs)query_blocksβ Search for blocks matching specific criteriaupdate_blockβ Update a block's attributes or replace entire contentedit_block_textβ Insert/delete text at character offsets within a block (CRDT-safe collaborative editing)insert_blockβ Insert a new block relative to an existing blockdelete_blockβ Delete a block (with optional cascade for children)batch_update_blocksβ Update multiple blocks in a single transaction
Artifact Operations
move_artifactβ Move an artifact to a different folderrename_artifactβ Rename an artifact
Wire Operations (Semantic Connections)
list_wire_predicatesβ List available semantic predicates organized by categorycreate_wireβ Create a semantic connection between documents or blocks (syncs via Y.js CRDT)get_wiresβ Get all wires connected to a document (filter by direction: outgoing/incoming/both)traverse_wiresβ BFS traversal of the wire graph from a starting document (up to depth 10)
TipTap XML Format
Documents use TipTap's XML representation with full formatting support:
Blocks: paragraph, heading (level="1-3"), bulletList, orderedList, blockquote, codeBlock (language="..."), taskList, taskItem (checked="true"), horizontalRule
Marks (nestable): strong, em, strike, code, mark (highlight), a (href="...")
Annotation Marks: Special inline marks that reference external content:
footnoteβ Self-contained annotation withdata-footnote-contentattributecommentMarkβ Reference annotation withdata-comment-idattribute
Example:
Graph management and SPARQL tools submit jobs to the FastAPI backend, streaming realtime updates via WebSocket when available and falling back to HTTP polling otherwise. Document, block, folder, and wire operations use Y.js CRDT via Hocuspocus for real-time sync.
SPARQL Data Model
Documents, folders, and artifacts are materialized to RDF by two backend pipelines:
Workspace materializer β Syncs metadata (titles, folder structure, order) from the workspace Y.Doc
Document materializer β Syncs content (blocks, paragraphs, text nodes) from document Y.Docs
Common RDF types: doc:TipTapDocument, doc:Folder, doc:Artifact, doc:XmlFragment, doc:Paragraph, doc:Heading, doc:TextNode
Common predicates: dcterms:title, nfo:fileName, nfo:belongsToContainer, doc:order, doc:section, doc:content, doc:childNode, doc:siblingOrder, doc:createdAt, doc:updatedAt
Entity URI pattern: urn:mnemosyne:user:{user_id}:graph:{graph_id}:{type}:{entity_id}
Content fragments use # suffixes: ...doc:{id}#frag, ...doc:{id}#block-{block_id}, ...doc:{id}#node-{n}
Example query to list all documents with titles:
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 not refreshing: Tokens auto-refresh in the background. If you see auth errors, your refresh token may have expired (~30 days). Run
neem initto re-authenticate.Check token:
neem statusto see token details and expiryForce refresh:
neem init --forceto get completely fresh tokens
SPARQL Returns Empty Results
The most common cause is using the wrong namespace prefix. Use:
Do NOT use urn:mnemosyne:schema:doc: β it will silently match nothing.
See the docs/ directory for end-user quick start and detailed guides that can
ship with the package or be published separately.