arXiv论文搜索工具

一个完整的模型上下文协议(MCP)实现,使用自然语言查询搜索arXiv论文,由Claude提供支持。

  • by align-sec
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 align-sec/arxiv-mcp

使用说明

arXiv MCP客户端和服务器

一个完整的模型上下文协议(MCP)实现,用于使用Claude支持的自然语言查询搜索arXiv论文。

概述

此项目包括客户端、服务器和web界面:

  • 客户端 (arxiv_client.py):接受自然语言查询,使用Claude将其解析为结构化参数,调用服务器,并根据相关性对结果进行评分
  • 服务器 (arxiv_server.py):实现 find_papers 查询arXiv API并返回匹配论文的工具
  • 网页应用 (app.py):漂亮的Streamlit界面,便于纸张搜索

特性

  • 自然语言处理:使用Claude来理解诸如“为我找到10篇关于LLM红队的最新论文,因为它适用于AI代理的安全性”之类的查询
  • 智能参数提取:自动提取:
    • 搜索词(arXiv搜索的关键字)
    • 日期范围(例如,“最近”→ 过去6个月,“去年”→ 1 一年前)
    • 结果数(如果未指定,则默认为10)
  • 智能相关性评分:从服务器检索论文后:
    • 根据标题和摘要中的搜索词匹配计算相关性得分
    • 客户端计算分数(没有额外的API调用)
    • 按相关性得分排序的结果(最高者优先)
  • MCP集成:已准备好连接到实施 find_papers 工具

安装

  1. 使用python 3.12克隆仓库并创建新环境
git clone git@github.com:align-sec/arxiv-mcp.git
conda create -n mcp_env python=3.12
conda activate mcp_env
conda install pip
pip install --upgrade pip
pip install -r requirements.txt

  1. 安装依赖项:
pip install -r requirements.txt
  1. 设置您的Anthropic API密钥(用于命令行使用):
export ANTHROPIC_API_KEY="your-api-key-here"

快速入门-Web界面🌟

使用该系统最简单的方法是通过Streamlit网络应用程序:

streamlit run app.py

然后:

  1. 在侧栏中输入您的Anthropic API键
  2. 键入您的搜索查询(例如,“为我找到10篇关于变压器的最新论文”)
  3. 点击“搜索论文”
  4. 查看格式精美、相关性评分的结果!

该网络应用程序具有以下功能:

  • 🎨 每张纸都有漂亮的渐变瓷砖(按相关性进行颜色编码)
  • ⭐ 视觉相关性得分(0.00至1.00)
  • 📱 适用于所有设备的响应式设计
  • 🔗 arXiv论文的直接链接
  • 💡 示例查询和帮助文本
  • 🔒 安全的API密钥输入(未存储)
  • ⚡ 快速:只有一个API调用(查询解析),其他一切都是即时的!

备注:Streamlit应用程序使用 arxiv_client_simple.py 它直接(进程内)调用服务器函数,以在web环境中获得更好的性能和可靠性。有关stdio上真正的MCP客户端/服务器架构,请参阅下面的示例。

替代启动器:

./run_app.sh

用法

作为图书馆

import asyncio
from arxiv_client import ArxivMCPClient

async def search_papers():
    # Initialize client with your API key
    client = ArxivMCPClient(anthropic_api_key="your-api-key")
    
    # Parse a natural language query
    query = "find me 10 recent papers about LLM red teaming"
    params = client.parse_query_with_claude(query)
    print(params)
    # Output: {
    #   "search_terms": ["LLM", "red teaming", "language models", "security"],
    #   "min_date": "2024-04-21",
    #   "max_results": 10
    # }
    
    # When server is available, connect and search:
    # from mcp import StdioServerParameters
    # server_params = StdioServerParameters(
    #     command="python",
    #     args=["arxiv_server.py"]
    # )
    # await client.connect_to_server(server_params)
    # results = await client.search_papers(query)
    # # Results are automatically scored and sorted by relevance
    # for paper in results:
    #     print(f"Score: {paper['relevance_score']:.2f} - {paper['title']}")
    # await client.disconnect()

asyncio.run(search_papers())

命令行演示

运行附带的演示(仅查询解析,无服务器):

python arxiv_client.py

集成测试

运行完整的客户端-服务器集成测试:

export ANTHROPIC_API_KEY="your-api-key"
python test_integration.py

这将:

  1. 启动服务器
  2. 解析自然语言查询
  3. 查询arXiv API
  4. 相关性评分
  5. 显示排序结果

查询示例

客户端可以理解各种自然语言查询:

  • "find me 10 recent papers about LLM red teaming as it applies to security of AI agents"
  • "search for papers on quantum computing from the last year"
  • "get 5 papers about neural networks published in the last 3 months"
  • "find papers on transformer architectures"

解析参数架构

客户端将查询提取到以下JSON结构中:

{
    "search_terms": ["list", "of", "keywords"],
    "min_date": "YYYY-MM-DD",  // optional
    "max_results": 10           // defaults to 10
}

参数

  • 搜索_术语 (必填):从查询中提取的相关关键字列表
  • min_日期 (可选):YYYY-MM-DD格式的最小发布日期
    • “最近”没有具体说明→ 6 数月前
    • “去年”→ 1 多年前
    • “过去3个月”→ 3 数月前
  • max_results (可选):要返回的论文数量(默认值:10)

相关性评分

从服务器检索论文后,客户端会自动:

  1. 计算相关性 通过将搜索词与论文标题和摘要进行匹配
    • 标题匹配的权重更大(60%)
    • 摘要匹配贡献40%
    • 所有已完成的客户端,无需额外的API调用
  2. 分配相关性得分 根据匹配百分比从0.0到1.0
  3. 对结果进行排序 按相关性得分(最高者优先)

这确保了最相关的论文出现在结果的顶部,即使arXiv搜索以不同的顺序返回它们。

演出:只进行一次API调用(用于解析查询)。其他一切都是快速的客户端处理。

服务器实现

包括 arxiv_server.py 实现了具有以下功能的MCP服务器:

find_papers 工具

接受参数:

  • search_terms (必填):要搜索的关键字列表
  • min_date (可选):最短发布日期(YYYY-MM-DD)
  • max_results (可选):最大结果数(默认值:10)

返回包含以下内容的论文:

  • title:论文标题
  • summary:论文摘要
  • authors:作者姓名列表
  • published:出版日期
  • updated:上次更新日期
  • arxiv_id:arXiv标识符
  • url:完整的arXiv URL
  • categories:arXiv类别

arXiv API集成

服务器通过以下方式查询arXiv API:

  • 基于搜索词构建的搜索查询(搜索所有字段)
  • 按提交日期排序的结果(最近的第一个)
  • 具有适当命名空间处理的XML响应解析
  • 检索后应用日期筛选

运行完整系统

启动服务器

在一个终端中:

python arxiv_server.py

运行客户端

更新 arxiv_client.py 取消注释中的服务器连接代码 main() 函数,然后:

export ANTHROPIC_API_KEY="your-api-key"
python arxiv_client.py

完整集成示例

import asyncio
from arxiv_client import ArxivMCPClient
from mcp import StdioServerParameters

async def search_with_server():
    # Initialize client
    client = ArxivMCPClient(anthropic_api_key="your-key")
    
    # Configure server connection
    server_params = StdioServerParameters(
        command="python",
        args=["arxiv_server.py"]
    )
    
    # Connect and search
    await client.connect_to_server(server_params)
    
    query = "find me 10 recent papers about LLM red teaming"
    results = await client.search_papers(query)
    
    # Results are automatically scored and sorted by relevance
    for i, paper in enumerate(results, 1):
        print(f"\n{i}. [{paper['relevance_score']:.2f}] {paper['title']}")
        print(f"   Authors: {', '.join(paper['authors'][:3])}")
        print(f"   Published: {paper['published'][:10]}")
        print(f"   URL: {paper['url']}")
    
    await client.disconnect()

asyncio.run(search_with_server())

需求

  • Python 3.8+
  • 无烟煤API键
  • MCP兼容服务器(功能齐全)

许可证

麻省理工学院