MCP 服务器

Stashr

me.stashr/stashr
知识与文档 搜索与研究 需要认证 MCP 2025-11-25

此 MCP 可以做什么

Searches, reads, organizes, tags, archives, and visually reviews saved bookmarks from multiple social platforms.

archive_bookmarks
Archive or restore bookmarks
Archive or restore up to 200 bookmarks in one call. Archiving is reversible; returns the ids whose state actually changed.
幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['archived', 'ids'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 200, 'minItems': 1}, 'archived': {'type': 'boolean', 'description': 'true archives the bookmarks, false restores them'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ids'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Bookmark ids whose archive state actually changed'}}, 'additionalProperties': False}
fetch
Fetch bookmark
Fetch the complete content and metadata for one Stashr bookmark id returned by search or list_bookmarks. The text field is the full body rendered as Markdown (headings, lists, links, code, and inlined media preserved).
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'metadata', 'text', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string', 'description': 'Full bookmark body rendered as Markdown'}, 'title': {'type': 'string'}, 'metadata': {'type': 'object', 'required': ['archived', 'author', 'capturedAt', 'contentCreatedAt', 'contentType', 'favorite', 'media', 'note', 'platform', 'tags'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['altText', 'duration', 'height', 'ref', 'storedUrl', 'type', 'url', 'width'], 'properties': {'ref': {'type': 'string'}, 'url': {'type': 'string'}, 'type': {'type': 'string'}, 'width': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'height': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'duration': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'storedUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'author': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'archived': {'type': 'boolean'}, 'favorite': {'type': 'boolean'}, 'platform': {'type': 'string'}, 'capturedAt': {'type': 'string'}, 'contentType': {'type': 'string'}, 'contentCreatedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}
fetch_many
Fetch several bookmarks
Fetch the complete content for up to 20 bookmark ids in one call — the same document shape as fetch. Use it when comparing or summarizing several saves from search or list results; missing lists ids that were not found. For a single id, prefer fetch.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ids'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 20, 'minItems': 1}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['documents', 'missing'], 'properties': {'missing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Requested ids that were not found or are not visible'}, 'documents': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'metadata', 'text', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string', 'description': 'Full bookmark body rendered as Markdown'}, 'title': {'type': 'string'}, 'metadata': {'type': 'object', 'required': ['archived', 'author', 'capturedAt', 'contentCreatedAt', 'contentType', 'favorite', 'media', 'note', 'platform', 'tags'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['altText', 'duration', 'height', 'ref', 'storedUrl', 'type', 'url', 'width'], 'properties': {'ref': {'type': 'string'}, 'url': {'type': 'string'}, 'type': {'type': 'string'}, 'width': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'height': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'duration': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'storedUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'author': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'archived': {'type': 'boolean'}, 'favorite': {'type': 'boolean'}, 'platform': {'type': 'string'}, 'capturedAt': {'type': 'string'}, 'contentType': {'type': 'string'}, 'contentCreatedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'description': 'Full documents in the order the ids were requested'}}, 'additionalProperties': False}
get_account
Get account
Get the authenticated Stashr account: plan, trial status, and remaining AI-tag quota. Use this to explain payment_required errors or report account state.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['access', 'email', 'id', 'image', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'email': {'type': 'string'}, 'image': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'access': {'type': 'object', 'required': ['hasAppAccess', 'hasPaidPlan', 'hasProAccess', 'trial'], 'properties': {'trial': {'anyOf': [{'type': 'object', 'required': ['tagsRemaining', 'trialEndsAt'], 'properties': {'trialEndsAt': {'type': 'string'}, 'tagsRemaining': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'hasPaidPlan': {'type': 'boolean'}, 'hasAppAccess': {'type': 'boolean'}, 'hasProAccess': {'type': 'boolean'}}, 'additionalProperties': False}}, 'additionalProperties': False}
library_stats
Library stats
Aggregate counts over the user's library in one call: total plus breakdowns by platform, content type, and capture month, and favorite/untagged/note counts. Accepts the same filters as list_bookmarks. Use this for "how many" and overview questions instead of paging bookmarks.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'state': {'enum': ['active', 'archived', 'all'], 'type': 'string', 'default': 'active', 'description': 'Which bookmarks to count'}, 'filters': {'type': 'object', 'properties': {'note': {'type': 'array', 'items': {'enum': ['has-note', 'no-note'], 'type': 'string'}, 'description': '["has-note"] = only bookmarks with a user note'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'enum': ['image', 'video', 'any-media', 'text-only'], 'type': 'string'}, 'description': 'Media presence: "image"/"video" = has that type, "any-media" = has any, "text-only" = has none (not combinable with the others)'}, 'authors': {'type': 'array', 'items': {'type': 'string', 'minLength': 1, 'description': 'An author username ("naval"), optionally platform-scoped ("twitter:naval")'}}, 'tagMode': {'enum': ['include_any', 'include_all', 'exclude_any', 'exclude_all'], 'type': 'string', 'description': 'include_any = OR (default), include_all = AND, exclude_any = none of these tags, exclude_all = not all of them'}, 'favorite': {'type': 'array', 'items': {'enum': ['favorite', 'not-favorite'], 'type': 'string'}, 'description': '["favorite"] = only favorites; ["not-favorite"] = only non-favorites'}, 'untagged': {'type': 'boolean', 'description': 'true = only bookmarks with no tags at all'}, 'mediaMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'platforms': {'type': 'array', 'items': {'enum': ['github', 'instagram', 'reddit', 'tiktok', 'twitter', 'web', 'youtube'], 'type': 'string', 'description': 'Platform id — X/Twitter is "twitter"'}}, 'authorMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'contentTypes': {'type': 'array', 'items': {'type': 'string', 'description': 'A content type ("article"), optionally platform-scoped ("twitter:article"). Valid types: repo, image, post, video, comment, article, page, snippet'}}, 'platformMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'capturedAfter': {'type': 'string', 'description': 'Only bookmarks saved on/after this ISO date (inclusive)'}, 'capturedBefore': {'type': 'string', 'description': 'Only bookmarks saved before this ISO date (exclusive)'}, 'contentTypeMode': {'enum': ['include', 'exclude'], 'type': 'string'}}}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['archived', 'byContentType', 'byMonth', 'byPlatform', 'favorites', 'total', 'untagged', 'withNote'], 'properties': {'total': {'type': 'number'}, 'byMonth': {'type': 'object', 'description': 'Capture counts keyed by "YYYY-MM", newest first', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'archived': {'type': 'number'}, 'untagged': {'type': 'number'}, 'withNote': {'type': 'number'}, 'favorites': {'type': 'number'}, 'byPlatform': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'byContentType': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'additionalProperties': False}
list_bookmarks
List bookmarks
Browse bookmarks in reverse capture order with structured filters, or the contents of a saved collection via collectionId. Prefer search for free-text or semantic discovery. Results include a nextCursor when more pages exist; a cursor only works with the exact same filters, collection, and state.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'state': {'enum': ['active', 'archived', 'all'], 'type': 'string', 'default': 'active'}, 'cursor': {'type': 'string', 'description': 'Pass the nextCursor value from the previous page to continue paging'}, 'filters': {'type': 'object', 'properties': {'note': {'type': 'array', 'items': {'enum': ['has-note', 'no-note'], 'type': 'string'}, 'description': '["has-note"] = only bookmarks with a user note'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'enum': ['image', 'video', 'any-media', 'text-only'], 'type': 'string'}, 'description': 'Media presence: "image"/"video" = has that type, "any-media" = has any, "text-only" = has none (not combinable with the others)'}, 'authors': {'type': 'array', 'items': {'type': 'string', 'minLength': 1, 'description': 'An author username ("naval"), optionally platform-scoped ("twitter:naval")'}}, 'tagMode': {'enum': ['include_any', 'include_all', 'exclude_any', 'exclude_all'], 'type': 'string', 'description': 'include_any = OR (default), include_all = AND, exclude_any = none of these tags, exclude_all = not all of them'}, 'favorite': {'type': 'array', 'items': {'enum': ['favorite', 'not-favorite'], 'type': 'string'}, 'description': '["favorite"] = only favorites; ["not-favorite"] = only non-favorites'}, 'untagged': {'type': 'boolean', 'description': 'true = only bookmarks with no tags at all'}, 'mediaMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'platforms': {'type': 'array', 'items': {'enum': ['github', 'instagram', 'reddit', 'tiktok', 'twitter', 'web', 'youtube'], 'type': 'string', 'description': 'Platform id — X/Twitter is "twitter"'}}, 'authorMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'contentTypes': {'type': 'array', 'items': {'type': 'string', 'description': 'A content type ("article"), optionally platform-scoped ("twitter:article"). Valid types: repo, image, post, video, comment, article, page, snippet'}}, 'platformMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'capturedAfter': {'type': 'string', 'description': 'Only bookmarks saved on/after this ISO date (inclusive)'}, 'capturedBefore': {'type': 'string', 'description': 'Only bookmarks saved before this ISO date (exclusive)'}, 'contentTypeMode': {'enum': ['include', 'exclude'], 'type': 'string'}}}, 'collectionId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "List a saved collection's bookmarks: its stored filters are applied, with any explicit filters here overriding same-name ones"}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['items', 'nextCursor', 'rankMode'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['archived', 'author', 'capturedAt', 'contentCreatedAt', 'contentType', 'favorite', 'id', 'media', 'mediaCount', 'platform', 'tags', 'text', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'text': {'type': 'string', 'description': 'Bounded plain-text snippet'}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['altText', 'ref', 'type'], 'properties': {'ref': {'type': 'string'}, 'type': {'type': 'string'}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'description': 'Lightweight refs usable with view_media'}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Real title only; null when the source has none'}, 'author': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'archived': {'type': 'boolean'}, 'favorite': {'type': 'boolean'}, 'platform': {'type': 'string'}, 'capturedAt': {'type': 'string'}, 'mediaCount': {'type': 'number'}, 'contentType': {'type': 'string'}, 'matchedMedia': {'type': 'object', 'required': ['altText', 'caption', 'height', 'ref', 'type', 'url', 'width'], 'properties': {'ref': {'type': 'string'}, 'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'type': {'type': 'string'}, 'width': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'height': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'caption': {'type': 'string'}}, 'additionalProperties': False}, 'contentCreatedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'degraded': {'type': 'array', 'items': {'enum': ['semantic_unavailable', 'image_rank_unavailable'], 'type': 'string'}, 'description': 'Present when retrieval quality was reduced: semantic_unavailable = embedding failed (lexical-only results); image_rank_unavailable = no image captions, fell back to post ranking'}, 'rankMode': {'enum': ['post', 'image'], 'type': 'string'}, 'nextCursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'requestedRankMode': {'enum': ['post', 'image'], 'type': 'string', 'description': 'Present only when rankMode differs from what was requested'}}, 'additionalProperties': False}
list_collections
List collections
List saved filter collections. Pass a collection id to list_bookmarks to read its contents.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['collections'], 'properties': {'collections': {'type': 'array', 'items': {'type': 'object', 'required': ['color', 'filters', 'icon', 'id', 'name', 'pinned', 'position'], 'properties': {'id': {'type': 'string'}, 'icon': {'type': 'string'}, 'name': {'type': 'string'}, 'color': {'type': 'string'}, 'pinned': {'type': 'boolean'}, 'filters': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'position': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
list_tags
List tags
List the user's Stashr tags with usage counts. Use the returned tag names in bookmark filters and tag updates.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tags'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'object', 'required': ['color', 'count', 'id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'color': {'type': 'string'}, 'count': {'type': 'number', 'description': 'Active bookmarks currently carrying this tag'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
manage_collection
Manage collections
Create, update, or deliberately delete saved Stashr filter collections (use list_collections to read them). Create requires name; update and delete require id; delete also requires confirm=true.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Collection id, required for update and delete'}, 'icon': {'type': 'string', 'description': 'A Stashr collection icon id'}, 'name': {'type': 'string', 'maxLength': 50, 'minLength': 1, 'description': 'Collection name, required for create'}, 'color': {'type': 'string', 'description': 'A Stashr collection color id'}, 'action': {'enum': ['create', 'update', 'delete'], 'type': 'string'}, 'pinned': {'type': 'boolean', 'description': 'Pin or unpin the collection in the sidebar (update only)'}, 'confirm': {'type': 'boolean', 'description': 'Must be true to delete a collection'}, 'filters': {'type': 'object', 'properties': {'note': {'type': 'array', 'items': {'enum': ['has-note', 'no-note'], 'type': 'string'}, 'description': '["has-note"] = only bookmarks with a user note'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'enum': ['image', 'video', 'any-media', 'text-only'], 'type': 'string'}, 'description': 'Media presence: "image"/"video" = has that type, "any-media" = has any, "text-only" = has none (not combinable with the others)'}, 'authors': {'type': 'array', 'items': {'type': 'string', 'minLength': 1, 'description': 'An author username ("naval"), optionally platform-scoped ("twitter:naval")'}}, 'tagMode': {'enum': ['include_any', 'include_all', 'exclude_any', 'exclude_all'], 'type': 'string', 'description': 'include_any = OR (default), include_all = AND, exclude_any = none of these tags, exclude_all = not all of them'}, 'favorite': {'type': 'array', 'items': {'enum': ['favorite', 'not-favorite'], 'type': 'string'}, 'description': '["favorite"] = only favorites; ["not-favorite"] = only non-favorites'}, 'untagged': {'type': 'boolean', 'description': 'true = only bookmarks with no tags at all'}, 'mediaMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'platforms': {'type': 'array', 'items': {'enum': ['github', 'instagram', 'reddit', 'tiktok', 'twitter', 'web', 'youtube'], 'type': 'string', 'description': 'Platform id — X/Twitter is "twitter"'}}, 'authorMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'contentTypes': {'type': 'array', 'items': {'type': 'string', 'description': 'A content type ("article"), optionally platform-scoped ("twitter:article"). Valid types: repo, image, post, video, comment, article, page, snippet'}}, 'platformMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'capturedAfter': {'type': 'string', 'description': 'Only bookmarks saved on/after this ISO date (inclusive)'}, 'capturedBefore': {'type': 'string', 'description': 'Only bookmarks saved before this ISO date (exclusive)'}, 'contentTypeMode': {'enum': ['include', 'exclude'], 'type': 'string'}}}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'deleted': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}, 'collection': {'type': 'object', 'required': ['color', 'filters', 'icon', 'id', 'name', 'pinned', 'position'], 'properties': {'id': {'type': 'string'}, 'icon': {'type': 'string'}, 'name': {'type': 'string'}, 'color': {'type': 'string'}, 'pinned': {'type': 'boolean'}, 'filters': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'position': {'type': 'number'}}, 'additionalProperties': False}}, 'additionalProperties': False}
save_bookmark
Save bookmark
Save a public URL to Stashr. Repeated calls for the same URL are idempotent and return the existing bookmark.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'maxLength': 2048}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['bookmark', 'created'], 'properties': {'created': {'type': 'boolean'}, 'bookmark': {'type': 'object', 'required': ['id', 'metadata', 'text', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string', 'description': 'Full bookmark body rendered as Markdown'}, 'title': {'type': 'string'}, 'metadata': {'type': 'object', 'required': ['archived', 'author', 'capturedAt', 'contentCreatedAt', 'contentType', 'favorite', 'media', 'note', 'platform', 'tags'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['altText', 'duration', 'height', 'ref', 'storedUrl', 'type', 'url', 'width'], 'properties': {'ref': {'type': 'string'}, 'url': {'type': 'string'}, 'type': {'type': 'string'}, 'width': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'height': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'duration': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'storedUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'author': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'archived': {'type': 'boolean'}, 'favorite': {'type': 'boolean'}, 'platform': {'type': 'string'}, 'capturedAt': {'type': 'string'}, 'contentType': {'type': 'string'}, 'contentCreatedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}}, 'additionalProperties': False}
search
Search bookmarks
Search the user's Stashr bookmarks semantically. Use this before fetch when finding saved knowledge by meaning, wording, tag, author, platform, or content type. For visual queries (objects, colors, screenshots, layouts) set rankMode "image" to rank individual images by their captions; matched refs can be passed to view_media. Results include a nextCursor when more pages exist; a cursor only works with the exact same query, filters, and state. Ranking covers the top 200 candidates — narrow with filters rather than paging deep.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'state': {'enum': ['active', 'archived', 'all'], 'type': 'string', 'description': 'Which bookmarks to search; defaults to active only'}, 'cursor': {'type': 'string', 'description': 'Pass the nextCursor value from the previous page to continue paging'}, 'filters': {'type': 'object', 'properties': {'note': {'type': 'array', 'items': {'enum': ['has-note', 'no-note'], 'type': 'string'}, 'description': '["has-note"] = only bookmarks with a user note'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'enum': ['image', 'video', 'any-media', 'text-only'], 'type': 'string'}, 'description': 'Media presence: "image"/"video" = has that type, "any-media" = has any, "text-only" = has none (not combinable with the others)'}, 'authors': {'type': 'array', 'items': {'type': 'string', 'minLength': 1, 'description': 'An author username ("naval"), optionally platform-scoped ("twitter:naval")'}}, 'tagMode': {'enum': ['include_any', 'include_all', 'exclude_any', 'exclude_all'], 'type': 'string', 'description': 'include_any = OR (default), include_all = AND, exclude_any = none of these tags, exclude_all = not all of them'}, 'favorite': {'type': 'array', 'items': {'enum': ['favorite', 'not-favorite'], 'type': 'string'}, 'description': '["favorite"] = only favorites; ["not-favorite"] = only non-favorites'}, 'untagged': {'type': 'boolean', 'description': 'true = only bookmarks with no tags at all'}, 'mediaMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'platforms': {'type': 'array', 'items': {'enum': ['github', 'instagram', 'reddit', 'tiktok', 'twitter', 'web', 'youtube'], 'type': 'string', 'description': 'Platform id — X/Twitter is "twitter"'}}, 'authorMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'contentTypes': {'type': 'array', 'items': {'type': 'string', 'description': 'A content type ("article"), optionally platform-scoped ("twitter:article"). Valid types: repo, image, post, video, comment, article, page, snippet'}}, 'platformMode': {'enum': ['include', 'exclude'], 'type': 'string'}, 'capturedAfter': {'type': 'string', 'description': 'Only bookmarks saved on/after this ISO date (inclusive)'}, 'capturedBefore': {'type': 'string', 'description': 'Only bookmarks saved before this ISO date (exclusive)'}, 'contentTypeMode': {'enum': ['include', 'exclude'], 'type': 'string'}}}, 'rankMode': {'enum': ['post', 'image'], 'type': 'string', 'default': 'post', 'description': '"post" ranks whole bookmarks; "image" ranks individual stored images by caption for visual queries'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['nextCursor', 'rankMode', 'results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['archived', 'author', 'capturedAt', 'contentCreatedAt', 'contentType', 'favorite', 'id', 'media', 'mediaCount', 'platform', 'tags', 'text', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'text': {'type': 'string', 'description': 'Bounded plain-text snippet'}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['altText', 'ref', 'type'], 'properties': {'ref': {'type': 'string'}, 'type': {'type': 'string'}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'description': 'Lightweight refs usable with view_media'}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Real title only; null when the source has none'}, 'author': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'archived': {'type': 'boolean'}, 'favorite': {'type': 'boolean'}, 'platform': {'type': 'string'}, 'capturedAt': {'type': 'string'}, 'mediaCount': {'type': 'number'}, 'contentType': {'type': 'string'}, 'matchedMedia': {'type': 'object', 'required': ['altText', 'caption', 'height', 'ref', 'type', 'url', 'width'], 'properties': {'ref': {'type': 'string'}, 'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'type': {'type': 'string'}, 'width': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'height': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'caption': {'type': 'string'}}, 'additionalProperties': False}, 'contentCreatedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'degraded': {'type': 'array', 'items': {'enum': ['semantic_unavailable', 'image_rank_unavailable'], 'type': 'string'}, 'description': 'Present when retrieval quality was reduced: semantic_unavailable = embedding failed (lexical-only results); image_rank_unavailable = no image captions, fell back to post ranking'}, 'rankMode': {'enum': ['post', 'image'], 'type': 'string', 'description': 'The ranking that actually ran'}, 'nextCursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'requestedRankMode': {'enum': ['post', 'image'], 'type': 'string', 'description': 'Present only when rankMode differs from what was requested'}}, 'additionalProperties': False}
update_bookmark
Update bookmark
Update a bookmark's note, favorite state, tags, or reversible archive state. Tag values are tag names; reuse the user's existing names (list_tags) rather than inventing near-duplicates.
幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'note': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'tags': {'type': 'object', 'properties': {'add': {'type': 'array', 'items': {'type': 'string'}}, 'set': {'type': 'array', 'items': {'type': 'string'}}, 'remove': {'type': 'array', 'items': {'type': 'string'}}}}, 'archived': {'type': 'boolean'}, 'isFavorite': {'type': 'boolean'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'metadata', 'text', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string', 'description': 'Full bookmark body rendered as Markdown'}, 'title': {'type': 'string'}, 'metadata': {'type': 'object', 'required': ['archived', 'author', 'capturedAt', 'contentCreatedAt', 'contentType', 'favorite', 'media', 'note', 'platform', 'tags'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['altText', 'duration', 'height', 'ref', 'storedUrl', 'type', 'url', 'width'], 'properties': {'ref': {'type': 'string'}, 'url': {'type': 'string'}, 'type': {'type': 'string'}, 'width': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'height': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'altText': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'duration': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'storedUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'author': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'archived': {'type': 'boolean'}, 'favorite': {'type': 'boolean'}, 'platform': {'type': 'string'}, 'capturedAt': {'type': 'string'}, 'contentType': {'type': 'string'}, 'contentCreatedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}
view_media
View bookmark images
View up to four selected stored images from a bookmark. Use refs returned by image-ranked search or fetch. Images are bounded previews; call only when visual inspection is useful.
只读 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'refs'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'refs': {'type': 'array', 'items': {'type': 'string', 'maxLength': 500, 'minLength': 1}, 'maxItems': 4, 'minItems': 1}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['bookmarkId', 'failures', 'images'], 'properties': {'images': {'type': 'array', 'items': {'type': 'object', 'required': ['byteLength', 'height', 'mimeType', 'ref', 'width'], 'properties': {'ref': {'type': 'string'}, 'width': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'height': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'mimeType': {'type': 'string'}, 'byteLength': {'type': 'number'}}, 'additionalProperties': False}}, 'failures': {'type': 'array', 'items': {'type': 'object', 'required': ['message', 'ref'], 'properties': {'ref': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': False}}, 'bookmarkId': {'type': 'string'}}, 'additionalProperties': False}
已添加
manage_collection
2026年9月24日 02:40
已添加
list_collections
2026年9月24日 02:40
已添加
get_account
2026年9月24日 02:40
已添加
list_tags
2026年9月24日 02:40
已添加
library_stats
2026年9月24日 02:40
已添加
archive_bookmarks
2026年9月24日 02:40
已添加
update_bookmark
2026年9月24日 02:40
已添加
save_bookmark
2026年9月24日 02:40
已添加
list_bookmarks
2026年9月24日 02:40
已添加
view_media
2026年9月24日 02:40
已添加
fetch_many
2026年9月24日 02:40
已添加
fetch
2026年9月24日 02:40
已添加
search
2026年9月24日 02:40