Skip to main content
Glama

lipi-mcp

MCP server for Lipi — Indic-first notes with romanized Devanagari search (mero → मेरो, namaste → नमस्ते) and Bikram Sambat dates. Connect Claude Desktop, Cursor, Codex, or any MCP host to your Lipi vault.

MCP is a thin stdio wrapper over the Lipi API — no data duplication, safe concurrent updates.

Install — npx / bunx (no global install needed)

# run directly (always latest)
npx -y lipi-mcp --help
bunx lipi-mcp --help

# or pin version
npx -y lipi-mcp@0.1.0 --api https://lipi-api.bharosilo.com --token <jwt>

Related MCP server: notes-box

Quickstart

  1. Get a token — sign up at https://lipi.bharosilo.com, then copy the JWT from your browser (DevTools → localStorage accessToken), or call POST https://lipi-api.bharosilo.com/v1/auth/login directly.

  2. Run MCP:

# prod (default)
LIPI_ACCESS_TOKEN=<jwt> npx -y lipi-mcp
# or explicit
LIPI_API_URL=https://lipi-api.bharosilo.com LIPI_ACCESS_TOKEN=<jwt> npx -y lipi-mcp
# dev
LIPI_API_URL=http://localhost:8080 LIPI_ACCESS_TOKEN=<jwt> npx -y lipi-mcp
# or
bunx lipi-mcp --api https://lipi-api.bharosilo.com --token <jwt>
  1. Configure your MCP host — claude_desktop_config.json (Claude Desktop) or ~/.cursor/mcp.json (Cursor):

{
  "mcpServers": {
    "lipi": {
      "command": "npx",
      "args": ["-y", "lipi-mcp", "--api", "https://lipi-api.bharosilo.com"],
      "env": {
        "LIPI_ACCESS_TOKEN": "<paste-jwt-here>",
        "LIPI_REFRESH_TOKEN": "<optional-refresh-token>"
      }
    }
  }
}

For local dev:

{
  "mcpServers": {
    "lipi": {
      "command": "npx",
      "args": ["-y", "lipi-mcp", "--api", "http://localhost:8080"],
      "env": {
        "LIPI_API_URL": "http://localhost:8080",
        "LIPI_ACCESS_TOKEN": "<paste-jwt-here>"
      }
    }
  }
}

With bunx:

{
  "mcpServers": {
    "lipi": {
      "command": "bunx",
      "args": ["lipi-mcp", "--api", "https://lipi-api.bharosilo.com"],
      "env": { "LIPI_ACCESS_TOKEN": "<jwt>" }
    }
  }
}

Restart the host. You should see 9 tools: lipi_login, lipi_list_notes, lipi_read_note, lipi_read_note_by_name, lipi_create_note, lipi_update_note, lipi_rename_note, lipi_delete_note, lipi_search.

Tools

Tool

Maps to

Notes

lipi_login

POST /v1/auth/login

Caches token for session; also verifies via GET /v1/me

lipi_list_notes

GET /v1/notes / ?tree=1

Flat NoteMeta[] or NoteTree[]

lipi_read_note

GET /v1/notes/:id

Full Note + ETag

lipi_read_note_by_name

GET /v1/notes-by-name?name=

Wikilink resolver [[Name]]

lipi_create_note

POST /v1/notes

Idempotent on (user_id, path)

lipi_update_note

PUT /v1/notes/:id + If-Match

Requires ifMatch = updatedAt (RFC3339Nano); 409 on stale

lipi_rename_note

PATCH /v1/notes/:id

409 if path taken

lipi_delete_note

DELETE /v1/notes/:id

204 → {deleted:true}

lipi_search

GET /v1/search?q=

Romanized: mero → मेरो (+2 exact / +1 prefix)

Auth: Authorization: Bearer <jwt> + Cookie: lipi_refresh=<token> (auto refresh on 401 → retry once).

Env / Flags

Flag / Env

Default

Description

--api / LIPI_API_URL

https://lipi-api.bharosilo.com

Lipi API base URL (http://localhost:8080 for dev)

--token / LIPI_ACCESS_TOKEN

—

JWT (15m)

--refresh / LIPI_REFRESH_TOKEN

—

Opaque refresh (30d), HttpOnly lipi_refresh at rest

Dev

bun install
bun run build
node dist/index.js --help

# inspect with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js

Publish

bun run build
npm publish --access public
# then users can npx -y lipi-mcp@latest

Available Tools

9 tools
lipi_create_noteA

Create a note at path with content. Idempotent on (user_id, path) — if path exists, returns existing note with 200 instead of 201. Path example: 'daily/2083-05-12.md' or 'My Note.md'.

Inputs: path (required), content (required).

lipi_delete_noteA

Delete a note by id. Returns 204 on success.

Inputs: id (required).

lipi_list_notesA

List all notes in the Lipi vault. Returns NoteMeta[] (id, path, name, size, updatedAt). Use tree=true to get a directory tree NoteTree[] for the sidebar.

Inputs: tree.

lipi_loginA

Log in to Lipi with email + password. Caches accessToken + refreshToken for subsequent tools. Call this first if you have no token. Returns user + vault.

Inputs: email (required), password (required), apiUrl.

lipi_read_noteA

Read a single note by id. Returns full Note with content + ETag (updatedAt).

Inputs: id (required).

lipi_read_note_by_nameA

Read a note by name/path basename (e.g. '2083-05-12' or 'My Note'). Uses GET /v1/notes-by-name?name=. Handy for [[wikilink]] resolution.

Inputs: name (required).

lipi_rename_noteA

Rename/move a note to a new path. Returns 409 path_taken if target path already exists.

Inputs: id (required), path (required).

lipi_update_noteA

Update a note's content. Requires ifMatch = updatedAt from last read (RFC3339Nano, e.g. '2026-08-28T12:00:00.123456789Z' or ETag value). Returns 409 update_conflict if stale — caller should re-read and retry.

Inputs: id (required), content (required), ifMatch (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 9 tools

    Disambiguation4/5

    Each tool maps to a distinct action/resource pair: create, read, update, rename, delete, list, search, and login are clearly separated. The only mild overlap is between lipi_read_note and lipi_read_note_by_name, but their id-vs-name distinction is described well enough to avoid real confusion.

    Naming Consistency4/5

    All tools share the lipi_ prefix and mostly follow a verb_noun pattern like lipi_create_note and lipi_delete_note. lipi_login and lipi_search are verb-only exceptions, but the overall style remains predictable and uniform.

    Tool Count5/5

    Nine tools is a well-scoped set for a note management server: authentication, CRUD, renaming, listing, and search are all covered without unnecessary duplication. Each tool earns its place.

    Completeness5/5

    The tool surface covers the full note lifecycle: create, read by id, read by name, update with optimistic concurrency, rename/move, delete, list, and search. Auth is handled via lipi_login, and no obvious dead-end operations are missing for the stated domain.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers