scholar-feed-mcp
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Warn
- network request — Outbound network request in .github/ISSUE_TEMPLATE/bug_report.yml
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
MCP server for searching 560k+ CS/AI research papers — works with Claude Code, Cursor, and any MCP client. No signup required.
Scholar Feed MCP Server
Search 600,000+ CS/AI/ML research papers with LLM-generated novelty analysis, without leaving Claude Code, Cursor, or any MCP client. Built for researchers running a literature review where they already work: search, trace citations, pull full text, and export BibTeX in the same session.
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"
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 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); only the config-file location and the wrapper key differ.
Claude Code takes a one-line command:
# Anonymous (100 calls/day)
claude mcp add scholar-feed -- npx -y scholar-feed-mcp
# 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
Every other client takes this standard JSON block:
{
"mcpServers": {
"scholar-feed": {
"command": "npx",
"args": ["-y", "scholar-feed-mcp"]
}
}
}
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:
VS Code (GitHub Copilot), Zed, Continue, and project-scoped configsVS 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"]
}
}
}
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"]
}
}
}
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
Project-scoped (.mcp.json), to share the server across a repo:
{
"mcpServers": {
"scholar-feed": {
"command": "npx",
"args": ["-y", "scholar-feed-mcp"],
"env": { "SF_API_KEY": "${SF_API_KEY}" }
}
}
}
Windows: for any JSON config above, use "command": "cmd" and "args": ["/c", "npx", "-y", "scholar-feed-mcp"].
Scholar Feed is a standard stdio MCP server, so any other MCP-compatible client works with the standard block too.
Available Tools (25)
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). 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 |
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.
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.
Migrating from v1.x
Removed v1.x tools and their v3 replacementsv3.0.0 was a hard cutover with no deprecation window: the v1.x surface was consolidated into a smaller set of focused tools. If an agent still calls a removed v1.x tool, update it per this table. Full version history is in CHANGELOG.md.
| 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; remove any health-check calls. |
fetch_repo(arxiv_id=id) |
Removed (0 observed calls in production). Backend route preserved for skill use. |
License
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found