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
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAiB,EAAE,MAAkB;IAC/D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAElE,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,8BAA8B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,iCAAiC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,kCAAkC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,kCAAkC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ToolContext } from "./context.js";
|
|
3
|
+
import { cidForBytes } from "../lib/ipfs.js";
|
|
4
|
+
export declare function registerIpfsTools(server: McpServer, ctx: ToolContext): void;
|
|
5
|
+
export { cidForBytes };
|
|
6
|
+
//# sourceMappingURL=ipfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../src/tools/ipfs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAS3E;AA6UD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { cidForBytes, cidForJson, fetchIpfs, parseCid, PinataClient, } from "../lib/ipfs.js";
|
|
3
|
+
export function registerIpfsTools(server, ctx) {
|
|
4
|
+
const gateways = resolveGateways(ctx);
|
|
5
|
+
registerUploadProposalMetadata(server, ctx);
|
|
6
|
+
registerUploadDaoMetadata(server, ctx);
|
|
7
|
+
registerUploadFile(server, ctx);
|
|
8
|
+
registerFetch(server, gateways);
|
|
9
|
+
registerCidInfo(server, gateways);
|
|
10
|
+
registerCidForJson(server);
|
|
11
|
+
}
|
|
12
|
+
function errorResult(message) {
|
|
13
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build the gateway chain used by fetch/cid_info. Primary gateway is a single
|
|
17
|
+
* dedicated endpoint the user configures — public gateways are only added if
|
|
18
|
+
* the user opts in via `DEXE_IPFS_GATEWAYS_FALLBACK`. Returns an empty array
|
|
19
|
+
* if nothing is configured; the fetch tool fails clean in that case.
|
|
20
|
+
*/
|
|
21
|
+
function resolveGateways(_ctx) {
|
|
22
|
+
const out = [];
|
|
23
|
+
const primary = process.env.DEXE_IPFS_GATEWAY?.trim();
|
|
24
|
+
if (primary)
|
|
25
|
+
out.push(primary.replace(/\/$/, ""));
|
|
26
|
+
const fallback = process.env.DEXE_IPFS_GATEWAYS_FALLBACK?.trim();
|
|
27
|
+
if (fallback) {
|
|
28
|
+
for (const g of fallback.split(",").map((s) => s.trim().replace(/\/$/, ""))) {
|
|
29
|
+
if (g && !out.includes(g))
|
|
30
|
+
out.push(g);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
const NO_GATEWAY_HINT = "No IPFS gateway configured. Set DEXE_IPFS_GATEWAY to a dedicated gateway " +
|
|
36
|
+
"(Pinata gives one free with your JWT — e.g. https://<your-subdomain>.mypinata.cloud — " +
|
|
37
|
+
"or use Filebase / Quicknode / a self-hosted gateway). " +
|
|
38
|
+
"Public gateways (dweb.link, ipfs.io) are unreliable and not defaulted. " +
|
|
39
|
+
"Optional best-effort fallback: DEXE_IPFS_GATEWAYS_FALLBACK=https://dweb.link,https://ipfs.io.";
|
|
40
|
+
function requirePinata(ctx) {
|
|
41
|
+
if (!ctx.config.pinataJwt) {
|
|
42
|
+
return {
|
|
43
|
+
error: "DEXE_PINATA_JWT is not set. Add your Pinata JWT to the MCP env block to enable uploads.",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return new PinataClient(ctx.config.pinataJwt);
|
|
47
|
+
}
|
|
48
|
+
// ---------- dexe_ipfs_upload_proposal_metadata ----------
|
|
49
|
+
function registerUploadProposalMetadata(server, ctx) {
|
|
50
|
+
server.registerTool("dexe_ipfs_upload_proposal_metadata", {
|
|
51
|
+
title: "Upload proposal metadata JSON to IPFS (Pinata)",
|
|
52
|
+
description: "Pins `{ title, description }` (the shape DeXe proposals expect) to IPFS via Pinata. Returns the CID for use as `descriptionURL` in `GovPool.createProposal`.",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
title: z.string().min(1),
|
|
55
|
+
description: z.string().default(""),
|
|
56
|
+
extra: z
|
|
57
|
+
.record(z.unknown())
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Optional extra fields merged into the metadata object"),
|
|
60
|
+
},
|
|
61
|
+
outputSchema: {
|
|
62
|
+
cid: z.string(),
|
|
63
|
+
size: z.number(),
|
|
64
|
+
pinnedAt: z.string(),
|
|
65
|
+
descriptionURL: z.string(),
|
|
66
|
+
},
|
|
67
|
+
}, async ({ title, description = "", extra }) => {
|
|
68
|
+
const client = requirePinata(ctx);
|
|
69
|
+
if ("error" in client)
|
|
70
|
+
return errorResult(client.error);
|
|
71
|
+
try {
|
|
72
|
+
const payload = { title, description, ...(extra ?? {}) };
|
|
73
|
+
const res = await client.pinJson(payload, { name: `proposal:${title.slice(0, 48)}` });
|
|
74
|
+
const structured = {
|
|
75
|
+
cid: res.cid,
|
|
76
|
+
size: res.size,
|
|
77
|
+
pinnedAt: res.pinnedAt,
|
|
78
|
+
descriptionURL: res.cid,
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
content: [
|
|
82
|
+
{
|
|
83
|
+
type: "text",
|
|
84
|
+
text: `Pinned proposal metadata → ${res.cid} (${res.size} bytes, ${res.pinnedAt})\nUse as descriptionURL.`,
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
structuredContent: structured,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// ---------- dexe_ipfs_upload_dao_metadata ----------
|
|
96
|
+
function registerUploadDaoMetadata(server, ctx) {
|
|
97
|
+
server.registerTool("dexe_ipfs_upload_dao_metadata", {
|
|
98
|
+
title: "Upload DAO-level metadata JSON to IPFS (Pinata)",
|
|
99
|
+
description: "Pins arbitrary DAO metadata JSON (name, description, avatar, links, tags). Returns the CID for use as `descriptionURL` in `deployGovPool`.",
|
|
100
|
+
inputSchema: {
|
|
101
|
+
name: z.string().min(1),
|
|
102
|
+
description: z.string().default(""),
|
|
103
|
+
avatar: z.string().optional().describe("Avatar CID or full URL"),
|
|
104
|
+
links: z.array(z.object({ label: z.string(), url: z.string() })).optional(),
|
|
105
|
+
tags: z.array(z.string()).optional(),
|
|
106
|
+
extra: z.record(z.unknown()).optional(),
|
|
107
|
+
},
|
|
108
|
+
outputSchema: {
|
|
109
|
+
cid: z.string(),
|
|
110
|
+
size: z.number(),
|
|
111
|
+
pinnedAt: z.string(),
|
|
112
|
+
descriptionURL: z.string(),
|
|
113
|
+
},
|
|
114
|
+
}, async ({ name, description = "", avatar, links, tags, extra }) => {
|
|
115
|
+
const client = requirePinata(ctx);
|
|
116
|
+
if ("error" in client)
|
|
117
|
+
return errorResult(client.error);
|
|
118
|
+
try {
|
|
119
|
+
const payload = { name, description };
|
|
120
|
+
if (avatar)
|
|
121
|
+
payload.avatar = avatar;
|
|
122
|
+
if (links)
|
|
123
|
+
payload.links = links;
|
|
124
|
+
if (tags)
|
|
125
|
+
payload.tags = tags;
|
|
126
|
+
if (extra)
|
|
127
|
+
Object.assign(payload, extra);
|
|
128
|
+
const res = await client.pinJson(payload, { name: `dao:${name.slice(0, 48)}` });
|
|
129
|
+
const structured = {
|
|
130
|
+
cid: res.cid,
|
|
131
|
+
size: res.size,
|
|
132
|
+
pinnedAt: res.pinnedAt,
|
|
133
|
+
descriptionURL: res.cid,
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
content: [
|
|
137
|
+
{
|
|
138
|
+
type: "text",
|
|
139
|
+
text: `Pinned DAO metadata → ${res.cid} (${res.size} bytes, ${res.pinnedAt})`,
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
structuredContent: structured,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// ---------- dexe_ipfs_upload_file ----------
|
|
151
|
+
function registerUploadFile(server, ctx) {
|
|
152
|
+
server.registerTool("dexe_ipfs_upload_file", {
|
|
153
|
+
title: "Upload raw bytes (avatar, attachment, etc.) to IPFS (Pinata)",
|
|
154
|
+
description: "Pins a file to IPFS. Accepts base64-encoded bytes; returns the CID. Use for DAO avatars or proposal attachments.",
|
|
155
|
+
inputSchema: {
|
|
156
|
+
base64: z.string().min(1).describe("Base64-encoded file bytes"),
|
|
157
|
+
fileName: z.string().default("file"),
|
|
158
|
+
contentType: z.string().default("application/octet-stream"),
|
|
159
|
+
},
|
|
160
|
+
outputSchema: {
|
|
161
|
+
cid: z.string(),
|
|
162
|
+
size: z.number(),
|
|
163
|
+
pinnedAt: z.string(),
|
|
164
|
+
},
|
|
165
|
+
}, async ({ base64, fileName = "file", contentType = "application/octet-stream" }) => {
|
|
166
|
+
const client = requirePinata(ctx);
|
|
167
|
+
if ("error" in client)
|
|
168
|
+
return errorResult(client.error);
|
|
169
|
+
try {
|
|
170
|
+
const bytes = Uint8Array.from(Buffer.from(base64, "base64"));
|
|
171
|
+
const res = await client.pinFile(bytes, { fileName, contentType, name: fileName });
|
|
172
|
+
const structured = { cid: res.cid, size: res.size, pinnedAt: res.pinnedAt };
|
|
173
|
+
return {
|
|
174
|
+
content: [
|
|
175
|
+
{
|
|
176
|
+
type: "text",
|
|
177
|
+
text: `Pinned ${fileName} (${bytes.length} bytes) → ${res.cid} (size on IPFS=${res.size})`,
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
structuredContent: structured,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
// ---------- dexe_ipfs_fetch ----------
|
|
189
|
+
function registerFetch(server, defaultGateways) {
|
|
190
|
+
server.registerTool("dexe_ipfs_fetch", {
|
|
191
|
+
title: "Fetch content by CID (dedicated gateway, optional fallback)",
|
|
192
|
+
description: "Fetches IPFS content via the gateway configured in DEXE_IPFS_GATEWAY (recommended: a dedicated gateway — Pinata gives one with the JWT). Public gateways are NOT a default because they're unreliable; opt in via DEXE_IPFS_GATEWAYS_FALLBACK (comma-separated) for best-effort fallback after the primary. Returns parsed JSON when content-type is JSON, plus raw bytes size.",
|
|
193
|
+
inputSchema: {
|
|
194
|
+
cid: z.string().describe("CID (with or without ipfs:// prefix)"),
|
|
195
|
+
timeoutMs: z.number().int().min(500).max(30_000).default(4000),
|
|
196
|
+
},
|
|
197
|
+
outputSchema: {
|
|
198
|
+
cid: z.string(),
|
|
199
|
+
gateway: z.string(),
|
|
200
|
+
contentType: z.string(),
|
|
201
|
+
sizeBytes: z.number(),
|
|
202
|
+
attempts: z.number(),
|
|
203
|
+
json: z.unknown().nullable(),
|
|
204
|
+
},
|
|
205
|
+
}, async ({ cid, timeoutMs = 4000 }) => {
|
|
206
|
+
if (defaultGateways.length === 0)
|
|
207
|
+
return errorResult(NO_GATEWAY_HINT);
|
|
208
|
+
try {
|
|
209
|
+
const res = await fetchIpfs(cid, {
|
|
210
|
+
gateways: defaultGateways,
|
|
211
|
+
perRequestTimeoutMs: timeoutMs,
|
|
212
|
+
});
|
|
213
|
+
const structured = {
|
|
214
|
+
cid: res.cid,
|
|
215
|
+
gateway: res.gateway,
|
|
216
|
+
contentType: res.contentType,
|
|
217
|
+
sizeBytes: res.bytes.length,
|
|
218
|
+
attempts: res.attempts,
|
|
219
|
+
json: res.json,
|
|
220
|
+
};
|
|
221
|
+
const preview = res.json != null
|
|
222
|
+
? JSON.stringify(res.json, null, 2).slice(0, 800)
|
|
223
|
+
: `(${res.bytes.length} bytes of ${res.contentType})`;
|
|
224
|
+
return {
|
|
225
|
+
content: [
|
|
226
|
+
{
|
|
227
|
+
type: "text",
|
|
228
|
+
text: `CID ${res.cid} via ${res.gateway} (attempts=${res.attempts})\n${preview}`,
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
structuredContent: structured,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
// ---------- dexe_ipfs_cid_info ----------
|
|
240
|
+
function registerCidInfo(server, gateways) {
|
|
241
|
+
server.registerTool("dexe_ipfs_cid_info", {
|
|
242
|
+
title: "Parse a CID, show version/codec, compute the alternate version + gateway URLs",
|
|
243
|
+
description: "Parses a CIDv0 or CIDv1, reports codec + multihash, converts between v0↔v1 when legal, and emits the gateway URL for each configured gateway.",
|
|
244
|
+
inputSchema: {
|
|
245
|
+
cid: z.string().describe("CID (with or without ipfs:// prefix)"),
|
|
246
|
+
},
|
|
247
|
+
outputSchema: {
|
|
248
|
+
cid: z.string(),
|
|
249
|
+
version: z.number(),
|
|
250
|
+
codec: z.string(),
|
|
251
|
+
multihash: z.string(),
|
|
252
|
+
alternate: z.string().nullable(),
|
|
253
|
+
gatewayUrls: z.array(z.string()),
|
|
254
|
+
},
|
|
255
|
+
}, async ({ cid }) => {
|
|
256
|
+
try {
|
|
257
|
+
const info = parseCid(cid);
|
|
258
|
+
const gatewayUrls = gateways.length
|
|
259
|
+
? gateways.map((g) => `${g.replace(/\/$/, "")}/ipfs/${info.cid}`)
|
|
260
|
+
: [];
|
|
261
|
+
const structured = { ...info, gatewayUrls };
|
|
262
|
+
return {
|
|
263
|
+
content: [
|
|
264
|
+
{
|
|
265
|
+
type: "text",
|
|
266
|
+
text: `CID : ${info.cid}\n` +
|
|
267
|
+
`Version: v${info.version}\n` +
|
|
268
|
+
`Codec : ${info.codec}\n` +
|
|
269
|
+
`Multihash (base58btc): ${info.multihash}\n` +
|
|
270
|
+
`Alt : ${info.alternate ?? "(no legal alternate)"}\n` +
|
|
271
|
+
`Gateway URLs:\n${gatewayUrls.map((u) => ` ${u}`).join("\n")}`,
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
structuredContent: structured,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
// ---------- dexe_ipfs_cid_for_json ----------
|
|
283
|
+
function registerCidForJson(server) {
|
|
284
|
+
server.registerTool("dexe_ipfs_cid_for_json", {
|
|
285
|
+
title: "Compute the CIDv1 for a JSON value locally — no network",
|
|
286
|
+
description: "Computes the deterministic CIDv1 (json codec, sha-256) for arbitrary JSON. Useful for dry-run flows: precompute the CID, build/sign a proposal with it as `descriptionURL`, then upload separately. The CID computed here matches what Pinata returns for the same bytes encoded with the multiformats json codec.",
|
|
287
|
+
inputSchema: {
|
|
288
|
+
value: z.unknown(),
|
|
289
|
+
},
|
|
290
|
+
outputSchema: {
|
|
291
|
+
cid: z.string(),
|
|
292
|
+
codec: z.string(),
|
|
293
|
+
},
|
|
294
|
+
}, async ({ value }) => {
|
|
295
|
+
try {
|
|
296
|
+
const cid = await cidForJson(value);
|
|
297
|
+
return {
|
|
298
|
+
content: [{ type: "text", text: `CID (json, sha-256): ${cid}` }],
|
|
299
|
+
structuredContent: { cid, codec: "json" },
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
catch (err) {
|
|
303
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
// Keep this export so `cidForBytes` isn't flagged as dead code by strict builds;
|
|
308
|
+
// tools can opt into it later.
|
|
309
|
+
export { cidForBytes };
|
|
310
|
+
//# sourceMappingURL=ipfs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../src/tools/ipfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../../src/tools/proposal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAYhD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAK/E"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Interface, isAddress } from "ethers";
|
|
3
|
+
import { RpcProvider } from "../rpc.js";
|
|
4
|
+
import { multicall } from "../lib/multicall.js";
|
|
5
|
+
import { proposalStateLabel } from "../lib/govEnums.js";
|
|
6
|
+
import { gqlRequest, VOTES_BY_PROPOSAL_QUERY } from "../lib/subgraph.js";
|
|
7
|
+
const GOV_POOL_READ_ABI = [
|
|
8
|
+
"function getProposalState(uint256 proposalId) view returns (uint8)",
|
|
9
|
+
"function getProposalRequiredQuorum(uint256 proposalId) view returns (uint256)",
|
|
10
|
+
"function getProposals(uint256 offset, uint256 limit) view returns (tuple(tuple(tuple(bool earlyCompletion, bool delegatedVotingAllowed, bool validatorsVote, uint64 duration, uint64 durationValidators, uint64 executionDelay, uint128 quorum, uint128 quorumValidators, uint256 minVotesForVoting, uint256 minVotesForCreating, tuple(address rewardToken, uint256 creationReward, uint256 executionReward, uint256 voteRewardsCoefficient) rewardsInfo, string executorDescription) settings, uint64 voteEnd, uint64 executeAfter, bool executed, uint256 votesFor, uint256 votesAgainst, uint256 rawVotesFor, uint256 rawVotesAgainst, uint256 givenRewards) core, string descriptionURL, tuple(address executor, uint256 value, bytes data)[] actionsOnFor, tuple(address executor, uint256 value, bytes data)[] actionsOnAgainst)[] proposals, tuple(uint256 proposalId, uint256 executeAfter, uint256 quorum, uint256 rawVotesFor, uint256 rawVotesAgainst, bool executed, tuple(bool earlyCompletion, bool delegatedVotingAllowed, bool validatorsVote, uint64 duration, uint64 durationValidators, uint64 executionDelay, uint128 quorum, uint128 quorumValidators, uint256 minVotesForVoting, uint256 minVotesForCreating, tuple(address rewardToken, uint256 creationReward, uint256 executionReward, uint256 voteRewardsCoefficient) rewardsInfo, string executorDescription) settings)[] validatorProposals, uint8[] proposalStates, uint256[] requiredQuorums, uint256[] requiredValidatorsQuorums)",
|
|
11
|
+
];
|
|
12
|
+
export function registerProposalTools(server, ctx) {
|
|
13
|
+
const rpc = new RpcProvider(ctx.config);
|
|
14
|
+
registerProposalState(server, ctx, rpc);
|
|
15
|
+
registerProposalList(server, ctx, rpc);
|
|
16
|
+
registerProposalVoters(server, ctx);
|
|
17
|
+
}
|
|
18
|
+
function errorResult(message) {
|
|
19
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
20
|
+
}
|
|
21
|
+
function registerProposalState(server, ctx, rpc) {
|
|
22
|
+
server.registerTool("dexe_proposal_state", {
|
|
23
|
+
title: "Live proposal state + required quorum",
|
|
24
|
+
description: "Reads `getProposalState` and `getProposalRequiredQuorum` on a GovPool in one multicall. Returns named state (Voting, Defeated, SucceededFor, ExecutedFor, …) and the quorum threshold.",
|
|
25
|
+
inputSchema: {
|
|
26
|
+
govPool: z.string().describe("GovPool contract address"),
|
|
27
|
+
proposalId: z.union([z.string(), z.number()]).describe("Proposal id (uint256)"),
|
|
28
|
+
},
|
|
29
|
+
outputSchema: {
|
|
30
|
+
govPool: z.string(),
|
|
31
|
+
proposalId: z.string(),
|
|
32
|
+
state: z.string(),
|
|
33
|
+
stateIndex: z.number(),
|
|
34
|
+
requiredQuorum: z.string(),
|
|
35
|
+
},
|
|
36
|
+
}, async ({ govPool, proposalId }) => {
|
|
37
|
+
if (!isAddress(govPool))
|
|
38
|
+
return errorResult(`Invalid GovPool address: ${govPool}`);
|
|
39
|
+
const id = BigInt(proposalId);
|
|
40
|
+
try {
|
|
41
|
+
const provider = rpc.requireProvider();
|
|
42
|
+
const iface = new Interface(GOV_POOL_READ_ABI);
|
|
43
|
+
const calls = [
|
|
44
|
+
{ target: govPool, iface, method: "getProposalState", args: [id] },
|
|
45
|
+
{ target: govPool, iface, method: "getProposalRequiredQuorum", args: [id] },
|
|
46
|
+
];
|
|
47
|
+
const [stateR, quorumR] = await multicall(provider, calls);
|
|
48
|
+
if (!stateR?.success || !quorumR?.success) {
|
|
49
|
+
return errorResult("Multicall failed — is govPool valid and proposalId known?");
|
|
50
|
+
}
|
|
51
|
+
const stateIndex = Number(stateR.value);
|
|
52
|
+
const state = proposalStateLabel(stateIndex);
|
|
53
|
+
const requiredQuorum = quorumR.value.toString();
|
|
54
|
+
const structured = {
|
|
55
|
+
govPool,
|
|
56
|
+
proposalId: id.toString(),
|
|
57
|
+
state,
|
|
58
|
+
stateIndex,
|
|
59
|
+
requiredQuorum,
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
content: [
|
|
63
|
+
{
|
|
64
|
+
type: "text",
|
|
65
|
+
text: `Proposal ${id} on ${govPool}: state=${state} (${stateIndex}), requiredQuorum=${requiredQuorum}`,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
structuredContent: structured,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return errorResult(`proposal_state failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function registerProposalList(server, ctx, rpc) {
|
|
77
|
+
server.registerTool("dexe_proposal_list", {
|
|
78
|
+
title: "List proposals on a GovPool",
|
|
79
|
+
description: "Calls `GovPool.getProposals(offset, limit)` and returns a compact summary per proposal: id, descriptionURL, state, votesFor/Against, voteEnd, executed.",
|
|
80
|
+
inputSchema: {
|
|
81
|
+
govPool: z.string().describe("GovPool contract address"),
|
|
82
|
+
offset: z.number().int().min(0).default(0),
|
|
83
|
+
limit: z.number().int().min(1).max(100).default(20),
|
|
84
|
+
},
|
|
85
|
+
outputSchema: {
|
|
86
|
+
govPool: z.string(),
|
|
87
|
+
offset: z.number(),
|
|
88
|
+
limit: z.number(),
|
|
89
|
+
proposals: z.array(z.object({
|
|
90
|
+
proposalId: z.string(),
|
|
91
|
+
descriptionURL: z.string(),
|
|
92
|
+
state: z.string(),
|
|
93
|
+
stateIndex: z.number(),
|
|
94
|
+
votesFor: z.string(),
|
|
95
|
+
votesAgainst: z.string(),
|
|
96
|
+
voteEnd: z.string(),
|
|
97
|
+
executed: z.boolean(),
|
|
98
|
+
requiredQuorum: z.string(),
|
|
99
|
+
})),
|
|
100
|
+
},
|
|
101
|
+
}, async ({ govPool, offset = 0, limit = 20 }) => {
|
|
102
|
+
if (!isAddress(govPool))
|
|
103
|
+
return errorResult(`Invalid GovPool address: ${govPool}`);
|
|
104
|
+
try {
|
|
105
|
+
const provider = rpc.requireProvider();
|
|
106
|
+
const iface = new Interface(GOV_POOL_READ_ABI);
|
|
107
|
+
const [res] = await multicall(provider, [
|
|
108
|
+
{
|
|
109
|
+
target: govPool,
|
|
110
|
+
iface,
|
|
111
|
+
method: "getProposals",
|
|
112
|
+
args: [BigInt(offset), BigInt(limit)],
|
|
113
|
+
},
|
|
114
|
+
]);
|
|
115
|
+
if (!res?.success)
|
|
116
|
+
return errorResult("getProposals reverted");
|
|
117
|
+
const raw = res.value;
|
|
118
|
+
const proposals = raw.proposals.map((p, i) => {
|
|
119
|
+
const idx = Number(raw.proposalStates[i] ?? 9);
|
|
120
|
+
return {
|
|
121
|
+
proposalId: String(offset + i + 1),
|
|
122
|
+
descriptionURL: p.descriptionURL,
|
|
123
|
+
state: proposalStateLabel(idx),
|
|
124
|
+
stateIndex: idx,
|
|
125
|
+
votesFor: p.core.votesFor.toString(),
|
|
126
|
+
votesAgainst: p.core.votesAgainst.toString(),
|
|
127
|
+
voteEnd: p.core.voteEnd.toString(),
|
|
128
|
+
executed: p.core.executed,
|
|
129
|
+
requiredQuorum: (raw.requiredQuorums[i] ?? 0n).toString(),
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
const structured = { govPool, offset, limit, proposals };
|
|
133
|
+
const text = `Proposals on ${govPool} [offset=${offset}, limit=${limit}] — ${proposals.length} returned\n` +
|
|
134
|
+
proposals
|
|
135
|
+
.map((p) => ` #${p.proposalId} ${p.state.padEnd(22)} for=${p.votesFor} against=${p.votesAgainst} ${p.executed ? "executed" : ""}`)
|
|
136
|
+
.join("\n");
|
|
137
|
+
return {
|
|
138
|
+
content: [{ type: "text", text }],
|
|
139
|
+
structuredContent: structured,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
return errorResult(`proposal_list failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function registerProposalVoters(server, ctx) {
|
|
148
|
+
server.registerTool("dexe_proposal_voters", {
|
|
149
|
+
title: "Voter list for a proposal (subgraph)",
|
|
150
|
+
description: "Fetches voters from the DeXe interactions subgraph. Requires DEXE_SUBGRAPH_INTERACTIONS_URL env var. Paginated.",
|
|
151
|
+
inputSchema: {
|
|
152
|
+
govPool: z.string().describe("GovPool address (used as filter on `pool` field)"),
|
|
153
|
+
proposalId: z.union([z.string(), z.number()]),
|
|
154
|
+
first: z.number().int().min(1).max(200).default(50),
|
|
155
|
+
skip: z.number().int().min(0).default(0),
|
|
156
|
+
},
|
|
157
|
+
outputSchema: {
|
|
158
|
+
govPool: z.string(),
|
|
159
|
+
proposalId: z.string(),
|
|
160
|
+
voters: z.array(z.object({
|
|
161
|
+
voter: z.string(),
|
|
162
|
+
isVoteFor: z.boolean(),
|
|
163
|
+
totalRawVoted: z.string(),
|
|
164
|
+
timestamp: z.string(),
|
|
165
|
+
transactionHash: z.string(),
|
|
166
|
+
})),
|
|
167
|
+
},
|
|
168
|
+
}, async ({ govPool, proposalId, first = 50, skip = 0 }) => {
|
|
169
|
+
if (!isAddress(govPool))
|
|
170
|
+
return errorResult(`Invalid GovPool address: ${govPool}`);
|
|
171
|
+
const url = ctx.config.subgraphInteractionsUrl;
|
|
172
|
+
if (!url) {
|
|
173
|
+
return errorResult("DEXE_SUBGRAPH_INTERACTIONS_URL is not set. Add it to the MCP env block (The Graph endpoint for DeXe interactions subgraph).");
|
|
174
|
+
}
|
|
175
|
+
const id = BigInt(proposalId).toString();
|
|
176
|
+
try {
|
|
177
|
+
const data = await gqlRequest(url, VOTES_BY_PROPOSAL_QUERY, {
|
|
178
|
+
pool: govPool.toLowerCase(),
|
|
179
|
+
proposalId: id,
|
|
180
|
+
first,
|
|
181
|
+
skip,
|
|
182
|
+
});
|
|
183
|
+
const structured = { govPool, proposalId: id, voters: data.votes };
|
|
184
|
+
return {
|
|
185
|
+
content: [
|
|
186
|
+
{
|
|
187
|
+
type: "text",
|
|
188
|
+
text: `Voters for proposal ${id} on ${govPool}: ${data.votes.length} returned (first=${first}, skip=${skip})`,
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
structuredContent: structured,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
return errorResult(`proposal_voters failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=proposal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/tools/proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposalBuild.d.ts","sourceRoot":"","sources":["../../src/tools/proposalBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAuChD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAOpF"}
|