lipi-mcp
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., "@lipi-mcpsearch my notes for "mero""
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.
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
Get a token — sign up at
https://lipi.bharosilo.com, then copy the JWT from your browser (DevTools → localStorageaccessToken), or callPOST https://lipi-api.bharosilo.com/v1/auth/logindirectly.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>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 |
|
| Caches token for session; also verifies via |
|
| Flat |
|
| Full |
|
| Wikilink resolver |
|
| Idempotent on |
|
| Requires |
|
| 409 if path taken |
|
| 204 → |
|
| Romanized: |
Auth: Authorization: Bearer <jwt> + Cookie: lipi_refresh=<token> (auto refresh on 401 → retry once).
Env / Flags
Flag / Env | Default | Description |
|
| Lipi API base URL ( |
| — | JWT (15m) |
| — | Opaque refresh (30d), HttpOnly |
Dev
bun install
bun run build
node dist/index.js --help
# inspect with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsPublish
bun run build
npm publish --access public
# then users can npx -y lipi-mcp@latestAvailable Tools
9 toolslipi_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'.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Note path, e.g. 'daily/2083-05-12.md' | |
| content | Yes | Markdown content |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tree | No | If true, return directory tree instead of flat list |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Lipi account email | ||
| apiUrl | No | Optional Lipi API URL override, e.g. https://lipi-api.bharosilo.com or http://localhost:8080 | |
| password | Yes | Account password |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id (UUID) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Note name or path basename without extension |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id | |
| path | Yes | New path, e -g. 'archive/Old Name.md' |
TDQS
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.
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.
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.
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.
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.
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_searchA
Romanized search over the vault. Type romanized Devanagari and find Devanagari hits. Example: 'mero' finds 'मेरो', 'namaste' finds 'नमस्ते'. Also matches literal English. Returns SearchHit[] with path, name, score, snippet. Empty q returns empty array.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query (romanized or literal) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It transparently discloses matching semantics (romanized and literal), return type and fields (SearchHit[] with path, name, score, snippet), and the empty-q behavior. It omits auth requirements or sort order, but the core behavior is well documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no filler: operation and scope first, then concrete examples, then return behavior and edge case. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema and no annotations, the description is largely complete: it explains query semantics, return shape, and an edge case. It does not mention authentication prerequisites or pagination, but the low complexity and clear sibling context make those omissions minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers q at 100%, so the baseline is a 3. The description adds meaningful extra value through concrete romanization examples ('mero' → 'मेरो') and the empty-query edge case, enriching what the schema alone communicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('search'), a resource ('the vault'), and a distinctive behavior (romanized Devanagari matching with literal English fallback). It is clearly differentiated from sibling CRUD/list/read tools because it is the only search operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by framing it as search and showing query examples, but it never explicitly contrasts it with alternatives like lipi_list_notes or lipi_read_note_by_name, nor does it state when not to use it. Guidance is present but only implicit.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id | |
| content | Yes | New markdown content | |
| ifMatch | Yes | If-Match header value = updatedAt from GET (RFC3339Nano). Required. |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceExposes an Obsidian notes vault as MCP services, enabling AI assistants to search, read, create, update, and delete notes and folders.221MIT
- AlicenseAqualityDmaintenanceEnables creating, reading, updating, and deleting sticky notes with persistent text file storage through the MCP protocol.4MIT
- AlicenseNot gradedqualityAmaintenanceEnables interaction with Joplin notes through MCP, allowing searching, creating, updating, and deleting notes via the Joplin Web Clipper API.10MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to list, read, search, create, update, rename, and delete markdown notes in a local Obsidian vault via an HTTP MCP endpoint.16MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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