smry Product
Server Details
Read public sources and manage a smry library, feeds, notes, highlights, files, and page monitors.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 28 tools
Several tools have overlapping purposes: discover_feed_inputs and search_feeds both discover feeds; get_article, search_article, and open_web_pages all fetch public web content; get_feed_changes and query_feeds both read feed content. Descriptions offer guidance but boundaries remain fuzzy for an agent choosing the right tool.
Most tools follow a consistent verb_noun pattern (e.g., create_monitor, get_article, list_library, search_web). A few deviate slightly (open_web_pages, set_feed_feedback), but the overall convention is clear and readable.
28 tools is on the heavy side for a feed and library management server, and many could be consolidated (e.g., get_article/search_article, get_library_object/get_library_asset) or organized into multi-action tools like manage_collections already does.
The surface covers CRUD for library items, feeds, collections, and consumers, plus discovery and search. Minor gaps exist, such as no direct create for simple feed sources without following, but most workflows are supported.
Available Tools
28 toolsbulk_update_library_itemsOrganize multiple library itemsBIdempotentInspect
Atomically move, tag, mark read, update progress, or correct classification for up to 100 library items.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| tags | No | ||
| status | No | ||
| starred | No | ||
| mark_read | No | ||
| content_kind | No | ||
| read_progress | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| missing | Yes | |
| updated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so safety is partly covered. The description adds a genuinely new behavioral trait not present in annotations: the operation is 'Atomically' applied, which tells the agent there is all-or-nothing semantics rather than partial success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the atomicity guarantee front-loaded and the item cap at the end. No filler, and every clause maps to a capability the agent needs to know about.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the atomic bulk framing is captured. However, for a 7-parameter mutation tool with 0% schema coverage and no usage guidance, the description leaves the agent without enough to invoke it confidently in the presence of update_library_item.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it only loosely maps operations to parameters ('move' is ambiguous against the inbox/later/archive status enum; 'correct classification' versus the 10-value content_kind enum). It never addresses 'starred', the tag count/length limits, or the read_progress 1-99 range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (move, tag, mark read, update progress, correct classification) against a specific resource (library items) with a clear bulk scope of up to 100. The bulk framing implicitly separates it from the singular update_library_item sibling, but it never names or contrasts with that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given: it never says to prefer this over update_library_item for single items, nor what conditions require the bulk path. The 100-item cap is the only routing signal, and it is stated as a limit rather than a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_monitorMonitor a web page for changesADestructiveInspect
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"}
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| tags | No | ||
| target | Yes | "page" watches one URL, "sitemap" watches URL additions/removals, "extract" watches for meaningful site-wide changes per your instructions. | |
| schedule | No | Default: daily. Shortest interval: 60 minutes. | |
| collection | No | Collection id or name. A new name is created. Omit for Unsorted. | |
| change_detection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| limits | Yes | |
| monitor | Yes | |
| subscription | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Create a scheduled web-change monitor' and uses 'mutate it like any feed', implying creation and later mutation but no deletion or destructive action. This directly contradicts the annotation destructiveHint: true, which suggests destructive behavior. The description fails to disclose any destructive side effects, creating an annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description packs a lot of useful detail into a single paragraph followed by a JSON example. It is information-dense but not redundant; the structure flows logically from creation to constraints to response. Slightly verbose due to listing all limits and credits, but justified given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality, constraints (limits, credits), and the response content ('reports remaining slots and scheduled credits'). It includes an example. However, it does not mention error scenarios, authentication, or edge cases, which might be relevant for a fully comprehensive description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains several parameter behaviors: target types and their differences, schedule limits and defaults, collection naming/creation, and credit costs. The schema itself provides descriptions for target and schedule. However, parameters like tags and change_detection are not elaborated in the description, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a scheduled web-change monitor'. It also details the three monitor types (page, sitemap, extract) and provides a concrete example, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives substantial operational guidance (limits, credits, schedule defaults, collection creation) but does not explicitly compare this tool to alternatives like create_news_query or discover_feed_inputs. It lacks a direct 'use this when...' statement relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_news_queryCreate a durable query/news inputADestructiveInspect
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"}
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| locale | No | ||
| collection | No | Collection id or name. A new name is created. Omit for Unsorted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| object | Yes | |
| followed | Yes | |
| outcomes | Yes | |
| collection | Yes | |
| input_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-open-world operation, and the description adds that it hides the Google News RSS adapter behind a durable product type, which is useful abstraction context. However, it does not disclose side effects such as duplicate handling or whether the query becomes immediately available, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences and an example, with the core purpose front-loaded. Every word adds value; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, output schema present), the description provides a good starting point but omits details like duplicate behavior, locale semantics, and the nature of the output (though the latter may be covered by the output schema). It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (33%), covering only 'collection'. The description's example clarifies the usage of 'query' and 'collection' but says nothing about 'locale'. It partially compensates for the low coverage but leaves the 'locale' parameter's meaning undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a Collection-compatible news query, with a specific verb (creates) and resource (news query). It distinguishes itself from sibling tools by focusing on durable query creation, not on search or management. The mention of the hidden Google News RSS adapter adds implementation context, making the tool's role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for creating persistent news queries but does not explicitly contrast it with alternatives like search_article or query_feeds. It provides an example but lacks explicit guidance on when to use this tool versus others, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_feed_inputsFind public feeds to followARead-onlyInspect
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"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "feeds" searches by topic; "site" discovers what a specific URL publishes. | |
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the key behavioral fact that this tool does not subscribe (i.e., it only discovers), and that it returns feedUrl values to be used with follow_feeds. It does not contradict annotations and adds useful context beyond the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences and an example, with no wasted words. It front-loads the primary purpose, then gives usage guidance and a behavioral note, followed by a helpful example. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return format is covered. The description covers purpose, usage, alternatives, and an example. It does not mention pagination or error handling, but for a simple discovery tool with read-only annotations, that is acceptable. The description is complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only mode is described in the schema). The description compensates by explaining the two modes ('feeds' searches by topic; 'site' discovers what a specific URL publishes) and provides a concrete example with both query and mode, clarifying that query is a URL in site mode. This adds meaningful semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Find public feeds by topic or find a site's published feeds') and clearly distinguishes itself from sibling tools by naming search_feeds (for language/ranking/source-type controls) and follow_feeds (for subscribing). The phrase 'compact Developer API discovery adapter' further sets expectations. This is a clear, specific purpose that an agent can use to decide whether to invoke this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool vs alternatives: 'use search_feeds for language, ranking, and source-type controls' and 'Discovery does not subscribe; pass result feedUrl values to follow_feeds.' This gives clear conditions and alternatives, so the agent knows when to choose this tool and what to do with its output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
follow_feedsFollow feeds by URL, with per-URL outcomesADestructiveInspect
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"}
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | ||
| collection | No | Collection id or name. A new name is created. Omit for Unsorted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| object | Yes | |
| followed | Yes | |
| outcomes | Yes | |
| collection | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by revealing that naming a new collection creates it, and that results are per-URL with partial success instead of all-or-nothing. It also explains that site URLs are resolved to their published feeds, providing meaningful behavioral detail beyond the destructiveHint and readOnlyHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary action. It includes useful nuances (site URL resolution, collection creation, partial success) and an example, all without unnecessary verbosity. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context for a moderately simple tool with two parameters: it explains the operation, behavior, and return format at a high level. While it does not detail the exact output schema structure, the mention of per-URL outcomes and partial success is sufficient given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are semantically addressed: 'urls' is described as feed or site URLs, and 'collection' is explained as an id or name (with creation behavior and omission default) in both the schema and description. The schema lacks a dedicated description for 'urls', but the overall description fills this gap. Minor details like min length are not explained, but the semantics are clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to follow up to 20 feed or site URLs in one call. It uses a specific verb ('follow') and identifies the resource ('feeds'), and it distinguishes itself by mentioning per-URL outcomes and site URL resolution, which helps set it apart from general feed mutators like mutate_feeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when following feeds by URL, and it explains site URL resolution and collection creation. However, it does not explicitly state when to prefer this tool over sibling tools such as mutate_feeds or manage_collections, nor does it mention any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_articleRead an article with smryARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| cursor | No | ||
| max_tokens | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| title | Yes | |
| author | Yes | |
| outline | Yes | |
| language | Yes | |
| cache_hit | Yes | |
| publisher | Yes | |
| to_anchor | Yes | |
| reader_url | Yes | |
| source_url | Yes | |
| from_anchor | Yes | |
| next_cursor | Yes | |
| published_at | Yes | |
| responded_at | Yes | |
| total_blocks | Yes | |
| total_tokens | Yes | |
| content_quality | Yes | |
| tokens_returned | Yes | |
| extraction_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only and non-destructive, so the description adds meaningful behavior: it returns an outline of headings (empty when none exist), a requested window, and a next_cursor for pagination. It also discloses that the text is clean, source-grounded, and budgeted by a token limit. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: what it fetches, what it returns, and when to choose the alternative. The core action and scope are front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, three-parameter tool with an output schema, the description covers purpose, scope, behavior, pagination, the empty-outline edge case, and alternative routing. Nothing material an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the meaning. It semantically covers all three parameters: url ('public article or YouTube URL'), max_tokens ('budgeted to a token limit'), and cursor ('paragraph anchor' / 'next_cursor'). It does not name the parameters explicitly, leaving a small inference gap, but the compensation is strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch clean, source-grounded text for a public article or YouTube URL', then names distinctive features like token budgeting, paragraph anchors, and pageable results. It clearly differentiates itself from search_article, which is for targeted questions rather than whole-text retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The last sentence explicitly says 'Prefer search_article when you have a specific question rather than needing the whole text,' providing a clear when-not and named alternative. The description also scopes this tool to public articles and YouTube URLs, signaling what inputs are appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_changesWhat changed since a cursor — the polling primitiveARead-onlyInspect
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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| where | 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. | |
| cursor | No | Caller-managed progress: "latest" to start, then the next_cursor you stored. | |
| fields | No | Project event entries to these fields; ["id"] is the cheapest diff. id is always included. | |
| consumer_id | No | smry-managed progress: poll this consumer's saved predicate. Omit cursor and where. | |
| attention_limit | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| object | Yes | |
| has_more | Yes | |
| attention | Yes | Source 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 the complete list. |
| checkpoint | Yes | |
| next_cursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/not-destructive already given by annotations, the description still adds critical non-obvious behavior: the first cursor:"latest" call establishes the checkpoint and returns no events, managed batches repeat until acknowledged, and every response includes a capped source-health attention block. These are behavioral traits the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense but front-loaded, with usage modes stated before examples. The opening metaphor and terms like "smry" and "managed batches" assume prior context, mildly hurting first-read clarity. Nothing is superfluous, so structure is good without being flawless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still flags the attention block. It covers both polling modes and the acknowledge-until-done loop, leaving mostly the nested where/classification semantics to the schema. Complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), so the baseline is 3. The description exceeds it by clarifying the cursor-vs-consumer_id dichotomy, noting that a consumer's where predicate is retained server-side, and showing two concrete call examples. It adds real semantic value beyond the schema, though some nested where/field semantics remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation — returning feed changes since a checkpoint — and explicitly distinguishes itself from query_feeds ("read what is already there rather than what changes next"). The opening metaphor "One stream, two checkpoint owners" is somewhat cryptic, but the body quickly grounds it in concrete modes. Siblings are addressed, so it earns above a 4-level baseline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes two caller types: stateful callers pass cursor:"latest" and store next_cursor themselves, while stateless scheduled agents pass consumer_id. It states the exclusivity rule ("Pass exactly one") and names query_feeds as the alternative for reading existing content rather than changes. This is close to exhaustive when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_assetFetch an original library fileARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID that identifies the resource; pass it back exactly as smry returned it. | |
| include_data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| asset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive safety profile, but the description adds real behavioral context: the result is an authenticated resource link, there is an 8 MiB inline ceiling, and oversized originals degrade gracefully to a streaming byte-range endpoint rather than failing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler, front-loading the return value and then the two size/mode branches. Every sentence carries distinct, actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain the return payload, and it still adds the auth and size-limit context an agent needs. It does not clarify how the asset relates to sibling getters or what authentication the link carries, a minor gap for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (id is documented, include_data is not), but the description compensates by explaining exactly what include_data does and its size limit. The id parameter's UUID semantics are left to the schema, which already covers them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return an authenticated MCP resource link for an item's original file'), which is clear about what comes back. It does not explicitly differentiate itself from near siblings such as get_library_object or get_article, so an agent must infer the distinction from 'original file'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives conditional guidance for include_data (use for inline images/audio, or embedding files up to 8 MiB) and notes that larger originals go through a streaming byte-range endpoint. It never contrasts the tool with the sibling library-object or article getters an agent might otherwise pick, so tool-choice guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_changesSync library changesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum changes to return in this page, from 1 to 250. Defaults to 100. | |
| cursor | No | Pass a previous response's nextCursor verbatim, or latest to start at the current head; never construct one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| changes | Yes | |
| hasMore | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that the stream is append-only and includes deletions, which is useful behavior beyond the annotations, but it doesn't describe pagination behavior beyond the sync sequence or rate/retention constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the operation and scope, then the precise race-free sync procedure. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety, a complete schema, and an output schema handling return values, the description provides exactly the missing context: the append-only/deletion nature and the first-sync cursor procedure. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters with format constraints. The description adds the sync intent for cursor=latest but no syntax or format details beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb and resource (read the append-only library change stream) and adds the scope detail 'including deletions'. Distinguishes from sibling get_feed_changes (feed scope) and list_library (full listing) by showing it is an incremental change stream.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a precise when/how sequence for a race-free first sync: call once with cursor=latest, list the library, then continue from nextCursor. That is actionable context, though it doesn't name alternative sync tools or state when not to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_objectRead a saved item, note, or highlightARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| content_max_characters | No | Maximum characters of object text to return, from 500 to 12000. Defaults to 12000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ref | Yes | |
| type | Yes | |
| object | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description need not restate safety. It adds useful behavior context – bounded item text and note/highlight bodies, plus asset metadata carrying an MCP resource URI for original bytes – but does not discuss truncation semantics, pagination, or errors, and has an output schema available. A 3 is appropriate because it adds moderate context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The Boolean output in the provided reasoning cannot affect the score. The key context – that this reads a single object from a known list – is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool, the definition covers the high-level purpose, bounded return content, and asset metadata URI. An output schema exists, so return values need not be explained. It leaves a minor gap around obtaining ref, but is otherwise complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers content_max_characters with a description, giving 50% coverage overall because ref has no schema description. The description does not explain what ref is or how to obtain it, so it fails to compensate for the undocumented ref. Baseline 3 is appropriate when about half the parameters are documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states a specific verb and resource: read one library object returned by list_library_objects. Distinguishes fetching a single object from listing, searching, or bulk operations. Does not explicitly contrast with siblings like get_library_item, search_saved_item, or get_library_asset, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by saying the object was returned by list_library_objects, which suggests a follow-up lookup flow. However, it provides no explicit when-to-use vs alternatives, exclusions, or prerequisites, and there is no route to the many sibling tools that also retrieve library content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_articleRead a library itemARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID that identifies the resource; pass it back exactly as smry returned it. | |
| cursor | No | ||
| max_tokens | No | ||
| include_content | No | Include the item's stored article text. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| item | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint=false), and the description adds genuinely non-obvious behavior: stored text is token-budgeted and paginated via a paragraph cursor specifically so long documents don't flood agent context. That is useful operational context beyond the annotations, though it doesn't mention default token limits or how the cursor terminates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste; the core action is front-loaded and the pagination/token behavior follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the safety profile is covered by annotations. The description supplies the one piece an agent could not infer – the token-budgeted, cursor-based retrieval model – making it largely complete, with only minor gaps around max_tokens defaults and cursor termination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% – id and include_content are documented in-schema, while cursor and max_tokens are not. The description compensates by explaining the purpose of both (paragraph cursor for long documents, token budget for context control), giving semantics for the undocumented parameters, though it stops short of describing cursor step size or the max_tokens default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Read") and resource ("one library item by id"), so an agent knows exactly what it does. However, it does not distinguish itself from near-neighbors like get_article, get_library_item/get_library_object, or search_saved_item, leaving sibling disambiguation to the id semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no prerequisites, and no alternatives such as search_saved_item for lookup-by-query versus this tool's lookup-by-id. Usage context is only weakly implied by "by id."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_librarySearch library content and reading historyARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Return only items carrying this tag, matching without regard to case or surrounding spaces. | |
| view | No | Set history for reading history, the only way to read it; defaults to all saved items. | |
| limit | No | Maximum items to return, from 1 to 100. Defaults to 50, and is capped at 20 with includeContent. | |
| query | No | Full-text search over saved titles and text; omit to list without searching. | |
| cursor | No | Opaque page token: pass the previous response's nextCursor verbatim and never construct one. | |
| format | No | Return only items stored in this format, such as html, pdf, or epub. | |
| status | No | Return only items in this triage status: inbox, later, or archive. | |
| starred | No | Set true for starred items only, or false for unstarred items only. | |
| external_id | No | Return only the item saved under this external id from your own system. | |
| saved_after | No | Items saved after this time: "7d", "36h", "now", or an ISO date. Use for "saved this week". | |
| content_kind | No | Return only items of this content kind, such as article, pdf, or video. | |
| updated_after | 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. | |
| capture_method | No | Return only items captured this way, such as reader, extension, upload, or api. | |
| include_counts | No | ||
| include_content | No | Include each item's stored article text. Defaults to false. | |
| include_metadata | No | Include the free-form metadata object saved through the API. Everything else is always returned. | |
| content_max_characters | No | Maximum characters of text per item when includeContent is set, from 500 to 12000. Defaults to 4000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| counts | No | |
| nextCursor | Yes | |
| approximate | No | |
| matchedTerms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false), but the description adds real behavioral context: matching parity with app search/REST, ordering by most recent status change (last-read in history), pagination via nextCursor, and the meaning of returned IDs and URLs for citation. The stray mention of 'approximate=true' references a mode with no corresponding parameter, which slightly muddies otherwise solid disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, and each sentence carries operational value (examples, AND logic, ordering, pagination, ID/citation guidance). It is dense and runs long, but there is little pure filler, so it stays just shy of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter, zero-required search/list tool with annotations and an output schema, the description covers ordering, pagination, filter composition, and ID/citation semantics well, so it is close to complete. It could say more about when to prefer this tool over the more targeted library/feed/search siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 94%, so the baseline is 3, but the description adds genuinely new semantics: that optional filters combine with AND and that unspecified filters should be omitted. The example payloads also map natural-language intents onto status, limit, and saved_after, adding meaning beyond the schema's per-field text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('search') and enumerates the resource scope precisely (articles, websites, books, emails, PDFs, social posts, videos, podcast episodes, documents), so the agent knows this is the broad library search. It does not, however, name or distinguish itself from near siblings such as list_library_objects or search_saved_item, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers concrete when-to-use guidance: 'For a normal text search, pass only query and limit', worked examples ('Triage my inbox' → status/limit; 'saved this week' → saved_after), and a clear rule to omit unspecified filters and set view=history for reading history. It lacks explicit reference to alternative sibling tools, so it is strong context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_library_objectsSearch every saved library objectARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum objects to return in this page, from 1 to 100. Defaults to 50. | |
| query | No | Full-text search across saved items, notes, and highlights; omit to list the whole corpus. | |
| types | No | ||
| cursor | No | Opaque page token: pass the previous response's nextCursor verbatim and never construct one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| objects | Yes | |
| partial | Yes | |
| nextCursor | Yes | |
| approximate | No | |
| matchedTerms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint=false. Description adds valuable context: same Postgres matching as the app and REST API, approximate=true for spelling recovery, and stable refs for downstream retrieval. Goes beyond annotation-level safety info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action, followed by behavioral context and sibling routing. No filler, though slightly packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be described. Covers corpus scope, matching semantics, cursor stability, and sibling routing. The types enum values remain unexplained, a minor gap for a 4-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and cursor/limit/query are well-documented in the schema. The types parameter lacks a schema-level description and the description does not explain the item/note/highlight values. Baseline 3 given the schema carries most of the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search/paginate) and resource (corpus of saved items, notes, highlights). The sibling routing sentence distinguishes it from list_library, though several other siblings (search_saved_item, get_library_object) are not addressed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative list_library and the condition that selects it (lifecycle filters/reading history), and references get_library_object as the follow-up for returned refs. No explicit when-not guidance beyond list_library, but the routing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_collectionsmanage collections (list/create/update/delete)ADestructiveInspect
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}
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No | ||
| action | 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 | |
| source_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false; the description adds concrete behavioral detail beyond that: update is a complete membership replacement and delete moves inputs to Unsorted. It also clarifies that list returns canonical filter state and revision. Missing auth, rate-limit, or idempotency details are not critical given the output schema and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses a tight action-keyed structure with a one-line semantic statement and one JSON example per action. Every sentence contributes a distinct constraint or behavioral fact, and there is no redundant filler or restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and destructive annotations already supplied, the description covers the essential context: action semantics, required fields, side effects, and production UI parity. The only notable omission is an explicit definition of source_ids, so an agent must infer its role from the membership replacement statement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only describes the action parameter, so the description carries most of the semantic load. It adds conditional required fields (name for create, id for update/delete) and practical examples for each action. The source_ids parameter is only implied through 'Membership is a complete replacement' rather than explicitly documented, which is a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Each action clause names a specific operation on a concrete resource: list returns owner-scoped Collections with canonical filter state and revision, create makes the same named Collection used by the /feeds UI, update replaces membership, delete removes a custom Collection and moves inputs to Unsorted. This is far more definitive than the title and clearly separates it from feed/library sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear per-action guidance through Required fields and examples tied to the production /feeds UI, which implies when to use this tool and what each action is for. It does not explicitly name alternatives or state when not to use it, but the collection-management context is unmistakable among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_feed_consumersmanage feed consumers (create/list/ack/delete)ADestructiveInspect
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":""} 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}
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No | ||
| where | 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. | |
| action | 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 | |
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only convey read-only/destructive hints, so the description carries the behavioral burden. It adds meaningful details: new consumers start at the current high-water mark, crashes before ack cause safe redelivery, stale/foreign/invented cursors are rejected, and delete does not affect followed sources, entries, or read state. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but the four-action structure justifies it: each section follows a consistent pattern of purpose, key semantics, required fields, and an example. There is no filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's four distinct operations, the description covers the essential behavioral details: high-water mark behavior, race avoidance, redelivery safety, idempotency, error conditions, and required parameters per action. An output schema exists, so return-value details are not required. The only minor blemish is the internal use of 'getFeedChanges' instead of the sibling tool name 'get_feed_changes', but the meaning is unambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, but the description compensates well by stating the required fields for each action and providing concrete JSON examples. It gives extra meaning to cursor as the next_cursor from get_feed_changes and to name as case-insensitive with retry semantics, while the schema already documents the nested where filter fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is organized by the four actions—create, list, ack, delete—each with a specific verb and target resource. It cleanly distinguishes ack as acknowledging a get_feed_changes cursor and delete as removing only the saved predicate and checkpoint, so an agent can differentiate actions without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit workflow guidance: create one consumer per independent processing loop rather than per source, create before querying historical windows to avoid a race, and ack only after processing every event from get_feed_changes. It also explains idempotent retry behavior and the 409 conflict condition, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_feed_filtermanage feed filter (preview/apply)ADestructiveInspect
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":"","expectedRevision":0}
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | "preview": Preview a Collection filter without changing the feed · "apply": Apply a previously previewed Collection filter | |
| filter | No | ||
| collection | No | ||
| previewToken | No | ||
| expectedRevision | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive (destructiveHint: true) and non-readOnly. The description adds useful behavioral context beyond that: apply is atomic, it only succeeds if the Collection revision matches, and passing filter:null clears the filter. This gives the agent a realistic model of side effects without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into preview and apply sections, front-loading the key semantics and including examples without excessive prose. It is longer than average, but the dual-action nature and the need to convey a workflow justify the length. A few phrases like 'Save with applyFeedFilter' could be clearer, but overall it is well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential invocation workflow for both actions, including required fields and the relationship between preview and apply. Since an output schema exists, return values need not be described in detail. It is complete enough for correct tool selection and invocation, though it does not discuss edge cases like revision mismatch handling beyond saying apply only succeeds when the revision matches.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is only 20%, but the description compensates strongly by listing required fields for each action and providing concrete JSON examples. It explains the meaning and relationship of collection, filter, previewToken, and expectedRevision, and clarifies the special filter:null behavior, which is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages a Collection filter through two distinct actions, preview and apply, with specific verbs and resources. It distinguishes the preview mode (classify a sample without changing the feed) from the apply mode (atomically apply a previously previewed filter), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear two-step workflow: first preview to get a token, then apply with that token and expected revision. It also states when apply should be used (when the Collection revision still matches) and that filter:null clears the filter. It does not explicitly name alternative tools or exclusion conditions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mutate_feedsSelector-based writes with dry-run previewADestructiveInspect
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":""}
| Name | Required | Description | Default |
|---|---|---|---|
| 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. | |
| set | No | ||
| where | 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. | |
| dry_run | 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 | No | From a dry run. Single-use and idempotent: resending after a network failure replays the recorded outcome. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It explicitly states dry_run:true changes nothing and returns would_affect, sample, and commit_token, while dry_run:false applies immediately. It also discloses that commit_token is single-use and idempotent, consistent with the destructiveHint annotation and with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and efficient, with examples and clear workflow guidance. The phrase 'Check partial and each outcome after committing' is vague and slightly disrupts an otherwise crisp structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description appropriately focuses on workflow and selector constraints, covering dry-run behavior, commit semantics, and per-operation requirements. It could be more explicit about partial or per-item failure reporting, but enough is present for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are covered in schema descriptions, including op-specific constraints such as sources.move needing set.collection and collections.rename/delete needing exactly one where.collection. The where descriptions clarify AND semantics and field-specific caveats like discovered_after versus published_after.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool previews and commits selector-based writes to sources, entries, or collections, and the op field enumerates concrete actions such as sources.move and collections.delete. It also distinguishes itself from manage_collections by directing direct collection CRUD elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the preview/commit_token workflow, notes that dry_run:false applies immediately, and advises preferring preview then commit_token for agent workflows. It also points to manage_collections for direct CRUD, though it could mention when to use a read tool first to discover selectors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_web_pagesRead public web pagesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | Yes | |
| failures | Yes | |
| budgetReached | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it returns clean Markdown evidence and supports up to four pages. It is consistent with the readOnlyHint and destructiveHint annotations; no contradiction. Does not mention rate limits or errors, but the read-only nature is already annotated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with the primary action and quickly follow with usage guidance. No unnecessary fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a general sense of the tool and mentions the 'context' parameter, but it does not cover the full parameter schema (url, live, start) or the expected output structure. It is adequate for a high-level understanding but incomplete for precise invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only hints at the 'context' parameter. It does not explain the structure of the 'pages' array or the meaning of 'url', 'live', and 'start'. Given the multi-field nested parameter, the description is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Open') and resource ('public pages'), and clarifies the output (clean Markdown evidence). Clearly distinguishes itself from search-oriented siblings by focusing on fetching page contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on how to use the 'context' parameter ('Use a focused context to extract only what is relevant, or omit it to read the page directly'). It implies usage for reading web pages, though it does not explicitly contrast with alternatives like search_web.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_feedsQuery followed feeds: entries, source health, or aggregatesARead-onlyInspect
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"}}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 20, maximum 100; page further with next_cursor. | |
| since | 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. | |
| where | 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. | |
| cursor | No | Only a next_cursor from a previous response; omit on the first call. | |
| fields | 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. | |
| having | No | Filter groups/sources on derived values. | |
| 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 delivered in 7) · "aggregate" = counts. Default "entries". | |
| compare | No | Trend detection for aggregates: counts inside the window vs the prior baseline, e.g. {"window":"7d","baseline":"28d"}. | |
| group_by | No | ||
| order_by | No | Default -discovered_at: newest arrivals first, so backfilled items never hide. | |
| per_source_limit | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| object | Yes | |
| select | Yes | |
| classification_coverage | No | Coverage 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 policy. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses subtle behaviors: classification_coverage meaning, omitted.by_per_source_limit, quiet publishers with working feeds, and how select:'sources' separates health from activity. This is rich, non-obvious context that exceeds annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence conveys meaningful guidance, with examples at the end. It is front-loaded with the primary use case. Though long, it earns its length for a tool with three modes and many optional parameters; slightly better formatting would be a minor improvement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, nested objects, and three select modes, the description covers all major behaviors, provides four examples, and addresses edge cases (classification coverage, fair sampling, quiet publishers). With an output schema present, the description does not need to explain return types; it is complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 92%, so the schema already explains most parameters. The description adds value through examples and clarifying combinations (e.g., 'add where.collection... when requested'), and explains the semantic intent of select modes and per_source_limit, supplementing the schema without redundant repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads followed feeds and explicitly distinguishes three select modes (entries, sources, aggregate) with concrete examples. It uses specific verbs and resources, making it unambiguous and distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive usage guidance for the tool's own options: 'What's new?' shorthand, when to add where clauses, per_source_limit behavior, and select-specific notes. It does not explicitly name alternatives or state when not to use this tool, but the context makes its primary role clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_library_itemRemove a library itemADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID that identifies the resource; pass it back exactly as smry returned it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| ok | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds critical detail beyond them: web sources are unaffected, uploaded-file originals, extracted text, and synced local copies are permanently deleted, and highlights/notes are kept. This tells the agent exactly what is destroyed and preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with zero waste. The core action is front-loaded, followed immediately by the important scoping and deletion details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter tool with annotations and an output schema, the description is complete. It covers the action, scope, and deletion semantics without needing to explain return values or safety hints already in structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single id parameter is already fully documented in the schema. The description adds no additional syntax or format meaning beyond what the schema provides, which is the baseline 3 for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: remove one item from this account's library. It distinguishes itself from bulk and update siblings by emphasizing a single-item removal and clarifies that web sources are unaffected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for removing a single library item, but never states when to use it instead of update_library_item or bulk_update_library_items. No explicit alternatives or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_articleScrape and save an articleAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| tags | No | ||
| status | No | ||
| starred | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| item | Yes | |
| extraction | Yes | |
| alreadySaved | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint, openWorldHint, destructiveHint and readOnlyHint, so the safety profile is covered structurally. The description still earns credit by disclosing failure semantics beyond the annotations: it returns alreadySaved=true on duplicates and explicitly refuses to report success on hard paywalls, which is real behavioral context an agent could not get from the hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero padding, and the core action is front-loaded ahead of the duplicate/paywall caveats. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the annotations carry the safety profile. The remaining gap is parameter meaning (0% schema coverage, no description support), which for a four-parameter mutation tool leaves the definition only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, so the schema documents only types, not meaning. The description mentions only the URL implicitly ('extract a public URL') and says nothing about tags, status, or starred, leaving half the parameters semantically undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb chain (extract a public URL, add it to the account's library) and a clear resource, so the agent knows this scrapes and persists a URL rather than reading or searching. It does not, however, differentiate itself from the ambiguous sibling save_content, so the boundary between the two save paths is left unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Scoping is implied by 'public URL' (not private/authenticated pages) and by the idempotent duplicate behavior, which tells the agent re-saving is safe. But there is no explicit when-to-use versus siblings like save_content or update_library_item, and no stated prerequisites, so usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_contentSave text or a documentBInspect
Save supplied source text without fetching a public URL. Use external_id for retry-safe creates; content_kind can correct automatic classification.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| tags | No | ||
| title | Yes | ||
| author | No | ||
| format | No | ||
| status | No | ||
| content | Yes | ||
| starred | No | ||
| metadata | No | ||
| file_name | No | ||
| mime_type | No | ||
| external_id | No | ||
| content_kind | No | ||
| published_at | No | ||
| capture_method | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| item | Yes | |
| alreadySaved | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds real value beyond them: it explains that external_id yields retry-safe creates, a nuance that refines the idempotentHint=false annotation without contradicting it, and clarifies the no-fetch behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded with the most decision-relevant information (what it saves, then the idempotency and classification hints). No filler or restated name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation tool with a nested object and no schema descriptions, the description is too thin. The presence of an output schema excuses it from explaining return values, and annotations cover safety, but the bulk of the input surface remains undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 15 parameters, including a nested free-form metadata object, so the schema alone gives an agent almost nothing. The description documents only two parameters (external_id, content_kind) and leaves title, content, format, status, capture_method, etc. unexplained, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Save supplied source text') and scopes it by excluding URL fetching, which effectively distinguishes it from the URL-based save_article sibling. It stops short of a score of 5 only because the alternative is implied rather than named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without fetching a public URL' implies when to pick this over a URL-fetching save, but the sibling is never named and there are no explicit when-not conditions. The external_id advice is parameter mechanics rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_articleFind the passages of an article that answer a questionARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| query | Yes | ||
| cursor | No | ||
| max_tokens | No | ||
| max_passages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| title | Yes | |
| author | Yes | |
| language | Yes | |
| passages | Yes | |
| cache_hit | Yes | |
| publisher | Yes | |
| reader_url | Yes | |
| source_url | Yes | |
| next_cursor | Yes | |
| published_at | Yes | |
| responded_at | Yes | |
| total_blocks | Yes | |
| total_tokens | Yes | |
| matched_blocks | Yes | |
| content_quality | Yes | |
| tokens_returned | Yes | |
| extraction_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description's 'Read' language aligns with the readOnlyHint and destructiveHint:false annotations, confirming a non-destructive operation. It adds useful behavioral context about returning passages rather than full content, though the annotations already cover the key safety aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the purpose, and immediately follows with actionable selection guidance. There is no redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and usage context well, but with no parameter descriptions and zero schema coverage, the optional pagination/limit parameters remain under-specified. The output schema is present but not detailed in the description, so the tool is not fully self-contained for an agent needing parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the optional parameters cursor, max_tokens, or max_passages beyond their names. While url and query are implicitly clear from the description, the optional parameters' semantics are left entirely to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a public article or YouTube URL and returns only relevant passages, with specific output details about anchoring and section labels. It also explicitly differentiates itself from get_article by focusing on targeted queries rather than full retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct usage guidance: 'Use this instead of get_article whenever you have a specific question about a link' and explains the benefit of lower token usage. This makes the selection criteria between search_article and get_article explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_feedsFind public feedsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Discover source type. "feeds" is a compatibility alias for "websites". Use "url" when query is a site or feed URL. Default: all. | |
| sort | No | Rank by best match or popularity. Default: best. | |
| limit | No | Maximum results. Defaults match the Discover page. | |
| query | No | Topic, publication, community, channel, podcast, or site URL. Omit to browse suggested sources. | |
| language | No | Source language. Default: English (en). |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| sort | Yes | |
| query | Yes | |
| total | Yes | |
| omitted | Yes | |
| partial | Yes | |
| results | Yes | |
| warning | No | |
| language | Yes | |
| returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond annotations: it uses the same ranking as the Discover page, supports browsing without a query, and clarifies it only discovers sources (does not follow). It does not contradict annotations and adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose. Each sentence adds value: main purpose, capabilities, a usage tip, and an explicit alternative. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only discovery tool with an output schema present, the description is fairly complete. It covers main use cases, scope, and an alternative tool. It does not explain return format or pagination, but the output schema covers those. It could mention that only public feeds are returned (title says 'Find public feeds'), but the description's 'discovery catalog' implies that. Minor gaps, so 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all 5 parameters, so the schema already documents each parameter. The description adds little beyond the schema—it mentions 'Use sort=popular' which is already in the sort description, and the 'feeds' alias is already documented. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool discovers public sources using the same catalog as the Discover page, and enumerates specific capabilities: browsing suggested sources, searching by topic across websites, RSS, podcasts, Reddit, YouTube, creating a Google News source, and discovering feeds by URL. It explicitly differentiates from follow_feeds by stating it only discovers, not follows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'This only discovers sources; use follow_feeds to follow results...' which is an explicit when-not and alternative. It also gives usage context like 'Browse suggested sources with no query' and 'search websites... by topic'. However, it does not mention other relevant siblings like search_web or query_feeds, so it's not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_itemSearch inside a library itemARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID that identifies the resource; pass it back exactly as smry returned it. | |
| query | Yes | ||
| cursor | No | ||
| max_tokens | No | ||
| max_passages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| query | Yes | |
| title | Yes | |
| passages | Yes | |
| next_cursor | Yes | |
| content_kind | Yes | |
| total_blocks | Yes | |
| total_tokens | Yes | |
| matched_blocks | Yes | |
| tokens_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that only relevant passages (not whole documents) are returned, which is useful, but says nothing about pagination via cursor or the token/passage caps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, and the core behavior is front-loaded before the usage hint. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation isn't needed, and the read-only nature is covered by annotations. However, with five parameters and 20% schema coverage, the missing guidance on query semantics, cursor pagination, and token/passage limits leaves real gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% (just the id field). The description explains nothing about query, cursor, max_tokens, or max_passages, so an agent must infer pagination and budget behavior from bare numeric constraints. With low coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: return stored passages relevant to a question about one library item. The scoping to a single item is clear. It doesn't explicitly differentiate from the sibling search_article, which is the nearest competing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing ('Use after list_library') and names the alternative behavior it replaces ('instead of reading a long book, PDF, email... from the beginning'). No exclusion criteria versus search_article or search_web are offered, but the when-to-use condition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_webSearch the public webARead-onlyInspect
Discover current public sources with up to four focused searches. Search snippets are discovery aids; open the strongest pages before citing substantive claims.
| Name | Required | Description | Default |
|---|---|---|---|
| queries | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | |
| searches | Yes | |
| budgetReached | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and non-destructive behavior. The description adds helpful context about the role of snippets vs. full pages. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. The key behavioral guidance is front-loaded and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a search tool with output schema present. It covers the search action, result-handling behavior, and limits. It could mention return format or result count, but that is not critical given the output schema is available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero coverage in the description. Only 'up to four' hints at the maxItems constraint on queries. Parameters like site, publishedAfter, publishedBefore, and max_results are not explained, leaving the agent to infer their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool discovers current public sources via web searches. The scope ('public web') is implicit but sufficient to distinguish from sibling tools like search_article or search_feeds, though it doesn't name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides practical guidance: snippets are discovery aids and strong pages should be opened before citing claims. Also communicates the limit of up to four focused searches. Does not explicitly contrast with sibling tools, but the guidance is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_feed_feedbackSet or undo explicit feedback on an entryBDestructiveInspect
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"}
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| entryId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes | |
| object | Yes | |
| entryId | Yes | |
| filterChanged | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnly=false, and the description goes beyond that by explaining that 'less_like_this' hides an included entry and that feedback is kept separate from the Collection filter. This adds useful behavioral context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, uses three short sentences, and includes a concrete example. It is well-structured and does not waste words, though the example could have been used more effectively to document all parameter values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, explaining return values is less necessary, but the tool lacks parameter descriptions and explicit side-effect disclosure beyond hiding an entry. The description gives some context but is not fully complete for a mutation tool with destructive hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description only gives a single example with value 'less_like_this'. It does not explain the meaning of entryId, the effect of 'more_like_this', or the semantics of null for undoing feedback, leaving significant gaps for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly indicate this tool sets or undoes explicit feedback on an entry, with 'less_like_this' hiding an included entry. It distinguishes the tool from feed filter management, though the exact behavior for 'more_like_this' and null is not fully spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by stating feedback remains separate agent context and never silently revises the Collection filter, which helps distinguish it from filter-related sibling tools. However, it does not explicitly state when to use this tool versus alternatives like manage_feed_filter or query_feeds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_library_itemOrganize a library itemAIdempotentInspect
Move, tag, mark read, update progress, or correct the classification of one library item.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID that identifies the resource; pass it back exactly as smry returned it. | |
| tags | No | ||
| status | No | ||
| starred | No | ||
| mark_read | No | ||
| content_kind | No | ||
| read_progress | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| item | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false, idempotentHint=true, openWorldHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds value by enumerating the mutable aspects, but it omits noteworthy behavior such as the minProperties=2 requirement and whether fields left unmentioned are preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that lists the operation set without filler. It is efficient, though the lack of any secondary sentence leaves the usage and parameter gaps unaddressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven parameters, one required id, a low-coverage schema, and an existing output schema (so return values need not be explained), the description covers the operation set adequately. It falls short on the single-vs-bulk routing cue and on the unmentioned starred parameter, but is otherwise reasonable for an annotated, idempotent mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14% (only 'id' is documented), so the description must carry the burden, and it partially does by mapping verbs to the status, tags, mark_read, read_progress, and content_kind parameters. However, it never mentions 'starred' and gives no value-level semantics, so the compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('one library item') and enumerates the mutation verbs (move, tag, mark read, update progress, correct classification), which map onto the schema's status/tags/mark_read/read_progress/content_kind fields. The phrasing 'one library item' implicitly distinguishes it from the sibling bulk_update_library_items, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the singular scope ('one library item'), which hints this is for a single-item edit versus a bulk operation, but there is no explicit when-to-use, when-not, or alternative named. An agent has to infer routing from the sibling list rather than from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
- Changed
bulk_update_library_items5 fields changed- added
Input schema / properties / ids / items / descriptionAdded value: +"UUID that identifies the resource; pass it back exactly as smry returned it." - added
Output schema / properties / items / items / allOfAdded value: +[ + { + "additionalProperties": {}, + "properties": { + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "description": "UUID that identifies the resource; pass it back exactly as smry returned it.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object", + "x-smry-component": "LibraryAsset" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "starred": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object", + "x-smry-component": "LibraryItem" + }, + { + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + } +] - removed
Output schema / properties / items / items / propertiesRemoved value: -{ - "article": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "articleStatus": { - "type": "string" - }, - "asset": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "checksum": { - "type": "string" - }, - "downloadUrl": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "itemId": { - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "resourceUri": { - "type": "string" - }, - "size": { - "type": "number" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "itemId", - "fileName", - "mimeType", - "size", - "checksum", - "updatedAt", - "resourceUri", - "downloadUrl" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "captureMethod": { - "anyOf": [ - { - "const": "reader", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "upload", - "type": "string" - }, - { - "const": "rss", - "type": "string" - }, - { - "const": "email_inbox", - "type": "string" - }, - { - "const": "api", - "type": "string" - }, - { - "const": "import", - "type": "string" - } - ] - }, - "classification": { - "additionalProperties": {}, - "properties": { - "confidence": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "method": { - "anyOf": [ - { - "const": "user", - "type": "string" - }, - { - "const": "source_adapter", - "type": "string" - }, - { - "const": "mime", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "url", - "type": "string" - }, - { - "const": "metadata", - "type": "string" - }, - { - "const": "legacy", - "type": "string" - }, - { - "const": "fallback", - "type": "string" - } - ] - }, - "updatedAt": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "method", - "confidence", - "version", - "updatedAt" - ], - "type": "object" - }, - "contentKind": { - "anyOf": [ - { - "const": "article", - "type": "string" - }, - { - "const": "website", - "type": "string" - }, - { - "const": "book", - "type": "string" - }, - { - "const": "email", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "social_post", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "podcast_episode", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "domain": { - "type": "string" - }, - "externalId": { - "type": [ - "string", - "null" - ] - }, - "fileName": { - "type": [ - "string", - "null" - ] - }, - "format": { - "anyOf": [ - { - "const": "html", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "epub", - "type": "string" - }, - { - "const": "markdown", - "type": "string" - }, - { - "const": "plain_text", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "spreadsheet", - "type": "string" - }, - { - "const": "presentation", - "type": "string" - }, - { - "const": "audio", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "lastReadAt": { - "type": [ - "string", - "null" - ] - }, - "metadata": { - "patternProperties": { - "^(.*)$": {} - }, - "type": "object" - }, - "mimeType": { - "type": [ - "string", - "null" - ] - }, - "originalUrl": { - "type": [ - "string", - "null" - ] - }, - "readProgress": { - "type": [ - "number", - "null" - ] - }, - "savedAt": { - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / items / items / requiredRemoved value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "starred", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -] - removed
Output schema / properties / items / items / typeRemoved value: -"object"
- Changed
get_feed_changes5 fields changed- added
Output schema / properties / events / items / additionalPropertiesAdded value: +{} - added
Output schema / properties / events / items / descriptionAdded value: +"A single change event." - removed
Output schema / properties / events / items / patternPropertiesRemoved value: -{ - "^(.*)$": {} -} - added
Output schema / properties / events / items / propertiesAdded value: +{ + "entry": { + "description": "The entry, projected to the requested `fields`. `id` is always present. entry.classified events also carry the filter's decision, assessment, reason, and filter_revision.", + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "const": "entry.discovered", + "type": "string" + }, + { + "const": "entry.classified", + "type": "string" + } + ], + "description": "entry.discovered: smry saw this entry for the first time. entry.classified: a Collection filter reached a decision about an entry you already have." + } +} - added
Output schema / properties / events / items / requiredAdded value: +[ + "type", + "entry" +]
- Changed
get_library_asset1 field changed- added
Input schema / properties / id / descriptionAdded value: +"UUID that identifies the resource; pass it back exactly as smry returned it."
- Changed
get_library_changes6 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pass a previous response's nextCursor verbatim, or latest to start at the current head; never construct one." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum changes to return in this page, from 1 to 250. Defaults to 100." - added
Output schema / properties / changes / items / properties / item / allOfAdded value: +[ + { + "additionalProperties": {}, + "properties": { + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "description": "UUID that identifies the resource; pass it back exactly as smry returned it.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object", + "x-smry-component": "LibraryAsset" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "starred": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object", + "x-smry-component": "LibraryItem" + }, + { + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + } +] - removed
Output schema / properties / changes / items / properties / item / propertiesRemoved value: -{ - "article": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "articleStatus": { - "type": "string" - }, - "asset": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "checksum": { - "type": "string" - }, - "downloadUrl": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "itemId": { - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "resourceUri": { - "type": "string" - }, - "size": { - "type": "number" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "itemId", - "fileName", - "mimeType", - "size", - "checksum", - "updatedAt", - "resourceUri", - "downloadUrl" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "captureMethod": { - "anyOf": [ - { - "const": "reader", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "upload", - "type": "string" - }, - { - "const": "rss", - "type": "string" - }, - { - "const": "email_inbox", - "type": "string" - }, - { - "const": "api", - "type": "string" - }, - { - "const": "import", - "type": "string" - } - ] - }, - "classification": { - "additionalProperties": {}, - "properties": { - "confidence": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "method": { - "anyOf": [ - { - "const": "user", - "type": "string" - }, - { - "const": "source_adapter", - "type": "string" - }, - { - "const": "mime", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "url", - "type": "string" - }, - { - "const": "metadata", - "type": "string" - }, - { - "const": "legacy", - "type": "string" - }, - { - "const": "fallback", - "type": "string" - } - ] - }, - "updatedAt": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "method", - "confidence", - "version", - "updatedAt" - ], - "type": "object" - }, - "contentKind": { - "anyOf": [ - { - "const": "article", - "type": "string" - }, - { - "const": "website", - "type": "string" - }, - { - "const": "book", - "type": "string" - }, - { - "const": "email", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "social_post", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "podcast_episode", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "domain": { - "type": "string" - }, - "externalId": { - "type": [ - "string", - "null" - ] - }, - "fileName": { - "type": [ - "string", - "null" - ] - }, - "format": { - "anyOf": [ - { - "const": "html", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "epub", - "type": "string" - }, - { - "const": "markdown", - "type": "string" - }, - { - "const": "plain_text", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "spreadsheet", - "type": "string" - }, - { - "const": "presentation", - "type": "string" - }, - { - "const": "audio", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "lastReadAt": { - "type": [ - "string", - "null" - ] - }, - "metadata": { - "patternProperties": { - "^(.*)$": {} - }, - "type": "object" - }, - "mimeType": { - "type": [ - "string", - "null" - ] - }, - "originalUrl": { - "type": [ - "string", - "null" - ] - }, - "readProgress": { - "type": [ - "number", - "null" - ] - }, - "savedAt": { - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / changes / items / properties / item / requiredRemoved value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "starred", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -] - removed
Output schema / properties / changes / items / properties / item / typeRemoved value: -"object"
- Changed
get_library_object1 field changed- added
Input schema / properties / content_max_characters / descriptionAdded value: +"Maximum characters of object text to return, from 500 to 12000. Defaults to 12000."
- Changed
get_saved_article6 fields changed- added
Input schema / properties / id / descriptionAdded value: +"UUID that identifies the resource; pass it back exactly as smry returned it." - added
Input schema / properties / include_content / descriptionAdded value: +"Include the item's stored article text. Defaults to true." - added
Output schema / properties / item / allOfAdded value: +[ + { + "additionalProperties": {}, + "properties": { + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "description": "UUID that identifies the resource; pass it back exactly as smry returned it.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object", + "x-smry-component": "LibraryAsset" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "starred": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object", + "x-smry-component": "LibraryItem" + }, + { + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + } +] - removed
Output schema / properties / item / propertiesRemoved value: -{ - "article": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "articleStatus": { - "type": "string" - }, - "asset": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "checksum": { - "type": "string" - }, - "downloadUrl": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "itemId": { - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "resourceUri": { - "type": "string" - }, - "size": { - "type": "number" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "itemId", - "fileName", - "mimeType", - "size", - "checksum", - "updatedAt", - "resourceUri", - "downloadUrl" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "captureMethod": { - "anyOf": [ - { - "const": "reader", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "upload", - "type": "string" - }, - { - "const": "rss", - "type": "string" - }, - { - "const": "email_inbox", - "type": "string" - }, - { - "const": "api", - "type": "string" - }, - { - "const": "import", - "type": "string" - } - ] - }, - "classification": { - "additionalProperties": {}, - "properties": { - "confidence": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "method": { - "anyOf": [ - { - "const": "user", - "type": "string" - }, - { - "const": "source_adapter", - "type": "string" - }, - { - "const": "mime", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "url", - "type": "string" - }, - { - "const": "metadata", - "type": "string" - }, - { - "const": "legacy", - "type": "string" - }, - { - "const": "fallback", - "type": "string" - } - ] - }, - "updatedAt": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "method", - "confidence", - "version", - "updatedAt" - ], - "type": "object" - }, - "contentKind": { - "anyOf": [ - { - "const": "article", - "type": "string" - }, - { - "const": "website", - "type": "string" - }, - { - "const": "book", - "type": "string" - }, - { - "const": "email", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "social_post", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "podcast_episode", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "domain": { - "type": "string" - }, - "externalId": { - "type": [ - "string", - "null" - ] - }, - "fileName": { - "type": [ - "string", - "null" - ] - }, - "format": { - "anyOf": [ - { - "const": "html", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "epub", - "type": "string" - }, - { - "const": "markdown", - "type": "string" - }, - { - "const": "plain_text", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "spreadsheet", - "type": "string" - }, - { - "const": "presentation", - "type": "string" - }, - { - "const": "audio", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "lastReadAt": { - "type": [ - "string", - "null" - ] - }, - "metadata": { - "patternProperties": { - "^(.*)$": {} - }, - "type": "object" - }, - "mimeType": { - "type": [ - "string", - "null" - ] - }, - "originalUrl": { - "type": [ - "string", - "null" - ] - }, - "readProgress": { - "type": [ - "number", - "null" - ] - }, - "savedAt": { - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / item / requiredRemoved value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "starred", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -] - removed
Output schema / properties / item / typeRemoved value: -"object"
- Changed
list_library17 fields changed- added
Input schema / properties / capture_method / descriptionAdded value: +"Return only items captured this way, such as reader, extension, upload, or api." - added
Input schema / properties / content_kind / descriptionAdded value: +"Return only items of this content kind, such as article, pdf, or video." - added
Input schema / properties / content_max_characters / descriptionAdded value: +"Maximum characters of text per item when includeContent is set, from 500 to 12000. Defaults to 4000." - added
Input schema / properties / cursor / descriptionAdded value: +"Opaque page token: pass the previous response's nextCursor verbatim and never construct one." - added
Input schema / properties / external_id / descriptionAdded value: +"Return only the item saved under this external id from your own system." - added
Input schema / properties / format / descriptionAdded value: +"Return only items stored in this format, such as html, pdf, or epub." - added
Input schema / properties / include_content / descriptionAdded value: +"Include each item's stored article text. Defaults to false." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum items to return, from 1 to 100. Defaults to 50, and is capped at 20 with includeContent." - added
Input schema / properties / query / descriptionAdded value: +"Full-text search over saved titles and text; omit to list without searching." - added
Input schema / properties / starred / descriptionAdded value: +"Set true for starred items only, or false for unstarred items only." - added
Input schema / properties / status / descriptionAdded value: +"Return only items in this triage status: inbox, later, or archive." - added
Input schema / properties / tag / descriptionAdded value: +"Return only items carrying this tag, matching without regard to case or surrounding spaces." - added
Input schema / properties / view / descriptionAdded value: +"Set history for reading history, the only way to read it; defaults to all saved items." - added
Output schema / properties / items / items / allOfAdded value: +[ + { + "additionalProperties": {}, + "properties": { + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "description": "UUID that identifies the resource; pass it back exactly as smry returned it.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object", + "x-smry-component": "LibraryAsset" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "starred": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object", + "x-smry-component": "LibraryItem" + }, + { + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + } +] - removed
Output schema / properties / items / items / propertiesRemoved value: -{ - "article": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "articleStatus": { - "type": "string" - }, - "asset": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "checksum": { - "type": "string" - }, - "downloadUrl": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "itemId": { - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "resourceUri": { - "type": "string" - }, - "size": { - "type": "number" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "itemId", - "fileName", - "mimeType", - "size", - "checksum", - "updatedAt", - "resourceUri", - "downloadUrl" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "captureMethod": { - "anyOf": [ - { - "const": "reader", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "upload", - "type": "string" - }, - { - "const": "rss", - "type": "string" - }, - { - "const": "email_inbox", - "type": "string" - }, - { - "const": "api", - "type": "string" - }, - { - "const": "import", - "type": "string" - } - ] - }, - "classification": { - "additionalProperties": {}, - "properties": { - "confidence": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "method": { - "anyOf": [ - { - "const": "user", - "type": "string" - }, - { - "const": "source_adapter", - "type": "string" - }, - { - "const": "mime", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "url", - "type": "string" - }, - { - "const": "metadata", - "type": "string" - }, - { - "const": "legacy", - "type": "string" - }, - { - "const": "fallback", - "type": "string" - } - ] - }, - "updatedAt": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "method", - "confidence", - "version", - "updatedAt" - ], - "type": "object" - }, - "contentKind": { - "anyOf": [ - { - "const": "article", - "type": "string" - }, - { - "const": "website", - "type": "string" - }, - { - "const": "book", - "type": "string" - }, - { - "const": "email", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "social_post", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "podcast_episode", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "domain": { - "type": "string" - }, - "externalId": { - "type": [ - "string", - "null" - ] - }, - "fileName": { - "type": [ - "string", - "null" - ] - }, - "format": { - "anyOf": [ - { - "const": "html", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "epub", - "type": "string" - }, - { - "const": "markdown", - "type": "string" - }, - { - "const": "plain_text", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "spreadsheet", - "type": "string" - }, - { - "const": "presentation", - "type": "string" - }, - { - "const": "audio", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "lastReadAt": { - "type": [ - "string", - "null" - ] - }, - "metadata": { - "patternProperties": { - "^(.*)$": {} - }, - "type": "object" - }, - "mimeType": { - "type": [ - "string", - "null" - ] - }, - "originalUrl": { - "type": [ - "string", - "null" - ] - }, - "readProgress": { - "type": [ - "number", - "null" - ] - }, - "savedAt": { - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / items / items / requiredRemoved value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "starred", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -] - removed
Output schema / properties / items / items / typeRemoved value: -"object"
- Changed
list_library_objects3 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Opaque page token: pass the previous response's nextCursor verbatim and never construct one." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum objects to return in this page, from 1 to 100. Defaults to 50." - added
Input schema / properties / query / descriptionAdded value: +"Full-text search across saved items, notes, and highlights; omit to list the whole corpus."
- Changed
remove_library_item1 field changed- added
Input schema / properties / id / descriptionAdded value: +"UUID that identifies the resource; pass it back exactly as smry returned it."
- Changed
save_article4 fields changed- added
Output schema / properties / item / allOfAdded value: +[ + { + "additionalProperties": {}, + "properties": { + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "description": "UUID that identifies the resource; pass it back exactly as smry returned it.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object", + "x-smry-component": "LibraryAsset" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "starred": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object", + "x-smry-component": "LibraryItem" + }, + { + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + } +] - removed
Output schema / properties / item / propertiesRemoved value: -{ - "article": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "articleStatus": { - "type": "string" - }, - "asset": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "checksum": { - "type": "string" - }, - "downloadUrl": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "itemId": { - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "resourceUri": { - "type": "string" - }, - "size": { - "type": "number" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "itemId", - "fileName", - "mimeType", - "size", - "checksum", - "updatedAt", - "resourceUri", - "downloadUrl" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "captureMethod": { - "anyOf": [ - { - "const": "reader", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "upload", - "type": "string" - }, - { - "const": "rss", - "type": "string" - }, - { - "const": "email_inbox", - "type": "string" - }, - { - "const": "api", - "type": "string" - }, - { - "const": "import", - "type": "string" - } - ] - }, - "classification": { - "additionalProperties": {}, - "properties": { - "confidence": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "method": { - "anyOf": [ - { - "const": "user", - "type": "string" - }, - { - "const": "source_adapter", - "type": "string" - }, - { - "const": "mime", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "url", - "type": "string" - }, - { - "const": "metadata", - "type": "string" - }, - { - "const": "legacy", - "type": "string" - }, - { - "const": "fallback", - "type": "string" - } - ] - }, - "updatedAt": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "method", - "confidence", - "version", - "updatedAt" - ], - "type": "object" - }, - "contentKind": { - "anyOf": [ - { - "const": "article", - "type": "string" - }, - { - "const": "website", - "type": "string" - }, - { - "const": "book", - "type": "string" - }, - { - "const": "email", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "social_post", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "podcast_episode", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "domain": { - "type": "string" - }, - "externalId": { - "type": [ - "string", - "null" - ] - }, - "fileName": { - "type": [ - "string", - "null" - ] - }, - "format": { - "anyOf": [ - { - "const": "html", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "epub", - "type": "string" - }, - { - "const": "markdown", - "type": "string" - }, - { - "const": "plain_text", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "spreadsheet", - "type": "string" - }, - { - "const": "presentation", - "type": "string" - }, - { - "const": "audio", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "lastReadAt": { - "type": [ - "string", - "null" - ] - }, - "metadata": { - "patternProperties": { - "^(.*)$": {} - }, - "type": "object" - }, - "mimeType": { - "type": [ - "string", - "null" - ] - }, - "originalUrl": { - "type": [ - "string", - "null" - ] - }, - "readProgress": { - "type": [ - "number", - "null" - ] - }, - "savedAt": { - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / item / requiredRemoved value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "starred", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -] - removed
Output schema / properties / item / typeRemoved value: -"object"
- Changed
save_content4 fields changed- added
Output schema / properties / item / allOfAdded value: +[ + { + "additionalProperties": {}, + "properties": { + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "description": "UUID that identifies the resource; pass it back exactly as smry returned it.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object", + "x-smry-component": "LibraryAsset" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "starred": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object", + "x-smry-component": "LibraryItem" + }, + { + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + } +] - removed
Output schema / properties / item / propertiesRemoved value: -{ - "article": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "articleStatus": { - "type": "string" - }, - "asset": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "checksum": { - "type": "string" - }, - "downloadUrl": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "itemId": { - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "resourceUri": { - "type": "string" - }, - "size": { - "type": "number" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "itemId", - "fileName", - "mimeType", - "size", - "checksum", - "updatedAt", - "resourceUri", - "downloadUrl" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "captureMethod": { - "anyOf": [ - { - "const": "reader", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "upload", - "type": "string" - }, - { - "const": "rss", - "type": "string" - }, - { - "const": "email_inbox", - "type": "string" - }, - { - "const": "api", - "type": "string" - }, - { - "const": "import", - "type": "string" - } - ] - }, - "classification": { - "additionalProperties": {}, - "properties": { - "confidence": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "method": { - "anyOf": [ - { - "const": "user", - "type": "string" - }, - { - "const": "source_adapter", - "type": "string" - }, - { - "const": "mime", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "url", - "type": "string" - }, - { - "const": "metadata", - "type": "string" - }, - { - "const": "legacy", - "type": "string" - }, - { - "const": "fallback", - "type": "string" - } - ] - }, - "updatedAt": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "method", - "confidence", - "version", - "updatedAt" - ], - "type": "object" - }, - "contentKind": { - "anyOf": [ - { - "const": "article", - "type": "string" - }, - { - "const": "website", - "type": "string" - }, - { - "const": "book", - "type": "string" - }, - { - "const": "email", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "social_post", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "podcast_episode", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "domain": { - "type": "string" - }, - "externalId": { - "type": [ - "string", - "null" - ] - }, - "fileName": { - "type": [ - "string", - "null" - ] - }, - "format": { - "anyOf": [ - { - "const": "html", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "epub", - "type": "string" - }, - { - "const": "markdown", - "type": "string" - }, - { - "const": "plain_text", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "spreadsheet", - "type": "string" - }, - { - "const": "presentation", - "type": "string" - }, - { - "const": "audio", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "lastReadAt": { - "type": [ - "string", - "null" - ] - }, - "metadata": { - "patternProperties": { - "^(.*)$": {} - }, - "type": "object" - }, - "mimeType": { - "type": [ - "string", - "null" - ] - }, - "originalUrl": { - "type": [ - "string", - "null" - ] - }, - "readProgress": { - "type": [ - "number", - "null" - ] - }, - "savedAt": { - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / item / requiredRemoved value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "starred", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -] - removed
Output schema / properties / item / typeRemoved value: -"object"
- Changed
search_saved_item1 field changed- added
Input schema / properties / id / descriptionAdded value: +"UUID that identifies the resource; pass it back exactly as smry returned it."
- Changed
update_library_item5 fields changed- added
Input schema / properties / id / descriptionAdded value: +"UUID that identifies the resource; pass it back exactly as smry returned it." - added
Output schema / properties / item / allOfAdded value: +[ + { + "additionalProperties": {}, + "properties": { + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "description": "UUID that identifies the resource; pass it back exactly as smry returned it.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object", + "x-smry-component": "LibraryAsset" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "starred": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object", + "x-smry-component": "LibraryItem" + }, + { + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + } +] - removed
Output schema / properties / item / propertiesRemoved value: -{ - "article": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "articleStatus": { - "type": "string" - }, - "asset": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "checksum": { - "type": "string" - }, - "downloadUrl": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "itemId": { - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "resourceUri": { - "type": "string" - }, - "size": { - "type": "number" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "itemId", - "fileName", - "mimeType", - "size", - "checksum", - "updatedAt", - "resourceUri", - "downloadUrl" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "captureMethod": { - "anyOf": [ - { - "const": "reader", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "upload", - "type": "string" - }, - { - "const": "rss", - "type": "string" - }, - { - "const": "email_inbox", - "type": "string" - }, - { - "const": "api", - "type": "string" - }, - { - "const": "import", - "type": "string" - } - ] - }, - "classification": { - "additionalProperties": {}, - "properties": { - "confidence": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "method": { - "anyOf": [ - { - "const": "user", - "type": "string" - }, - { - "const": "source_adapter", - "type": "string" - }, - { - "const": "mime", - "type": "string" - }, - { - "const": "extension", - "type": "string" - }, - { - "const": "url", - "type": "string" - }, - { - "const": "metadata", - "type": "string" - }, - { - "const": "legacy", - "type": "string" - }, - { - "const": "fallback", - "type": "string" - } - ] - }, - "updatedAt": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "method", - "confidence", - "version", - "updatedAt" - ], - "type": "object" - }, - "contentKind": { - "anyOf": [ - { - "const": "article", - "type": "string" - }, - { - "const": "website", - "type": "string" - }, - { - "const": "book", - "type": "string" - }, - { - "const": "email", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "social_post", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "podcast_episode", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "domain": { - "type": "string" - }, - "externalId": { - "type": [ - "string", - "null" - ] - }, - "fileName": { - "type": [ - "string", - "null" - ] - }, - "format": { - "anyOf": [ - { - "const": "html", - "type": "string" - }, - { - "const": "pdf", - "type": "string" - }, - { - "const": "epub", - "type": "string" - }, - { - "const": "markdown", - "type": "string" - }, - { - "const": "plain_text", - "type": "string" - }, - { - "const": "document", - "type": "string" - }, - { - "const": "spreadsheet", - "type": "string" - }, - { - "const": "presentation", - "type": "string" - }, - { - "const": "audio", - "type": "string" - }, - { - "const": "video", - "type": "string" - }, - { - "const": "unknown", - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "lastReadAt": { - "type": [ - "string", - "null" - ] - }, - "metadata": { - "patternProperties": { - "^(.*)$": {} - }, - "type": "object" - }, - "mimeType": { - "type": [ - "string", - "null" - ] - }, - "originalUrl": { - "type": [ - "string", - "null" - ] - }, - "readProgress": { - "type": [ - "number", - "null" - ] - }, - "savedAt": { - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / item / requiredRemoved value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "starred", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -] - removed
Output schema / properties / item / typeRemoved value: -"object"
4 tool updates
- Changed
get_library_changes2 fields changed- added
Input schema / properties / limit / multipleOfAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +"number"
- Changed
get_library_object2 fields changed- added
Input schema / properties / content_max_characters / multipleOfAdded value: +1 - changed
Input schema / properties / content_max_characters / typePrevious value: -"integer"New value: +"number"
- Changed
list_library4 fields changed- added
Input schema / properties / content_max_characters / multipleOfAdded value: +1 - changed
Input schema / properties / content_max_characters / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / limit / multipleOfAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +"number"
- Changed
list_library_objects2 fields changed- added
Input schema / properties / limit / multipleOfAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +"number"
1 tool update
- Changed
query_feeds3 fields changed- changed
Input schema / properties / per_source_limit / descriptionPrevious value: -"Fair allocation: at most this many entries per source, so one loud feed cannot fill the page."New value: +"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." - changed
Output schema / descriptionPrevious value: -"entries: {total, returned, omitted:{by_limit}, next_cursor, entries[] | text} · sources: {total, returned, omitted:{by_having,by_limit}, next_cursor, sources[]} · aggregate: {group_by, total_entries, groups[]}."New value: +"entries: {total, returned, omitted:{by_limit}, next_cursor, entries[] | text} · sources: {total, returned, omitted:{by_having,by_limit}, next_cursor, sources[]} · aggregate: {group_by, total_entries, groups[]}. Filtered queries include classification_coverage. Source fetch_status and last_fetched_at describe fetching; legacy health describes publisher activity, so stalled does not mean fetching failed." - added
Output schema / properties / classification_coverageAdded value: +{ + "additionalProperties": {}, + "description": "Coverage 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 policy.", + "properties": { + "classified": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "collection_id": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "degraded": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "filter_revision": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "pending": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "status": { + "anyOf": [ + { + "const": "pending", + "type": "string" + }, + { + "const": "complete", + "type": "string" + }, + { + "const": "degraded", + "type": "string" + } + ] + }, + "total": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "collection_id", + "filter_revision", + "status", + "total", + "classified", + "pending", + "degraded" + ], + "type": "object" +}
7 tool updates
- Changed
bulk_update_library_items3 fields changed- added
Input schema / properties / starredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / items / items / properties / starredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / items / items / requiredPrevious value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -]New value: +[ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" +]
- Changed
get_library_changes2 fields changed- added
Output schema / properties / changes / items / properties / item / properties / starredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / changes / items / properties / item / requiredPrevious value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -]New value: +[ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" +]
- Changed
get_saved_article2 fields changed- added
Output schema / properties / item / properties / starredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / item / requiredPrevious value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -]New value: +[ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" +]
- Changed
list_library3 fields changed- added
Input schema / properties / starredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / items / items / properties / starredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / items / items / requiredPrevious value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -]New value: +[ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" +]
- Changed
save_article3 fields changed- added
Input schema / properties / starredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / item / properties / starredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / item / requiredPrevious value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -]New value: +[ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" +]
- Changed
save_content3 fields changed- added
Input schema / properties / starredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / item / properties / starredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / item / requiredPrevious value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -]New value: +[ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" +]
- Changed
update_library_item3 fields changed- added
Input schema / properties / starredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / item / properties / starredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / item / requiredPrevious value: -[ - "id", - "url", - "originalUrl", - "title", - "domain", - "contentKind", - "classification", - "captureMethod", - "format", - "mimeType", - "fileName", - "asset", - "externalId", - "status", - "tags", - "savedAt", - "updatedAt", - "lastReadAt", - "readProgress", - "articleStatus" -]New value: +[ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "starred", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" +]
5 tool updates
- Changed
get_feed_changes12 fields changed- added
Input schema / properties / attention_limitAdded value: +{ + "description": "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.", + "maximum": 500, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / where / properties / discovered_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When smry first saw the entry. Backfill makes old posts look new here, so use it for diffs, not for \"what's new\". Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / discovered_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When the source published the entry (entries with no publish date are excluded; use top-level since to include them). Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / source / properties / exclude / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title." - changed
Input schema / properties / where / properties / source / properties / include / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title." - added
Output schema / properties / attention / descriptionAdded value: +"Source 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 the complete list." - added
Output schema / properties / attention / properties / erroring_countAdded value: +{ + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Output schema / properties / attention / properties / never_produced_countAdded value: +{ + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Output schema / properties / attention / properties / stalled_countAdded value: +{ + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - changed
Output schema / properties / attention / requiredPrevious value: -[ - "stalled", - "erroring", - "never_produced" -]New value: +[ + "stalled", + "stalled_count", + "erroring", + "erroring_count", + "never_produced", + "never_produced_count" +]
- Changed
list_library3 fields changed- added
Input schema / properties / include_metadata / descriptionAdded value: +"Include the free-form metadata object saved through the API. Everything else is always returned." - added
Input schema / properties / saved_afterAdded value: +{ + "description": "Items saved after this time: \"7d\", \"36h\", \"now\", or an ISO date. Use for \"saved this week\".", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / updated_after / descriptionAdded value: +"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."
- Changed
manage_feed_consumers6 fields changed- changed
Input schema / properties / where / properties / discovered_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When smry first saw the entry. Backfill makes old posts look new here, so use it for diffs, not for \"what's new\". Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / discovered_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When the source published the entry (entries with no publish date are excluded; use top-level since to include them). Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / source / properties / exclude / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title." - changed
Input schema / properties / where / properties / source / properties / include / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title."
- Changed
mutate_feeds6 fields changed- changed
Input schema / properties / where / properties / discovered_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When smry first saw the entry. Backfill makes old posts look new here, so use it for diffs, not for \"what's new\". Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / discovered_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When the source published the entry (entries with no publish date are excluded; use top-level since to include them). Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / source / properties / exclude / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title." - changed
Input schema / properties / where / properties / source / properties / include / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title."
- Changed
query_feeds11 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Only a next_cursor from a previous response; omit on the first call." - changed
Input schema / properties / format / descriptionPrevious value: -"\"compact\" returns token-lean text lines instead of JSON entries."New value: +"\"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." - added
Input schema / properties / limit / descriptionAdded value: +"Default 20, maximum 100; page further with next_cursor." - changed
Input schema / properties / select / descriptionPrevious value: -"\"entries\" = rows · \"sources\" = per-source health (where.collection/source only; use having for health filters) · \"aggregate\" = counts. Default \"entries\"."New value: +"\"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 delivered in 7) · \"aggregate\" = counts. Default \"entries\"." - added
Input schema / properties / sinceAdded value: +{ + "description": "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.", + "maxLength": 64, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / where / properties / discovered_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When smry first saw the entry. Backfill makes old posts look new here, so use it for diffs, not for \"what's new\". Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / discovered_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_after / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"When the source published the entry (entries with no publish date are excluded; use top-level since to include them). Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / published_before / descriptionPrevious value: -"Relative window (\"7d\", \"36h\", \"45m\", \"2w\") or ISO date."New value: +"Relative window (\"7d\", \"36h\", \"45m\", \"2w\"), \"now\", or ISO date." - changed
Input schema / properties / where / properties / source / properties / exclude / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title." - changed
Input schema / properties / where / properties / source / properties / include / items / descriptionPrevious value: -"A source id (from any v2 response) or its exact title."New value: +"A source id (from any v2 response) or its title. Reads also accept a fragment that matches exactly one title."
11 tool updates
- Changed
create_monitor4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / collection / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 100, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - changed
Input schema / properties / schedule / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "frequency": { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 43200, - "minimum": 60, - "type": "integer" - } - ] - }, - "type": { - "const": "interval", - "type": "string" - }, - "unit": { - "const": "minutes", - "type": "string" - } - }, - "required": [ - "type", - "unit" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "frequency": { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 720, - "minimum": 1, - "type": "integer" - } - ] - }, - "type": { - "const": "interval", - "type": "string" - }, - "unit": { - "const": "hours", - "type": "string" - } - }, - "required": [ - "type", - "unit" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "frequency": { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 30, - "minimum": 1, - "type": "integer" - } - ] - }, - "type": { - "const": "interval", - "type": "string" - }, - "unit": { - "const": "days", - "type": "string" - } - }, - "required": [ - "type", - "unit" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "frequency": { + "maximum": 43200, + "minimum": 60, + "type": "integer" + }, + "type": { + "const": "interval", + "type": "string" + }, + "unit": { + "const": "minutes", + "type": "string" + } + }, + "required": [ + "type", + "frequency", + "unit" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "frequency": { + "maximum": 720, + "minimum": 1, + "type": "integer" + }, + "type": { + "const": "interval", + "type": "string" + }, + "unit": { + "const": "hours", + "type": "string" + } + }, + "required": [ + "type", + "frequency", + "unit" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "frequency": { + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + "type": { + "const": "interval", + "type": "string" + }, + "unit": { + "const": "days", + "type": "string" + } + }, + "required": [ + "type", + "frequency", + "unit" + ], + "type": "object" + } +] - changed
Input schema / properties / target / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "instructions": { - "maxLength": 2000, - "minLength": 1, - "type": "string" - }, - "normalize_whitespace": { - "type": "boolean" - }, - "type": { - "const": "page", - "type": "string" - }, - "url": { - "description": "A public http(s) URL.", - "maxLength": 2048, - "minLength": 8, - "type": "string" - } - }, - "required": [ - "type", - "url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "exclude": { - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 50, - "type": "array" - }, - "include": { - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 50, - "type": "array" - }, - "max_urls": { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 10000, - "minimum": 1, - "type": "integer" - } - ] - }, - "type": { - "const": "sitemap", - "type": "string" - }, - "url": { - "description": "A public http(s) URL.", - "maxLength": 2048, - "minLength": 8, - "type": "string" - } - }, - "required": [ - "type", - "url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "instructions": { - "maxLength": 2000, - "minLength": 1, - "type": "string" - }, - "type": { - "const": "extract", - "type": "string" - }, - "url": { - "description": "A public http(s) URL.", - "maxLength": 2048, - "minLength": 8, - "type": "string" - } - }, - "required": [ - "type", - "url", - "instructions" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "instructions": { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + "normalize_whitespace": { + "type": "boolean" + }, + "type": { + "const": "page", + "type": "string" + }, + "url": { + "description": "A public http(s) URL.", + "maxLength": 2048, + "minLength": 8, + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "exclude": { + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 50, + "type": "array" + }, + "include": { + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 50, + "type": "array" + }, + "max_urls": { + "maximum": 10000, + "minimum": 1, + "type": "integer" + }, + "type": { + "const": "sitemap", + "type": "string" + }, + "url": { + "description": "A public http(s) URL.", + "maxLength": 2048, + "minLength": 8, + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "instructions": { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + "type": { + "const": "extract", + "type": "string" + }, + "url": { + "description": "A public http(s) URL.", + "maxLength": 2048, + "minLength": 8, + "type": "string" + } + }, + "required": [ + "type", + "url", + "instructions" + ], + "type": "object" + } +]
- Changed
create_news_query6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / collection / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 100, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - removed
Output schema / properties / followed / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - } -] - added
Output schema / properties / followed / maximumAdded value: +9007199254740991 - added
Output schema / properties / followed / minimumAdded value: +-9007199254740991 - added
Output schema / properties / followed / typeAdded value: +"integer"
- Changed
discover_feed_inputs1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
follow_feeds6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / collection / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 100, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - removed
Output schema / properties / followed / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - } -] - added
Output schema / properties / followed / maximumAdded value: +9007199254740991 - added
Output schema / properties / followed / minimumAdded value: +-9007199254740991 - added
Output schema / properties / followed / typeAdded value: +"integer"
- Changed
get_feed_changes17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / consumer_id / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "description": "smry-managed progress: poll this consumer's saved predicate. Omit cursor and where.", - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / consumer_id / maximumAdded value: +9007199254740991 - added
Input schema / properties / consumer_id / minimumAdded value: +1 - added
Input schema / properties / consumer_id / typeAdded value: +"integer" - removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 500, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / limit / maximumAdded value: +500 - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / limit / typeAdded value: +"integer" - changed
Input schema / properties / where / descriptionPrevious value: -"Selection predicate shared by every feeds operation. All fields AND together; omit a field to not filter on it."New value: +"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." - changed
Input schema / properties / where / properties / collection / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 100, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / collection / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / exclude / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / exclude / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / include / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / include / minItemsAdded value: +1 - changed
Output schema / properties / checkpoint / properties / consumer_id / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
manage_collections9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / id / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / id / maximumAdded value: +9007199254740991 - added
Input schema / properties / id / minimumAdded value: +1 - added
Input schema / properties / id / typeAdded value: +"integer" - removed
Input schema / properties / source_ids / items / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / source_ids / items / maximumAdded value: +9007199254740991 - added
Input schema / properties / source_ids / items / minimumAdded value: +1 - added
Input schema / properties / source_ids / items / typeAdded value: +"integer"
- Changed
manage_feed_consumers12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / id / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / id / maximumAdded value: +9007199254740991 - added
Input schema / properties / id / minimumAdded value: +1 - added
Input schema / properties / id / typeAdded value: +"integer" - changed
Input schema / properties / where / descriptionPrevious value: -"Selection predicate shared by every feeds operation. All fields AND together; omit a field to not filter on it."New value: +"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." - changed
Input schema / properties / where / properties / collection / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 100, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / collection / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / exclude / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / exclude / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / include / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / include / minItemsAdded value: +1
- Changed
manage_feed_filter10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / collection / properties / id / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / collection / properties / id / maximumAdded value: +9007199254740991 - added
Input schema / properties / collection / properties / id / minimumAdded value: +1 - added
Input schema / properties / collection / properties / id / typeAdded value: +"integer" - added
Input schema / properties / collection / requiredAdded value: +[ + "id" +] - removed
Input schema / properties / expectedRevision / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - } -] - added
Input schema / properties / expectedRevision / maximumAdded value: +9007199254740991 - added
Input schema / properties / expectedRevision / minimumAdded value: +0 - added
Input schema / properties / expectedRevision / typeAdded value: +"integer"
- Changed
mutate_feeds15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / dry_run / descriptionPrevious value: -"Default true: the first call always previews blast radius and returns a commit_token."New value: +"Default true: preview affected records and return a commit_token. Explicit false applies immediately; prefer preview then commit_token for agent workflows." - changed
Input schema / properties / op / descriptionPrevious value: -"Namespaced by noun: the noun fixes what `where` selects (sources.* select sources, entries.* select entries, collections.* select one collection)."New value: +"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." - changed
Input schema / properties / set / additionalPropertiesPrevious value: -{}New value: +false - changed
Input schema / properties / set / properties / collection / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / set / properties / collection / descriptionAdded value: +"Required for sources.move: destination collection id or name." - added
Input schema / properties / set / properties / name / descriptionAdded value: +"Required for collections.create and collections.rename: the collection name." - added
Input schema / properties / set / properties / title / descriptionAdded value: +"Required for sources.rename: the new source title." - changed
Input schema / properties / where / descriptionPrevious value: -"Selection predicate shared by every feeds operation. All fields AND together; omit a field to not filter on it."New value: +"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." - changed
Input schema / properties / where / properties / collection / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 100, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / collection / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / exclude / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / exclude / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / include / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / include / minItemsAdded value: +1
- Changed
query_feeds41 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / having / properties / count / properties / gte / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - } -] - added
Input schema / properties / having / properties / count / properties / gte / maximumAdded value: +9007199254740991 - added
Input schema / properties / having / properties / count / properties / gte / minimumAdded value: +0 - added
Input schema / properties / having / properties / count / properties / gte / typeAdded value: +"integer" - removed
Input schema / properties / having / properties / count / properties / lte / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - } -] - added
Input schema / properties / having / properties / count / properties / lte / maximumAdded value: +9007199254740991 - added
Input schema / properties / having / properties / count / properties / lte / minimumAdded value: +0 - added
Input schema / properties / having / properties / count / properties / lte / typeAdded value: +"integer" - removed
Input schema / properties / having / properties / silent_days / properties / gte / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - } -] - added
Input schema / properties / having / properties / silent_days / properties / gte / maximumAdded value: +9007199254740991 - added
Input schema / properties / having / properties / silent_days / properties / gte / minimumAdded value: +0 - added
Input schema / properties / having / properties / silent_days / properties / gte / typeAdded value: +"integer" - removed
Input schema / properties / having / properties / silent_days / properties / lte / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - } -] - added
Input schema / properties / having / properties / silent_days / properties / lte / maximumAdded value: +9007199254740991 - added
Input schema / properties / having / properties / silent_days / properties / lte / minimumAdded value: +0 - added
Input schema / properties / having / properties / silent_days / properties / lte / typeAdded value: +"integer" - removed
Input schema / properties / having / properties / unread / properties / gte / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - } -] - added
Input schema / properties / having / properties / unread / properties / gte / maximumAdded value: +9007199254740991 - added
Input schema / properties / having / properties / unread / properties / gte / minimumAdded value: +0 - added
Input schema / properties / having / properties / unread / properties / gte / typeAdded value: +"integer" - removed
Input schema / properties / having / properties / unread / properties / lte / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - } -] - added
Input schema / properties / having / properties / unread / properties / lte / maximumAdded value: +9007199254740991 - added
Input schema / properties / having / properties / unread / properties / lte / minimumAdded value: +0 - added
Input schema / properties / having / properties / unread / properties / lte / typeAdded value: +"integer" - removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 100, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / limit / typeAdded value: +"integer" - removed
Input schema / properties / per_source_limit / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "description": "Fair allocation: at most this many entries per source, so one loud feed cannot fill the page.", - "maximum": 20, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / per_source_limit / maximumAdded value: +20 - added
Input schema / properties / per_source_limit / minimumAdded value: +1 - added
Input schema / properties / per_source_limit / typeAdded value: +"integer" - changed
Input schema / properties / select / descriptionPrevious value: -"\"entries\" = rows · \"sources\" = per-source health · \"aggregate\" = counts, never rows. Default \"entries\"."New value: +"\"entries\" = rows · \"sources\" = per-source health (where.collection/source only; use having for health filters) · \"aggregate\" = counts. Default \"entries\"." - changed
Input schema / properties / where / descriptionPrevious value: -"Selection predicate shared by every feeds operation. All fields AND together; omit a field to not filter on it."New value: +"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." - changed
Input schema / properties / where / properties / collection / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 100, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / collection / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / exclude / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / exclude / minItemsAdded value: +1 - changed
Input schema / properties / where / properties / source / properties / include / items / anyOfPrevious value: -[ - { - "anyOf": [ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - ] - }, - { - "maxLength": 500, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "maxLength": 500, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / where / properties / source / properties / include / minItemsAdded value: +1
- Changed
set_feed_feedback10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / entryId / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } -] - added
Input schema / properties / entryId / maximumAdded value: +9007199254740991 - added
Input schema / properties / entryId / minimumAdded value: +1 - added
Input schema / properties / entryId / typeAdded value: +"integer" - changed
Input schema / requiredPrevious value: -[ - "value" -]New value: +[ + "entryId", + "value" +] - removed
Output schema / properties / entryId / anyOfRemoved value: -[ - { - "default": 0, - "type": "string" - }, - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - } -] - added
Output schema / properties / entryId / maximumAdded value: +9007199254740991 - added
Output schema / properties / entryId / minimumAdded value: +-9007199254740991 - added
Output schema / properties / entryId / typeAdded value: +"integer"
28 tool updates
- Added
bulk_update_library_items - Changed
create_monitor12 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / change_detectionAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "type": { + "const": "exact", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "confidence_threshold": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "type": { + "const": "semantic", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } + ] +} - added
Input schema / properties / collectionAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "default": 0, + "type": "string" + }, + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + } + ] + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } + ], + "description": "Collection id or name. A new name is created. Omit for Unsorted." +} - added
Input schema / properties / nameAdded value: +{ + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / scheduleAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "frequency": { + "anyOf": [ + { + "default": 0, + "type": "string" + }, + { + "maximum": 43200, + "minimum": 60, + "type": "integer" + } + ] + }, + "type": { + "const": "interval", + "type": "string" + }, + "unit": { + "const": "minutes", + "type": "string" + } + }, + "required": [ + "type", + "unit" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "frequency": { + "anyOf": [ + { + "default": 0, + "type": "string" + }, + { + "maximum": 720, + "minimum": 1, + "type": "integer" + } + ] + }, + "type": { + "const": "interval", + "type": "string" + }, + "unit": { + "const": "hours", + "type": "string" + } + }, + "required": [ + "type", + "unit" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "frequency": { + "anyOf": [ + { + "default": 0, + "type": "string" + }, + { + "maximum": 30, + "minimum": 1, + "type": "integer" + } + ] + }, + "type": { + "const": "interval", + "type": "string" + }, + "unit": { + "const": "days", + "type": "string" + } + }, + "required": [ + "type", + "unit" + ], + "type": "object" + } + ], + "description": "Default: daily. Shortest interval: 60 minutes." +} - added
Input schema / properties / tagsAdded value: +{ + "items": { + "maxLength": 50, + "minLength": 1, + "type": "string" + }, + "maxItems": 18, + "type": "array" +} - added
Input schema / properties / targetAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "instructions": { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + "normalize_whitespace": { + "type": "boolean" + }, + "type": { + "const": "page", + "type": "string" + }, + "url": { + "description": "A public http(s) URL.", + "maxLength": 2048, + "minLength": 8, + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "exclude": { + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 50, + "type": "array" + }, + "include": { + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 50, + "type": "array" + }, + "max_urls": { + "anyOf": [ + { + "default": 0, + "type": "string" + }, + { + "maximum": 10000, + "minimum": 1, + "type": "integer" + } + ] + }, + "type": { + "const": "sitemap", + "type": "string" + }, + "url": { + "description": "A public http(s) URL.", + "maxLength": 2048, + "minLength": 8, + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "instructions": { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + "type": { + "const": "extract", + "type": "string" + }, + "url": { + "description": "A public http(s) URL.", + "maxLength": 2048, + "minLength": 8, + "type": "string" + } + }, + "required": [ + "type", + "url", + "instructions" + ], + "type": "object" + } + ], + "description": "\"page\" watches one URL, \"sitemap\" watches URL additions/removals, \"extract\" watches for meaningful site-wide changes per your instructions." +} - removed
Input schema / properties / titleRemoved value: -{ - "maxLength": 200, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / urlRemoved value: -{ - "format": "uri", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "url" -]New value: +[ + "name", + "target" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "limits": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "monitor": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "subscription": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + } + }, + "required": [ + "monitor", + "subscription", + "limits" + ], + "type": "object" +}
- Added
create_news_query - Added
discover_feed_inputs - Changed
follow_feeds11 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / collection / anyOfAdded value: +[ + { + "anyOf": [ + { + "default": 0, + "type": "string" + }, + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + } + ] + }, + { + "maxLength": 100, + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / collection / descriptionAdded value: +"Collection id or name. A new name is created. Omit for Unsorted." - removed
Input schema / properties / collection / maxLengthRemoved value: -80 - removed
Input schema / properties / collection / minLengthRemoved value: -1 - removed
Input schema / properties / collection / typeRemoved value: -"string" - removed
Input schema / properties / urls / items / formatRemoved value: -"uri" - added
Input schema / properties / urls / items / maxLengthAdded value: +2048 - added
Input schema / properties / urls / items / minLengthAdded value: +8 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "collection": { + "type": "string" + }, + "followed": { + "anyOf": [ + { + "default": 0, + "type": "string" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ] + }, + "object": { + "const": "feed_follow", + "type": "string" + }, + "outcomes": { + "items": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "object", + "collection", + "followed", + "outcomes" + ], + "type": "object" +}
- Changed
get_article5 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / cursor / descriptionRemoved value: -"Paragraph anchor to resume from. Pass the next_cursor of a previous call to continue reading." - removed
Input schema / properties / max_tokens / descriptionRemoved value: -"Approximate token budget for the returned text. Defaults to 4000, which covers a typical article whole. Raise it for long documents, lower it when context is tight." - removed
Input schema / properties / url / descriptionRemoved value: -"The public http or https article or YouTube URL to read." - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Added
get_feed_changes - Added
get_library_asset - Added
get_library_changes - Added
get_library_object - Added
get_saved_article - Added
list_library - Added
list_library_objects - Added
manage_collections - Added
manage_feed_consumers - Added
manage_feed_filter - Added
mutate_feeds - Changed
open_web_pages7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / pages / items / additionalPropertiesRemoved value: -false - added
Input schema / properties / pages / items / properties / start / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / failures / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / pages / items / propertyNamesAdded value: +{ + "type": "string" +}
- Added
query_feeds - Added
remove_library_item - Changed
save_article7 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / status / anyOfAdded value: +[ + { + "const": "inbox", + "type": "string" + }, + { + "const": "later", + "type": "string" + }, + { + "const": "archive", + "type": "string" + } +] - removed
Input schema / properties / status / enumRemoved value: -[ - "inbox", - "later", - "archive" -] - removed
Input schema / properties / status / typeRemoved value: -"string" - removed
Input schema / properties / tags / items / minLengthRemoved value: -1 - removed
Input schema / properties / url / descriptionRemoved value: -"The public http or https article or YouTube URL to read." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "alreadySaved": { + "type": "boolean" + }, + "extraction": { + "additionalProperties": false, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "qualityStatus": { + "type": [ + "string", + "null" + ] + }, + "source": { + "type": "string" + } + }, + "required": [ + "source", + "cacheHit", + "qualityStatus" + ], + "type": "object" + }, + "item": { + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object" + } + }, + "required": [ + "item", + "extraction", + "alreadySaved" + ], + "type": "object" +}
- Added
save_content - Changed
search_article7 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / cursor / descriptionRemoved value: -"Offset returned as next_cursor by an earlier search." - removed
Input schema / properties / max_passages / descriptionRemoved value: -"Maximum passages to return. Defaults to 8." - removed
Input schema / properties / max_tokens / descriptionRemoved value: -"Approximate token budget for the returned text. Defaults to 4000, which covers a typical article whole. Raise it for long documents, lower it when context is tight." - removed
Input schema / properties / query / descriptionRemoved value: -"What you want to find in the article. Natural language or keywords; matching is lexical, so include the words you expect the article to use." - removed
Input schema / properties / url / descriptionRemoved value: -"The public http or https article or YouTube URL to read." - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_feeds7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / omitted / maximumAdded value: +9007199254740991 - added
Output schema / properties / results / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / returned / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991
- Added
search_saved_item - Changed
search_web6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / queries / items / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / failures / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / searches / items / propertyNamesAdded value: +{ + "type": "string" +}
- Added
set_feed_feedback - Changed
update_library_item10 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / minPropertiesAdded value: +2 - added
Input schema / properties / content_kindAdded value: +{ + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] +} - removed
Input schema / properties / id / formatRemoved value: -"uuid" - added
Input schema / properties / id / patternAdded value: +"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" - added
Input schema / properties / status / anyOfAdded value: +[ + { + "const": "inbox", + "type": "string" + }, + { + "const": "later", + "type": "string" + }, + { + "const": "archive", + "type": "string" + } +] - removed
Input schema / properties / status / enumRemoved value: -[ - "inbox", - "later", - "archive" -] - removed
Input schema / properties / status / typeRemoved value: -"string" - removed
Input schema / properties / tags / items / minLengthRemoved value: -1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "item": { + "properties": { + "article": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "articleStatus": { + "type": "string" + }, + "asset": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "checksum": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "itemId": { + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "resourceUri": { + "type": "string" + }, + "size": { + "type": "number" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "itemId", + "fileName", + "mimeType", + "size", + "checksum", + "updatedAt", + "resourceUri", + "downloadUrl" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "captureMethod": { + "anyOf": [ + { + "const": "reader", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "upload", + "type": "string" + }, + { + "const": "rss", + "type": "string" + }, + { + "const": "email_inbox", + "type": "string" + }, + { + "const": "api", + "type": "string" + }, + { + "const": "import", + "type": "string" + } + ] + }, + "classification": { + "additionalProperties": {}, + "properties": { + "confidence": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "method": { + "anyOf": [ + { + "const": "user", + "type": "string" + }, + { + "const": "source_adapter", + "type": "string" + }, + { + "const": "mime", + "type": "string" + }, + { + "const": "extension", + "type": "string" + }, + { + "const": "url", + "type": "string" + }, + { + "const": "metadata", + "type": "string" + }, + { + "const": "legacy", + "type": "string" + }, + { + "const": "fallback", + "type": "string" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "method", + "confidence", + "version", + "updatedAt" + ], + "type": "object" + }, + "contentKind": { + "anyOf": [ + { + "const": "article", + "type": "string" + }, + { + "const": "website", + "type": "string" + }, + { + "const": "book", + "type": "string" + }, + { + "const": "email", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "social_post", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "podcast_episode", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "domain": { + "type": "string" + }, + "externalId": { + "type": [ + "string", + "null" + ] + }, + "fileName": { + "type": [ + "string", + "null" + ] + }, + "format": { + "anyOf": [ + { + "const": "html", + "type": "string" + }, + { + "const": "pdf", + "type": "string" + }, + { + "const": "epub", + "type": "string" + }, + { + "const": "markdown", + "type": "string" + }, + { + "const": "plain_text", + "type": "string" + }, + { + "const": "document", + "type": "string" + }, + { + "const": "spreadsheet", + "type": "string" + }, + { + "const": "presentation", + "type": "string" + }, + { + "const": "audio", + "type": "string" + }, + { + "const": "video", + "type": "string" + }, + { + "const": "unknown", + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "lastReadAt": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "patternProperties": { + "^(.*)$": {} + }, + "type": "object" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "originalUrl": { + "type": [ + "string", + "null" + ] + }, + "readProgress": { + "type": [ + "number", + "null" + ] + }, + "savedAt": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "originalUrl", + "title", + "domain", + "contentKind", + "classification", + "captureMethod", + "format", + "mimeType", + "fileName", + "asset", + "externalId", + "status", + "tags", + "savedAt", + "updatedAt", + "lastReadAt", + "readProgress", + "articleStatus" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" +}
9 tool updates
- First observed
create_monitor - First observed
follow_feeds - First observed
get_article - First observed
open_web_pages - First observed
save_article - First observed
search_article - First observed
search_feeds - First observed
search_web - First observed
update_library_item
Related MCP Connectors
- NewsmindOAuthapp.newsmind
Read, search and track your RSS feeds: semantic search, story clustering, watches, OPML import.
- ScreviOAuthcom.screvi
Search and organize your reading library of highlights, saved articles, notes and tags.
- GleanitOAuthco.gleanit
Search, read, and write highlights, notes, screenshots, collections, projects, and tags in Gleanit.
Save, search and organize bookmarks, highlights, feeds and knowledge cards in a Linkflare library.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables users to search a curated RSS/Atom catalog, subscribe to and collect feeds, and query collected articles through natural-language tools.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to browse curated technology feeds and fetch any RSS/Atom/RDF feed.2 npmMIT
- AlicenseAqualityBmaintenanceEnables users to subscribe to RSS feeds, read clean extracted article text without ad-heavy sites, and perform full-text and semantic searches using local SQLite storage with no account required.6MIT
- AlicenseNot gradedqualityDmaintenanceEnables intelligent RSS feed management with AI-powered semantic search, advanced filtering, and a comprehensive reading workflow. Supports OPML parsing, article organization with status tracking, and token-efficient browsing of large feed collections.14 npm5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.