Claude MCP 体验: 实现一个 Arxiv 论文搜索工具

本文最后更新于 2024年12月13日 晚上

MCP 介绍

Anthropic (Claude) 在 11 月 25 日推出了一个协议: MCP (Model Context Protocol)。[1]

协议的目的是解决各类无法联网的 ChatBot 的信息孤岛问题。

比如 ChatGPT 在 ChatGPT Search 的加持下,可以做到搜索最新的网页信息并分析:

但是 Claude 在内的许多模型目前还不支持:

除此之外,许多时候我们希望访问一些自定义的数据源,比如本地的数据库等。

这些需求目前只能通过自己写代码 + 用 GPT 的 API 来进行操作。

MCP 的出现实际上就是用来解决这个问题:作为一个中间层,提供一个统一的协议和 SDK 来对接各类数据源

目前 Claude 在 https://modelcontextprotocol.io/introduction 已经提供了完整开源的 python SDKTypeScript SDK

这个玩意也是我最近琢磨 Claude Desktop APP 的配置的时候才发现的,目前支持 MCP 的 Client 在 这里 可以看到:

Client Resources Prompts Tools Sampling Roots Notes
Claude Desktop App Full support for all MCP features
Zed Prompts appear as slash commands
Sourcegraph Cody Supports resources through OpenCTX
Firebase Genkit ⚠️ Supports resource list and lookup through tools.
Continue Full support for all MCP features
GenAIScript Supports tools.

如果你开通了 Claude Pro 并且有 Claude Desktop,可以通过官网的这个 DEMO:https://modelcontextprotocol.io/quickstart 来实现一个获取天气和天气警报的联网查询功能。

实践:实现一个 Arxiv 论文搜索工具

我自己也通过简单修改了一下 quickstart [4],利用 python sdk 来实现了一个符合自己需求的 Arxiv 论文获取工具。

完整的代码在:https://github.com/Lincest/mcp-papersearch

简单介绍一下具体的使用方式:

1 - 安装环境

uv 是一个 rust 编写的 python 包管理器,和 virtualenv 这些差不多,由于官网用的是 uv,于是就沿用一下。

1
curl -LsSf https://astral.sh/uv/install.sh | sh

clone 仓库:

1
2
3
git clone https://github.com/Lincest/mcp-papersearch.git

cd mcp-papersearch

安装依赖:

1
uv sync

2 - 配置 Claude

需要编辑 ~/Library/Application\ Support/Claude/claude_desktop_config.json

(windows路径在:$env:AppData\Claude\claude_desktop_config.json)

1
vim ~/Library/Application\ Support/Claude/claude_desktop_config.json

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"globalShortcut": "",
"mcpServers": {
"papersearch": {
"command": "/Users/XXXX/.local/bin/uv", # 改成你的 uv 路径
"args": [
"--directory",
"/Users/XXX/code/mcp-papersearch", # 改成你的 clone 仓库的路径
"run",
"papersearch"
]
}
}
}

把上面的路径按注释内容改一下,删除注释,然后重新启动 Claude Desktop:

这时候会发现右下角出现了个锤子🔨:

就说明运行成功了。

3 - 测试

case 01: 搜索近期的论文

问 Claude 一个简单的问题,比如

搜索一下最近3天的 MoE Inference 相关论文

这时候会弹出一个窗口,就表示 Claude 识别到了应该调用我们的 papersearch 来搜索。

点击 Allow 后,发现他很智能的调用了两次,一次在3天内没找到后,又扩展范围到了30天来搜索:

case 02: 搜索指定的论文

比如我们要搜索 https://arxiv.org/abs/2308.12066 这篇论文,标题是「Pre-gated MoE: An Algorithm-System Co-Design for Fast and Scalable Mixture-of-Expert Inference」

提问:

搜索和总结 https://arxiv.org/abs/2308.12066

总结

目前的 case 写的还很潦草,大部分就是直接让 claude 自己生成了然后简单改一改。

以后用来接入一些 DB 估计会比较好用。

更多有趣的官方 demo

这里提供了更多有趣的官方推荐的 MCP Tools 和用法,几个个人觉得比较有意思的:

  1. 实现和 Github 的交互: https://github.com/modelcontextprotocol/servers/tree/main/src/github
  2. 实现和 Obsidian 的交互:https://github.com/calclavia/mcp-obsidian
  3. 获取 Web 内容:https://github.com/modelcontextprotocol/servers/tree/main/src/fetch

通过 Fetch 获取 web 信息

通过官方提供的 fetch, 不需要下载任何代码,仅仅需要配置:

1
2
3
4
5
6
7
8
"mcpServers": {
"fetch": {
"command": "uvx",
"args": [
"mcp-server-fetch"
]
}
}

就可以实现 web search 的功能了,例如查看北京天气:

Reference


Claude MCP 体验: 实现一个 Arxiv 论文搜索工具
https://moreality.net/posts/5672/
作者
Moreality
发布于
2024年12月13日
许可协议