dexe-mcp 0.1.5 → 0.2.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/.mcp.example.json +12 -2
- package/CHANGELOG.md +33 -0
- package/FUTURE.md +26 -5
- package/README.md +80 -195
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -1
- package/dist/config.js.map +1 -1
- package/dist/lib/addresses.d.ts +57 -0
- package/dist/lib/addresses.d.ts.map +1 -0
- package/dist/lib/addresses.js +83 -0
- package/dist/lib/addresses.js.map +1 -0
- package/dist/lib/calldata.d.ts +32 -0
- package/dist/lib/calldata.d.ts.map +1 -0
- package/dist/lib/calldata.js +28 -0
- package/dist/lib/calldata.js.map +1 -0
- package/dist/lib/govEnums.d.ts +12 -0
- package/dist/lib/govEnums.d.ts.map +1 -0
- package/dist/lib/govEnums.js +35 -0
- package/dist/lib/govEnums.js.map +1 -0
- package/dist/lib/ipfs.d.ts +60 -0
- package/dist/lib/ipfs.d.ts.map +1 -0
- package/dist/lib/ipfs.js +167 -0
- package/dist/lib/ipfs.js.map +1 -0
- package/dist/lib/multicall.d.ts +33 -0
- package/dist/lib/multicall.d.ts.map +1 -0
- package/dist/lib/multicall.js +46 -0
- package/dist/lib/multicall.js.map +1 -0
- package/dist/lib/proposalCatalog.d.ts +45 -0
- package/dist/lib/proposalCatalog.d.ts.map +1 -0
- package/dist/lib/proposalCatalog.js +416 -0
- package/dist/lib/proposalCatalog.js.map +1 -0
- package/dist/lib/subgraph.d.ts +15 -0
- package/dist/lib/subgraph.d.ts.map +1 -0
- package/dist/lib/subgraph.js +37 -0
- package/dist/lib/subgraph.js.map +1 -0
- package/dist/tools/dao.d.ts +4 -0
- package/dist/tools/dao.d.ts.map +1 -0
- package/dist/tools/dao.js +242 -0
- package/dist/tools/dao.js.map +1 -0
- package/dist/tools/daoDeploy.d.ts +4 -0
- package/dist/tools/daoDeploy.d.ts.map +1 -0
- package/dist/tools/daoDeploy.js +323 -0
- package/dist/tools/daoDeploy.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +24 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ipfs.d.ts +6 -0
- package/dist/tools/ipfs.d.ts.map +1 -0
- package/dist/tools/ipfs.js +310 -0
- package/dist/tools/ipfs.js.map +1 -0
- package/dist/tools/proposal.d.ts +4 -0
- package/dist/tools/proposal.d.ts.map +1 -0
- package/dist/tools/proposal.js +199 -0
- package/dist/tools/proposal.js.map +1 -0
- package/dist/tools/proposalBuild.d.ts +4 -0
- package/dist/tools/proposalBuild.d.ts.map +1 -0
- package/dist/tools/proposalBuild.js +357 -0
- package/dist/tools/proposalBuild.js.map +1 -0
- package/dist/tools/proposalBuildComplex.d.ts +4 -0
- package/dist/tools/proposalBuildComplex.d.ts.map +1 -0
- package/dist/tools/proposalBuildComplex.js +700 -0
- package/dist/tools/proposalBuildComplex.js.map +1 -0
- package/dist/tools/proposalBuildInternal.d.ts +4 -0
- package/dist/tools/proposalBuildInternal.d.ts.map +1 -0
- package/dist/tools/proposalBuildInternal.js +211 -0
- package/dist/tools/proposalBuildInternal.js.map +1 -0
- package/dist/tools/proposalBuildMore.d.ts +4 -0
- package/dist/tools/proposalBuildMore.d.ts.map +1 -0
- package/dist/tools/proposalBuildMore.js +436 -0
- package/dist/tools/proposalBuildMore.js.map +1 -0
- package/dist/tools/proposalBuildOffchain.d.ts +4 -0
- package/dist/tools/proposalBuildOffchain.d.ts.map +1 -0
- package/dist/tools/proposalBuildOffchain.js +386 -0
- package/dist/tools/proposalBuildOffchain.js.map +1 -0
- package/dist/tools/read.d.ts +4 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +353 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/vote.d.ts +4 -0
- package/dist/tools/vote.d.ts.map +1 -0
- package/dist/tools/vote.js +196 -0
- package/dist/tools/vote.js.map +1 -0
- package/dist/tools/voteBuild.d.ts +4 -0
- package/dist/tools/voteBuild.d.ts.map +1 -0
- package/dist/tools/voteBuild.js +563 -0
- package/dist/tools/voteBuild.js.map +1 -0
- package/package.json +9 -4
- package/PLAN.md +0 -132
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Interface, isAddress } from "ethers";
|
|
3
|
+
import { buildPayload } from "../lib/calldata.js";
|
|
4
|
+
import { PROPOSAL_CATALOG, EXTERNAL_METADATA_SHAPE, INTERNAL_METADATA_SHAPE, } from "../lib/proposalCatalog.js";
|
|
5
|
+
const GOV_POOL_ABI = [
|
|
6
|
+
"function createProposal(string descriptionURL, tuple(address executor, uint256 value, bytes data)[] actionsOnFor, tuple(address executor, uint256 value, bytes data)[] actionsOnAgainst)",
|
|
7
|
+
"function createProposalAndVote(string descriptionURL, tuple(address executor, uint256 value, bytes data)[] actionsOnFor, tuple(address executor, uint256 value, bytes data)[] actionsOnAgainst, uint256 voteAmount, uint256[] voteNftIds)",
|
|
8
|
+
];
|
|
9
|
+
const GOV_VALIDATORS_ABI = [
|
|
10
|
+
"function createInternalProposal(uint8 proposalType, string descriptionURL, bytes data)",
|
|
11
|
+
];
|
|
12
|
+
const ERC20_ABI = [
|
|
13
|
+
"function transfer(address to, uint256 amount) returns (bool)",
|
|
14
|
+
];
|
|
15
|
+
const ActionSchema = z.object({
|
|
16
|
+
executor: z.string(),
|
|
17
|
+
value: z.string().default("0"),
|
|
18
|
+
data: z.string(),
|
|
19
|
+
});
|
|
20
|
+
function toAction(a) {
|
|
21
|
+
if (!isAddress(a.executor))
|
|
22
|
+
throw new Error(`Invalid executor: ${a.executor}`);
|
|
23
|
+
if (!a.data.startsWith("0x"))
|
|
24
|
+
throw new Error(`data must be 0x-hex, got: ${a.data.slice(0, 16)}…`);
|
|
25
|
+
return { executor: a.executor, value: BigInt(a.value || "0"), data: a.data };
|
|
26
|
+
}
|
|
27
|
+
function errorResult(message) {
|
|
28
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
29
|
+
}
|
|
30
|
+
export function registerProposalBuildTools(server, ctx) {
|
|
31
|
+
registerCatalog(server);
|
|
32
|
+
registerBuildExternal(server, ctx);
|
|
33
|
+
registerBuildInternal(server, ctx);
|
|
34
|
+
registerBuildCustomAbi(server, ctx);
|
|
35
|
+
registerBuildOffchain(server, ctx);
|
|
36
|
+
registerBuildTokenTransfer(server, ctx);
|
|
37
|
+
}
|
|
38
|
+
// ---------- dexe_proposal_catalog ----------
|
|
39
|
+
function registerCatalog(server) {
|
|
40
|
+
server.registerTool("dexe_proposal_catalog", {
|
|
41
|
+
title: "List every proposal type DeXe supports",
|
|
42
|
+
description: "Returns the full catalog of proposal types the DeXe frontend exposes (external on-chain, internal validator, off-chain backend). Each entry lists target contract/endpoint, IPFS metadata requirement, gating, and the MCP builder tool (or null if callers must compose via primitives). Use this before building a proposal to discover the right type and shape.",
|
|
43
|
+
inputSchema: {
|
|
44
|
+
category: z.enum(["external", "internal", "offchain", "all"]).default("all"),
|
|
45
|
+
implementedOnly: z.boolean().default(false),
|
|
46
|
+
},
|
|
47
|
+
outputSchema: {
|
|
48
|
+
total: z.number(),
|
|
49
|
+
types: z.array(z.object({
|
|
50
|
+
id: z.string(),
|
|
51
|
+
category: z.string(),
|
|
52
|
+
name: z.string(),
|
|
53
|
+
formPath: z.string(),
|
|
54
|
+
effect: z.string(),
|
|
55
|
+
target: z.string(),
|
|
56
|
+
needsIpfs: z.boolean(),
|
|
57
|
+
gating: z.array(z.string()),
|
|
58
|
+
mcpTool: z.string().nullable(),
|
|
59
|
+
implemented: z.boolean(),
|
|
60
|
+
})),
|
|
61
|
+
externalMetadataShape: z.unknown(),
|
|
62
|
+
internalMetadataShape: z.unknown(),
|
|
63
|
+
},
|
|
64
|
+
}, async ({ category = "all", implementedOnly = false }) => {
|
|
65
|
+
let types = PROPOSAL_CATALOG;
|
|
66
|
+
if (category !== "all")
|
|
67
|
+
types = types.filter((t) => t.category === category);
|
|
68
|
+
if (implementedOnly)
|
|
69
|
+
types = types.filter((t) => t.implemented);
|
|
70
|
+
const structured = {
|
|
71
|
+
total: types.length,
|
|
72
|
+
types,
|
|
73
|
+
externalMetadataShape: EXTERNAL_METADATA_SHAPE,
|
|
74
|
+
internalMetadataShape: INTERNAL_METADATA_SHAPE,
|
|
75
|
+
};
|
|
76
|
+
const implemented = types.filter((t) => t.implemented).length;
|
|
77
|
+
const lines = types.map((t) => ` ${t.implemented ? "[x]" : "[ ]"} ${t.id.padEnd(36)} ${t.name}${t.mcpTool ? ` → ${t.mcpTool}` : " (compose via primitives)"}`);
|
|
78
|
+
return {
|
|
79
|
+
content: [
|
|
80
|
+
{
|
|
81
|
+
type: "text",
|
|
82
|
+
text: `DeXe proposal catalog (${types.length} types, ${implemented} shipped)\n\n${lines.join("\n")}`,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
structuredContent: structured,
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// ---------- dexe_proposal_build_external ----------
|
|
90
|
+
function registerBuildExternal(server, ctx) {
|
|
91
|
+
server.registerTool("dexe_proposal_build_external", {
|
|
92
|
+
title: "Primitive: build calldata for GovPool.createProposal",
|
|
93
|
+
description: "Raw external proposal builder. You supply the descriptionURL (IPFS CID from dexe_ipfs_upload_proposal_metadata), actionsOnFor array, actionsOnAgainst array. Every named wrapper tool (token_transfer, change_voting_settings, etc.) composes through this primitive. Set `andVote=true` for createProposalAndVote.",
|
|
94
|
+
inputSchema: {
|
|
95
|
+
govPool: z.string(),
|
|
96
|
+
descriptionURL: z
|
|
97
|
+
.string()
|
|
98
|
+
.describe("IPFS CID (or ipfs://<cid>) pointing at the proposal metadata JSON"),
|
|
99
|
+
actionsOnFor: z.array(ActionSchema).default([]),
|
|
100
|
+
actionsOnAgainst: z.array(ActionSchema).default([]),
|
|
101
|
+
andVote: z.boolean().default(false),
|
|
102
|
+
voteAmount: z.string().default("0"),
|
|
103
|
+
voteNftIds: z.array(z.string()).default([]),
|
|
104
|
+
},
|
|
105
|
+
outputSchema: payloadSchema(),
|
|
106
|
+
}, async ({ govPool, descriptionURL, actionsOnFor = [], actionsOnAgainst = [], andVote = false, voteAmount = "0", voteNftIds = [], }) => {
|
|
107
|
+
if (!isAddress(govPool))
|
|
108
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
109
|
+
try {
|
|
110
|
+
const iface = new Interface(GOV_POOL_ABI);
|
|
111
|
+
const on = actionsOnFor.map(toAction);
|
|
112
|
+
const against = actionsOnAgainst.map(toAction);
|
|
113
|
+
let payload;
|
|
114
|
+
if (andVote) {
|
|
115
|
+
payload = buildPayload({
|
|
116
|
+
to: govPool,
|
|
117
|
+
iface,
|
|
118
|
+
method: "createProposalAndVote",
|
|
119
|
+
args: [
|
|
120
|
+
descriptionURL,
|
|
121
|
+
on,
|
|
122
|
+
against,
|
|
123
|
+
BigInt(voteAmount),
|
|
124
|
+
voteNftIds.map((n) => BigInt(n)),
|
|
125
|
+
],
|
|
126
|
+
chainId: ctx.config.chainId,
|
|
127
|
+
contractLabel: "GovPool",
|
|
128
|
+
description: `GovPool.createProposalAndVote (${on.length} for / ${against.length} against)`,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
payload = buildPayload({
|
|
133
|
+
to: govPool,
|
|
134
|
+
iface,
|
|
135
|
+
method: "createProposal",
|
|
136
|
+
args: [descriptionURL, on, against],
|
|
137
|
+
chainId: ctx.config.chainId,
|
|
138
|
+
contractLabel: "GovPool",
|
|
139
|
+
description: `GovPool.createProposal (${on.length} for / ${against.length} against)`,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return payloadResult(payload);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
// ---------- dexe_proposal_build_internal ----------
|
|
150
|
+
function registerBuildInternal(server, ctx) {
|
|
151
|
+
server.registerTool("dexe_proposal_build_internal", {
|
|
152
|
+
title: "Primitive: build calldata for GovValidators.createInternalProposal",
|
|
153
|
+
description: "Raw internal proposal builder. proposalType: 0=ChangeBalances, 1=ChangeSettings, 2=MonthlyWithdraw, 3=OffchainProposal. `data` is the abi-encoded type-specific payload (see DeXe docs or use a dedicated wrapper in Phase 3e).",
|
|
154
|
+
inputSchema: {
|
|
155
|
+
validators: z.string().describe("GovValidators contract address"),
|
|
156
|
+
proposalType: z.number().int().min(0).max(3),
|
|
157
|
+
descriptionURL: z.string(),
|
|
158
|
+
data: z.string().default("0x"),
|
|
159
|
+
},
|
|
160
|
+
outputSchema: payloadSchema(),
|
|
161
|
+
}, async ({ validators, proposalType, descriptionURL, data = "0x" }) => {
|
|
162
|
+
if (!isAddress(validators))
|
|
163
|
+
return errorResult(`Invalid validators: ${validators}`);
|
|
164
|
+
if (!data.startsWith("0x"))
|
|
165
|
+
return errorResult("data must be 0x-prefixed hex");
|
|
166
|
+
try {
|
|
167
|
+
const iface = new Interface(GOV_VALIDATORS_ABI);
|
|
168
|
+
const label = ["ChangeBalances", "ChangeSettings", "MonthlyWithdraw", "OffchainProposal"][proposalType];
|
|
169
|
+
const payload = buildPayload({
|
|
170
|
+
to: validators,
|
|
171
|
+
iface,
|
|
172
|
+
method: "createInternalProposal",
|
|
173
|
+
args: [proposalType, descriptionURL, data],
|
|
174
|
+
chainId: ctx.config.chainId,
|
|
175
|
+
contractLabel: "GovValidators",
|
|
176
|
+
description: `GovValidators.createInternalProposal(${label})`,
|
|
177
|
+
});
|
|
178
|
+
return payloadResult(payload);
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
// ---------- dexe_proposal_build_custom_abi ----------
|
|
186
|
+
function registerBuildCustomAbi(server, ctx) {
|
|
187
|
+
server.registerTool("dexe_proposal_build_custom_abi", {
|
|
188
|
+
title: "Encode a single ProposalAction from user-supplied ABI fragment",
|
|
189
|
+
description: "Takes a full function signature (e.g. 'function transfer(address,uint256)'), method name, args, and target contract. Returns a ready-to-use `ProposalAction` object { executor, value, data } that you can drop into `actionsOnFor` of dexe_proposal_build_external. The returned object is JSON-safe (value as string).",
|
|
190
|
+
inputSchema: {
|
|
191
|
+
target: z.string().describe("Target contract the DAO will call"),
|
|
192
|
+
signature: z.string().describe("Full function signature, e.g. 'function setX(uint256)'"),
|
|
193
|
+
method: z.string().describe("Method name matching the signature"),
|
|
194
|
+
args: z.array(z.unknown()).default([]),
|
|
195
|
+
value: z.string().default("0").describe("ETH value to send with the call"),
|
|
196
|
+
},
|
|
197
|
+
outputSchema: {
|
|
198
|
+
action: z.object({
|
|
199
|
+
executor: z.string(),
|
|
200
|
+
value: z.string(),
|
|
201
|
+
data: z.string(),
|
|
202
|
+
}),
|
|
203
|
+
preview: z.string(),
|
|
204
|
+
},
|
|
205
|
+
}, async ({ target, signature, method, args = [], value = "0" }) => {
|
|
206
|
+
if (!isAddress(target))
|
|
207
|
+
return errorResult(`Invalid target: ${target}`);
|
|
208
|
+
try {
|
|
209
|
+
const iface = new Interface([signature]);
|
|
210
|
+
const coerced = args.map((a) => {
|
|
211
|
+
if (typeof a === "string" && /^-?\d+$/.test(a) && a.length > 9) {
|
|
212
|
+
try {
|
|
213
|
+
return BigInt(a);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return a;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return a;
|
|
220
|
+
});
|
|
221
|
+
const data = iface.encodeFunctionData(method, coerced);
|
|
222
|
+
const action = { executor: target, value, data };
|
|
223
|
+
const preview = `ProposalAction → ${target}.${method}(${args.length} args), value=${value}, calldata=${data.slice(0, 18)}…`;
|
|
224
|
+
return {
|
|
225
|
+
content: [{ type: "text", text: preview }],
|
|
226
|
+
structuredContent: { action, preview },
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
// ---------- dexe_proposal_build_offchain ----------
|
|
235
|
+
function registerBuildOffchain(server, ctx) {
|
|
236
|
+
server.registerTool("dexe_proposal_build_offchain", {
|
|
237
|
+
title: "Primitive: build HTTP request for DeXe off-chain proposal backend",
|
|
238
|
+
description: "Returns the ready-to-send HTTP request (method, url, headers, body) for submitting an off-chain proposal to the DeXe backend. You send it yourself; no wallet required. Requires DEXE_BACKEND_API_URL (not yet wired — placeholder until schema audit in Phase 3d).",
|
|
239
|
+
inputSchema: {
|
|
240
|
+
endpoint: z
|
|
241
|
+
.string()
|
|
242
|
+
.describe("Backend endpoint path, e.g. '/proposals' or '/templates/voting'"),
|
|
243
|
+
body: z.record(z.unknown()).describe("JSON body to POST"),
|
|
244
|
+
method: z.enum(["POST", "PUT", "PATCH"]).default("POST"),
|
|
245
|
+
},
|
|
246
|
+
outputSchema: {
|
|
247
|
+
request: z.object({
|
|
248
|
+
method: z.string(),
|
|
249
|
+
url: z.string(),
|
|
250
|
+
headers: z.record(z.string()),
|
|
251
|
+
body: z.unknown(),
|
|
252
|
+
}),
|
|
253
|
+
},
|
|
254
|
+
}, async ({ endpoint, body, method = "POST" }) => {
|
|
255
|
+
const base = process.env.DEXE_BACKEND_API_URL?.trim();
|
|
256
|
+
if (!base) {
|
|
257
|
+
return errorResult("DEXE_BACKEND_API_URL is not set. Add it to the MCP env block to build off-chain proposal requests.");
|
|
258
|
+
}
|
|
259
|
+
const url = `${base.replace(/\/$/, "")}${endpoint.startsWith("/") ? "" : "/"}${endpoint}`;
|
|
260
|
+
const req = {
|
|
261
|
+
method,
|
|
262
|
+
url,
|
|
263
|
+
headers: { "Content-Type": "application/json" },
|
|
264
|
+
body,
|
|
265
|
+
};
|
|
266
|
+
return {
|
|
267
|
+
content: [
|
|
268
|
+
{
|
|
269
|
+
type: "text",
|
|
270
|
+
text: `${method} ${url}\n${JSON.stringify(body, null, 2)}`,
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
structuredContent: { request: req },
|
|
274
|
+
};
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
// ---------- dexe_proposal_build_token_transfer (Layer-3 named wrapper) ----------
|
|
278
|
+
function registerBuildTokenTransfer(server, ctx) {
|
|
279
|
+
server.registerTool("dexe_proposal_build_token_transfer", {
|
|
280
|
+
title: "Wrapper: build a 'Token Transfer' proposal (treasury → recipient)",
|
|
281
|
+
description: "Builds a complete Token Transfer external proposal. Returns three things the agent composes: (1) the IPFS metadata JSON to upload (shape expected by the frontend indexer), (2) the ProposalAction encoded for the ERC20.transfer call, (3) a hint message explaining the next step (upload → get CID → call dexe_proposal_build_external with that CID and `actions`). Does NOT upload or send the tx itself — returns signable payload components.",
|
|
282
|
+
inputSchema: {
|
|
283
|
+
govPool: z.string(),
|
|
284
|
+
token: z.string().describe("ERC20 token contract (the transfer executor)"),
|
|
285
|
+
recipient: z.string(),
|
|
286
|
+
amount: z.string().describe("Wei / smallest-unit amount as decimal string"),
|
|
287
|
+
proposalName: z.string().default("Token Transfer"),
|
|
288
|
+
proposalDescription: z.string().default(""),
|
|
289
|
+
},
|
|
290
|
+
outputSchema: {
|
|
291
|
+
metadata: z.unknown(),
|
|
292
|
+
actions: z.array(z.object({
|
|
293
|
+
executor: z.string(),
|
|
294
|
+
value: z.string(),
|
|
295
|
+
data: z.string(),
|
|
296
|
+
})),
|
|
297
|
+
nextStep: z.string(),
|
|
298
|
+
},
|
|
299
|
+
}, async ({ govPool, token, recipient, amount, proposalName = "Token Transfer", proposalDescription = "", }) => {
|
|
300
|
+
if (!isAddress(govPool))
|
|
301
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
302
|
+
if (!isAddress(token))
|
|
303
|
+
return errorResult(`Invalid token: ${token}`);
|
|
304
|
+
if (!isAddress(recipient))
|
|
305
|
+
return errorResult(`Invalid recipient: ${recipient}`);
|
|
306
|
+
try {
|
|
307
|
+
const iface = new Interface(ERC20_ABI);
|
|
308
|
+
const data = iface.encodeFunctionData("transfer", [recipient, BigInt(amount)]);
|
|
309
|
+
const actions = [{ executor: token, value: "0", data }];
|
|
310
|
+
const metadata = {
|
|
311
|
+
proposalName,
|
|
312
|
+
proposalDescription,
|
|
313
|
+
category: "Token Transfer",
|
|
314
|
+
isMeta: false,
|
|
315
|
+
changes: { token, recipient, amount },
|
|
316
|
+
};
|
|
317
|
+
const nextStep = `1) dexe_ipfs_upload_proposal_metadata with { title: "${proposalName}", description, extra: changes } → get CID\n` +
|
|
318
|
+
`2) dexe_proposal_build_external with govPool="${govPool}", descriptionURL=<CID>, actionsOnFor=actions`;
|
|
319
|
+
return {
|
|
320
|
+
content: [
|
|
321
|
+
{
|
|
322
|
+
type: "text",
|
|
323
|
+
text: `Built token-transfer proposal scaffolding.\n\n` +
|
|
324
|
+
`Action: ERC20(${token}).transfer(${recipient}, ${amount})\n` +
|
|
325
|
+
`Calldata: ${data}\n\nNext:\n${nextStep}`,
|
|
326
|
+
},
|
|
327
|
+
],
|
|
328
|
+
structuredContent: { metadata, actions, nextStep },
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
catch (err) {
|
|
332
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
// ---------- helpers ----------
|
|
337
|
+
function payloadSchema() {
|
|
338
|
+
return {
|
|
339
|
+
to: z.string(),
|
|
340
|
+
data: z.string(),
|
|
341
|
+
value: z.string(),
|
|
342
|
+
chainId: z.number(),
|
|
343
|
+
description: z.string(),
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
function payloadResult(payload) {
|
|
347
|
+
return {
|
|
348
|
+
content: [
|
|
349
|
+
{
|
|
350
|
+
type: "text",
|
|
351
|
+
text: `${payload.description}\n to : ${payload.to}\n value: ${payload.value}\n data : ${payload.data.slice(0, 66)}…`,
|
|
352
|
+
},
|
|
353
|
+
],
|
|
354
|
+
structuredContent: { ...payload },
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=proposalBuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposalBuild.js","sourceRoot":"","sources":["../../src/tools/proposalBuild.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ToolContext } from "./context.js";
|
|
3
|
+
export declare function registerProposalBuildComplexTools(server: McpServer, _ctx: ToolContext): void;
|
|
4
|
+
//# sourceMappingURL=proposalBuildComplex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposalBuildComplex.d.ts","sourceRoot":"","sources":["../../src/tools/proposalBuildComplex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA2FhD,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,WAAW,GAChB,IAAI,CAWN"}
|