@daxaur/ctrl-mcp 0.1.0 → 0.1.4
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 +9 -3
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/activate-workflow.d.ts.map +1 -1
- package/dist/tools/activate-workflow.js +19 -2
- package/dist/tools/activate-workflow.js.map +1 -1
- package/dist/tools/create-workflow.d.ts.map +1 -1
- package/dist/tools/create-workflow.js +5 -2
- package/dist/tools/create-workflow.js.map +1 -1
- package/dist/tools/vault-status.d.ts +52 -0
- package/dist/tools/vault-status.d.ts.map +1 -0
- package/dist/tools/vault-status.js +59 -0
- package/dist/tools/vault-status.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
# @daxaur/ctrl-mcp
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Workflow automation built on Base MCP. Designed to compose with every native plugin.**
|
|
4
4
|
|
|
5
|
-
Tell Claude, Cursor, or
|
|
5
|
+
Tell Claude, Cursor, or Codex what your agent should do. CTRL assembles the workflow, you sign once, and CTRL's keeper runs it on Base mainnet — chaining into other Base MCP plugins (Moonwell, Uniswap, Aerodrome, send_calls) as the workflow needs them.
|
|
6
6
|
|
|
7
|
-
> Built for the [Base Agent Quest](https://x.com/buildonbase/status/2059713951974236219)
|
|
7
|
+
> Built for the [Base Agent Quest](https://x.com/buildonbase/status/2059713951974236219). Custom Base MCP plugin per the [official spec](https://docs.base.org/ai-agents/plugins/custom-plugins). Live at [ctrl.build/mcp](https://ctrl.build/mcp).
|
|
8
|
+
|
|
9
|
+
## How CTRL composes with Base MCP
|
|
10
|
+
|
|
11
|
+
CTRL is the automation layer for Base MCP. The native plugins are precise primitives — each transaction goes through human approval, which is exactly what they're built for. CTRL adds a different primitive: a persistent workflow that fires those native plugin actions automatically on triggers (time, price, on-chain events, social signals), under on-chain spending caps the user signed once.
|
|
12
|
+
|
|
13
|
+
Your agent uses native plugins for one-shot actions, and CTRL when you want those actions to recur or fire conditionally. The two work together — your agent can chain `base.send_calls` to fund a CTRL vault and `ctrl_activate` to start the workflow in the same chat.
|
|
8
14
|
|
|
9
15
|
---
|
|
10
16
|
|
package/dist/config.d.ts
CHANGED
|
@@ -15,5 +15,16 @@ export declare const DEFAULT_EXPIRY_DAYS = 30;
|
|
|
15
15
|
export declare const V13_FACTORY_ADDRESS: "0x8E547D7758C79e23146f77b783149435feeA3e45";
|
|
16
16
|
export declare function requireApiKey(): string;
|
|
17
17
|
export declare function activateUrl(workflowId: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* URL with the agent's proposed caps encoded as query params so the
|
|
20
|
+
* /activate landing page can pre-fill the signing form. User can still
|
|
21
|
+
* edit before signing — these are defaults, not commitments.
|
|
22
|
+
*/
|
|
23
|
+
export declare function activateUrlWithCaps(workflowId: string, caps: {
|
|
24
|
+
maxPerSwapEth: string;
|
|
25
|
+
maxPerDayEth: string;
|
|
26
|
+
depositEth: string;
|
|
27
|
+
expiryDays: number;
|
|
28
|
+
}): string;
|
|
18
29
|
export declare function workflowUrl(workflowId: string): string;
|
|
19
30
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,QAC6C,CAAA;AAEvE,eAAO,MAAM,YAAY,QAAiC,CAAA;AAE1D,eAAO,MAAM,aAAa,OAAO,CAAA;AAEjC,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,SAAS,CAAA;AAC9C,eAAO,MAAM,uBAAuB,QAAQ,CAAA;AAC5C,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,EAC9B,4CAAqD,CAAA;AAEvD,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,QAC6C,CAAA;AAEvE,eAAO,MAAM,YAAY,QAAiC,CAAA;AAE1D,eAAO,MAAM,aAAa,OAAO,CAAA;AAEjC,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,SAAS,CAAA;AAC9C,eAAO,MAAM,uBAAuB,QAAQ,CAAA;AAC5C,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,EAC9B,4CAAqD,CAAA;AAEvD,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5F,MAAM,CAQR;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
package/dist/config.js
CHANGED
|
@@ -22,6 +22,20 @@ export function requireApiKey() {
|
|
|
22
22
|
export function activateUrl(workflowId) {
|
|
23
23
|
return `${CTRL_API_BASE}/activate/${workflowId}`;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* URL with the agent's proposed caps encoded as query params so the
|
|
27
|
+
* /activate landing page can pre-fill the signing form. User can still
|
|
28
|
+
* edit before signing — these are defaults, not commitments.
|
|
29
|
+
*/
|
|
30
|
+
export function activateUrlWithCaps(workflowId, caps) {
|
|
31
|
+
const qs = new URLSearchParams({
|
|
32
|
+
maxPerSwap: caps.maxPerSwapEth,
|
|
33
|
+
maxPerDay: caps.maxPerDayEth,
|
|
34
|
+
deposit: caps.depositEth,
|
|
35
|
+
expiry: String(caps.expiryDays),
|
|
36
|
+
});
|
|
37
|
+
return `${activateUrl(workflowId)}?${qs.toString()}`;
|
|
38
|
+
}
|
|
25
39
|
export function workflowUrl(workflowId) {
|
|
26
40
|
return `${CTRL_API_BASE}/workflow/${workflowId}`;
|
|
27
41
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GACxB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAA;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAA;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAA,CAAC,eAAe;AAEjD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAA;AAC9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAA;AAErC,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAC9B,4CAAqD,CAAA;AAEvD,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,8HAA8H,CAC/H,CAAA;IACH,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,OAAO,GAAG,aAAa,aAAa,UAAU,EAAE,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,OAAO,GAAG,aAAa,aAAa,UAAU,EAAE,CAAA;AAClD,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GACxB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAA;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAA;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAA,CAAC,eAAe;AAEjD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAA;AAC9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAA;AAErC,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAC9B,4CAAqD,CAAA;AAEvD,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,8HAA8H,CAC/H,CAAA;IACH,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,OAAO,GAAG,aAAa,aAAa,UAAU,EAAE,CAAA;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,IAA6F;IAE7F,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC;QAC7B,UAAU,EAAE,IAAI,CAAC,aAAa;QAC9B,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,OAAO,EAAE,IAAI,CAAC,UAAU;QACxB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;KAChC,CAAC,CAAA;IACF,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,OAAO,GAAG,aAAa,aAAa,UAAU,EAAE,CAAA;AAClD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ import { CREATE_WORKFLOW_TOOL, handleCreateWorkflow, } from './tools/create-work
|
|
|
21
21
|
import { ACTIVATE_TOOL, handleActivate, } from './tools/activate-workflow.js';
|
|
22
22
|
import { FIRE_MANUAL_TOOL, handleFireManual } from './tools/fire-manual.js';
|
|
23
23
|
import { GET_EXECUTION_LOGS_TOOL, handleGetExecutionLogs, } from './tools/get-execution-logs.js';
|
|
24
|
+
import { VAULT_STATUS_TOOL, handleVaultStatus } from './tools/vault-status.js';
|
|
24
25
|
import { CtrlApiError } from './client.js';
|
|
25
26
|
const server = new Server({
|
|
26
27
|
name: '@daxaur/ctrl-mcp',
|
|
@@ -31,12 +32,14 @@ const server = new Server({
|
|
|
31
32
|
},
|
|
32
33
|
});
|
|
33
34
|
const TOOLS = [
|
|
35
|
+
VAULT_STATUS_TOOL,
|
|
34
36
|
CREATE_WORKFLOW_TOOL,
|
|
35
37
|
ACTIVATE_TOOL,
|
|
36
38
|
FIRE_MANUAL_TOOL,
|
|
37
39
|
GET_EXECUTION_LOGS_TOOL,
|
|
38
40
|
];
|
|
39
41
|
const HANDLERS = {
|
|
42
|
+
ctrl_get_vault_status: handleVaultStatus,
|
|
40
43
|
ctrl_create_workflow: handleCreateWorkflow,
|
|
41
44
|
ctrl_activate: handleActivate,
|
|
42
45
|
ctrl_fire_manual: handleFireManual,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activate-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/activate-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsChB,CAAA;AAwBV,wBAAsB,cAAc,CAAC,QAAQ,EAAE,OAAO;;;;;;;;;;gBAjB9C,KAAK,MAAM,EAAE;kBACX,KAAK,MAAM,EAAE;mBACZ,KAAK,MAAM,EAAE;qBACX,MAAM;yBACF,MAAM;;;2BAGJ,MAAM;0BACP,MAAM;wBACR,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"activate-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/activate-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsChB,CAAA;AAwBV,wBAAsB,cAAc,CAAC,QAAQ,EAAE,OAAO;;;;;;;;;;gBAjB9C,KAAK,MAAM,EAAE;kBACX,KAAK,MAAM,EAAE;mBACZ,KAAK,MAAM,EAAE;qBACX,MAAM;yBACF,MAAM;;;2BAGJ,MAAM;0BACP,MAAM;wBACR,MAAM;;;;GAqFrB"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { z } from 'zod';
|
|
10
10
|
import { ctrlFetch } from '../client.js';
|
|
11
|
-
import {
|
|
11
|
+
import { activateUrlWithCaps, CTRL_CHAIN_ID, DEFAULT_EXPIRY_DAYS, DEFAULT_MAX_PER_DAY_ETH, DEFAULT_MAX_PER_SWAP_ETH, } from '../config.js';
|
|
12
12
|
const ActivateInputSchema = z.object({
|
|
13
13
|
workflowId: z.string().min(1),
|
|
14
14
|
maxPerSwapEth: z.string().default(DEFAULT_MAX_PER_SWAP_ETH),
|
|
@@ -61,8 +61,24 @@ export async function handleActivate(rawInput) {
|
|
|
61
61
|
expiryDays: input.expiryDays,
|
|
62
62
|
},
|
|
63
63
|
});
|
|
64
|
-
const url =
|
|
64
|
+
const url = activateUrlWithCaps(input.workflowId, {
|
|
65
|
+
maxPerSwapEth: input.maxPerSwapEth,
|
|
66
|
+
maxPerDayEth: input.maxPerDayEth,
|
|
67
|
+
depositEth: input.depositEth,
|
|
68
|
+
expiryDays: input.expiryDays,
|
|
69
|
+
});
|
|
65
70
|
const txCount = res.transactions.length;
|
|
71
|
+
// Composition guidance — tell the agent what to chain into next.
|
|
72
|
+
// CTRL is designed to work alongside other Base MCP plugins, especially
|
|
73
|
+
// base.send_calls for funding the vault.
|
|
74
|
+
const composeNote = [];
|
|
75
|
+
if (!res.vaultExists && (input.depositEth === '0' || Number(input.depositEth) === 0)) {
|
|
76
|
+
composeNote.push(`Next: after the user signs, chain into base.send_calls with`, ` calls=[{ to: "${res.vaultAddress}", value: "0xCONFIRM_AMOUNT_WEI" }]`, `to fund the vault. Without funds the workflow activates but cannot fire.`, `Recommend 0.005-0.02 ETH for a first run.`);
|
|
77
|
+
}
|
|
78
|
+
else if (res.vaultExists) {
|
|
79
|
+
composeNote.push(`Next: confirm the vault is funded. Call ctrl_get_vault_status — if`, `ETH/WETH < ${input.maxPerSwapEth}, chain into base.send_calls to top up`, `${res.vaultAddress} from the user's wallet.`);
|
|
80
|
+
}
|
|
81
|
+
composeNote.push(``, `After funding, calling ctrl_fire_manual once gives the user a visible`, `proof-of-life execution on BaseScan rather than waiting for the natural trigger.`);
|
|
66
82
|
return {
|
|
67
83
|
content: [
|
|
68
84
|
{
|
|
@@ -78,6 +94,7 @@ export async function handleActivate(rawInput) {
|
|
|
78
94
|
`Vault address (predicted): ${res.vaultAddress}`,
|
|
79
95
|
`Chain: Base mainnet (${CTRL_CHAIN_ID})`,
|
|
80
96
|
``,
|
|
97
|
+
...(composeNote.length > 0 ? [...composeNote, ``] : []),
|
|
81
98
|
`After signing, CTRL's keeper executes the workflow autonomously — no further signatures needed until the rule expires (${input.expiryDays} days) or the user pauses the vault.`,
|
|
82
99
|
].join('\n'),
|
|
83
100
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activate-workflow.js","sourceRoot":"","sources":["../../src/tools/activate-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"activate-workflow.js","sourceRoot":"","sources":["../../src/tools/activate-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/create-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2B,CAAA;AAEjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqFvB,CAAA;AAMV,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,OAAO;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"create-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/create-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2B,CAAA;AAEjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqFvB,CAAA;AAMV,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,OAAO;;;;;;;;;;;;GAmD3D"}
|
|
@@ -120,10 +120,13 @@ export async function handleCreateWorkflow(rawInput) {
|
|
|
120
120
|
`Trigger: ${input.trigger.type}`,
|
|
121
121
|
`Chain: ${input.chain.map((b) => b.type).join(' → ')}`,
|
|
122
122
|
``,
|
|
123
|
-
|
|
123
|
+
`▶ NEXT: call \`ctrl_get_vault_status\` first to check the user's vault state, then`,
|
|
124
|
+
` \`ctrl_activate\` with chosen caps (maxPerSwapEth, maxPerDayEth, depositEth).`,
|
|
125
|
+
``,
|
|
126
|
+
`Activation returns an EIP-5792 batch the user signs once at:`,
|
|
124
127
|
url,
|
|
125
128
|
``,
|
|
126
|
-
`That
|
|
129
|
+
`That signature deploys their CTRL vault and registers the spending rule on Base mainnet (chain ${CTRL_CHAIN_ID}). After signing, CTRL's keeper runs the workflow autonomously per the on-chain caps — no further signatures needed.`,
|
|
127
130
|
].join('\n'),
|
|
128
131
|
},
|
|
129
132
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-workflow.js","sourceRoot":"","sources":["../../src/tools/create-workflow.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"create-workflow.js","sourceRoot":"","sources":["../../src/tools/create-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ctrl_get_vault_status — read the user's CTRL vault state.
|
|
3
|
+
*
|
|
4
|
+
* The agent should call this BEFORE ctrl_activate so it can tell the user
|
|
5
|
+
* exactly what their starting point is:
|
|
6
|
+
* - vault deployed yet?
|
|
7
|
+
* - ETH/WETH balance?
|
|
8
|
+
* - any active spending rules?
|
|
9
|
+
* - circuit breaker tripped?
|
|
10
|
+
*
|
|
11
|
+
* Used to warn the user that an empty vault means the workflow can't fire
|
|
12
|
+
* even though it's "active".
|
|
13
|
+
*/
|
|
14
|
+
interface VaultStatusResponse {
|
|
15
|
+
walletAddress: `0x${string}`;
|
|
16
|
+
vaultExists: boolean;
|
|
17
|
+
vaultAddress: `0x${string}` | null;
|
|
18
|
+
predictedVaultAddress: `0x${string}` | null;
|
|
19
|
+
balances: {
|
|
20
|
+
ethWei: string;
|
|
21
|
+
ethDecimal: string;
|
|
22
|
+
wethWei: string;
|
|
23
|
+
wethDecimal: string;
|
|
24
|
+
};
|
|
25
|
+
activeRules: Array<{
|
|
26
|
+
ruleId: `0x${string}`;
|
|
27
|
+
maxPerSwapEth: string;
|
|
28
|
+
maxPerDayEth: string;
|
|
29
|
+
dailySpentEth: string;
|
|
30
|
+
expiryUnix: number;
|
|
31
|
+
expiryHumanReadable: string;
|
|
32
|
+
}>;
|
|
33
|
+
ready: boolean;
|
|
34
|
+
warnings: string[];
|
|
35
|
+
}
|
|
36
|
+
export declare const VAULT_STATUS_TOOL: {
|
|
37
|
+
readonly name: "ctrl_get_vault_status";
|
|
38
|
+
readonly description: "Read the user's CTRL vault state: address (or predicted address if not deployed yet), ETH + WETH balance, and any active spending rules. Call this BEFORE ctrl_activate so you can tell the user how much they need to fund (vault must hold ETH/WETH for swaps; keeper pays its own gas). Also surfaces warnings if the vault is empty or if rules are about to expire.";
|
|
39
|
+
readonly inputSchema: {
|
|
40
|
+
readonly type: "object";
|
|
41
|
+
readonly properties: {};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export declare function handleVaultStatus(_input: unknown): Promise<{
|
|
45
|
+
content: {
|
|
46
|
+
type: "text";
|
|
47
|
+
text: string;
|
|
48
|
+
}[];
|
|
49
|
+
structuredContent: VaultStatusResponse;
|
|
50
|
+
}>;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=vault-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-status.d.ts","sourceRoot":"","sources":["../../src/tools/vault-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,UAAU,mBAAmB;IAC3B,aAAa,EAAE,KAAK,MAAM,EAAE,CAAA;IAC5B,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAA;IAClC,qBAAqB,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAA;IAC3C,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,WAAW,EAAE,KAAK,CAAC;QACjB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAA;QACrB,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;QACrB,UAAU,EAAE,MAAM,CAAA;QAClB,mBAAmB,EAAE,MAAM,CAAA;KAC5B,CAAC,CAAA;IACF,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,eAAO,MAAM,iBAAiB;;;;;;;CAQpB,CAAA;AAEV,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,OAAO;;;;;;GAmCtD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ctrl_get_vault_status — read the user's CTRL vault state.
|
|
3
|
+
*
|
|
4
|
+
* The agent should call this BEFORE ctrl_activate so it can tell the user
|
|
5
|
+
* exactly what their starting point is:
|
|
6
|
+
* - vault deployed yet?
|
|
7
|
+
* - ETH/WETH balance?
|
|
8
|
+
* - any active spending rules?
|
|
9
|
+
* - circuit breaker tripped?
|
|
10
|
+
*
|
|
11
|
+
* Used to warn the user that an empty vault means the workflow can't fire
|
|
12
|
+
* even though it's "active".
|
|
13
|
+
*/
|
|
14
|
+
import { ctrlFetch } from '../client.js';
|
|
15
|
+
export const VAULT_STATUS_TOOL = {
|
|
16
|
+
name: 'ctrl_get_vault_status',
|
|
17
|
+
description: 'Read the user\'s CTRL vault state: address (or predicted address if not deployed yet), ETH + WETH balance, and any active spending rules. Call this BEFORE ctrl_activate so you can tell the user how much they need to fund (vault must hold ETH/WETH for swaps; keeper pays its own gas). Also surfaces warnings if the vault is empty or if rules are about to expire.',
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export async function handleVaultStatus(_input) {
|
|
24
|
+
const res = await ctrlFetch('/api/mcp/vault-status', {
|
|
25
|
+
method: 'GET',
|
|
26
|
+
});
|
|
27
|
+
const lines = [];
|
|
28
|
+
if (!res.vaultExists) {
|
|
29
|
+
lines.push(`Vault NOT deployed yet.`);
|
|
30
|
+
lines.push(`Predicted address (CREATE2): ${res.predictedVaultAddress}`);
|
|
31
|
+
lines.push(`Wallet ETH balance: ${res.balances.ethDecimal} ETH`);
|
|
32
|
+
lines.push(``);
|
|
33
|
+
lines.push(`When you call ctrl_activate, the EIP-5792 batch will deploy this vault. Set depositEth in that call to fund it in the same signature — otherwise the workflow activates with 0 balance and can't fire until you send ETH to ${res.predictedVaultAddress}.`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
lines.push(`Vault: ${res.vaultAddress}`);
|
|
37
|
+
lines.push(`ETH: ${res.balances.ethDecimal}`);
|
|
38
|
+
lines.push(`WETH: ${res.balances.wethDecimal}`);
|
|
39
|
+
lines.push(`Active rules: ${res.activeRules.length}`);
|
|
40
|
+
for (const r of res.activeRules) {
|
|
41
|
+
lines.push(` • cap ${r.maxPerSwapEth}/swap, ${r.maxPerDayEth}/day (spent today: ${r.dailySpentEth}) · expires ${r.expiryHumanReadable}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (res.warnings.length > 0) {
|
|
45
|
+
lines.push(``);
|
|
46
|
+
lines.push(`Warnings:`);
|
|
47
|
+
for (const w of res.warnings)
|
|
48
|
+
lines.push(` ⚠ ${w}`);
|
|
49
|
+
}
|
|
50
|
+
if (!res.ready) {
|
|
51
|
+
lines.push(``);
|
|
52
|
+
lines.push(`NOT READY to fire workflows — address the warnings above before activating.`);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
56
|
+
structuredContent: res,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=vault-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-status.js","sourceRoot":"","sources":["../../src/tools/vault-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAyBxC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,2WAA2W;IAC7W,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;KACf;CACO,CAAA;AAEV,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAe;IACrD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAsB,uBAAuB,EAAE;QACxE,MAAM,EAAE,KAAK;KACd,CAAC,CAAA;IAEF,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;QACrC,KAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAA;QACvE,KAAK,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,QAAQ,CAAC,UAAU,MAAM,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,+NAA+N,GAAG,CAAC,qBAAqB,GAAG,CAAC,CAAA;IACzQ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,YAAY,EAAE,CAAC,CAAA;QACxC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QAC9C,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;QAC/C,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;QACrD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,UAAU,CAAC,CAAC,YAAY,sBAAsB,CAAC,CAAC,aAAa,eAAe,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAA;QAC3I,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACvB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;IAC3F,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,iBAAiB,EAAE,GAAG;KACvB,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED