Citemesh MCP
面向MCP客户端的联合学术元数据工具。
CItemesh是一个小型的monorepo,它允许AI代理:
- 从Crossref搜索学术作品
- 将DOI元数据解析为一个标准化的形状
- 使用维基数据实体丰富作品
- 批量解析多个DOI
- 将结果导出为CSV或JSON
- 生成引文输出,如BibTeX、CSL-JSON和格式化的参考书目文本
该项目分为重点服务:
apps/metadata-federator获取并规范元数据apps/export-worker格式化和导出结果apps/mcp-gateway通过stdio将功能作为MCP工具公开packages/contracts跨服务共享模式和DTO
它解决了什么问题
来自公共API的研究元数据很混乱。交叉引用记录的标题形状、日期、摘要和作者字段各不相同。CItemesh通过将所有内容标准化为一个可预测的内容来解决这个问题 WorkRecord 数据到达AI代理或导出层之前的模式。
这意味着MCP客户端不需要知道:
- Crossref如何构建其有效载荷
- 如何清理DOI输入
- 如何从摘要中删除JATS标签
- 如何结合元数据查找和导出格式
建筑
graph TD
Agent["MCP Client / AI Agent"]
Gateway["apps/mcp-gateway\nMCP server over stdio"]
Federator["apps/metadata-federator\nFastify service :3001"]
Exporter["apps/export-worker\nFastify service :3002"]
Contracts["packages/contracts\nshared schemas and DTOs"]
Crossref["Crossref REST API"]
Wikidata["Wikidata SPARQL"]
Cache[("SQLite cache")]
Agent --> Gateway
Gateway --> Federator
Gateway --> Exporter
Federator --> Crossref
Federator --> Wikidata
Federator --> Cache
Contracts -.-> Gateway
Contracts -.-> Federator
Contracts -.-> ExporterMonorepo结构
citemesh-mcp/
|-- apps/
| |-- export-worker/
| | |-- src/
| | | |-- __tests__/
| | | |-- routes/
| | | `-- services/
| |-- mcp-gateway/
| | `-- src/
| | |-- index.ts
| | |-- service-client.ts
| | `-- tools.ts
| `-- metadata-federator/
| |-- src/
| | |-- __tests__/
| | |-- cache/
| | |-- routes/
| | `-- services/
| `-- vitest.config.ts
|-- packages/
| `-- contracts/
| `-- src/
| |-- dtos.ts
| |-- errors.ts
| `-- work.ts
|-- .env.example
|-- package.json
|-- pnpm-workspace.yaml
`-- tsconfig.base.json服务和责任
| 包 | 角色 | 默认端口 |
|---|---|---|
@citemesh/metadata-federator | 搜索、DOI解析、批处理、维基数据丰富、SQLite响应缓存 | 3001 |
@citemesh/export-worker | CSV导出、JSON导出、BibTeX、CSL-JSON、格式化参考书目 | 3002 |
@citemesh/mcp-gateway | MCP工具注册、输入验证、委托给内部服务 | stdio |
@citemesh/contracts | 共享Zod模式、DTO、错误形状、规范化类型 | n/a |
主要MCP工具
网关公开了这些工具:
| 工具 | 它做什么 |
|---|---|
search_works | 按查询或作者搜索Crossref |
resolve_doi | 将一个DOI解析为标准化记录 |
batch_lookup_dois | 一次通话最多可解决50个DOI |
enrich_work_entities | 解析工作并附加维基数据实体信息 |
build_bibliography | 制作BibTeX、CSL-JSON或格式化参考书目 |
export_results | 导出标准化格式为CSV或JSON |
标准化数据模型
每项服务都围绕一个共享 WorkRecord 形状:
type WorkRecord = {
doi: string;
title: string;
authors: Array;
year: number | null;
source: string;
type: string;
publisher?: string;
url?: string;
abstract?: string;
external_ids: {
doi?: string;
pmid?: string;
arxiv?: string;
wikidata?: string;
isbn?: string[];
issn?: string[];
};
raw_source: "crossref" | "wikidata" | "manual";
};技术栈
- Node.js
- TypeScript
- pnpm工作区
- 快车
- 黄道带
- MCP TypeScript SDK
- SQLite通过
better-sqlite3 - 交叉参考REST API
- 维基数据SPARQL
- 引用.js
- 维测试
先决条件
- Node.js
20+ - pnpm
8+ - 实时Crossref和Wikidata通话的互联网接入
- 在Windows上,如果满足以下条件,可能需要Python和Visual Studio构建工具
better-sqlite3本地编译
设置
pnpm install
pnpm build复制环境文件:
cp .env.example .env至少,更新:
CROSSREF_MAILTO通过您的电子邮件
默认 .env.example 已经包括:
METADATA_FEDERATOR_PORT=3001EXPORT_WORKER_PORT=3002METADATA_FEDERATOR_URL=http://localhost:3001EXPORT_WORKER_URL=http://localhost:3002CACHE_DB_PATH=./cache.dbCACHE_TTL_SECONDS=3600
运行项目
从repo根并行运行所有内容:
pnpm dev或者分别运行每个服务:
pnpm --filter @citemesh/metadata-federator dev
pnpm --filter @citemesh/export-worker dev
pnpm --filter @citemesh/mcp-gateway dev构建和测试
构建整个monorepo:
pnpm build运行所有测试:
pnpm test今天涵盖的内容:
- 元数据规范化测试
- DOI实用程序测试
- 批量响应形状试验
- 实时集成测试
metadata-federator - CSV导出测试
- 书目生成测试
快速手动烟雾测试
1.启动HTTP服务
pnpm --filter @citemesh/metadata-federator dev
pnpm --filter @citemesh/export-worker dev2.检查健康路线
curl http://127.0.0.1:3001/health
curl http://127.0.0.1:3002/health预期:
{"status":"ok","service":"metadata-federator"}
{"status":"ok","service":"export-worker"}3.搜索工作
curl -X POST http://127.0.0.1:3001/search \
-H "Content-Type: application/json" \
-d "{\"query\":\"attention is all you need\",\"rows\":1}"4.解决DOI
curl -X POST http://127.0.0.1:3001/resolve \
-H "Content-Type: application/json" \
-d "{\"doi\":\"10.1038/s41586-021-03819-2\"}"5.将作品导出为CSV
curl -X POST http://127.0.0.1:3002/export \
-H "Content-Type: application/json" \
-d "{\"works\":[{\"doi\":\"10.1038/s41586-021-03819-2\",\"title\":\"Highly accurate protein structure prediction with AlphaFold\",\"authors\":[{\"family\":\"Jumper\",\"given\":\"John\"}],\"year\":2021,\"source\":\"Nature\",\"type\":\"journal-article\",\"publisher\":\"Springer Nature\",\"url\":\"https://doi.org/10.1038/s41586-021-03819-2\",\"abstract\":\"Proteins are essential to life.\",\"external_ids\":{\"doi\":\"10.1038/s41586-021-03819-2\",\"issn\":[\"0028-0836\"]},\"raw_source\":\"crossref\"}],\"format\":\"csv\"}"6.生成BibTeX
curl -X POST http://127.0.0.1:3002/bibliography \
-H "Content-Type: application/json" \
-d "{\"works\":[{\"doi\":\"10.1038/s41586-021-03819-2\",\"title\":\"Highly accurate protein structure prediction with AlphaFold\",\"authors\":[{\"family\":\"Jumper\",\"given\":\"John\"}],\"year\":2021,\"source\":\"Nature\",\"type\":\"journal-article\",\"publisher\":\"Springer Nature\",\"url\":\"https://doi.org/10.1038/s41586-021-03819-2\",\"abstract\":\"Proteins are essential to life.\",\"external_ids\":{\"doi\":\"10.1038/s41586-021-03819-2\",\"issn\":[\"0028-0836\"]},\"raw_source\":\"crossref\"}],\"format\":\"bibtex\"}"通过MCP进行测试
最有用的端到端演示是运行两个HTTP服务,然后通过MCP客户端或MCP检查器连接网关。
先构建:
pnpm build运行备份服务:
pnpm --filter @citemesh/metadata-federator dev
pnpm --filter @citemesh/export-worker dev然后启动网关:
node apps/mcp-gateway/dist/index.js因为网关使用stdio,所以它应该由MCP客户端启动,而不是直接在浏览器中打开。
MCP检查员
npx @modelcontextprotocol/inspector node apps/mcp-gateway/dist/index.js从那里你可以打电话:
search_worksresolve_doibuild_bibliographyexport_results
MCP输入示例
搜索:
{
"query": "transformer attention mechanism",
"rows": 3,
"offset": 0
}解决DOI:
{
"doi": "10.1038/s41586-021-03819-2"
}批量查找:
{
"dois": [
"10.1038/s41586-021-03819-2",
"10.1145/3290605.3300400"
]
}参考文献:
{
"dois": ["10.1038/s41586-021-03819-2"],
"format": "bibtex"
}CSV导出:
{
"works": [
{
"doi": "10.1038/s41586-021-03819-2",
"title": "Highly accurate protein structure prediction with AlphaFold",
"authors": [{ "family": "Jumper", "given": "John" }],
"year": 2021,
"source": "Nature",
"type": "journal-article",
"publisher": "Springer Nature",
"url": "https://doi.org/10.1038/s41586-021-03819-2",
"external_ids": { "doi": "10.1038/s41586-021-03819-2" },
"raw_source": "crossref"
}
],
"format": "csv"
}如何在录音中描述这个项目
如果你想要一个干净、自信的解释,这是最简单的框架:
CItemesh MCP是一个学术元数据MCP服务器。它允许AI代理搜索研究论文,解析DOI元数据,用维基数据丰富记录,并导出CSV或BibTeX等标准化输出。该项目分为一个精简的MCP网关、一个元数据联合器、一个导出工作器和共享合同,这使得每个责任都是隔离的,易于测试。
建议2-3分钟视频脚本
开场
说:
该项目名为CItemesh MCP。它是为模型上下文协议构建的联邦学术元数据服务器。主要目标是为AI代理提供一种干净的方式来搜索论文、解析DOI元数据、丰富记录和导出可引用的输出。
文件夹漫游
说:
代码库被组织为PNPM单仓库。这mcp-gateway应用程序公开了MCP工具。这metadata-federator该应用程序与Crossref和Wikidata进行对话,并将结果标准化。这export-worker该应用程序将规范化记录转换为CSV、JSON、BibTeX或参考书目文本。这contracts该包将共享模式和DTO保存在一个地方,以便所有服务保持一致。
建筑价值
说:
这种架构之所以有用,是因为网关保持精简。它只验证工具输入,并将工作转发给内部服务。这使得元数据逻辑和导出逻辑可以单独测试,也使系统更容易在以后使用新的源代码或新的导出格式进行扩展。
演示流程
说:
对于演示,我启动元数据联邦器和导出工作器,然后直接测试HTTP路由或使用MCP检查器连接MCP网关。典型的流程是搜索论文,将DOI分解为标准化 WorkRecord,然后将该记录导出为BibTeX或CSV。关闭
说:
关键在于,CItemesh充当了研究API和AI代理之间的干净元数据层。与其让每个代理都处理混乱的外部有效载荷,不如让它们都有一个稳定的模式和一组专注的工具。
短30秒版本
如果你需要一个简短的解释:
CItemesh MCP是一个用于学术元数据的MCP服务器。它允许AI代理搜索Crossref,解析DOI,用维基数据丰富结果,并通过干净的多服务架构导出CSV和BibTeX等引用就绪格式。
已通过此回购验证
以下内容已在本地验证:
pnpm build通过pnpm test通过metadata-federator健康、搜索和DOI解析路由成功运行export-worker健康、CSV导出和BibTeX生成路由成功运行
故障排除
better-sqlite3 无法在Windows上加载
如果依赖项是从另一个操作系统或体系结构安装的,请重新安装:
pnpm install --force如果Node不能使用预构建的二进制文件, better-sqlite3 可以在本地编译,这可能需要:
- python
- Windows上的Visual Studio生成工具
交叉引用请求失败或速率限制
在以下位置设置真实电子邮件:
CROSSREF_MAILTO=you@example.comMCP网关出现空闲
这很正常。网关使用stdio并等待MCP客户端(如MCP Inspector)或桌面客户端连接。
未来改进
- 添加网关特定的单元测试
- 支持更多的学术资源,如OpenAlex或Semantic Scholar
- 添加作者级维基数据丰富
- 添加基于Docker的本地启动
- 为内部HTTP服务添加API文档
