Skip to main content
Glama

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

uv tool install -e .

While developing locally with uv:

uv sync uv run neem --help

Commands

neem init # Authenticate (run browser-based OAuth) neem status # Show token status and Claude Code config neem logout # Remove saved token (optional: keep config) neem config # Inspect config details (with optional --show-token)

Quick Start

Step 1: Install and authenticate

# Install the package uv tool install -e . # Authenticate with Mnemosyne neem init # Opens your browser to log in

neem init handles 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):

kubectl port-forward svc/mnemosyne-fastapi 8001:8000

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:

claude mcp add mnemosyne --scope user \ --env MNEMOSYNE_FASTAPI_URL=http://127.0.0.1:8001 \ --env LOG_LEVEL=ERROR \ -- uv run neem-mcp-server

Using Codex

codex mcp add mnemosyne -- uv run neem-mcp-server \ --env MNEMOSYNE_FASTAPI_URL=http://127.0.0.1:8001 \ --env LOG_LEVEL=ERROR > Dev-mode shortcut: append `--env MNEMOSYNE_DEV_TOKEN=<user>` and `--env MNEMOSYNE_DEV_USER_ID=<user>` to the commands above when the backend runs with `MNEMOSYNE_AUTH__MODE=dev_no_auth`. Both transports will impersonate that user without going through OAuth.

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:

export MNEMOSYNE_DEV_USER_ID=alice export MNEMOSYNE_DEV_TOKEN=alice # many clusters treat the token string as the user id uv run neem-mcp-server

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.

  1. Point kubectl at the desired cluster (kubectl config use-context ...).

  2. Port-forward the FastAPI service so it is reachable on your workstation (example: kubectl port-forward svc/mnemosyne-fastapi 8001:8000).

  3. Start neem-mcp-server with one of the supported backend configuration options:

    • MNEMOSYNE_FASTAPI_URL (preferred) or the legacy MNEMOSYNE_API_URL.

    • MNEMOSYNE_FASTAPI_HOST, MNEMOSYNE_FASTAPI_PORT, and optional MNEMOSYNE_FASTAPI_SCHEME if you want to supply host/port separately (handy for kubectl port-forward scripts).

    • MNEMOSYNE_FASTAPI_HEALTH_PATH if 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 a list_graphs job, streams realtime updates via the backend’s /ws gateway 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 with MNEMOSYNE_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.jobs ships a websocket-friendly client that tools can use to subscribe to job progress once the backend emits hints

  • Structured 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

# Install in development mode uv sync uv pip install -e . # Run the CLI uv run neem init # Test the MCP server uv run neem-mcp-server

Project Structure

src/neem/ β”œβ”€β”€ cli.py # CLI commands β”œβ”€β”€ mcp/ β”‚ β”œβ”€β”€ server/ β”‚ β”‚ β”œβ”€β”€ standalone_server.py # FastAPI backend resolver + health probe (no tools yet) β”‚ β”‚ └── standalone_server_stdio.py # Stdio transport wrapper β”‚ β”œβ”€β”€ session.py # Session management β”‚ β”œβ”€β”€ errors.py # MCP-specific errors β”‚ └── response_objects.py # Formatted MCP responses └── utils/ β”œβ”€β”€ oauth.py # OAuth PKCE flow β”œβ”€β”€ token_storage.py # Token persistence β”œβ”€β”€ claude_config.py # Claude Code config management β”œβ”€β”€ logging.py # Structured logging β”œβ”€β”€ deployment_context.py # Environment configuration └── errors.py # Base error classes

Environment Variables

  • MNEMOSYNE_FASTAPI_URL – Preferred FastAPI base URL (defaults to http://127.0.0.1:8001). The legacy MNEMOSYNE_API_URL is 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 to ws(s)://<host>/ws derived from the HTTP base).

  • MNEMOSYNE_FASTAPI_WS_PATH – Custom path appended to the derived WebSocket URL when MNEMOSYNE_FASTAPI_WS_URL is 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 to true to 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 troubleshooting

    • INFO – Normal operational logging (default)

    • WARNING – Quiet mode, only warnings and errors

    • ERROR – 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:

  1. Check configuration: cat ~/.claude.json | grep mnemosyne-graph

  2. Test server directly: echo '{"jsonrpc": "2.0", "method": "initialize", "id": 1}' | neem-mcp-server

  3. Check logs: Look for stderr output when Claude Code starts

  4. Verify token: neem status should show "Active" authentication

  5. Restart Claude Code: Configuration changes require a complete restart

For Goose CLI:

  1. Check configuration: cat ~/.config/goose/config.yaml | grep mnemosyne-graph

  2. Verify extension is enabled: enabled: true in the config

  3. Check timeout: Increase to 600 seconds if server is slow to start

  4. Test in session: Start a new Goose session and ask it to list available tools

  5. Check environment: Ensure MNEMOSYNE_FASTAPI_URL (or legacy MNEMOSYNE_API_URL) is set correctly

For Codex CLI:

  1. Enable debug logging: Codex intentionally silences stderr, making debugging difficult

  2. Set LOG_LEVEL: Use LOG_LEVEL=ERROR in the environment to prevent stderr interference

  3. Test manually: Run echo '{"jsonrpc":"2.0","method":"initialize","id":1}' | neem-mcp-server to verify it works

  4. Check configuration: Ensure codex.json or your config file has the correct command and environment variables

Authentication Issues

  1. Token expired: Run neem init --force to get a fresh token

  2. Check token: neem config to see token details

  3. Verify API access: The token should have access to the API endpoint

Upload Issues

  1. File not found: Ensure the file path is absolute or relative to working directory

  2. Format detection: Explicitly specify format with rdf_format parameter if auto-detection fails

  3. Validation 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":

  1. Cause: This was caused by using JSON Schema reserved keywords (format, type, etc.) as parameter names

  2. Fixed in: Latest version uses result_format and rdf_format instead of format

  3. Solution: Update to latest version with pip install --upgrade neem

Note: Parameter names were changed to avoid conflicts with JSON Schema keywords:

  • format β†’ result_format (in sparql_query)

  • format β†’ rdf_format (in upload_file_to_graph)

  • validation β†’ validation_level (in upload_file_to_graph)

Goose + Gemini users: If you get proto errors even with the latest version, disable Goose's built-in extensions temporarily:

# In ~/.config/goose/config.yaml extensions: computercontroller: enabled: false # Temporarily disable developer: enabled: false # Temporarily disable

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.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sophia-labs/mnemosyne-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server