{
  "markdown": "<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/logo-dark.png\">\n    <img alt=\"Scholar Feed\" src=\"assets/logo-light.png\" width=\"140\" height=\"140\">\n  </picture>\n</p>\n\n# Scholar Feed MCP Server\n\n[![CI](https://github.com/YGao2005/scholar-feed-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/YGao2005/scholar-feed-mcp/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/scholar-feed-mcp.svg)](https://www.npmjs.com/package/scholar-feed-mcp)\n[![Node](https://img.shields.io/node/v/scholar-feed-mcp.svg)](https://nodejs.org)\n[![License: MIT](https://img.shields.io/npm/l/scholar-feed-mcp.svg)](./LICENSE)\n[![smithery badge](https://smithery.ai/badge/yangg40/scholar-feed)](https://smithery.ai/servers/yangg40/scholar-feed)\n\nResearch paper search with ranking and citation tracking, for LLM engineering and academic research, without leaving Claude Code, Cursor, or any MCP client.\n\nMost 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.\n\n[Scholar Feed](https://www.scholarfeed.org) indexes arXiv papers daily and ranks them on recency, citation velocity, institutional reputation, and code availability.\n\n## Quick Start\n\n```bash\nnpx scholar-feed-mcp@latest init\n```\n\nThis interactive wizard will:\n1. Optionally ask for an API key (or skip for anonymous access)\n2. Detect your MCP client (Claude Code, Cursor, or Claude Desktop)\n3. Write the config and verify the connection\n\n**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](https://www.scholarfeed.org/settings).\n\nTry asking: *\"Search for recent papers on test-time compute scaling\"*\n\n## What You Can Do\n\n**Technology scouting:** \"What novel research on retrieval-augmented generation was published this month?\"\n\n**Literature review:** \"Find papers similar to 2401.04088 and export their BibTeX\"\n\n**Trend monitoring:** \"What's trending in cs.CV this week? Summarize the top 3.\"\n\n**Author discovery:** \"Who are the top researchers working on efficient LLM inference?\"\n\n**Field orientation:** \"Give me an orientation report on sparse mixture-of-experts architectures.\"\n\n## Installation\n\nThe 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.\n\n**Claude Desktop (one-click)** installs without editing any config: download the `.mcpb` bundle from the [latest release](https://github.com/YGao2005/scholar-feed-mcp/releases/latest) 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](https://www.scholarfeed.org/settings) for 1,000/day.\n\n**Claude Code** takes a one-line command:\n\n```bash\n# Anonymous (100 calls/day)\nclaude mcp add scholar-feed -- npx -y scholar-feed-mcp@latest\n\n# With an API key (1,000 calls/day per account)\nclaude mcp add scholar-feed -e SF_API_KEY=sf_your_key_here -- npx -y scholar-feed-mcp@latest\n```\n\n**Every other client** takes this standard JSON block:\n\n```json\n{\n  \"mcpServers\": {\n    \"scholar-feed\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"scholar-feed-mcp@latest\"]\n    }\n  }\n}\n```\n\nTo 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](https://www.scholarfeed.org/settings).\n\nDrop that block into the right config file:\n\n| Client | Config file | Notes |\n|--------|-------------|-------|\n| Cursor | `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global) | Restart Cursor. |\n| Claude Desktop | macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`; Windows: `%APPDATA%\\Claude\\claude_desktop_config.json` | Settings → Developer → Edit Config, then restart. |\n| Windsurf | `~/.codeium/windsurf/mcp_config.json` | Cascade → MCP icon → Configure, then refresh. |\n| Cline / Roo Code | `cline_mcp_settings.json` | MCP Servers sidebar icon → Configure. Cline and Roo Code share this format. |\n| Gemini CLI | `~/.gemini/settings.json` (or project `.gemini/settings.json`) | |\n| LM Studio | `~/.lmstudio/mcp.json` | Program tab → Install → Edit `mcp.json`. Follows Cursor's notation. |\n| JetBrains (PyCharm / IntelliJ) | AI Assistant → MCP → Add → As JSON | Requires AI Assistant 2025.1+. |\n\nA few clients need a different wrapper key or file format:\n\n<details>\n<summary><strong>OpenAI Codex, VS Code (GitHub Copilot), Zed, Continue, and project-scoped configs</strong></summary>\n\n**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.\n\n```toml\n[mcp_servers.scholar-feed]\ncommand = \"npx\"\nargs = [\"-y\", \"scholar-feed-mcp@latest\"]\nenv = { SF_API_KEY = \"sf_your_key_here\" }\n```\n\nDrop 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\"]`.\n\n**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.\n\n```json\n{\n  \"servers\": {\n    \"scholar-feed\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"scholar-feed-mcp@latest\"]\n    }\n  }\n}\n```\n\n**Zed** (`settings.json`) uses a `context_servers` key, and the `\"source\": \"custom\"` line is required (without it, Zed silently skips the entry).\n\n```json\n{\n  \"context_servers\": {\n    \"scholar-feed\": {\n      \"source\": \"custom\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"scholar-feed-mcp@latest\"]\n    }\n  }\n}\n```\n\n**Continue** uses YAML, with `mcpServers` as a list, in `~/.continue/config.yaml` (global) or `.continue/config.yaml` (workspace).\n\n```yaml\nmcpServers:\n  - name: scholar-feed\n    type: stdio\n    command: npx\n    args:\n      - \"-y\"\n      - scholar-feed-mcp@latest\n```\n\n**Project-scoped** (`.mcp.json`), to share the server across a repo:\n\n```json\n{\n  \"mcpServers\": {\n    \"scholar-feed\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"scholar-feed-mcp@latest\"],\n      \"env\": { \"SF_API_KEY\": \"${SF_API_KEY}\" }\n    }\n  }\n}\n```\n\n</details>\n\n**Windows:** for any JSON config above, use `\"command\": \"cmd\"` and `\"args\": [\"/c\", \"npx\", \"-y\", \"scholar-feed-mcp@latest\"]`.\n\nScholar Feed is a standard stdio MCP server, so any other MCP-compatible client works with the standard block too.\n\n## Available Tools (27)\n\n### Core Search & Discovery\n\n| Tool | Description | Key Parameters |\n|------|-------------|----------------|\n| `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` |\n| `get_paper` | Get full paper details by arXiv ID. Also handles batch lookup and BibTeX export. | `arxiv_ids`, `format`, `fields`, `verbose` |\n| `get_citations` | Citation graph (outgoing refs or incoming citations) | `arxiv_id`, `direction`, `limit`, `fields` |\n| `fetch_fulltext` | Extract results/experiments from LaTeX source. `sections: 'all'` returns the whole paper instead of the lean results excerpt. | `arxiv_id`, `sections` |\n\n### Authors\n\n| Tool | Description | Key Parameters |\n|------|-------------|----------------|\n| `find_author` | Find researchers by topic/name query, or retrieve a profile by ID. | `q`, `id`, `field`, `limit` |\n| `co_author_graph` | Co-authorship neighborhood for an author | `author_ids`, `window_years` |\n\n### Embeddings\n\n| Tool | Description | Key Parameters |\n|------|-------------|----------------|\n| `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` |\n\n### Research\n\n| Tool | Description | Key Parameters |\n|------|-------------|----------------|\n| `get_field_orientation` | Cheap retrieval orientation for a research area: top papers, subfields, open problems. No Pro quota. | `topic`, `limit` |\n| `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` |\n| `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` |\n\n### Library, Collections, Watches & Gap Analysis (require `SF_API_KEY`)\n\nThese MUTATE or read the authenticated user's account. The core read/search tools above work anonymously; these need a key.\n\n| Tool | Description | Key Parameters |\n|------|-------------|----------------|\n| `save_paper` | Bookmark a paper to your library (idempotent; feeds personalization). | `arxiv_id` |\n| `unsave_paper` | Remove a paper from your library (idempotent). | `arxiv_id` |\n| `like_paper` | \"More like this\" calibration signal for the For You feed (insert-only). | `arxiv_id` |\n| `list_library` | List your saved papers, newest first (includes your notes). | `limit`, `page` |\n| `annotate_paper` | Record your verdict on a paper — why it matters, when to use it, why you ruled it out. Upserted; returned by `list_library`, so it is what a later session reads instead of re-deriving. | `arxiv_id`, `note_text`, `action` |\n| `list_collections` | List collections with paper counts. | (none) |\n| `create_collection` | Create a named collection (get-or-create; no error on duplicate). | `name` |\n| `add_to_collection` | Add a paper to a collection by name or id (also auto-saves). | `arxiv_id`, `collection_name`, `collection_id` |\n| `remove_from_collection` | Remove a paper from a collection (stays saved). | `arxiv_id`, `collection_name`, `collection_id` |\n| `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` |\n| `list_watches` | List watches with summary, `last_evaluated_at`, and `pending_hits`. | (none) |\n| `check_watches` | Pull new matches since the last digest (read-only, idempotent). | `watch_name`, `watch_id`, `limit` |\n| `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` |\n| `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` |\n| `delete_watch` | Delete a watch by name or id (idempotent). | `name`, `watch_id` |\n| `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` |\n| `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` |\n\n## Novelty Score\n\nEvery paper has an `llm_novelty_score` from 0.0 to 1.0:\n\n| Range | Meaning | Example |\n|-------|---------|---------|\n| 0.7+ | Paradigm shift or broad SOTA | New architecture that changes the field |\n| 0.5-0.7 | Novel method with strong results | New training technique with clear gains |\n| 0.3-0.5 | Incremental improvement | Applying known method to new domain |\n| <0.3 | Survey, dataset, or minor extension | Literature review, benchmark release |\n\nUse `novelty_min: 0.5` in `search_papers` to filter for genuinely novel work.\n\n## Rate Limits\n\n| Endpoint | Limit |\n|----------|-------|\n| `search_papers` | 30/min |\n| `get_paper` | 30/min |\n| `get_citations` | 30/min |\n| `fetch_fulltext` | 10/min |\n| `find_author` | 20/min |\n| `co_author_graph` | 20/min |\n| `embed_text` | 30/min |\n| `get_field_orientation` | 20/min |\n| `get_foundational_lineage` | 20/min |\n| `find_gaps` | 20/min |\n| `ask_library` | 10/min |\n\nResponses include `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers.\n\n**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).\n\n## Example Response\n\n`search_papers` with `q: \"attention mechanism\"` returns:\n\n```json\n{\n  \"papers\": [\n    {\n      \"arxiv_id\": \"2401.04088\",\n      \"title\": \"Attention Is All You Need (But Not All You Get)\",\n      \"authors\": [\"A. Researcher\", \"B. Scientist\"],\n      \"year\": 2024,\n      \"categories\": [\"cs.LG\", \"cs.AI\"],\n      \"primary_category\": \"cs.LG\",\n      \"arxiv_url\": \"https://arxiv.org/abs/2401.04088\",\n      \"has_code\": true,\n      \"github_url\": \"https://github.com/example/repo\",\n      \"citation_count\": 42,\n      \"rank_score\": 0.73,\n      \"llm_summary\": \"Proposes a sparse attention variant that reduces compute by 60% while matching dense attention accuracy on 5 benchmarks.\",\n      \"llm_novelty_score\": 0.55\n    }\n  ],\n  \"total\": 1847,\n  \"page\": 1,\n  \"limit\": 20,\n  \"next_cursor\": \"eyJzIjogMC43MywgImlkIjogIjI0MDEuMDQwODgifQ==\"\n}\n```\n\nPass `next_cursor` back to get the next page (keyset pagination, which is more stable than page numbers for large result sets).\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `SF_API_KEY` | No | (none) | Your Scholar Feed API key (starts with `sf_`). Without it, runs in anonymous mode (100 calls/day). |\n| `SF_API_BASE_URL` | No | Production URL | Override API base URL |\n\n## Development\n\n```bash\nnpm install\nnpm run build      # Build to build/\nnpm run dev        # Watch mode\nnpm run typecheck  # Type check without emitting\nnpm test           # Run tests\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## Troubleshooting\n\n**\"Authentication failed: your SF_API_KEY is invalid\"**\nThe key may have been revoked. Generate a new one at [scholarfeed.org/settings](https://www.scholarfeed.org/settings). Or remove the key to use anonymous mode.\n\n**\"Rate limit exceeded\" or \"Anonymous daily limit exceeded\"**\nAnonymous mode allows 100 calls/day. Get a free API key at [scholarfeed.org/settings](https://www.scholarfeed.org/settings) for 1,000 calls/day per account.\n\n**Server shows as \"failed\" with no error — especially right after an update**\nThe 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`:\n\n```bash\nnpm install -g scholar-feed-mcp\n# then in your MCP config:  \"command\": \"scholar-feed-mcp\", \"args\": []\n```\n\n**Tool calls time out or fail silently**\nEnsure Node.js 18+ is installed (`node --version`). Older versions lack the native `fetch` API.\n\n**Stale npx cache**\nThe 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`.\n\n**Windows: \"command not found\"**\nUse `\"command\": \"cmd\"` with `\"args\": [\"/c\", \"npx\", \"-y\", \"scholar-feed-mcp@latest\"]` in your MCP config.\n\n## About Scholar Feed\n\n[Scholar Feed](https://www.scholarfeed.org) 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.\n\n- Website: <https://www.scholarfeed.org>\n- npm: <https://www.npmjs.com/package/scholar-feed-mcp>\n- REST API: <https://api.scholarfeed.org/v1>\n\n## Privacy\n\nSee our [privacy policy](https://www.scholarfeed.org/privacy-policy).\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 17743,
  "sha": "7181fea341f66e4193118069cb251b9ef611abde6e5c7d1f779d6aa2db11165a",
  "repo_slug": "ygao2005/scholar-feed-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ygao2005_scholar_feed_mcp_7286a1dc/readme"
}