{
 "voice": "One card of the book.",
 "agent": {
  "slug": "scholar-feed",
  "name": "Scholar Feed",
  "specialty": "research",
  "description": "Rank CS/AI/ML papers by citations, forecast impact, or code adoption; trace 23.2M citation edges.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-11-07T23:13:37.332Z",
  "card": "/agent/scholar-feed",
  "url": "https://allagents.app/agent/scholar-feed",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://mcp.scholarfeed.org/mcp?src=mcp-registry",
   "site": "https://www.scholarfeed.org"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [
   "npm"
  ],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://www.scholarfeed.org",
   "hire": null
  },
  "bubble": "closed",
  "score": 58,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-11-08",
   "total": 25,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "search_papers",
     "description": "Search Scholar Feed's 600k+ CS/AI/ML paper corpus. Semantic (embedding) search by default, so it finds conceptually related work even when the wording…"
    },
    {
     "name": "get_paper",
     "description": "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…"
    },
    {
     "name": "get_citations",
     "description": "Get the citation graph for a paper, sorted by citing-paper rank_score (highest-impact first). 'citing' = outgoing references this paper cites; 'cited_by' =…"
    },
    {
     "name": "fetch_fulltext",
     "description": "Read arXiv papers' actual text, by section. Section selection controls context cost: ask for the one or two you need, not whole papers — 'all' is ~13.5KB a…"
    },
    {
     "name": "find_author",
     "description": "Two-mode author tool. Provide exactly one of q or id. Q-MODE (q=...): search for researchers by topic or name — uses embedding similarity for topics…"
    },
    {
     "name": "co_author_graph",
     "description": "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'…"
    },
    {
     "name": "embed_text",
     "description": "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…"
    },
    {
     "name": "get_field_orientation",
     "description": "Returns CANDIDATE FOUNDATIONAL PAPERS for a research topic — cheap retrieval only, no synthesis. Ranks papers by a blend of citation count (0.6 weight…"
    },
    {
     "name": "get_foundational_lineage",
     "description": "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'…"
    },
    {
     "name": "save_paper",
     "description": "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…"
    },
    {
     "name": "unsave_paper",
     "description": "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…"
    },
    {
     "name": "like_paper",
     "description": "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…"
    },
    {
     "name": "list_library",
     "description": "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…"
    },
    {
     "name": "list_collections",
     "description": "List the authenticated user's collections (named groups of saved papers) with paper counts. Read-only. Use before add_to_collection to see existing…"
    },
    {
     "name": "create_collection",
     "description": "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)…"
    },
    {
     "name": "add_to_collection",
     "description": "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 \"/\"…"
    },
    {
     "name": "remove_from_collection",
     "description": "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…"
    },
    {
     "name": "create_watch",
     "description": "Create a standing watch — evaluated daily against newly-indexed papers, surfacing new matches via the email digest and via check_watches. MUTATES…"
    },
    {
     "name": "list_watches",
     "description": "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…"
    },
    {
     "name": "check_watches",
     "description": "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…"
    },
    {
     "name": "delete_watch",
     "description": "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 /…"
    },
    {
     "name": "update_watch",
     "description": "Update an existing watch in place — rename, change novelty_min, or RETARGET its structured filter `criteria`. MUTATES. Address by watch_id OR name. Changing…"
    },
    {
     "name": "preview_watch",
     "description": "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…"
    },
    {
     "name": "find_gaps",
     "description": "Find important work you HAVEN'T saved, for a collection or topic — a 'what am I missing?' analysis. Returns two buckets: foundational_gaps (canonical…"
    },
    {
     "name": "ask_library",
     "description": "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…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://mcp.scholarfeed.org/mcp?src=mcp-registry",
   "answers": true,
   "checked": "2026-11-08T06:06:00.120Z",
   "http": 405,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-11-08T06:47:55.900Z",
     "since": "2026-11-08T06:47:55.900Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-11-08T06:47:55.900Z",
    "since": "2026-11-08T06:47:55.900Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 405,
   "checked": "2026-11-08T06:06:00.120Z",
   "last_answer_at": "2026-11-08T06:06:00.120Z",
   "last_ms": 539,
   "checked_at": "2026-11-08T06:06:00.120Z"
  }
 }
}