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: Sticky Notes MCP Server

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 hostclaude_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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesNote path, e.g. 'daily/2083-05-12.md'
contentYesMarkdown content

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the behavioral disclosure burden. It goes beyond a simple 'creates a note' by revealing the idempotency rule and the HTTP status code difference (200 vs 201), which is exactly the kind of behavioral trait that helps an agent anticipate outcomes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The action is front-loaded, the idempotency behavior is directly stated, and the path examples are compact and illustrative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool, the description is largely complete: it covers purpose, idempotency, status codes, and path format. It does not describe the response body or edge cases like auto-creating parent directories, but those are minor gaps given the schema already documents both parameters and no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by providing concrete path format examples ('daily/2083-05-12.md' or 'My Note.md') and by referencing the idempotency key (user_id, path), which clarifies how the path parameter behaves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and the resource ('a note at path with content'), which is specific and unambiguous. The idempotency note and path examples further distinguish this create tool from sibling read/update/delete/search tools without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context for when to use the tool: when creating a note at a specific path. It also clarifies idempotent behavior, signaling that reusing an existing path will not create a duplicate. However, it does not explicitly mention alternatives like an update tool for modifying existing notes, so the guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lipi_delete_noteA

Delete a note by id. Returns 204 on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNote id

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It does disclose the resource affected and the success return code (204), and 'Delete' clearly implies destructiveness. However, it does not mention irreversibility, error behavior, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded with the action, then the success response. Every word serves a purpose, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter delete tool, the description gives the core information needed to invoke it: the id and the success status. But it omits failure cases, dependency on prior login (given the lipi_login sibling), and any caveats about deletion being permanent, so it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already states that 'id' is the note id. The description's 'by id' adds no new parameter meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Delete'), a specific resource ('a note'), and the identifying mechanism ('by id'). This also naturally distinguishes the tool from siblings like lipi_update_note, lipi_rename_note, and lipi_read_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: use this when you want to delete a note by its id. However, the description does not explicitly discuss when not to use it or compare it to alternatives such as update or rename.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
treeNoIf true, return directory tree instead of flat list

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of disclosing behavior. It does so by stating the two possible return shapes (NoteMeta[] and NoteTree[]) and including the field list for the flat result. The word 'List' plus the return-type description clearly signals a non-mutating read operation, though it does not mention auth requirements or any potential side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first states the core action and return type, the second explains the optional mode. Every token earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and no output schema, the description is quite complete: it names the result types, lists the fields for the flat list, and explains the tree mode's purpose. The only minor gap is the lack of fields for NoteTree[], but the sidebar use case gives enough context for an agent to proceed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single boolean parameter with a description ('If true, return directory tree instead of flat list'), giving a high baseline. The description adds further meaning by naming the exact return type NoteTree[] and mentioning the intended use case (sidebar), which goes beyond the schema's terse parameter note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific, action-oriented statement: "List all notes in the Lipi vault." It clearly names the resource (notes), the operation (list), and the scope (all), and further distinguishes itself from sibling tools like lipi_search, lipi_read_note, and lipi_create_note by describing a full listing plus an optional directory-tree variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context for the optional parameter: "Use tree=true to get a directory tree NoteTree[] for the sidebar." This implies when the tool should be used (flat listing vs. sidebar tree) but does not explicitly explain when to prefer this tool over lipi_search or lipi_read_note. Usage guidance is present but relies on inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesLipi account email
apiUrlNoOptional Lipi API URL override, e.g. https://lipi-api.bharosilo.com or http://localhost:8080
passwordYesAccount password

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses a meaningful side effect—caching tokens for later tools—and the return content. It does not detail token expiry, storage location, or failure behavior, but this is adequate for a straightforward login tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences each earn their place: what it does, what side effect it has, when to call it, and what it returns. The most critical instruction is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple login tool with no output schema, the description is complete: it names the auth method, the caching behavior, the usage order, and the return payload ('user + vault'). The optional apiUrl parameter is fully documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: email, password, and apiUrl all have clear descriptions in the schema. The description merely restates 'email + password' and adds no semantic value beyond what the input schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Log in to Lipi') with a specific method ('email + password'). It distinguishes this tool from its note-manipulation siblings by being the only authentication entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to invoke it: 'Call this first if you have no token.' It also explains that it caches accessToken + refreshToken for subsequent tools, giving an agent a clear prerequisite relationship with sibling note tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lipi_read_noteA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNote id (UUID)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It discloses that the operation is a read and that it returns the full Note with content and ETag (updatedAt), which signals both non-mutating behavior and the response focus. It does not cover error cases, but for a simple read-by-id tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, purposeful sentences. The action and resource are front-loaded, followed by the return payload. There is no filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool, the description is largely complete: it names the operation, the lookup key, and the return value highlights. It omits not-found/error behavior, but the low complexity makes that a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage for the only parameter, id, is 100% and includes 'Note id (UUID)'. The description merely echoes 'by id' without adding new semantic meaning, so the schema already provides the necessary parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), a specific resource ('a single note'), and the lookup method ('by id'). This clearly distinguishes it from the sibling lipi_read_note_by_name and from listing/creating/updating tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: use this when you have a note id and want a single note. It does not explicitly mention the alternative lipi_read_note_by_name, but the 'by id' qualifier implies the appropriate selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNote name or path basename without extension

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It transparently discloses the HTTP method (GET /v1/notes-by-name?name=) and the read-only intent via 'Read'. However, it does not cover behavior when the note is missing (e.g., 404) or any response/return details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the core action, the backing endpoint, and the primary use case. The information is front-loaded and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema and no annotations, the description covers the essential call semantics, endpoint, and a motivating use case. The only notable gap is behavior on non-existent notes, which is minor for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents the parameter. The description adds practical meaning on top by illustrating valid name formats ('2083-05-12' or 'My Note'), which clarifies what 'name' actually looks like in practice.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('a note') with a distinguishing lookup key ('by name/path basename'), and gives concrete examples ('2083-05-12' or 'My Note'). The dedicated GET endpoint and 'Handy for [[wikilink]] resolution' make it distinguishable from the sibling lipi_read_note without requiring the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use this tool—resolving [[wikilink]] references—which strongly implies the by-name use case. However, it does not explicitly state when NOT to use it or name an alternative like lipi_read_note for other read scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lipi_rename_noteA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNote id
pathYesNew path, e -g. 'archive/Old Name.md'

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It usefully discloses that a 409 path_taken is returned when the target path exists, which signals non-overwriting behavior. But it does not mention success response, whether the id remains stable, or whether the move affects references or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence communicates the core action and a key error behavior without wasted words. The critical operational fact is front-loaded and the 409 detail is valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description provides the essentials: what it does and one major error case. It stops short of describing the success return value or any preconditions, leaving moderate ambiguity for an agent invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains both parameters. The description adds the rename/move context and the 409 error condition, which gives some meaning, but does not materially expand parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation ('Rename/move a note to a new path') with a clear resource and outcome. This distinguishes it from sibling tools like lipi_update_note, which targets content, and lipi_delete_note, which removes notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when a note's path needs to change. However, it does not explicitly contrast with alternatives or state when not to use it, leaving the agent to infer the boundary against update_note and create_note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNote id
contentYesNew markdown content
ifMatchYesIf-Match header value = updatedAt from GET (RFC3339Nano). Required.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It goes beyond the basic operation by disclosing the optimistic-locking requirement and the 409 update_conflict behavior, including guidance to re-read and retry. It could add more about success response or permissions, but the key behavioral risks are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences: it states the action, defines the required header format, and explains the failure mode and retry strategy. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three required parameters and no output schema, the description provides enough to invoke it correctly: the precondition, value format, conflict response, and suggested recovery action. It does not enumerate every possible error, but those are not essential for a tool of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the baseline is 3. The description adds meaningful param context by providing an RFC3339Nano example, allowing an ETag as an alternative, and tying ifMatch to the 'last read' state. This clarifies and extends the ifMatch property description in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Update') on a specific resource ('a note's content'), which clearly distinguishes it from sibling tools like lipi_rename_note or lipi_delete_note. The wording is unambiguous about the operation being performed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit workflow: read the note first to obtain ifMatch, then update, and on 409 re-read and retry. It doesn't explicitly name alternatives for creation or read, but the precondition and conflict handling make the intended usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.1/5.0
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

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes an Obsidian notes vault as MCP services, enabling AI assistants to search, read, create, update, and delete notes and folders.
    22
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables creating, reading, updating, and deleting sticky notes with persistent text file storage through the MCP protocol.
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables interaction with Joplin notes through MCP, allowing searching, creating, updating, and deleting notes via the Joplin Web Clipper API.
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to list, read, search, create, update, rename, and delete markdown notes in a local Obsidian vault via an HTTP MCP endpoint.
    16
    MIT

Latest Blog Posts

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/birajrai/lipi-mcp'

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