@andrewkimjoseph/celina 0.3.6 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/wrapper.js +2 -0
- package/package.json +5 -49
- package/LICENSE +0 -21
- package/README.md +0 -292
- package/assets/logo-black.png +0 -0
- package/assets/logo-yellow.png +0 -0
- package/assets/logo.png +0 -0
- package/bin/cli.js +0 -2
- package/build/abis/aave-pool.d.ts +0 -37
- package/build/abis/aave-pool.js +0 -26
- package/build/abis/aave-pool.js.map +0 -1
- package/build/abis/gooddollar-identity.d.ts +0 -61
- package/build/abis/gooddollar-identity.js +0 -38
- package/build/abis/gooddollar-identity.js.map +0 -1
- package/build/abis/self-registry.d.ts +0 -194
- package/build/abis/self-registry.js +0 -120
- package/build/abis/self-registry.js.map +0 -1
- package/build/clients/celo-client.d.ts +0 -14
- package/build/clients/celo-client.js +0 -58
- package/build/clients/celo-client.js.map +0 -1
- package/build/clients/ens-client.d.ts +0 -10
- package/build/clients/ens-client.js +0 -23
- package/build/clients/ens-client.js.map +0 -1
- package/build/clients/mento-sdk.d.ts +0 -2
- package/build/clients/mento-sdk.js +0 -9
- package/build/clients/mento-sdk.js.map +0 -1
- package/build/clients/self-api.d.ts +0 -82
- package/build/clients/self-api.js +0 -242
- package/build/clients/self-api.js.map +0 -1
- package/build/config/aave.d.ts +0 -5
- package/build/config/aave.js +0 -6
- package/build/config/aave.js.map +0 -1
- package/build/config/celina-tag.d.ts +0 -1
- package/build/config/celina-tag.js +0 -3
- package/build/config/celina-tag.js.map +0 -1
- package/build/config/chains.d.ts +0 -935
- package/build/config/chains.js +0 -244
- package/build/config/chains.js.map +0 -1
- package/build/config/env.d.ts +0 -7
- package/build/config/env.js +0 -9
- package/build/config/env.js.map +0 -1
- package/build/config/gooddollar.d.ts +0 -1
- package/build/config/gooddollar.js +0 -2
- package/build/config/gooddollar.js.map +0 -1
- package/build/config/load-env.d.ts +0 -1
- package/build/config/load-env.js +0 -4
- package/build/config/load-env.js.map +0 -1
- package/build/config/self.d.ts +0 -22
- package/build/config/self.js +0 -27
- package/build/config/self.js.map +0 -1
- package/build/context/app-context.d.ts +0 -28
- package/build/context/app-context.js +0 -28
- package/build/context/app-context.js.map +0 -1
- package/build/crypto/wallet-key-crypto.d.ts +0 -11
- package/build/crypto/wallet-key-crypto.js +0 -57
- package/build/crypto/wallet-key-crypto.js.map +0 -1
- package/build/http.d.ts +0 -2
- package/build/http.js +0 -15
- package/build/http.js.map +0 -1
- package/build/index.d.ts +0 -2
- package/build/index.js +0 -17
- package/build/index.js.map +0 -1
- package/build/schemas/common.d.ts +0 -6
- package/build/schemas/common.js +0 -24
- package/build/schemas/common.js.map +0 -1
- package/build/server/create-http-app.d.ts +0 -1
- package/build/server/create-http-app.js +0 -147
- package/build/server/create-http-app.js.map +0 -1
- package/build/server/create-server.d.ts +0 -2
- package/build/server/create-server.js +0 -23
- package/build/server/create-server.js.map +0 -1
- package/build/server/instructions.d.ts +0 -1
- package/build/server/instructions.js +0 -22
- package/build/server/instructions.js.map +0 -1
- package/build/services/aave.service.d.ts +0 -29
- package/build/services/aave.service.js +0 -166
- package/build/services/aave.service.js.map +0 -1
- package/build/services/account.service.d.ts +0 -13
- package/build/services/account.service.js +0 -23
- package/build/services/account.service.js.map +0 -1
- package/build/services/blockchain.service.d.ts +0 -40
- package/build/services/blockchain.service.js +0 -81
- package/build/services/blockchain.service.js.map +0 -1
- package/build/services/ens.service.d.ts +0 -30
- package/build/services/ens.service.js +0 -78
- package/build/services/ens.service.js.map +0 -1
- package/build/services/gooddollar.service.d.ts +0 -38
- package/build/services/gooddollar.service.js +0 -127
- package/build/services/gooddollar.service.js.map +0 -1
- package/build/services/mento-fx.service.d.ts +0 -72
- package/build/services/mento-fx.service.js +0 -266
- package/build/services/mento-fx.service.js.map +0 -1
- package/build/services/self-session-store.d.ts +0 -19
- package/build/services/self-session-store.js +0 -28
- package/build/services/self-session-store.js.map +0 -1
- package/build/services/self.service.d.ts +0 -250
- package/build/services/self.service.js +0 -689
- package/build/services/self.service.js.map +0 -1
- package/build/services/token.service.d.ts +0 -54
- package/build/services/token.service.js +0 -147
- package/build/services/token.service.js.map +0 -1
- package/build/services/transaction.service.d.ts +0 -24
- package/build/services/transaction.service.js +0 -117
- package/build/services/transaction.service.js.map +0 -1
- package/build/tools/aave.tools.d.ts +0 -2
- package/build/tools/aave.tools.js +0 -56
- package/build/tools/aave.tools.js.map +0 -1
- package/build/tools/blockchain.tools.d.ts +0 -3
- package/build/tools/blockchain.tools.js +0 -88
- package/build/tools/blockchain.tools.js.map +0 -1
- package/build/tools/ens.tools.d.ts +0 -2
- package/build/tools/ens.tools.js +0 -27
- package/build/tools/ens.tools.js.map +0 -1
- package/build/tools/gooddollar.tools.d.ts +0 -2
- package/build/tools/gooddollar.tools.js +0 -23
- package/build/tools/gooddollar.tools.js.map +0 -1
- package/build/tools/helpers.d.ts +0 -3
- package/build/tools/helpers.js +0 -16
- package/build/tools/helpers.js.map +0 -1
- package/build/tools/index.d.ts +0 -5
- package/build/tools/index.js +0 -25
- package/build/tools/index.js.map +0 -1
- package/build/tools/mento-fx.tools.d.ts +0 -2
- package/build/tools/mento-fx.tools.js +0 -87
- package/build/tools/mento-fx.tools.js.map +0 -1
- package/build/tools/self.tools.d.ts +0 -2
- package/build/tools/self.tools.js +0 -256
- package/build/tools/self.tools.js.map +0 -1
- package/build/tools/token.tools.d.ts +0 -2
- package/build/tools/token.tools.js +0 -62
- package/build/tools/token.tools.js.map +0 -1
- package/build/tools/transaction.tools.d.ts +0 -2
- package/build/tools/transaction.tools.js +0 -55
- package/build/tools/transaction.tools.js.map +0 -1
- package/build/tools/types.d.ts +0 -5
- package/build/tools/types.js +0 -2
- package/build/tools/types.js.map +0 -1
- package/build/utils/erc20-allowance-storage.d.ts +0 -7
- package/build/utils/erc20-allowance-storage.js +0 -44
- package/build/utils/erc20-allowance-storage.js.map +0 -1
- package/build/utils/format-date.d.ts +0 -1
- package/build/utils/format-date.js +0 -12
- package/build/utils/format-date.js.map +0 -1
- package/build/utils/self-format.d.ts +0 -16
- package/build/utils/self-format.js +0 -59
- package/build/utils/self-format.js.map +0 -1
- package/build/utils/self-signing.d.ts +0 -4
- package/build/utils/self-signing.js +0 -38
- package/build/utils/self-signing.js.map +0 -1
package/bin/wrapper.js
ADDED
package/package.json
CHANGED
|
@@ -1,60 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewkimjoseph/celina",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "Deprecated — use @andrewkimjoseph/celina-mcp",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "build/index.js",
|
|
7
6
|
"bin": {
|
|
8
|
-
"celina": "bin/
|
|
7
|
+
"celina": "bin/wrapper.js",
|
|
8
|
+
"celina-mcp": "bin/wrapper.js"
|
|
9
9
|
},
|
|
10
10
|
"publishConfig": {
|
|
11
11
|
"access": "public"
|
|
12
12
|
},
|
|
13
|
-
"files": [
|
|
14
|
-
"build/",
|
|
15
|
-
"bin/",
|
|
16
|
-
"assets/logo.png",
|
|
17
|
-
"assets/logo-black.png",
|
|
18
|
-
"assets/logo-yellow.png",
|
|
19
|
-
"README.md",
|
|
20
|
-
"LICENSE"
|
|
21
|
-
],
|
|
22
|
-
"scripts": {
|
|
23
|
-
"build": "rm -rf build && tsc",
|
|
24
|
-
"start": "node build/index.js",
|
|
25
|
-
"start:http": "node build/http.js",
|
|
26
|
-
"dev": "tsc --watch",
|
|
27
|
-
"prepare": "npm run build",
|
|
28
|
-
"inspect": "npx @modelcontextprotocol/inspector node build/index.js",
|
|
29
|
-
"encrypt-key": "tsx scripts/encrypt-key.ts"
|
|
30
|
-
},
|
|
31
|
-
"engines": {
|
|
32
|
-
"node": ">=20.0.0"
|
|
33
|
-
},
|
|
34
|
-
"keywords": [
|
|
35
|
-
"mcp",
|
|
36
|
-
"celina",
|
|
37
|
-
"celo",
|
|
38
|
-
"blockchain",
|
|
39
|
-
"web3",
|
|
40
|
-
"ai",
|
|
41
|
-
"agent"
|
|
42
|
-
],
|
|
43
|
-
"author": "Andrew Kim Joseph",
|
|
44
|
-
"license": "MIT",
|
|
45
13
|
"dependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"@modelcontextprotocol/sdk": "^1.22.0",
|
|
48
|
-
"@noble/ed25519": "^3.1.0",
|
|
49
|
-
"dotenv": "^17.4.2",
|
|
50
|
-
"express": "^5.2.1",
|
|
51
|
-
"viem": "^2.39.3",
|
|
52
|
-
"zod": "^3.24.3"
|
|
53
|
-
},
|
|
54
|
-
"devDependencies": {
|
|
55
|
-
"@types/express": "^5.0.6",
|
|
56
|
-
"@types/node": "^22.0.0",
|
|
57
|
-
"tsx": "^4.22.3",
|
|
58
|
-
"typescript": "^5.8.2"
|
|
14
|
+
"@andrewkimjoseph/celina-mcp": "^0.5.0"
|
|
59
15
|
}
|
|
60
16
|
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Andrew Kim Joseph
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/README.md
DELETED
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<picture>
|
|
3
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/andrewkimjoseph/celina/main/assets/logo-yellow.png">
|
|
4
|
-
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/andrewkimjoseph/celina/main/assets/logo-black.png">
|
|
5
|
-
<img src="https://raw.githubusercontent.com/andrewkimjoseph/celina/main/assets/logo-black.png" alt="Celina logo — C with profile silhouette" width="160">
|
|
6
|
-
</picture>
|
|
7
|
-
</p>
|
|
8
|
-
|
|
9
|
-
<h1 align="center">Celina — Celo MCP Server</h1>
|
|
10
|
-
|
|
11
|
-
<p align="center">
|
|
12
|
-
<strong>Celina</strong> is an open-source <a href="https://modelcontextprotocol.io">Model Context Protocol</a> server that gives LLMs read + write access to <strong>Celo mainnet</strong> — balances, stablecoins, sends, and chain reads.
|
|
13
|
-
</p>
|
|
14
|
-
|
|
15
|
-
<p align="center">
|
|
16
|
-
<a href="https://celina.andrewkimjoseph.com">Website</a>
|
|
17
|
-
·
|
|
18
|
-
<a href="https://www.npmjs.com/package/@andrewkimjoseph/celina">npm</a>
|
|
19
|
-
</p>
|
|
20
|
-
|
|
21
|
-
## Install
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm i @andrewkimjoseph/celina@latest
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Quick start
|
|
28
|
-
|
|
29
|
-
Celina is not meant to be run manually in a terminal for normal use. Your MCP client (Cursor, Claude Desktop, LM Studio, etc.) spawns it as a child process and talks to it over stdio.
|
|
30
|
-
|
|
31
|
-
Install from npm, then add Celina to your MCP config — see [MCP setup](#mcp-setup).
|
|
32
|
-
|
|
33
|
-
## MCP setup
|
|
34
|
-
|
|
35
|
-
Pick your client, install the package, paste the config, restart. Celina shows up as MCP tools your LLM can call.
|
|
36
|
-
|
|
37
|
-
### Local stdio (recommended)
|
|
38
|
-
|
|
39
|
-
Install the package, then add Celina to your MCP config. Your client spawns `npx` and talks to Celina over stdio. Works in any stdio client (Cursor, Claude Desktop, LM Studio, Continue, MCP Inspector). Requires Node.js ≥ 20.
|
|
40
|
-
|
|
41
|
-
1. Run `npm i @andrewkimjoseph/celina` (optional but recommended — caches the package locally for faster MCP startup)
|
|
42
|
-
2. Open your MCP config (e.g. `claude_desktop_config.json`, Cursor **Settings → MCP**) and merge the snippet below into `mcpServers`
|
|
43
|
-
3. Restart the client
|
|
44
|
-
|
|
45
|
-
```json
|
|
46
|
-
{
|
|
47
|
-
"mcpServers": {
|
|
48
|
-
"celina": {
|
|
49
|
-
"type": "stdio",
|
|
50
|
-
"command": "npx",
|
|
51
|
-
"args": ["-y", "@andrewkimjoseph/celina"],
|
|
52
|
-
"env": {
|
|
53
|
-
"CELO_PRIVATE_KEY": "0x...",
|
|
54
|
-
"SELF_AGENT_PRIVATE_KEY": "0x..."
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Keep `CELO_PRIVATE_KEY` and `SELF_AGENT_PRIVATE_KEY` out of source control — they stay on your machine. Omit both for read-only chain queries.
|
|
62
|
-
|
|
63
|
-
### Claude Desktop
|
|
64
|
-
|
|
65
|
-
Use the same stdio config in `claude_desktop_config.json` (macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`). Requires Node.js ≥ 20.
|
|
66
|
-
|
|
67
|
-
```json
|
|
68
|
-
{
|
|
69
|
-
"mcpServers": {
|
|
70
|
-
"celina": {
|
|
71
|
-
"type": "stdio",
|
|
72
|
-
"command": "npx",
|
|
73
|
-
"args": ["-y", "@andrewkimjoseph/celina"],
|
|
74
|
-
"env": {
|
|
75
|
-
"CELO_PRIVATE_KEY": "0x...",
|
|
76
|
-
"SELF_AGENT_PRIVATE_KEY": "0x..."
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Fully quit and relaunch Claude Desktop after editing the config (closing the window is not enough).
|
|
84
|
-
|
|
85
|
-
### Local stdio (from source)
|
|
86
|
-
|
|
87
|
-
For development from a cloned repo, point at your local `build/index.js`:
|
|
88
|
-
|
|
89
|
-
```json
|
|
90
|
-
{
|
|
91
|
-
"mcpServers": {
|
|
92
|
-
"celina": {
|
|
93
|
-
"type": "stdio",
|
|
94
|
-
"command": "node",
|
|
95
|
-
"args": ["/absolute/path/to/celina/build/index.js"],
|
|
96
|
-
"env": {
|
|
97
|
-
"CELO_PRIVATE_KEY": "0x...",
|
|
98
|
-
"SELF_AGENT_PRIVATE_KEY": "0x..."
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Run Celina with your own model
|
|
106
|
-
|
|
107
|
-
Celina is a plain MCP server. Pair it with any MCP-aware local stack — Ollama, LM Studio, llama.cpp — through a client that supports tool calling.
|
|
108
|
-
|
|
109
|
-
Read-only tools (balances, blocks, GoodDollar status, etc.) work out of the box. For write tools, set `CELO_PRIVATE_KEY` in the MCP server `env` block.
|
|
110
|
-
|
|
111
|
-
### LM Studio (0.3.17+)
|
|
112
|
-
|
|
113
|
-
Native MCP hosting via `mcp.json`.
|
|
114
|
-
|
|
115
|
-
1. **Program** → **Install** → **Edit mcp.json**
|
|
116
|
-
2. Add Celina under `mcpServers`
|
|
117
|
-
3. Enable **Allow calling servers from mcp.json**
|
|
118
|
-
4. Chat with a tool-capable model (Qwen 2.5, Llama 3.1+)
|
|
119
|
-
|
|
120
|
-
```json
|
|
121
|
-
{
|
|
122
|
-
"mcpServers": {
|
|
123
|
-
"celina": {
|
|
124
|
-
"type": "stdio",
|
|
125
|
-
"command": "npx",
|
|
126
|
-
"args": ["-y", "@andrewkimjoseph/celina"],
|
|
127
|
-
"env": {
|
|
128
|
-
"CELO_PRIVATE_KEY": "0x...",
|
|
129
|
-
"SELF_AGENT_PRIVATE_KEY": "0x..."
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
Omit `CELO_PRIVATE_KEY` for read-only.
|
|
137
|
-
|
|
138
|
-
### Continue · VS Code
|
|
139
|
-
|
|
140
|
-
Agent mode in your editor. Drop a YAML file into your workspace and Continue picks it up in agent mode.
|
|
141
|
-
|
|
142
|
-
1. Create `.continue/mcpServers/celina.yaml`
|
|
143
|
-
2. Paste the snippet below
|
|
144
|
-
3. Switch Continue to agent mode and prompt
|
|
145
|
-
|
|
146
|
-
```yaml
|
|
147
|
-
name: Celina
|
|
148
|
-
version: 0.0.1
|
|
149
|
-
schema: v1
|
|
150
|
-
mcpServers:
|
|
151
|
-
- name: celina
|
|
152
|
-
type: stdio
|
|
153
|
-
command: npx
|
|
154
|
-
args:
|
|
155
|
-
- "-y"
|
|
156
|
-
- "@andrewkimjoseph/celina"
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
Alternatively, copy the [local stdio JSON](#local-stdio-recommended) into `.continue/mcpServers/mcp.json` — Continue picks up Claude/Cursor-style configs automatically.
|
|
160
|
-
|
|
161
|
-
### Test without an LLM
|
|
162
|
-
|
|
163
|
-
Use MCP Inspector to call Celina tools directly over stdio:
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
npm run build
|
|
167
|
-
npm run inspect
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Tips
|
|
171
|
-
|
|
172
|
-
- Use models with reliable tool-calling support; small or older models may skip tools or call them incorrectly.
|
|
173
|
-
- Start with read-only prompts, e.g. *"What's the USDm balance of 0x…?"* or *"Is this wallet GoodDollar whitelisted?"*
|
|
174
|
-
- Keep private keys in env vars only — never commit them to config files in git.
|
|
175
|
-
|
|
176
|
-
## Write tools
|
|
177
|
-
|
|
178
|
-
Set `CELO_PRIVATE_KEY` in your MCP server `env` block for on-chain writes (`send_token`, `estimate_send`, `execute_mento_fx`, `supply_aave_usdt`, `withdraw_aave_usdt`). Use `SELF_AGENT_PRIVATE_KEY` for Self agent signing tools. Keys stay on your machine and are not sent to Celina's authors.
|
|
179
|
-
|
|
180
|
-
## Environment variables
|
|
181
|
-
|
|
182
|
-
| Variable | Default | Description |
|
|
183
|
-
|----------|---------|-------------|
|
|
184
|
-
| `CELO_PRIVATE_KEY` | — | Write tools (send, Mento FX, Aave) |
|
|
185
|
-
| `SELF_AGENT_PRIVATE_KEY` | — | Self Agent ID signing/identity tools (separate from CELO wallet) |
|
|
186
|
-
| `SELF_AGENT_API_BASE` | `https://app.ai.self.xyz` | Override Self Agent ID REST API base URL |
|
|
187
|
-
| `CELO_RPC_URL_MAINNET` | Forno public RPC | Override mainnet RPC |
|
|
188
|
-
|
|
189
|
-
Copy `.env.example` to `.env` for local development.
|
|
190
|
-
|
|
191
|
-
## Known tokens
|
|
192
|
-
|
|
193
|
-
All supported tokens live in a single registry (`src/config/chains.ts`):
|
|
194
|
-
|
|
195
|
-
| Category | Symbols |
|
|
196
|
-
|----------|---------|
|
|
197
|
-
| Native | `CELO` |
|
|
198
|
-
| Mento stablecoins | `USDm`, `EURm`, `BRLm`, `XOFm`, `KESm`, `PHPm`, `COPm`, `GBPm`, `CADm`, `AUDm`, `ZARm`, `GHSm`, `NGNm`, `JPYm`, `CHFm` |
|
|
199
|
-
| Bridged / third-party | `USDT`, `USDC`, `vEUR`, `vGBP`, `vCHF`, `USDM`, `USDA`, `EURA`, `USDGLO`, `BRLA`, `COPM` |
|
|
200
|
-
| GoodDollar | `GoodDollar`, `G$` (`0x62B8B11039FcfE5aB0C56E502b1C372A3d2a9c7A`) |
|
|
201
|
-
|
|
202
|
-
Token symbols are resolved case-insensitively. Legacy aliases `cUSD` and `cEUR` map to `USDm` and `EURm`. You can also pass any ERC-20 contract address directly.
|
|
203
|
-
|
|
204
|
-
- `get_celo_balances` — check specific tokens (defaults to `CELO` + `USDm`)
|
|
205
|
-
- `get_stablecoin_balances` — scan all registry stablecoins in one call (omits zero balances by default)
|
|
206
|
-
|
|
207
|
-
## Tools (v0.2)
|
|
208
|
-
|
|
209
|
-
| Tool | Type | Description |
|
|
210
|
-
|------|------|-------------|
|
|
211
|
-
| `get_network_status` | read | Mainnet chain ID, block, gas price |
|
|
212
|
-
| `get_block` | read | Block by number/hash/latest |
|
|
213
|
-
| `get_latest_blocks` | read | Recent blocks |
|
|
214
|
-
| `get_transaction` | read | Tx + receipt |
|
|
215
|
-
| `get_account` | read | CELO balance, nonce |
|
|
216
|
-
| `get_celo_balances` | read | CELO + ERC-20 balances (default: CELO + USDm) |
|
|
217
|
-
| `get_stablecoin_balances` | read | All registry stablecoins including GoodDollar |
|
|
218
|
-
| `get_token_info` | read | Token metadata |
|
|
219
|
-
| `estimate_send` | read* | Gas estimate (*needs `CELO_PRIVATE_KEY`) |
|
|
220
|
-
| `send_token` | write | Send CELO or ERC-20 |
|
|
221
|
-
| `get_mento_fx_quote` | read | Mento FX expected output (no wallet) |
|
|
222
|
-
| `estimate_mento_fx` | read* | Mento FX gas estimate (*needs `CELO_PRIVATE_KEY`) |
|
|
223
|
-
| `execute_mento_fx` | write | Execute Mento FX conversion |
|
|
224
|
-
| `supply_aave_usdt` | write | Supply USDT to Aave V3 on Celo |
|
|
225
|
-
| `withdraw_aave_usdt` | write | Withdraw USDT from Aave V3 on Celo |
|
|
226
|
-
| `get_gooddollar_whitelisting_info` | read | GoodDollar IdentityV4 whitelist status |
|
|
227
|
-
| `verify_self_agent` | read | Verify Self Agent ID on-chain by address |
|
|
228
|
-
| `lookup_self_agent` | read | Look up Self agent by numeric ID (ai.self.xyz) |
|
|
229
|
-
| `verify_self_request` | read | Verify signed Self Agent HTTP request headers |
|
|
230
|
-
| `register_self_agent` | write | Start Self agent registration (QR/deep link) |
|
|
231
|
-
| `check_self_registration` | read* | Poll registration/refresh/deregister session (*may return private key) |
|
|
232
|
-
| `get_self_identity` | read* | Current Self agent identity (*needs agent key) |
|
|
233
|
-
| `refresh_self_proof` | write | Renew human proof after on-chain expiry (`isProofFresh` false) |
|
|
234
|
-
| `deregister_self_agent` | write | Irreversibly revoke Self agent identity |
|
|
235
|
-
| `sign_self_request` | read* | Sign HTTP request with Self agent headers (*needs agent key) |
|
|
236
|
-
| `authenticated_self_fetch` | write | HTTP fetch with Self agent auth (*needs agent key) |
|
|
237
|
-
|
|
238
|
-
### Self Agent ID notes
|
|
239
|
-
|
|
240
|
-
- **Registration lifecycle APIs** (`register_self_agent`, `refresh_self_proof`, `deregister_self_agent`) use `network: "mainnet"` in the Self REST API request body.
|
|
241
|
-
- **Demo and gated HTTP endpoints** (e.g. `https://app.ai.self.xyz/api/demo/verify`) require the query param **`network=celo-mainnet`**, not `network=mainnet`.
|
|
242
|
-
- **QR scan URLs** use `/scan/{sessionToken}`, not `/qr/...`.
|
|
243
|
-
- **`refresh_self_proof`** only starts after on-chain proof expiry (`isProofFresh` is false); while fresh it returns a clear error instead of a QR that will fail on-chain. The 30-day `is_expiring_soon` flag (matching Self SDK `isProofExpiringSoon`) is for warnings only. Self SDK also documents deregister → re-register as an alternative renewal path.
|
|
244
|
-
|
|
245
|
-
Example authenticated demo call:
|
|
246
|
-
|
|
247
|
-
```text
|
|
248
|
-
authenticated_self_fetch
|
|
249
|
-
method: POST
|
|
250
|
-
url: https://app.ai.self.xyz/api/demo/verify?network=celo-mainnet
|
|
251
|
-
body: {}
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
## Adding a new tool
|
|
255
|
-
|
|
256
|
-
1. Create `src/tools/my-feature.tools.ts` implementing `ToolModule`:
|
|
257
|
-
|
|
258
|
-
```typescript
|
|
259
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
260
|
-
import type { AppContext } from "../context/app-context.js";
|
|
261
|
-
import type { ToolModule } from "./types.js";
|
|
262
|
-
|
|
263
|
-
export const myFeatureTools: ToolModule = {
|
|
264
|
-
register(server, ctx) {
|
|
265
|
-
server.registerTool("my_tool", { /* ... */ }, async (args) => { /* ... */ });
|
|
266
|
-
},
|
|
267
|
-
};
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
2. Append to `toolModules` in `src/tools/index.ts`.
|
|
271
|
-
3. Add domain logic in `src/services/` if needed.
|
|
272
|
-
4. Rebuild: `npm run build`.
|
|
273
|
-
|
|
274
|
-
No changes to `src/index.ts` or server bootstrap required.
|
|
275
|
-
|
|
276
|
-
## Roadmap
|
|
277
|
-
|
|
278
|
-
- [x] Mento FX routing (`get_mento_fx_quote`, `estimate_mento_fx`, `execute_mento_fx`)
|
|
279
|
-
- [x] Aave lending tools (`supply_aave_usdt`, `withdraw_aave_usdt`)
|
|
280
|
-
- [x] Self proof verification (`verify_self_agent`, `verify_self_request`, `ai.self.xyz`)
|
|
281
|
-
- [x] Self Agent ID check (`lookup_self_agent`, registration & lifecycle tools)
|
|
282
|
-
|
|
283
|
-
## Development
|
|
284
|
-
|
|
285
|
-
```bash
|
|
286
|
-
npm run dev # watch TypeScript
|
|
287
|
-
npm run inspect # MCP Inspector UI (stdio)
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
## License
|
|
291
|
-
|
|
292
|
-
MIT
|
package/assets/logo-black.png
DELETED
|
Binary file
|
package/assets/logo-yellow.png
DELETED
|
Binary file
|
package/assets/logo.png
DELETED
|
Binary file
|
package/bin/cli.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export declare const aavePoolAbi: readonly [{
|
|
2
|
-
readonly type: "function";
|
|
3
|
-
readonly name: "supply";
|
|
4
|
-
readonly inputs: readonly [{
|
|
5
|
-
readonly name: "asset";
|
|
6
|
-
readonly type: "address";
|
|
7
|
-
}, {
|
|
8
|
-
readonly name: "amount";
|
|
9
|
-
readonly type: "uint256";
|
|
10
|
-
}, {
|
|
11
|
-
readonly name: "onBehalfOf";
|
|
12
|
-
readonly type: "address";
|
|
13
|
-
}, {
|
|
14
|
-
readonly name: "referralCode";
|
|
15
|
-
readonly type: "uint16";
|
|
16
|
-
}];
|
|
17
|
-
readonly outputs: readonly [];
|
|
18
|
-
readonly stateMutability: "nonpayable";
|
|
19
|
-
}, {
|
|
20
|
-
readonly type: "function";
|
|
21
|
-
readonly name: "withdraw";
|
|
22
|
-
readonly inputs: readonly [{
|
|
23
|
-
readonly name: "asset";
|
|
24
|
-
readonly type: "address";
|
|
25
|
-
}, {
|
|
26
|
-
readonly name: "amount";
|
|
27
|
-
readonly type: "uint256";
|
|
28
|
-
}, {
|
|
29
|
-
readonly name: "to";
|
|
30
|
-
readonly type: "address";
|
|
31
|
-
}];
|
|
32
|
-
readonly outputs: readonly [{
|
|
33
|
-
readonly name: "";
|
|
34
|
-
readonly type: "uint256";
|
|
35
|
-
}];
|
|
36
|
-
readonly stateMutability: "nonpayable";
|
|
37
|
-
}];
|
package/build/abis/aave-pool.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export const aavePoolAbi = [
|
|
2
|
-
{
|
|
3
|
-
type: "function",
|
|
4
|
-
name: "supply",
|
|
5
|
-
inputs: [
|
|
6
|
-
{ name: "asset", type: "address" },
|
|
7
|
-
{ name: "amount", type: "uint256" },
|
|
8
|
-
{ name: "onBehalfOf", type: "address" },
|
|
9
|
-
{ name: "referralCode", type: "uint16" },
|
|
10
|
-
],
|
|
11
|
-
outputs: [],
|
|
12
|
-
stateMutability: "nonpayable",
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
type: "function",
|
|
16
|
-
name: "withdraw",
|
|
17
|
-
inputs: [
|
|
18
|
-
{ name: "asset", type: "address" },
|
|
19
|
-
{ name: "amount", type: "uint256" },
|
|
20
|
-
{ name: "to", type: "address" },
|
|
21
|
-
],
|
|
22
|
-
outputs: [{ name: "", type: "uint256" }],
|
|
23
|
-
stateMutability: "nonpayable",
|
|
24
|
-
},
|
|
25
|
-
];
|
|
26
|
-
//# sourceMappingURL=aave-pool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aave-pool.js","sourceRoot":"","sources":["../../src/abis/aave-pool.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzC;QACD,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;SAChC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,eAAe,EAAE,YAAY;KAC9B;CACO,CAAC"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
export declare const goodDollarIdentityAbi: readonly [{
|
|
2
|
-
readonly name: "identities";
|
|
3
|
-
readonly type: "function";
|
|
4
|
-
readonly stateMutability: "view";
|
|
5
|
-
readonly inputs: readonly [{
|
|
6
|
-
readonly name: "account";
|
|
7
|
-
readonly type: "address";
|
|
8
|
-
}];
|
|
9
|
-
readonly outputs: readonly [{
|
|
10
|
-
readonly name: "dateAuthenticated";
|
|
11
|
-
readonly type: "uint256";
|
|
12
|
-
}, {
|
|
13
|
-
readonly name: "dateAdded";
|
|
14
|
-
readonly type: "uint256";
|
|
15
|
-
}, {
|
|
16
|
-
readonly name: "did";
|
|
17
|
-
readonly type: "string";
|
|
18
|
-
}, {
|
|
19
|
-
readonly name: "whitelistedOnChainId";
|
|
20
|
-
readonly type: "uint256";
|
|
21
|
-
}, {
|
|
22
|
-
readonly name: "status";
|
|
23
|
-
readonly type: "uint8";
|
|
24
|
-
}, {
|
|
25
|
-
readonly name: "authCount";
|
|
26
|
-
readonly type: "uint32";
|
|
27
|
-
}];
|
|
28
|
-
}, {
|
|
29
|
-
readonly name: "isWhitelisted";
|
|
30
|
-
readonly type: "function";
|
|
31
|
-
readonly stateMutability: "view";
|
|
32
|
-
readonly inputs: readonly [{
|
|
33
|
-
readonly name: "account";
|
|
34
|
-
readonly type: "address";
|
|
35
|
-
}];
|
|
36
|
-
readonly outputs: readonly [{
|
|
37
|
-
readonly name: "";
|
|
38
|
-
readonly type: "bool";
|
|
39
|
-
}];
|
|
40
|
-
}, {
|
|
41
|
-
readonly name: "authenticationPeriod";
|
|
42
|
-
readonly type: "function";
|
|
43
|
-
readonly stateMutability: "view";
|
|
44
|
-
readonly inputs: readonly [];
|
|
45
|
-
readonly outputs: readonly [{
|
|
46
|
-
readonly name: "";
|
|
47
|
-
readonly type: "uint256";
|
|
48
|
-
}];
|
|
49
|
-
}, {
|
|
50
|
-
readonly name: "reverifyDaysOptions";
|
|
51
|
-
readonly type: "function";
|
|
52
|
-
readonly stateMutability: "view";
|
|
53
|
-
readonly inputs: readonly [{
|
|
54
|
-
readonly name: "";
|
|
55
|
-
readonly type: "uint256";
|
|
56
|
-
}];
|
|
57
|
-
readonly outputs: readonly [{
|
|
58
|
-
readonly name: "";
|
|
59
|
-
readonly type: "uint8";
|
|
60
|
-
}];
|
|
61
|
-
}];
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export const goodDollarIdentityAbi = [
|
|
2
|
-
{
|
|
3
|
-
name: "identities",
|
|
4
|
-
type: "function",
|
|
5
|
-
stateMutability: "view",
|
|
6
|
-
inputs: [{ name: "account", type: "address" }],
|
|
7
|
-
outputs: [
|
|
8
|
-
{ name: "dateAuthenticated", type: "uint256" },
|
|
9
|
-
{ name: "dateAdded", type: "uint256" },
|
|
10
|
-
{ name: "did", type: "string" },
|
|
11
|
-
{ name: "whitelistedOnChainId", type: "uint256" },
|
|
12
|
-
{ name: "status", type: "uint8" },
|
|
13
|
-
{ name: "authCount", type: "uint32" },
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: "isWhitelisted",
|
|
18
|
-
type: "function",
|
|
19
|
-
stateMutability: "view",
|
|
20
|
-
inputs: [{ name: "account", type: "address" }],
|
|
21
|
-
outputs: [{ name: "", type: "bool" }],
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: "authenticationPeriod",
|
|
25
|
-
type: "function",
|
|
26
|
-
stateMutability: "view",
|
|
27
|
-
inputs: [],
|
|
28
|
-
outputs: [{ name: "", type: "uint256" }],
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
name: "reverifyDaysOptions",
|
|
32
|
-
type: "function",
|
|
33
|
-
stateMutability: "view",
|
|
34
|
-
inputs: [{ name: "", type: "uint256" }],
|
|
35
|
-
outputs: [{ name: "", type: "uint8" }],
|
|
36
|
-
},
|
|
37
|
-
];
|
|
38
|
-
//# sourceMappingURL=gooddollar-identity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gooddollar-identity.js","sourceRoot":"","sources":["../../src/abis/gooddollar-identity.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE;YACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;YACjC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;SACtC;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACtC;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KACzC;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACvC;CACqB,CAAC"}
|