@noelclaw/mcp 2.3.1 → 3.0.0
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/README.md +216 -116
- package/dist/index.js +10 -9
- package/dist/server.js +39 -29
- package/dist/tools/automation.js +38 -0
- package/dist/tools/coder.js +62 -105
- package/dist/tools/defi.js +113 -24
- package/dist/tools/framework.js +0 -108
- package/dist/tools/humanizer.js +143 -2
- package/dist/tools/insight.js +197 -19
- package/dist/tools/market.js +182 -7
- package/dist/tools/memory.js +159 -43
- package/dist/tools/miroshark.js +15 -4
- package/dist/tools/os.js +223 -0
- package/dist/tools/scanner.js +183 -52
- package/dist/tools/swarm.js +37 -79
- package/dist/tools/vault.js +39 -200
- package/package.json +5 -2
- package/dist/tools/news.js +0 -6
- package/dist/tools/research.js +0 -8
- package/dist/tools/twitter.js +0 -67
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@noelclaw/mcp)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
74 MCP tools for your AI — persistent memory, DeFi execution on Base, multi-agent research, automations, and on-chain actions.
|
|
6
6
|
|
|
7
7
|
No API key required to start. Ask your AI in plain English.
|
|
8
8
|
|
|
@@ -14,11 +14,46 @@ npx -y @noelclaw/mcp
|
|
|
14
14
|
|
|
15
15
|
## Install
|
|
16
16
|
|
|
17
|
-
###
|
|
17
|
+
### Terminal
|
|
18
|
+
```bash
|
|
19
|
+
npx -y @noelclaw/mcp
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Claude Code
|
|
18
23
|
```bash
|
|
19
24
|
claude mcp add noelclaw -- npx -y @noelclaw/mcp
|
|
20
25
|
```
|
|
21
26
|
|
|
27
|
+
### Aeon
|
|
28
|
+
|
|
29
|
+
Open **Settings → MCP Servers** and add:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"mcpServers": {
|
|
34
|
+
"noelclaw": {
|
|
35
|
+
"command": "npx",
|
|
36
|
+
"args": ["-y", "@noelclaw/mcp"]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Hermes
|
|
43
|
+
|
|
44
|
+
Open **Settings → MCP Servers** and add:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"mcpServers": {
|
|
49
|
+
"noelclaw": {
|
|
50
|
+
"command": "npx",
|
|
51
|
+
"args": ["-y", "@noelclaw/mcp"]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
22
57
|
### Claude Desktop
|
|
23
58
|
|
|
24
59
|
Add to `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac):
|
|
@@ -34,7 +69,7 @@ Add to `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/App
|
|
|
34
69
|
}
|
|
35
70
|
```
|
|
36
71
|
|
|
37
|
-
###
|
|
72
|
+
### Any Other MCP Client
|
|
38
73
|
|
|
39
74
|
```json
|
|
40
75
|
{
|
|
@@ -53,7 +88,7 @@ Restart your client. Tools load automatically.
|
|
|
53
88
|
|
|
54
89
|
## What It Does
|
|
55
90
|
|
|
56
|
-
Ask your AI anything
|
|
91
|
+
Ask your AI anything — it routes to the right tool automatically.
|
|
57
92
|
|
|
58
93
|
```
|
|
59
94
|
what's the ETH gas price and latest block on Base?
|
|
@@ -62,18 +97,19 @@ what's the ETH gas price and latest block on Base?
|
|
|
62
97
|
show me the best yield vaults on Base right now
|
|
63
98
|
→ Clearstar USDC Reactor: 7.57% APY ($2.6M TVL)
|
|
64
99
|
→ Moonwell Flagship USDC: 4.63% APY ($9.1M TVL)
|
|
65
|
-
→ ...10 vaults ranked by APY
|
|
66
100
|
|
|
67
|
-
|
|
68
|
-
→
|
|
69
|
-
|
|
101
|
+
remember my Aerodrome thesis for next time
|
|
102
|
+
→ ✓ saved to Vault · auto-loaded every session
|
|
103
|
+
|
|
104
|
+
set up weekly $100 ETH DCA every Monday
|
|
105
|
+
→ ✓ automation created · runs weekly 09:00 UTC
|
|
106
|
+
|
|
107
|
+
swap 0.5 ETH to USDC on Base
|
|
108
|
+
→ ✓ swapped → 1,842 USDC · tx confirmed in 2s
|
|
70
109
|
|
|
71
110
|
swarm research topic: "ETH vs SOL which wins 2025"
|
|
72
111
|
→ Triggers multi-agent research, saves findings to your vault
|
|
73
112
|
|
|
74
|
-
humanize this text: "Leveraging cutting-edge blockchain..."
|
|
75
|
-
→ Returns clean, natural prose — no AI tells
|
|
76
|
-
|
|
77
113
|
generate a Solidity ERC-20 with burn and pause features
|
|
78
114
|
→ Returns production-ready OpenZeppelin contract
|
|
79
115
|
```
|
|
@@ -82,139 +118,204 @@ generate a Solidity ERC-20 with burn and pause features
|
|
|
82
118
|
|
|
83
119
|
## Tools
|
|
84
120
|
|
|
85
|
-
|
|
121
|
+
Three pillars: **Remember** · **Act** · **Know**
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### 🧠 REMEMBER — Persistent Memory
|
|
126
|
+
|
|
127
|
+
Your AI loads your context before you type a single word.
|
|
128
|
+
|
|
129
|
+
#### Vault — Structured Notes (15 tools)
|
|
86
130
|
|
|
87
|
-
|
|
131
|
+
> Save research, decisions, and notes. Every entry is versioned and auto-tagged.
|
|
132
|
+
|
|
133
|
+
| Name | Description |
|
|
134
|
+
|------|-------------|
|
|
135
|
+
| **Vault Save** `vault_save` | Save a note or research entry |
|
|
136
|
+
| **Vault Read** `vault_read` | Read an entry by key |
|
|
137
|
+
| **Vault List** `vault_list` | List recent entries |
|
|
138
|
+
| **Vault Search** `vault_search` | Full-text search across your vault |
|
|
139
|
+
| **Vault History** `vault_history` | Version history for an entry |
|
|
140
|
+
| **Vault Diff** `vault_diff` | Compare two versions of an entry |
|
|
141
|
+
| **Vault Export** `vault_export` | Export vault as JSON or markdown |
|
|
142
|
+
| **Store Credential** `vault_store_credential` | Securely store an API key or secret |
|
|
143
|
+
| **Get Credential** `vault_get_credential` | Retrieve a stored credential |
|
|
144
|
+
| **Vault Publish** `vault_publish` | Publish an entry as a public note |
|
|
145
|
+
| **Vault Explore** `vault_explore` | Browse by tag or category |
|
|
146
|
+
| **Vault Pin** `vault_pin` | Pin an important entry to the top |
|
|
147
|
+
| **Vault Delete** `vault_delete` | Delete an entry |
|
|
148
|
+
| **Vault Link** `vault_link` | Link two entries together |
|
|
149
|
+
| **Vault Tag** `vault_tag` | Add or update tags on an entry |
|
|
150
|
+
|
|
151
|
+
#### Memory — Semantic Search (7 tools)
|
|
152
|
+
|
|
153
|
+
> Find anything by meaning, not keywords. "What did I say about ETH yield?" just works.
|
|
154
|
+
|
|
155
|
+
| Name | Description |
|
|
88
156
|
|------|-------------|
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
157
|
+
| **Memory Add** `memory_add` | Add text, notes, or auto-fetch a URL into semantic memory |
|
|
158
|
+
| **Memory Search** `memory_search` | Search by meaning — natural language queries |
|
|
159
|
+
| **Memory Context** `memory_context` | Load entries relevant to the current session |
|
|
160
|
+
| **Memory Profile** `memory_profile` | Your full memory profile — preferences, history, patterns |
|
|
161
|
+
| **Memory List** `memory_list` | List recent memory entries |
|
|
162
|
+
| **Memory Delete** `memory_delete` | Remove a memory entry |
|
|
163
|
+
| **Memory Insight** `memory_insight` | AI-generated insights from your memory patterns |
|
|
93
164
|
|
|
94
|
-
|
|
165
|
+
#### OS — Session Lifecycle (3 tools)
|
|
95
166
|
|
|
96
|
-
|
|
|
167
|
+
| Name | Description |
|
|
97
168
|
|------|-------------|
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
100
|
-
| `
|
|
101
|
-
|
|
102
|
-
|
|
169
|
+
| **Boot** `noel_boot` | Start a session — loads market data, memory, and automations in one command |
|
|
170
|
+
| **Status** `noel_status` | Full system dashboard — memory, swarm health, active automations |
|
|
171
|
+
| **Shutdown** `noel_shutdown` | End a session — saves summary to vault, stops swarm cleanly |
|
|
172
|
+
|
|
173
|
+
---
|
|
103
174
|
|
|
104
|
-
###
|
|
175
|
+
### ⚡ ACT — Execute & Automate
|
|
105
176
|
|
|
106
|
-
|
|
177
|
+
Tell it what to do. It runs — on schedule, on-chain, or right now.
|
|
107
178
|
|
|
108
|
-
|
|
179
|
+
#### Automations (6 tools)
|
|
180
|
+
|
|
181
|
+
| Name | Description |
|
|
109
182
|
|------|-------------|
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
112
|
-
| `
|
|
113
|
-
| `
|
|
114
|
-
| `
|
|
183
|
+
| **Create Automation** `create_automation` | Create a price alert, DCA schedule, or recurring task in plain English |
|
|
184
|
+
| **List Automations** `list_automations` | View all active automations |
|
|
185
|
+
| **Pause Automation** `pause_automation` | Pause or resume an automation |
|
|
186
|
+
| **Delete Automation** `delete_automation` | Delete an automation |
|
|
187
|
+
| **Automation Runs** `get_automation_runs` | Execution history |
|
|
188
|
+
| **Run Now** `run_automation` | Trigger an automation manually |
|
|
189
|
+
|
|
190
|
+
#### DeFi Execution (7 tools)
|
|
191
|
+
|
|
192
|
+
> Transactions are signed client-side — your private key never leaves your machine.
|
|
115
193
|
|
|
116
|
-
|
|
194
|
+
| Name | Description |
|
|
195
|
+
|------|-------------|
|
|
196
|
+
| **Portfolio** `get_portfolio` | View wallet holdings and token balances |
|
|
197
|
+
| **Estimate Swap** `estimate_swap` | Get a swap quote via 0x before executing |
|
|
198
|
+
| **Swap Tokens** `swap_tokens` | Execute a token swap on Base |
|
|
199
|
+
| **Send Token** `send_token` | Send ETH or ERC-20 to any address |
|
|
200
|
+
| **Scan Wallet** `scan_wallet` | Analyze a wallet — holdings, activity, risk signals |
|
|
201
|
+
| **Analyze Wallet** `analyze_wallet` | Deep wallet analysis with on-chain patterns |
|
|
202
|
+
| **DeFi Yields** `get_defi_yields` | Find the best yield opportunities on Base |
|
|
117
203
|
|
|
118
|
-
|
|
204
|
+
#### Base Chain (4 tools)
|
|
119
205
|
|
|
120
|
-
|
|
|
206
|
+
| Name | Description |
|
|
121
207
|
|------|-------------|
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
|
130
|
-
| `vault_export` | Export vault entries as JSON or markdown |
|
|
131
|
-
| `vault_publish` | Publish a vault entry as a public note |
|
|
132
|
-
| `vault_explore` | Browse vault by tag or category |
|
|
133
|
-
| `store_credential` | Securely store an API key or secret |
|
|
134
|
-
| `get_credential` | Retrieve a stored credential |
|
|
135
|
-
|
|
136
|
-
### Swarm — Multi-Agent System (8 tools)
|
|
137
|
-
|
|
138
|
-
> Multi-agent coordination with shared memory. Agents research, monitor, and analyze in parallel.
|
|
139
|
-
|
|
140
|
-
| Tool | Description |
|
|
208
|
+
| **Chain Stats** `base_chain_stats` | Live ETH price, gas price, latest block |
|
|
209
|
+
| **Query Vaults** `base_query_vaults` | Top Morpho yield vaults ranked by APY |
|
|
210
|
+
| **List Markets** `base_list_markets` | Moonwell lending and borrowing rates |
|
|
211
|
+
| **Prepare Deposit** `base_prepare_deposit` | Prepare a deposit into a Morpho vault |
|
|
212
|
+
|
|
213
|
+
#### Wallet & Notifications (2 tools)
|
|
214
|
+
|
|
215
|
+
| Name | Description |
|
|
141
216
|
|------|-------------|
|
|
142
|
-
| `
|
|
143
|
-
| `
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
|
150
|
-
|
|
151
|
-
### Automation (5 tools)
|
|
152
|
-
|
|
153
|
-
| Tool | Description |
|
|
217
|
+
| **Wallet Address** `get_wallet_address` | Get or generate your MCP wallet address |
|
|
218
|
+
| **Set Telegram** `set_telegram` | Connect Telegram for automation notifications |
|
|
219
|
+
|
|
220
|
+
#### Playbooks (6 tools)
|
|
221
|
+
|
|
222
|
+
> Reusable sequences with safety rules applied before any action runs.
|
|
223
|
+
|
|
224
|
+
| Name | Description |
|
|
154
225
|
|------|-------------|
|
|
155
|
-
| `
|
|
156
|
-
| `
|
|
157
|
-
| `
|
|
158
|
-
| `
|
|
159
|
-
| `
|
|
226
|
+
| **Create Task** `create_task_packet` | Convert intent into a structured task with constraints |
|
|
227
|
+
| **List Tasks** `list_task_packets` | List all task packets |
|
|
228
|
+
| **List Playbooks** `list_playbooks` | Browse available playbooks |
|
|
229
|
+
| **Run Playbook** `run_playbook` | Execute a playbook by ID |
|
|
230
|
+
| **Noel Ledger** `get_noel_ledger` | Credits and full audit trail |
|
|
231
|
+
| **Sentinel Rules** `get_sentinel_rules` | View safety rules applied before actions |
|
|
232
|
+
|
|
233
|
+
---
|
|
160
234
|
|
|
161
|
-
###
|
|
235
|
+
### 🔍 KNOW — Research & Intelligence
|
|
162
236
|
|
|
163
|
-
|
|
237
|
+
Always informed before you act.
|
|
164
238
|
|
|
165
|
-
|
|
239
|
+
#### Market & Prices (5 tools)
|
|
240
|
+
|
|
241
|
+
| Name | Description |
|
|
242
|
+
|------|-------------|
|
|
243
|
+
| **Market Data** `get_market_data` | Live prices for BTC, ETH, SOL, and other tokens |
|
|
244
|
+
| **Token Data** `get_token_data` | Token info — price, volume, market cap |
|
|
245
|
+
| **Compare Tokens** `compare_tokens` | Side-by-side comparison of two tokens |
|
|
246
|
+
| **Market Overview** `market_overview` | Top movers, sentiment, dominance snapshot |
|
|
247
|
+
| **Token History** `token_history` | Historical price data for any token |
|
|
248
|
+
|
|
249
|
+
#### Scanner (4 tools)
|
|
250
|
+
|
|
251
|
+
| Name | Description |
|
|
166
252
|
|------|-------------|
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
171
|
-
| `get_noel_ledger` | Credits ledger and full audit trail |
|
|
172
|
-
| `run_sentinel` | Run a Sentinel gate check before an action |
|
|
253
|
+
| **Score Token** `score_token` | Risk and quality score for any token |
|
|
254
|
+
| **Check Token** `check_token` | Contract audit flags and honeypot detection |
|
|
255
|
+
| **Scan Dips** `scan_dips` | Tokens dipping with recovery signals |
|
|
256
|
+
| **Scan Momentum** `scan_momentum` | Tokens with strong upward momentum |
|
|
173
257
|
|
|
174
|
-
|
|
258
|
+
#### Research & Insight (3 tools)
|
|
175
259
|
|
|
176
|
-
|
|
|
260
|
+
| Name | Description |
|
|
177
261
|
|------|-------------|
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
180
|
-
| `
|
|
262
|
+
| **Ask Noel** `ask_noel` | AI crypto analyst — opinions, trade ideas, market outlook |
|
|
263
|
+
| **Market Thesis** `market_thesis` | Investment thesis for any token or sector |
|
|
264
|
+
| **Trade Plan** `trade_plan` | Structured trade plan with entry, exit, and risk levels |
|
|
181
265
|
|
|
182
|
-
|
|
266
|
+
#### Agent Network (15 tools)
|
|
183
267
|
|
|
184
|
-
>
|
|
268
|
+
> Spin up multiple AI agents that research and monitor in parallel.
|
|
185
269
|
|
|
186
|
-
|
|
|
270
|
+
| Name | Description |
|
|
187
271
|
|------|-------------|
|
|
188
|
-
| `
|
|
189
|
-
| `
|
|
190
|
-
| `
|
|
272
|
+
| **Start Swarm** `start_swarm` | Start the agent network |
|
|
273
|
+
| **Stop Swarm** `stop_swarm` | Stop the active swarm |
|
|
274
|
+
| **Swarm Status** `get_swarm_status` | Status and shared memory snapshot |
|
|
275
|
+
| **Trigger Agent** `trigger_agent` | Run a specific agent now |
|
|
276
|
+
| **Write Memory** `write_swarm_memory` | Write to shared agent memory |
|
|
277
|
+
| **Read Memory** `get_swarm_memory` | Read from shared agent memory |
|
|
278
|
+
| **Execution Scores** `get_execution_scores` | Performance scores across all agents |
|
|
279
|
+
| **Swarm Research** `swarm_research` | Multi-agent research on any topic — saves to vault |
|
|
280
|
+
| **Swarm Brief** `swarm_brief` | Summary of everything the swarm has found |
|
|
281
|
+
| **Broadcast** `swarm_broadcast` | Send a message to all active agents |
|
|
282
|
+
| **Swarm Pulse** `swarm_pulse` | Heartbeat — active agents and last activity |
|
|
283
|
+
| **Swarm Reflect** `swarm_reflect` | Agents self-evaluate what went well |
|
|
284
|
+
| **Swarm Watch** `swarm_watch` | Watch a token or topic for changes |
|
|
285
|
+
| **List Agents** `list_agents` | Browse available specialist agents |
|
|
286
|
+
| **Hire Agent** `hire_agent` | Hire an agent for a specific task |
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### 🛠 BUILD — Developer & Content Tools
|
|
191
291
|
|
|
192
|
-
|
|
292
|
+
#### Coder (7 tools)
|
|
193
293
|
|
|
194
|
-
|
|
|
294
|
+
| Name | Description |
|
|
195
295
|
|------|-------------|
|
|
196
|
-
| `scaffold_project` | Scaffold a DeFi or Web3 project |
|
|
197
|
-
| `generate_component` |
|
|
198
|
-
| `generate_contract` |
|
|
199
|
-
| `audit_contract` |
|
|
200
|
-
| `explain_code` | Explain any code in plain English |
|
|
201
|
-
| `
|
|
296
|
+
| **Scaffold Project** `scaffold_project` | Scaffold a DeFi or Web3 project |
|
|
297
|
+
| **Generate Component** `generate_component` | React component with wagmi/viem |
|
|
298
|
+
| **Generate Contract** `generate_contract` | Solidity smart contract |
|
|
299
|
+
| **Audit Contract** `audit_contract` | Contract vulnerability audit |
|
|
300
|
+
| **Explain Code** `explain_code` | Explain any code in plain English |
|
|
301
|
+
| **Generate MCP Skill** `generate_mcp_skill` | Generate a new MCP tool from plain English |
|
|
302
|
+
| **Review Code** `review_code` | Code review with actionable feedback |
|
|
202
303
|
|
|
203
|
-
|
|
304
|
+
#### Content & Humanizer (3 tools)
|
|
204
305
|
|
|
205
|
-
|
|
|
306
|
+
| Name | Description |
|
|
206
307
|
|------|-------------|
|
|
207
|
-
| `
|
|
208
|
-
| `
|
|
308
|
+
| **Humanize Text** `humanize_text` | Strip AI patterns — makes output sound human |
|
|
309
|
+
| **Write Thread** `write_thread` | Write a Twitter/X thread on any topic |
|
|
310
|
+
| **Write Post** `write_post` | Write a punchy social post |
|
|
209
311
|
|
|
210
|
-
|
|
312
|
+
#### MiroShark — Market Simulation (3 tools)
|
|
211
313
|
|
|
212
|
-
|
|
|
314
|
+
| Name | Description |
|
|
213
315
|
|------|-------------|
|
|
214
|
-
| `
|
|
215
|
-
| `
|
|
216
|
-
| `
|
|
217
|
-
| `post_tweet` | Post a tweet via connected Twitter account |
|
|
316
|
+
| **Simulate** `miroshark_simulate` | Run a multi-agent market simulation from plain English |
|
|
317
|
+
| **Simulation Status** `miroshark_status` | Poll progress and get the AI brief on completion |
|
|
318
|
+
| **Stop Simulation** `miroshark_stop` | Stop a running simulation |
|
|
218
319
|
|
|
219
320
|
---
|
|
220
321
|
|
|
@@ -232,8 +333,7 @@ For additional capabilities, add to the `env` block in your MCP config:
|
|
|
232
333
|
"args": ["-y", "@noelclaw/mcp"],
|
|
233
334
|
"env": {
|
|
234
335
|
"NOELCLAW_API_KEY": "noel_sk_...",
|
|
235
|
-
"ANTHROPIC_API_KEY": "sk-ant-..."
|
|
236
|
-
"BANKR_API_KEY": "bk_usr_..."
|
|
336
|
+
"ANTHROPIC_API_KEY": "sk-ant-..."
|
|
237
337
|
}
|
|
238
338
|
}
|
|
239
339
|
}
|
|
@@ -242,10 +342,9 @@ For additional capabilities, add to the `env` block in your MCP config:
|
|
|
242
342
|
|
|
243
343
|
| Variable | Purpose |
|
|
244
344
|
|----------|---------|
|
|
245
|
-
| `NOELCLAW_API_KEY` | Unlocks swarm, automation, framework, and agent tools. Get one at [noelclaw.com](https://noelclaw.com) |
|
|
345
|
+
| `NOELCLAW_API_KEY` | Unlocks swarm, automation, framework, and agent tools. Get one at [app.noelclaw.com](https://app.noelclaw.com) |
|
|
246
346
|
| `ANTHROPIC_API_KEY` | AI tools use your Claude quota — you pay, not the server |
|
|
247
|
-
| `
|
|
248
|
-
| `NOELCLAW_SESSION_TOKEN` | Session token from noelclaw.com (alternative to API key) |
|
|
347
|
+
| `NOELCLAW_SESSION_TOKEN` | Session token from app.noelclaw.com (alternative to API key) |
|
|
249
348
|
| `NOELCLAW_CONVEX_URL` | Override the backend URL (for self-hosted deployments) |
|
|
250
349
|
|
|
251
350
|
---
|
|
@@ -255,7 +354,7 @@ For additional capabilities, add to the `env` block in your MCP config:
|
|
|
255
354
|
| Problem | Fix |
|
|
256
355
|
|---------|-----|
|
|
257
356
|
| Tools not appearing | Restart your MCP client after adding the config |
|
|
258
|
-
| Swarm returns auth error | Add `NOELCLAW_API_KEY` — get one at noelclaw.com |
|
|
357
|
+
| Swarm returns auth error | Add `NOELCLAW_API_KEY` — get one at app.noelclaw.com |
|
|
259
358
|
| Server starts but no output | Expected — server waits for MCP stdin, not HTTP |
|
|
260
359
|
| Old version loading | Run `npx clear-npx-cache` then restart your client |
|
|
261
360
|
|
|
@@ -265,4 +364,5 @@ For additional capabilities, add to the `env` block in your MCP config:
|
|
|
265
364
|
|
|
266
365
|
- npm: [npmjs.com/package/@noelclaw/mcp](https://www.npmjs.com/package/@noelclaw/mcp)
|
|
267
366
|
- GitHub: [github.com/noelclaw/mcp](https://github.com/noelclaw/mcp)
|
|
268
|
-
-
|
|
367
|
+
- App: [app.noelclaw.com](https://app.noelclaw.com)
|
|
368
|
+
- Docs: [docs.noelclaw.fun](https://docs.noelclaw.fun)
|
package/dist/index.js
CHANGED
|
@@ -33,25 +33,26 @@ async function main() {
|
|
|
33
33
|
process.stderr.write(BANNER);
|
|
34
34
|
// ── Tool category counts ──────────────────────────────────────────────────
|
|
35
35
|
const categories = [
|
|
36
|
-
{ label: "Market", count:
|
|
37
|
-
{ label: "
|
|
36
|
+
{ label: "Market", count: 5, tools: "get_market_data · get_token_data · compare_tokens · market_overview · token_history" },
|
|
37
|
+
{ label: "Insight", count: 3, tools: "ask_noel · market_thesis · trade_plan" },
|
|
38
|
+
{ label: "DeFi", count: 6, tools: "portfolio · swap · send · scan_wallet · estimate · get_defi_yields" },
|
|
38
39
|
{ label: "Automation", count: 5, tools: "create · list · pause · delete · runs" },
|
|
39
|
-
{ label: "Scanner", count:
|
|
40
|
+
{ label: "Scanner", count: 4, tools: "scan_dips · scan_momentum · score_token · check_token" },
|
|
40
41
|
{ label: "Agents", count: 2, tools: "list_agents · hire_agent" },
|
|
41
|
-
{ label: "Swarm", count:
|
|
42
|
+
{ label: "Swarm", count: 11, tools: "start · stop · status · memory · scores · research · trigger · brief · broadcast · pulse" },
|
|
42
43
|
{ label: "Framework", count: 6, tools: "create_task · list_tasks · list_playbooks · run_playbook · ledger · sentinel" },
|
|
43
|
-
{ label: "Vault", count:
|
|
44
|
-
{ label: "Memory", count:
|
|
44
|
+
{ label: "Vault", count: 18, tools: "save · read · list · search · history · diff · export · remember · context · credential · publish · explore · connect · pin · delete · link · tag" },
|
|
45
|
+
{ label: "Memory", count: 8, tools: "add · search · context · profile · connect · list · delete · update" },
|
|
45
46
|
{ label: "MiroShark", count: 3, tools: "simulate · status · stop" },
|
|
46
47
|
{ label: "Wallet", count: 2, tools: "get_wallet_address · set_telegram" },
|
|
47
|
-
{ label: "Social", count:
|
|
48
|
-
{ label: "Coder", count:
|
|
48
|
+
{ label: "Social", count: 3, tools: "humanize_text · write_thread · write_post" },
|
|
49
|
+
{ label: "Coder", count: 7, tools: "scaffold_project · generate_component · generate_contract · audit_contract · explain_code · review_code · generate_mcp_skill" },
|
|
49
50
|
{ label: "Base", count: 4, tools: "query_vaults · list_markets · prepare_deposit · chain_stats" },
|
|
50
51
|
];
|
|
51
52
|
const total = server_js_1.ALL_TOOLS.length;
|
|
52
53
|
divider();
|
|
53
54
|
process.stderr.write(`\n`);
|
|
54
|
-
line("version", `v2.
|
|
55
|
+
line("version", `v2.4.0 ${C.dim}MCP protocol 2.1.0${C.reset}`);
|
|
55
56
|
line("network", `Base mainnet ${C.dim}via 0x Protocol · ethers v6${C.reset}`);
|
|
56
57
|
line("ai", `Bankr LLM ${C.dim}grok-3 · llm.bankr.bot${C.reset}`);
|
|
57
58
|
line("tools", `${C.white}${C.bold}${total} tools loaded${C.reset} ${C.dim}across ${categories.length} categories${C.reset}`);
|
package/dist/server.js
CHANGED
|
@@ -21,6 +21,7 @@ const scanner_js_1 = require("./tools/scanner.js");
|
|
|
21
21
|
const coder_js_1 = require("./tools/coder.js");
|
|
22
22
|
const base_js_1 = require("./tools/base.js");
|
|
23
23
|
const memory_js_1 = require("./tools/memory.js");
|
|
24
|
+
const os_js_1 = require("./tools/os.js");
|
|
24
25
|
const PRIVATE_KEY_RESPONSE = {
|
|
25
26
|
content: [{
|
|
26
27
|
type: "text",
|
|
@@ -35,45 +36,54 @@ function containsSensitiveRequest(args) {
|
|
|
35
36
|
text.includes("privatekey"));
|
|
36
37
|
}
|
|
37
38
|
exports.ALL_TOOLS = [
|
|
38
|
-
...market_js_1.MARKET_TOOLS, //
|
|
39
|
-
...insight_js_1.INSIGHT_TOOLS, //
|
|
40
|
-
...defi_js_1.DEFI_TOOLS, //
|
|
41
|
-
...automation_js_1.AUTOMATION_TOOLS, //
|
|
42
|
-
...swarm_js_1.SWARM_TOOLS, //
|
|
43
|
-
...framework_js_1.FRAMEWORK_TOOLS, //
|
|
44
|
-
...vault_js_1.VAULT_TOOLS, //
|
|
39
|
+
...market_js_1.MARKET_TOOLS, // 5 — get_market_data, get_token_data, compare_tokens, market_overview, token_history
|
|
40
|
+
...insight_js_1.INSIGHT_TOOLS, // 3 — ask_noel, market_thesis, trade_plan
|
|
41
|
+
...defi_js_1.DEFI_TOOLS, // 6 — get_portfolio, estimate_swap, swap_tokens, send_token, analyze_wallet, get_defi_yields
|
|
42
|
+
...automation_js_1.AUTOMATION_TOOLS, // 6 — create, list, pause, delete, get_runs, run
|
|
43
|
+
...swarm_js_1.SWARM_TOOLS, // 6 — start, stop, status, research, trigger_agent, brief
|
|
44
|
+
...framework_js_1.FRAMEWORK_TOOLS, // 3 — list_playbooks, run_playbook, get_noel_ledger
|
|
45
|
+
...vault_js_1.VAULT_TOOLS, // 12 — save, read, list, search, history, diff, export, store_credential, get_credential, pin, delete, tag
|
|
45
46
|
...wallet_js_1.WALLET_TOOLS, // 2 — get_wallet_address, set_telegram
|
|
46
47
|
...miroshark_js_1.MIROSHARK_TOOLS, // 3 — simulate, status, stop
|
|
47
|
-
...humanizer_js_1.HUMANIZER_TOOLS, //
|
|
48
|
+
...humanizer_js_1.HUMANIZER_TOOLS, // 3 — humanize_text, write_thread, write_post
|
|
48
49
|
...agents_js_1.AGENT_TOOLS, // 2 — list_agents, hire_agent
|
|
49
|
-
...scanner_js_1.SCANNER_TOOLS, //
|
|
50
|
-
...coder_js_1.CODER_TOOLS, //
|
|
50
|
+
...scanner_js_1.SCANNER_TOOLS, // 4 — score_token, check_token, scan_dips, scan_momentum
|
|
51
|
+
...coder_js_1.CODER_TOOLS, // 5 — generate_contract, audit_contract, explain_code, review_code, generate_mcp_skill
|
|
51
52
|
...base_js_1.BASE_TOOLS, // 4 — query_vaults, list_markets, prepare_deposit, chain_stats
|
|
52
|
-
...memory_js_1.MEMORY_TOOLS, //
|
|
53
|
-
//
|
|
53
|
+
...memory_js_1.MEMORY_TOOLS, // 7 — memory_add, memory_search, memory_context, memory_profile, memory_list, memory_delete, memory_insight
|
|
54
|
+
...os_js_1.OS_TOOLS, // 3 — noel_status, noel_boot, noel_shutdown
|
|
55
|
+
// total: 74
|
|
54
56
|
];
|
|
55
|
-
|
|
57
|
+
const HANDLER_MAP = new Map([
|
|
58
|
+
...market_js_1.MARKET_TOOLS.map(t => [t.name, market_js_1.handleMarketTool]),
|
|
59
|
+
...defi_js_1.DEFI_TOOLS.map(t => [t.name, defi_js_1.handleDefiTool]),
|
|
60
|
+
...automation_js_1.AUTOMATION_TOOLS.map(t => [t.name, automation_js_1.handleAutomationTool]),
|
|
61
|
+
...swarm_js_1.SWARM_TOOLS.map(t => [t.name, swarm_js_1.handleSwarmTool]),
|
|
62
|
+
...framework_js_1.FRAMEWORK_TOOLS.map(t => [t.name, framework_js_1.handleFrameworkTool]),
|
|
63
|
+
...vault_js_1.VAULT_TOOLS.map(t => [t.name, vault_js_1.handleVaultTool]),
|
|
64
|
+
...wallet_js_1.WALLET_TOOLS.map(t => [t.name, wallet_js_1.handleWalletTool]),
|
|
65
|
+
...insight_js_1.INSIGHT_TOOLS.map(t => [t.name, insight_js_1.handleInsightTool]),
|
|
66
|
+
...miroshark_js_1.MIROSHARK_TOOLS.map(t => [t.name, miroshark_js_1.handleMirosharkTool]),
|
|
67
|
+
...humanizer_js_1.HUMANIZER_TOOLS.map(t => [t.name, humanizer_js_1.handleHumanizerTool]),
|
|
68
|
+
...agents_js_1.AGENT_TOOLS.map(t => [t.name, agents_js_1.handleAgentTool]),
|
|
69
|
+
...scanner_js_1.SCANNER_TOOLS.map(t => [t.name, scanner_js_1.handleScannerTool]),
|
|
70
|
+
...coder_js_1.CODER_TOOLS.map(t => [t.name, coder_js_1.handleCoderTool]),
|
|
71
|
+
...base_js_1.BASE_TOOLS.map(t => [t.name, base_js_1.handleBaseTool]),
|
|
72
|
+
...memory_js_1.MEMORY_TOOLS.map(t => [t.name, memory_js_1.handleMemoryTool]),
|
|
73
|
+
...os_js_1.OS_TOOLS.map(t => [t.name, os_js_1.handleOsTool]),
|
|
74
|
+
]);
|
|
75
|
+
exports.server = new index_js_1.Server({ name: "noelclaw", version: "2.4.0" }, { capabilities: { tools: {} } });
|
|
56
76
|
exports.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools: exports.ALL_TOOLS }));
|
|
57
77
|
exports.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
58
78
|
const { name, arguments: args } = request.params;
|
|
59
79
|
if (containsSensitiveRequest(args))
|
|
60
80
|
return PRIVATE_KEY_RESPONSE;
|
|
81
|
+
const handler = HANDLER_MAP.get(name);
|
|
82
|
+
if (!handler) {
|
|
83
|
+
return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true };
|
|
84
|
+
}
|
|
61
85
|
try {
|
|
62
|
-
const result = await (
|
|
63
|
-
await (0, defi_js_1.handleDefiTool)(name, args) ??
|
|
64
|
-
await (0, automation_js_1.handleAutomationTool)(name, args) ??
|
|
65
|
-
await (0, swarm_js_1.handleSwarmTool)(name, args) ??
|
|
66
|
-
await (0, framework_js_1.handleFrameworkTool)(name, args) ??
|
|
67
|
-
await (0, vault_js_1.handleVaultTool)(name, args) ??
|
|
68
|
-
await (0, wallet_js_1.handleWalletTool)(name, args) ??
|
|
69
|
-
await (0, insight_js_1.handleInsightTool)(name, args) ??
|
|
70
|
-
await (0, miroshark_js_1.handleMirosharkTool)(name, args) ??
|
|
71
|
-
await (0, humanizer_js_1.handleHumanizerTool)(name, args) ??
|
|
72
|
-
await (0, agents_js_1.handleAgentTool)(name, args) ??
|
|
73
|
-
await (0, scanner_js_1.handleScannerTool)(name, args) ??
|
|
74
|
-
await (0, coder_js_1.handleCoderTool)(name, args) ??
|
|
75
|
-
await (0, base_js_1.handleBaseTool)(name, args) ??
|
|
76
|
-
await (0, memory_js_1.handleMemoryTool)(name, args);
|
|
86
|
+
const result = await handler(name, args);
|
|
77
87
|
if (result)
|
|
78
88
|
return result;
|
|
79
89
|
return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true };
|
|
@@ -93,7 +103,7 @@ exports.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (reques
|
|
|
93
103
|
` (replace \`<txHash>\` with the actual transaction hash)`,
|
|
94
104
|
`4. Retry the tool call`, ``,
|
|
95
105
|
"**Or bypass with a session token:**",
|
|
96
|
-
"Set `NOELCLAW_SESSION_TOKEN` with your Noelclaw session token from noelclaw.
|
|
106
|
+
"Set `NOELCLAW_SESSION_TOKEN` with your Noelclaw session token from noelclaw.com",
|
|
97
107
|
] : []),
|
|
98
108
|
];
|
|
99
109
|
return { content: [{ type: "text", text: lines.join("\n") }], isError: true };
|
package/dist/tools/automation.js
CHANGED
|
@@ -49,6 +49,20 @@ exports.AUTOMATION_TOOLS = [
|
|
|
49
49
|
required: ["automationId"],
|
|
50
50
|
},
|
|
51
51
|
},
|
|
52
|
+
{
|
|
53
|
+
name: "run_automation",
|
|
54
|
+
description: "Trigger an automation immediately — regardless of its schedule or trigger condition. " +
|
|
55
|
+
"Use to test an automation after creating it, or to run a one-off DCA/swap/alert right now. " +
|
|
56
|
+
"The automation must be active (not paused or deleted). " +
|
|
57
|
+
"Get the ID from list_automations.",
|
|
58
|
+
inputSchema: {
|
|
59
|
+
type: "object",
|
|
60
|
+
properties: {
|
|
61
|
+
automationId: { type: "string", description: "Automation ID to run now (from list_automations)" },
|
|
62
|
+
},
|
|
63
|
+
required: ["automationId"],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
52
66
|
];
|
|
53
67
|
const CreateAutomationSchema = zod_1.z.object({ rawInput: zod_1.z.string().min(1) });
|
|
54
68
|
const AutomationIdSchema = zod_1.z.object({ automationId: zod_1.z.string().min(1) });
|
|
@@ -148,6 +162,30 @@ async function handleAutomationTool(name, args) {
|
|
|
148
162
|
}
|
|
149
163
|
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
150
164
|
}
|
|
165
|
+
case "run_automation": {
|
|
166
|
+
const parsed = AutomationIdSchema.safeParse(args);
|
|
167
|
+
if (!parsed.success)
|
|
168
|
+
return { content: [{ type: "text", text: `Invalid input: automationId ${parsed.error.issues[0].message}` }], isError: true };
|
|
169
|
+
const data = await (0, convex_js_1.callConvex)("/automations/run", "POST", { automationId: parsed.data.automationId }, "run_automation");
|
|
170
|
+
if (data.error)
|
|
171
|
+
return { content: [{ type: "text", text: `Error: ${data.error}` }], isError: true };
|
|
172
|
+
const statusIcon = { success: "✅", failed: "❌", skipped: "⏭️" };
|
|
173
|
+
const icon = statusIcon[data.status] ?? "⚡";
|
|
174
|
+
const spent = data.amountUsd != null ? ` · $${Number(data.amountUsd).toFixed(2)} spent` : "";
|
|
175
|
+
const txLine = data.txHash ? `\nTx: https://basescan.org/tx/${data.txHash}` : "";
|
|
176
|
+
return {
|
|
177
|
+
content: [{
|
|
178
|
+
type: "text",
|
|
179
|
+
text: [
|
|
180
|
+
`${icon} **Automation triggered: ${data.status ?? "executed"}**${spent}`,
|
|
181
|
+
data.message ?? "",
|
|
182
|
+
txLine,
|
|
183
|
+
``,
|
|
184
|
+
`Use \`get_automation_runs automationId: "${parsed.data.automationId}"\` to see full history.`,
|
|
185
|
+
].filter(Boolean).join("\n"),
|
|
186
|
+
}],
|
|
187
|
+
};
|
|
188
|
+
}
|
|
151
189
|
default:
|
|
152
190
|
return null;
|
|
153
191
|
}
|