botanicastudios
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"crossref": {
"args": [
"-y",
"@botanicastudios/crossref-mcp"
],
"command": "npx"
}
}
}
可用工具 (3 个)
该服务在 MCP 协议中暴露的工具,AI 可按需调用
searchByTitle
Search for scientific papers by title in Crossref
该工具无需必填参数,直接调用即可
searchByAuthor
Search for scientific papers by author in Crossref
该工具无需必填参数,直接调用即可
getWorkByDOI
Retrieve a specific scientific paper by its DOI
该工具无需必填参数,直接调用即可
服务介绍
Crossref MCP 服务器
一个用于与 Crossref API 交互的 Model Context Protocol (MCP) 服务器。
功能
- 按标题搜索作品
- 按作者搜索作品
- 通过 DOI 获取作品详情
安装
{
"mcpServers": {
"crossref": {
"command": "npx",
"args": [
"-y",
"@botanicastudios/crossref-mcp"
]
}
}
}
使用方法
该服务器提供了三个主要工具:
1. 按标题搜索
按标题在 Crossref 中搜索作品:
javascript
// 示例:搜索标题中包含 "quantum computing" 的作品
{
"title": "quantum computing",
"rows": 5 // 可选,默认为 5
}
2. 按作者搜索
按作者在 Crossref 中搜索作品:
javascript
// 示例:搜索作者为 "Einstein" 的作品
{
"author": "Einstein",
"rows": 5 // 可选,默认为 5
}
3. 通过 DOI 获取作品
使用 DOI 检索特定作品:
javascript
// 示例:获取 DOI 为 "10.1088/1742-6596/1398/1/012023" 的作品
{
"doi": "10.1088/1742-6596/1398/1/012023"
}
响应格式
所有响应都以结构化的 JSON 对象形式返回,格式如下:
成功搜索时:
json
{
"status": "success",
"query": {
/* 原始查询参数 */
},
"count": 5,
"results": [
{
"title": "作品标题",
"authors": [
{
"given": "名字",
"family": "姓氏",
"name": "全名"
}
],
"published": {
"dateParts": [2023, 1, 15],
"dateString": "2023-1-15"
},
"type": "期刊文章",
"doi": "10.xxxx/xxxxx",
"url": "https://doi.org/10.xxxx/xxxxx",
"container": "期刊名称",
"publisher": "出版商名称",
"issue": "1",
"volume": "42",
"abstract": "这是作品的摘要(如果可用)。"
}
// 更多结果...
]
}
单个 DOI 查找时:
json
{
"status": "success",
"query": { "doi": "10.xxxx/xxxxx" },
"result": {
// 如上所示的作品详情
}
}
出现错误或无结果时:
json
{
"status": "error" | "no_results" | "not_found",
"message": "错误信息" | null,
"query": { /* 原始查询参数 */ }
}
测试
该服务器附带了一个使用 Vitest 的全面测试套件。测试涵盖了所有可用工具,并包括各种场景,包括成功响应、空结果集和错误处理。
运行测试
npm test
测试结构
这些测试使用了 Vitest 的模拟功能来模拟 Crossref API 响应,而无需实际发起网络请求。测试结构包括:
- 模拟数据:标题搜索、作者搜索和 DOI 查找的示例响应
- 模拟处理器:
mcp-server-test-handlers.js文件中的测试版本处理器函数 - 测试用例:涵盖所有工具的测试用例,包括:
- 成功的 API 响应
- 空的结果集
- 错误处理和网络故障
扩展测试
要添加更多测试用例:
- 如果需要,向测试文件中添加新的模拟数据
- 在相关的
describe块中创建额外的测试用例 - 使用
mockFetchResponse()辅助函数来模拟 API 响应
示例:
javascript
it("应该处理一个新的边界情况", async () => {
// 模拟响应
mockFetchResponse({
// 你的示例响应数据
});
// 调用处理器
const result = await handlers.searchByTitle({ title: "example" });
// 断言预期结果
expect(result).toMatchObject({
// 预期的响应结构
});
});