MCP server for Linkwarden, the self-hosted bookmark manager with page preservation
Server has 17 tools with consistent naming (verb_noun pattern) and basic descriptions. All tools have input schemas with type definitions. However, descriptions are terse (avg ~50 chars, well below the 194-char baseline), parameter descriptions lack detail on constraints/formats, and output schemas are not documented. Error handling guidance is absent. Tool composition is sound (single responsibility), but descriptions do not explain WHEN to use each tool or what to expect in responses. Security-sensitive tools (delete_*) lack confirmation patterns.
Create a new collection in Linkwarden
Create a new link in Linkwarden
Create a new RSS subscription in Linkwarden
Create a new tag in Linkwarden
Delete a collection from Linkwarden
Delete a link from Linkwarden
Delete an RSS subscription from Linkwarden
Delete a tag from Linkwarden
Descriptions are terse (avg ~50 chars vs 194-char baseline). Most lack context on WHEN to use the tool, what it returns, or dependencies. E.g., 'Delete a link from Linkwarden' does not explain that this is irreversible or that get_link_content should be called first if content preservation is needed.
Parameter descriptions are missing or minimal. E.g., 'cursor' in search_links has no explanation of format (opaque string? offset? token?). 'max_chars' in get_link_content lacks range guidance (1 - 1M? default?). LLMs cannot infer constraints from names alone.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2025-06-18+ | v2 |
Get details of a specific collection
List all collections in Linkwarden
Get the archived text content of a link that Linkwarden has preserved
Get an overview of the Linkwarden instance
List all tags in Linkwarden
Search for links in Linkwarden
Update an existing collection in Linkwarden
Update an existing link in Linkwarden
Update an existing tag in Linkwarden
Output schemas are not documented. Tools return structured data (links, collections, tags) but LLMs have no visibility into response field names, types, or what IDs/references are available for chaining. E.g., does search_links return link_id, id, or linkId? Does it include collection_id for downstream calls?
Destructive tools (delete_link, delete_collection, delete_tag, delete_rss_subscription) lack confirmation or dry-run patterns. Agents can irreversibly delete resources without a safety gate. No error guidance on recovery.
No pagination guidance in search_links description. Does 'cursor' support offset-based or cursor-based pagination? What is the default/max page size? How does the LLM know when results are exhausted? Undocumented pagination invites incorrect usage.