A personal link store MCP server that reads and writes links with metadata, tags, and extracted text. Provides tools for capturing, searching, listing, editing, and managing links.
Silo MCP server demonstrates solid tool design with 14 well-named, verb-prefixed tools covering a complete link-management domain. All tools have descriptions (avg 95 chars, within 10-1024 baseline) and explicit input schemas with typed parameters. However, output schemas are not documented in the source code provided, and error handling guidance is absent. Parameter descriptions are present but minimal (avg 45 chars vs 72-char baseline). No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Missing idempotency guarantees and recovery guidance for destructive operations.
Add one or more tags to an existing link
Capture a new link by URL, optionally with tags and notes. The link is enriched asynchronously with metadata, title, description, and extracted text.
Create a new standalone tag (empty, with no links assigned yet)
Delete a tag entirely, removing it from all links that have it
Edit an existing link's URL, title, description, or note
Export the entire link library or a filtered subset as JSON, YAML, or CSV for backup or bulk agent ingestion
Find links related to a given link based on shared tags and title terms (agent-native 'more like this' navigation)
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., does get_link return tags array? Is content_extracted a boolean or string?). Baseline: 100% of A+ tools document return types.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite explicit risk classifications (READ_ONLY, WRITE, DESTRUCTIVE, REVERSIBLE). Agents cannot infer safety properties without annotations.
No error recovery guidance. Destructive operations (delete_tag, trash_link) lack confirmation patterns or dry-run support. Agents cannot self-correct on failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2025-06-18+ | v2 |
Retrieve a single link by its ID with full metadata, tags, and extracted content
List all links with optional filtering by tag and pagination support via cursor
Remove one or more tags from an existing link
Restore a link from the trash back to the active library
Retry enrichment of a previously captured link that has degraded or incomplete metadata
Search links by query text with pagination support via cursor
Move a link to the trash (soft delete)
Pagination cursor parameters lack format documentation. What is the cursor format? Is it opaque? Base64-encoded? Agents cannot construct valid pagination calls without this detail.
Parameter descriptions are minimal (avg 45 chars vs 72-char baseline). E.g., 'The search query text' lacks guidance on query syntax, field support, or operator precedence. Descriptions should be 50-200 chars for LLM clarity.