Scholar Feed
Server Details
Rank CS/AI/ML papers by citations, forecast impact, or code adoption; trace 23.2M citation edges.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- YGao2005/scholar-feed-mcp
- GitHub Stars
- 10
- Server Listing
- Scholar Feed MCP Server
Available Tools
27 toolsadd_to_collectionAdd to CollectionAInspect
Add a paper to a collection, addressed by collection_id OR collection_name (get-or-create by name — no need to look up an id first). Nest with "/": collection_name "AgentOPA/Formal" files the paper under an "AgentOPA" folder. MUTATES: also auto-saves the paper to the library. Idempotent (adding a paper already in the collection is a no-op). Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| arxiv_id | Yes | arXiv ID of the paper to add, e.g. '2407.15831'. | |
| collection_id | No | UUID of an existing collection. Provide this OR collection_name. | |
| collection_name | No | Name of the collection. Created if it doesn't exist. Use '/' to nest, e.g. 'AgentOPA/Formal'. Provide this OR collection_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=false, and the description adds substantial behavior: MUTATES and auto-saves to the library, idempotence via no-op on duplicates, get-or-create side effect, and the SF_API_KEY requirement. 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 compact and front-loaded: the first sentence states the action and addressing options, and the remaining sentences each add a distinct behavioral or auth detail. 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?
Covers the core action, addressing alternatives, get-or-create semantics, nesting, side-effect auto-save, idempotence, and authentication. With an output schema present and annotations covering the safety profile, nothing essential for correct invocation 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 coverage is 100%, so the baseline is 3. The description adds value by clarifying that collection_name needs no pre-lookup and that '/' nesting files the paper under a folder, going beyond the schema's existing 'Created if it doesn't exist' and 'Use / to nest' notes.
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: 'Add a paper to a collection' with two addressing modes (collection_id or collection_name). It also distinguishes itself from siblings by noting get-or-create by name and auto-saving to the library, which separates it from create_collection and save_paper.
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 clear invocation guidance: use collection_id OR collection_name, and no need to look up an id first because names are get-or-create. It does not explicitly name sibling alternatives or exclusions, but the context is strong enough that an agent can decide when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
annotate_paperAnnotate PaperAInspect
Record YOUR verdict on a paper — why it matters for your work, when to use it, or why you ruled it out. One note per paper, upserted (writing again replaces it), so it is safe to call repeatedly. Requires SF_API_KEY. WHY IT MATTERS: this note is the only thing that survives between sessions. list_library returns note_text on every saved paper, so a verdict written now is what a future session reads INSTEAD of re-reading the paper and re-deriving the same conclusion. WRITE A JUDGMENT, NOT A SUMMARY — the paper already carries llm_summary and an abstract, so restating what the paper says adds nothing. Write what those cannot: how it bears on YOUR problem. Prefer a claim someone could later prove wrong ("needs a labeled trace log we don't have", "our baseline — beat this on the 7B setting") over an unfalsifiable verdict ("interesting", "not very relevant"), because a mechanism can be re-checked when circumstances change and a sentiment cannot. State the basis when it is thin: a verdict formed from the abstract alone deserves "(abstract only)", since fetch_fulltext defaults to ~800 characters of the results section rather than the whole paper. Pass action='get' to read the existing note before overwriting it — worth doing when a prior session may already have judged this paper. To correct a note, just write the corrected text (it replaces).
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | 'upsert' (default) writes/replaces the note. 'get' returns the current note without changing it. There is deliberately no delete: a wrong note is corrected by overwriting it, which keeps this tool non-destructive. | upsert |
| arxiv_id | Yes | arXiv ID of the paper to annotate, e.g. '2407.15831'. | |
| note_text | No | Your verdict (max 5000 chars). Required for the default upsert; ignored for action='get'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already stating readOnlyHint=false and destructiveHint=false, the description adds material behavioral context: the upsert semantics ('writing again replaces it'), repeated-call safety, deliberate lack of delete, the SF_API_KEY requirement, and the get action that returns without modifying. These details go well beyond the structured 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 long but tightly organized with clear section markers (WHY IT MATTERS, WRITE A JUDGMENT) and every sentence adds operational or strategic value. The core purpose is front-loaded in the first sentence, and no content is redundant with the input schema or annotations.
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 that is conceptually simple but operationally nuanced, the description covers everything an agent needs: what to write, why it matters, when to use get, how to correct, auth requirements, and the relationship to list_library. The output schema exists, so return-value detail is not needed, and the guidance is complete enough to invoke correctly in a wide range of session contexts.
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 100%, so the baseline is 3, but the description adds significant parameter-level context: it explains when action='get' should be used, that note_text is ignored for get, and that overwriting is the correction mechanism. It does not repeat schema types but clarifies intent and interplay between parameters.
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: 'Record YOUR verdict on a paper' and immediately clarifies the scope ('why it matters for your work, when to use it, or why you ruled it out'). It also contrasts itself with the paper's existing llm_summary and abstract, which clearly separates it from sibling tools like fetch_fulltext or get_paper.
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 explicit when-to-use guidance, including the cross-session persistence rationale and the fact that list_library surfaces note_text on every saved paper. It explicitly tells the agent what not to do ('WRITE A JUDGMENT, NOT A SUMMARY') and when to read first via action='get', making the call decision unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_libraryAsk LibraryARead-onlyInspect
Answer a question using ONLY the papers you've saved — a synthesis over your library (or one collection) with inline [arXiv-ID] citations. The inverse of find_gaps (which finds important work you're MISSING): ask_library reasons over what you HAVE. Optionally scope to one collection (collection_name OR collection_id); omit both to use your whole library. Read-only. Requires SF_API_KEY (it reads your saved set). Free accounts get 1 question/month; Pro raises this to 200/day.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many of your most-relevant saved papers to ground the answer on (max 20). Default 8. | |
| question | Yes | The natural-language question to answer from your saved papers. | |
| collection_id | No | Scope the answer to one collection by UUID. Omit to use your whole library. | |
| collection_name | No | Scope the answer to one collection by name (resolved by the backend). Omit to use your whole library. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| answer | No | The synthesized answer with inline [arXiv-ID] citations. |
| papers | No | |
| message | No | |
| citations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, but the description goes further by disclosing that it requires SF_API_KEY, that it reads the saved set, that it produces inline [arXiv-ID] citations, and that quotas differ by account tier. This adds meaningful behavioral context beyond 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 compact and efficient: it front-loads the core purpose, then adds contrast, scoping options, read-only status, auth requirement, and quota. Every sentence contributes meaningful information without 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 output schema and annotations, the description covers all essential context: what the tool does, how it differs from a sibling, how scoping works, auth requirements, and usage limits. Nothing critical is missing for an agent to invoke 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 100%, so the schema already documents each parameter. The description adds valuable relational semantics by saying collection_name OR collection_id can be used and that omitting both uses the whole library, which is not fully captured by 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 a specific verb ('Answer a question') and resource ('the papers you've saved'), and explicitly contrasts itself with find_gaps. This makes its purpose unmistakable and differentiates it from a close sibling.
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 names the inverse tool (find_gaps) and explains the distinction: ask_library reasons over what you have, while find_gaps finds what you're missing. It also clarifies optional collection scoping and the default whole-library behavior, giving clear guidance on when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_driftCheck Drift (is my method superseded?)ARead-onlyInspect
Answers 'for my problem, is the method I use superseded — and by what?' over a grounded, entity-resolved knowledge base of textual critique receipts + benchmark-dominance edges (no LLM call at query time). Call with a family (e.g. 'rag', 'peft', 'kvcache') and a method (e.g. 'SnapKV', 'LoRA') to get a verdict: how superseded it is, WHO critiques it (verbatim quotes + the citing paper), WHO beats it on benchmarks (winner, numbers, condition, source paper), and the not-yet-superseded alternatives in the same sub-problem. Omit method to get the whole-family map: most-superseded baselines, competition sub-problems, and the live frontier. Method names are matched case- and spacing-insensitively, with did-you-mean suggestions on a miss. Use this when choosing or reviewing a technique for a known problem area, or to check whether a baseline a paper relies on has been beaten. Does not require a Pro API key. Covers ~10 builder-problem families and growing; the family parameter lists them, or pass family='list' for the live set. Coverage caveat: evidence is drawn only from arXiv benchmark tables, so 'superseded' means a method was beaten in a published comparison (not that it is dead or unusable), production frameworks (LangChain, LlamaIndex, etc.) appear only as baselines and never as winners, and results are a literature signal rather than a deployment recommendation. GROUNDING — how far to trust an individual receipt: every claim passes a deterministic gate against the source paper's raw LaTeX (a critique must carry a verbatim quote shingle found in the source; a benchmark edge must have every one of its numbers present there), so a fabricated quote or table cell cannot enter the KB. What the gate does NOT verify is ATTRIBUTION: the quote is real but its subject may be class-level or a pronoun ('these methods', 'they') rather than the named method, so tying a receipt to one specific method is sometimes an inference. No end-to-end precision number has been measured on this endpoint — read the verbatim quote and its citing paper before repeating a verdict, and cite the source rather than asserting supersession as fact.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items per list — receipts, dominance edges, frontier (3–50, default 12). | |
| family | No | Builder-problem family to query, e.g. 'rag' (retrieval-augmented generation), 'peft' (parameter-efficient fine-tuning), 'kvcache' (KV-cache compression). Omit it (or pass an unknown family like 'list') to get the live list of available families to pick from — start here if you don't know the family for a method. | |
| method | No | Method to check, e.g. 'SnapKV', 'H2O', 'StreamingLLM' (case/spacing-insensitive). Omit to get the whole-family map instead of a single-method verdict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| found | No | |
| label | No | |
| stats | No | |
| family | No | |
| method | No | |
| message | No | |
| summary | No | |
| verdict | No | |
| frontier | No | |
| beaten_by | No | |
| first_seen | No | |
| description | No | |
| sub_problem | No | |
| suggestions | No | |
| anchor_arxiv | No | |
| anchor_title | No | |
| sub_problems | No | |
| criticized_by | No | |
| methods_ranked | No | |
| most_superseded | No | |
| superseded_rank | No | |
| beaten_by_papers | No | |
| available_families | No | |
| newer_alternatives | No | |
| critiqued_by_papers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds substantial behavioral detail beyond that. It discloses that there is no LLM call at query time, that matching is case- and spacing-insensitive, that evidence is drawn only from arXiv benchmark tables, that production frameworks never appear as winners, and that the grounding gate checks only receipt authenticity, not attribution accuracy. It even warns that no precision number has been measured and advises citing the source rather than asserting supersession as fact. That is unusually transparent about limitations and is not contradicted by any annotation.
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 long but every paragraph earns its place: the first paragraph defines the tool's question and answer shape, the second covers when to use it and the coverage caveat, and the third explains trust boundaries. It front-loads the most important information. A small deduction because the grounding/attribution paragraph is dense and could be tightened, and the phrasing 'GROUNDING — how far to trust an individual receipt' repeats a caveat that could be absorbed into the previous paragraph. It is still well structured and not padded.
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 complex read-only research tool with no required parameters and a rich output schema, the description covers everything an agent needs: query modes, inputs, output items, limitations, trust model, and source coverage. The output schema exists and is structured, so the description is not responsible for enumerating return fields. The only minor omission is that the description doesn't mention pagination or default behavior for limit, but that is documented in the schema. Overall this is one of the more complete and decision-ready tool descriptions an agent could encounter.
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 baseline is 3, but the description adds meaning beyond the property descriptions. It explains that omitting method yields a whole-family map, that omitting family (or passing 'list') yields the live family list, and it illustrates valid values ('rag', 'peft', 'kvcache', 'SnapKV', 'LoRA'). It also clarifies the matching behavior and the role of limit. The one gap is that the description doesn't explicitly define what a 'family' is beyond examples and doesn't enumerate all families, but the schema plus description is sufficient for confident invocation.
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 by stating exactly what question the tool answers: 'for my problem, is the method I use superseded — and by what?' and attaches that to a concrete knowledge base. It names the input types (family and method) and the output (a verdict, critiques, benchmark edges, alternatives), and is clearly distinguishable from siblings like find_gaps or ask_library. It covers both single-method and whole-family query modes, which is a level of specificity beyond a generic verb+resource statement.
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 says explicitly when to use this tool: when choosing or reviewing a technique, when checking whether a baseline has been beaten, and when exploring a family via the whole-family map. It also gives a strong 'when-not' signal: it is a literature signal, not a deployment recommendation, so the agent knows not to treat it as a definitive endorsement. The did-you-mean behavior and family='list' route are also spelled out, so an agent knows what to do when uncertain about inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_watchesCheck WatchesARead-onlyInspect
Pull new matching papers since the last digest delivery, in the same shape as search_papers results. Optionally scope to one watch by watch_name OR watch_id; omit both for all watches. Read-only and idempotent — does NOT advance any watermark (only digest delivery does), so it is safe to call repeatedly (no mark-on-read). This is the in-session 'anything new on my watches?' pull. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hits to return (max 100). | |
| watch_id | No | Scope to one watch by UUID. Provide this OR watch_name, or neither for all. | |
| watch_name | No | Scope to one watch by name. Provide this OR watch_id, or neither for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | New watch matches (check_watches). |
| mode | No | Search mode actually applied. |
| note | No | |
| page | No | |
| sort | No | Search sort order actually applied. |
| limit | No | |
| since | No | Watermark the hits were computed from, or null on first run. |
| topic | No | |
| total | No | Total results available for the query. null when the count was skipped (query-less browse, or the count query timed out). |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses idempotency, that no watermark is advanced, that only digest delivery advances it, and that there is no mark-on-read. It also states the required SF_API_KEY. These are meaningful behavioral details that the annotations do not provide.
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?
Four sentences, each earning its place: the action, the scoping rule, the read-only idempotent behavior, the use case, and the auth requirement. The most decision-relevant information 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?
With an output schema present, the description covers return shape via the search_papers reference. It covers side effects, scoping, authentication, and use case. For a tool with three optional parameters and a read-only safety profile, nothing essential 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 all three parameters. The description adds a concise prose explanation of the OR relationship between watch_name and watch_id and the default 'all watches' behavior, but it does not substantially go beyond what the schema already states.
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 ('Pull'), a clear resource ('new matching papers since the last digest delivery'), and the same shape as search_papers results. It also distinguishes scoping modes and contrasts with the digest-delivery mechanism. This makes the tool's purpose immediately distinct from siblings like list_watches, preview_watch, and search_papers.
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 context for when to use the tool: the in-session 'anything new on my watches?' pull, scoped optionally by watch_name or watch_id, or all watches when both are omitted. It does not explicitly name alternatives or state when-not-to-use conditions, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
co_author_graphCo-Author GraphARead-onlyInspect
Find the co-authorship neighborhood of one or more authors. Given a list of author_ids, returns edges {from, to, papers_count, last_collab_year} where 'from' is one of the input authors and 'to' is any co-author appearing on a shared paper within the window. Use for AC reviewer triage (find conflicts), disambiguating researchers (who do they actually work with?), or expanding an author seed into a research community. window_years defaults to 10. Result is capped at 500 edges, sorted by papers_count DESC.
| Name | Required | Description | Default |
|---|---|---|---|
| author_ids | Yes | Author IDs to query (1-25). Get author IDs via the find_author tool. | |
| window_years | No | Only count co-authorships from the last N years (default 10, max 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| edges | No | Co-authorship edges {from, to, papers_count, last_collab_year}. |
| edge_count | No | |
| window_years | No | |
| queried_author_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses specific behavior: results are capped at 500 edges, sorted by papers_count DESC, and computed within the window_years window. It also clarifies edge direction semantics ('from' is an input author, 'to' is a co-author). These are valuable operational details not in the annotation.
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 about 80 words and front-loads the core purpose, then adds the output shape, use cases, and key limits. 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?
The tool is a read-only query with 100% parameter documentation and an output schema. The description adds the cap, ordering, default window, and use cases, leaving no critical behavior uncovered.
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 baseline is 3. The description links author_ids to the 'from' output field and window_years to the 'within the window' constraint, but those semantics are largely inferable from the schema. No substantial parameter nuance is added.
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 first sentence names a specific verb and resource: 'Find the co-authorship neighborhood of one or more authors.' It goes on to define the exact edge structure, and no sibling tool covers co-authorship graphs, so it is easy to distinguish.
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 lists three explicit use cases: AC reviewer triage, researcher disambiguation, and expanding seed authors into a community. It also points to find_author as the source for author IDs in the schema, giving a prerequisite. It doesn't explicitly mention when not to use the tool, but the use-case list is clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_collectionCreate CollectionAInspect
Create a new named collection. MUTATES. If a collection with that name already exists, returns the existing one (get-or-create — never errors on duplicate). Use "/" to nest under a folder, e.g. "AgentOPA/Formal" — the folder is derived from the name, so there is no parent to create first. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the collection, e.g. 'KV-cache compression'. Use '/' to nest: 'AgentOPA/Formal' files it under an 'AgentOPA' folder. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds substantial behavioral context: the operation is a mutation, duplicates are idempotent (get-or-create, never errors), folder hierarchy is derived from the name, and SF_API_KEY is required. This goes well beyond the 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?
The description is compact and front-loaded: it opens with the primary purpose and mutation warning, then covers duplicate behavior, nesting syntax, and authentication in three purposeful sentences. Every sentence adds needed information 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?
Given a single required parameter, complete schema coverage, an output schema, and clear annotations, the description covers everything an agent needs: mutation semantics, duplicate handling, folder derivation, and auth. There are no material 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 coverage is 100% for the single 'name' parameter, so the schema already documents the parameter. The description adds value by clarifying the nesting semantics ('/' creates a folder path) and that the folder is derived entirely from the name, plus the duplicate behavior. This exceeds the baseline for high schema coverage.
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 ('Create') on a specific resource ('a new named collection') and immediately flags that it mutates state. It also distinguishes itself from read-only siblings by noting the get-or-create behavior, so an agent can tell it apart from list_collections or add_to_collection.
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, actionable context: create a collection by name, duplicates return the existing collection, and '/' nesting means no parent must be created first. It does not explicitly name alternative tools for when not to use it, but the behavior guidance is specific enough for an agent to make the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_watchCreate WatchAInspect
Create a standing watch — evaluated daily against newly-indexed papers, surfacing new matches via the email digest and via check_watches. MUTATES. Get-or-create by name (re-creating with an existing name returns it unchanged — never errors on duplicate). TWO forms: (1) the v2 STRUCTURED filter via criteria (collections/authors/categories/text/has_code/min_novelty/similar, AND-composed) — the composable, agent-tunable form, recommended; tune it with preview_watch first, and edit later with update_watch. Structured watches rank by 'rising' (forecasted breakout impact) by default, and tighten with min_impact_pct for an anti-noise watch that surfaces only the breakout papers in your niche. (2) a single legacy seed selector (q OR collection_name OR collection_id OR anchor_paper_id); if criteria is given it takes precedence. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Semantic/keyword topic seed. One seed selector only. | |
| name | Yes | Label for the watch, e.g. 'novel KV-cache work'. | |
| category | No | Watch an arXiv category (e.g. 'cs.LG'), filtered by novelty_min. One seed selector only. | |
| criteria | No | v2 STRUCTURED filter (collections/authors/categories/text/has_code/min_novelty/similar). When provided, this defines the watch (kind='filter') and the single-selector seeds above are IGNORED. This is the composable, agent-tunable form — call preview_watch first to tune it. | |
| author_id | No | Watch an author's new work, by author ID. One seed selector only. | |
| novelty_min | No | Only surface papers at/above this novelty score (0..1). The signal/noise knob — raise it for 'only tell me when it matters'. Default 0.5. | |
| recency_days | No | For a structured (criteria) watch: only consider papers from the last N days (default 7; the 'cites' relation uses 30). | |
| collection_id | No | Watch the neighborhood of a collection by UUID. One seed selector only. | |
| anchor_paper_id | No | Watch papers similar to this arXiv ID. One seed selector only. | |
| collection_name | No | Watch the neighborhood of a collection by name (resolved by the backend). One seed selector only. | |
| scope_to_citations_of | No | Watch new papers citing this arXiv ID. One seed selector only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states MUTATES, get-or-create semantics, duplicate handling ('never errors on duplicate'), criteria precedence, default ranking behavior, and the requirement for SF_API_KEY. Annotations only indicate readOnlyHint=false and destructiveHint=false, so the description adds meaningful behavioral context. Minor gap: it doesn't describe what the response contains, but an output schema exists.
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 organized: it front-loads the core purpose and mutation warning, then explains get-or-create, then the two forms and their trade-offs. Every sentence carries meaningful guidance. It is long because the tool has two forms and many parameters, but it earns its length; a small amount of redundancy (e.g. repeating that criteria is recommended) exists.
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 an 11-parameter tool with nested objects, a full output schema, and many siblings, the description provides comprehensive context: how to choose between forms, what the default ranking is, how to tighten it, get-or-create semantics, auth requirements, and how it relates to preview_watch/update_watch/check_watches. No critical operational guidance 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 coverage is 100%, so parameters are already well documented. The description adds valuable semantic guidance beyond the schema: explaining which fields are AND-composed, that criteria takes precedence over legacy seeds, the 'rising' default rationale, and the anti-noise min_impact_pct usage. Some structured sub-fields (e.g. collections.relation) are more detailed in the schema than the description, but the description adds enough to justify above-baseline.
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 ('Create'), a resource ('standing watch'), and its core behavior (evaluated daily against newly-indexed papers, surfacing matches via email digest and check_watches). It also distinguishes the v2 structured form from the legacy seed form, clearly separating this from siblings like preview_watch and update_watch.
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 when to use the structured criteria form (recommended, agent-tunable), advises tuning with preview_watch first, points to update_watch for later edits, and notes the get-or-create duplicate behavior. It also explains when the legacy seed selector applies and that criteria takes precedence, giving clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_watchDelete WatchADestructiveInspect
Delete a watch, addressed by watch_id OR name. MUTATES. Idempotent: deleting a non-existent watch is a no-op (no error). To change a watch in place (rename / novelty_min / retarget criteria) use update_watch instead of delete-and-recreate. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the watch to delete. Provide this OR watch_id. | |
| watch_id | No | UUID of the watch to delete. Provide this OR name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation fact is not new. The description adds valuable behavioral context beyond the annotations: the operation is idempotent, a missing watch produces no error, and SF_API_KEY is required. These details meaningfully inform an agent's expectations about side effects and failure modes.
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 and front-loaded: the core action comes first, followed by the idempotency caveat, the update_watch alternative, and the auth requirement. Every sentence earns its place, with 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?
For a simple two-parameter delete tool with an output schema and destructive annotations, the description is highly complete. It covers the core action, idempotency, the alternative tool for in-place changes, and auth. The only minor gap is the lack of explicit precedence or conflict behavior when both name and watch_id are provided, but that is a small omission given the schema already marks them as alternatives.
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 input schema already documents both params with 100% coverage, so the baseline is 3. The description reinforces the 'watch_id OR name' relationship, which is useful, but it does not add extra semantics such as what happens if both are supplied or whether one takes precedence. The schema descriptions already carry most of the parameter 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?
The description states the exact operation: 'Delete a watch' and identifies how the resource is addressed (by watch_id OR name). It also explicitly distinguishes itself from update_watch, so an agent can tell this delete tool apart from other watch-related siblings without opening schemas.
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 when-to-use guidance and names the alternative: 'To change a watch in place ... use update_watch instead of delete-and-recreate.' It also clarifies an important edge case: deleting a non-existent watch is a no-op, which prevents the agent from treating missing IDs as errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
embed_textEmbed TextARead-onlyInspect
Embed a text string into a 768-dim Gemini Flash vector. Use for HyDE-style retrieval: (1) write a hypothetical short paper that would perfectly answer the user's query, (2) embed it with task_type='RETRIEVAL_DOCUMENT' (default — matches the corpus embedding side), (3) pass the resulting embedding back through search-style tools to find real papers nearest to the hypothetical. task_type='RETRIEVAL_QUERY' matches the query side and is useful for direct user-query embedding without HyDE. Pro-only — requires an SF_API_KEY on a Pro account; anonymous and free callers get a 403 pro_required. Cost: ~$0.0001/call; rate-limited at 30/minute per API key.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to embed (1-8000 chars). For HyDE flows this is your hypothetical answer/abstract. | |
| task_type | No | RETRIEVAL_DOCUMENT (default) matches paper-side embeddings — use for HyDE. RETRIEVAL_QUERY matches query-side semantic search. | RETRIEVAL_DOCUMENT |
Output Schema
| Name | Required | Description |
|---|---|---|
| dims | No | |
| model | No | |
| embedding | No | The embedding vector (768-dim Gemini Flash). |
| task_type | No | |
| dimensions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only, and the description adds materially beyond that: Pro-account API-key requirement, 403 pro_required for anonymous/free callers, approximate cost per call, and 30/minute rate limit. It also clarifies that task_type changes which side (corpus/query) the embedding aligns with.
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 with the core purpose and follows with a numbered workflow, task-type guidance, and operational constraints. Every sentence carries distinct information about how, when, or under what conditions to call the tool.
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 output schema exists, so the return embedding format need not be restated. The description covers the workflow, parameter semantics, auth prerequisites, failure mode, cost, and rate limit, leaving no practical gap 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 100%, so the baseline is 3; the description then adds value by tying text to the hypothetical-answer step and task_type to embedding side. The schema already documents defaults and enum semantics, so the description's incremental parameter meaning is clear but not exhaustive.
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 the exact operation — 'Embed a text string into a 768-dim Gemini Flash vector' — with a specific verb, resource, and dimensional output. It also frames the embedding in the context of HyDE-style retrieval, distinguishing it from sibling tools that operate on papers/collections rather than producing embeddings.
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 gives a concrete three-step HyDE recipe, explains when to use RETRIEVAL_DOCUMENT vs RETRIEVAL_QUERY, and explicitly routes the output to 'search-style tools.' It also states the Pro-only constraint and 403 failure mode, so an agent can select the tool only when credentials qualify.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_fulltextFetch Full TextARead-onlyInspect
Extract paper content from an arXiv paper's LaTeX source, falling back to PDF text. Two modes: 'results' (default) returns ~800 chars of results/experiments + up to 3 table captions — lean, ideal for checking a reported number. 'all' returns full paper sections (abstract, introduction, related work, method, results, conclusion) at up to 3000 chars each + 5 table captions, ~15KB, so prefer 'results' unless you need the whole paper. Content is available for ~95% of arXiv papers; a 404 means neither LaTeX nor PDF extraction yielded text. May take a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| arxiv_id | Yes | arXiv ID of the paper | |
| sections | No | 'results' (default): lean ~800-char results/experiments excerpt + table captions. 'all': full paper (abstract, intro, method, results, conclusion, related work) — much larger payload. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Where the text came from (e.g. arxiv). |
| arxiv_id | No | |
| sections | No | Per-section text (sections='all'). |
| results_text | No | Results/experiments excerpt (default 'results' mode). |
| table_captions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and destructiveHint already covering safety, the description adds substantial behavioral detail: LaTeX-to-PDF fallback, mode-specific payload sizes, ~95% availability, 404 semantics, and latency. This goes well beyond the annotations and helps the agent anticipate outcomes.
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 every sentence earns its place: behavior, mode comparison, size estimates, availability, and failure semantics. It is front-loaded with the core extraction behavior and uses structure to separate the two modes clearly.
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 two-parameter read-only tool with an output schema, the description covers what the tool does, how the modes differ, what the fallback behavior is, failure meaning, and expected latency. Nothing critical is missing for an agent to invoke 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 100%, so the baseline is 3. The description adds meaningful semantics for the 'sections' parameter, including default behavior, approximate character counts, table captions, and the 'ideal for checking a reported number' use case, which is more than the schema alone provides.
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 extracts paper content from arXiv LaTeX source with PDF fallback, which is specific and actionable. However, it does not explicitly differentiate from sibling tools like get_paper, leaving some inference to the agent.
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 mode-selection guidance, telling the agent to prefer 'results' unless the whole paper is needed. It does not address when to choose this tool over sibling alternatives such as get_paper or search_papers, so it is clear but not fully exclusive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_authorFind AuthorARead-onlyInspect
Two-mode author tool. Provide exactly one of q or id. Q-MODE (q=...): search for researchers by topic or name — uses embedding similarity for topics ('efficient LLM inference'), fuzzy matching for names ('Yann LeCun'). Returns a list of matching authors with author_id, name, h_index, total_papers, primary_field, research_topics. ID-MODE (id=...): look up a single author profile by author_id (obtained from a previous q-mode call or from co_author_graph results). Returns h-index, total citations, global rank, primary field, novelty score distribution, research topics, code/venue scores, years active, and their top 10 papers by rank score.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Topic or researcher name to search (q-mode). Returns a list of matching authors. Examples: 'efficient transformer training', 'Geoffrey Hinton'. | |
| id | No | Author ID for direct profile lookup (id-mode). Returns the single author profile with top 10 papers. Get IDs from q-mode results or co_author_graph. | |
| field | No | (q-mode only) Filter by primary research field e.g. 'cs.LG', 'cs.CV', 'cs.CL'. | |
| limit | No | (q-mode only) Max results to return (default 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| rank | No | |
| query | No | |
| total | No | |
| authors | No | Matching authors (q-mode). |
| h_index | No | |
| top_papers | No | Top papers by rank (id-mode profile). |
| search_type | No | |
| total_papers | No | |
| primary_field | No | |
| research_topics | No | |
| total_citations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond annotations: the two-mode branching behavior, how queries are matched (embedding similarity vs fuzzy matching), and the exact return fields for both modes.
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 well-structured, front-loaded with the key usage rule, and organized into clear Q-MODE and ID-MODE sections. Every sentence contributes either usage guidance or return-value detail, with 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?
For a read-only, two-mode lookup tool with a full input schema and an output schema, the description covers mode selection, the exactly-one rule, q-mode-only parameters, source of IDs, and detailed return contents for both modes. Nothing essential is missing 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 100%, so the schema already documents all four parameters. The description adds important cross-parameter context not fully captured by the schema: the requirement to provide exactly one of q or id, and the association of field and limit with q-mode only. This goes beyond the baseline of 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?
The description states a clear, specific purpose with two explicit modes: searching for authors by topic/name and looking up a single author profile by ID. It distinguishes itself from sibling tools like search_papers and co_author_graph by focusing on author identity as the resource and by referencing where IDs come from.
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 operational guidance: 'Provide exactly one of q or id', explains what each mode does, and identifies q-mode-only parameters. It also tells the agent where to obtain author IDs. However, it does not explicitly state when not to use this tool versus sibling tools, stopping short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_gapsFind Research GapsARead-onlyInspect
Find important work you HAVEN'T saved, for a collection or topic — a 'what am I missing?' analysis. Returns two buckets: foundational_gaps (canonical citation-graph anchors in the niche, not in your library) and frontier_gaps (recent high-novelty work in the niche, not yet saved). Provide exactly one seed: collection_name OR collection_id OR topic. The backend derives the niche, runs lineage + recent-novelty search, and subtracts your saved set. Read-only. Requires SF_API_KEY (it needs your library to subtract) and is a Pro feature — free accounts receive an upgrade prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max gaps per bucket (max 50). Default 10. | |
| scope | No | Which gaps to surface: 'foundational' (canonical anchors you're missing), 'frontier' (recent novel work you haven't saved), or 'both' (default). | both |
| topic | No | Analyze gaps for a free-text topic/area. Provide exactly one seed. | |
| collection_id | No | Analyze gaps for a collection by UUID. Provide exactly one seed. | |
| collection_name | No | Analyze gaps for a collection by name (resolved by the backend). Provide exactly one seed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No | |
| frontier_gaps | No | Recent high-novelty work you haven't saved. |
| foundational_gaps | No | Canonical anchors in the niche not in your library. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, it discloses that the tool subtracts the user's saved set, derives the niche from the seed, runs lineage and novelty searches, and requires SF_API_KEY plus Pro access. It also states the free-account upgrade prompt behavior, adding valuable operational 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 compact, front-loads the core value proposition, and every sentence adds either semantics, constraints, or operational context. It avoids repeating schema details and remains easy to scan.
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 the annotations covering safety, the description supplies the remaining context needed to select and invoke the tool correctly: seed exclusivity, bucketing logic, auth/Pro requirement, and behavior. Nothing critical 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 coverage is already 100%, but the description adds the critical 'exactly one seed' constraint and explains what each bucket means, mapping to the scope enum. It reinforces that collection_name is resolved by the backend, which is useful beyond the raw 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 names a specific verb and resource ('find important work you HAVEN'T saved') and clarifies the output as two gap buckets. This distinctly separates it from sibling search and lineage tools, which query saved or cited work rather than subtracting the user's library.
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 clearly frames when to use the tool ('a what am I missing? analysis') and specifies the exact-seed rule. It does not explicitly contrast with alternatives like search_papers or get_foundational_lineage, but the context makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_citationsGet CitationsARead-onlyInspect
Get the citation graph for a paper, sorted by citing-paper rank_score (highest-impact first). 'citing' = outgoing references this paper cites; 'cited_by' = incoming citations from other papers. Default response is a lean 12-field shape per paper — pass verbose=true for the full 28-field shape.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of papers to return (max 50) | |
| fields | No | Comma-separated list of fields to return (e.g. 'arxiv_id,title,llm_summary,llm_novelty_score'). If omitted, returns the lean 12-field default unless verbose=true. | |
| verbose | No | If true, returns the full 28-field paper shape. Default false returns the lean 12-field set. Ignored when `fields` is provided. | |
| arxiv_id | Yes | arXiv ID of the paper | |
| direction | No | 'citing' = outgoing references this paper cites; 'cited_by' = incoming citations from other papers | cited_by |
| exclude_ids | No | arXiv IDs to exclude from results (for deduplication across chained calls) |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | Search mode actually applied. |
| note | No | |
| page | No | |
| sort | No | Search sort order actually applied. |
| limit | No | |
| topic | No | |
| total | No | Total results available for the query. null when the count was skipped (query-less browse, or the count query timed out). |
| papers | No | Matched / returned papers. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful non-obvious behavior: ranking by impact score, the meaning of each direction, and the 12-field versus 28-field response shape, going beyond the schema's field-level details.
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 tightly packed sentences provide the key behavior, direction definitions, and response shape with no filler. The most important information is front-loaded, and each 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?
With a rich output schema, full parameter documentation, and read-only annotations, the description has little left to cover. It successfully adds the sort order, direction semantics, and default output shape, making the tool fully understandable and callable without missing context.
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 itself documents all six parameters. The description reinforces the verbosity and direction semantics but does not need to compensate for undocumented parameters, keeping the score at the baseline.
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 ('Get the citation graph for a paper') and adds a distinguishing sorting behavior ('sorted by citing-paper rank_score'). It also defines both direction values, making the tool's scope unambiguous and separating it from related graph tools like co_author_graph.
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 clearly explains the two directions ('citing' vs. 'cited_by') and notes the default versus verbose response shape, giving the agent a solid sense of what the tool will do in normal use. It does not explicitly compare against sibling tools or say when not to use it, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_field_orientationGet Field OrientationARead-onlyInspect
Returns CANDIDATE FOUNDATIONAL PAPERS for a research topic — cheap retrieval only, no synthesis. Ranks papers by a blend of citation count (0.6 weight, captures importance) and semantic similarity to your topic (0.4 weight). Use this to bootstrap a literature survey or get a fast sense of the landscape. For a synthesized orientation report (key concepts, open problems, reading order), use the /field-guide skill which calls this tool internally. Does not require a Pro API key — no LLM calls are made.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of candidate papers to return (5–30, default 15). | |
| topic | Yes | Research area to orient on. Be specific for better results. Examples: 'diffusion models for protein structure prediction', 'efficient attention mechanisms for long-context LLMs', 'graph neural networks for molecular property prediction'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | Search mode actually applied. |
| note | No | |
| page | No | |
| sort | No | Search sort order actually applied. |
| limit | No | |
| topic | No | |
| total | No | Total results available for the query. null when the count was skipped (query-less browse, or the count query timed out). |
| papers | No | Matched / returned papers. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds meaningful behavioral context beyond that: it performs no synthesis, makes no LLM calls, and does not require a Pro API key. The ranking weights (0.6 citation count, 0.4 semantic similarity) also disclose exactly how results are scored. This is rich, honest behavioral 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?
The description is concise and front-loaded with the core result, followed by ranking behavior, use cases, the alternative, and cost characteristics. Every sentence earns its place, and there is no fluff or repetition of schema content. The structure makes the tool easy to scan and act on.
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 only two simple parameters, full schema descriptions, an output schema, and read-only annotations, the description is complete. It covers what the tool returns, how results are ranked, when to use it, when to use the alternative, and its cost/API-key implications. 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 parameters are already fully documented in the input schema, including defaults, ranges, and examples. The description adds context around ranking behavior but does not need to repeat parameter syntax. Baseline 3 is appropriate because the schema carries the parameter-semantics burden and the description adds modest value.
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: 'Returns CANDIDATE FOUNDATIONAL PAPERS for a research topic.' It clearly distinguishes itself as 'cheap retrieval only, no synthesis,' setting it apart from synthesis-oriented tools and the /field-guide skill. The ranking formula further clarifies exactly what the tool produces.
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 when to use it: 'to bootstrap a literature survey or get a fast sense of the landscape.' It also names the alternative: 'For a synthesized orientation report... use the /field-guide skill,' and notes that the skill calls this tool internally. This gives clear routing guidance between the tool and the more comprehensive option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_foundational_lineageGet Foundational LineageARead-onlyInspect
Returns the FOUNDATIONAL WORK FOR A PAPER'S NICHE via the citation graph — the relative question ('what is foundational for THIS paper's specific sub-field', often itself only modestly cited) rather than the obvious global landmarks. Anchors on the paper, takes its embedding neighbourhood as the niche, and ranks what the niche cites into three tiers: niche_roots (the niche-specific foundations, ranked by how specifically the neighbourhood builds on them — surfaces canonical anchors that semantic search misses), field_level (broader secondary foundations), and discipline (universal landmarks like Attention Is All You Need, collapsed out of the way). Each paper carries cited_by_in_niche evidence so the claim is grounded, not asserted. Use this to trace prior art / lineage for a paper, or to find the canonical methods a niche is built on. Complements get_field_orientation (which is topic-anchored and retrieval-only). No Pro key and no LLM calls required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max papers in each of the niche_roots and field_level tiers (5–40, default 15). | |
| scope | No | Niche breadth: 'narrow' (~100 nearest papers, tightest sub-topic — surfaces the few-citation niche root), 'field' (~200, default), 'broad' (~400, wider area foundations). | field |
| anchor_paper_id | Yes | arXiv ID of the paper to anchor on, e.g. '2504.04704' or '2504.04704v2'. The niche is built from this paper's embedding neighbourhood. | |
| generality_ceiling | No | When true (default), demote universally-cited landmark papers into the collapsed `discipline` tier so the niche-specific foundations lead. Set false to keep landmarks in the foundational tiers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| scope | No | |
| tiers | No | Foundational tiers: niche_roots → field_level → discipline. |
| anchor | No | |
| discipline | No | |
| niche_size | No | |
| field_level | No | |
| niche_roots | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds substantial behavioral context: the tool ranks outputs into three tiers, grounds each paper with cited_by_in_niche evidence, collapses universal landmarks into the discipline tier, and surfaces niche-specific anchors that semantic search misses. It also discloses that no LLM calls are required, which is useful operational context beyond 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 front-loaded with the core purpose, then progresses through output tiers, evidence quality, usage, sibling comparison, and access requirements. Despite covering a nuanced tool, every sentence earns its place and there is no repetitive or filler content. It is dense but 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 fully covers what the tool does, how the output is structured, how to interpret the tiers, how to choose scope, and how it relates to a sibling tool. An output schema exists, so the detailed return shape does not need to be restated. For a complex niche-mapping tool, the description is complete enough for an agent to select and invoke 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?
All four parameters are already fully described in the schema (100% coverage), including defaults, ranges, enums, and behavioral effects like generality_ceiling demoting landmarks. The description reinforces the tiering concepts but does not add much parameter-level meaning beyond what the schema already provides. Baseline 3 is appropriate here.
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: 'Returns the FOUNDATIONAL WORK FOR A PAPER'S NICHE via the citation graph.' It precisely distinguishes this from global citation landmarks and explicitly contrasts itself with the sibling tool get_field_orientation. An agent can immediately tell what this tool does and how it differs from nearby 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 direct usage guidance: 'Use this to trace prior art / lineage for a paper, or to find the canonical methods a niche is built on.' It also names the relevant sibling, get_field_orientation, and explains the difference ('topic-anchored and retrieval-only'). It even notes operational constraints ('No Pro key and no LLM calls required'), so an agent knows when this is a cheap, safe option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paperGet PaperARead-onlyInspect
Get full details for one or more papers by arXiv ID. Pass a single-element array for one paper; pass multiple IDs to batch-fetch up to 50 papers in one call. Pass format='bibtex' to get a .bib citation entry (bibtex is single-paper only; for multi-paper bibtex, call repeatedly). Default returns a lean 13-field shape (arxiv_id, title, authors, year, categories, has_code, github_url, citation_count, venue_name, llm_summary, llm_significance, llm_novelty_score, impact_pct — where impact_pct is the ML-forecast impact percentile 0-100 computed WITHIN the paper's own arXiv-category cohort, so it is a cohort-relative rank rather than an absolute score, and is NULL on older papers outside the recent ~90-day scoring window). Pass verbose=true for the full shape with structured extraction (method_name, contribution_type, task_category, datasets, baselines) and institution_tags. Use fields='arxiv_id,title,abstract' to select an exact subset, or fetch_fulltext with sections='all' for the full paper.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated list of fields to return (e.g. 'arxiv_id,title,llm_summary,abstract'). If omitted, returns the lean 12-field default unless verbose=true. | |
| format | No | Response format. 'json' (default) returns structured paper data. 'bibtex' returns a .bib citation entry. Bibtex mode uses the first ID in arxiv_ids. | |
| verbose | No | If true, returns the full 28-field paper shape (method/task/dataset extraction, application_domain, baselines, etc.). Default false returns the lean 12-field set. Ignored when `fields` is provided. | |
| arxiv_ids | Yes | One or more arXiv IDs. Single-paper lookup uses [id]; batch lookup passes multiple IDs (max 50). Example: ['2407.15831'] or ['2407.15831', '2402.09906']. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| mode | No | Search mode actually applied. |
| note | No | |
| page | No | |
| sort | No | Search sort order actually applied. |
| count | No | |
| limit | No | |
| topic | No | |
| total | No | Total results available for the query. null when the count was skipped (query-less browse, or the count query timed out). |
| bibtex | No | BibTeX entry (format='bibtex'). |
| format | No | |
| papers | No | Matched / returned papers. |
| message | No | |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses important behavioral details: bibtex is single-paper only and requires repeated calls for multiple papers, impact_pct is a cohort-relative percentile computed within an arXiv-category cohort and is NULL for older papers, and verbose mode returns structured extraction fields. This gives the agent a realistic model of the tool's behavior without needing a call.
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 information-dense and every clause adds useful guidance, but it is structured as one long run-on sentence with many semicolons. It is appropriately sized for the tool's complexity, but breaking it into shorter, structured sentences would improve readability and machine parsing. Front-loading the core purpose is done well.
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 multiple modes (json/bibtex, lean/verbose, batch/single, field selection) and rich output, the description covers all major usage paths. It explains batch limits, format constraints, default vs verbose fields, field subsetting, full-text access, and the special semantics of impact_pct. The presence of an output schema relieves it from documenting every return field, so the description is complete for an agent deciding how to call the 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?
The input schema already covers all four parameters at 100%, so the baseline is 3. The description adds significant value by enumerating the default 13-field shape, explaining what verbose=true adds, giving field-selection examples, and describing batch limits. However, there is an inconsistency: the description says 'lean 13-field shape' while the input schema says 'lean 12-field default,' which could confuse an agent trying to reason about the actual response shape.
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: 'Get full details for one or more papers by arXiv ID.' It clearly distinguishes this tool from siblings like fetch_fulltext by later noting that fetch_fulltext is used for full paper text, while get_paper returns structured metadata and summaries.
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 guidance for batch vs single-paper use, bibtex vs json, lean vs verbose output, and field selection. It also hints at an alternative (fetch_fulltext) for full paper content, though it does not explicitly state when to prefer search_papers or get_citations. The guidance is strong but not fully exhaustive regarding all sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
like_paperLike PaperAInspect
Like a paper — a 'more like this' calibration signal that tunes the user's For You feed toward similar work. INSERT-only and idempotent (liking twice is a no-op, never un-likes). Distinct from save_paper: like expresses taste for ranking; save bookmarks for later reading. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| arxiv_id | Yes | arXiv ID of the paper to like. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations only showing readOnlyHint=false and destructiveHint=false, the description discloses meaningful behavior: INSERT-only, idempotent, never un-likes, and requires SF_API_KEY. This goes beyond the annotations and gives the agent a clear model of side effects.
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 deliver purpose, behavior, sibling distinction, and authentication requirement with no filler. The most important functional trait is front-loaded, and every sentence contributes useful, non-redundant 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?
For a single-parameter mutation tool with an output schema and annotations present, the description covers everything an agent needs: what it does, how it behaves, how it differs from save_paper, and the API key requirement. Nothing essential 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 coverage is 100%, so the schema already documents arxiv_id as 'arXiv ID of the paper to like.' The description adds no new parameter-level detail, but none is needed given the single self-explanatory parameter; 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?
Description opens with 'Like a paper' and explains the purpose: a 'more like this' calibration signal that tunes the For You feed. It explicitly distinguishes itself from save_paper, so an agent can immediately tell what this tool does and what it does not do.
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?
States when to use this tool versus save_paper: 'like expresses taste for ranking; save bookmarks for later reading.' It also explains key constraints—INSERT-only and idempotent—so the agent knows calling it repeatedly is safe and will not un-like.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsList CollectionsARead-onlyInspect
List the authenticated user's collections (named groups of saved papers) with paper counts. Read-only. Use before add_to_collection to see existing collections. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No | |
| collections | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the description's 'Read-only' mostly reinforces the annotation. It adds behavioral context beyond the annotation by specifying authentication requirements ('Requires SF_API_KEY') and scoping behavior to the authenticated user's own collections, which is genuinely useful for invocation.
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 three short sentences with no filler. The primary purpose is front-loaded, followed by behavior, a practical usage hint, and a required precondition. Every sentence contributes meaningful 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?
For a read-only, zero-parameter tool with an output schema, the description is fully adequate. It states the scope, the credentialed access requirement, and the intended preceding use case. The output schema covers return-value details, so nothing critical 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?
The tool has zero parameters and schema coverage is 100%, so the description has no parameter semantics burden. It does usefully indicate that the output includes paper counts, but this is return-value information rather than parameter guidance. Baseline 4 for a zero-parameter tool 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 names the action ('List'), the resource ('the authenticated user's collections'), and adds specific scope and output details ('named groups of saved papers' with 'paper counts'). This is distinguishable from sibling tools like list_library and add_to_collection because it targets collection entities rather than papers or mutations.
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 states when to use this tool: 'Use before add_to_collection to see existing collections.' It also notes the required SF_API_KEY condition. However, it doesn't mention exclusions or when not to use it, such as when the goal is to browse papers rather than collections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_libraryList LibraryARead-onlyInspect
List the authenticated user's saved papers (their library), newest first. Read-only. Use this to review a reading list or to see what's already saved before saving more. Requires SF_API_KEY. SHAPE: agent callers get a lean record — llm_summary (~300 chars) INSTEAD of the abstract, with empty fields omitted rather than sent as null. Each paper also carries the state that makes this a knowledge base rather than a bookmark list: note_text (the user's own recorded verdict, when one exists), is_read, and collections (the axes it is filed under, e.g. 'AgentOPA/G4'). READ note_text FIRST. A paper carrying one was already judged in an earlier session — use that verdict instead of re-reading the paper and re-deriving it. If it is missing, consider recording one with annotate_paper so the next session inherits your conclusion. Pass verbose=true (or fields=...) only when you genuinely need the abstract or the full 28-field shape; the default is ~4x smaller and is the right choice for surveying what you already have.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for paging through a large library. | |
| limit | No | How many saved papers to return (max 100). | |
| fields | No | Comma-separated fields to return, e.g. 'arxiv_id,title,abstract'. Overrides verbose. Library state (note_text/is_read/is_saved/collections) is always included regardless. | |
| verbose | No | Return the full paper shape (including the abstract) instead of the lean default. Costs roughly 4x the tokens — prefer llm_summary unless you specifically need the abstract's wording. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | Search mode actually applied. |
| note | No | |
| page | No | |
| sort | No | Search sort order actually applied. |
| limit | No | |
| topic | No | |
| total | No | Total results available for the query. null when the count was skipped (query-less browse, or the count query timed out). |
| papers | No | Matched / returned papers. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true and destructiveHint=false, the description goes far beyond them. It discloses the lean response shape (llm_summary instead of abstract, empty fields omitted), the knowledge-base fields (note_text, is_read, collections), and behavioral instructions like 'READ note_text FIRST' to reuse prior verdicts. Also it exposes token cost implications of verbose mode. This is rich, non-redundant transparency.
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 every sentence earns its place. It is front-loaded with purpose and usage, then structured into SHAPE and parameter guidance. The formatting with capitalization and line breaks makes it scannable for an agent, and there is no filler or repetition of schema defaults.
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 listing tool, this description is complete: it states the auth requirement (SF_API_KEY), explains the default versus verbose response shape, describes the state fields that matter for downstream decisions, and provides actionable guidance for the agent. The output schema also exists, so return-value documentation is structurally covered. Nothing an agent needs to call this 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 coverage is 100%, so the schema already documents all four parameters. The description adds meaningful context beyond the schema: it explains that verbose is ~4x more token-expensive, that the default lean shape is the right choice for surveying, and that fields overrides verbose while state fields are always included. It does not add new semantics for page/limit, but the existing schema descriptions are sufficient, and the added guidance improves parameter selection.
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: 'List the authenticated user's saved papers (their library), newest first.' This unambiguously distinguishes it from sibling tools like search_papers (search), get_paper (single retrieval), and save_paper (writing). It also states the ordering, making the tool's scope immediately clear.
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 states when to use the tool: 'Use this to review a reading list or to see what's already saved before saving more.' It also provides guidance on when to use verbose mode ('only when you genuinely need the abstract') and suggests a follow-up action with annotate_paper. However, it does not explicitly exclude alternatives by name (e.g., 'use search_papers for discovery'), so it stops short of a full when-not/alternatives treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watchesList WatchesARead-onlyInspect
List the authenticated user's watches with name, a one-line definition summary, last_evaluated_at, and pending_hits (count of new matches since the last digest delivery). Read-only. Use before create_watch to see what's already tracked. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No | |
| watches | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only.' It adds useful context beyond annotations by requiring SF_API_KEY and defining pending_hits as 'new matches since the last digest delivery,' which helps the agent interpret results.
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 three short sentences with the action and output fields front-loaded, followed by usage and auth details. 'Read-only' is somewhat redundant with the annotations, but the overall structure is tight and each sentence contributes 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?
For a zero-parameter, read-only tool with an output schema and safety annotations, the description covers what the tool returns, who has access, and a primary use case. Mentioning sibling tools like check_watches or preview_watch would improve routing, but nothing essential 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?
The tool takes zero parameters, so the schema has nothing to document and the description correctly focuses on output fields instead. This matches the baseline for a no-parameter tool, and no further parameter explanation is needed.
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 uses a specific verb 'List' with a clear resource ('the authenticated user's watches') and enumerates the returned fields. This makes the operation unmistakable and distinguishes it from watch-mutation siblings like create_watch and delete_watch.
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 recommends using this tool before create_watch to see what is already tracked, giving a concrete usage context. It does not mention alternatives like check_watches or preview_watch, but the stated trigger is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_watchPreview WatchARead-onlyInspect
Dry-run a structured filter over recent papers WITHOUT creating a watch — the tuning loop. Returns {window_days, needs_similarity, match_count, sample} so you can iterate (add a category, raise min_novelty, switch the collection relation) before saving with create_watch. Structured watches rank by 'rising' (forecasted breakout impact) by default, and tighten with min_impact_pct for an anti-noise watch that surfaces only the breakout papers in your niche. NOTE: for a similarity filter, match_count is capped at 200 (the cosine fetch window) and so saturates at 200 on broad/hot topics — tune by the sample scores and narrow with categories/min_novelty (or a higher similar floor) rather than relying on match_count alone. Read-only. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| criteria | Yes | The structured filter to test. | |
| recency_days | No | Window in days (default 7; the 'cites' relation uses 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| sample | No | A sample of matching papers. |
| message | No | |
| match_count | No | |
| window_days | No | |
| needs_similarity | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses important behavioral traits: the match_count cap of 200 and saturation on broad/hot topics, that 'similar' uses a default 0.70 cosine floor, and that the 'cites' relation uses a 30-day window. It even warns how to tune around these behaviors rather than relying on match_count alone.
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 every sentence earns its place: purpose, return contract, ranking defaults, anti-noise tuning, the similarity cap caveat, and authentication/read-only status. The most important framing ('Dry-run ... WITHOUT creating a watch') is front-loaded, and the warning is clearly separated with 'NOTE.'
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 complex tool with nested criteria and multiple filter modes, the description is remarkably complete. It covers when to use it, how to iterate, what values to expect, what cap behavior to watch for, and how it relates to create_watch. The presence of an output schema and full schema coverage lowers the burden, and the description still exceeds it.
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?
Although the schema already has 100% parameter coverage, the description adds substantial interpretive value: it explains that 'rising' is the default ranking, that min_impact_pct creates a 'what-is-rising-now' watch, and that match_count saturates at 200 for similar filters. This goes beyond the raw schema and helps the agent choose and tune parameters intelligently.
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-resource pair: 'Dry-run a structured filter over recent papers WITHOUT creating a watch.' It clearly frames the tool as the tuning loop preceding create_watch, and the returned fields (window_days, needs_similarity, match_count, sample) make the purpose concrete and distinct from sibling tools like check_watches or create_watch.
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 explains when to use this tool: iterate on a filter 'before saving with create_watch.' It also gives operational guidance for tuning, such as raising min_novelty, switching the collection relation, and using min_impact_pct for an anti-noise watch. The alternative create_watch is named directly, giving the agent a clear decision boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_collectionRemove from CollectionADestructiveInspect
Remove a paper from a collection, addressed by collection_id OR collection_name. MUTATES (the paper stays in your library; it's only removed from this collection). Idempotent. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| arxiv_id | Yes | arXiv ID of the paper to remove from the collection. | |
| collection_id | No | UUID of the collection. Provide this OR collection_name. | |
| collection_name | No | Name of the collection. Provide this OR collection_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false and destructiveHint=true, and the description goes beyond them by explicitly stating 'MUTATES', explaining that the paper remains in the library, and adding that the operation is idempotent. It also discloses the SF_API_KEY requirement, which is valuable for invocation.
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 and information-dense. It front-loads the core purpose, then clarifies mutation scope, idempotency, and authentication in three short sentences. No sentence is wasted.
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 mutation tool, the description covers the essential operational details: addressing by collection_id or collection_name, mutation scope, idempotency, and required API key. An output schema exists, so return values need not be described. The description is sufficient for an agent to invoke the tool 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 description coverage is 100%, so the schema already documents arxiv_id, collection_id, and collection_name with their meanings. The description adds the 'collection_id OR collection_name' relationship, but this is also present in the schema property descriptions, so the description only minimally enhances parameter understanding.
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: 'Remove a paper from a collection.' It also clarifies the scope by distinguishing between removing from a collection versus keeping the paper in the library, which differentiates it from sibling tools like unsave_paper and add_to_collection.
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 context for when this tool is appropriate: when removing a paper from a collection, and it explicitly notes that the paper stays in the library, implying it is not for removing papers from the library. It does not name sibling alternatives directly, but the scope is clear enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_paperSave PaperAInspect
Save a paper to the authenticated user's Scholar Feed library (bookmark). MUTATES the library and feeds the user's personalization — saved papers are the strongest signal in the For You feed and the email digest. Idempotent: calling it again on an already-saved paper leaves it saved. Requires SF_API_KEY. To file it into a named collection in one step, use add_to_collection (that also saves).
| Name | Required | Description | Default |
|---|---|---|---|
| arxiv_id | Yes | arXiv ID of the paper to save, e.g. '2407.15831'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, and the description adds meaningful behavioral detail beyond that: it mutates the library, feeds personalization signals, is idempotent, and requires SF_API_KEY. This gives the agent important operational expectations 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 efficiently structured: main action first, then mutation warning, personalization effect, idempotency, auth requirement, and a pointer to the relevant alternative. Every sentence contributes useful information without 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 single-parameter, side-effecting tool with an output schema and annotations, the description covers the essential context: what it does, side effects, idempotency, auth needs, and the closest alternative. Nothing critical is missing 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?
There is only one parameter, arxiv_id, and the input schema already describes it fully with an example. The tool description does not add extra parameter-level detail, so a baseline score of 3 is appropriate when the schema carries the semantic 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?
The description uses a specific verb and resource: 'Save a paper to the authenticated user's Scholar Feed library (bookmark).' It clearly frames the operation as creating a bookmark and even distinguishes it from the sibling add_to_collection, which performs a save plus collection filing. This leaves 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 clearly states when to use save_paper: to save/bookmark a paper in the Scholar Feed library. It also names an alternative, add_to_collection, and gives the condition for choosing that instead ('to file it into a named collection in one step'). It does not explicitly exclude other related siblings like like_paper, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_papersSearch PapersARead-onlyInspect
Search Scholar Feed's 600k+ CS/AI/ML paper corpus. Semantic (embedding) search by default, so it finds conceptually related work even when the wording differs. EVERY PARAMETER DOCUMENTS ITS OWN BEHAVIOUR AND COVERAGE LIMITS — read the ones you intend to use; this description covers only what no single parameter can tell you. RETRIEVAL LIMIT: semantic ranking favours recent, stylistically-matched papers and routinely MISSES the old high-citation anchor of a field (H2O for KV eviction, GRIT for unified embedding+generation). To reach a field's canonical work, read the top-5 abstracts for repeated baseline mentions ('we compare against X') and look that name up directly, or call get_foundational_lineage. THREE UNRELATED NOTIONS OF IMPACT, easily confused: proven citations (sort='impactful', min_citations) | a ~90-day forecast percentile that is NULL on older papers and therefore excludes them (sort='trending', impact_min) | GitHub adoption (sort='community', min_stars). YOUR LIBRARY IS MARKED INLINE on authenticated calls: each hit carries is_saved and is_read, and a hit you previously annotated carries note_text — your own earlier verdict. Read note_text INSTEAD of re-deriving a conclusion from the abstract; re-judging a paper you already ruled on is the most common way an agent wastes a research session. is_saved=false is a real measurement; on anonymous calls these keys are absent entirely, so never read a missing is_saved as false. Papers new to you are ranked exactly as before — nothing is demoted for being unseen.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query keywords. REQUIRED unless (a) anchor_paper_id or scope_to_citations_of is set (anchor mode ignores q and returns papers similar to the anchor), or (b) sort is one of 'trending' / 'recent' / 'impactful' — the query-less 'browse the frontier' feed, which is capped to the FIRST 200 RESULTS (paging past offset 200 is a 422; narrow with q= or filters instead). Any other q-less call is a 422, INCLUDING a q-less call with only filters (category/days/...) and a q-less sort='community'. Filters alone do NOT substitute for q — pair them with a browse sort (e.g. category='cs.AI' + sort='recent') or pass q. For 'what's hot in AI right now', either sort='trending' alone or a broad q plus sort='trending' works. | |
| days | No | Limit to papers published within N days | |
| mode | No | Search mode. 'semantic' (default) uses embedding similarity — finds conceptually related papers even without exact keyword matches. 'keyword' uses Postgres full-text search — faster but only matches exact terms. | |
| page | No | Page number | |
| sort | No | Result ranking — a relevance↔impact dial plus time-based and adoption orders. 'relevance' (default) = best topical match. 'balanced' = relevant AND well-cited. 'impactful' = the most-cited (proven-influential) papers among those relevant to the query — use this for 'the important/seminal papers on topic X'. 'trending' = rising/FORECAST impact (impact_pct, last ~90 days) — use for 'what's hot/new in X', NOT for established work. 'recent' = newest first. 'community' = GitHub adoption (stars + star-velocity) — surfaces the papers practitioners are actually running/building on, independent of citations. COVERAGE CAVEAT (the analogue of impact_min's ~90-day hole): an unfetched repo stores 0 rather than NULL, and coverage skews heavily toward recently-published papers, so most older papers with a repo currently rank as 0-star and sink — 'community' reflects measured adoption, not corpus-wide adoption. Proven impact ('impactful'/'balanced') ranks by real citations; 'trending' is a model prediction; 'community' is real-world engineering traction within its window. Pair with get_foundational_lineage for a topic's canonical roots. | |
| task | No | Filter by task e.g. 'image classification', 'question answering' (partial match) | |
| limit | No | Results per page (max 50) | |
| cursor | No | Cursor from previous response's next_cursor for keyset pagination | |
| fields | No | Comma-separated list of fields to return (e.g. 'arxiv_id,title,llm_summary,llm_novelty_score'). If omitted, returns the lean 12-field default unless verbose=true. | |
| dataset | No | Filter to papers that evaluate on a specific dataset e.g. 'MMLU', 'ImageNet' | |
| verbose | No | If true, returns the full 28-field paper shape (method/task/dataset extraction, application_domain, baselines, etc.). Default false returns the lean 12-field set. Ignored when `fields` is provided. | |
| category | No | Filter by arXiv category e.g. 'cs.AI', 'cs.LG' | |
| has_code | No | Filter to papers with a linked code release (has_code=true). Surfaces runnable/reproducible work — pair with min_stars/sort='community' to find the papers practitioners actually adopt. | |
| min_stars | No | Minimum GitHub stars on the paper's linked repo. A proxy for engineering adoption — surfaces work that practitioners are actually running/building on. Pair with sort='community' to rank by it. COVERAGE CAVEAT: a never-fetched repo is stored as 0, not NULL, so this filter cannot distinguish 'no adoption' from 'never measured'. It is applied as 'KNOWN to have >= N stars' — papers whose stars were never fetched are excluded rather than treated as 0-star, so the result is honest but INCOMPLETE: a genuinely popular older paper can be missing simply because nobody measured it. Coverage skews toward recently-published papers and is being backfilled. Use it to filter recent work; for established papers use min_citations instead. | |
| impact_min | No | Minimum impact_pct (0-100), e.g. 80 = top 20% FORECAST impact. This is a RISING-WORK filter: impact_pct is only computed for the last ~90 days, so impact_min restricts results to recent papers predicted to land well AND DROPS everything older. Use it for 'what's rising in X'. Do NOT use it to find the influential/seminal papers in a topic — that excludes the established work; use sort='impactful' instead. | |
| exclude_ids | No | arXiv IDs to exclude from results (for deduplication across chained calls) | |
| method_name | No | Filter to papers introducing/using a specific named method e.g. 'LoRA', 'YOLO', 'DPO'. Case-insensitive substring match on the extracted method_name field. | |
| novelty_min | No | Minimum novelty score (0-1). Use 0.5+ for novel papers. | |
| min_citations | No | Minimum real citation count. Unlike impact_min (a ~90-day FORECAST percentile), this filters on PROVEN citations and keeps established/canonical papers. | |
| task_category | No | Filter by broad research area | |
| anchor_paper_id | No | Return papers similar to this arXiv paper ID. When set, q is ignored and results carry similarity_score. Example: '2407.15831'. | |
| method_category | No | Filter by method category e.g. 'reinforcement learning', 'transformer' | |
| published_after | No | Only papers published on or after this date, 'YYYY-MM-DD'. Use with published_before to bound an arbitrary date window (days only gives a rolling N-day lookback). | |
| published_before | No | Only papers published on or before this date, 'YYYY-MM-DD'. Pair with published_after for an explicit window. | |
| contribution_type | No | Filter by paper's contribution type | |
| github_url_exists | No | Filter on whether the paper has a linked GitHub URL (true = only papers with a repo). Stricter than has_code (which counts any code link). | |
| scope_to_citations_of | No | Restrict search to this paper's citation graph, ranked by relevance to q. Pass the arXiv ID of the paper whose citations you want to search within. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | Search mode actually applied. |
| note | No | |
| page | No | |
| sort | No | Search sort order actually applied. |
| limit | No | |
| topic | No | |
| total | No | Total results available for the query. null when the count was skipped (query-less browse, or the count query timed out). |
| papers | No | Matched / returned papers. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true and destructiveHint=false, but the description goes far beyond that: it discloses the retrieval limit, the recency/style bias that misses canonical papers, the difference between proven citations, forecast impact, and GitHub adoption, and the fact that is_saved=false is meaningful only on authenticated calls. This is a rich behavioral contract that prevents the agent from misinterpreting results.
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 long and uses ALL-CAPS emphasis, which slightly hurts skimmability, but it is well-labeled and information-dense with every section serving a purpose. The front-loaded core definition, followed by retrieval-limit caveats, impact-mode distinctions, and library-state semantics, gives an agent the most important facts early.
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 complexity (27 parameters, 100% schema coverage, and an output schema), the description covers the cross-cutting concerns that no single parameter could convey: retrieval biases, the q-less browse rules, anonymous vs authenticated result differences, and the meaning of saved/read/note_text fields. There is no obvious gap that would prevent an agent from using this tool 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 description coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning by synthesizing the three notions of impact and warning that filters like impact_min and min_stars have coverage holes. It also instructs the agent to read each parameter's own documentation, which is appropriate for 27 parameters. It does not need to repeat schema details, and it contributes enough contextual nuance to warrant a 4.
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: 'Search Scholar Feed's 600k+ CS/AI/ML paper corpus.' It immediately clarifies that semantic embedding search is the default, which differentiates it from keyword search and gives the agent a precise mental model of what the tool does. It also names get_foundational_lineage as the complementary tool for finding canonical work, helping distinguish its scope from a sibling.
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 when-to-use and when-not-to-use guidance: for canonical work it says to read top abstracts or 'call get_foundational_lineage', and for rising work it says 'Do NOT use it to find the influential/seminal papers... use sort='impactful' instead.' It also warns about the q-less 422 cases and when paired filters are needed, giving agents actionable decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsave_paperUnsave PaperADestructiveInspect
Remove a paper from the authenticated user's Scholar Feed library. MUTATES the library. Idempotent: removing a paper that isn't saved leaves it unsaved. Note: the saved library is a superset of all collections, so un-saving a paper ALSO removes it from every collection it was in. To keep it filed in a collection, use remove_from_collection instead (that leaves the paper saved). Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| arxiv_id | Yes | arXiv ID of the paper to remove from the library. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the operation mutates the library, is idempotent, and cascades by removing the paper from every collection. It also flags the auth requirement, giving full transparency about side effects.
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 yet information-dense: purpose, mutation warning, idempotency, collection side effect, alternative tool, and auth requirement all fit in a few sentences. Every sentence adds value and the most critical behavior comes first.
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 single-parameter destructive tool with an output schema and relevant annotations, the description is complete. It covers the operation's effects, edge case behavior, alternative route, and authentication, so an agent has everything needed to invoke 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?
The input schema fully documents the single arxiv_id parameter, so the description does not need to add much. It does not introduce extra parameter-level detail, but the schema coverage is 100%, so the baseline of 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 verb 'remove' and the specific resource: a paper from the authenticated user's Scholar Feed library. It also differentiates itself from remove_from_collection, making its precise scope obvious.
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 tells the agent when to use this tool versus remove_from_collection, with a concrete condition: use remove_from_collection if the paper should remain saved. It also notes the SF_API_KEY requirement for authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_watchUpdate WatchAInspect
Update an existing watch in place — rename, change novelty_min, or RETARGET its structured filter criteria. MUTATES. Address by watch_id OR name. Changing criteria replaces the definition and clears the watch's pending hits (so stale matches don't deliver); the next daily eval repopulates. Structured watches rank by 'rising' (forecasted breakout impact) by default, and tighten with min_impact_pct for an anti-noise watch that surfaces only the breakout papers in your niche. Tune the new criteria with preview_watch first. Requires SF_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Find the watch by its current name. Provide this OR watch_id. | |
| criteria | No | Replace the watch's filter (becomes kind='filter'). Clears pending hits. | |
| new_name | No | Rename the watch. | |
| watch_id | No | Find the watch by UUID. Provide this OR name. | |
| novelty_min | No | New novelty floor (0..1). | |
| recency_days | No | Window for the new criteria. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| watch | No | The created/affected watch, when applicable. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| message | No | Human-readable summary of the outcome. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'MUTATES', clearly disclosing that this is a write operation. It also reveals an important side effect: changing criteria replaces the definition and clears pending hits, with the next daily evaluation repopulating them. This goes well beyond the annotations, which only indicate readOnlyHint=false and destructiveHint=false.
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 and every sentence earns its place. It front-loads the core action and mutation warning, then adds side-effect, tuning, and authentication guidance without unnecessary verbosity.
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 this complexity—nested criteria, multiple update targets, mutual address options—the description covers the essential operational context: mutation, side effects, default ranking behavior, the preview_watch alternative, and the required API key. The output schema reduces the need to explain return values, and the tool is well-scoped for an agent to invoke 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 100%, so the baseline is 3, but the description adds meaningful parameter context: it explains that criteria is a full replacement, that changing it clears pending hits, that 'rising' is the default rank, and that min_impact_pct creates an anti-noise watch. This adds value beyond the raw schema definitions.
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 specific action: updating an existing watch in place, and enumerates what can be updated: rename, novelty_min, or criteria. It also distinguishes itself by mentioning the structured filter retargeting and the address-by-watch_id-or-name, which separates it from create_watch and delete_watch.
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 a clear usage context: when you need to modify an already-created watch. It also directs the agent to preview_watch first when tuning criteria, which is a helpful alternative. It does not explicitly spell out when not to use the tool or compare with create_watch/delete_watch, so it stops short of a 5.
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. Dates show when Glama detected each change.
27 tool updates
- First observed
add_to_collection - First observed
annotate_paper - First observed
ask_library - First observed
check_drift - First observed
check_watches - First observed
co_author_graph - First observed
create_collection - First observed
create_watch - First observed
delete_watch - First observed
embed_text - First observed
fetch_fulltext - First observed
find_author - First observed
find_gaps - First observed
get_citations - First observed
get_field_orientation - First observed
get_foundational_lineage - First observed
get_paper - First observed
like_paper - First observed
list_collections - First observed
list_library - First observed
list_watches - First observed
preview_watch - First observed
remove_from_collection - First observed
save_paper - First observed
search_papers - First observed
unsave_paper - First observed
update_watch
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Provenance-tagged knowledge graph of AI/ML research: papers, citations, methods, code.
Search 340M+ academic papers — citation graphs, semantic similarity, and AI literature reviews.
Academic paper search, scientific literature, citation analysis, arXiv & semantic related-work.
Research intelligence for AI coding agents. 2M+ CS papers with evidence and tradeoffs.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables discovery and analysis of research ecosystems by extracting metadata from paper URLs, GitHub repositories, and research names. Automatically finds related papers, code repositories, models, datasets, and authors across platforms like arXiv, HuggingFace, and GitHub.-
- FlicenseNot gradedqualityDmaintenanceEnables researchers to search ArXiv papers, extract key insights (problems, methods, results) from abstracts, and perform ML-powered analysis including topic modeling, trend visualization, and author collaboration networks.-
- FlicenseNot gradedqualityNot gradedmaintenanceEnables searching and discovering machine learning papers, state-of-the-art benchmarks, tasks, datasets, methods, and leaderboards from Papers with Code. Supports mapping papers to their benchmark results and browsing evaluation tables.-
- AlicenseCqualityDmaintenanceEnables searching, extracting, and analyzing over 2.4 million arXiv papers, with PDF extraction via GROBID and citation network building through Semantic Scholar integration.281291MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Most tools target a distinct resource and action — search vs. saved-library synthesis vs. citation analysis vs. article metadata — and the descriptions explicitly cross-reference one another to reduce confusion. A few retrieval/analysis tools (get_field_orientation, get_foundational_lineage, get_citations, check_drift) have adjacent purposes and could be misselected without reading their descriptions carefully.
The overwhelming majority follow a clear verb_noun snake_case pattern: create_watch, delete_watch, list_library, save_paper, annotate_paper, fetch_fulltext, search_papers. Minor deviations like co_author_graph and the interchangeable retrieval verbs (search, find, get, check, ask) create slight inconsistency, but the overall convention is predictable.
27 tools is on the heavy side, but the server covers several coherent subdomains: search/discovery, library/collection management, watches, annotations, and research analysis. The count is justifiable for the broad purpose, though some of the discovery/analysis tools could likely be consolidated or split into a separate server.
The tool surface covers the core lifecycle well: search, fetch, save, organize into collections, annotate, watch for new papers, and analyze citations/authors/gaps. Minor gaps exist — there is no collection deletion/rename, no explicit mark-as-read tool, and no unlike operation — but these are workable edge cases rather than blocking omissions.