Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

smry Product

REMOTE · API.SMRY.AI · SCANNED SEP 22

Read public sources and manage a smry library, feeds, notes, highlights, files, and page monitors.

Available components

+3 this week 82 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability57
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 5288 tokens (~188/item across 28 items; 28 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
  • Stability check failed: schema churn in the 23 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 19 additions. See how to fix → Fail
Tool Coverage84
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 46% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 29 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the smry Product MCP server?

smry Product is a hosted endpoint at https://api.smry.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.smry.ai

# add to Claude Code
claude mcp add --transport http ai-smry-r-smry-product 'https://api.smry.ai/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "ai-smry-r-smry-product": {
      "url": "https://api.smry.ai/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ai-smry-r-smry-product": {
      "type": "http",
      "url": "https://api.smry.ai/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.ai-smry-r-smry-product]
url = "https://api.smry.ai/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-smry-r-smry-product": {
      "type": "remote",
      "url": "https://api.smry.ai/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-smry-r-smry-product --url 'https://api.smry.ai/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ai-smry-r-smry-product:
    url: "https://api.smry.ai/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ai-smry-r-smry-product": {
      "Transport": "http",
      "Url": "https://api.smry.ai/mcp"
    }
  }
}
# add to Vellum
assistant mcp add ai-smry-r-smry-product -t streamable-http -u 'https://api.smry.ai/mcp'
// mcp.json
{
  "mcpServers": {
    "ai-smry-r-smry-product": {
      "type": "http",
      "url": "https://api.smry.ai/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 63 to 66.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 56 to 60.

  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 46 to 50.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 40 to 43.

  • 13 Sept 26 +1
    • Tool coverage: 28% → 46% functional
    • “get_library_asset” reworded the description of “id” cosmetic
    • “get_library_changes” reworded the description of “cursor” cosmetic
    • “get_library_changes” reworded the description of “limit” cosmetic
    • “get_library_object” reworded the description of “content_max_characters” cosmetic
    • “get_saved_article” reworded the description of “id” cosmetic
    • “get_saved_article” reworded the description of “include_content” cosmetic
    • “list_library” reworded the description of “capture_method” cosmetic
    • “list_library” reworded the description of “content_kind” cosmetic
    • “list_library” reworded the description of “content_max_characters” cosmetic
    • “list_library” reworded the description of “cursor” cosmetic
    • “list_library” reworded the description of “external_id” cosmetic
    • “list_library” reworded the description of “format” cosmetic
    • “list_library” reworded the description of “include_content” cosmetic
    • “list_library” reworded the description of “limit” cosmetic
    • “list_library” reworded the description of “query” cosmetic
    • “list_library” reworded the description of “starred” cosmetic
    • “list_library” reworded the description of “status” cosmetic
    • “list_library” reworded the description of “tag” cosmetic
    • “list_library” reworded the description of “view” cosmetic
    • “list_library_objects” reworded the description of “cursor” cosmetic
    • “list_library_objects” reworded the description of “limit” cosmetic
    • “list_library_objects” reworded the description of “query” cosmetic
    • “remove_library_item” reworded the description of “id” cosmetic
    • “search_saved_item” reworded the description of “id” cosmetic
    • “update_library_item” reworded the description of “id” cosmetic
  • 12 Sept 26 0
    • A breaking change shipped without a version bump: still 0.4.0 security
    • “get_library_changes” changed the type of “limit”: integer → number functional
    • “get_library_object” changed the type of “content_max_characters”: integer → number functional
    • “list_library” changed the type of “content_max_characters”: integer → number functional
    • “list_library” changed the type of “limit”: integer → number functional
    • “list_library_objects” changed the type of “limit”: integer → number functional
  • 11 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33.

  • 9 Sept 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “query_feeds” rewrote its description, which is the text the model reads security
    • “query_feeds” reworded the description of “per_source_limit” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 22 Sept 2026 · Probed https://api.smry.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=smry.ai CN=WE1,O=Google Trust Services,C=US 29 Aug 2026 27 Nov 2026 ECDSA 256 ECDSA-SHA256 b91ba265caf2631413394fa719a69c97
SANs: smry.ai, *.smry.ai
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of api.smry.ai. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
smry.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer realm="smry", resource_metadata="https://api.smry.ai/.well-known/oauth-protected-resource/mcp", scope="smry:write"

Bearer realm="smry", resource_metadata="https://api.smry.ai/.well-known/oauth-protected-resource/mcp", scope="smry:write"
Header Value
content-security-policy frame-ancestors 'self'
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy strict-origin-when-cross-origin

Protected resource metadata

Document https://api.smry.ai/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://api.smry.ai/mcp
Authorisation server https://clerk.smry.ai

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.smry.ai/mcp Verified 200
http (plaintext) http://api.smry.ai/mcp HTTPS enforced 308 https://api.smry.ai/mcp
MCP tools · 28 exposed · ~4,792 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
bulk_update_library_items ~79

Atomically move, tag, mark read, update progress, or correct classification for up to 100 library items.

NameTypeReqDescription
content_kind
idsarrayyes
mark_readboolean
read_progress
starredboolean
status
tagsarray
NameTypeReqDescription
itemsarrayyes
missingnumberyes
updatednumberyes

No examples provided.

create_monitor ~237

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 interval is 60 minutes and the default schedule is daily. The response reports remaining slots and scheduled credits. Example: {"name":"Example page changes","target":{"type":"page","url":"https://example.com"},"collection":"Research"}

NameTypeReqDescription
change_detection
collectionCollection id or name. A new name is created. Omit for Unsorted.
namestringyes
scheduleDefault: daily. Shortest interval: 60 minutes.
tagsarray
targetyes"page" watches one URL, "sitemap" watches URL additions/removals, "extract" watches for meaningful site-wide changes per your instructions.
NameTypeReqDescription
limitsobjectyes
monitorobjectyes
subscriptionobjectyes

No examples provided.

create_news_query ~81

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"}

NameTypeReqDescription
collectionCollection id or name. A new name is created. Omit for Unsorted.
localestring
querystringyes
NameTypeReqDescription
collectionstringyes
followedintegeryes
input_typestringyes
objectstringyes
outcomesarrayyes

No examples provided.

discover_feed_inputs ~103

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"}

NameTypeReqDescription
mode"feeds" searches by topic; "site" discovers what a specific URL publishes.
querystringyes
NameTypeReqDescription
resultsarrayyes

No examples provided.

follow_feeds ~109

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"}

NameTypeReqDescription
collectionCollection id or name. A new name is created. Omit for Unsorted.
urlsarrayyes
NameTypeReqDescription
collectionstringyes
followedintegeryes
objectstringyes
outcomesarrayyes

No examples provided.

get_article ~100

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.

NameTypeReqDescription
cursorinteger
max_tokensinteger
urlstringyes
NameTypeReqDescription
authorstring|nullyes
cache_hitbooleanyes
content_qualitystring|nullyes
extraction_sourcestringyes
from_anchornumber|nullyes
languagestring|nullyes
next_cursornumber|nullyes
outlinearrayyes
published_atstring|nullyes
publisherstring|nullyes
reader_urlstringyes
responded_atstringyes
source_urlstringyes
textstringyes
titlestringyes
to_anchornumber|nullyes
tokens_returnednumberyes
total_blocksnumberyes
total_tokensnumberyes

No examples provided.

get_feed_changes ~302

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 until their next_cursor is acknowledged. Every response also carries a capped source-health attention block. To read what is already there rather than what changes next, use query_feeds. Example: {"cursor":"latest","limit":20} Example: {"consumer_id":7,"limit":20}

NameTypeReqDescription
attention_limitintegerSources 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.
consumer_idintegersmry-managed progress: poll this consumer's saved predicate. Omit cursor and where.
cursorstringCaller-managed progress: "latest" to start, then the next_cursor you stored.
fieldsarrayProject event entries to these fields; ["id"] is the cheapest diff. id is always included.
limitinteger
whereobjectEntry 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.
NameTypeReqDescription
attentionobjectyesSource health, capped to five per bucket (stalled: longest silent first; erroring and never_produced: alphabetical); the *_count fields carry the full tally. Query select:"sources" with having for th…
checkpointobjectyes
eventsarrayyes
has_morebooleanyes
next_cursorstringyes
objectstringyes

No examples provided.

get_library_asset ~86

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.

NameTypeReqDescription
idstringyesUUID that identifies the resource; pass it back exactly as smry returned it.
include_databoolean
NameTypeReqDescription
assetobjectyes

No examples provided.

get_library_changes ~102

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.

NameTypeReqDescription
cursorstringPass a previous response's nextCursor verbatim, or latest to start at the current head; never construct one.
limitnumberMaximum changes to return in this page, from 1 to 250. Defaults to 100.
NameTypeReqDescription
changesarrayyes
hasMorebooleanyes
nextCursorstringyes

No examples provided.

get_library_object ~78

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.

NameTypeReqDescription
content_max_charactersnumberMaximum characters of object text to return, from 500 to 12000. Defaults to 12000.
refstringyes
NameTypeReqDescription
objectyes
refstringyes
typestringyes

No examples provided.

get_saved_article ~92

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.

NameTypeReqDescription
cursorinteger
idstringyesUUID that identifies the resource; pass it back exactly as smry returned it.
include_contentbooleanInclude the item's stored article text. Defaults to true.
max_tokensinteger
NameTypeReqDescription
itemyes

No examples provided.

list_library ~603

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: omit every filter the user did not explicitly request. Filter by exact tag, kind, capture method, format, or lifecycle; set view=history for recently read items. Items are ordered by most recent status change first (history view: last read first); continue with nextCursor. Item IDs select later tools and are not smry.ai routes; cite only each exact returned source URL.

NameTypeReqDescription
capture_methodReturn only items captured this way, such as reader, extension, upload, or api.
content_kindReturn only items of this content kind, such as article, pdf, or video.
content_max_charactersnumberMaximum characters of text per item when includeContent is set, from 500 to 12000. Defaults to 4000.
cursorstringOpaque page token: pass the previous response's nextCursor verbatim and never construct one.
external_idstringReturn only the item saved under this external id from your own system.
formatReturn only items stored in this format, such as html, pdf, or epub.
include_contentbooleanInclude each item's stored article text. Defaults to false.
include_countsboolean
include_metadatabooleanInclude the free-form metadata object saved through the API. Everything else is always returned.
limitnumberMaximum items to return, from 1 to 100. Defaults to 50, and is capped at 20 with includeContent.
querystringFull-text search over saved titles and text; omit to list without searching.
saved_afterstringItems saved after this time: "7d", "36h", "now", or an ISO date. Use for "saved this week".
starredbooleanSet true for starred items only, or false for unstarred items only.
statusReturn only items in this triage status: inbox, later, or archive.
tagstringReturn only items carrying this tag, matching without regard to case or surrounding spaces.
updated_afterstringItems 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.
viewSet history for reading history, the only way to read it; defaults to all saved items.
NameTypeReqDescription
approximateboolean
countsobject
itemsarrayyes
matchedTermsarray
nextCursorstring|nullyes

No examples provided.

list_library_objects ~152

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.

NameTypeReqDescription
cursorstringOpaque page token: pass the previous response's nextCursor verbatim and never construct one.
limitnumberMaximum objects to return in this page, from 1 to 100. Defaults to 50.
querystringFull-text search across saved items, notes, and highlights; omit to list the whole corpus.
typesarray
NameTypeReqDescription
approximateboolean
matchedTermsarray
nextCursorstring|nullyes
objectsarrayyes
partialbooleanyes
totalnumberyes

No examples provided.

manage_collections ~202

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. Required fields: id. Example: {"action":"update","id":12,"name":"Engineering"} delete: Deletes a custom Collection and moves its inputs to Unsorted. Required fields: id. Example: {"action":"delete","id":12}

NameTypeReqDescription
actionstringyes"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
idinteger
namestring
source_idsarray

Structured output declared, but exposes no named fields.

No examples provided.

manage_feed_consumers ~389

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 same case-insensitive name and predicate returns the existing Consumer; the same name with another predicate is a 409. Required fields: name. Example: {"action":"create","name":"Engineering briefing","where":{"collection":["Research"]}} list: List each saved consumer, its opaque acknowledged_cursor, delivery and acknowledgement timestamps, and how many matching entries are waiting past that checkpoint. Required fields: none. Example: {"action":"list"} ack: After processing every event returned by getFeedChanges for this consumer, acknowledge that response's next_cursor. Crashes before ack cause safe redelivery; stale, foreign, and invented cursors are rejected. Required fields: id, cursor. Example: {"action":"ack","id":7,"cursor":"<next_cursor from get_feed_changes>"} delete: Remove only the saved predicate and checkpoint. Followed sources, entries, and human read state are untouched. Required fields: id. Example: {"action":"delete","id":7}

NameTypeReqDescription
actionstringyes"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
cursorstring
idinteger
namestring
whereobjectEntry 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.

Structured output declared, but exposes no named fields.

No examples provided.

manage_feed_filter ~194

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 applies the exact preview when the Collection revision still matches. Passing a preview created with filter:null clears the filter. Required fields: previewToken, expectedRevision. Example: {"action":"apply","previewToken":"<previewToken from preview>","expectedRevision":0}

NameTypeReqDescription
actionstringyes"preview": Preview a Collection filter without changing the feed · "apply": Apply a previously previewed Collection filter
collectionobject
expectedRevisioninteger
filter
previewTokenstring

Structured output declared, but exposes no named fields.

No examples provided.

mutate_feeds ~316

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 rename/delete need exactly one where.collection. Use manage_collections for direct collection CRUD. Check partial and each outcome after committing. Example: {"op":"collections.create","set":{"name":"Research"}} Example: {"op":"sources.move","where":{"source":{"include":[42]}},"set":{"collection":"Research"}} Example: {"op":"sources.move","commit_token":"<commit_token from preview>"}

NameTypeReqDescription
commit_tokenstringFrom a dry run. Single-use and idempotent: resending after a network failure replays the recorded outcome.
dry_runbooleanDefault true: preview affected records and return a commit_token. Explicit false applies immediately; prefer preview then commit_token for agent workflows.
opyessources.* 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.
setobject
whereobjectEntry 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.

Structured output declared, but exposes no named fields.

No examples provided.

open_web_pages ~48

Open up to four public pages and return clean Markdown evidence. Use a focused context to extract only what is relevant, or omit it to read the page directly.

NameTypeReqDescription
pagesarrayyes
NameTypeReqDescription
budgetReachedbooleanyes
failuresarrayyes
pagesarrayyes

No examples provided.

query_feeds ~645

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_fetched_at separately from publisher activity (health, silent_days, entries_7d/28d). Quiet publishers can have working feeds. select:"aggregate" returns grouped counts with optional trends. Classification-filtered queries report classification_coverage: pending articles have not been assessed, not rejected. Times accept "7d"/"36h"/"now" or ISO dates. Example: {"since":"1d","per_source_limit":3,"limit":40,"format":"compact"} Example: {"select":"entries","where":{"unread":true,"collection":["Research"]},"limit":10} Example: {"select":"sources","having":{"silent_days":{"gte":30}},"limit":10} Example: {"select":"aggregate","group_by":"collection","where":{"discovered_after":"7d"}}

NameTypeReqDescription
compareobjectTrend detection for aggregates: counts inside the window vs the prior baseline, e.g. {"window":"7d","baseline":"28d"}.
cursorstringOnly a next_cursor from a previous response; omit on the first call.
fieldsarrayProject only these entry fields. ["id"] is the cheap diff shape. Summary is opt-in.
format"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
havingobjectFilter groups/sources on derived values.
limitintegerDefault 20, maximum 100; page further with next_cursor.
order_byDefault -discovered_at: newest arrivals first, so backfilled items never hide.
per_source_limitintegerFair 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.
select"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 deliv…
sincestringThe "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 onl…
whereobjectEntry 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.
NameTypeReqDescription
classification_coverageobjectCoverage before the classification decision and pagination. Pending articles are not excluded; retry the query after classification catches up. Degraded assessments used the filter's uncertainty poli…
objectstringyes
selectstringyes

No examples provided.

remove_library_item ~70

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.

NameTypeReqDescription
idstringyesUUID that identifies the resource; pass it back exactly as smry returned it.
NameTypeReqDescription
idstringyes
okbooleanyes

No examples provided.

save_article ~69

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.

NameTypeReqDescription
starredboolean
status
tagsarray
urlstringyes
NameTypeReqDescription
alreadySavedbooleanyes
extractionobjectyes
itemyes

No examples provided.

save_content ~126

Save supplied source text without fetching a public URL. Use external_id for retry-safe creates; content_kind can correct automatic classification.

NameTypeReqDescription
author
capture_method
contentstringyes
content_kind
external_id
file_name
format
metadataobject
mime_type
published_at
starredboolean
status
tagsarray
titlestringyes
urlstring
NameTypeReqDescription
alreadySavedbooleanyes
itemyes

No examples provided.

search_article ~109

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.

NameTypeReqDescription
cursorinteger
max_passagesinteger
max_tokensinteger
querystringyes
urlstringyes
NameTypeReqDescription
authorstring|nullyes
cache_hitbooleanyes
content_qualitystring|nullyes
extraction_sourcestringyes
languagestring|nullyes
matched_blocksnumberyes
next_cursornumber|nullyes
passagesarrayyes
published_atstring|nullyes
publisherstring|nullyes
querystringyes
reader_urlstringyes
responded_atstringyes
source_urlstringyes
titlestringyes
tokens_returnednumberyes
total_blocksnumberyes
total_tokensnumberyes

No examples provided.

search_feeds ~205

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 collection.

NameTypeReqDescription
languagestringSource language. Default: English (en).
limitintegerMaximum results. Defaults match the Discover page.
modestringDiscover source type. "feeds" is a compatibility alias for "websites". Use "url" when query is a site or feed URL. Default: all.
querystringTopic, publication, community, channel, podcast, or site URL. Omit to browse suggested sources.
sortstringRank by best match or popularity. Default: best.
NameTypeReqDescription
languagestringyes
modestringyes
omittedintegeryes
partialbooleanyes
querystringyes
resultsarrayyes
returnedintegeryes
sortstringyes
totalintegeryes
warningstring

No examples provided.

search_saved_item ~99

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.

NameTypeReqDescription
cursorinteger
idstringyesUUID that identifies the resource; pass it back exactly as smry returned it.
max_passagesinteger
max_tokensinteger
querystringyes
NameTypeReqDescription
content_kindyes
idstringyes
matched_blocksnumberyes
next_cursornumber|nullyes
passagesarrayyes
querystringyes
titlestringyes
tokens_returnednumberyes
total_blocksnumberyes
total_tokensnumberyes

No examples provided.

search_web ~49

Discover current public sources with up to four focused searches. Search snippets are discovery aids; open the strongest pages before citing substantive claims.

NameTypeReqDescription
max_resultsinteger
queriesarrayyes
NameTypeReqDescription
budgetReachedbooleanyes
failuresarrayyes
searchesarrayyes

No examples provided.

set_feed_feedback ~58

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"}

NameTypeReqDescription
entryIdintegeryes
valueyes
NameTypeReqDescription
entryIdintegeryes
filterChangedbooleanyes
objectstringyes
valueyes

No examples provided.

update_library_item ~89

Move, tag, mark read, update progress, or correct the classification of one library item.

NameTypeReqDescription
content_kind
idstringyesUUID that identifies the resource; pass it back exactly as smry returned it.
mark_readboolean
read_progress
starredboolean
status
tagsarray
NameTypeReqDescription
itemyes

No examples provided.

Common questions

What is the smry Product MCP server?

smry Product is an MCP server listed in the public MCP registry as ai.smry.r/smry-product. Read public sources and manage a smry library, feeds, notes, highlights, files, and page monitors. This page covers its hosted endpoint (https://api.smry.ai/mcp).

Is the smry Product MCP server safe to use?

smry Product scores 82 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the smry Product MCP server expose?

smry Product exposes 28 tools: get_article, search_article, search_web, open_web_pages, search_feeds, and 23 more. Their descriptions and schemas cost roughly 4,792 tokens of context every time the server is loaded.

Does the smry Product MCP server require authentication?

Yes. smry Product asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the smry Product MCP server still maintained?

smry Product is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.