内容
# xrpl-identity-mcp
[](https://github.com/jarod-vyent/xrpl-identity-mcp/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/xrpl-identity-mcp)
[](https://opensource.org/licenses/MIT)
`xrpl-identity-mcp` 是 XRP Ledger 的首个身份聚焦的 MCP 服务器:DIDs([XLS-40](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0040-decentralized-identity)),凭证([XLS-70](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0070-credentials)),多签签名者列表,以及安全的交易准备/验证/提交工作流。它准备未签名的交易,读取账本状态,验证签名数据块是否与意图一致,并且可以在从不托管密钥的情况下提交预签名数据块。
由 [Jarod Vyent](https://github.com/jarod-vyent) 构建,来自 [SciPHR](https://sciphr.io) 团队。
## 安全模型
这些是不变的核心行为:
1. **无密钥托管**。服务器没有种子、私钥、助记词、钱包导入或签名路径。签名发生在用户的钱包或代理中。
2. **网络是明确的**。`XRPL_NETWORK` 是 `mainnet`、`testnet` 或 `devnet`。默认为 `testnet`。每个工具的结果都包含 `network`。
3. **主网提交需显式启用**。主网上的 `tx_submit_signed` 交易除非设置 `ALLOW_MAINNET_SUBMIT=true`,否则将被阻止。
4. **准备、验证,然后提交**。编写工作流返回未签名的 JSON 以及外部签名指令,随后调用 `tx_decode_verify`,然后调用 `tx_submit_signed`。
## 快速入门
Claude MCP:
```bash
claude mcp add xrpl-identity -- npx -y xrpl-identity-mcp
```
通用 MCP 客户端配置:
```json
{
"mcpServers": {
"xrpl-identity": {
"command": "npx",
"args": ["-y", "xrpl-identity-mcp"],
"env": {
"XRPL_NETWORK": "testnet"
}
}
}
}
```
环境变量:
| 变量名 | 值 | 默认值 | 用途 |
| --- | --- | --- | --- |
| `XRPL_NETWORK` | `mainnet`、`testnet`、`devnet` | `testnet` | 选择 XRP Ledger 网络。 |
| `XRPL_ENDPOINT` | WebSocket URL | 网络默认值 | 覆盖 rippled WebSocket 端点。 |
| `ALLOW_MAINNET_SUBMIT` | `true` 或未设置 | 未设置 | 主网 `tx_submit_signed` 交易必填。 |
默认端点:
| 网络 | 端点 |
| --- | --- |
| `mainnet` | `wss://xrplcluster.com` |
| `testnet` | `wss://s.altnet.rippletest.net:51233` |
| `devnet` | `wss://s.devnet.rippletest.net:51233` |
## 工具
| 工具 | 功能 | 网络写入? |
| --- | --- | --- |
| `did_resolve` | 解析 XLS-40 DID 对象并获取 `ipfs://` 或 `https://` DID 文档(如果存在)。 | 否 |
| `did_prepare_set` | 准备未签名的 `DIDSet` 交易。 | 否 |
| `did_prepare_delete` | 准备未签名的 `DIDDelete` 交易。 | 否 |
| `credential_prepare_create` | 准备未签名的 `CredentialCreate` 交易。 | 否 |
| `credential_prepare_accept` | 准备未签名的 `CredentialAccept` 交易。 | 否 |
| `credential_prepare_delete` | 准备未签名的 `CredentialDelete` 交易。 | 否 |
| `credential_verify` | 读取凭证对象并报告存在、接受和过期状态。 | 否 |
| `credential_list` | 列出账户可见的最多 400 个凭证对象,并支持发行人/主题过滤。 | 否 |
| `account_identity_summary` | 汇总账户的授权姿态、签名者列表、DID 存在和凭证数量。 | 否 |
| `signer_list_prepare_set` | 准备未签名的 `SignerListSet` 交易,用于多签创建、替换或删除。 | 否 |
| `tx_decode_verify` | 解码签名数据块,计算哈希值,并与预期意图进行比较。 | 否 |
| `tx_submit_signed` | 提交预签名数据块并轮询验证。主网需要 `ALLOW_MAINNET_SUBMIT=true`。 | 是 |
## 示例代理流程
解析 DID 并读取其文档:
1. 调用 `did_resolve`,设置 `address` 为经典 XRP Ledger 地址或 `did:xrpl:<address>`。
2. 检查 `decoded.URI`、`decoded.Data` 和 `decoded.DIDDocument`。
3. 如果 URI 是 `ipfs://` 或 `https://`,检查 `document` 和 `documentSource`。只有文本和 JSON 文档被内联;二进制内容(例如图像)被报告为 `documentSource`、`documentContentType` 和 `documentByteLength`,同时 `documentSkipped` 解释了省略正文的原因。
在测试网络上发布和接受凭证:
1. 设置 `XRPL_NETWORK=testnet`。
2. 调用 `credential_prepare_create`,设置发行人、主题、凭证类型、可选过期时间和可选 URI。
3. 在外部使用发行人账户对返回的 `unsignedTx` 进行签名。
4. 调用 `tx_decode_verify`,传入签名数据块和预期意图。
5. 调用 `tx_submit_signed`。
6. 为主题调用 `credential_prepare_accept`,在外部签名,使用 `tx_decode_verify` 验证,然后提交。
7. 调用 `credential_verify` 以确认 `accepted: true` 和 `expired: false`。
在提交前验证签名数据块:
1. 调用 `tx_decode_verify`,传入 `signedBlob` 和预期意图的部分交易 JSON。
2. 检查 `matches` 和任何 `mismatches`。
3. 仅当解码的交易与用户的意图匹配时才提交。
## 开发
```bash
npm install
npm run typecheck
npm run build
SKIP_INTEGRATION=1 npm test
```
集成测试针对测试网络,在设置 `SKIP_INTEGRATION=1` 时跳过。要运行账户摘要集成测试,请将 `XRPL_INTEGRATION_ACCOUNT` 设置为一个有资金的测试网络账户地址。
## 许可证
MIT