# 把 Lune 接入你的 AI 应用

接入一次 Lune，之后直接用自然语言向 AI Agent 提研究问题即可。Agent 会调用 Lune 的工具检索 Paper、阅读全文、追踪引用、比较结果、核验论断，并查询科研最佳实践。你不需要记工具名称。

## 选择接入方式

- [网页 AI 应用](https://luneresearch.com/zh-Hans/docs/mcp/remote)：ChatGPT、Claude、Grok、Perplexity、Manus、Muse、Grok Bot，以及任何带自定义连接器表单的应用。其中不少通过浏览器登录。
- [本地 AI Agent](https://luneresearch.com/zh-Hans/docs/mcp/stdio)：Claude Code、Cursor、VS Code、Codex、OpenCode、Antigravity、Zed、Hermes Agent，以及其他通过命令或配置文件接入的 MCP 客户端。

控制台的[安装页面](https://luneresearch.com/dashboard/install)为每个应用准备了步骤，需要访问密钥的地方已经替你填好。

## 连接参数

这一节写给连接器表单、MCP 客户端，以及自己搭建连接器的 Agent。大多数应用只需要服务器地址，其余信息会自动发现。

| 项目       | 值                                                                                         |
| ---------- | ------------------------------------------------------------------------------------------ |
| 服务器地址 | `https://mcp.luneresearch.com`                                                             |
| 旧地址     | `https://mcp.luneresearch.com/mcp` 和 `https://mcp.luneresearch.com/v1/mcp` 仍然可用       |
| 传输方式   | Streamable HTTP，无状态，不保留会话。用 `POST` 发送 JSON-RPC；`GET` 和 `DELETE` 返回 `405` |
| 协议版本   | 2026-07-28、2025-11-25、2025-06-18、2025-03-26 和 2024-11-05。`initialize` 可以省略        |
| 请求头     | `Content-Type: application/json` 和 `Accept: application/json, text/event-stream`          |
| 凭证       | `Authorization: Bearer`，后接 OAuth 访问令牌或访问密钥                                     |
| 本地方案   | stdio 包 `@retrograde-labs/lune-mcp-server`（见[本地 AI Agent](https://luneresearch.com/zh-Hans/docs/mcp/stdio)）  |

当前的 MCP SDK 会替你处理协议版本。如果你手写请求：不带 `MCP-Protocol-Version` 请求头的 `POST` 按 2025 年及更早的旧版协议处理，响应格式为 `text/event-stream`，内容是一条 `event: message`，它的 `data:` 行就是 JSON-RPC 响应。2026-07-28 版的请求需要带 `_meta` 信封和 `Mcp-Method` 请求头，响应格式为 `application/json`。只发送版本请求头会得到 `400`。

### 凭证

服务器接受两种凭证，都放在 `Authorization: Bearer` 请求头里：

- **OAuth 访问令牌。** 应用把你带到 Lune 登录，你批准后，应用拿到代表你账户的令牌。只要应用支持 OAuth 就用这种方式，什么都不用复制。
- **访问密钥。** 以 `lune_` 开头的密钥。在[凭证页面](https://luneresearch.com/dashboard/settings/credentials)打开 **API 密钥**标签页，点击**新建密钥**即可创建。密钥只显示一次。应用只能发送固定请求头，或者要你填 API key 时，用这种方式。

### 授权服务器

Lune 为 MCP 连接器提供的授权服务器：

| 项目                         | 值                                                                    |
| ---------------------------- | --------------------------------------------------------------------- |
| 签发方（Issuer）             | `https://api.luneresearch.com`                                        |
| 授权端点                     | `https://api.luneresearch.com/oauth/authorize`                        |
| 令牌端点                     | `https://api.luneresearch.com/oauth/token`                            |
| 注册端点（RFC 7591）         | `https://api.luneresearch.com/oauth/register`                         |
| 撤销端点（RFC 7009）         | `https://api.luneresearch.com/oauth/revoke`                           |
| JWKS                         | `https://api.luneresearch.com/.well-known/jwks.json`                  |
| 资源元数据（RFC 9728）       | `https://mcp.luneresearch.com/.well-known/oauth-protected-resource`   |
| 授权服务器元数据（RFC 8414） | `https://api.luneresearch.com/.well-known/oauth-authorization-server` |
| 权限                         | `papers:read guidance:read account:read`                              |
| 资源标识（RFC 8707）         | `https://mcp.luneresearch.com`                                        |

客户端需要做到：

- **先注册，拿到 client ID。** 客户端都是公开客户端：没有 client secret，令牌端点的认证方式为 `none`。注册端点是获取 client ID 的唯一途径，client ID 以 `lune_oauth_` 开头。
- **使用带 PKCE 的授权码流程。** 只支持 `response_type=code` 和 `code_challenge_method=S256`。`state` 可以不传，但建议传。授权码有效期 10 分钟，只能用一次。
- **申请上表中的三个权限，不多不少。** 它们覆盖全部工具。不传 `scope`，或申请的权限 Lune 一个都不支持时，默认就是这三个。
- **在授权请求和令牌请求里都带上 `resource=https://mcp.luneresearch.com`。** 两个请求都没带时，令牌的受众会是你的 client ID，当前协议版本下 MCP 服务器会拒绝这种令牌。
- **逐字注册回调地址。** Lune 接受任意主机的 `https`、仅限本机回环地址（`127.0.0.1`、`[::1]` 或 `localhost`）的 `http`，以及 `cursor://` 这类私有 scheme，不允许带片段（`#`）。授权请求必须与某个已注册地址完全一致，只有一个例外：已注册的 `http` 回环地址可以换用任意端口（RFC 8252 第 7.3 节）。回调会带上 `code`、`iss`，以及你发送的 `state`。
- **向令牌端点和撤销端点提交表单编码的请求体**（`application/x-www-form-urlencoded`），并把 `client_id` 放在请求体里。Lune 不读取 HTTP Basic 凭证，JSON 请求体会得到 `422`。
- **轮换刷新令牌。** 访问令牌是 RS256 JWT，有效期一小时。每次刷新都会返回新的刷新令牌：保存新的，丢弃旧的。已用过的刷新令牌若在 30 秒后再次出现，Lune 会撤销整条令牌链。刷新令牌闲置 90 天后过期。
- **不支持 OpenID Connect。** Lune 不签发 ID 令牌，也没有 `/.well-known/openid-configuration`。

每个 OAuth 连接的用量都记在你的个人团队名下，与控制台当前选中哪个团队无关。想用共享团队的套餐，请用在该团队下创建的访问密钥连接。

完整流程和可直接复制的请求见 [auth.md](https://luneresearch.com/auth.md)。错误码和处理方法见[故障排查](https://luneresearch.com/zh-Hans/docs/troubleshooting)。

## 工具

工具调用从凭证所属团队的每日额度中扣除。大多数调用算一次请求，批量工具按条目计费，`list_conferences` 免费。计费规则见[套餐、请求与点数](https://luneresearch.com/zh-Hans/docs/concepts/quotas-and-billing)。每个工具在运行时检查自己需要的权限。

| 工具                        | 用途                                                                                                            | 权限            | 计费单位     |
| --------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------- | ------------ |
| `search_papers`             | 用一条自然语言查询检索文献库                                                                                    | `papers:read`   | 每次调用     |
| `search_papers_many`        | 一次运行最多 25 条查询变体，并合并结果                              | `papers:read`   | 每条查询     |
| `search_related_papers`     | 查找与某篇 Paper 主题相近的 Paper                                                                               | `papers:read`   | 每次调用     |
| `get_paper_fulltext`        | 阅读 Paper 全文，或只取你指定的章节                                                                             | `papers:read`   | 每次调用     |
| `get_paper_citations`       | 列出一篇 Paper 的参考文献，或引用它的已收录 Paper                                                               | `papers:read`   | 每次调用     |
| `list_conferences`          | 列出 Lune 收录的顶会                                                                                            | 无              | 免费         |
| `get_conference_papers`     | 列出某个顶会的 Paper，每次最多 100 篇                                                                           | 无              | 每次调用     |
| `extract_from_papers`       | 从最多 50 篇 Paper 的全文中提取对比表格                             | `papers:read`   | 每篇 Paper   |
| `verify_claims`             | 对照文献库核验最多 25 条论断，有证据时附原文引用                     | `papers:read`   | 每条论断     |
| `gather_evidence`           | 围绕一项任务最多运行 25 次检索，指出仍缺的证据，并建议下一步检索 | `papers:read`   | 每次实际检索 |
| `search_research_guidance`  | 检索关于研究方法、评估、写作和同行评审的精选最佳实践                                                            | `guidance:read` | 每次调用     |
| `get_research_guidance_doc` | 阅读一篇最佳实践文档的全文                                                                                      | `guidance:read` | 每次调用     |

托管服务器还会列出 `get_more_tools`。Agent 需要某项 Lune 还没有的功能时，可以调用它把需求告诉 Lune。这次调用只记录需求，不返回科研数据，也不计费。本地 stdio 服务器没有这个工具。

## 提示词

部分应用会把它们显示为斜杠命令。每个提示词会启动一套基于上述工具的流程。直接用自然语言说明同一项任务也可以，Agent 会自己挑选工具。

| 提示词                  | 参数                                                  | 你会得到                                                     |
| ----------------------- | ----------------------------------------------------- | ------------------------------------------------------------ |
| `/literature_review`    | `topic`（必填）、`venues`、`since_year`               | 一份综述：主要脉络、奠基与近期工作、尚未解决的空白           |
| `/find_related_work`    | `abstract`（必填）、`venues`                          | 需要引用的先前工作，按主题分组，并说明你的贡献有何不同       |
| `/compare_papers`       | `topic`（必填：一个主题或一组 Paper 标题）、`columns` | 根据各篇 Paper 全文整理的对比表                              |
| `/verify_draft`         | `draft`（必填）                                       | 每条论断的结论，有支撑引文时一并给出                         |
| `/trace_citations`      | `paper`（必填）                                       | 这篇 Paper 的前序工作、后续工作与相邻工作                    |
| `/research_methodology` | `question`（必填）                                    | 关于实验设计、消融、评估、回应审稿人或选投顶会的建议，附来源 |

所有参数都是文本。`venues` 和 `columns` 接受逗号分隔的列表，例如 `NeurIPS, ICML` 或 `dataset, metric, result`。

## 管理连接

Lune 可以接入任意多个应用。用量记在同一个团队名下的连接，共享该团队的额度和点数。[凭证页面](https://luneresearch.com/dashboard/settings/credentials)列出两种凭证：**API 密钥**标签页是访问密钥，**OAuth 客户端**标签页是你通过登录接入的应用。OAuth 连接属于你的个人团队，切换到个人团队才能看到。
