Status: Phase 4 — packaging & DX. Read-only semantic search shipped; write tools live.

The Xentropy MCP server exposes your Wall notes to any Model Context Protocol (MCP) client. Connect Claude Code, Cursor, or any MCP-compatible tool to search, read, and manage your notes.

#

The fastest way to connect. One command from your terminal:

# Install globally
npm install -g @xentropy/mcp

# Authenticate (interactive — enters email + password once)
xen-notes-mcp login

# Connect to Claude Code
claude mcp add xentropy-notes -- node $(which xen-notes-mcp)

# Or: point to a remote API
XEN_API_URL=https://your-api.example.com/api claude mcp add xentropy-notes -- node $(which xen-notes-mcp)

That's it. Claude Code now has access to your Wall notes. Try asking:

"Search my notes for anything about project planning"

"List my recent notes"

"What did I capture about the API design yesterday?"

#

The MCP server authenticates through the Xentropy API. There are two paths:

Run once, works forever — stores a session that auto-refreshes:

xen-notes-mcp login
# Prompts: Email + Password (password hidden)

The session is stored at ~/.config/xentropy-mcp/session.json (mode 0600) and the access token is automatically refreshed before it expires.

#

⚠️ Depends on API Keys (A1)

Personal Access Tokens are shipping in the A1 milestone. Until then, use interactive login or obtain a session token via xen-notes-mcp login --show-token.

# Obtain a static token (one-time)
xen-notes-mcp login --email you@example.com --password '...' --show-token

# Use the token and its refresh token as environment variables
export XEN_API_TOKEN="eyJ..."
export XEN_REFRESH_TOKEN="abc123..."
claude mcp add xentropy-notes \
  --env XEN_API_TOKEN="$XEN_API_TOKEN" \
  --env XEN_REFRESH_TOKEN="$XEN_REFRESH_TOKEN" \
  -- node $(which xen-notes-mcp)

#

The server exposes 10 tools. All reads are scoped to your account.

#

| Tool | Arguments | Description | |------|-----------|-------------| | ping | — | Health check — confirms the connection is live | | search_notes | query (required), limit? | Semantic search across your notes. Returns id, title, snippet, similarity score. Pro-gated. | | list_notes | folder?, type?, query?, archived?, limit? | List notes newest-first with optional filters | | get_note | id (required) | Full note — body/transcript, AI summary, and tags | | get_related_notes | id (required), limit? | Notes semantically closest to the given note | | list_folders | — | All your folders (directories) |

#

| Tool | Arguments | Description | |------|-----------|-------------| | create_note | body (required), title?, folder? | Create a new note. Filing into a directory with a format prompt auto-formats it. | | update_note | id (required), title?, body?, folder? | Update a note — omit fields to leave them unchanged | | create_directory | name (required), parent?, formatInstructions?, icon? | Create a folder with optional AI formatting prompt | | update_directory | id (required), name?, parent?, formatInstructions?, icon? | Update a folder's properties |

#

For the folder/parent parameters, pass a directory id, or one of these keywords to target the root: unfiled, root, none, top, or an empty string.

#

The server returns actionable errors designed for AI assistants:

| Scenario | Message | |----------|---------| | Not logged in | Not logged in. Run: xen-notes-mcp login | | Session expired | Session expired. Run: xen-notes-mcp login | | Plan-gated feature | Not available on your current plan — <reason> | | Not found | Not found — check the id and try again. | | API unreachable | Can't reach the Xentropy API — check it's running and XEN_API_URL is correct. |

#

#

# From the repo root
cd apps/mcp
npm run build          # tsc → dist/
npm run login          # authenticate once
npm run setup          # prints the exact `claude mcp add` command

# Or from anywhere after global install:
npm install -g @xentropy/mcp
xen-notes-mcp login
claude mcp add xentropy-notes -- node $(which xen-notes-mcp)

#

{
  "mcpServers": {
    "xentropy-notes": {
      "command": "node",
      "args": ["/absolute/path/to/apps/mcp/dist/index.js"],
      "env": {
        "XEN_API_URL": "http://localhost:3001/api"
      }
    }
  }
}

Place this in your project root and Claude Code picks it up automatically.

#

Claude Code session

You: Search my notes for anything about the API key migration plan
Claude: [calls search_notes("API key migration")]


Found 3 relevant notes:

  1. API Key Migration — Phase 1 Design (score 0.91)
    Draft design doc for migrating from Supabase JWTs to PATs...
  2. Meeting: Auth Roadmap Q2 (score 0.84)
    Decided: phase out refresh tokens in favor of PATs by July...
  3. PAT Implementation Notes (score 0.78)
    Token format: xpat_ prefix, 256-bit random, stored hashed...

You: Get me the full text of note #1
Claude: [calls get_note(note_1_id)]


API Key Migration — Phase 1 Design
2026-06-15 · folder: engineering

Design decisions for Phase 1 of the API key migration...
[full body with sections on token format, storage, scoping...]


Tags: api auth migration


Claude: This note outlines the PAT-based authentication design. Key decisions include...

#

Cursor supports MCP servers in its Features settings. Add the Xentropy server:

  1. Open Cursor Settings → FeaturesMCP Servers
  2. Click + Add new MCP server
  3. Fill in:

| Field | Value | |-------|-------| | Name | Xentropy Notes | | Type | command | | Command | node /path/to/apps/mcp/dist/index.js |

  1. Add env variables: XEN_API_URL (your API endpoint)
  2. Click Save

After setup, Cursor's AI can call search_notes, list_notes, get_note, and all other tools directly.

#

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | XEN_API_URL | No | http://localhost:3001/api | API base URL — must include the /api prefix | | XEN_API_TOKEN | No | — | Static JWT for headless auth (A1 milestone) | | XEN_REFRESH_TOKEN | No | — | Refresh token for auto-rotation (A1 milestone) |

No Supabase variables needed — authentication goes through the Xentropy API.

#

"Not logged in" / "Session expired" : Run xen-notes-mcp login (or npm run login from the repo).

"Can't reach the Xentropy API" : The API isn't running, or XEN_API_URL is wrong. Make sure it includes /api (e.g., http://localhost:3001/api).

"Not available on your current plan" : search_notes requires a Pro plan. Other tools work on all plans.

Tools don't appear in Claude Code : Check the path points to dist/index.js (built output), not src/index.ts (source). Run npm run build first.

search_notes returns no results : Semantic search uses pgvector embeddings. Make sure your API has the pgvector extension enabled and notes are indexed.

#