Scholar Feed MCP Server
Access to all AI/ML papers on ArXiv (600k+) with semantic search + more
Documentation
Scholar Feed MCP Server
Search 600,000+ CS/AI/ML research papers with LLM-powered novelty analysis from Claude Code, Cursor, or any MCP client.
Scholar Feed indexes arXiv papers daily and ranks them using a multi-signal scoring system (recency, citation velocity, institutional reputation, code availability). Each paper has an LLM-generated summary and novelty score.
Quick Start
npx scholar-feed-mcp init
This interactive wizard will:
- Optionally ask for an API key (or skip for anonymous access)
- Detect your MCP client (Claude Code, Cursor, or Claude Desktop)
- Write the config and verify the connection
No API key required. Anonymous access gives you 100 calls/day — enough for a typical research session. For higher limits (1,000/day per account), get a free key at scholarfeed.org/settings.
Try asking: "Search for recent papers on test-time compute scaling"
Migrating from v1.x to v3.0.0
v3.0.0 is a hard cutover — there is no deprecation window. The previous v1.x tool surface was consolidated down to 8 focused tools. Existing agents using removed tools will need to update their calls before upgrading.
Breaking changes — full replacement table
| Removed tool (v1.x) | v3 replacement |
|---|---|
find_similar(arxiv_id=id) | search_papers(anchor_paper_id=id) |
find_citations_about(arxiv_id=X, query=Q) | search_papers(scope_to_citations_of=X, q=Q) |
whats_trending(category=C) | search_papers(sort='trending', category=C) |
batch_lookup(arxiv_ids=[...]) | get_paper(arxiv_ids=[...]) |
export_bibtex(arxiv_ids=[...]) | get_paper(arxiv_ids=[...], format='bibtex') |
discover_authors(q=Q) | find_author(q=Q) |
get_author(author_id=id) | find_author(id=id) |
compare_methods(models=[...]) | Use the /compare-methods skill (see scholarfeed.org/skills) |
field_guide(topic=T) | get_field_orientation(topic=T) for cheap retrieval; full orientation via the /field-guide skill |
check_connection | Removed — errors signal connectivity. No action needed; remove any health-check calls. |
fetch_repo(arxiv_id=id) | Removed — 0 observed calls in production. Backend route preserved for skill use. |
The 9 v3 tools
| Tool | Description |
|---|---|
search_papers | Semantic + keyword search. Now also handles similar-paper discovery (anchor_paper_id), citation-scoped search (scope_to_citations_of), and trending (sort='trending'). |
get_paper | Full paper details by arXiv ID. Now also handles batch lookup (arxiv_ids=[...]) and BibTeX export (format='bibtex'). |
get_citations | Citation graph — outgoing refs or incoming citations (direction='citing'/'cited'). |
fetch_fulltext | Extract results/experiments sections from LaTeX source. |
find_author | Find authors by name/topic query (q=) or retrieve a profile by ID (id=). Merges the former discover_authors + get_author. |
co_author_graph | Co-authorship neighborhood for an author — edges derived live from the citation graph. |
embed_text | Get a 768-dim Gemini embedding for a text string (useful for HyDE and custom similarity). |
get_field_orientation | Cheap retrieval orientation for a research area — top papers, subfields, open problems. No Pro quota. |
get_foundational_lineage | The foundational work for a paper's niche via the citation graph — niche_roots → field_level → discipline (collapsed landmarks), with cited_by_in_niche evidence. Surfaces canonical anchors semantic search misses. No Pro quota. |
New in v3.1.0:
get_foundational_lineage— paper-anchored citation-graph lineage (consensus-then-lift). Answers the relative question: what is foundational for THIS paper's specific niche, not the obvious global landmarks. Complementsget_field_orientation(topic-anchored, retrieval-only).
New in v3.0.0 (reaching npm for the first time):
find_author— mergeddiscover_authors+get_authorinto a single tool with exactly-one-of (qorid) semantics.get_field_orientation— the cheap-retrieval half of the formerfield_guide, demoted from tool to skill in v3 but re-added as a lightweight tool (0.6 × citation score + 0.4 × cosine similarity; no DeepSeek, no Pro quota). Pairs with the/field-guideskill for deeper orientation.co_author_graphandembed_text— shipped in the local v2.1.0 build but never published to npm; v3.0.0 is the first public release of both.
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."
Manual Installation
The fastest path is npx scholar-feed-mcp init, which auto-detects your client and
writes the config. To do it by hand, find your client below.
Every client launches the same stdio server — npx -y scholar-feed-mcp. Most use
the identical mcpServers JSON block; only the config-file location and the
wrapper key change. The standard block (used by Cursor, Claude Desktop, Windsurf,
Cline/Roo, Gemini CLI, LM Studio, and JetBrains) is:
{
"mcpServers": {
"scholar-feed": {
"command": "npx",
"args": ["-y", "scholar-feed-mcp"]
}
}
}
API key (optional, for 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.
Claude Code
# Without API key (anonymous, 100 calls/day)
claude mcp add scholar-feed -- npx -y scholar-feed-mcp
# With 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
Cursor (.cursor/mcp.json)
Use the standard block above in .cursor/mcp.json (project) or ~/.cursor/mcp.json
(global), then restart Cursor.
Claude Desktop (claude_desktop_config.json)
Settings → Developer → Edit Config, paste the standard block, then restart.
File location: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS),
%APPDATA%\Claude\claude_desktop_config.json (Windows).
VS Code — GitHub Copilot (.vscode/mcp.json)
VS Code uses a servers key (not mcpServers) and an explicit type. Requires 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"]
}
}
}
Windsurf (~/.codeium/windsurf/mcp_config.json)
In Cascade, click the MCP icon → Configure (opens ~/.codeium/windsurf/mcp_config.json),
paste the standard block, then click refresh.
Cline / Roo Code
Click the MCP Servers icon in the sidebar → Configure / Edit, then paste the standard
block into cline_mcp_settings.json. Cline and Roo Code share this format.
Zed (settings.json)
Zed 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"]
}
}
}
Continue (~/.continue/config.yaml)
Continue uses YAML, with mcpServers as a list. Add to ~/.continue/config.yaml
(global) or .continue/config.yaml (workspace).
mcpServers:
- name: scholar-feed
type: stdio
command: npx
args:
- "-y"
- scholar-feed-mcp
Gemini CLI (~/.gemini/settings.json)
Add the standard block to ~/.gemini/settings.json (or project .gemini/settings.json).
JetBrains — PyCharm / IntelliJ (AI Assistant)
Settings → Tools → AI Assistant → Model Context Protocol (MCP) → Add → As JSON, paste the standard block, then apply. Requires AI Assistant 2025.1+.
LM Studio (~/.lmstudio/mcp.json)
Program tab → Install → Edit mcp.json (~/.lmstudio/mcp.json), paste the standard
block, then save. LM Studio follows Cursor's mcp.json notation.
Project-scoped (.mcp.json)
{
"mcpServers": {
"scholar-feed": {
"command": "npx",
"args": ["-y", "scholar-feed-mcp"],
"env": { "SF_API_KEY": "${SF_API_KEY}" }
}
}
}
Windows note: for any of the JSON configs above, use "command": "cmd" and
"args": ["/c", "npx", "-y", "scholar-feed-mcp"].
Any other MCP client
Scholar Feed is a standard stdio MCP server, so any MCP-compatible client works — use the
standard mcpServers block above with command: npx, args: ["-y", "scholar-feed-mcp"].
Available Tools (22)
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 | arxiv_id |
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) | 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 |
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. | — |
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. Exactly one seed selector. | name, novelty_min, 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. | — |
check_watches | Pull new matches since the last digest (read-only, idempotent). | watch_name, watch_id, limit |
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 |
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 |
Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
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 — more stable than page numbers for large result sets).
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
SF_API_KEY | No | — | 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.
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
If you're stuck on an old version after an update: npx --yes scholar-feed-mcp@latest
Windows: "command not found"
Use "command": "cmd" with "args": ["/c", "npx", "-y", "scholar-feed-mcp"] in your MCP config.