Query Markup Documents - On-device hybrid search for markdown files with BM25, vector search, and LLM reranking
smry Product is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Read public sources and manage a smry library, feeds, notes, highlights, files, and page monitors.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http smry-product-mcp https://api.smry.ai/mcp
# 2 — ask your agent for something these tools do
# get_article, search_article, search_web and 25 more
smry Product costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http smry-product-mcp https://api.smry.ai/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
28 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Fetch clean, source-grounded text for a public article or YouTube URL, budgeted to a token limit and addressable by paragraph anchor. Returns an outline of headings (empty when the source has none), the requested window, and a next_cursor when more remains. Prefer search_article when you have a specific question rather than needing the whole text.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | — |
| max_tokens | integer | no | — |
| cursor | integer | no | — |
Read a public article or YouTube URL and return only the passages relevant to your query, each anchored to its paragraph and labelled with the section it sits under. Use this instead of get_article whenever you have a specific question about a link — it answers in a fraction of the tokens and the anchors stay citable.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | — |
| query | string | yes | — |
| max_tokens | integer | no | — |
| max_passages | integer | no | — |
| cursor | integer | no | — |
Discover current public sources with up to four focused searches. Search snippets are discovery aids; open the strongest pages before citing substantive claims.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| queries | array | yes | — |
| max_results | integer | no | — |
Open up to four public pages. Pass a focused context to get only the passages relevant to that question (cheap and precise), or omit it to read the full page as clean Markdown with start-based pagination.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pages | array | yes | — |
Use the same discovery catalog and ranking as smry's Discover feeds page. Browse suggested sources with no query; search websites, RSS, Atom, podcasts, Reddit, and YouTube by topic; create a focused Google News source; or discover every feed published by a site URL. Use sort=popular for popularity ordering. This only discovers sources; use follow_feeds to follow results in an existing or new colle
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Topic, publication, community, channel, podcast, or site URL. Omit to browse suggested sources. |
| mode | string | no | Discover source type. "feeds" is a compatibility alias for "websites". Use "url" when query is a site or feed URL. Default: all. |
| language | string | no | Source language. Default: English (en). |
| sort | string | no | Rank by best match or popularity. Default: best. |
| limit | integer | no | Maximum results. Defaults match the Discover page. |
Search and paginate across the account's saved items, standalone notes, and highlights through one corpus. Uses the same Postgres matching as the app and REST API; approximate=true identifies spelling recovery. Returns stable refs for get_library_object. Use list_library when you specifically need item lifecycle filters or reading history.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Full-text search across saved items, notes, and highlights; omit to list the whole corpus. |
| types | array | no | — |
| cursor | string | no | Opaque page token: pass the previous response's nextCursor verbatim and never construct one. |
| limit | number | no | Maximum objects to return in this page, from 1 to 100. Defaults to 50. |
Read one object returned by list_library_objects. Item text and note/highlight bodies are bounded; item asset metadata includes the MCP resource URI for original bytes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | — |
| content_max_characters | number | no | Maximum characters of object text to return, from 500 to 12000. Defaults to 12000. |
Return an authenticated MCP resource link for an item's original file. Set include_data=true to show images or audio inline, or embed another file up to 8 MiB. Larger originals remain readable through the streaming Developer API byte-range endpoint.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | UUID that identifies the resource; pass it back exactly as smry returned it. |
| include_data | boolean | no | — |
Search this account's articles, websites, books, emails, PDFs, social posts, videos, podcast episodes, and documents. For a normal text search, pass only query and limit. "Triage my inbox" is {"status":"inbox","limit":10}; "saved this week" is {"saved_after":"7d"}. Matching is shared with app search and REST, including spelling recovery (approximate=true). Optional filters are combined with AND: o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cursor | string | no | Opaque page token: pass the previous response's nextCursor verbatim and never construct one. |
| limit | number | no | Maximum items to return, from 1 to 100. Defaults to 50, and is capped at 20 with includeContent. |
| query | string | no | Full-text search over saved titles and text; omit to list without searching. |
| tag | string | no | Return only items carrying this tag, matching without regard to case or surrounding spaces. |
| status | no | Return only items in this triage status: inbox, later, or archive. | |
| starred | boolean | no | Set true for starred items only, or false for unstarred items only. |
| view | no | Set history for reading history, the only way to read it; defaults to all saved items. | |
| include_content | boolean | no | Include each item's stored article text. Defaults to false. |
| content_max_characters | number | no | Maximum characters of text per item when includeContent is set, from 500 to 12000. Defaults to 4000. |
| content_kind | no | Return only items of this content kind, such as article, pdf, or video. | |
| capture_method | no | Return only items captured this way, such as reader, extension, upload, or api. | |
| format | no | Return only items stored in this format, such as html, pdf, or epub. | |
| saved_after | string | no | Items saved after this time: "7d", "36h", "now", or an ISO date. Use for "saved this week". |
| updated_after | string | no | Items whose record changed after this time (status, tags, read progress, or a save): "7d", "36h", "now", or an ISO date. For "saved this week" use savedAfter. |
| external_id | string | no | Return only the item saved under this external id from your own system. |
| include_metadata | boolean | no | Include the free-form metadata object saved through the API. Everything else is always returned. |
| include_counts | boolean | no | — |
Read the append-only library change stream, including deletions. For a race-free first sync, call once with cursor=latest, list the library, then continue from the returned nextCursor.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cursor | string | no | Pass a previous response's nextCursor verbatim, or latest to start at the current head; never construct one. |
| limit | number | no | Maximum changes to return in this page, from 1 to 250. Defaults to 100. |
Read one library item by id. Stored article text is token-budgeted and supports a paragraph cursor so long documents never flood the agent context.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | UUID that identifies the resource; pass it back exactly as smry returned it. |
| include_content | boolean | no | Include the item's stored article text. Defaults to true. |
| max_tokens | integer | no | — |
| cursor | integer | no | — |
Return only the stored passages relevant to a question about one library item. Use after list_library instead of reading a long book, PDF, email, transcript, or document from the beginning.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | UUID that identifies the resource; pass it back exactly as smry returned it. |
| query | string | yes | — |
| max_tokens | integer | no | — |
| max_passages | integer | no | — |
| cursor | integer | no | — |
Save supplied source text without fetching a public URL. Use external_id for retry-safe creates; content_kind can correct automatic classification.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | no | — |
| title | string | yes | — |
| content | string | yes | — |
| author | no | — | |
| published_at | no | — | |
| status | no | — | |
| starred | boolean | no | — |
| tags | array | no | — |
| content_kind | no | — | |
| capture_method | no | — | |
| format | no | — | |
| mime_type | no | — | |
| file_name | no | — | |
| external_id | no | — | |
| metadata | object | no | — |
Securely extract a public URL and idempotently add it to the account's library. Returns alreadySaved=true for a duplicate and reports hard paywalls instead of claiming success.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | — |
| status | no | — | |
| starred | boolean | no | — |
| tags | array | no | — |
Move, tag, mark read, update progress, or correct the classification of one library item.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | UUID that identifies the resource; pass it back exactly as smry returned it. |
| status | no | — | |
| starred | boolean | no | — |
| tags | array | no | — |
| read_progress | no | — | |
| mark_read | boolean | no | — |
| content_kind | no | — |
Atomically move, tag, mark read, update progress, or correct classification for up to 100 library items.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ids | array | yes | — |
| status | no | — | |
| starred | boolean | no | — |
| tags | array | no | — |
| read_progress | no | — | |
| mark_read | boolean | no | — |
| content_kind | no | — |
Remove one item from this account's library. Web sources are unaffected. For an uploaded file, its original, extracted text, and synced local copies are permanently deleted; highlights and notes are kept.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | UUID that identifies the resource; pass it back exactly as smry returned it. |
list: Returns the same owner-scoped Collections shown in /feeds, including canonical filter state and revision. Required fields: none. Example: {"action":"list"} create: Creates the same named Collection used by the production /feeds UI. Required fields: name. Example: {"action":"create","name":"Research"} update: Membership is a complete replacement, matching the production Collection editor. Req
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | "list": List Collections and their managed-feed filters · "create": Create a Collection · "update": Rename a Collection or replace its input membership · "delete": Delete a Collection |
| name | string | no | — |
| source_ids | array | no | — |
| id | integer | no | — |
Read followed feeds. "What's new?" is {"since":"1d"}: newest published first, one line per entry with format:"compact". Other arguments are optional; add where.collection, where.source.include/exclude, where.unread, or where.match when requested. per_source_limit produces a bounded fair sample across pages; omit it to retrieve every matching article. select:"sources" returns fetch_status and last_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| since | string | no | The "what's new" shorthand: entries published after this time (falling back to discovery time when the feed gives none), newest published first. {"since":"1d"} is the whole catch-up call. Entries only |
| select | no | "entries" = rows · "sources" = per-source health (where.collection/source only; use having for health filters; stalled = nothing published in 14 days and nothing delivered in 7, quiet = nothing delive | |
| where | object | no | Entry selection predicate: fields AND together; omit a field to not filter on it. Source queries/mutations accept only collection and source; use query having for source-health filters. |
| limit | integer | no | Default 20, maximum 100; page further with next_cursor. |
| cursor | string | no | Only a next_cursor from a previous response; omit on the first call. |
| per_source_limit | integer | no | Fair sample: at most this many entries per source across the result set, before pagination. Omit for an exhaustive stream. omitted.by_per_source_limit reports articles outside this sample. |
| order_by | no | Default -discovered_at: newest arrivals first, so backfilled items never hide. | |
| fields | array | no | Project only these entry fields. ["id"] is the cheap diff shape. Summary is opt-in. |
| format | no | "compact" returns token-lean text lines (#entry_id [source · s<source_id> · collection] date title / url) in text; entries is then an empty array and fields is ignored. | |
| group_by | no | — | |
| compare | object | no | Trend detection for aggregates: counts inside the window vs the prior baseline, e.g. {"window":"7d","baseline":"28d"}. |
| having | object | no | Filter groups/sources on derived values. |
preview: Classifies a bounded recent sample and returns both binary decisions, uncertainty counts, reasons, and degradation status. Save with applyFeedFilter using this preview token and Collection revision. Required fields: collection, filter. Example: {"action":"preview","collection":{"id":12},"filter":{"prompt":"Software engineering articles","whenUncertain":"include"}} apply: Atomically applie
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | "preview": Preview a Collection filter without changing the feed · "apply": Apply a previously previewed Collection filter |
| collection | object | no | — |
| filter | no | — | |
| previewToken | string | no | — |
| expectedRevision | integer | no | — |
Find public feeds by topic or find a site's published feeds. This is the compact Developer API discovery adapter; use search_feeds for language, ranking, and source-type controls. Discovery does not subscribe; pass result feedUrl values to follow_feeds. Example: {"query":"https://www.nasa.gov","mode":"site"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
| mode | no | "feeds" searches by topic; "site" discovers what a specific URL publishes. |
Follow up to 20 feed or site URLs in one call. Site URLs are resolved to their published feed. Naming a collection that does not exist creates it. Returns a per-URL outcome — partial success is normal and legible, never all-or-nothing. Example: {"urls":["https://www.nasa.gov/feed/"],"collection":"Research"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| urls | array | yes | — |
| collection | no | Collection id or name. A new name is created. Omit for Unsorted. |
Creates a Collection-compatible news query. Google News RSS is the current adapter and is intentionally hidden behind this durable product type. Example: {"query":"open source databases","collection":"Research"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
| locale | string | no | — |
| collection | no | Collection id or name. A new name is created. Omit for Unsorted. |
Less like this hides an included entry. Feedback remains separate agent context and never silently revises the Collection filter. Example: {"entryId":42,"value":"less_like_this"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entryId | integer | yes | — |
| value | yes | — |
One stream, two checkpoint owners. Stateful callers pass cursor:"latest", then store each next_cursor themselves; that first call only establishes the checkpoint and returns no events, so poll again with the returned next_cursor. Stateless scheduled agents pass consumer_id; smry retains the acknowledged position and the consumer's saved where predicate. Pass exactly one. Managed batches repeat unt
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cursor | string | no | Caller-managed progress: "latest" to start, then the next_cursor you stored. |
| consumer_id | integer | no | smry-managed progress: poll this consumer's saved predicate. Omit cursor and where. |
| limit | integer | no | — |
| where | object | no | Entry selection predicate: fields AND together; omit a field to not filter on it. Source queries/mutations accept only collection and source; use query having for source-health filters. |
| fields | array | no | Project event entries to these fields; ["id"] is the cheapest diff. id is always included. |
| attention_limit | integer | no | Sources listed per attention bucket (default 5; the *_count fields always carry the full tally). Pass up to 500 for the exhaustive roster, 0 for counts only. |
Preview changes to matching sources, entries, or collections. Default dry_run:true returns would_affect, sample, and commit_token without changing them. Commit by sending the same op and commit_token; retries replay the recorded result. Explicit dry_run:false applies immediately. sources.move needs set.collection; sources.rename needs set.title; collections.create/rename need set.name. Collections
| Parameter | Type | Required | Notes |
|---|---|---|---|
| op | yes | sources.* use where.source or where.collection, never entry filters. entries.* use the full where predicate. collections.rename/delete select one where.collection; collections.create uses set.name. | |
| where | object | no | Entry selection predicate: fields AND together; omit a field to not filter on it. Source queries/mutations accept only collection and source; use query having for source-health filters. |
| set | object | no | — |
| dry_run | boolean | no | Default true: preview affected records and return a commit_token. Explicit false applies immediately; prefer preview then commit_token for agent workflows. |
| commit_token | string | no | From a dry run. Single-use and idempotent: resending after a network failure replays the recorded outcome. |
Create a scheduled web-change monitor whose detected changes arrive as an ordinary followed source — query, watch, and mutate it like any feed. Naming a collection that does not exist creates it. Active monitor limits are Free 3, Patron 10, and Pro 100; scheduled monthly credits are 150, 720, and 7,200, respectively. Page and sitemap runs reserve 1 credit; extract runs reserve 10. The shortest int
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| target | yes | "page" watches one URL, "sitemap" watches URL additions/removals, "extract" watches for meaningful site-wide changes per your instructions. | |
| collection | no | Collection id or name. A new name is created. Omit for Unsorted. | |
| change_detection | no | — | |
| schedule | no | Default: daily. Shortest interval: 60 minutes. | |
| tags | array | no | — |
create: Save a where predicate and let smry retain one processing checkpoint. New consumers start at the current high-water mark, so they receive future discoveries rather than replaying history. For history, create the Consumer first, query the historical window separately, then poll; that order closes the query/create race. Create one per independent processing loop, not per source. Retrying the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | "create": Create a managed feed consumer · "list": List managed consumers with pending counts · "ack": Acknowledge a managed consumer batch · "delete": Delete a managed feed consumer |
| name | string | no | — |
| where | object | no | Entry selection predicate: fields AND together; omit a field to not filter on it. Source queries/mutations accept only collection and source; use query having for source-health filters. |
| id | integer | no | — |
| cursor | string | no | — |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install smry Product or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish smry Product can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.