Zenodo交互服务器

一个允许LLM代理通过Zenodo REST API查询和交互Zenodo存储库的MCP服务器。

  • by eic
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 eic/zenodo-mcp-server

使用说明

zenodo mcp服务器

允许LLM代理查询和交互的MCP服务器 泽诺多 使用 Zenodo REST API.

特性

  • 未经身份验证的访问 –在没有API密钥的情况下搜索和检查公共记录
  • 会话API密钥 –在运行时通过以下方式提供个人访问令牌 set_api_key 工具
  • 持久服务帐户 –设置 ZENODO_API_KEY 长期密钥的环境变量
  • 可选写访问 –创建、更新和发布证词(通过启用 ZENODO_ALLOW_WRITE=true)
  • 使用完整的Elasticsearch查询语法、分页和过滤搜索记录
  • 浏览和过滤Zenodo社区
  • 检索记录元数据、文件和文件内容(文本或二进制)
  • 列出、创建、更新、发布和版本证词(需要编写工具 ZENODO_ALLOW_WRITE=true)
  • 沙箱或自托管实例的可配置Zenodo基本URL
  • 可选的默认社区过滤器 ZENODO_COMMUNITY

快速开始

先决条件

  • Node.js 18或更高版本
  • npm

安装

git clone https://github.com/eic/zenodo-mcp-server.git
cd zenodo-mcp-server
npm install
npm run build

运行服务器

# Without authentication (public records only)
node build/src/index.js

# With a persistent API key (service account)
ZENODO_API_KEY=your_token node build/src/index.js

# Against the Zenodo sandbox
ZENODO_BASE_URL=https://sandbox.zenodo.org ZENODO_API_KEY=your_sandbox_token node build/src/index.js

认证

Zenodo使用 个人访问令牌 用于身份验证。

选项1–会话密钥(建议交互式使用)

连接到服务器后,调用 set_api_key 工具:

{ "name": "set_api_key", "arguments": { "api_key": "your_personal_access_token" } }

令牌在服务器进程的生命周期内存储在内存中,永远不会写入磁盘。

选项2——环境变量(服务帐户/CI)

export ZENODO_API_KEY=your_personal_access_token
node build/src/index.js

创建令牌

  1. 登录到 zenodo.org
  2. 首选 账户→ 设置→ 应用程序→ 个人访问令牌
  3. 点击 新代币 并选择所需的范围:
    • deposit:write –创建和更新证词
    • deposit:actions –公布证词
    • user:email –验证身份(可选)
  4. 安全地保存令牌——它只显示一次

可用工具

工具 描述 需要授权 需要写入
get_auth_status 检查身份验证状态并获取设置指南 否 否
set_api_key 为当前会话设置个人访问令牌 否 否
search_records 使用Elasticsearch查询语法搜索Zenodo记录 否 否
get_community 获取特定Zenodo社区的详细信息 否 否
list_communities 搜索或列出Zenodo社区 否 否
get_record 按ID或DOI获取记录的完整元数据 否 否
list_record_files 列出附加到记录的文件 否 否
get_file_content 下载文件内容(文本或base64) 否 否
list_depositions 列出你自己的证词(草稿+已发表) 是 没有
create_deposition 创建新的空白沉积(草稿) 是 是
get_deposition 按ID检索单个存款 是 是
update_deposition 更新证词草稿的元数据 是 是
delete_deposition 删除未发布的证词草稿 是 是
upload_file 将文件上传到证词 是 是
delete_deposition_file 从未发布的证词中删除文件 是 是
publish_deposition 发布证词并登记DOI 是 是
edit_deposition 解锁已发布的沉积以进行元数据编辑 是 是
discard_deposition 放弃编辑并恢复到已发布状态 是 是
new_version 创建已发布证词的新版本 是 是

写入工具仅在以下情况下可用 ZENODO_ALLOW_WRITE=true (或 ZENODO_ALLOW_WRITE=1)已设置。看 docs/TOOLS.md 有关完整参数的详细信息。

search_records

{
  "name": "search_records",
  "arguments": {
    "query": "electron ion collider",
    "size": 10,
    "page": 1,
    "sort": "mostrecent",
    "type": "publication",
    "subtype": "article",
    "communities": "zenodo",
    "all_versions": false,
    "bounds": "143.37,-38.99,146.90,-37.35"
  }
}

排序选项: bestmatch, mostrecent, mostviewed, mostdownloaded (前缀 - 下降)。

资源类型: publication, poster, presentation, dataset, image, video, software, lesson, other.

bounds --可选的地理定位边界框: "west,south,east,north" 以十进制度数表示。

当 ZENODO_COMMUNITY 已设置 communities 如果没有提供,参数默认为该值。

get_record

接受数字ID或DOI:

{ "name": "get_record", "arguments": { "id": "1234567" } }
{ "name": "get_record", "arguments": { "id": "10.5281/zenodo.1234567" } }

get_file_content

{
  "name": "get_file_content",
  "arguments": {
    "id": "1234567",
    "filename": "data.csv",
    "max_bytes": 1048576
  }
}

文本文件以UTF-8字符串的形式返回。二进制文件以base64格式返回。这 truncated 字段指示文件是否在 max_bytes.

环境变量

变量 默认值 描述
ZENODO_BASE_URL https://zenodo.org Zenodo实例的基本URL
ZENODO_API_KEY (无) 用于持久身份验证的个人访问令牌
ZENODO_ALLOW_WRITE (未设置) 设置为 true 或 1 启用写入工具(沉积)
ZENODO_COMMUNITY (无) 应用于搜索的默认社区标识符
ZENODO_MAX_UPLOAD_BYTES 52428800 (50 MiB) 的最大文件大小 upload_file

MCP客户端配置

将服务器添加到MCP客户端配置中(例如Claude Desktop claude_desktop_config.json):

{
  "mcpServers": {
    "zenodo": {
      "command": "node",
      "args": ["/path/to/zenodo-mcp-server/build/src/index.js"],
      "env": {
        "ZENODO_API_KEY": "your_token_here"
      }
    }
  }
}

发展

npm run build        # Compile TypeScript
npm run watch        # Watch mode
npm test             # Build and run tests
npm run test:coverage  # Tests with coverage report

许可证

麻省理工学院