Unpaywall MCP 服务器通过 MCP(模型上下文协议)暴露 Unpaywall 工具,使 AI 客户端能够:
将以下内容添加到你的 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
# 构建项目
npm run build
# 运行项目(使用 stdio 传输,这是 MCP 客户端所要求的)
UNPAYWALL_EMAIL=you@example.com npm start
如果你想在开发环境中使用热加载(无需构建步骤),可以运行以下命令:
UNPAYWALL_EMAIL=you@example.com npm run dev
根据你的 MCP 客户端不同,结构可能会有所不同,但核心负载如下:
// 搜索标题
{
"name": "unpaywall_search_titles",
"arguments": {
"query": "graph neural networks survey",
"is_oa": true,
"page": 1
}
}
// 获取 DOI 的最佳开放获取链接
{
"name": "unpaywall_get_fulltext_links",
"arguments": {
"doi": "10.48550/arXiv.1812.08434"
}
}
// 获取并提取 PDF 文本(通过 DOI)
{
"name": "unpaywall_fetch_pdf_text",
"arguments": {
"doi": "10.48550/arXiv.1812.08434",
"truncate_chars": 20000
}
}
使用 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"
}
}
}
}
添加配置后,让你的客户端列出工具并尝试以下操作:
query
参数调用 unpaywall_search_titles
doi
参数调用 unpaywall_get_fulltext_links
doi
(或 pdf_url
)参数调用 unpaywall_fetch_pdf_text
doi
(字符串,必填):例如 10.1038/nphys1170
email
(字符串,可选):如果提供,将覆盖 UNPAYWALL_EMAIL
环境变量query
(字符串,必填):标题查询字符串is_oa
(布尔值,可选):如果为 true
,仅返回开放获取的结果;如果为 false
,仅返回封闭访问的结果;不提供则返回所有结果page
(整数,大于等于 1,可选):页码email
(字符串,可选):覆盖 UNPAYWALL_EMAIL
环境变量GET https://api.unpaywall.org/v2/search
的 JSON 搜索结果doi
(字符串,必填)email
(字符串,可选):覆盖 UNPAYWALL_EMAIL
环境变量best_pdf_url
、best_open_url
、best_oa_location
、oa_locations
以及部分元数据pdf_url
中提取文本pdf_url
(字符串,可选):直接的 PDF URL(优先使用)doi
(字符串,可选):如果未提供 pdf_url
,则用于解析最佳开放获取 PDFemail
(字符串,可选):如果使用 doi
且未设置 UNPAYWALL_EMAIL
环境变量,则为必填项truncate_chars
(整数,大于等于 1000,可选):返回的提取文本的最大字符数(默认 20000)text
(可能被截断)、length_chars
、truncated
、pdf_url
以及 PDF 元数据的 JSON当从支持 MCP 的 LLM 客户端使用此服务器时,建议向模型提出以下要求:
unpaywall_search_titles
输入简洁的标题短语进行搜索;选择一个结果;然后对所选的 DOI 调用 unpaywall_get_fulltext_links
或 unpaywall_fetch_pdf_text
。is_oa: true
。unpaywall_fetch_pdf_text
中设置 truncate_chars
(默认 20000),并在处理长文本之前进行总结。best_open_url
并从着陆页提取内容(此操作在本服务器之外)。以下是一些给 LLM 的良好用户指令示例:
# 1) 构建项目(发布时也会自动运行)
npm run build
# 2) 提升版本号(选择 patch/minor/major)
npm version patch
# 3) 发布(确保你已登录:npm login)
npm publish --access public
# 4) 在 GitHub 上标记发布版本(可选,推荐)
用户可以按照上述方式使用 npx -y unpaywall-mcp
配置他们的 MCP 客户端,无需克隆或构建项目。
请参考项目中的 LICENSE 文件获取详细的许可证信息。
@modelcontextprotocol/sdk
。UNPAYWALL_EMAIL
环境变量或在每次调用时传递 email
参数,以便 Unpaywall 可以就使用情况与你联系。