无付费MCP服务器
](https://www.npmjs.com/package/unpaywall-mcp)   ](#requirements)
MCP(模型上下文协议)服务器公开Unpaywall工具,以便AI客户端可以:
- 按DOI获取元数据
- 搜索文章标题
- 检索最佳OA全文链接
- 从OA PDF下载和提取文本
快速入门(npx)
将此添加到您的MCP客户端配置中(Claude Desktop示例):
{
"mcpServers": {
"unpaywall": {
"command": "npx",
"args": ["-y", "unpaywall-mcp"],
"env": { "UNPAYWALL_EMAIL": "you@example.com" }
}
}
}然后尝试使用工具: unpaywall_search_titles, unpaywall_get_fulltext_links, unpaywall_fetch_pdf_text.
您不需要克隆此仓库或运行 npm install — npx 处理第一次调用时的获取和缓存。
需求
- Node.js 18+(适用于
npx) - Unpaywall/OpenAlex请求的电子邮件地址(Unpaywall要求,用于OpenAlex礼貌池)。
地方发展(仅贡献者)
最终用户应该使用上面的npx配置。贡献者从源代码构建:
npm install
npm run build
UNPAYWALL_EMAIL=you@example.com npm start # stdio transport, as required by MCP clients热运行(无构建步骤):
UNPAYWALL_EMAIL=you@example.com npm run dev工具
unwall_get_by_doi
- 描述:获取DOI的未付费元数据
- 输入架构:
- doi (字符串,必填):例如。 10.1038/nphys1170 - email (字符串,可选):覆盖 UNPAYWALL_EMAIL 如果提供
- 输出:来自Unpaywall的JSON响应
unwall_search_titles
- 描述:搜索文章标题,并为每次点击返回Unpaywall风格的OA元数据(50个结果/页)
- 输入架构:
- query (字符串,必填):标题查询 - is_oa (boolean,可选):如果为真,则仅OA结果;如果为false,则只关闭;全部省略 - page (整数>=1,可选):页码 - email (字符串,可选):覆盖 UNPAYWALL_EMAIL
- 输出:JSON匹配Unpaywall搜索形状--
results[].response是DOI风格的记录(doi,title,is_oa,oa_status,best_oa_location,oa_locations),与score和snippet每个结果。_source: "openalex"标志着上游。 - 注:由OpenAlex支持
/works端点,因为Unpaywall自己的/v2/search自2025年5月重写以来,一直在返回HTTP 500。Unpaywall现在作为OpenAlex的一个子例程运行,因此这是规范的现代等效程序。
unwall_get_fulltext_links
- 描述:返回DOI的最佳OA PDF URL和Open URL,以及所有OA位置
- 输入架构:
- doi (字符串,必填) - email (字符串,可选):覆盖 UNPAYWALL_EMAIL
- 输出:带字段的JSON:
best_pdf_url,best_open_url,best_oa_location,oa_locations,并选择元数据
unwall_fetch_pdf_text
- 描述:从DOI的最佳OA PDF或提供的
pdf_url - 输入架构:
- pdf_url (字符串,可选):直接PDF URL(优先) - doi (字符串,可选):用于在以下情况下解析最佳OA PDF pdf_url 未提供 - email (字符串,可选):如果使用,则为必填项 doi 而没有 UNPAYWALL_EMAIL env 是 - truncate_chars (整数>=1000,可选):要返回的提取文本的最大字符数(默认20000)
- 输出:JSON
text(可能被截断),length_chars,truncated,pdf_url,以及PDF元数据
LLM提示提示提示(MCP)
当从启用MCP的LLM客户端使用此服务器时,要求模型:
- __搜索然后提取__:使用
unpaywall_search_titles用简洁的标题短语;选择结果;然后打电话unpaywall_get_fulltext_links或unpaywall_fetch_pdf_text关于选定的DOI。 - __更喜欢OA__:通行证
is_oa: true当你只想开放访问时,在搜索中。 - __控制大小__:设置
truncate_chars在unpaywall_fetch_pdf_text(默认值20000),并在继续之前总结长篇文本。 - __要有韧性__:如果缺少最佳PDF URL,请返回
best_open_url并从登录页面(在该服务器之外)提取内容。 - __遵守费率限制__:如果拨打多个电话,请预留空间;重用早期的响应,而不是重复相同的调用。
LLM的良好用户说明:
- “找到3篇关于‘生物医学基础模型’的OA论文,然后提取并总结最佳论文的介绍。”
- “搜索‘图形神经网络调查2024’,如果可能的话过滤到OA,然后提取PDF文本并生成10个项目摘要。”
示例工具调用有效载荷
根据您的MCP客户端,结构会有所不同;核心有效载荷是:
// 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
}
}在MCP客户端中配置
建议使用npm/npx为Claude Desktop配置(无构建):
{
"mcpServers": {
"unpaywall": {
"command": "npx",
"args": ["-y", "unpaywall-mcp"],
"env": {
"UNPAYWALL_EMAIL": "you@example.com"
}
}
}
}使用编译的dist的替代(本地仓库)配置:
{
"mcpServers": {
"unpaywall": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"],
"env": {
"UNPAYWALL_EMAIL": "you@example.com"
}
}
}
}添加后,让您的客户列出工具并尝试:
unpaywall_search_titles带着一个queryunpaywall_get_fulltext_links带着一个doiunpaywall_fetch_pdf_text带着一个doi(或pdf_url)
备注
- 遵守Unpaywall的费率限制和使用指南:https://unpaywall.org/products/api
- 服务器使用stdio传输和
@modelcontextprotocol/sdk. - 集
UNPAYWALL_EMAIL或通过email每次通话,Unpaywall可以联系您了解使用情况。
维护者:发布到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)然后,用户可以配置他们的MCP客户端 npx -y unpaywall-mcp 如上所示。无需克隆或构建。
