内容
<p align="center">
<img src="assets/aurelius-banner.jpg" alt="Aurelius — a fact-checked research MCP server" width="100%">
</p>
开发中,即将成为伟大的项目
# Aurelius
[](https://pypi.org/project/aurelius-mcp/)
[](https://pypi.org/project/aurelius-mcp/)
[](LICENSE)
[](https://modelcontextprotocol.io)
**事实核查研究MCP服务器。** Aurelius 为所有支持MCP的应用程序提供了一套研究工具,例如Claude(桌面版/代码版/claude.ai)、Gemini CLI、Cursor以及(通过远程部署)ChatGPT,这些工具可以**核实每条引用是否对应真实的学术数据库**(OpenAlex、Crossref — DOI支持和撤稿意识)**以及每项声明是否对应实时网络源**,然后再呈现它们。不再有虚构的论文,不再有沉默引用的撤稿研究。
Aurelius 源自多智能体研究框架,并提炼出其最佳理念,打造一个便携的工具服务器:**筛选主题 → 起草 → 事实核查 → 修订**。
---
## 为什么该设计解决了“API成本”问题
默认情况下,Aurelius 在**主机驱动模式**下运行:您连接到的应用程序(Claude、Gemini等)使用其自身的模型进行推理和编写,Aurelius仅提供研究和事实核查工具。这意味着 **Aurelius 无需自己的LLM API密钥** — 令牌由您现有的Claude/Gemini/ChatGPT订阅覆盖。引用验证运行在 [OpenAlex](https://openalex.org) 和 [Crossref](https://www.crossref.org) 上 — 均为免费,且无需密钥。唯一的选件密钥是 [Tavily](https://tavily.com),用于常规`web_search`和作为引用未在任一学术数据库中编入索引时的备用(免费层可用)。
还有一个可选的**自主模式**(`autonomous_research` / `aurelius-research`),其中Aurelius驱动其自己的LLM — 那一个需要LLM API密钥,并且有配额限制。
---
## 安装
```bash
pip install aurelius-mcp
```
> 普通名称`aurelius`已在PyPI上被占用,因此软件包以 **`aurelius-mcp`** 的形式发布。导入名称(`import aurelius`)和CLI命令(`aurelius`)保持不变。
这提供了两个命令:
- `aurelius` — 启动MCP服务器(stdio)。这是MCP客户端运行的内容。
- `aurelius-research "<topic>"` — 在终端中运行一个自主研究作业。
> **如果找不到 `aurelius`** (pip脚本目录可能不在您的PATH上 — 在Windows上常见),请在预期为`command`的任何地方使用等效的模块形式:
> `"command": "python", "args": ["-m", "aurelius"]`.
## 获取Tavily密钥(可选 — 用于一般网络搜索)
引用验证(`verify_citation`,`verify_claims`)不需要密钥 — 它在免费、无密钥的OpenAlex和Crossref API上运行。 Tavily密钥仅在`web_search`(一般事实声明证据)以及当引用未在任一学术数据库中编入索引时的备用时需要。 在 <https://tavily.com> 上创建免费密钥并将其公开为 `TAVILY_API_KEY` (参见下面的配置代码段,它将密钥注入服务器的环境中)。
---
## 将其连接到您的应用程序(本地/stdio)
### Claude 桌面版
编辑 `claude_desktop_config.json` (设置 → 开发者 → 编辑配置):
```json
{
"mcpServers": {
"aurelius": {
"command": "aurelius",
"env": { "TAVILY_API_KEY": "tvly-your-key" }
}
}
}
```
重启Claude Desktop。参见 [`examples/claude_desktop_config.json`](examples/claude_desktop_config.json)。
### Claude 代码版
```bash
claude mcp add aurelius --env TAVILY_API_KEY=tvly-your-key -- aurelius
```
### Cursor
添加到 `~/.cursor/mcp.json` (或项目 `.cursor/mcp.json`):
```json
{
"mcpServers": {
"aurelius": { "command": "aurelius", "env": { "TAVILY_API_KEY": "tvly-your-key" } }
}
}
```
### Gemini CLI
添加到 `~/.gemini/settings.json`:
```json
{
"mcpServers": {
"aurelius": { "command": "aurelius", "env": { "TAVILY_API_KEY": "tvly-your-key" } }
}
}
```
然后直接询问: *"使用Aurelius研究GDP增长与失业之间的历史相关性,并核实每条引用。"*
---
## 看看它如何捕获错误的引用
对 *"GDP增长与失业之间的历史相关性(奥肯定律)"* 进行实际运行:Claude起草了论文,然后对每个参考文献调用 `verify_citation`。
| 引用 | 裁决 |
|---|---|
| 奥肯,A. M.(1962)。 *潜在GNP:其测量和意义。* | ✅ 已验证 — 得到 arXiv 和美联储来源的证实 |
| Knotek, E. S. II(2007)。 *奥肯定律有多有用?* | ✅ 已验证 — 堪萨斯城美联储 |
---
## 看看它如何捕获撤稿论文
`verify_citation`不仅检查论文是否存在,还检查OpenAlex的实时撤稿登记。一个针对臭名昭著的Wakefield MMR-自闭症论文的实际调用:
```python
verify_citation("Wakefield, A. J. et al. (1998). Ileal-lymphoid-nodular hyperplasia, "
"non-specific colitis, and pervasive developmental disorder in children.")
```
```json
{
"verdict": "retracted",
"is_retracted": true,
"confidence": "high",
"source": "openalex",
"matched_work": {
"title": "RETRACTED: Ileal-lymphoid-nodular hyperplasia, non-specific colitis, ...",
"doi": "10.1016/s0140-6736(97)11096-0",
"year": 1998
},
"notes": "撤稿作品 — 由openalex标记。不要引用。"
}
```
`is_retracted`始终是一个顶级字段 — 主机模型无法忽略或合理化。 学术索引可以为同一篇论文返回多个记录(原始记录、撤稿通知、看起来干净的重复记录);Aurelius特别解决了这些记录的优先顺序问题,以利于显示撤稿通知而不是选择看起来最干净的记录。
## 看看它如何捕获 **引用错误**
仅凭标题匹配不是验证。 Aurelius将引用的作者和年份与匹配的记录进行核实,因此它可以捕获标题检查器忽略的微妙情况:
```python
verify_citation("Okun, A. M. (1962). Potential GNP: Its Measurement and Significance.")
```
```json
{
"verdict": "unverified",
"author_match": false,
"match_score": 1.0,
"matched_work": { "authors": ["Charles I. Plosser", "G. William Schwert"], "year": 1979 },
"notes": "找到一个具有相同标题但作者不同的作品(找到:Plosser, Schwert; 引用:Okun)— 可能不是您引用的论文。"
}
```
标题完美匹配(1.00),但唯一索引的记录具有该标题的是 *1979* 由 *Plosser & Schwert* 撰写的论文 — 而不是Okun 1962年的原始论文。 仅标题检查器报告✓; Aurelius报告真相并返回实际找到的记录的`corrected_citation`。
## 工具
| 工具 | 功能 | 需要 |
|------|--------------|-------|
| `screen_topic(topic)` | 筛选主题以防止受限域策略 | — |
| `get_research_policy()` | 返回接受/拒绝策略 | — |
| `draft_outline(topic)` | 标准学术(Markdown)大纲脚手架 | — |
| `plan_paper_length(target_pages, …)` | 长篇论文的分节字数预算 | — |
| `verify_citation(citation)` | 验证OpenAlex/Crossref/arXiv/Semantic Scholar — DOI精确,撤稿和作者感知;返回修正后的引用 + BibTeX | — (Tavily可选,备用) |
| `verify_claims(claims)` | 批量验证引用/声明到记分证据账簿 | — (Tavily可选,备用) |
| `verify_bibliography(text)` | 验证整个参考文献块;返回记分账簿 + 清洁BibTeX | — (Tavily可选,备用) |
| `verify_stat(claim, …)` | 验证统计数据('GDP增长2.5%')对抗世界银行数据 | — (Tavily可选,备用) |
| `multilingual_search(query, …)` | 通过OpenAlex跨语言搜索全球文献 | — |
| `retraction_watch(references?)` | 重新检查已验证的引用是否有新的撤稿/验证漂移 | — |
| `research_memory(topic, …)` | 回忆过去Aurelius研究会话的教训(情景记忆) | — |
| `web_search(query, …)` | 搜索事实声明的证据 | Tavily密钥 |
| `polish_prose(content, …)` | 已经验证的内容的样式/可读性传递 | — (仅当`use_llm=True`时需要LLM密钥) |
| `diagram_template(diagram_type, …)` | Mermaid脚手架:流程图/架构/序列 | — |
| `latex_outline(topic)` | 可编译的LaTeX文章骨架 + BibTeX存根 | — |
| `save_draft(content, filename, append)` | 保存(或追加)Markdown草稿 | — |
| `save_latex(content, filename)` | 保存`.tex` / `.bib`源 | — |
| `save_report(content)` | 保存验证报告 | — |
| `autonomous_research(topic, model, …)` | 自行运行整个线性循环 | LLM密钥 |
| `autonomous_research_graph(topic, …)` | 运行多阶段 **代理DAG** (编排层) — 审计跟踪,检查点 | LLM密钥(验证保持无密钥) |
输出写入您的主目录中的 `~/aurelius_output/` (通过 `AURELIUS_OUTPUT_DIR` 覆盖) — 永远不会写入进程的当前工作目录,因为MCP客户端通常从您无法写入的位置启动服务器。
### 长篇论文(20–80+页)
调用 `plan_paper_length(target_pages=40)` 获取分节字数预算,然后逐一草拟并`verify_claims`,使用`save_draft(content, filename, append=True)`追加每个部分,以便主机模型无需重新发送整个累计文档。 有关完整的工作流程,请参见 [`SKILL.md`](skill/aurelius/SKILL.md)。
## 关于`polish_prose`的说明
它是对 **已经验证的内容** 进行的可读性改进 — 它修复了僵硬、重复的LLM措辞(对赌博链、过渡词堆叠、三重填充进行改进),同时保留每个引用、数字和声明逐字不变。 它明确 **不是** AI检测器规避工具; 将其与长篇学术论文生成配对将实现学术不诚实,这超出了一个项目的范围,而该项目的全部前提是显示可验证的收据。
## Claude技能
[`skill/aurelius/SKILL.md`](skill/aurelius/SKILL.md) 教导主机模型精确的筛选 → 计划 → 草拟 → 验证 → 润色 → 保存工作流程,包括长篇(分节)路径。 将其放入您的Claude Code/Agent技能中,以便模型严格使用工具。
---
## 自主模式(可选,需要LLM密钥)
```bash
export OPENAI_API_KEY=sk-... # 或 ANTHROPIC_API_KEY / GOOGLE_API_KEY
export TAVILY_API_KEY=tvly-...
aurelius-research "Health effects of microplastics in drinking water" --model gpt-4o-mini-2024-07-18 --rounds 2
```
提供商根据模型名称自动检测(`gpt-*` → OpenAI,`claude-*` → Anthropic,`gemini-*` → Google)。
### 编排模式 — 多阶段代理DAG( `--graph` )
除了线性循环外,Aurelius还可以运行 **由专业代理群驱动的分阶段研究DAG** (文献挖掘 → 并行假设群 → 可行性筛选 → 实验设计/代码 → 引用验证 → 对抗性审查 → 起草 → LaTeX → 严格证明)。 每个代理操作都会记录到审计跟踪中,并且每个阶段都在 `~/aurelius_output/sessions/` 下进行检查点,以便运行情况可以被完全检查和恢复。
```bash
aurelius-research "Effect of sleep duration on reaction time" --graph
```
或从任何客户端调用`autonomous_research_graph` MCP工具。 它是自主构建的 — **没有LangGraph/LangChain** — 重用与Aurelius其余部分相同的撤稿感知引用验证。
**代码沙盒和p-hacking审计(第2阶段)。** DAG静态审计生成的分析代码是否存在可疑的研究实践信号(未纠正的多重比较、缺少随机种子、后验异常值移除、选择性报告、HARKing、选择性报告),并报告风险评分。 添加 `--sandbox` 以 **执行** 该代码在加固的、无网络的Docker容器中(CPU/mem/pids上限、只读fs、丢弃的权限、非root、超时) — 自适应,因为代码是由模型编写的,并且如果Docker不存在,则会跳过:
```bash
aurelius-research "your topic" --graph --sandbox
```
**加密严格证明(第3阶段)。** 每次运行都会发出一个签名、防篡改的证明包:证据账簿的SHA-256内容哈希 + 完整的审计跟踪,使用ed25519签名(或如果您设置 `AURELIUS_PROOF_HMAC_SECRET`,则使用HMAC),写入 `~/aurelius_output/proofs/`,并且可以独立检查 `aurelius.proof.verify_proof(...)`。 可选的 [IPFS固定](https://pinata.cloud) (设置 `PINATA_JWT`)和可选的区块链锚定层(`pip install aurelius-mcp[chain]` + 设置 `AURELIUS_CHAIN_RPC` / `AURELIUS_CHAIN_PRIVATE_KEY`)层在其上;两者都是优雅的无操作,当未配置时。
**发布、DeSci和内存(第4-6阶段)。** DAG还打包了一个 **提交-ready预印本包** (编译-ready LaTeX,一个DOI支持的 `references.bib` 由证据账簿构建,以及每个服务器的检查清单,用于arXiv/bioRxiv/medRxiv)— **提交本身保持手动**,因为这些服务器需要人为认可/审查。 它运行 **专利自由筛查** (PatentsView,筛查辅助工具 — **不是法律建议**),并且具有 **情景记忆**:每次运行都会记录带有派生教训的相关过去运行,并在新运行开始时回忆。 `check_compliance`仍然是一个诚实的占位符 — 有关完整状态,请参见 [`ARCHITECTURE.md`](ARCHITECTURE.md)。
---
## 平台支持(诚实状态)
| 平台 | 状态 |
|----------|--------|
| Claude 桌面版 / 代码版 | ✅ 本地stdio |
| Gemini CLI, Cursor | ✅ 本地stdio |
| ChatGPT | ⚠️ 需要远程(HTTP/SSE)部署 — 路线图上 |
| Perplexity | ❌ 暂不支持用户添加的MCP服务器 |
## 许可证
MIT