paper-search-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | Bind address for streamable-http transport. Default: 127.0.0.1. | 127.0.0.1 |
| MCP_PORT | No | Port for streamable-http transport. Default: 8000. | 8000 |
| MCP_TRANSPORT | No | Transport mode: 'stdio' (default) or 'streamable-http'. | stdio |
| MCP_PUBLIC_URL | No | Externally-visible base URL. When set, enables OAuth 2.1. Leave unset for local stdio use. | |
| MCP_ALLOWED_HOSTS | No | Comma-separated Host headers to accept (DNS-rebinding protection). Required when behind a reverse proxy. | |
| MCP_AUTH_STATE_PATH | No | Where to persist OAuth clients/tokens. Default: oauth-state.json beside server.py. | oauth-state.json |
| SEMANTIC_SCHOLAR_API_KEY | No | A personal Semantic Scholar API key. Without one, S2 calls fall back to the shared unauthenticated rate limit, which is slower and more prone to 429 errors. All other functionality works unaffected. | |
| PAPER_SEARCH_CONTACT_EMAIL | No | Sent as a mailto: contact to get polite pool (faster, more reliable) treatment from CrossRef and OpenAlex. Required by get_open_access_pdf (Unpaywall rejects requests with no email). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_crossrefA | Search CrossRef for scholarly works (articles, books, proceedings, etc.). Args: query: Free-text search query (e.g. title/author/topic keywords). rows: Max number of results to return (1-100). filter: Optional CrossRef filter string, e.g. "from-pub-date:2020-01-01,type:journal-article". sort: Optional sort field: relevance, published, is-referenced-by-count, etc. |
| get_crossref_workA | Fetch full CrossRef metadata for a single work by its DOI. Args: doi: The DOI of the work, e.g. "10.1037/0003-066x.59.1.29". |
| search_ericA | Search the ERIC database (education research literature) via api.ies.ed.gov. Args: query: Free-text search query, ERIC's Solr-style syntax is supported (e.g. 'title:"reading comprehension" AND author:Smith'). rows: Max number of results to return (1-100). start: Offset for pagination. |
| get_eric_recordA | Fetch full ERIC metadata for a single record by its ERIC ID (e.g. "EJ1234567"). Args: eric_id: The ERIC document identifier, e.g. "EJ1234567" or "ED123456". |
| search_semantic_scholarA | Search Semantic Scholar for papers across all disciplines. Args: query: Free-text search query (title/topic/author keywords). rows: Max number of results to return (1-100). |
| get_semantic_scholar_paperA | Fetch full Semantic Scholar metadata for a single paper. Args: paper_id: A Semantic Scholar paper ID, or a prefixed external ID such as "DOI:10.1037/0003-066x.59.1.29", "ARXIV:2106.15928", "PMID:12345678", or "CorpusID:215416146". |
| search_openalexA | Search OpenAlex for scholarly works across all disciplines. Args: query: Free-text search query (title/topic/author keywords). rows: Max number of results to return (1-100). filter: Optional OpenAlex filter string, e.g. "from_publication_date:2020-01-01,type:article". sort: Optional sort string, e.g. "cited_by_count:desc" or "publication_date:desc". |
| get_openalex_workA | Fetch full OpenAlex metadata for a single work. Args: work_id: An OpenAlex work ID (e.g. "W2741809807"), a bare DOI (e.g. "10.1037/0003-066x.59.1.29"), or a "doi:10.xxxx" string. |
| get_open_access_pdfA | Find a legal open-access PDF for a DOI via Unpaywall. Use this after CrossRef/OpenAlex/ERIC turns up a paper you want to read in full. Returns the best OA copy plus any alternatives, or is_open_access false when no free version is known. Args: doi: The DOI of the work, e.g. "10.1371/journal.pone.0000308". |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bbutlerau/paper-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server