dexe-mcp 0.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.
Files changed (62) hide show
  1. package/.mcp.example.json +8 -0
  2. package/FUTURE.md +37 -0
  3. package/LICENSE +21 -0
  4. package/PLAN.md +132 -0
  5. package/README.md +126 -0
  6. package/dist/artifacts.d.ts +69 -0
  7. package/dist/artifacts.d.ts.map +1 -0
  8. package/dist/artifacts.js +181 -0
  9. package/dist/artifacts.js.map +1 -0
  10. package/dist/bootstrap.d.ts +12 -0
  11. package/dist/bootstrap.d.ts.map +1 -0
  12. package/dist/bootstrap.js +83 -0
  13. package/dist/bootstrap.js.map +1 -0
  14. package/dist/config.d.ts +19 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +40 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/hardhat.d.ts +26 -0
  19. package/dist/hardhat.d.ts.map +1 -0
  20. package/dist/hardhat.js +87 -0
  21. package/dist/hardhat.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +22 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/lib/decoders.d.ts +51 -0
  27. package/dist/lib/decoders.d.ts.map +1 -0
  28. package/dist/lib/decoders.js +122 -0
  29. package/dist/lib/decoders.js.map +1 -0
  30. package/dist/lib/govAddresses.d.ts +35 -0
  31. package/dist/lib/govAddresses.d.ts.map +1 -0
  32. package/dist/lib/govAddresses.js +51 -0
  33. package/dist/lib/govAddresses.js.map +1 -0
  34. package/dist/lib/selectors.d.ts +31 -0
  35. package/dist/lib/selectors.d.ts.map +1 -0
  36. package/dist/lib/selectors.js +110 -0
  37. package/dist/lib/selectors.js.map +1 -0
  38. package/dist/rpc.d.ts +14 -0
  39. package/dist/rpc.d.ts.map +1 -0
  40. package/dist/rpc.js +23 -0
  41. package/dist/rpc.js.map +1 -0
  42. package/dist/tools/build.d.ts +21 -0
  43. package/dist/tools/build.d.ts.map +1 -0
  44. package/dist/tools/build.js +281 -0
  45. package/dist/tools/build.js.map +1 -0
  46. package/dist/tools/context.d.ts +16 -0
  47. package/dist/tools/context.d.ts.map +1 -0
  48. package/dist/tools/context.js +2 -0
  49. package/dist/tools/context.js.map +1 -0
  50. package/dist/tools/gov.d.ts +4 -0
  51. package/dist/tools/gov.d.ts.map +1 -0
  52. package/dist/tools/gov.js +302 -0
  53. package/dist/tools/gov.js.map +1 -0
  54. package/dist/tools/index.d.ts +9 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +21 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/introspect.d.ts +4 -0
  59. package/dist/tools/introspect.d.ts.map +1 -0
  60. package/dist/tools/introspect.js +312 -0
  61. package/dist/tools/introspect.js.map +1 -0
  62. package/package.json +69 -0
@@ -0,0 +1,312 @@
1
+ import { z } from "zod";
2
+ import { readFileSync, existsSync } from "node:fs";
3
+ import { join, isAbsolute } from "node:path";
4
+ import { ArtifactsMissingError } from "../artifacts.js";
5
+ export function registerIntrospectTools(server, ctx) {
6
+ registerListContracts(server, ctx);
7
+ registerGetAbi(server, ctx);
8
+ registerGetSelectors(server, ctx);
9
+ registerFindSelector(server, ctx);
10
+ registerGetNatspec(server, ctx);
11
+ registerGetSource(server, ctx);
12
+ }
13
+ // All tools here wrap their body in this guard so users get one consistent
14
+ // "run dexe_compile first" message instead of a raw stack.
15
+ async function guarded(ctx, fn) {
16
+ try {
17
+ ctx.artifacts.requireArtifactsExist();
18
+ return { ok: true, value: await fn() };
19
+ }
20
+ catch (err) {
21
+ if (err instanceof ArtifactsMissingError) {
22
+ return { ok: false, error: err.message };
23
+ }
24
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
25
+ }
26
+ }
27
+ function errorResult(message) {
28
+ return {
29
+ content: [{ type: "text", text: message }],
30
+ isError: true,
31
+ };
32
+ }
33
+ // ---------- dexe_list_contracts ----------
34
+ function registerListContracts(server, ctx) {
35
+ server.registerTool("dexe_list_contracts", {
36
+ title: "List compiled contracts",
37
+ description: "Enumerates all compiled DeXe-Protocol contracts. Filter by substring match on name and/or kind (contract/interface/library). Requires dexe_compile to have run at least once.",
38
+ inputSchema: {
39
+ filter: z.string().optional().describe("Case-insensitive substring match on contract name"),
40
+ kind: z.enum(["contract", "interface", "library"]).optional(),
41
+ },
42
+ outputSchema: {
43
+ count: z.number(),
44
+ contracts: z.array(z.object({
45
+ name: z.string(),
46
+ sourceName: z.string(),
47
+ kind: z.enum(["contract", "interface", "library"]),
48
+ })),
49
+ },
50
+ }, async (args) => {
51
+ const res = await guarded(ctx, () => ctx.artifacts.list(args));
52
+ if (!res.ok)
53
+ return errorResult(res.error);
54
+ const records = res.value;
55
+ const structured = {
56
+ count: records.length,
57
+ contracts: records
58
+ .map((r) => ({ name: r.contractName, sourceName: r.sourceName, kind: r.kind }))
59
+ .sort((a, b) => a.name.localeCompare(b.name)),
60
+ };
61
+ return {
62
+ content: [
63
+ {
64
+ type: "text",
65
+ text: `${structured.count} contract(s):\n${structured.contracts
66
+ .map((c) => ` [${c.kind.padEnd(9)}] ${c.name} (${c.sourceName})`)
67
+ .join("\n")}`,
68
+ },
69
+ ],
70
+ structuredContent: structured,
71
+ };
72
+ });
73
+ }
74
+ // ---------- dexe_get_abi ----------
75
+ function registerGetAbi(server, ctx) {
76
+ server.registerTool("dexe_get_abi", {
77
+ title: "Get contract ABI",
78
+ description: "Returns the ABI JSON for a compiled contract by name.",
79
+ inputSchema: {
80
+ contract: z.string().describe("Contract name, e.g. 'GovPool'"),
81
+ },
82
+ outputSchema: {
83
+ contract: z.string(),
84
+ sourceName: z.string(),
85
+ abi: z.array(z.unknown()),
86
+ },
87
+ }, async ({ contract }) => {
88
+ const res = await guarded(ctx, () => ctx.artifacts.getOne(contract));
89
+ if (!res.ok)
90
+ return errorResult(res.error);
91
+ const r = res.value;
92
+ const structured = {
93
+ contract: r.contractName,
94
+ sourceName: r.sourceName,
95
+ abi: r.abi,
96
+ };
97
+ return {
98
+ content: [
99
+ {
100
+ type: "text",
101
+ text: `ABI for ${r.contractName} (${r.sourceName}) — ${structured.abi.length} entries`,
102
+ },
103
+ ],
104
+ structuredContent: structured,
105
+ };
106
+ });
107
+ }
108
+ // ---------- dexe_get_selectors ----------
109
+ function registerGetSelectors(server, ctx) {
110
+ server.registerTool("dexe_get_selectors", {
111
+ title: "Get contract selectors",
112
+ description: "Returns all function selectors, event topic hashes, and error selectors for a contract.",
113
+ inputSchema: {
114
+ contract: z.string(),
115
+ },
116
+ outputSchema: {
117
+ contract: z.string(),
118
+ count: z.number(),
119
+ selectors: z.array(z.object({
120
+ signature: z.string(),
121
+ selector: z.string(),
122
+ kind: z.enum(["function", "event", "error"]),
123
+ })),
124
+ },
125
+ }, async ({ contract }) => {
126
+ const res = await guarded(ctx, () => ctx.selectors.forContract(contract));
127
+ if (!res.ok)
128
+ return errorResult(res.error);
129
+ const hits = res.value;
130
+ const structured = {
131
+ contract,
132
+ count: hits.length,
133
+ selectors: hits.map((h) => ({
134
+ signature: h.signature,
135
+ selector: h.selector,
136
+ kind: h.kind,
137
+ })),
138
+ };
139
+ return {
140
+ content: [
141
+ {
142
+ type: "text",
143
+ text: `${structured.count} selector(s) for ${contract}:\n${structured.selectors
144
+ .slice(0, 50)
145
+ .map((s) => ` ${s.selector} [${s.kind}] ${s.signature}`)
146
+ .join("\n")}${structured.count > 50 ? `\n … ${structured.count - 50} more` : ""}`,
147
+ },
148
+ ],
149
+ structuredContent: structured,
150
+ };
151
+ });
152
+ }
153
+ // ---------- dexe_find_selector ----------
154
+ function registerFindSelector(server, ctx) {
155
+ server.registerTool("dexe_find_selector", {
156
+ title: "Reverse selector lookup",
157
+ description: "Given a 4-byte selector (function/error, '0x…') or 32-byte event topic hash, returns all matching contracts and signatures across the compiled codebase. Supports collisions.",
158
+ inputSchema: {
159
+ selector: z.string().regex(/^0x[0-9a-fA-F]+$/, "Must be a 0x-prefixed hex string"),
160
+ },
161
+ outputSchema: {
162
+ selector: z.string(),
163
+ count: z.number(),
164
+ hits: z.array(z.object({
165
+ contract: z.string(),
166
+ sourceName: z.string(),
167
+ signature: z.string(),
168
+ kind: z.enum(["function", "event", "error"]),
169
+ })),
170
+ },
171
+ }, async ({ selector }) => {
172
+ const res = await guarded(ctx, () => ctx.selectors.find(selector));
173
+ if (!res.ok)
174
+ return errorResult(res.error);
175
+ const hits = res.value;
176
+ const structured = {
177
+ selector,
178
+ count: hits.length,
179
+ hits: hits.map((h) => ({
180
+ contract: h.contract,
181
+ sourceName: h.sourceName,
182
+ signature: h.signature,
183
+ kind: h.kind,
184
+ })),
185
+ };
186
+ return {
187
+ content: [
188
+ {
189
+ type: "text",
190
+ text: hits.length === 0
191
+ ? `No matches for ${selector}`
192
+ : `${hits.length} match(es) for ${selector}:\n${structured.hits
193
+ .map((h) => ` ${h.contract}.${h.signature} [${h.kind}]`)
194
+ .join("\n")}`,
195
+ },
196
+ ],
197
+ structuredContent: structured,
198
+ };
199
+ });
200
+ }
201
+ // ---------- dexe_get_natspec ----------
202
+ function registerGetNatspec(server, ctx) {
203
+ server.registerTool("dexe_get_natspec", {
204
+ title: "Get NatSpec docs",
205
+ description: "Reads devdoc/userdoc for a contract from build-info. Optionally scope to a single member (function/event signature or name).",
206
+ inputSchema: {
207
+ contract: z.string(),
208
+ member: z.string().optional().describe("Function/event name or full signature"),
209
+ },
210
+ outputSchema: {
211
+ contract: z.string(),
212
+ devdoc: z.unknown().optional(),
213
+ userdoc: z.unknown().optional(),
214
+ },
215
+ }, async ({ contract, member }) => {
216
+ const res = await guarded(ctx, () => {
217
+ const record = ctx.artifacts.getOne(contract);
218
+ const info = ctx.artifacts.loadBuildInfoFor(record);
219
+ if (!info) {
220
+ throw new Error(`No build-info found for ${contract}. devdoc/userdoc may be disabled in the protocol's hardhat config outputSelection.`);
221
+ }
222
+ const devdoc = (info.devdoc ?? null);
223
+ const userdoc = (info.userdoc ?? null);
224
+ if (member) {
225
+ return {
226
+ devdoc: devdoc?.methods ? filterMember(devdoc.methods, member) : undefined,
227
+ userdoc: userdoc?.methods ? filterMember(userdoc.methods, member) : undefined,
228
+ };
229
+ }
230
+ return { devdoc: devdoc ?? undefined, userdoc: userdoc ?? undefined };
231
+ });
232
+ if (!res.ok)
233
+ return errorResult(res.error);
234
+ const structured = { contract, ...res.value };
235
+ return {
236
+ content: [
237
+ {
238
+ type: "text",
239
+ text: `NatSpec for ${contract}${member ? `::${member}` : ""}:\n${JSON.stringify({ devdoc: structured.devdoc, userdoc: structured.userdoc }, null, 2).slice(0, 4000)}`,
240
+ },
241
+ ],
242
+ structuredContent: structured,
243
+ };
244
+ });
245
+ }
246
+ function filterMember(methods, member) {
247
+ const m = member.toLowerCase();
248
+ const out = {};
249
+ for (const [key, value] of Object.entries(methods)) {
250
+ if (key.toLowerCase().includes(m))
251
+ out[key] = value;
252
+ }
253
+ return out;
254
+ }
255
+ // ---------- dexe_get_source ----------
256
+ function registerGetSource(server, ctx) {
257
+ server.registerTool("dexe_get_source", {
258
+ title: "Get contract source",
259
+ description: "Returns the source file path for a contract. Optionally slices around a symbol (function/event name) using a naive regex scan — AST-based extraction is a future enhancement.",
260
+ inputSchema: {
261
+ contract: z.string(),
262
+ symbol: z.string().optional(),
263
+ },
264
+ outputSchema: {
265
+ contract: z.string(),
266
+ sourceName: z.string(),
267
+ sourcePath: z.string(),
268
+ snippet: z.string().optional(),
269
+ snippetStartLine: z.number().optional(),
270
+ },
271
+ }, async ({ contract, symbol }) => {
272
+ const res = await guarded(ctx, () => {
273
+ const record = ctx.artifacts.getOne(contract);
274
+ const sourcePath = isAbsolute(record.sourceName)
275
+ ? record.sourceName
276
+ : join(ctx.config.protocolPath, record.sourceName);
277
+ let snippet;
278
+ let snippetStartLine;
279
+ if (symbol && existsSync(sourcePath)) {
280
+ const src = readFileSync(sourcePath, "utf8");
281
+ const lines = src.split(/\r?\n/);
282
+ const pattern = new RegExp(`\\b(function|event|error|modifier)\\s+${escapeRegExp(symbol)}\\b`);
283
+ const idx = lines.findIndex((l) => pattern.test(l));
284
+ if (idx >= 0) {
285
+ const start = Math.max(0, idx - 2);
286
+ const end = Math.min(lines.length, idx + 30);
287
+ snippet = lines.slice(start, end).join("\n");
288
+ snippetStartLine = start + 1;
289
+ }
290
+ }
291
+ return { sourceName: record.sourceName, sourcePath, snippet, snippetStartLine };
292
+ });
293
+ if (!res.ok)
294
+ return errorResult(res.error);
295
+ const structured = { contract, ...res.value };
296
+ return {
297
+ content: [
298
+ {
299
+ type: "text",
300
+ text: structured.snippet
301
+ ? `${structured.sourcePath}:${structured.snippetStartLine}\n\n${structured.snippet}`
302
+ : structured.sourcePath,
303
+ },
304
+ ],
305
+ structuredContent: structured,
306
+ };
307
+ });
308
+ }
309
+ function escapeRegExp(s) {
310
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
311
+ }
312
+ //# sourceMappingURL=introspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/tools/introspect.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "dexe-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server wrapping DeXe Protocol for Claude Code dev tooling (build/test, contract introspection, governance-domain tools)",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Edward Arinin <edward.arinin@gmail.com>",
8
+ "homepage": "https://github.com/edward-arinin-web-dev/dexe-mcp#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/edward-arinin-web-dev/dexe-mcp.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/edward-arinin-web-dev/dexe-mcp/issues"
15
+ },
16
+ "keywords": [
17
+ "mcp",
18
+ "model-context-protocol",
19
+ "claude",
20
+ "claude-code",
21
+ "hardhat",
22
+ "solidity",
23
+ "ethereum",
24
+ "dexe",
25
+ "dao",
26
+ "governance",
27
+ "smart-contracts",
28
+ "dev-tools"
29
+ ],
30
+ "bin": {
31
+ "dexe-mcp": "dist/index.js"
32
+ },
33
+ "main": "dist/index.js",
34
+ "files": [
35
+ "dist",
36
+ "README.md",
37
+ "FUTURE.md",
38
+ "PLAN.md",
39
+ ".mcp.example.json"
40
+ ],
41
+ "scripts": {
42
+ "build": "tsc",
43
+ "dev": "tsx watch src/index.ts",
44
+ "start": "node dist/index.js",
45
+ "test": "vitest run",
46
+ "test:watch": "vitest",
47
+ "typecheck": "tsc --noEmit",
48
+ "prepublishOnly": "npm run typecheck && npm run build"
49
+ },
50
+ "dependencies": {
51
+ "@modelcontextprotocol/sdk": "^1.0.0",
52
+ "ethers": "^6.13.0",
53
+ "execa": "^9.5.0",
54
+ "p-limit": "^6.2.0",
55
+ "zod": "^3.23.8"
56
+ },
57
+ "devDependencies": {
58
+ "@types/node": "^22.10.0",
59
+ "tsx": "^4.19.0",
60
+ "typescript": "^5.7.0",
61
+ "vitest": "^2.1.0"
62
+ },
63
+ "engines": {
64
+ "node": ">=20.0.0"
65
+ },
66
+ "publishConfig": {
67
+ "access": "public"
68
+ }
69
+ }