dexe-mcp 0.1.5 → 0.3.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.
Files changed (111) hide show
  1. package/.mcp.example.json +12 -2
  2. package/CHANGELOG.md +84 -0
  3. package/FUTURE.md +26 -5
  4. package/README.md +105 -197
  5. package/dist/config.d.ts +12 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +34 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/index.js +16 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/addresses.d.ts +57 -0
  12. package/dist/lib/addresses.d.ts.map +1 -0
  13. package/dist/lib/addresses.js +83 -0
  14. package/dist/lib/addresses.js.map +1 -0
  15. package/dist/lib/calldata.d.ts +32 -0
  16. package/dist/lib/calldata.d.ts.map +1 -0
  17. package/dist/lib/calldata.js +28 -0
  18. package/dist/lib/calldata.js.map +1 -0
  19. package/dist/lib/govEnums.d.ts +12 -0
  20. package/dist/lib/govEnums.d.ts.map +1 -0
  21. package/dist/lib/govEnums.js +35 -0
  22. package/dist/lib/govEnums.js.map +1 -0
  23. package/dist/lib/ipfs.d.ts +60 -0
  24. package/dist/lib/ipfs.d.ts.map +1 -0
  25. package/dist/lib/ipfs.js +168 -0
  26. package/dist/lib/ipfs.js.map +1 -0
  27. package/dist/lib/markdownToSlate.d.ts +39 -0
  28. package/dist/lib/markdownToSlate.d.ts.map +1 -0
  29. package/dist/lib/markdownToSlate.js +203 -0
  30. package/dist/lib/markdownToSlate.js.map +1 -0
  31. package/dist/lib/multicall.d.ts +33 -0
  32. package/dist/lib/multicall.d.ts.map +1 -0
  33. package/dist/lib/multicall.js +46 -0
  34. package/dist/lib/multicall.js.map +1 -0
  35. package/dist/lib/proposalCatalog.d.ts +45 -0
  36. package/dist/lib/proposalCatalog.d.ts.map +1 -0
  37. package/dist/lib/proposalCatalog.js +416 -0
  38. package/dist/lib/proposalCatalog.js.map +1 -0
  39. package/dist/lib/signer.d.ts +12 -0
  40. package/dist/lib/signer.d.ts.map +1 -0
  41. package/dist/lib/signer.js +31 -0
  42. package/dist/lib/signer.js.map +1 -0
  43. package/dist/lib/subgraph.d.ts +15 -0
  44. package/dist/lib/subgraph.d.ts.map +1 -0
  45. package/dist/lib/subgraph.js +42 -0
  46. package/dist/lib/subgraph.js.map +1 -0
  47. package/dist/tools/dao.d.ts +4 -0
  48. package/dist/tools/dao.d.ts.map +1 -0
  49. package/dist/tools/dao.js +242 -0
  50. package/dist/tools/dao.js.map +1 -0
  51. package/dist/tools/daoDeploy.d.ts +4 -0
  52. package/dist/tools/daoDeploy.d.ts.map +1 -0
  53. package/dist/tools/daoDeploy.js +573 -0
  54. package/dist/tools/daoDeploy.js.map +1 -0
  55. package/dist/tools/flow.d.ts +5 -0
  56. package/dist/tools/flow.d.ts.map +1 -0
  57. package/dist/tools/flow.js +451 -0
  58. package/dist/tools/flow.js.map +1 -0
  59. package/dist/tools/index.d.ts.map +1 -1
  60. package/dist/tools/index.js +32 -0
  61. package/dist/tools/index.js.map +1 -1
  62. package/dist/tools/ipfs.d.ts +6 -0
  63. package/dist/tools/ipfs.d.ts.map +1 -0
  64. package/dist/tools/ipfs.js +376 -0
  65. package/dist/tools/ipfs.js.map +1 -0
  66. package/dist/tools/proposal.d.ts +4 -0
  67. package/dist/tools/proposal.d.ts.map +1 -0
  68. package/dist/tools/proposal.js +217 -0
  69. package/dist/tools/proposal.js.map +1 -0
  70. package/dist/tools/proposalBuild.d.ts +4 -0
  71. package/dist/tools/proposalBuild.d.ts.map +1 -0
  72. package/dist/tools/proposalBuild.js +372 -0
  73. package/dist/tools/proposalBuild.js.map +1 -0
  74. package/dist/tools/proposalBuildComplex.d.ts +4 -0
  75. package/dist/tools/proposalBuildComplex.d.ts.map +1 -0
  76. package/dist/tools/proposalBuildComplex.js +766 -0
  77. package/dist/tools/proposalBuildComplex.js.map +1 -0
  78. package/dist/tools/proposalBuildInternal.d.ts +4 -0
  79. package/dist/tools/proposalBuildInternal.d.ts.map +1 -0
  80. package/dist/tools/proposalBuildInternal.js +224 -0
  81. package/dist/tools/proposalBuildInternal.js.map +1 -0
  82. package/dist/tools/proposalBuildMore.d.ts +4 -0
  83. package/dist/tools/proposalBuildMore.d.ts.map +1 -0
  84. package/dist/tools/proposalBuildMore.js +457 -0
  85. package/dist/tools/proposalBuildMore.js.map +1 -0
  86. package/dist/tools/proposalBuildOffchain.d.ts +4 -0
  87. package/dist/tools/proposalBuildOffchain.d.ts.map +1 -0
  88. package/dist/tools/proposalBuildOffchain.js +389 -0
  89. package/dist/tools/proposalBuildOffchain.js.map +1 -0
  90. package/dist/tools/read.d.ts +4 -0
  91. package/dist/tools/read.d.ts.map +1 -0
  92. package/dist/tools/read.js +580 -0
  93. package/dist/tools/read.js.map +1 -0
  94. package/dist/tools/subgraph.d.ts +4 -0
  95. package/dist/tools/subgraph.d.ts.map +1 -0
  96. package/dist/tools/subgraph.js +404 -0
  97. package/dist/tools/subgraph.js.map +1 -0
  98. package/dist/tools/txSend.d.ts +5 -0
  99. package/dist/tools/txSend.d.ts.map +1 -0
  100. package/dist/tools/txSend.js +87 -0
  101. package/dist/tools/txSend.js.map +1 -0
  102. package/dist/tools/vote.d.ts +4 -0
  103. package/dist/tools/vote.d.ts.map +1 -0
  104. package/dist/tools/vote.js +196 -0
  105. package/dist/tools/vote.js.map +1 -0
  106. package/dist/tools/voteBuild.d.ts +4 -0
  107. package/dist/tools/voteBuild.d.ts.map +1 -0
  108. package/dist/tools/voteBuild.js +983 -0
  109. package/dist/tools/voteBuild.js.map +1 -0
  110. package/package.json +18 -5
  111. package/PLAN.md +0 -132
@@ -0,0 +1,196 @@
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 { voteTypeFromString, VOTE_TYPE_NAMES } from "../lib/govEnums.js";
6
+ const GOV_POOL_HELPERS_ABI = [
7
+ "function getHelperContracts() view returns (address settings, address userKeeper, address validators, address poolRegistry, address votePower)",
8
+ "function getUserVotes(uint256 proposalId, address voter, uint8 voteType) view returns (tuple(bool isVoteFor, uint256 totalVoted, uint256 tokensVoted, uint256 totalRawVoted, uint256[] nftsVoted))",
9
+ "function getTotalVotes(uint256 proposalId, address voter, uint8 voteType) view returns (uint256 totalVoted, uint256 totalRawVoted, uint256 votesForNow, bool isVoteFor)",
10
+ ];
11
+ const USER_KEEPER_ABI = [
12
+ "function tokenBalance(address voter, uint8 voteType) view returns (uint256 balance, uint256 ownedBalance)",
13
+ "function nftBalance(address voter, uint8 voteType) view returns (uint256 balance, uint256 ownedBalance)",
14
+ ];
15
+ export function registerVoteTools(server, ctx) {
16
+ const rpc = new RpcProvider(ctx.config);
17
+ registerUserPower(server, rpc);
18
+ registerGetVotes(server, rpc);
19
+ }
20
+ function errorResult(message) {
21
+ return { content: [{ type: "text", text: message }], isError: true };
22
+ }
23
+ function registerUserPower(server, rpc) {
24
+ server.registerTool("dexe_vote_user_power", {
25
+ title: "User staking + delegation power across VoteTypes",
26
+ description: "Reads `tokenBalance` and `nftBalance` on GovUserKeeper for every VoteType (Personal/Micropool/Delegated/Treasury). One multicall round-trip.",
27
+ inputSchema: {
28
+ govPool: z.string().describe("GovPool contract address"),
29
+ user: z.string().describe("User wallet address"),
30
+ },
31
+ outputSchema: {
32
+ govPool: z.string(),
33
+ user: z.string(),
34
+ userKeeper: z.string(),
35
+ power: z.record(z.object({
36
+ tokenBalance: z.string(),
37
+ tokenOwned: z.string(),
38
+ nftBalance: z.string(),
39
+ nftOwned: z.string(),
40
+ })),
41
+ },
42
+ }, async ({ govPool, user }) => {
43
+ if (!isAddress(govPool))
44
+ return errorResult(`Invalid GovPool: ${govPool}`);
45
+ if (!isAddress(user))
46
+ return errorResult(`Invalid user: ${user}`);
47
+ try {
48
+ const provider = rpc.requireProvider();
49
+ const gp = new Interface(GOV_POOL_HELPERS_ABI);
50
+ const uk = new Interface(USER_KEEPER_ABI);
51
+ const [helpersR] = await multicall(provider, [
52
+ { target: govPool, iface: gp, method: "getHelperContracts", args: [] },
53
+ ]);
54
+ if (!helpersR?.success)
55
+ return errorResult("getHelperContracts reverted");
56
+ const userKeeper = helpersR.value.userKeeper;
57
+ const calls = [];
58
+ for (let vt = 0; vt < VOTE_TYPE_NAMES.length; vt++) {
59
+ calls.push({
60
+ target: userKeeper,
61
+ iface: uk,
62
+ method: "tokenBalance",
63
+ args: [user, vt],
64
+ allowFailure: true,
65
+ });
66
+ calls.push({
67
+ target: userKeeper,
68
+ iface: uk,
69
+ method: "nftBalance",
70
+ args: [user, vt],
71
+ allowFailure: true,
72
+ });
73
+ }
74
+ const results = await multicall(provider, calls);
75
+ const power = {};
76
+ for (let vt = 0; vt < VOTE_TYPE_NAMES.length; vt++) {
77
+ const tb = results[vt * 2];
78
+ const nb = results[vt * 2 + 1];
79
+ const tbv = tb?.success
80
+ ? tb.value
81
+ : null;
82
+ const nbv = nb?.success
83
+ ? nb.value
84
+ : null;
85
+ const pick = (v) => {
86
+ if (!v)
87
+ return ["0", "0"];
88
+ if (Array.isArray(v))
89
+ return [v[0].toString(), v[1].toString()];
90
+ return [v.balance.toString(), v.ownedBalance.toString()];
91
+ };
92
+ const [tBal, tOwn] = pick(tbv);
93
+ const [nBal, nOwn] = pick(nbv);
94
+ power[VOTE_TYPE_NAMES[vt]] = {
95
+ tokenBalance: tBal,
96
+ tokenOwned: tOwn,
97
+ nftBalance: nBal,
98
+ nftOwned: nOwn,
99
+ };
100
+ }
101
+ const structured = { govPool, user, userKeeper, power };
102
+ const lines = VOTE_TYPE_NAMES.map((name) => {
103
+ const p = power[name];
104
+ return ` ${name.padEnd(14)} token=${p.tokenBalance} (owned=${p.tokenOwned}) nft=${p.nftBalance} (owned=${p.nftOwned})`;
105
+ });
106
+ return {
107
+ content: [
108
+ {
109
+ type: "text",
110
+ text: `Voting power for ${user} on ${govPool}\nUserKeeper: ${userKeeper}\n${lines.join("\n")}`,
111
+ },
112
+ ],
113
+ structuredContent: structured,
114
+ };
115
+ }
116
+ catch (err) {
117
+ return errorResult(`vote_user_power failed: ${err instanceof Error ? err.message : String(err)}`);
118
+ }
119
+ });
120
+ }
121
+ function registerGetVotes(server, rpc) {
122
+ server.registerTool("dexe_vote_get_votes", {
123
+ title: "User's votes on a specific proposal",
124
+ description: "Reads `GovPool.getUserVotes(proposalId, voter, voteType)` and returns the VoteInfoView. Defaults to PersonalVote.",
125
+ inputSchema: {
126
+ govPool: z.string(),
127
+ proposalId: z.union([z.string(), z.number()]),
128
+ voter: z.string(),
129
+ voteType: z
130
+ .enum(["PersonalVote", "MicropoolVote", "DelegatedVote", "TreasuryVote"])
131
+ .default("PersonalVote"),
132
+ },
133
+ outputSchema: {
134
+ govPool: z.string(),
135
+ proposalId: z.string(),
136
+ voter: z.string(),
137
+ voteType: z.string(),
138
+ isVoteFor: z.boolean(),
139
+ totalVoted: z.string(),
140
+ tokensVoted: z.string(),
141
+ totalRawVoted: z.string(),
142
+ nftsVoted: z.array(z.string()),
143
+ },
144
+ }, async ({ govPool, proposalId, voter, voteType = "PersonalVote" }) => {
145
+ if (!isAddress(govPool))
146
+ return errorResult(`Invalid govPool: ${govPool}`);
147
+ if (!isAddress(voter))
148
+ return errorResult(`Invalid voter: ${voter}`);
149
+ try {
150
+ const provider = rpc.requireProvider();
151
+ const iface = new Interface(GOV_POOL_HELPERS_ABI);
152
+ const id = BigInt(proposalId);
153
+ const vtNum = voteTypeFromString(voteType);
154
+ const [res] = await multicall(provider, [
155
+ {
156
+ target: govPool,
157
+ iface,
158
+ method: "getUserVotes",
159
+ args: [id, voter, vtNum],
160
+ },
161
+ ]);
162
+ if (!res?.success)
163
+ return errorResult("getUserVotes reverted");
164
+ const v = res.value;
165
+ const structured = {
166
+ govPool,
167
+ proposalId: id.toString(),
168
+ voter,
169
+ voteType,
170
+ isVoteFor: v.isVoteFor,
171
+ totalVoted: v.totalVoted.toString(),
172
+ tokensVoted: v.tokensVoted.toString(),
173
+ totalRawVoted: v.totalRawVoted.toString(),
174
+ nftsVoted: v.nftsVoted.map((n) => n.toString()),
175
+ };
176
+ return {
177
+ content: [
178
+ {
179
+ type: "text",
180
+ text: `Vote by ${voter} on proposal ${id} (${voteType}):\n` +
181
+ ` isVoteFor : ${v.isVoteFor}\n` +
182
+ ` totalVoted : ${v.totalVoted}\n` +
183
+ ` tokensVoted : ${v.tokensVoted}\n` +
184
+ ` totalRawVoted : ${v.totalRawVoted}\n` +
185
+ ` nftsVoted : [${structured.nftsVoted.join(", ")}]`,
186
+ },
187
+ ],
188
+ structuredContent: structured,
189
+ };
190
+ }
191
+ catch (err) {
192
+ return errorResult(`vote_get_votes failed: ${err instanceof Error ? err.message : String(err)}`);
193
+ }
194
+ });
195
+ }
196
+ //# sourceMappingURL=vote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vote.js","sourceRoot":"","sources":["../../src/tools/vote.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 registerVoteBuildTools(server: McpServer, ctx: ToolContext): void;
4
+ //# sourceMappingURL=voteBuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voteBuild.d.ts","sourceRoot":"","sources":["../../src/tools/voteBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA2GhD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA+BhF"}