shiori-mcp
This MCP server provides a full-featured interface to manage a Shiori bookmark manager instance.
Health Check: Verify API connectivity and authentication.
List Bookmarks: Retrieve bookmarks with pagination via limit and offset.
Search Bookmarks: Search by text (matched against title, URL, or excerpt) and/or tag name.
Get Bookmark by ID: Retrieve a single bookmark using its numeric ID.
Get Bookmark by URL: Look up a single bookmark using its exact URL.
Add Bookmark: Save a new bookmark with optional title, excerpt, tags, archive flag, and public/private visibility.
Update Bookmark (Full Payload): Update a bookmark by supplying the full Shiori bookmark JSON object.
Update Bookmark Fields: Patch individual fields (title, excerpt, tags, public flag, archive flag) without constructing the full JSON manually.
Delete Single Bookmark: Remove one bookmark by ID.
Delete Multiple Bookmarks: Remove one or more bookmarks by supplying an array of IDs.
List Tags: Retrieve all tags along with their associated bookmark counts.
Rename Tag: Rename an existing tag by its ID.
List Accounts: View user accounts visible to the authenticated session.
Click on "Deploy 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., "@shiori-mcplist my bookmarks tagged 'read-later'"
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.
Shiori MCP
A Model Context Protocol (MCP) server for Shiori, the self-hosted bookmark and read-it-later manager.
Capabilities
Verify Shiori connectivity and authentication
List bookmarks
Search bookmarks by title, URL, excerpt, and tag
Get one bookmark by id or exact URL from the bookmark list
Add bookmarks with Shiori's required tag-object format
Update bookmarks via either a full-bookmark payload or common field parameters
Delete bookmarks by id list
List tags and bookmark counts
Rename tags
List accounts visible to the authenticated session
Related MCP server: Raindrop.io MCP Server
Installation
pipx install git+https://github.com/rusty4444/shiori-mcp.gitOr from a checkout:
python -m venv .venv
source .venv/bin/activate
pip install -e .Configuration
Variable | Required | Description |
| Yes | Base URL of the Shiori instance, e.g. |
| Optional | Existing Shiori session id; skips login if provided |
| Required unless session id is set | Shiori username |
| Required unless session id is set | Shiori password |
| No | HTTP timeout in seconds, default |
MCP client config
{
"mcpServers": {
"shiori": {
"command": "shiori-mcp",
"env": {
"SHIORI_BASE_URL": "https://shiori.example.com",
"SHIORI_USERNAME": "your-username",
"SHIORI_PASSWORD": "your-password"
}
}
}
}Tools
Tool | Purpose |
| Verify API connectivity/authentication |
| List bookmarks with client-side limit/offset |
| Search bookmarks by text and/or tag |
| Get one bookmark by id from the bookmark list |
| Get one bookmark by exact URL |
| Add a bookmark with optional tags/archive/public flags |
| Update a bookmark using full Shiori bookmark JSON |
| Update common fields without manually constructing full JSON |
| Delete one bookmark id |
| Delete bookmark ids from a JSON array |
| List tags and bookmark counts |
| Rename a tag |
| List accounts visible to this session |
Development and validation
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e '.[dev]'
ruff check .
pytest
python scripts/live_docs_test.pylive_docs_test.py validates Shiori public API documentation and repository pages without credentials. Authenticated read/write API behaviours are covered with mocked HTTP tests.
Optional LLM validation can be run with any configured OpenAI-compatible endpoint. For local Aeon validation, set AEON_BASE_URL and optionally AEON_MODEL / AEON_API_KEY before running python scripts/model_validate.py.
API note
This server targets Shiori's documented legacy API under /api/* because the new API v1 is still documented as in development and self-documented at /swagger/index.html on running instances.
Safety
The write-capable tools mutate a Shiori bookmark database. Keep credentials in environment variables or a secret manager, never in source control.
This project was developed with the assistance of AI tools.
Available Tools
13 toolsshiori_add_bookmarkB
Add a bookmark to Shiori.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to save in Shiori | |
| title | No | Optional title hint; Shiori may fetch and override it automatically | |
| excerpt | No | Optional excerpt hint; Shiori may fetch and override it automatically | |
| tags | No | Optional comma-separated tag names; converted to Shiori's required [{name: ...}] format | |
| public | No | Whether the bookmark should be public/shared | |
| create_archive | No | Whether Shiori should create an archived copy of the page |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It does not disclose that Shiori may override the provided title or excerpt, nor does it discuss behavior on duplicate URLs or archive creation effects. The schema descriptions provide some behavioral hints, but the description itself lacks transparency.
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 a single sentence, which is concise but sacrifices usage details and behavioral context. It is not necessarily too brief, but it could be more informative without becoming verbose.
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?
With 6 parameters and an output schema, the description should at least mention return values, authentication needs, or duplicate handling. The current minimal text leaves significant gaps in understanding, especially without annotations.
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 details each parameter (e.g., tags conversion, title override). The description adds no extra parameter meaning, but the baseline 3 is appropriate since the schema does the job.
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 'Add a bookmark to Shiori' clearly states the verb (add) and resource (bookmark to Shiori). It distinguishes it from sibling tools like delete, get, update, and search.
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 provides no guidance on when to use this tool versus alternatives like shiori_update_bookmark or shiori_update_bookmark_fields. No prerequisites or context about duplicate handling are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_delete_bookmarkB
Delete one Shiori bookmark by id.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark_id | Yes | Shiori bookmark id |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states 'delete' without details on permanence, side effects, or return value, leaving behavioral traits undisclosed.
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?
Single sentence, front-loaded with verb and resource; efficient but lacks context for a deletion operation.
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?
Given simple tool with one parameter and output schema, description is adequate but could mention return behavior or reversibility.
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 covers 100% of parameters with description 'Shiori bookmark id'; the description adds 'by id' but no additional meaning beyond 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?
Description states 'Delete one Shiori bookmark by id.' with clear verb and resource, and distinguishes from sibling 'shiori_delete_bookmarks' which implies multiple deletions.
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?
No explicit guidance on when to use versus alternatives; the sibling name hints at differentiation, but description itself provides no context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_delete_bookmarksB
Delete one or more bookmarks by id.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Shiori bookmark ids to delete as an array, for example [1, 2, 3]. A JSON array string is also accepted for backward compatibility. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present. The description only states what the tool does, but not how it behaves—e.g., whether deletion is permanent, if confirmation is required, rate limits, error handling, or side effects. The agent cannot assess risk or side effects from this description.
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 a single, clear sentence that is front-loaded with the action. It is concise and to the point, though it could include more context. It earns its place without redundancy.
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?
Given the tool has one parameter, no annotations, and an output schema (not detailed in description), the description is too minimal. It omits crucial context such as the permanence of deletion, authentication requirements, error behavior, or what the output represents. The agent cannot fully evaluate suitability.
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 single parameter 'ids' is fully described in the input schema with explanation that it accepts an array of integers or a JSON array string. The tool description adds no additional meaning beyond what the schema already provides. With 100% schema coverage, baseline is 3.
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 ('Delete'), the resource ('bookmarks'), and the selection method ('by id'). It distinguishes from sibling tools like shiori_delete_bookmark (singular) by explicitly allowing one or more, and from others like shiori_add_bookmark or shiori_update_bookmark by focusing on deletion.
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?
No usage guidelines are provided. The description does not explain when to use this tool versus the singular variant shiori_delete_bookmark, nor does it mention prerequisites, limitations, or when not to use it. The agent is left to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_get_bookmarkB
Get one Shiori bookmark by id from the bookmark list.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark_id | Yes | Shiori bookmark id |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose what happens if the bookmark_id is not found, or any other behavioral traits. Since no annotations are provided, the description carries the full burden and fails to add context beyond the basic action.
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 a single, front-loaded sentence with no wasted words, achieving maximal conciseness.
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 get operation with one parameter and an output schema, the description is minimally adequate but lacks details about return value or error behavior, making it barely sufficient.
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%, and the description adds no extra meaning beyond the schema's parameter description. 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 the action 'Get' and the resource 'one Shiori bookmark by id', which is specific and distinguishes it from siblings like list_bookmarks or search_bookmarks.
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?
There is no guidance on when to use this tool versus alternatives like get_bookmark_by_url or search_bookmarks, nor any mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_get_bookmark_by_urlA
Get one Shiori bookmark by exact URL from the bookmark list.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Exact Shiori bookmark URL to look up |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose what happens if the URL is not found (e.g., returns null or error), whether there are rate limits, or any other behavioral traits beyond the basic operation.
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 a single, clear sentence with no unnecessary words. It efficiently communicates the essential purpose.
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?
Given that an output schema exists, the description need not explain return values. For a simple lookup tool, the description is adequate but could mention error behavior. It is mostly 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%, so the parameter is already documented. The description adds no extra meaning beyond what the schema provides, earning a baseline score of 3.
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 'Get one Shiori bookmark by exact URL from the bookmark list' clearly states the verb (get), resource (bookmark), and scope (by exact URL). It distinguishes it from siblings like shiori_search_bookmarks (fuzzy search) and shiori_get_bookmark (likely by ID).
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 usage for exact URL lookup but does not explicitly state when to use this tool versus alternatives like search for non-exact matches or get by ID. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_health_checkA
Verify Shiori API connectivity and authentication with a small read-only request.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the request is 'read-only' and 'small', implying non-destructive behavior. While it lacks details on failure modes, this is acceptable for a simple health check.
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 a single sentence that is front-loaded and contains no superfluous information. Every word serves a purpose.
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?
Given the tool has no parameters and an output schema is present, the description provides sufficient context. It covers the essential purpose and behavioral trait (read-only) without needing further elaboration.
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 tool has no parameters, so schema coverage is 100% trivially. The description adds meaning by explaining the tool's high-level behavior (connectivity and auth verification) beyond the empty 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 clearly states the tool's purpose: verifying Shiori API connectivity and authentication with a small read-only request. It avoids ambiguity and distinguishes from sibling tools that handle CRUD operations on bookmarks.
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 this tool (to check API health and auth) and distinguishes it from siblings that perform actual operations. While it does not explicitly exclude alternatives, the context makes it clear this is a diagnostic tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_list_accountsA
List Shiori user accounts visible to the authenticated session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It only mentions 'visible to the authenticated session,' implying authentication but omitting details like read-only nature, rate limits, or any behavioral traits.
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 a single, well-structured sentence with 10 words. It is front-loaded and contains no extraneous 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?
The description adequately explains the tool's purpose. Since an output schema exists, details about return values are not required, and the description covers the essential scope.
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?
There are zero parameters, and schema coverage is 100%. The description adds no parameter info because none exist, which is appropriate. Baseline for 0 parameters is 4.
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 'List Shiori user accounts visible to the authenticated session,' specifying the verb 'List' and the resource 'user accounts.' This distinguishes it from sibling tools that list bookmarks or tags.
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?
No guidance is provided on when to use this tool versus alternatives. The description only states what it does, without any context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_list_bookmarksC
List Shiori bookmarks from the default Shiori bookmarks endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of bookmarks to return from the local result set | |
| offset | No | Number of matching bookmarks to skip |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided and the description discloses no behavioral traits (e.g., default sorting, pagination behavior, or what constitutes the default endpoint).
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 a single efficient sentence with no wasted words, though it could benefit from slight expansion.
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?
Despite an output schema, the description lacks context to distinguish from 12 sibling tools and does not clarify scope (e.g., all bookmarks vs. default filter).
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% for the two parameters, but the description adds no additional meaning beyond what the 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 states it lists Shiori bookmarks from a default endpoint, but does not differentiate from sibling tools like shiori_search_bookmarks or shiori_get_bookmark.
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?
No guidance on when to use this tool versus alternatives, no exclusions or contextual cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_list_tagsA
List Shiori tags and bookmark counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full burden. It discloses the basic behavior (listing tags and counts) but lacks details on authentication, side effects, or response format.
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?
A single sentence which is extremely concise, front-loads the action, and contains no wasted words.
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?
Given no parameters and the presence of an output schema, the description sufficiently conveys the tool's purpose and operation for a simple list action.
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?
There are no parameters, so schema coverage is 100%. The description does not need to add parameter details, meeting the baseline of 4 for zero-parameter tools.
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 explicitly states the tool lists tags and includes bookmark counts, distinguishing it from siblings like shiori_list_bookmarks or shiori_rename_tag.
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?
No guidance is provided on when to use this tool versus alternatives; it does not mention context, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_rename_tagB
Rename a Shiori tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | Shiori tag id to rename | |
| name | Yes | New tag name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No behavioral details beyond the rename operation. With no annotations and no description of side effects, return values, or error conditions, the agent lacks critical context about what this tool does internally.
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 a single sentence with no wasted words, well front-loaded. However, it is overly terse and sacrifices clarity for brevity.
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?
Given the presence of an output schema and the simplicity of the tool, the description should at least mention the return value or confirmation behavior. Currently it is incomplete.
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% with clear descriptions for both parameters. The description adds no extra meaning beyond the schema, so the baseline of 3 applies.
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 'Rename a Shiori tag.' clearly states the verb (rename) and resource (tag), and it distinguishes from sibling tools like shiori_list_tags by specifying the action.
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?
No guidance on when to use this tool versus alternatives like shiori_list_tags, or any prerequisites or exclusions. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_search_bookmarksB
Search Shiori bookmarks client-side by text and/or tag.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive text to match against bookmark title, URL, or excerpt | |
| tag | No | Optional tag name to filter bookmarks by case-insensitive tag name | |
| limit | No | Maximum number of matching bookmarks to return | |
| offset | No | Number of matching bookmarks to skip |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It indicates a read-only search but omits key details such as pagination behavior (limit/offset), performance implications, or whether the search is synchronous. The description is insufficiently transparent.
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 a single sentence that is direct and front-loaded with the essential action. There is no extraneous information, making it highly concise.
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?
Despite the brief description, the tool has 100% schema documentation and an output schema, so the agent can infer return structure. The description covers the core purpose adequately for a simple search tool, though it could mention pagination or result limitations.
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 input schema already provides detailed descriptions for all 4 parameters (100% coverage). The description adds minimal value beyond stating 'by text and/or tag', which is already implicit from the schema. 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 the action ('Search'), the resource ('Shiori bookmarks'), and the scope ('client-side by text and/or tag'), effectively distinguishing it from related tools like shiori_list_bookmarks or shiori_get_bookmark.
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 provides no explicit guidance on when to use this tool versus alternatives (e.g., shiori_list_bookmarks) or when not to use it. The phrase 'client-side' hints at a limitation but lacks clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_update_bookmarkC
Update a Shiori bookmark using the full bookmark JSON object expected by the legacy API.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark_json | Yes | Full Shiori bookmark JSON object including id and any fields to update; tags must be objects like {"name":"tag"} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only mentions the format of the JSON object but not side effects, required permissions, or whether updates are destructive. This is insufficient for a mutation 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?
The description is a single sentence that immediately conveys the tool's core purpose. It is concise and front-loaded, with no unnecessary words.
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?
Given the complexity of updating a bookmark and the presence of a sibling tool (shiori_update_bookmark_fields), the description lacks completeness. It does not explain return values or edge cases, though an output schema exists (partially mitigating this). Behavioral gaps remain.
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 input schema covers 100% of parameters with a description that adds context about the JSON structure and tag format. The tool description adds no further parameter-level insight, so a baseline 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 it updates a Shiori bookmark using a full JSON object, referencing the 'legacy API,' which hints at differentiation from other update tools like shiori_update_bookmark_fields. However, it could be more explicit about which sibling it replaces.
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?
No explicit guidance on when to use this tool versus alternatives. The mention of 'legacy API' implies it may be deprecated, but no when-not-to-use or comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shiori_update_bookmark_fieldsA
Patch common bookmark fields by fetching the current bookmark, modifying it, then sending Shiori's full update payload.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark_id | Yes | Shiori bookmark id | |
| title | No | Optional replacement title | |
| excerpt | No | Optional replacement excerpt | |
| public | No | Optional public/shared flag | |
| tags | No | Optional comma-separated replacement tag names | |
| create_archive | No | Optional createArchive flag |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full responsibility. It discloses the read-modify-write pattern (fetch, modify, send full payload), which is good. However, it does not explicitly state that unspecified fields are preserved or mention any side effects or auth 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?
A single 18-word sentence that is front-loaded with the action 'Patch common bookmark fields' and efficiently describes the internal process with no wasted words.
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?
Given the presence of an output schema and the complexity of the tool (patch operation with 6 parameters), the description is adequate but could be more complete by indicating the return type (e.g., updated bookmark) or error handling.
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 baseline is 3. The description adds no extra meaning beyond the schema; it just refers to 'common bookmark fields' without elaborating on individual parameters.
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 'Patch common bookmark fields', clearly indicating a partial update operation. It distinguishes from the sibling 'shiori_update_bookmark' (full update) by implication, though 'common' is somewhat vague.
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 use for patching specific fields without a full payload, but it does not explicitly state when to prefer this over 'shiori_update_bookmark' or mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.1- Changed
shiori_delete_bookmarks3 fields changed- added
Input schema / properties / idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "Shiori bookmark ids to delete as an array, for example [1, 2, 3]. A JSON array string is also accepted for backward compatibility.", + "title": "Ids" +} - removed
Input schema / properties / ids_jsonRemoved value: -{ - "description": "JSON array of Shiori bookmark ids to delete, for example [1,2,3]", - "title": "Ids Json", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "ids_json" -]New value: +[ + "ids" +]
- Changed
shiori_search_bookmarks1 field changed- changed
Input schema / properties / tag / descriptionPrevious value: -"Optional tag name to filter bookmarks by exact tag name"New value: +"Optional tag name to filter bookmarks by case-insensitive tag name"
13 tool updates
v0.1.0- First observed
shiori_add_bookmark - First observed
shiori_delete_bookmark - First observed
shiori_delete_bookmarks - First observed
shiori_get_bookmark - First observed
shiori_get_bookmark_by_url - First observed
shiori_health_check - First observed
shiori_list_accounts - First observed
shiori_list_bookmarks - First observed
shiori_list_tags - First observed
shiori_rename_tag - First observed
shiori_search_bookmarks - First observed
shiori_update_bookmark - First observed
shiori_update_bookmark_fields
TDQS
Scored across 13 tools
Most tools target distinct resources and actions, but update_bookmark and update_bookmark_fields could be confused, as could get_bookmark_by_url and search_bookmarks when looking for a URL. The descriptions mostly clarify the boundaries, so misselection risk is modest.
Tool names follow a mostly consistent shiori_<verb>_<noun> snake_case pattern. The main deviation is shiori_health_check, which reads as a noun phrase rather than verb_noun, but the overall naming style is still predictable and uniform.
13 tools is well within the recommended range for a bookmark manager. Each tool covers a meaningful operation without feeling redundant, and the set is neither too thin nor overweighted.
The tool set covers bookmark CRUD, search, bulk deletion, tag listing/renaming, and account visibility, leaving no obvious dead ends for the core domain. Tag creation and deletion are naturally handled through bookmark updates, so the lifecycle appears complete.
Maintenance
Related MCP Connectors
Search, label, and manage your X (Twitter) bookmarks from any MCP client via Tweetsmash
Create and manage short links, track clicks, and automate URL management
Save, search and organize bookmarks, highlights, feeds and knowledge cards in a Linkflare library.
Connect AI to your flomo notes. Search, create, edit notes and manage tags via MCP.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceEnables interaction with Anybox bookmark manager on macOS, allowing users to search, save, and organize bookmarks with tags and folders through natural language.14-
- FlicenseAqualityDmaintenanceEnables to manage Raindrop.io bookmarks programmatically—add, search, and organize bookmarks from LLM apps.413-
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with a Shlink URL shortening instance, allowing creation, listing, retrieval, and deletion of short URLs, as well as tag management.53Apache 2.0
- FlicenseAqualityDmaintenanceEnables managing bookmarks via the Linkwarden API with token-frugal tools for listing collections and links, adding/moving/deleting links, and creating collections.7-