Scholar Feed MCP Server
The Scholar Feed MCP Server enables search and analysis of 560,000+ CS/AI/ML research papers with LLM-powered summaries, novelty scoring, and deep research synthesis.
Search & Discovery — Full-text or semantic search with filters for category, novelty, recency, method, task, dataset, and contribution type; trending papers ranked by recency, citation velocity, and institutional reputation; batch lookup of up to 50 papers at once.
Paper Details & Content — Retrieve metadata, LLM-generated summaries, novelty scores, and structured extraction (methods, tasks, baselines); extract results/experiments from LaTeX source; fetch GitHub repo READMEs and file trees; export BibTeX for up to 50 papers.
Citation & Similarity — Explore citation graphs (incoming/outgoing) and discover related papers via embedding similarity and bibliographic coupling.
Benchmarks & Methods — Search 20k+ benchmarks, view SOTA leaderboards, analyze score distributions and timelines, search by method name (e.g., LoRA, DPO), compare 2–10 models side-by-side, and extract structured quantitative results from specific papers.
Authors — Discover researchers by topic or name; view detailed profiles (h-index, citations, global rank, top papers); retrieve paginated paper lists by author.
Research Synthesis — Run deep research sessions (60–300s) producing structured reports with clusters, gap analysis, and evidence chains; refine reports with follow-up questions.
Landscape Analysis — Aggregated topic stats: methods used, benchmarks evaluated, active authors, publication velocity, and novelty distribution.
Utility — Verify API connection, subscription plan, and daily usage limits.
Provides tools for searching and analyzing arXiv research papers, including full-text search, paper details retrieval, citation analysis, and trending paper discovery with LLM-powered novelty scoring.
Enables access to GitHub repositories associated with research papers, including fetching repository READMEs and file trees for code availability analysis.
Provides tools for extracting content from LaTeX source files of research papers, including results and experiments sections for detailed analysis.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Scholar Feed MCP Serverfind recent papers on efficient LLM inference with high novelty scores"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Scholar Feed MCP Server
Research paper search with ranking and citation tracking, for LLM engineering and academic research, without leaving Claude Code, Cursor, or any MCP client.
Most paper tools hand back a flat list. Scholar Feed ranks it: sort by relevance, by proven citation count, or by rising impact, then trace any paper's citation lineage forward and backward across 22M+ edges. 600k+ CS/AI/ML papers, updated daily, each with an LLM-generated summary and novelty score.
Scholar Feed indexes arXiv papers daily and ranks them on recency, citation velocity, institutional reputation, and code availability.
Quick Start
npx scholar-feed-mcp@latest initThis interactive wizard will:
Optionally ask for an API key (or skip for anonymous access)
Detect your MCP client (Claude Code, Cursor, or Claude Desktop)
Write the config and verify the connection
No API key required. Anonymous access gives you 100 calls/day, enough for a typical research session. For higher limits (1,000/day per account), get a free key at scholarfeed.org/settings.
Try asking: "Search for recent papers on test-time compute scaling"
Related MCP server: Research MCP
What You Can Do
Technology scouting: "What novel research on retrieval-augmented generation was published this month?"
Literature review: "Find papers similar to 2401.04088 and export their BibTeX"
Trend monitoring: "What's trending in cs.CV this week? Summarize the top 3."
Author discovery: "Who are the top researchers working on efficient LLM inference?"
Field orientation: "Give me an orientation report on sparse mixture-of-experts architectures."
Installation
The fastest path is npx scholar-feed-mcp@latest init, which auto-detects your client and writes the config. To set it up by hand, every client launches the same stdio server (npx -y scholar-feed-mcp@latest); only the config-file location and the wrapper key differ.
Claude Desktop (one-click) installs without editing any config: download the .mcpb bundle from the latest release and open it (or drag it into Settings > Extensions). The installer shows one optional field for a Scholar Feed API key (sf_...): leave it blank for anonymous mode (100 calls/day), or paste a free key from scholarfeed.org/settings for 1,000/day.
Claude Code takes a one-line command:
# Anonymous (100 calls/day)
claude mcp add scholar-feed -- npx -y scholar-feed-mcp@latest
# With an API key (1,000 calls/day per account)
claude mcp add scholar-feed -e SF_API_KEY=sf_your_key_here -- npx -y scholar-feed-mcp@latestEvery other client takes this standard JSON block:
{
"mcpServers": {
"scholar-feed": {
"command": "npx",
"args": ["-y", "scholar-feed-mcp@latest"]
}
}
}To raise limits to 1,000 calls/day, add "env": { "SF_API_KEY": "sf_your_key_here" } to the server entry. Get a free key at scholarfeed.org/settings.
Drop that block into the right config file:
Client | Config file | Notes |
Cursor |
| Restart Cursor. |
Claude Desktop | macOS: | Settings → Developer → Edit Config, then restart. |
Windsurf |
| Cascade → MCP icon → Configure, then refresh. |
Cline / Roo Code |
| MCP Servers sidebar icon → Configure. Cline and Roo Code share this format. |
Gemini CLI |
| |
LM Studio |
| Program tab → Install → Edit |
JetBrains (PyCharm / IntelliJ) | AI Assistant → MCP → Add → As JSON | Requires AI Assistant 2025.1+. |
A few clients need a different wrapper key or file format:
OpenAI Codex (~/.codex/config.toml, or $CODEX_HOME/config.toml if you set that) uses TOML, not JSON — the block above will not work. One file serves both the Codex CLI and the IDE extension.
[mcp_servers.scholar-feed]
command = "npx"
args = ["-y", "scholar-feed-mcp@latest"]
env = { SF_API_KEY = "sf_your_key_here" }Drop the env line to run keyless at 100 calls/day. On Windows, if Codex cannot launch the server, use command = "cmd" with args = ["/c", "npx", "-y", "scholar-feed-mcp@latest"].
VS Code: GitHub Copilot (.vscode/mcp.json) uses a servers key and an explicit type, and needs Copilot agent mode. You can also run MCP: Add Server from the Command Palette.
{
"servers": {
"scholar-feed": {
"type": "stdio",
"command": "npx",
"args": ["-y", "scholar-feed-mcp@latest"]
}
}
}Zed (settings.json) uses a context_servers key, and the "source": "custom" line is required (without it, Zed silently skips the entry).
{
"context_servers": {
"scholar-feed": {
"source": "custom",
"command": "npx",
"args": ["-y", "scholar-feed-mcp@latest"]
}
}
}Continue uses YAML, with mcpServers as a list, in ~/.continue/config.yaml (global) or .continue/config.yaml (workspace).
mcpServers:
- name: scholar-feed
type: stdio
command: npx
args:
- "-y"
- scholar-feed-mcp@latestProject-scoped (.mcp.json), to share the server across a repo:
{
"mcpServers": {
"scholar-feed": {
"command": "npx",
"args": ["-y", "scholar-feed-mcp@latest"],
"env": { "SF_API_KEY": "${SF_API_KEY}" }
}
}
}Windows: for any JSON config above, use "command": "cmd" and "args": ["/c", "npx", "-y", "scholar-feed-mcp@latest"].
Scholar Feed is a standard stdio MCP server, so any other MCP-compatible client works with the standard block too.
Available Tools (26)
Core Search & Discovery
Tool | Description | Key Parameters |
| Semantic + keyword search with filters. Also does similar-paper discovery, citation-scoped search, and trending. |
|
| Get full paper details by arXiv ID. Also handles batch lookup and BibTeX export. |
|
| Citation graph (outgoing refs or incoming citations) |
|
| Extract results/experiments from LaTeX source. |
|
Authors
Tool | Description | Key Parameters |
| Find researchers by topic/name query, or retrieve a profile by ID. |
|
| Co-authorship neighborhood for an author |
|
Embeddings
Tool | Description | Key Parameters |
| Get a 768-dim Gemini embedding for text (for HyDE and custom similarity). Pro-only, so anonymous/free callers get a 403 |
|
Research
Tool | Description | Key Parameters |
| Cheap retrieval orientation for a research area: top papers, subfields, open problems. No Pro quota. |
|
| Foundational work for a paper's niche via the citation graph (consensus-then-lift): niche_roots → field_level → discipline, with |
|
| "Is the method I use superseded — and by what?" Critique receipts + benchmark-dominance edges over ~10 LLM builder-problem families. No Pro quota. |
|
Library, Collections, Watches & Gap Analysis (require SF_API_KEY)
These MUTATE or read the authenticated user's account. The core read/search tools above work anonymously; these need a key.
Tool | Description | Key Parameters |
| Bookmark a paper to your library (idempotent; feeds personalization). |
|
| Remove a paper from your library (idempotent). |
|
| "More like this" calibration signal for the For You feed (insert-only). |
|
| List your saved papers, newest first. |
|
| List collections with paper counts. | (none) |
| Create a named collection (get-or-create; no error on duplicate). |
|
| Add a paper to a collection by name or id (also auto-saves). |
|
| Remove a paper from a collection (stays saved). |
|
| Standing daily-evaluated saved search; get-or-create by name. Define it with a structured |
|
| List watches with summary, | (none) |
| Pull new matches since the last digest (read-only, idempotent). |
|
| Edit a watch in place: rename, change |
|
| Dry-run a structured |
|
| Delete a watch by name or id (idempotent). |
|
| "What am I missing?" for a collection or topic: foundational + frontier work you haven't saved (read-only, Pro). |
|
| "Answer from my saved set": a cited synthesis over your library or one collection, grounded only in papers you've saved (read-only). The inverse of |
|
Novelty Score
Every paper has an llm_novelty_score from 0.0 to 1.0:
Range | Meaning | Example |
0.7+ | Paradigm shift or broad SOTA | New architecture that changes the field |
0.5-0.7 | Novel method with strong results | New training technique with clear gains |
0.3-0.5 | Incremental improvement | Applying known method to new domain |
<0.3 | Survey, dataset, or minor extension | Literature review, benchmark release |
Use novelty_min: 0.5 in search_papers to filter for genuinely novel work.
Rate Limits
Endpoint | Limit |
| 30/min |
| 30/min |
| 30/min |
| 10/min |
| 20/min |
| 20/min |
| 30/min |
| 20/min |
| 20/min |
| 20/min |
| 10/min |
Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
Daily volume quota (separate from the per-minute limits above, counted per account across all your keys): 100 calls/day anonymous, 1,000/day with a free key, 10,000/day on Pro. The AI synthesis tools have their own limits: ask_library is 1/month free, then 200/day on Pro; find_gaps and embed_text are Pro-only (a 403 pro_required otherwise).
Example Response
search_papers with q: "attention mechanism" returns:
{
"papers": [
{
"arxiv_id": "2401.04088",
"title": "Attention Is All You Need (But Not All You Get)",
"authors": ["A. Researcher", "B. Scientist"],
"year": 2024,
"categories": ["cs.LG", "cs.AI"],
"primary_category": "cs.LG",
"arxiv_url": "https://arxiv.org/abs/2401.04088",
"has_code": true,
"github_url": "https://github.com/example/repo",
"citation_count": 42,
"rank_score": 0.73,
"llm_summary": "Proposes a sparse attention variant that reduces compute by 60% while matching dense attention accuracy on 5 benchmarks.",
"llm_novelty_score": 0.55
}
],
"total": 1847,
"page": 1,
"limit": 20,
"next_cursor": "eyJzIjogMC43MywgImlkIjogIjI0MDEuMDQwODgifQ=="
}Pass next_cursor back to get the next page (keyset pagination, which is more stable than page numbers for large result sets).
Environment Variables
Variable | Required | Default | Description |
| No | (none) | Your Scholar Feed API key (starts with |
| No | Production URL | Override API base URL |
Development
npm install
npm run build # Build to build/
npm run dev # Watch mode
npm run typecheck # Type check without emitting
npm test # Run testsContributing
See CONTRIBUTING.md for guidelines.
Troubleshooting
"Authentication failed: your SF_API_KEY is invalid" The key may have been revoked. Generate a new one at scholarfeed.org/settings. Or remove the key to use anonymous mode.
"Rate limit exceeded" or "Anonymous daily limit exceeded" Anonymous mode allows 100 calls/day. Get a free API key at scholarfeed.org/settings for 1,000 calls/day per account.
Server shows as "failed" with no error — especially right after an update
The first launch (and the first launch after each new release) makes npx download the package. The published bin is a single self-contained file with no dependency tree to resolve, so this is fast — but on a slow link it can still outrun your client's start-up timeout, and the server then shows as "failed" with no detail. Fixes: (1) warm the cache by running it once in a terminal — npx -y scholar-feed-mcp@latest --version — then restart your client; (2) raise the MCP start-up timeout if your client supports it (Claude Code: MCP_TIMEOUT=60000). For the fastest, offline-capable launches, install once globally and point the config at it instead of npx:
npm install -g scholar-feed-mcp
# then in your MCP config: "command": "scholar-feed-mcp", "args": []Tool calls time out or fail silently
Ensure Node.js 18+ is installed (node --version). Older versions lack the native fetch API.
Stale npx cache
The config blocks above pin scholar-feed-mcp@latest, which re-resolves the newest version each launch. If you previously used an unpinned scholar-feed-mcp and are stuck on an old build: npx --yes scholar-feed-mcp@latest.
Windows: "command not found"
Use "command": "cmd" with "args": ["/c", "npx", "-y", "scholar-feed-mcp@latest"] in your MCP config.
About Scholar Feed
Scholar Feed is a research-discovery engine for computer science and AI/ML papers, founded in 2025. It indexes 600,000+ papers from arXiv — ranked by novelty, citation velocity, and relevance — with LLM-generated summaries, a citation graph, author profiles, and full-text extraction. It is available as a website, a public REST API, and a Model Context Protocol (MCP) server that AI agents can call directly. This package (scholar-feed-mcp) is the open-source MCP server.
Website: https://www.scholarfeed.org
REST API: https://api.scholarfeed.org/v1
Privacy
See our privacy policy.
License
Available Tools
25 toolsadd_to_collectionAdd to CollectionA
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_name | No | Name of the collection. Created if it doesn't exist. Use '/' to nest, e.g. 'AgentOPA/Formal'. Provide this OR collection_id. | |
| collection_id | No | UUID of an existing collection. Provide this OR collection_name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), description discloses mutation, auto-save to library, idempotency, and API key requirement. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence is informative: action, addressing method, nesting, mutation note, idempotency, authorization. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, side effects, idempotency, and authorization. Output schema exists, so return values are not required. Complete for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds meaning: get-or-create by name, nesting with '/', and that collection_id or collection_name are alternatives. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb (Add), resource (paper to collection), and addressing method (by id or name, with get-or-create by name). Distinguishes from siblings like create_collection and remove_from_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?
Provides context on when to use (adding paper), mentions get-or-create behavior, auto-save, idempotency, and required API key. Does not explicitly state when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_libraryAsk LibraryARead-only
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 |
|---|---|---|---|
| question | Yes | The natural-language question to answer from your saved papers. | |
| collection_name | No | Scope the answer to one collection by name (resolved by the backend). Omit to use your whole library. | |
| collection_id | No | Scope the answer to one collection by UUID. Omit to use your whole library. | |
| limit | No | How many of your most-relevant saved papers to ground the answer on (max 20). Default 8. |
Output Schema
| Name | Required | Description |
|---|---|---|
| answer | No | The synthesized answer with inline [arXiv-ID] citations. |
| citations | No | |
| papers | No | |
| ok | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=true and destructive=false. Description adds 'Read-only', API key requirement, usage limits, and citation format. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is fairly long but every sentence adds value. Front-loaded with core purpose, then usage details and limitations. Not overly verbose.
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 output schema present, description doesn't need return values. It covers purpose, scope, limitations, and contrast well. Could mention citation format earlier, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds only marginal value (e.g., clarifying collection options). Baseline of 3 is appropriate; no significant new semantics beyond 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 clearly states the tool answers a question using only saved papers with inline citations, distinguishing it from find_gaps. The verb 'answer' and resource 'library/collection' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when to use (synthesis over library) and contrasts with find_gaps. Mentions optional scoping and limitations (free vs Pro). Lacks explicit 'when not to use' but sibling context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_watchesCheck WatchesARead-only
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 |
|---|---|---|---|
| watch_name | No | Scope to one watch by name. Provide this OR watch_id, or neither for all. | |
| watch_id | No | Scope to one watch by UUID. Provide this OR watch_name, or neither for all. | |
| limit | No | Max hits to return (max 100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| papers | No | Matched / returned papers. |
| total | No | Total results available for the query. |
| page | No | |
| limit | No | |
| mode | No | Search mode actually applied. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| topic | No | |
| note | No | |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
| hits | No | New watch matches (check_watches). |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds significant value beyond annotations: it states read-only, idempotent, no watermark advancement, safe to call repeatedly. Annotations only had readOnlyHint=true and destructiveHint=false; description enriches with operational 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 concise sentences pack essential information: purpose, scoping, behavioral safety. No fluff; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: return shape, optional scoping, idempotency, auth requirement. Output schema exists so no need to describe return values. Adequate for a read-only list tool with good annotations.
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?
With 100% schema coverage, description adds the mutual exclusivity of watch_name and watch_id and the default behavior of 'all watches'. This clarifies parameter usage beyond schema descriptions.
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 pulls new matching papers since last digest delivery, specifying the verb 'pull' and resource 'watches'. It distinguishes from siblings like 'list_watches' by focusing on new results.
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 provides clear context for when to use ('in-session anything new on my watches?') and notes that it does not advance watermark, implying repeated safe calls. It explains scoping options but doesn't explicitly contrast with sibling tools.
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-only
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 |
|---|---|---|
| queried_author_ids | No | |
| window_years | No | |
| edge_count | No | |
| edges | No | Co-authorship edges {from, to, papers_count, last_collab_year}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and destructiveHint, but the description adds important behavioral details: returns specific edge fields, default window_years=10, result capped at 500 edges sorted by papers_count DESC. There is 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 concise (two sentences), front-loads the purpose before details, and contains no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the output schema exists (covering return fields), the description adequately explains the purpose, parameters, behavioral constraints, and use cases. No gaps are present.
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 baseline is 3. The description goes beyond schema by advising to 'Get author IDs via the find_author tool' for author_ids, and clarifying the window_years' default and maximum values, which adds practical context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find the co-authorship neighborhood of one or more authors.' It specifies the action ('find') and resource ('co-authorship neighborhood'), and distinguishes from sibling tools like 'find_author' and 'search_papers' by focusing on relationships between authors.
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 use cases: 'AC reviewer triage, disambiguating researchers, expanding an author seed.' While it doesn't explicitly state when not to use the tool, the given contexts are clear and helpful for an AI agent to decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_collectionCreate CollectionA
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. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses mutation (MUTATES), get-or-create idempotency, and folder derivation from name. Annotations already hint non-read-only and non-destructive; description adds concrete details like 'never errors on duplicate' and auth requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with clear purpose, no unnecessary words. Each sentence adds critical information: function, mutation, idempotency, nesting, and auth.
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 has one parameter, annotations, and an output schema, the description covers all necessary context: behavior, naming rules, auth, and duplicate handling. No gaps.
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?
Single parameter 'name' is fully described; schema coverage is 100% but description adds value by explaining nesting convention with '/', which is not evident from schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new named collection, specifies mutation behavior, and distinguishes from siblings like list_collections and add_to_collection by explaining get-or-create and nesting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: when to create a collection, behavior on duplicates, nesting with '/', and required auth key. Implicitly suggests when not to use (e.g., if you need to list collections, use sibling).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_watchCreate WatchA
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 |
|---|---|---|---|
| name | Yes | Label for the watch, e.g. 'novel KV-cache work'. | |
| 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. | |
| q | No | Semantic/keyword topic seed. One seed selector only. | |
| collection_name | No | Watch the neighborhood of a collection by name (resolved by the backend). One seed selector only. | |
| 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. | |
| scope_to_citations_of | No | Watch new papers citing this arXiv ID. One seed selector only. | |
| author_id | No | Watch an author's new work, by author ID. One seed selector only. | |
| 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. | |
| recency_days | No | For a structured (criteria) watch: only consider papers from the last N days (default 7; the 'cites' relation uses 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description explicitly states 'MUTATES' and explains idempotency via get-or-create by name. It also discloses daily evaluation, email digest integration, and requirement for SF_API_KEY, providing full behavioral context beyond 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 well-structured with clear segments, bullet points, and front-loaded purpose. While somewhat lengthy, the complexity of the tool (11 parameters, nested objects) justifies the length. Every sentence adds value, and the structure aids readability.
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, the description covers purpose, behavior, prerequisites (API key), forms, idempotency, and references to sibling tools. The input schema has full parameter descriptions, and an output schema exists. No gaps remain for an agent to make informed decisions.
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 covers 100% of parameters with individual descriptions. The description adds significant value by explaining the relationship between criteria and single-selector seeds, detailing the collections relation (e.g., similar floor notes), and providing strategic usage hints. However, most parameter meaning is already in the schema, so the incremental value is moderate.
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 creates a standing watch that is evaluated daily and surfaces matches via email and check_watches. It specifies the verb ('create'), resource ('watch'), and scope ('standing watch evaluated daily'), distinguishing it from sibling tools like update_watch, delete_watch, and check_watches.
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 guidance on when to use the tool, including two forms (v2 structured vs legacy), recommending structured form, advising preview_watch before creation, and noting get-or-create behavior. It mentions alternatives like update_watch and preview_watch, but does not systematically list all when-not scenarios (e.g., if you only need to read, use list_watches). Still, it offers substantial contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_watchDelete WatchADestructive
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. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but description adds idempotency detail and auth requirement, which are valuable beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each essential: purpose, idempotency, alternative tool, auth. No wasted words, 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?
Output schema exists, so return values not needed. The description covers purpose, idempotency, alternative, auth. Complete for a simple deletion tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover both parameters (name and watch_id) with mutual exclusivity. The tool description adds minimal new info ('addressed by watch_id OR name') over the schema. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a watch' with specific verb and resource. It distinguishes from sibling tools like update_watch by noting that update_watch should be used for modifications instead of delete-and-recreate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states idempotent behavior (deleting non-existent watch is no-op) and advises using update_watch for changes. Also notes auth requirement (SF_API_KEY).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
embed_textEmbed TextARead-only
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 |
|---|---|---|
| embedding | No | The embedding vector (768-dim Gemini Flash). |
| model | No | |
| task_type | No | |
| dimensions | No | |
| dims | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable behavioral context beyond annotations: cost ($0.0001/call), rate limits (30/min), auth constraints (403 for free), model (Gemini Flash), and vector dimension. No contradiction with annotations (readOnlyHint=true, 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?
Single dense paragraph with no fluff, front-loaded with core action, and efficiently uses every sentence to convey purpose, use cases, and constraints.
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 2-param tool with output schema, the description covers purpose, usage, auth, cost, rate limits, and even a workflow example. No gaps identified.
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% with good descriptions, but the description adds context on HyDE workflow and default task_type purpose, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Embed a text string into a 768-dim Gemini Flash vector' and explains the HyDE retrieval use case, distinguishing it from sibling tools which are different actions (search, collections, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use each task_type (RETRIEVAL_DOCUMENT for HyDE, RETRIEVAL_QUERY for direct queries) and mentions authentication requirements (Pro-only, SF_API_KEY). Could be more explicit about alternatives, but sibling tools are clearly different.
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-only
Extract paper content from an arXiv paper's LaTeX source. Two modes: 'results' (default) returns 800 chars of results/experiments + 3 table captions. 'all' returns full paper sections (abstract, introduction, related work, method, results, conclusion) at up to 3000 chars each + 5 table captions. ~62% of arXiv papers have LaTeX source. May take a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| arxiv_id | Yes | arXiv ID of the paper | |
| sections | No | 'results' (default): lean results section only. 'all': full paper — abstract, intro, method, results, conclusion, related work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Where the text came from (e.g. arxiv). |
| arxiv_id | No | |
| results_text | No | Results/experiments excerpt (default 'results' mode). |
| sections | No | Per-section text (sections='all'). |
| table_captions | 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 description adds significant behavioral context beyond that: character limits for each mode, number of table captions, coverage percentage, and expected latency ('may take a few seconds'). This provides a comprehensive understanding of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long, front-loaded with the core purpose, and every sentence adds value. No redundant or vague phrases. It efficiently covers purpose, modes, specifics, coverage stats, and performance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (two modes, character limits, table captions) and the presence of an output schema (so return values are handled elsewhere), the description is complete. It addresses parameters, behavior, limitations (coverage percentage), and timing, leaving no major gaps.
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% (both parameters described in schema). The description adds meaning by specifying the default value for 'sections' ('results'), providing details on returned characters and table captions per mode, and clarifying the content of each mode. This goes beyond the schema's enum values.
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 'Extract' and the resource 'paper content from an arXiv paper's LaTeX source', making the purpose immediately obvious. It distinguishes itself from sibling tools which are about collections, watches, searches, and other operations, not content extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains two modes with specific use cases ('results' for lean results, 'all' for full paper) and mentions that ~62% of arXiv papers have LaTeX source, implying when the tool may not work. However, it does not explicitly exclude other use cases or mention alternatives, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_authorFind AuthorARead-only
Two-mode author tool — replaces discover_authors and get_author. 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 |
|---|---|---|
| query | No | |
| search_type | No | |
| total | No | |
| authors | No | Matching authors (q-mode). |
| id | No | |
| name | No | |
| h_index | No | |
| total_papers | No | |
| total_citations | No | |
| primary_field | No | |
| research_topics | No | |
| rank | No | |
| top_papers | No | Top papers by rank (id-mode profile). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes matching methods (embedding similarity for topics, fuzzy matching for names) and details the return structure for both modes. Annotations already indicate readOnlyHint, and description adds behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single coherent paragraph, front-loaded with mode distinction, efficient wording, no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's two modes, four parameters, and existence of an output schema, the description adequately covers both modes' usage, return values, and parameter constraints without being overly verbose.
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%, baseline 3. Description adds value by explaining mode-specific applicability of parameters (e.g., field and limit for q-mode only) and providing examples, but does not add deep semantic nuance beyond 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 clearly states it is a two-mode tool (search by topic/name or lookup by ID), replaces two other tools, and distinguishes its function from siblings 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?
Explicitly instructs to provide exactly one of q or id, and notes that field and limit apply only to q-mode. Also mentions that IDs come from q-mode or co_author_graph.
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-only
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 |
|---|---|---|---|
| collection_name | No | Analyze gaps for a collection by name (resolved by the backend). Provide exactly one seed. | |
| collection_id | No | Analyze gaps for a collection by UUID. Provide exactly one seed. | |
| topic | No | Analyze gaps for a free-text topic/area. Provide exactly one seed. | |
| scope | No | Which gaps to surface: 'foundational' (canonical anchors you're missing), 'frontier' (recent novel work you haven't saved), or 'both' (default). | both |
| limit | No | Max gaps per bucket (max 50). Default 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| foundational_gaps | No | Canonical anchors in the niche not in your library. |
| frontier_gaps | No | Recent high-novelty work you haven't saved. |
| ok | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description reinforces 'Read-only.' It explains the backend process: 'derives the niche, runs lineage + recent-novelty search, subtracts your saved set.' No contradictions, and additional context (API key requirement, Pro feature) is provided.
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?
Five well-structured sentences front-load the purpose and then detail usage. Every sentence adds essential information; no unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (none required), high schema coverage, and an output schema exists, the description covers the key behavioral aspects: seed specification, scope, limit, API key requirement, and Pro feature. Slight deduction for not mentioning the output schema explicitly, but the description is still complete enough for correct tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining mutual exclusivity of seed parameters ('Provide exactly one seed') and clarifying the scope enum values ('foundational,' 'frontier,' 'both'). This goes beyond the schema's minimal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find important work you HAVEN'T saved, for a collection or topic — a 'what am I missing?' analysis.' It precisely identifies the two output buckets (foundational_gaps and frontier_gaps) and distinguishes this tool from siblings like search_papers or list_library by focusing on missing works.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage constraints: 'Provide exactly one seed: collection_name OR collection_id OR topic.' It mentions the need for SF_API_KEY and that it's a Pro feature. While it doesn't explicitly state when not to use it or list alternatives, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_citationsGet CitationsARead-only
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 |
|---|---|---|---|
| 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 |
| 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. | |
| exclude_ids | No | arXiv IDs to exclude from results (for deduplication across chained calls) |
Output Schema
| Name | Required | Description |
|---|---|---|
| papers | No | Matched / returned papers. |
| total | No | Total results available for the query. |
| page | No | |
| limit | No | |
| mode | No | Search mode actually applied. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| topic | No | |
| note | No | |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
| hits | No | New watch matches (check_watches). |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral details: sorting by citing-paper rank_score, default response shape (lean 12-field vs full 28-field with verbose), and the interaction between fields and verbose. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each with distinct purpose: main action, direction explanation, response shape details. Front-loaded with the primary purpose, no fluff.
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 complexity (citation graph, directions, sorting, response shape options) and the presence of an output schema covering return values, the description provides sufficient context. It could mention rank_score's meaning, but overall it's complete enough.
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% with descriptions for all parameters. The description adds semantic value beyond the schema by specifying the sorting order (by rank_score), clarifying the direction enum values, and explaining the verbose/fields default behavior.
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 retrieves the citation graph for a paper, and distinguishes between 'citing' and 'cited_by' directions. It uses a specific verb ('get') and resource ('citation graph'), and implicitly differentiates from sibling tools like search_papers or 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 explains when to use each direction ('citing' = references, 'cited_by' = citations) and how to get more fields (verbose=true). It does not explicitly mention when not to use this tool or alternatives, but the context is clear enough for typical use.
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-only
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 |
|---|---|---|---|
| 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'. | |
| limit | No | Number of candidate papers to return (5–30, default 15). |
Output Schema
| Name | Required | Description |
|---|---|---|
| papers | No | Matched / returned papers. |
| total | No | Total results available for the query. |
| page | No | |
| limit | No | |
| mode | No | Search mode actually applied. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| topic | No | |
| note | No | |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
| hits | No | New watch matches (check_watches). |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), it discloses ranking blend (0.6 citation count, 0.4 semantic similarity), that it's cheap retrieval with no synthesis, and no LLM calls made. 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?
Four sentences, well-structured with main action first, then ranking details, use case, and alternative. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavior, parameters, and alternatives. Tool has output schema, so return value explanation is not needed. Complete for a tool of this complexity.
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 baseline is 3. Description adds little beyond schema: it reinforces topic specificity and limit for candidate count, but does not introduce new parameter meaning beyond what's in 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?
Description clearly states the tool returns candidate foundational papers for a research topic, using specific verb 'returns' and specifying 'candidate foundational papers'. It distinguishes from siblings by contrasting with the /field-guide skill that provides synthesis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (bootstrap a literature survey, get fast landscape sense) and when to use alternative (for synthesized report, use /field-guide). Also notes it requires no Pro API key, implying low cost.
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-only
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 |
|---|---|---|---|
| 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. | |
| 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 |
| 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. | |
| limit | No | Max papers in each of the niche_roots and field_level tiers (5–40, default 15). |
Output Schema
| Name | Required | Description |
|---|---|---|
| anchor | No | |
| scope | No | |
| niche_size | No | |
| tiers | No | Foundational tiers: niche_roots → field_level → discipline. |
| niche_roots | No | |
| field_level | No | |
| discipline | No | |
| note | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description adds behavioral traits: explains the three-tier structure (niche_roots, field_level, discipline) and states 'No Pro key and no LLM calls required'. 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 detailed and front-loaded with the core purpose, then elaborates on the tiers and usage. It is slightly wordy but every sentence adds value. Could be trimmed slightly without losing clarity.
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 complexity (4 parameters, output schema exists, annotations present), the description is fully adequate. It explains the output tiers, evidence, usage, and alternatives. No gaps remain for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description provides context on how parameters like scope and generality_ceiling affect the niche analysis, but this is supplementary rather than essential for understanding 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 explicitly states it returns foundational work for a paper's niche via the citation graph, with three tiers. It distinguishes itself from the sibling tool get_field_orientation by noting that tool is topic-anchored and retrieval-only.
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 advises using the tool to trace prior art/lineage for a paper or find canonical methods a niche is built on. It mentions the complementary relationship with get_field_orientation, providing context, though it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paperGet PaperARead-only
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 (replaces the removed batch_lookup tool). Pass format='bibtex' to get a .bib citation entry (replaces the removed export_bibtex tool — bibtex is single-paper only; for multi-paper bibtex, call repeatedly). Default returns a lean 14-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, impact_tier — where impact_pct is the ML-forecast per-category impact percentile 0-100 and impact_tier its A+/A/B/C/D grade; both NULL on older papers outside the recent 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 |
|---|---|---|---|
| arxiv_ids | Yes | One or more arXiv IDs. Single-paper lookup uses [id]; batch lookup passes multiple IDs (max 50). Replaces the removed batch_lookup tool. Example: ['2407.15831'] or ['2407.15831', '2402.09906']. | |
| format | No | Response format. 'json' (default) returns structured paper data. 'bibtex' returns a .bib citation entry — replaces the removed export_bibtex tool. Bibtex mode uses the first ID in arxiv_ids. | |
| 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. | |
| 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| papers | No | Matched / returned papers. |
| total | No | Total results available for the query. |
| page | No | |
| limit | No | |
| mode | No | Search mode actually applied. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| topic | No | |
| note | No | |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
| hits | No | New watch matches (check_watches). |
| results | No | |
| bibtex | No | BibTeX entry (format='bibtex'). |
| count | No | |
| format | No | |
| ok | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only safety; description adds batch limits, NULL handling for older papers, behavior of verbose and fields parameters, and bibtex mode restrictions.
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?
While well-structured and informative, the description is verbose, repeating replacement tool mentions and listing many fields inline. Could be tighter.
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 all aspects: batch limits, format options, default/verbose shapes, field selection, edge cases (NULL for older papers), and relationship to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds significant meaning: default vs verbose shapes, specific field names, impact score interpretation, and bibtex behavior.
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 gets full details for papers by arXiv ID, distinguishes from siblings like fetch_fulltext and search_papers, and explains replacement of removed 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?
Explicit guidance on single vs batch, bibtex mode, verbose vs default, and field selection. Notes bibtex is single-paper only and suggests fetch_fulltext for full text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
like_paperLike PaperA
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. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read, non-destructive write. The description adds valuable behavioral details: idempotent, no un-like behavior, and that it calibrates a personalized feed. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each packed with essential information. No fluff. Front-loaded with the primary purpose, followed by behavioral and guidance details. Efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, the description covers purpose, behavior, usage boundaries, and a prerequisite (API key). With output schema present (though not detailed here), the description is complete and self-sufficient.
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?
Input schema has 100% description coverage with a clear description for the single parameter 'arxiv_id'. The tool description does not add additional parameter-level meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb ('like a paper') and resource ('paper'), and distinguishes from sibling 'save_paper' by explaining the difference in function (taste vs bookmark). Also frames it as a calibration signal for the For You feed. Purpose is specific and well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that the operation is INSERT-only and idempotent (liking twice is a no-op, never un-likes). Distinguishes from save_paper with clear when-to-use guidance. Also notes the requirement for SF_API_KEY, providing essential usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsList CollectionsARead-only
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 |
|---|---|---|
| collections | No | |
| ok | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds 'Read-only' (redundant) and mentions 'with paper counts' which adds minor context. Not substantial beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adds value. First sentence core action, second read-only, third usage context and requirement. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter tool with output schema, description covers purpose, usage guidance, and return detail (paper counts). Sufficient for agent to select and invoke.
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?
No parameters, schema coverage 100%. Baseline 4 applies. Description doesn't need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List the authenticated user's collections (named groups of saved papers) with paper counts.' Specifies verb and resource, and distinguishes from siblings like create_collection 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?
Explicitly says 'Use before add_to_collection to see existing collections.' Provides a specific use case and mentions prerequisite 'Requires SF_API_KEY'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_libraryList LibraryARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many saved papers to return (max 100). | |
| page | No | Page number for paging through a large library. |
Output Schema
| Name | Required | Description |
|---|---|---|
| papers | No | Matched / returned papers. |
| total | No | Total results available for the query. |
| page | No | |
| limit | No | |
| mode | No | Search mode actually applied. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| topic | No | |
| note | No | |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
| hits | No | New watch matches (check_watches). |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds 'Read-only' consistency and 'Requires SF_API_KEY' for authentication. Discloses ordering behavior 'newest first'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences plus two short phrases, totaling 33 words. Every sentence adds value and it's 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 output schema present, description doesn't need to explain returns. Covers purpose, usage, authentication, and ordering. Complete for a simple list tool with good annotations.
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%, with descriptions for both parameters. The description does not add meaning beyond the schema, so baseline 3 applies.
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 'list', the resource 'the authenticated user's saved papers (their library)', and the ordering 'newest first'. It distinguishes from siblings like save_paper, unsave_paper, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to review a reading list or to see what's already saved before saving more.' Provides clear context for when to use, though lacks explicit when-not-use statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watchesList WatchesARead-only
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 |
|---|---|---|
| watches | No | |
| ok | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint false, so the agent knows it's safe. The description adds value by explicitly stating 'Read-only' and listing the returned fields, but does not discuss potential pagination, rate limits, or other behavioral details. Given annotation coverage, this is adequate.
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 four short sentences, each adding distinct value: what is listed, read-only status, usage advice, and authentication requirement. No redundancy or fluff. Front-loaded with the core purpose.
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 has no parameters but has an output schema, the description effectively covers what the tool returns (listing fields), when to use it (before create_watch), and prerequisites (SF_API_KEY). The presence of an output schema means return values are covered. This is complete for a list tool with good annotations.
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 the description does not need to explain parameters. According to guidelines, 0 parameters warrants a baseline score of 4. The description adds no parameter info, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists watches with specific fields (name, definition, last_evaluated_at, pending_hits). The verb 'list' and resource 'watches' are unambiguous. It also distinguishes from sibling tool create_watch by suggesting its use beforehand.
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 advises using this tool before create_watch to see existing watches, providing a direct usage context. It also notes the requirement for SF_API_KEY. However, it does not mention when not to use it or compare with other siblings like check_watches or preview_watch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_watchPreview WatchARead-only
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 |
|---|---|---|
| window_days | No | |
| needs_similarity | No | |
| match_count | No | |
| sample | No | A sample of matching papers. |
| ok | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. The description adds crucial context: match_count saturation at 200, return fields, default ranking, impact model, and read-only behavior. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed and front-loaded with the core purpose. Though slightly lengthy, it is well-organized and every sentence adds important context, making it effective for agent comprehension.
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 nested parameter, output schema exists, and complexity of ranking options, the description is fully complete. It covers limitations, ranking behavior, ties to create_watch, and how to interpret results, leaving no gaps.
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 baseline is 3. The description adds value by explaining the criteria object's role, default recency_days, and the relation field's note about collections and similar predicate, going beyond 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 tool's purpose: dry-run a structured filter without creating a watch, positioning it as part of a tuning loop. It differentiates from sibling create_watch by emphasizing preview and iteration.
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: iterate before saving with create_watch. It provides guidance on using sample scores to tune, avoiding reliance on match_count, and notes read-only and API key requirement.
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 CollectionADestructive
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_name | No | Name of the collection. Provide this OR collection_id. | |
| collection_id | No | UUID of the collection. Provide this OR collection_name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive (destructiveHint=true) and not read-only (readOnlyHint=false). The description adds value beyond annotations by explicitly stating it is a mutation ('MUTATES'), noting idempotency, requiring SF_API_KEY, and clarifying the exact effect (paper stays in library). This extra context earns a score above the baseline of 3.
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 extremely concise: two sentences that efficiently convey purpose, addressing method, mutation effect, idempotency, and authentication requirement. Every word earns its place with no redundancy or fluff.
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 (3 parameters, output schema exists), the description covers core operation, side effects, idempotency, and auth. It does not explain error handling or behavior when collection/paper does not exist, but these are minor gaps given the clear behavioral context and sibling differentiation.
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 provides descriptions for all three parameters (100% coverage), so the baseline is 3. The description adds important semantic information: that collection_name and collection_id are alternatives ('OR'), implying at least one should be provided, which is not enforced by the schema. This clarifies usage beyond 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 that the tool removes a paper from a collection, and specifies that it can be addressed by collection_id OR collection_name. It also explicitly notes that the paper stays in the library, distinguishing it from sibling tools like unsave_paper that remove from the library entirely. This provides a specific verb and resource with clear scope.
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 clear context on what the tool does and that it is idempotent. It implicitly guides usage by stating the paper stays in the library, suggesting when not to use it (if removal from library is intended). However, it does not explicitly name alternative tools or give when-not-to-use guidance, missing a small opportunity for clearer differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_paperSave PaperA
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. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool mutates the library, affects personalization (strongest signal in For You feed and email digest), and is idempotent. This adds context beyond the annotations (readOnlyHint=false, destructiveHint=false). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each adding value: purpose, mutation effect, idempotency, alternative tool. No unnecessary words, well 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?
Given the simple single-parameter tool with an output schema, the description provides complete context: purpose, behavior, idempotency, auth requirement, and sibling alternative.
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 only parameter (arxiv_id) is fully described in the input schema (100% coverage). The description does not add extra details about the parameter beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool saves a paper to the user's library (bookmark). It distinguishes from the sibling add_to_collection, which also saves but additionally files into a 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 explicitly tells when to use this tool vs. add_to_collection, mentions the requirement for SF_API_KEY, and notes idempotency, providing clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_papersSearch PapersARead-only
Search Scholar Feed's 600k+ CS/AI/ML paper corpus. Defaults to semantic (embedding) search — finds conceptually related papers even when the user's wording doesn't match the paper's title/abstract. Pass mode='keyword' for exact-string full-text search. CAVEAT: semantic search often misses old high-citation CANONICAL papers (e.g. foundational anchors like H2O for KV eviction, GRIT for unified embedding+generation) because the ranker prefers recent stylistically-matched papers. If you're hunting the canonical anchor for an area, parse the top-5 result abstracts for baseline mentions ('we compare against X, Y, Z'), then look the most-mentioned name up directly. Returns papers with LLM-generated summaries, novelty scores, and structured extraction data. Default response is a lean 14-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, impact_tier) — pass verbose=true or fields=... for the full shape with method/task/dataset extraction. RANKING BY IMPACT — two different notions, don't confuse them: (1) PROVEN impact = citations. For 'the important/seminal papers on topic X', pass sort='impactful' (most-cited among the relevant) or sort='balanced' (relevant AND well-cited). This is the right tool for established/foundational work. (2) FORECAST impact = impact_pct (0-100), an ML per-category percentile of PREDICTED citations, only computed for the last ~90 days; impact_tier is its A+/A/B/C/D grade. For 'what's rising/new in X' pass sort='trending' or filter impact_min=N — but NOTE impact_pct is NULL on everything older than ~90 days, so impact_min DROPS all established/canonical papers (it is NOT a way to find the influential papers in a niche — use sort='impactful' for that). Both impact notions are distinct from llm_novelty_score (new-idea-ness, an orthogonal filter). (3) ADOPTION impact = GitHub traction. Pass sort='community' to rank by real-world engineering adoption (stars + star-velocity) — the papers practitioners are actually running/building on, independent of citations or recency. Filter on it with min_stars=N (minimum GitHub stars) and has_code=true (only papers with a code release); has_code/min_stars surface RUNNABLE/ADOPTED work, the engineering counterpart to citations. github_url_exists=true is the stricter has_code (requires a linked repo). Supports filtering by category, novelty, recency, method, task, dataset, and contribution type — plus min_citations (minimum PROVEN citations, keeps established papers unlike the ~90-day impact_min) and an explicit date window via published_after / published_before ('YYYY-MM-DD', vs days' rolling lookback). v3 ABSORPTIONS: pass sort='trending' to rank by rising/forecast impact (impact_pct); pass anchor_paper_id to replicate find_similar (q is ignored in anchor mode, results carry similarity_score); pass scope_to_citations_of to restrict search to a paper's citation graph (replaces find_citations_about).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query keywords. Optional when anchor_paper_id is set (anchor mode ignores q and returns papers similar to the anchor). | |
| 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, regardless of citations or recency. Proven impact ('impactful'/'balanced') ranks by real citations; 'trending' is a model prediction; 'community' is real-world engineering traction. Pair with get_foundational_lineage for a topic's canonical roots. | |
| anchor_paper_id | No | Return papers similar to this arXiv paper ID (replaces the removed find_similar tool). When set, q is ignored and results carry similarity_score. Example: '2407.15831'. | |
| scope_to_citations_of | No | Restrict search to this paper's citation graph, ranked by relevance to q (replaces the removed find_citations_about tool). Pass the arXiv ID of the paper whose citations you want to search within. | |
| category | No | Filter by arXiv category e.g. 'cs.AI', 'cs.LG' | |
| novelty_min | No | Minimum novelty score (0-1). Use 0.5+ for novel papers. | |
| 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. | |
| days | No | Limit to papers published within N days | |
| 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_citations | No | Minimum real citation count. Unlike impact_min (a ~90-day FORECAST percentile), this filters on PROVEN citations and keeps established/canonical papers. | |
| 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. | |
| 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). | |
| 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. | |
| method_category | No | Filter by method category e.g. 'reinforcement learning', 'transformer' | |
| 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. | |
| task | No | Filter by task e.g. 'image classification', 'question answering' (partial match) | |
| dataset | No | Filter to papers that evaluate on a specific dataset e.g. 'MMLU', 'ImageNet' | |
| contribution_type | No | Filter by paper's contribution type | |
| task_category | No | Filter by broad research area | |
| 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. | |
| cursor | No | Cursor from previous response's next_cursor for keyset pagination | |
| page | No | Page number | |
| limit | No | Results per page (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 (method/task/dataset extraction, application_domain, baselines, etc.). Default false returns the lean 12-field set. Ignored when `fields` is provided. | |
| exclude_ids | No | arXiv IDs to exclude from results (for deduplication across chained calls) |
Output Schema
| Name | Required | Description |
|---|---|---|
| papers | No | Matched / returned papers. |
| total | No | Total results available for the query. |
| page | No | |
| limit | No | |
| mode | No | Search mode actually applied. |
| direction | No | Citation direction (get_citations: citing | cited_by). |
| topic | No | |
| note | No | |
| not_found | No | Requested IDs that had no match. |
| next_cursor | No | Keyset cursor for the next page, or null when exhausted. |
| hits | No | New watch matches (check_watches). |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: default semantic search may miss canonical papers, impact_pct is only computed for last ~90 days, absorption of find_similar and find_citations_about, and ranking intricacies. Annotations only provide readOnlyHint=true and destructiveHint=false, so the description adds substantial 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 long but well-structured with bolding and bullet points, front-loading the main purpose. While verbose, every sentence earns its place given the tool's complexity (27 parameters). Could be slightly more compressed, but structure aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all major aspects: search modes, ranking, filtering, absorbed tools, caveats, and cross-references between parameters. With an output schema present and no required parameters, the description is fully complete for an AI agent to use 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%, baseline is 3, but the description adds significant meaning beyond schemas: explains relationships between parameters (e.g., has_code + min_stars for adoption), caveats for impact_min, and how sort options relate to impact notions. This extra context fully justifies a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search Scholar Feed's 600k+ CS/AI/ML paper corpus.' It specifies verb+resource and distinguishes from siblings by mentioning absorbed tools (find_similar, find_citations_about) and referencing get_foundational_lineage as an alternative for canonical roots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive guidance: when to use semantic vs keyword search, when to use different sort options (impactful vs trending vs community), caveats about canonical papers, and pairing with other tools like get_foundational_lineage. It also warns about impact_min dropping older papers and clarifies distinct impact notions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsave_paperUnsave PaperADestructive
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. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but description adds idempotency, side effect of removing from all collections, and auth requirement (SF_API_KEY). This provides crucial 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 comprehensive and well-structured, with each sentence adding value. It could be slightly more concise, but it effectively front-loads the key purpose and side effects.
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 simplicity (one parameter) and the presence of an output schema (as indicated), the description covers all necessary aspects: mutation, idempotency, side effects, alternative tool, and auth requirement. It is complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the parameter with 100% coverage, so the description does not need to add much. It mentions 'arXiv ID' which aligns with the schema, but no additional format or constraints are provided. 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?
Clearly states 'Remove a paper from the authenticated user's Scholar Feed library', specifying the exact verb and resource. Distinguishes from sibling tools like remove_from_collection by noting the difference in behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (to un-save a paper) and when not (to keep in a collection, use remove_from_collection). Also notes idempotency, which helps in decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_watchUpdate WatchA
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. | |
| watch_id | No | Find the watch by UUID. Provide this OR name. | |
| new_name | No | Rename the watch. | |
| novelty_min | No | New novelty floor (0..1). | |
| criteria | No | Replace the watch's filter (becomes kind='filter'). Clears pending hits. | |
| recency_days | No | Window for the new criteria. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when the operation succeeded. |
| message | No | Human-readable summary of the outcome. |
| action | No | Machine label: saved | no_change | removed | liked | created | updated | deleted. |
| arxiv_id | No | |
| collection | No | The created/affected collection, when applicable. |
| watch | No | The created/affected watch, when applicable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Mentions mutation, clearing pending hits on criteria change, ranking defaults, and min_impact_pct. Adds value beyond annotations which are minimal. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with main purpose, then details. It is fairly long but every sentence adds necessary behavioral context. Slightly verbose but acceptable.
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 complex nested schema and behavioral nuances, the description covers side effects, ranking logic, prerequisites, and tuning advice. Output schema exists, so return values are not needed.
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%, baseline 3. Description adds extra meaning: explains side effects of changing criteria, ranking behavior, and tuning with preview_watch, enhancing understanding beyond 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 clearly states 'Update an existing watch in place' with specific actions: rename, change novelty_min, or retarget filter. It distinguishes itself from sibling tools 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?
Provides context on addressing by watch_id or name, prerequisites (SF_API_KEY), and hints to use preview_watch first. Does not explicitly state when not to use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes, but some overlap exists between search and discovery tools like ask_library, find_gaps, get_field_orientation, and get_foundational_lineage. However, detailed descriptions help differentiate them.
All tool names follow a consistent verb_noun pattern with underscores. Even compound names like get_foundational_lineage adhere to this pattern, making it predictable and easy for agents to understand.
25 tools is slightly above the typical 3-15 range, but the server covers a broad domain (library management, search, analysis, watches, collections, author discovery, etc.), justifying the count. It is not excessive.
The tool set provides comprehensive coverage: CRUD operations for libraries, collections, watches, and full analysis capabilities (citation graphs, gap analysis, author discovery, embedding). No obvious gaps exist for the intended purpose.
Maintenance
Related MCP Connectors
Search 340M+ academic papers — citation graphs, semantic similarity, and AI literature reviews.
Research intelligence for AI coding agents. 2M+ CS papers with evidence and tradeoffs.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Search 8.5M scientific papers with LLM TLDRs, citations, linked entities, figures, and full text.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI-powered academic paper discovery, search, and analysis from arXiv with advanced features like semantic search, citation network analysis, and multi-format exports (BibTeX, RIS, JSON, CSV). Provides intelligent research assistance through specialized AI prompts for summarization, trend tracking, and literature review automation.17MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLMs to search, analyze, and summarize academic research papers in real-time from arXiv, Semantic Scholar, and PubMed. Provides automatic deduplication, citation analysis, and BibTeX generation across multiple research databases.26MIT
- AlicenseBqualityDmaintenanceEnables real-time tracking of AI/LLM research progress by searching and aggregating content from arXiv, GitHub, Hugging Face, and Papers with Code. Supports intelligent search, automated daily/weekly research summaries, and covers 15+ AI research areas with smart caching.8MIT
- 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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/YGao2005/scholar-feed-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server