ScholarFetch MCP
A multi-engine scholarly research server that allows agents to search academic papers, resolve authors, read abstracts and full text, expand references, save papers to reading lists, and export results in various formats like BibTeX or full-text corpora.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://laibniz-scholarfetch-web.hf.space/mcp/What its tools do
12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Not annotated (12)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search academic papers across multiple engines
- Resolve author information and expand to their paper lists
- Read abstracts and full text of academic articles
- Export saved reading lists as BibTeX or full-text corpora
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- ScholarFetch FastMCP 1.12.4
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 12 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"experimental": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
12 advertised
scholarfetch_search
Start a research traversal from keywords, a DOI, or a person name. Returns deduplicated paper records that you can inspect, save, expand through references, or use as seeds for author exploration. If you pass `engines`, use a comma-separated subset of: elsevier, openalex, crossref, arxiv, europepmc, springer, semanticscholar.
{
"type": "object",
"title": "scholarfetch_searchArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 20
},
"query": {
"type": "string",
"title": "Query"
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
}
}
}{
"type": "object",
"title": "scholarfetch_searchOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_doi_lookup
Enrich one known DOI with metadata, reading links, and full-text availability signals. If you pass `engines`, use a comma-separated subset of: elsevier, openalex, crossref, arxiv, europepmc, springer, semanticscholar.
{
"type": "object",
"title": "scholarfetch_doi_lookupArguments",
"required": [
"doi"
],
"properties": {
"doi": {
"type": "string",
"title": "Doi"
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
}
}
}{
"type": "object",
"title": "scholarfetch_doi_lookupOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_author_candidates
Disambiguate a human author name into ranked identity candidates. Use this before `scholarfetch_author_papers` when the name is ambiguous and you need a stable `candidate_index`. If you pass `engines`, it must include `openalex`.
{
"type": "object",
"title": "scholarfetch_author_candidatesArguments",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 10
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
}
}
}{
"type": "object",
"title": "scholarfetch_author_candidatesOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_author_papers
Expand one author into a deduplicated paper list. This is the main author->paper traversal tool and supports research filters. Use `author_id` when you already know the exact author, or `author_name` plus `candidate_index` after `scholarfetch_author_candidates`. Supported comma-separated `filters`: year>=YYYY, year<=YYYY, year=YYYY, has:abstract, has:doi, has:pdf, venue:<text>, title:<text>, doi:<text>. If you pass `engines`, it must include `openalex`.
{
"type": "object",
"title": "scholarfetch_author_papersArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 50
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
},
"filters": {
"type": "string",
"title": "Filters",
"default": ""
},
"author_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author Id",
"default": null
},
"author_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author Name",
"default": null
},
"candidate_index": {
"type": "integer",
"title": "Candidate Index",
"default": 1
}
}
}{
"type": "object",
"title": "scholarfetch_author_papersOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_abstract
Read the best abstract available for a paper. Use with a DOI or with author_name + candidate_index + paper_index after author_papers. If you pass `engines`, use a comma-separated subset of: elsevier, openalex, crossref, arxiv, europepmc, springer, semanticscholar.
{
"type": "object",
"title": "scholarfetch_abstractArguments",
"properties": {
"doi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Doi",
"default": null
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
},
"author_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author Name",
"default": null
},
"paper_index": {
"type": "integer",
"title": "Paper Index",
"default": 1
},
"candidate_index": {
"type": "integer",
"title": "Candidate Index",
"default": 1
}
}
}{
"type": "object",
"title": "scholarfetch_abstractOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_article_text
Read full paper text when machine-readable content is recoverable. Use with a DOI or with author_name + candidate_index + paper_index. Uses Elsevier first, then open-access fallbacks such as Springer OA, Europe PMC, arXiv PDF, and generic PDF URLs when text is recoverable. If you pass `engines`, use a comma-separated subset of: elsevier, openalex, crossref, arxiv, europepmc, springer, semanticscholar.
{
"type": "object",
"title": "scholarfetch_article_textArguments",
"properties": {
"doi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Doi",
"default": null
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
},
"author_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author Name",
"default": null
},
"paper_index": {
"type": "integer",
"title": "Paper Index",
"default": 1
},
"candidate_index": {
"type": "integer",
"title": "Candidate Index",
"default": 1
}
}
}{
"type": "object",
"title": "scholarfetch_article_textOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_references
Expand a paper into its references. Use with a DOI or with author_name + candidate_index + paper_index. This is the main edge-expansion tool for traversing the literature graph. If you pass `engines`, use a comma-separated subset of: elsevier, openalex, crossref, arxiv, europepmc, springer, semanticscholar.
{
"type": "object",
"title": "scholarfetch_referencesArguments",
"properties": {
"doi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Doi",
"default": null
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
},
"author_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author Name",
"default": null
},
"paper_index": {
"type": "integer",
"title": "Paper Index",
"default": 1
},
"candidate_index": {
"type": "integer",
"title": "Candidate Index",
"default": 1
}
}
}{
"type": "object",
"title": "scholarfetch_referencesOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_saved_add
Add one paper to a named in-memory reading list on the MCP server. Best input is paper_json copied from another ScholarFetch tool result, but DOI, query+result_index, or author_name+candidate_index+paper_index also work. Reuse the same collection name across calls to keep one research session together.
{
"type": "object",
"title": "scholarfetch_saved_addArguments",
"properties": {
"doi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Doi",
"default": null
},
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Query",
"default": null
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
},
"collection": {
"type": "string",
"title": "Collection",
"default": "default"
},
"paper_json": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Paper Json",
"default": null
},
"author_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author Name",
"default": null
},
"paper_index": {
"type": "integer",
"title": "Paper Index",
"default": 1
},
"result_index": {
"type": "integer",
"title": "Result Index",
"default": 1
},
"candidate_index": {
"type": "integer",
"title": "Candidate Index",
"default": 1
}
}
}{
"type": "object",
"title": "scholarfetch_saved_addOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_saved_list
List all papers currently saved in a named in-memory reading list. Use this to inspect the working set before exporting or removing items.
{
"type": "object",
"title": "scholarfetch_saved_listArguments",
"properties": {
"collection": {
"type": "string",
"title": "Collection",
"default": "default"
}
}
}{
"type": "object",
"title": "scholarfetch_saved_listOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_saved_remove
Remove one paper from a named in-memory reading list by DOI or exact title.
{
"type": "object",
"title": "scholarfetch_saved_removeArguments",
"properties": {
"doi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Doi",
"default": null
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title",
"default": null
},
"collection": {
"type": "string",
"title": "Collection",
"default": "default"
}
}
}{
"type": "object",
"title": "scholarfetch_saved_removeOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_saved_clear
Clear all papers from a named in-memory reading list. Useful when restarting a research branch.
{
"type": "object",
"title": "scholarfetch_saved_clearArguments",
"properties": {
"collection": {
"type": "string",
"title": "Collection",
"default": "default"
}
}
}{
"type": "object",
"title": "scholarfetch_saved_clearOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}scholarfetch_saved_export
Export the current reading list as citations, abstracts, BibTeX, or an aggregated full-text corpus. Valid `format` values: citations, abstracts, bib, fulltext. Valid `style` values when `format=citations`: harvard, apa, ieee. Use `include_references=true` with `format=fulltext` when you want a richer downstream synthesis corpus.
{
"type": "object",
"title": "scholarfetch_saved_exportArguments",
"properties": {
"style": {
"type": "string",
"title": "Style",
"default": "harvard"
},
"format": {
"type": "string",
"title": "Format",
"default": "citations"
},
"engines": {
"type": "string",
"title": "Engines",
"default": ""
},
"collection": {
"type": "string",
"title": "Collection",
"default": "default"
},
"include_references": {
"type": "boolean",
"title": "Include References",
"default": false
}
}
}{
"type": "object",
"title": "scholarfetch_saved_exportOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}Prompts
0 advertised
Resources
0 advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 582 ms
- 95th percentile latency
- 582 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 582 ms · metadata changed · 12 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http scholarfetch-mcp https://laibniz-scholarfetch-web.hf.space/mcp/Codex
codex mcp add scholarfetch-mcp --url https://laibniz-scholarfetch-web.hf.space/mcp/Cursor
{
"mcpServers": {
"scholarfetch-mcp": {
"url": "https://laibniz-scholarfetch-web.hf.space/mcp/"
}
}
}Cline
{
"mcpServers": {
"scholarfetch-mcp": {
"type": "streamableHttp",
"url": "https://laibniz-scholarfetch-web.hf.space/mcp/",
"disabled": false
}
}
}VS Code
{
"servers": {
"scholarfetch-mcp": {
"type": "http",
"url": "https://laibniz-scholarfetch-web.hf.space/mcp/"
}
}
}Gemini CLI
gemini mcp add --transport http scholarfetch-mcp https://laibniz-scholarfetch-web.hf.space/mcp/Claude Desktop
https://laibniz-scholarfetch-web.hf.space/mcp/Windsurf
{
"mcpServers": {
"scholarfetch-mcp": {
"serverUrl": "https://laibniz-scholarfetch-web.hf.space/mcp/"
}
}
}Let your agent find its tools
Find servers like ScholarFetch MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.