@noelclaw/mcp 1.0.0 → 1.1.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 +7 -15
- package/dist/tools/miroshark.js +10 -43
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Noelclaw as an MCP skill — persistent memory, multi-agent coordination, scenario simulation, DeFi execution, and Sentinel-gated playbooks. Works with Claude, Cursor, Hermes, Windsurf, and any MCP-compatible client.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npx @noelclaw/mcp
|
|
8
|
+
npx @noelclaw/mcp
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
---
|
|
@@ -14,12 +14,12 @@ npx @noelclaw/mcp@latest
|
|
|
14
14
|
|
|
15
15
|
### Claude Code
|
|
16
16
|
```bash
|
|
17
|
-
claude mcp add noelclaw -- npx @noelclaw/mcp
|
|
17
|
+
claude mcp add noelclaw -- npx @noelclaw/mcp
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
Set your API key:
|
|
21
21
|
```bash
|
|
22
|
-
claude mcp add noelclaw -e NOELCLAW_API_KEY=noel_... -- npx @noelclaw/mcp
|
|
22
|
+
claude mcp add noelclaw -e NOELCLAW_API_KEY=noel_... -- npx @noelclaw/mcp
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
### Claude Desktop
|
|
@@ -30,7 +30,7 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac) or
|
|
|
30
30
|
"mcpServers": {
|
|
31
31
|
"noelclaw": {
|
|
32
32
|
"command": "npx",
|
|
33
|
-
"args": ["@noelclaw/mcp
|
|
33
|
+
"args": ["@noelclaw/mcp"],
|
|
34
34
|
"env": {
|
|
35
35
|
"NOELCLAW_API_KEY": "noel_..."
|
|
36
36
|
}
|
|
@@ -45,7 +45,7 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac) or
|
|
|
45
45
|
"mcpServers": {
|
|
46
46
|
"noelclaw": {
|
|
47
47
|
"command": "npx",
|
|
48
|
-
"args": ["@noelclaw/mcp
|
|
48
|
+
"args": ["@noelclaw/mcp"],
|
|
49
49
|
"env": {
|
|
50
50
|
"NOELCLAW_API_KEY": "noel_..."
|
|
51
51
|
}
|
|
@@ -60,7 +60,7 @@ mcp_servers:
|
|
|
60
60
|
noelclaw:
|
|
61
61
|
command: npx
|
|
62
62
|
args:
|
|
63
|
-
- "@noelclaw/mcp
|
|
63
|
+
- "@noelclaw/mcp"
|
|
64
64
|
env:
|
|
65
65
|
NOELCLAW_API_KEY: "noel_..."
|
|
66
66
|
```
|
|
@@ -175,13 +175,6 @@ Set `NOELCLAW_API_KEY` in your MCP config. That's it.
|
|
|
175
175
|
|-----|-------------|
|
|
176
176
|
| `NOELCLAW_API_KEY` | Your API key (`noel_...`) — get one at `POST https://api.noelclaw.com/auth/key` |
|
|
177
177
|
|
|
178
|
-
### MiroShark (optional)
|
|
179
|
-
|
|
180
|
-
| Var | Description |
|
|
181
|
-
|-----|-------------|
|
|
182
|
-
| `MIROSHARK_URL` | URL of your deployed MiroShark instance |
|
|
183
|
-
| `MIROSHARK_ADMIN_TOKEN` | Admin token set on your MiroShark deployment |
|
|
184
|
-
|
|
185
178
|
### BYOK (optional)
|
|
186
179
|
|
|
187
180
|
| Var | Used for |
|
|
@@ -234,7 +227,6 @@ get_noel_ledger
|
|
|
234
227
|
|-------|-----|
|
|
235
228
|
| Tools not appearing | Restart your MCP client after adding the config |
|
|
236
229
|
| `401 Unauthorized` | Check `NOELCLAW_API_KEY` is set — get one at `POST https://api.noelclaw.com/auth/key` |
|
|
237
|
-
| `miroshark_simulate` error | Set `MIROSHARK_URL` and `MIROSHARK_ADMIN_TOKEN` |
|
|
238
230
|
| Server starts but no response | Expected — server waits for MCP stdin, not HTTP |
|
|
239
231
|
|
|
240
232
|
---
|
|
@@ -242,5 +234,5 @@ get_noel_ledger
|
|
|
242
234
|
## Links
|
|
243
235
|
|
|
244
236
|
- npm: [npmjs.com/package/@noelclaw/mcp](https://npmjs.com/package/@noelclaw/mcp)
|
|
245
|
-
- GitHub: [github.com/noelclaw/
|
|
237
|
+
- GitHub: [github.com/noelclaw/mcp](https://github.com/noelclaw/mcp)
|
|
246
238
|
- Platform: [noelclaw.com](https://noelclaw.com)
|
package/dist/tools/miroshark.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MIROSHARK_TOOLS = void 0;
|
|
4
4
|
exports.handleMirosharkTool = handleMirosharkTool;
|
|
5
|
+
const convex_js_1 = require("../convex.js");
|
|
5
6
|
exports.MIROSHARK_TOOLS = [
|
|
6
7
|
{
|
|
7
8
|
name: "miroshark_simulate",
|
|
@@ -41,50 +42,17 @@ exports.MIROSHARK_TOOLS = [
|
|
|
41
42
|
},
|
|
42
43
|
},
|
|
43
44
|
];
|
|
44
|
-
function getConfig() {
|
|
45
|
-
const url = process.env.MIROSHARK_URL?.replace(/\/$/, "");
|
|
46
|
-
const token = process.env.MIROSHARK_ADMIN_TOKEN;
|
|
47
|
-
return { url, token };
|
|
48
|
-
}
|
|
49
|
-
async function mirofetch(path, method, body) {
|
|
50
|
-
const { url, token } = getConfig();
|
|
51
|
-
if (!url)
|
|
52
|
-
throw new Error("MIROSHARK_URL not set");
|
|
53
|
-
if (!token)
|
|
54
|
-
throw new Error("MIROSHARK_ADMIN_TOKEN not set");
|
|
55
|
-
const res = await fetch(`${url}${path}`, {
|
|
56
|
-
method,
|
|
57
|
-
headers: {
|
|
58
|
-
"Content-Type": "application/json",
|
|
59
|
-
"Authorization": `Bearer ${token}`,
|
|
60
|
-
},
|
|
61
|
-
...(body ? { body: JSON.stringify(body) } : {}),
|
|
62
|
-
signal: AbortSignal.timeout(30000),
|
|
63
|
-
});
|
|
64
|
-
if (!res.ok) {
|
|
65
|
-
const err = await res.text();
|
|
66
|
-
throw new Error(`MiroShark ${res.status}: ${err.slice(0, 200)}`);
|
|
67
|
-
}
|
|
68
|
-
return res.json();
|
|
69
|
-
}
|
|
70
45
|
async function handleMirosharkTool(name, args) {
|
|
71
46
|
const a = (args ?? {});
|
|
72
47
|
if (name === "miroshark_simulate") {
|
|
73
48
|
if (!a.scenario?.trim()) {
|
|
74
49
|
return { content: [{ type: "text", text: "scenario is required" }], isError: true };
|
|
75
50
|
}
|
|
76
|
-
const { url, token } = getConfig();
|
|
77
|
-
if (!url || !token) {
|
|
78
|
-
return {
|
|
79
|
-
content: [{ type: "text", text: "MiroShark not configured — set MIROSHARK_URL and MIROSHARK_ADMIN_TOKEN" }],
|
|
80
|
-
isError: true,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
51
|
try {
|
|
84
|
-
// Step 1:
|
|
85
|
-
const asked = await
|
|
52
|
+
// Step 1: parse scenario into simulation params
|
|
53
|
+
const asked = await (0, convex_js_1.callConvex)("/miroshark/api/simulation/ask", "POST", { question: a.scenario });
|
|
86
54
|
// Step 2: create simulation
|
|
87
|
-
const created = await
|
|
55
|
+
const created = await (0, convex_js_1.callConvex)("/miroshark/api/simulation/create", "POST", {
|
|
88
56
|
...asked,
|
|
89
57
|
num_agents: Math.min(a.agents ?? 10, 50),
|
|
90
58
|
num_steps: a.steps ?? 5,
|
|
@@ -92,15 +60,14 @@ async function handleMirosharkTool(name, args) {
|
|
|
92
60
|
const simId = created.simulation_id ?? created.id;
|
|
93
61
|
if (!simId)
|
|
94
62
|
throw new Error("No simulation ID in create response");
|
|
95
|
-
// Step 3: prepare
|
|
96
|
-
await
|
|
97
|
-
|
|
98
|
-
await mirofetch(`/api/simulation/${simId}/start`, "POST", {});
|
|
63
|
+
// Step 3: prepare + start
|
|
64
|
+
await (0, convex_js_1.callConvex)(`/miroshark/api/simulation/${simId}/prepare`, "POST", {});
|
|
65
|
+
await (0, convex_js_1.callConvex)(`/miroshark/api/simulation/${simId}/start`, "POST", {});
|
|
99
66
|
return {
|
|
100
67
|
content: [{
|
|
101
68
|
type: "text",
|
|
102
69
|
text: [
|
|
103
|
-
|
|
70
|
+
`**MiroShark simulation started**`,
|
|
104
71
|
`Scenario: ${a.scenario}`,
|
|
105
72
|
`Simulation ID: \`${simId}\``,
|
|
106
73
|
`Agents: ${a.agents ?? 10} · Steps: ${a.steps ?? 5}`,
|
|
@@ -119,10 +86,10 @@ async function handleMirosharkTool(name, args) {
|
|
|
119
86
|
return { content: [{ type: "text", text: "simulation_id is required" }], isError: true };
|
|
120
87
|
}
|
|
121
88
|
try {
|
|
122
|
-
const data = await
|
|
89
|
+
const data = await (0, convex_js_1.callConvex)(`/miroshark/api/simulation/${a.simulation_id}/status`, "GET");
|
|
123
90
|
const status = data.status ?? "unknown";
|
|
124
91
|
const lines = [
|
|
125
|
-
|
|
92
|
+
`**MiroShark Simulation \`${a.simulation_id}\`**`,
|
|
126
93
|
`Status: **${status}**`,
|
|
127
94
|
];
|
|
128
95
|
if (data.progress != null)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noelclaw/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Noelclaw as an MCP skill — persistent memory, multi-agent coordination, scenario simulation, DeFi execution, and Sentinel-gated playbooks.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
],
|
|
28
28
|
"repository": {
|
|
29
29
|
"type": "git",
|
|
30
|
-
"url": "git+https://github.com/noelclaw/
|
|
30
|
+
"url": "git+https://github.com/noelclaw/mcp.git"
|
|
31
31
|
},
|
|
32
|
-
"homepage": "https://github.com/noelclaw/
|
|
32
|
+
"homepage": "https://github.com/noelclaw/mcp#readme",
|
|
33
33
|
"bugs": {
|
|
34
|
-
"url": "https://github.com/noelclaw/
|
|
34
|
+
"url": "https://github.com/noelclaw/mcp/issues"
|
|
35
35
|
},
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"files": [
|