unpaywall-mcp
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 7 GitHub stars
Code Uyari
- process.env — Environment variable access in src/index.ts
- network request — Outbound network request in src/index.ts
Permissions Gecti
- Permissions — No dangerous permissions requested
This server acts as a bridge between AI clients and the Unpaywall API, allowing users to search academic articles by title, fetch metadata via DOI, retrieve open-access links, and extract text from open-access PDFs.
Security Assessment
Overall risk: Low. The tool makes outbound network requests specifically to the Unpaywall API and external academic PDFs, which is expected given its purpose. It accesses the `UNPAYWALL_EMAIL` environment variable, but only because the API politely requires an email address for access—there is no evidence of unauthorized data collection or hardcoded secrets. It does not request dangerous system permissions and does not appear to execute arbitrary shell commands. Overall, the tool strictly limits its activities to its described academic functions.
Quality Assessment
The project is very new and currently has low visibility with only 7 GitHub stars, meaning it has not yet been widely tested or vetted by a large community. However, it shows strong health signs: it is licensed under the permissive MIT license, includes automated CI testing, and was actively updated very recently. While community trust is currently minimal due to its size, the underlying code practices seem transparent and standard for a Node.js project.
Verdict
Safe to use, though you should expect early-project rough edges due to its low community adoption.
AnModel Context Protocol (MCP) server for the Unpaywall API. Search article titles, fetch DOI metadata, retrieve best open‑access links, and extract text from OA PDFs—ready for Claude Desktop and any MCP‑compatible client. Ideal for LLM research assistants, literature review, and academic workflows.
Unpaywall MCP Server
An MCP (Model Context Protocol) server exposing Unpaywall tools so AI clients can:
- Fetch metadata by DOI
- Search article titles
- Retrieve best OA fulltext links
- Download and extract text from OA PDFs
Quickstart (npx)
Add this to your MCP client config (Claude Desktop example):
{
"mcpServers": {
"unpaywall": {
"command": "npx",
"args": ["-y", "unpaywall-mcp"],
"env": { "UNPAYWALL_EMAIL": "[email protected]" }
}
}
}
Then try the tools: unpaywall_search_titles, unpaywall_get_fulltext_links, unpaywall_fetch_pdf_text.
Requirements
- Node.js 18+
- An email address for Unpaywall requests (they require it for polite usage).
Setup
# Install deps
npm install
# Build
npm run build
# Run (stdio transport, as required by MCP clients)
[email protected] npm start
For development with hot-run (no build step):
[email protected] npm run dev
Tools
unpaywall_get_by_doi
- Description: Fetch Unpaywall metadata for a DOI
- Input schema:
doi(string, required): e.g.10.1038/nphys1170email(string, optional): overridesUNPAYWALL_EMAILif provided
- Output: JSON response from Unpaywall
unpaywall_search_titles
- Description: Search Unpaywall for article titles matching a query (50 results/page)
- Input schema:
query(string, required): title queryis_oa(boolean, optional): if true, only OA results; if false, only closed; omit for allpage(integer >= 1, optional): page numberemail(string, optional): overridesUNPAYWALL_EMAIL
- Output: JSON search results from
GET https://api.unpaywall.org/v2/search
unpaywall_get_fulltext_links
- Description: Return the best OA PDF URL and Open URL for a DOI, plus all OA locations
- Input schema:
doi(string, required)email(string, optional): overridesUNPAYWALL_EMAIL
- Output: JSON with fields:
best_pdf_url,best_open_url,best_oa_location,oa_locations, and select metadata
unpaywall_fetch_pdf_text
- Description: Download and extract text from the best OA PDF for a DOI, or from a provided
pdf_url - Input schema:
pdf_url(string, optional): direct PDF URL (takes precedence)doi(string, optional): used to resolve best OA PDF ifpdf_urlnot providedemail(string, optional): required if usingdoiand noUNPAYWALL_EMAILenv vartruncate_chars(integer >= 1000, optional): max characters of extracted text to return (default 20000)
- Output: JSON with
text(possibly truncated),length_chars,truncated,pdf_url, and PDF metadata
LLM prompting tips (MCP)
When using this server from an MCP-enabled LLM client, ask the model to:
- Search then fetch: Use
unpaywall_search_titleswith a concise title phrase; select a result; then callunpaywall_get_fulltext_linksorunpaywall_fetch_pdf_texton the chosen DOI. - Prefer OA: Pass
is_oa: truein searches when you only want open-access. - Control size: Set
truncate_charsinunpaywall_fetch_pdf_text(default 20000) and summarize long texts before proceeding. - Be resilient: If the best PDF URL is missing, fall back to
best_open_urland extract content from the landing page (outside this server). - Respect rate limits: Space requests if making many calls; reuse earlier responses instead of repeating the same call.
Good user instructions to the LLM:
- "Find 3 OA papers about 'foundation models in biomedicine', then extract and summarize the introduction of the best one."
- "Search for 'Graph Neural Networks survey 2024', filter to OA if possible, then fetch the PDF text and produce a 10-bullet summary."
Example tool call payloads
Depending on your MCP client, the structure differs; the core payloads are:
// Search titles
{
"name": "unpaywall_search_titles",
"arguments": {
"query": "graph neural networks survey",
"is_oa": true,
"page": 1
}
}
// Get best OA links for a DOI
{
"name": "unpaywall_get_fulltext_links",
"arguments": {
"doi": "10.48550/arXiv.1812.08434"
}
}
// Fetch and extract PDF text (by DOI)
{
"name": "unpaywall_fetch_pdf_text",
"arguments": {
"doi": "10.48550/arXiv.1812.08434",
"truncate_chars": 20000
}
}
Configure in an MCP client
Recommended (no-build) config for Claude Desktop using npm/npx:
{
"mcpServers": {
"unpaywall": {
"command": "npx",
"args": ["-y", "unpaywall-mcp"],
"env": {
"UNPAYWALL_EMAIL": "[email protected]"
}
}
}
}
Alternative (local repo) config using the compiled dist:
{
"mcpServers": {
"unpaywall": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"],
"env": {
"UNPAYWALL_EMAIL": "[email protected]"
}
}
}
}
After adding, ask your client to list tools and try:
unpaywall_search_titleswith aqueryunpaywall_get_fulltext_linkswith adoiunpaywall_fetch_pdf_textwith adoi(orpdf_url)
Notes
- Respect Unpaywall's rate limits and usage guidelines: https://unpaywall.org/products/api
- The server uses stdio transport and
@modelcontextprotocol/sdk. - Set
UNPAYWALL_EMAILor passemailper call so Unpaywall can contact you about usage.
Maintainers: publish to npm
# 1) Build the project (also runs automatically on publish)
npm run build
# 2) Bump version (choose patch/minor/major)
npm version patch
# 3) Publish (ensure you are logged in: npm login)
npm publish --access public
# 4) Tag a release on GitHub (optional, recommended)
Users can then configure their MCP client with npx -y unpaywall-mcp as shown above. No clone or build required.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi