Skip to main content
Glama
YGao2005

Scholar Feed MCP Server

Scholar Feed MCP Server

CI npm version Node License: MIT

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 init

This interactive wizard will:

  1. Optionally ask for an API key (or skip for anonymous access)

  2. Detect your MCP client (Claude Code, Cursor, or Claude Desktop)

  3. 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@latest

Every 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

.cursor/mcp.json (project) or ~/.cursor/mcp.json (global)

Restart Cursor.

Claude Desktop

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json; Windows: %APPDATA%\Claude\claude_desktop_config.json

Settings → Developer → Edit Config, then restart.

Windsurf

~/.codeium/windsurf/mcp_config.json

Cascade → MCP icon → Configure, then refresh.

Cline / Roo Code

cline_mcp_settings.json

MCP Servers sidebar icon → Configure. Cline and Roo Code share this format.

Gemini CLI

~/.gemini/settings.json (or project .gemini/settings.json)

LM Studio

~/.lmstudio/mcp.json

Program tab → Install → Edit mcp.json. Follows Cursor's notation.

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@latest

Project-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

search_papers

Semantic + keyword search with filters. Also does similar-paper discovery, citation-scoped search, and trending.

q, category, novelty_min, days, sort, anchor_paper_id, scope_to_citations_of, mode, method_category, task, dataset, contribution_type, task_category, cursor, limit

get_paper

Get full paper details by arXiv ID. Also handles batch lookup and BibTeX export.

arxiv_ids, format, fields, verbose

get_citations

Citation graph (outgoing refs or incoming citations)

arxiv_id, direction, limit, fields

fetch_fulltext

Extract results/experiments from LaTeX source. sections: 'all' returns the whole paper instead of the lean results excerpt.

arxiv_id, sections

Authors

Tool

Description

Key Parameters

find_author

Find researchers by topic/name query, or retrieve a profile by ID.

q, id, field, limit

co_author_graph

Co-authorship neighborhood for an author

author_ids, window_years

Embeddings

Tool

Description

Key Parameters

embed_text

Get a 768-dim Gemini embedding for text (for HyDE and custom similarity). Pro-only, so anonymous/free callers get a 403 pro_required.

text, task_type

Research

Tool

Description

Key Parameters

get_field_orientation

Cheap retrieval orientation for a research area: top papers, subfields, open problems. No Pro quota.

topic, limit

get_foundational_lineage

Foundational work for a paper's niche via the citation graph (consensus-then-lift): niche_roots → field_level → discipline, with cited_by_in_niche evidence. Surfaces canonical anchors semantic search misses. No Pro quota.

anchor_paper_id, scope, generality_ceiling, limit

check_drift

"Is the method I use superseded — and by what?" Critique receipts + benchmark-dominance edges over ~10 LLM builder-problem families. No Pro quota.

family, method, limit

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

save_paper

Bookmark a paper to your library (idempotent; feeds personalization).

arxiv_id

unsave_paper

Remove a paper from your library (idempotent).

arxiv_id

like_paper

"More like this" calibration signal for the For You feed (insert-only).

arxiv_id

list_library

List your saved papers, newest first.

limit, page

list_collections

List collections with paper counts.

(none)

create_collection

Create a named collection (get-or-create; no error on duplicate).

name

add_to_collection

Add a paper to a collection by name or id (also auto-saves).

arxiv_id, collection_name, collection_id

remove_from_collection

Remove a paper from a collection (stays saved).

arxiv_id, collection_name, collection_id

create_watch

Standing daily-evaluated saved search; get-or-create by name. Define it with a structured criteria filter (recommended) or a single seed selector.

name, novelty_min, criteria, recency_days, q, collection_name, collection_id, anchor_paper_id, scope_to_citations_of, author_id, category

list_watches

List watches with summary, last_evaluated_at, and pending_hits.

(none)

check_watches

Pull new matches since the last digest (read-only, idempotent).

watch_name, watch_id, limit

update_watch

Edit a watch in place: rename, change novelty_min, or retarget its structured criteria (clears pending hits). Address by name or id.

name, watch_id, new_name, novelty_min, criteria, recency_days

preview_watch

Dry-run a structured criteria filter over recent papers without creating a watch; returns match_count and a sample to tune before saving. Read-only.

criteria, recency_days

delete_watch

Delete a watch by name or id (idempotent).

name, watch_id

find_gaps

"What am I missing?" for a collection or topic: foundational + frontier work you haven't saved (read-only, Pro).

collection_name, collection_id, topic, scope, limit

ask_library

"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 find_gaps. Free 1/month, then Pro 200/day.

question, collection_name, collection_id, limit

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

search_papers

30/min

get_paper

30/min

get_citations

30/min

fetch_fulltext

10/min

find_author

20/min

co_author_graph

20/min

embed_text

30/min

get_field_orientation

20/min

get_foundational_lineage

20/min

find_gaps

20/min

ask_library

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

SF_API_KEY

No

(none)

Your Scholar Feed API key (starts with sf_). Without it, runs in anonymous mode (100 calls/day).

SF_API_BASE_URL

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 tests

Contributing

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.

Privacy

See our privacy policy.

License

MIT

Available Tools

25 tools
add_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYesarXiv ID of the paper to add, e.g. '2407.15831'.
collection_nameNoName of the collection. Created if it doesn't exist. Use '/' to nest, e.g. 'AgentOPA/Formal'. Provide this OR collection_id.
collection_idNoUUID of an existing collection. Provide this OR collection_name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 LibraryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesThe natural-language question to answer from your saved papers.
collection_nameNoScope the answer to one collection by name (resolved by the backend). Omit to use your whole library.
collection_idNoScope the answer to one collection by UUID. Omit to use your whole library.
limitNoHow many of your most-relevant saved papers to ground the answer on (max 20). Default 8.

Output Schema

ParametersJSON Schema
NameRequiredDescription
answerNoThe synthesized answer with inline [arXiv-ID] citations.
citationsNo
papersNo
okNo
messageNo

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 WatchesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
watch_nameNoScope to one watch by name. Provide this OR watch_id, or neither for all.
watch_idNoScope to one watch by UUID. Provide this OR watch_name, or neither for all.
limitNoMax hits to return (max 100).

Output Schema

ParametersJSON Schema
NameRequiredDescription
papersNoMatched / returned papers.
totalNoTotal results available for the query.
pageNo
limitNo
modeNoSearch mode actually applied.
directionNoCitation direction (get_citations: citing | cited_by).
topicNo
noteNo
not_foundNoRequested IDs that had no match.
next_cursorNoKeyset cursor for the next page, or null when exhausted.
hitsNoNew watch matches (check_watches).
resultsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 GraphA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
author_idsYesAuthor IDs to query (1-25). Get author IDs via the find_author tool.
window_yearsNoOnly count co-authorships from the last N years (default 10, max 30).

Output Schema

ParametersJSON Schema
NameRequiredDescription
queried_author_idsNo
window_yearsNo
edge_countNo
edgesNoCo-authorship edges {from, to, papers_count, last_collab_year}.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the collection, e.g. 'KV-cache compression'. Use '/' to nest: 'AgentOPA/Formal' files it under an 'AgentOPA' folder.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLabel for the watch, e.g. 'novel KV-cache work'.
novelty_minNoOnly 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.
qNoSemantic/keyword topic seed. One seed selector only.
collection_nameNoWatch the neighborhood of a collection by name (resolved by the backend). One seed selector only.
collection_idNoWatch the neighborhood of a collection by UUID. One seed selector only.
anchor_paper_idNoWatch papers similar to this arXiv ID. One seed selector only.
scope_to_citations_ofNoWatch new papers citing this arXiv ID. One seed selector only.
author_idNoWatch an author's new work, by author ID. One seed selector only.
categoryNoWatch an arXiv category (e.g. 'cs.LG'), filtered by novelty_min. One seed selector only.
criteriaNov2 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_daysNoFor a structured (criteria) watch: only consider papers from the last N days (default 7; the 'cites' relation uses 30).

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 WatchA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the watch to delete. Provide this OR watch_id.
watch_idNoUUID of the watch to delete. Provide this OR name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 TextA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to embed (1-8000 chars). For HyDE flows this is your hypothetical answer/abstract.
task_typeNoRETRIEVAL_DOCUMENT (default) matches paper-side embeddings — use for HyDE. RETRIEVAL_QUERY matches query-side semantic search.RETRIEVAL_DOCUMENT

Output Schema

ParametersJSON Schema
NameRequiredDescription
embeddingNoThe embedding vector (768-dim Gemini Flash).
modelNo
task_typeNo
dimensionsNo
dimsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 TextA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYesarXiv ID of the paper
sectionsNo'results' (default): lean results section only. 'all': full paper — abstract, intro, method, results, conclusion, related work.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceNoWhere the text came from (e.g. arxiv).
arxiv_idNo
results_textNoResults/experiments excerpt (default 'results' mode).
sectionsNoPer-section text (sections='all').
table_captionsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 AuthorA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoTopic or researcher name to search (q-mode). Returns a list of matching authors. Examples: 'efficient transformer training', 'Geoffrey Hinton'.
idNoAuthor 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.
fieldNo(q-mode only) Filter by primary research field e.g. 'cs.LG', 'cs.CV', 'cs.CL'.
limitNo(q-mode only) Max results to return (default 20).

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNo
search_typeNo
totalNo
authorsNoMatching authors (q-mode).
idNo
nameNo
h_indexNo
total_papersNo
total_citationsNo
primary_fieldNo
research_topicsNo
rankNo
top_papersNoTop papers by rank (id-mode profile).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 GapsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_nameNoAnalyze gaps for a collection by name (resolved by the backend). Provide exactly one seed.
collection_idNoAnalyze gaps for a collection by UUID. Provide exactly one seed.
topicNoAnalyze gaps for a free-text topic/area. Provide exactly one seed.
scopeNoWhich gaps to surface: 'foundational' (canonical anchors you're missing), 'frontier' (recent novel work you haven't saved), or 'both' (default).both
limitNoMax gaps per bucket (max 50). Default 10.

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundational_gapsNoCanonical anchors in the niche not in your library.
frontier_gapsNoRecent high-novelty work you haven't saved.
okNo
messageNo

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 CitationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYesarXiv ID of the paper
directionNo'citing' = outgoing references this paper cites; 'cited_by' = incoming citations from other paperscited_by
limitNoNumber of papers to return (max 50)
fieldsNoComma-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.
verboseNoIf true, returns the full 28-field paper shape. Default false returns the lean 12-field set. Ignored when `fields` is provided.
exclude_idsNoarXiv IDs to exclude from results (for deduplication across chained calls)

Output Schema

ParametersJSON Schema
NameRequiredDescription
papersNoMatched / returned papers.
totalNoTotal results available for the query.
pageNo
limitNo
modeNoSearch mode actually applied.
directionNoCitation direction (get_citations: citing | cited_by).
topicNo
noteNo
not_foundNoRequested IDs that had no match.
next_cursorNoKeyset cursor for the next page, or null when exhausted.
hitsNoNew watch matches (check_watches).
resultsNo

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 OrientationA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesResearch 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'.
limitNoNumber of candidate papers to return (5–30, default 15).

Output Schema

ParametersJSON Schema
NameRequiredDescription
papersNoMatched / returned papers.
totalNoTotal results available for the query.
pageNo
limitNo
modeNoSearch mode actually applied.
directionNoCitation direction (get_citations: citing | cited_by).
topicNo
noteNo
not_foundNoRequested IDs that had no match.
next_cursorNoKeyset cursor for the next page, or null when exhausted.
hitsNoNew watch matches (check_watches).
resultsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 LineageA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
anchor_paper_idYesarXiv ID of the paper to anchor on, e.g. '2504.04704' or '2504.04704v2'. The niche is built from this paper's embedding neighbourhood.
scopeNoNiche breadth: 'narrow' (~100 nearest papers, tightest sub-topic — surfaces the few-citation niche root), 'field' (~200, default), 'broad' (~400, wider area foundations).field
generality_ceilingNoWhen 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.
limitNoMax papers in each of the niche_roots and field_level tiers (5–40, default 15).

Output Schema

ParametersJSON Schema
NameRequiredDescription
anchorNo
scopeNo
niche_sizeNo
tiersNoFoundational tiers: niche_roots → field_level → discipline.
niche_rootsNo
field_levelNo
disciplineNo
noteNo

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 PaperA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idsYesOne 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'].
formatNoResponse 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.
fieldsNoComma-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.
verboseNoIf 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

ParametersJSON Schema
NameRequiredDescription
papersNoMatched / returned papers.
totalNoTotal results available for the query.
pageNo
limitNo
modeNoSearch mode actually applied.
directionNoCitation direction (get_citations: citing | cited_by).
topicNo
noteNo
not_foundNoRequested IDs that had no match.
next_cursorNoKeyset cursor for the next page, or null when exhausted.
hitsNoNew watch matches (check_watches).
resultsNo
bibtexNoBibTeX entry (format='bibtex').
countNo
formatNo
okNo
messageNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYesarXiv ID of the paper to like.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 CollectionsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
collectionsNo
okNo
messageNo

TDQS

A4.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 LibraryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many saved papers to return (max 100).
pageNoPage number for paging through a large library.

Output Schema

ParametersJSON Schema
NameRequiredDescription
papersNoMatched / returned papers.
totalNoTotal results available for the query.
pageNo
limitNo
modeNoSearch mode actually applied.
directionNoCitation direction (get_citations: citing | cited_by).
topicNo
noteNo
not_foundNoRequested IDs that had no match.
next_cursorNoKeyset cursor for the next page, or null when exhausted.
hitsNoNew watch matches (check_watches).
resultsNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 WatchesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
watchesNo
okNo
messageNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 WatchA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
criteriaYesThe structured filter to test.
recency_daysNoWindow in days (default 7; the 'cites' relation uses 30).

Output Schema

ParametersJSON Schema
NameRequiredDescription
window_daysNo
needs_similarityNo
match_countNo
sampleNoA sample of matching papers.
okNo
messageNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 CollectionA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYesarXiv ID of the paper to remove from the collection.
collection_nameNoName of the collection. Provide this OR collection_id.
collection_idNoUUID of the collection. Provide this OR collection_name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYesarXiv ID of the paper to save, e.g. '2407.15831'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 PapersA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch query keywords. Optional when anchor_paper_id is set (anchor mode ignores q and returns papers similar to the anchor).
sortNoResult 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_idNoReturn 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_ofNoRestrict 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.
categoryNoFilter by arXiv category e.g. 'cs.AI', 'cs.LG'
novelty_minNoMinimum novelty score (0-1). Use 0.5+ for novel papers.
impact_minNoMinimum 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.
daysNoLimit to papers published within N days
has_codeNoFilter 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_citationsNoMinimum real citation count. Unlike impact_min (a ~90-day FORECAST percentile), this filters on PROVEN citations and keeps established/canonical papers.
min_starsNoMinimum 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_existsNoFilter 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_afterNoOnly 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_beforeNoOnly papers published on or before this date, 'YYYY-MM-DD'. Pair with published_after for an explicit window.
method_categoryNoFilter by method category e.g. 'reinforcement learning', 'transformer'
method_nameNoFilter to papers introducing/using a specific named method e.g. 'LoRA', 'YOLO', 'DPO'. Case-insensitive substring match on the extracted method_name field.
taskNoFilter by task e.g. 'image classification', 'question answering' (partial match)
datasetNoFilter to papers that evaluate on a specific dataset e.g. 'MMLU', 'ImageNet'
contribution_typeNoFilter by paper's contribution type
task_categoryNoFilter by broad research area
modeNoSearch 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.
cursorNoCursor from previous response's next_cursor for keyset pagination
pageNoPage number
limitNoResults per page (max 50)
fieldsNoComma-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.
verboseNoIf 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_idsNoarXiv IDs to exclude from results (for deduplication across chained calls)

Output Schema

ParametersJSON Schema
NameRequiredDescription
papersNoMatched / returned papers.
totalNoTotal results available for the query.
pageNo
limitNo
modeNoSearch mode actually applied.
directionNoCitation direction (get_citations: citing | cited_by).
topicNo
noteNo
not_foundNoRequested IDs that had no match.
next_cursorNoKeyset cursor for the next page, or null when exhausted.
hitsNoNew watch matches (check_watches).
resultsNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 PaperA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYesarXiv ID of the paper to remove from the library.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFind the watch by its current name. Provide this OR watch_id.
watch_idNoFind the watch by UUID. Provide this OR name.
new_nameNoRename the watch.
novelty_minNoNew novelty floor (0..1).
criteriaNoReplace the watch's filter (becomes kind='filter'). Clears pending hits.
recency_daysNoWindow for the new criteria.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoTrue when the operation succeeded.
messageNoHuman-readable summary of the outcome.
actionNoMachine label: saved | no_change | removed | liked | created | updated | deleted.
arxiv_idNo
collectionNoThe created/affected collection, when applicable.
watchNoThe created/affected watch, when applicable.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.5/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    17
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    26
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables 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.
    8
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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

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