内容
="center">
<img src="https://raw.githubusercontent.com/andrewkimjoseph/celina-mcp/main/assets/celina-banner.png" alt="Celina — 为您的LLM提供Celo钱包">
</p>
<h1 align="center">Celina — Celo MCP服务器</h1>
<p align="center">
<strong>Celina</strong> 是一个开源的 <a href="https://modelcontextprotocol.io">模型上下文协议(MCP)</a> 服务器,适用于 <strong>Celo主网</strong>。它注册了共享的 <a href="https://www.npmjs.com/package/@andrewkimjoseph/celina-sdk"><code>@andrewkimjoseph/celina-sdk/tools</code></a> 目录——与浏览器钱包应用相同的Zod模式和处理程序——这样MCP和代理主机可以在没有重复工具定义的情况下保持同步。
</p="center">
<a href="https://celina.andrewkimjoseph.com">网站</a>
·
<a href="https://www.npmjs.com/package/@andrewkimjoseph/celina-mcp">npm</a>
·
<a href="https://mcp.usecelina.xyz/api/mcp">托管(读取 + 预备)</a>
</p>
## 安装
```bash
npm i @andrewkimjoseph/celina-mcp@latest
```
## 迁移
如果您仍然使用 `@andrewkimjoseph/celina`,请将您的MCP配置 `args` 更新为 `@andrewkimjoseph/celina-mcp`,并将服务器密钥重命名为 `celina-mcp`。旧包名称在发布周期内仍作为包装器发布。
## 快速开始
**推荐:** 本地安装并通过stdio连接 — 完整的工具目录与执行/写入,当您设置 `CELO_PRIVATE_KEY` 时,无需冷启动,密钥保留在您的机器上。
您的MCP客户端(Cursor、Claude Desktop、LM Studio等)通过 `npx` 将Celina作为子进程启动。工具从 `@andrewkimjoseph/celina-sdk/tools` 通过 `registerSdkTools` 注册。请参阅 [本地stdio(推荐)](#local-stdio-recommended)。
对于无需本地安装的链读取,请使用 [https://mcp.usecelina.xyz/api/mcp](https://mcp.usecelina.xyz/api/mcp) 的托管Streamable HTTP端点 — 请参阅 [托管(读取 + 预备)](#hosted-reads--prepare)。
## MCP设置
选择您的客户端,安装软件包,粘贴配置,重启。Celina将作为MCP工具出现在您的LLM中。
### 本地stdio(推荐)
安装软件包,然后将Celina添加到您的MCP配置中。您的客户端通过stdio启动 `npx与Celina通信。适用于任何stdio客户端(Cursor,Claude Desktop,LM Studio,Continue,MCP Inspector)。需要Node.js ≥ 20。
1. 运行 `npm i @andrewkimjoseph/celina-mcp` (可选但推荐 — 本地缓存软件包以加快MCP启动速度)
2. 打开您的MCP配置(例如 `claude_desktop_config.json`,Cursor **设置 → MCP**)并将下面的代码片段合并到 `mcpServers`
3. 重启客户端
```json
{
"mcpServers": {
"celina-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@andrewkimjoseph/celina-mcp"],
"env": {
"CELO_PRIVATE_KEY": "0x...",
_AGENT_PRIVATE_KEY": "0x..."
}
}
}
}
```
将 `CELO_PRIVATE_KEY` 和 `SELF_AGENT_PRIVATE_KEY` 保存在源代码控制之外 — 它们保留在您的机器只读链查询,可以省略两者。
**读取遥测数据:** 非链工具使用情况通过捆绑的Celina SDK记录。每个MCP安装都会获得一个稳定的 `device_id` ( `~/.config/celina/install-id` ),以便统计数据可以区分主机;钱包范围的读取也会将Amplitude `user_id` 设置为公共钱包地址(来自工具参数或 `CELO_PRIVATE_KEY` 签名者)。通过 `createServer({ analyticsEnabled: false, analyticsDeviceId: "..." })` 在编程方式嵌入服务器时退出或覆盖。
### Claude Desktop
在 `claude_desktop_config.json` (macOS: `~/Library/Application Support/Claude/claude_desktop_config.json` )中使用相同的stdio配置。 需要Node.js ≥ 20。
```json
{
"mcpServers": {
"celina-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@andrewkimjoseph/celina-mcp"],
"env": {
"CELO_PRIVATE_KEY": "0x...",
"SELF_AGENT_PRIVATE_KEY": "0x..."
}
}
}
```
在编辑配置后,请完全退出并重新启动Claude Desktop窗口是不够的### 本地stdio源码)
对于隆存储库的开发,请指向您的本地 `build`:
```{
"m": {
"celina-mcp": {
type": "stdio "command": "nodeargs": ["/absolute/path/to/celcp/build/index.js "env": {
CELO_PRIVATE_KEY": "0x...",
"_KEY": "0x..."
}
}
}
```
## 使用您自己的模型运行Celina
Celina是一个普通的MCP服务器。将它与任何MCP-aware的本地堆栈(Ollama,LM Studio,llama.cpp)通过支持工具调用的客户端配对。
只读工具(余额,区块,GoodDollar状态等)开箱即用。对于写入工具,请在MCP服务器 `env` 块中设置 `CELO_PRIVATE_KEY`。_stdio写入在广播之前模拟每个准备步骤,以在花费gas之前捕获回滚。
### LM Studio(0.3.17+)
通过 `mcp.json` 进行原生MCP托管。
1. **程序** → **安装** → **编辑mcp.json**
2. 在 `mcpServers` 下添加Celina
3. 启用 **允许从mcp.json调用服务器**
4. 与支持工具的模型(Qwen 2.5lama 3.1+)聊天
```{
"Servers": {
-mcp": {
"type": "stdio",
"command": "npx",
": ["-yrewkimjelina-mcp"],
"env": "CELO_PRIVATE_KEY": "0x...",
"SELF_AGENT_PRIVATE_KEY": "0x..."
}
}
}
}
```
省略 `CELO` 以进行操作。
### Continue Code
在您的编辑器中使用代理模式。 将YAML文件放入您的工作区中,Continue会在代理模式下自动拾取它。
1. 创建 `.continue/mcpServers/celina-mcp.yaml`
2. 粘贴下面的代码片段
3. 切换Continue到代理模式并提示
```yml
name: Celina
version: 0.0.1
schema: v1
mcpServers:
- name: celina-mcp
type: stdio
command: npx
args:
- "-y"
- "@andrewkimjoseph/celina-mcp"
```
或者,将 [本地stdio JSON](#local-stdio-recommended) 复制到 `.continue/mcpServers/mcp.json` — Continue会自动拾取Claude/Cursor风格的配置。
### 在没有LLM的情况下测试
使用MCP Inspector直接通过stdio调用Celina工具:
```bash
npm run build
npm run inspect
```
### 提示
- 使用具有可靠工具调用支持的模型;小型或较旧的模型可能会跳过工具或错误调用它们。
- 从只读提示开始,例如 *"什么是0x…的USDm余额?"* , *"此钱包是否被GoodDollar列入白名单?"* 或 *"此地址今天是否可以领取GoodDollar UBI?*
- 仅在环境变量中保留私钥 — 永远不要将它们提交到git中的配置文件中。
## 托管(读取 + 预备)
一个公共托管端点可在 **https://mcp.usecelina.xyz/api/mcp** (别名: `/mcp` )使用。当您需要无需本地 `npx` 安装的链读取时,请使用此端点。
**本地stdio仍然是推荐的设置** — 它支持使用您自己的密钥、Self Agent ID流程的写入工具,并避免无服务器冷启动。
**客户端配置(托管,无本地安装):**
```json
{
"mcpServers": {
"celina-mcp": {
"url": "https://mcp.usecelina.xyz/api/mcp"
}
}
}
```
托管服务在Vercel上运行,通过 [celina-mcp-host](../celina-mcp-host/)。 **不要** 向托管端点发送私钥 — 服务器端禁用写入操作。
**无需密钥即可工作:** 所有 `get_*` 工具(包括 `get_aave_balances` )、 `resolve_ens` 、 `get_mento_fx_quote` 、 `get_uniswap_quote` 、 `get_gooddollar_whitelisting_info` 、 `get_gooddollar_ubi_entitlement` 、 `get_gooddollar_reserve_quote` 、 `get_gas_fee_data` 、 `verify_self_agent` 、 `lookup_self_agent` 、 `get_agentkarma_reputation` 、 `get_agentkarma_celo_agent` 、 `check_agentkarma_counterparty` 、治理/质押/NFT/合约读取等。
**托管MCP:** **36种工具** — 读取、oracle/AMM报价、属性检查/验证和AgentKarma声誉(只读外部API;需要显式 `address` — 无签名者回退)。 **`estimate_*`** 、服务器密钥写入( `send_token` 、 `execute_mento_fx` 、 `execute_gooddollar_reserve_swap` 等)、 `get_wallet_address` 和Self生命周期/注册工具需要 **本地stdio** 以及 `CELO_PRIVATE_KEY` / `SELF_AGENT_PRIVATE_KEY` 。
**在无服务器上不可靠:** `register_self_agent` / `check_self_registration` — Self会话是内存中的,不会在无状态函数调用之间持续。
如果您想部署自己的实例,请参阅 [celina-mcp-host/README.md](../celina-mcp-host/README.md)。
## 编写工具
在MCP服务器的 `env` 块中设置 `CELO_PRIVATE 以进行链上写入( `send_token` 、 `estimate_send`execute_mento_fx` 、 `execute_uniswap_swap` 、 `dollar_reserve_swap` 、 `supply` 、 `withdraw_aave` 、 `claimdollar_ubi` 、 `execute_contract )。使用 `_PRIVATE_KEY` 进行Self代理签名工具。密钥保留在您的机器上,不会发送到Celina的作者。
## 会话钱包(本地stdio)
当设置 `CELO_PRIVATE_KEY` 时,服务器在启动时派生一个 **会话钱包** ( `privateKeyToAccount` → `ctx.config.walletAddress` )。代理应如下使用它:
1. **`get_wallet_address`** — 在需要地址作为数据时返回签名者(空输入)。
2. 在钱包范围内的读取中省略 `address` / `wallet_address` / `from` 以获取“我的”余额和活动。
3. 永远不要从shell派生地址或读取 `.env` 。
具有可选地址的钱包范围工具: `get_account` 、代币余额工具、质押读取、GoodDollar读取、 `get_nft_balance` 、 `estimate_transaction` (仅限 `from` )、合约读取( `fromAddress` )。 `execute_contract_function` 使用会话签名者(无地址参数)。
在 **托管** MCP(无密钥)上,传递显式地址。 `get_wallet_address` 在未配置密钥时返回错误。
使用 [`@andrewkimjoseph/celina-sdk`](https://www.npmjs.com/package/@andrewkimjoseph/celina-sdk) 的浏览器应用通过 `surface: "browser"` 过滤相同的工具目录,并在每次调用时传递用户的 — 请参阅 [工具目录指南](https://github.com/andrewkimjoseph/celina-sdk/blob/main/docs/guides/tool-catalog.md) 和 [MCP会话钱包指南](https://github.com/andrewkimjoseph/celina-sdk/blob/main/docs/guides-session-w)。
## 环境变量
| 变量 | 默认值 | 描述 |
| --- | --- | --- |
CELO_PRIVATE_KEY` | — | (发送,M,Uniswap,Aave,GoodDollar UBI认领) |
| `SELF_AGENT_PRIVATE_KEY` | — | Self Agent ID签名/身份工具(与CELO钱包分开) |
| `SELF_AGENT_API_BASE` | `https://app.ai.self.xyz` | 覆盖Self Agent ID REST API基础URL |
| `CELO_RPC_URL_MAINNET` | Forno公共RPC | 覆盖主网RPC |
**账户抽象/ gas赞助:** Celina MCP **不** 接受Pimlico(或其他)赞助API密钥。赞助UserOps在您的应用中使用`@andrewkimjoseph/celina-sdk` [`createAAClient`](https://github.com/andrewkimjoseph/celina-sdk/blob/main/docs/guides/account-abstraction.md),并使用您自己的 `gasSponsorship` 提供商凭证。_stdio `execute_*` 仍然通过 `CELO_PRIVATE_KEY` 仅限EOA。
复制 `.env.example` 到 `.env` 进行本地开发。
## 已知代币
所有支持的代币都存储在 [`celina-sdk`](https://www.npmjs.com/package/@andrewkimjoseph/celina-sdk) 代币注册表中:
| 类别 | 符号 |
| --- | --- |
| 原生 | `CELO` |
| Mento稳定币 | `USDm` 、 `EURm` 、 `BRLm` 、 `XOFm` 、 `KESm` 、 `PHPm` 、 `COPm` 、 `GBPm` 、 `CADm` 、 `AUDm` 、 `ZARm` 、 `GHSm` 、Nm` 、 `JPYm` 、 `CHFm` |
| 桥接/第三方 | `USDT` 、 `USDC` 、 `vEUR` 、 `vGBP` 、 `vCHF` 、 `USDM` 、 `US 、 `EURA` 、 `LO` 、 `BRLA` 、 `COPM| GoodDollar | `GoodDollar` 、 `G$` ( `0x62B8B11039FcfEB0C56E502b1C372A3d2c7A`代币符号不区分大小写解析。M ticker( `` 、 `c `c 、 `P` 、 `c 、 `eX)映射到当前的 `XXXm名称。您也可以知的注册合约- `get_celo_balances` —注册代币余额(CELO`USDm` )
-_stableances` — 扫描所有注册稳定币次调用(默认为零余额)
工具
工具 | 类型 | 描述 |
| --- | --- | --- |
| `` | 只读网链ID,区块,gas价格 |
| `get_block` | 只读 | 按编号/哈希/最新区块 `includeTransactions` ) |
|_latest_blocks` | 只读 |区块(可选 `offset` ,个) |
| `get_transaction 只读 | 交易 + 收据check_attribution_tag` | | 优先:所有ERC-802tags` (不区分大小写)(包括 `celina` ,镜像 `1.codes` )或确认交易标签 |
| `verify_attribution | 只读 | 原始遗产属性解码,用于交易 |
| `get_wallet_address` | | `CELO_PRIVATE_KEY`者地址(stdio) |
|` | 只读 | CE,nonce(省略 `address` 以获取配置的签名者) |
|_ens` | 只读 |ENS名称 |
| `get_celo_balances` | 只读 | 命名注册代币余额(默认LO + USDm) |
|_stablecoin_balances` | | 扫描所有注册稳定默认余额 |
| `get_token_info` | 只读 | 注册代币元数据(无余额读取) |
| `get_token_balance` | 只读 | 单个注册代币余额(代币符号或已知注册地址) |
| `get_gas_fee_data` | 只读 | 当前gas费用(支持EIP9时) |
|_transaction` | 只读用交易gas估计(/value/data) |
| `estimate_send` | 只读* |发送gas估计( *需要 `_PRIVATE_KEY` ) |
| `` | 写入 | 发送CELO或ERC-20 |
| `get__fx_quote` | 只读 | Mento FX预期输出(无 |
| `estimate_mento_fx` | 只读* | Mento FX gas估计( *需要 `_PRIVATE_KEY` ) |
| `mento_fx` | 执行Mento FX转换 |
get_uniswap_quote` | 只读 | Uniswap v4预期输出() |
| `estimate_uniswap | 只读* | Un4 gas估计,包括Permit2批准( *需要 `CELO_PRIVATE_KEY` ) |
| `execute_uniswap_swap`写入 | 执行Uniswap v4交换(Universal Router + Permit2) |
| `get_aave_balances`读 | Celo上的Aave V3供应头寸(aToken余额) |
| `supply_aave`写入 | 将代币供应给CAave V3(USDT,WETH,USDm,USDC,CELO,EURm) |
| `withdraw_aave` | 写入 | 从Celo的Aave V3中提取代币 |
| `get_gooddollar_whitelisting_info` | 只读 | GoodDollar IdentityV4白名单状态(连接的钱包解析为根目录) |
| `get_gooddollar_identity_link` | 只读 | GoodDollar IdentityV4链接图(根目录,connectedTo) |
| `get_gooddollar_ubi_entitlement` | 只读 | 每日UBI认领资格(金额,白名单根目录,原因) |
| `get_gooddollar_reserve_quote` | 只读 | G$ ↔ USDm报价通过GoodDollar MentoBroker储备(绑定曲线) |
| `estimate_gooddollar_reserve_swap` | 只读* | 储备交换gas估计( *需要 `CELO_PRIVATE_KEY` ) |
| `execute_gooddollar_reserve_swap` | 写入 | 执行G$ ↔ USDm储备交换通过MentoBroker |
| `claim_daily_gooddollar_ubi` | 写入 | 今日GoodDollar UBI(G$)认领MCP服务器钱包 |
| `get_governance_proposals` | 只读 | Celo治理提案(分页) |
| `get_proposal_details` | 只读 | 治理提案详情 + CGP内容 |
get_staking_balances` | 只读 | 按验证者分组的质押投票 |
| `get_activatable_stakes` | 只读 | 待激活的质押 |
| `_groups` | 只读 | 验证者分组(分页) |
| `get_validator_group_details` | 只读 | 单个验证者分组详情 |
| `get_total_staking_info` | 只读 | 网络范围内的质押总额 |
| `get_nft_info` | 只读 | NFT代币信息 + 元数据 |
| `get_nft_balance` | 只读 | NFT余额(ERC-721 或 ERC-1155) |
| `call` | 只读 | 只读合约调用(调用者ABI) |
| `estimate_contract_gas` | 只读 | 合约函数gas估计(调用者ABI) |
| `execute_contract_function` | 写入 | 状态改变合约调用(调用者ABI;需要 `CELO_PRIVATE_KEY` ) |
| `verify_self_agent` | 只读 | 通过地址验证Self Agent ID |
| `lookup_self_agent` | 只读 | 按数字ID查找Self代理(ai.self.xyz) |
| `verify_self_request` | 只读 | 验证签名Self Agent HTTP请求头 |
| `register_self_agent` | 写入 | 启动Self代理注册(QR/深链接) |
| `check_self_registration` | 只读* | 轮询注册/刷新/注销会话( *可能返回私钥) |
| `get_self_identity` | 只读* | 当前Self代理身份( *需要代理密钥) |
| `refresh_self_proof` | 写入 | 在链上过期后更新人类证明( `isProofFresh` false) |
| `deregister_self_agent` | 写入 | 不可逆转地撤销Self代理身份 |
| `sign_self_request` | 只读* | 用Self代理头签名HTTP请求( *需要代理密钥) |
| `authenticated_self_fetch` | 写入 | 使用Self代理身份验证的HTTP获取( *需要代理密钥) |
| `get_agentkarma_reputation` | 只读 | 针对Celo钱包的AgentKarma提供商+消费者karma |
| `get_agentkarma_celo_agent` | 只读 | 按数字ID的ERC-8004 Celo代理 |
| `check_agentkarma_counterparty` | 只读 | 针对karma快照的本地信任策略评估 |
### 兑换路由(Mento FX,GoodDollar 储备,Uniswap v4)
提供了三种兑换路由。根据代币对选择:
| 路由 | 最适合 | 查询工具 | 执行(MCP) |
|-------|----------|------------|---------------|
| **Mento FX** | Mento 预言机稳定币(USDm,EURm,CELO,…) | `get_mento_fx_quote` | `estimate_mento_fx` → `execute_mento_fx` |
| **GoodDollar 储备** | **G$ ↔ USDm** (债券曲线) | `get_gooddollar_reserve_quote` | `estimate_gooddollar_reserve_swap` → `execute_gooddollar_reserve_swap` |
| **Uniswap v4** | AMM 交易对(例如 G$ → USDT,USDC → USDT) | `get_uniswap_quote` | `estimate_uniswap_swap` → `execute_uniswap_swap` |
**G$ ↔ USDm** 使用 GoodDollar 储备 - 不使用 Uniswap(流动性通常不足)。**G$ → USDT** 和类似的 AMM 交易对使用 Uniswap,当 Mento FX 没有路由时。CELO 兑换在 Uniswap 路由上通过 WCELO 交易池 - 签名者需要 WCELO(包装的 CELO)余额,而不是原生 CELO。所有链上步骤都包含 Celina ERC-8021 Schema 0 属性(`celina` + 可选的应用代码)。优先使用 `check_attribution_tag` 确认交易哈希上的交易标签。赞助用户操作在您的应用中使用 SDK [`createAAClient`](https://andrewkimjoseph.gitbook.io/celina-sdk/guides/account-abstraction) - Celina MCP 不托管 Pimlico/gas 赞助密钥。
推荐的LLM流程:查询相关的路由(s),比较 `expectedOut`,然后估计并执行更好的路由(或使用 SDK `prepareReserveSwap` / `prepare_swap` 进行用户钱包签名以进行储备兑换)。
### GoodDollar
#### UBI
通过 Celo 上的 UBISchemeV2(`0x43d72Ff17701B2DA814620735C39C620Ce0ea4A1`)进行每日 G$ 领取。身份必须被列入白名单;连接的钱包解析为其验证的根。余额和储备工具仅使用字面钱包地址。**每个身份每个 UBI 期限仅限一次领取。**
| 工具 | 类型 | 备注 |
|------|------|-------|
| `get_gooddollar_identity_link` | 读取 | 根 vs 连接的钱包链接 |
| `get_gooddollar_whitelisting_info` | 读取 | 身份V4状态,重新验证时间表(根解析) |
| `get_gooddollar_ubi_entitlement` | 读取 | 可领取的 G$,白名单根,资格原因 |
| `claim_daily_gooddollar_ubi` | 写入 | 为 MCP 服务器钱包(`CELO_PRIVATE_KEY`)领取;仅限标准输入/输出 |
推荐流程:`get_gooddollar_ubi_entitlement` → `claim_daily_gooddollar_ubi` (或使用 SDK `prepareClaimUbi` + wagmi 进行用户钱包签名)。
#### 储备兑换(G$ ↔ USDm)
链上 **MentoBroker** 债券曲线 - GoodDollar ↔ USDm 的规范路由。MCP 可以使用 `CELO_PRIVATE_KEY` 在标准输入/输出中 **查询**、**估计** 和 **执行**。浏览器应用使用 `prepare_gooddollar_reserve_swap` 或 `prepare_swap`。
| 工具 | 类型 | 备注 |
|------|------|-------|
| `get_gooddollar_reserve_quote` | 读取 | 主持 + 标准输入/输出;交易对仅限 G$ ↔ USDm |
| `estimate_gooddollar_reserve_swap` | 读取* | Gas 估计(*需要 `CELO_PRIVATE_KEY`) |
| `execute_gooddollar_reserve_swap` | 写入 | 仅限标准输入/输出;签名批准 + 代理 `swapIn` |
详情:[celina-sdk GoodDollar 指南](../celina-sdk/docs/guides/gooddollar.md)。
### 自我代理 ID 备注
- **注册生命周期 API**(`register_self_agent`,`refresh_self_proof`,`deregister_self_agent`)在 Self REST API 请求正文中使用 `network: "mainnet"`。
- **演示和受限的 HTTP 端点**(例如 `https://app.ai.self.xyz/api/demo/verify`)需要查询参数 **`network=celo-mainnet`**,而不是 `network=mainnet`。
- **二维码扫描 URL** 使用 `/scan/{sessionToken}`,而不是 `/qr/...`。
- **`refresh_self_proof`** 仅在链上证明过期后开始(`isProofFresh` 为假);在证明新鲜时,它返回一个明确的错误,而不是一个将在链上失败的二维码。30 天的 `is_expiring_soon` 标志(与 Self SDK 的 `isProofExpiringSoon` 匹配)仅用于警告。Self SDK 还记录了取消注册 → 重新注册为替代续期路径。
示例身份验证演示调用:
```text
authenticated_self_fetch
method: POST
url: https://app.ai.self.xyz/api/demo/verify?network=celo-mainnet
body: {}
```
## 添加新工具
1. 在 **celina-sdk** `src/tools/domains/` 中添加一个 `ToolDefinition`,并从 `ALL_TOOL_DEFINITIONS` 中导出它(参见 [`@andrewkimjoseph/celina-sdk/tools`](https://github.com/andrewkimjoseph/celina-sdk/blob/main/docs/guides/tool-catalog.md))。
2. MCP 通过 `src/tools/sdk-register.ts` 中的 `registerSdkTools` 自动获取它 - 不需要每个工具的 MCP 文件。
3. 如果处理程序需要新的客户端方法,请在 celina-sdk 服务中添加域逻辑。
4. 重建两个软件包:`npm run build` 在 celina-sdk 中,然后在 celina-mcp 中。
在定义上设置 `surfaces`(`"mcp"`,`"browser"` 或两者),并使用 `filterToolDefinitions` 选项(`serverKeyToolsEnabled`,`estimateToolsEnabled`)控制托管 vs 标准输入/输出暴露。
## 对于开发者
### 架构拆分
链逻辑来自 [`@andrewkimjoseph/celina-sdk`](https://www.npmjs.com/package/@andrewkimjoseph/celina-sdk) 通过 [`src/context/app-context.ts`](src/context/app-context.ts)。编写工具调用 SDK `prepare*` 方法,然后 [`executePreparedFlow`](src/services/execute-prepared-flow.ts) 使用 [`simulatePreparedStep`](https://www.npmjs.com/package/@andrewkimjoseph/celina-sdk/simulation) 模拟每个步骤,然后使用 `CELO_PRIVATE_KEY` 签名:
| 层 | 源 | 示例 |
|-------|--------|----------|
| 读取 | celina-sdk | 余额,区块,Mento/Uniswap/储备报价,GoodDollar 白名单/UBI/储备,ENS |
| 写入 | SDK `prepare*` + 本地执行器 | `send_token`,`execute_mento_fx`,`execute_uniswap_swap`,`execute_gooddollar_reserve_swap`,`supply_aave`,`withdraw_aave`,`claim_daily_gooddollar_ubi`,`execute_contract_function` |
| 自我代理 ID | celina-sdk `client.self` | 注册,证明刷新,身份验证获取(`SELF_AGENT_PRIVATE_KEY`) |
在每次 `wallet.sendTransaction` 之前,`executePreparedFlow` 调用 `simulatePreparedStep` 来自 `@andrewkimjoseph/celina-sdk/simulation`。在花费 Gas 之前捕获回滚;事后检查 `receipt.status` 作为安全网。没有 `feeCurrency` - 服务器钱包支付 CELO Gas。
Mento FX 路由使用 `@mento-protocol/mento-sdk` 通过 celina-sdk 间接 - MCP 不直接导入它。
自我代理 ID 在 [`@andrewkimjoseph/celina-sdk`](https://www.npmjs.com/package/@andrewkimjoseph/celina-sdk)(`client.self`)中实现。对于浏览器优先的自我 UI,还请参见 [`@selfxyz/agent-sdk`](https://www.npmjs.com/package/@selfxyz/agent-sdk)。
### 目录映射
| 路径 | 目的 |
|------|---------|
| `src/index.ts` | 标准输入/输出 MCP 启动 - 加载环境,连接传输 |
| `src/server/` | `createServer()` 工厂和 LLM 指令 |
| `src/context/` | 组合 SDK 客户端 + MCP 运行时(钱包,执行器,钩子) |
| `src/tools/` | `registerSdkTools` - 注册来自 celina-sdk 的过滤 `ALL_TOOL_DEFINITIONS` |
| `src/services/` | 钱包执行器(`execute-prepared-flow.ts`)用于签名广播 |
| `src/config/` | 环境,代币注册表,自我常量 |
工具模式,描述和处理程序位于 **celina-sdk** `src/tools/domains/`。MCP 仅将它们连接到 `@modelcontextprotocol/sdk` - 参见 [添加新工具](#添加新工具)。
### 本地开发
```bash
npm run dev # 监视 TypeScript → build/
npm run inspect # 标准输入/输出上的 MCP Inspector UI
```
在源代码开发中,将您的 MCP 客户端指向构建的入口:
```json
"args": ["/absolute/path/to/celina-mcp/build/index.js"]
```
复制 `.env.example` 到 `.env` 以获取 `CELO_PRIVATE_KEY`,`SELF_AGENT_PRIVATE_KEY` 和 RPC 重复。
## 路线图
- [x] Mento FX 路由(`get_mento_fx_quote`,`estimate_mento_fx`,`execute_mento_fx`)
- [x] Uniswap v4 兑换(`get_uniswap_quote`,`estimate_uniswap_swap`,`execute_uniswap_swap`)
- [x] Aave 工具(`get_aave_balances`,`supply_aave`,`withdraw_aave`)- USDT,WETH,USDm,USDC,CELO,EURm
- [x] 自我证明验证(`verify_self_agent`,`verify_self_request`,`ai.self.xyz`)
- [x] 自我代理 ID 检查(`lookup_self_agent`,注册和生命周期工具)
## 开发
```bash
npm run dev # 监视 TypeScript
npm run inspect # MCP Inspector UI(标准输入/输出)
```
## 许可证
MIT
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器