dexe-mcp 0.1.3 → 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.
Files changed (100) hide show
  1. package/.mcp.example.json +12 -2
  2. package/CHANGELOG.md +48 -0
  3. package/FUTURE.md +26 -5
  4. package/README.md +80 -195
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/bootstrap.js +10 -1
  7. package/dist/bootstrap.js.map +1 -1
  8. package/dist/config.d.ts +10 -0
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +24 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/hardhat.d.ts.map +1 -1
  13. package/dist/hardhat.js +10 -5
  14. package/dist/hardhat.js.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/lib/addresses.d.ts +57 -0
  17. package/dist/lib/addresses.d.ts.map +1 -0
  18. package/dist/lib/addresses.js +83 -0
  19. package/dist/lib/addresses.js.map +1 -0
  20. package/dist/lib/calldata.d.ts +32 -0
  21. package/dist/lib/calldata.d.ts.map +1 -0
  22. package/dist/lib/calldata.js +28 -0
  23. package/dist/lib/calldata.js.map +1 -0
  24. package/dist/lib/govEnums.d.ts +12 -0
  25. package/dist/lib/govEnums.d.ts.map +1 -0
  26. package/dist/lib/govEnums.js +35 -0
  27. package/dist/lib/govEnums.js.map +1 -0
  28. package/dist/lib/ipfs.d.ts +60 -0
  29. package/dist/lib/ipfs.d.ts.map +1 -0
  30. package/dist/lib/ipfs.js +167 -0
  31. package/dist/lib/ipfs.js.map +1 -0
  32. package/dist/lib/multicall.d.ts +33 -0
  33. package/dist/lib/multicall.d.ts.map +1 -0
  34. package/dist/lib/multicall.js +46 -0
  35. package/dist/lib/multicall.js.map +1 -0
  36. package/dist/lib/proposalCatalog.d.ts +45 -0
  37. package/dist/lib/proposalCatalog.d.ts.map +1 -0
  38. package/dist/lib/proposalCatalog.js +416 -0
  39. package/dist/lib/proposalCatalog.js.map +1 -0
  40. package/dist/lib/subgraph.d.ts +15 -0
  41. package/dist/lib/subgraph.d.ts.map +1 -0
  42. package/dist/lib/subgraph.js +37 -0
  43. package/dist/lib/subgraph.js.map +1 -0
  44. package/dist/runtime.d.ts +51 -13
  45. package/dist/runtime.d.ts.map +1 -1
  46. package/dist/runtime.js +149 -26
  47. package/dist/runtime.js.map +1 -1
  48. package/dist/tools/dao.d.ts +4 -0
  49. package/dist/tools/dao.d.ts.map +1 -0
  50. package/dist/tools/dao.js +242 -0
  51. package/dist/tools/dao.js.map +1 -0
  52. package/dist/tools/daoDeploy.d.ts +4 -0
  53. package/dist/tools/daoDeploy.d.ts.map +1 -0
  54. package/dist/tools/daoDeploy.js +323 -0
  55. package/dist/tools/daoDeploy.js.map +1 -0
  56. package/dist/tools/index.d.ts.map +1 -1
  57. package/dist/tools/index.js +24 -0
  58. package/dist/tools/index.js.map +1 -1
  59. package/dist/tools/ipfs.d.ts +6 -0
  60. package/dist/tools/ipfs.d.ts.map +1 -0
  61. package/dist/tools/ipfs.js +310 -0
  62. package/dist/tools/ipfs.js.map +1 -0
  63. package/dist/tools/proposal.d.ts +4 -0
  64. package/dist/tools/proposal.d.ts.map +1 -0
  65. package/dist/tools/proposal.js +199 -0
  66. package/dist/tools/proposal.js.map +1 -0
  67. package/dist/tools/proposalBuild.d.ts +4 -0
  68. package/dist/tools/proposalBuild.d.ts.map +1 -0
  69. package/dist/tools/proposalBuild.js +357 -0
  70. package/dist/tools/proposalBuild.js.map +1 -0
  71. package/dist/tools/proposalBuildComplex.d.ts +4 -0
  72. package/dist/tools/proposalBuildComplex.d.ts.map +1 -0
  73. package/dist/tools/proposalBuildComplex.js +700 -0
  74. package/dist/tools/proposalBuildComplex.js.map +1 -0
  75. package/dist/tools/proposalBuildInternal.d.ts +4 -0
  76. package/dist/tools/proposalBuildInternal.d.ts.map +1 -0
  77. package/dist/tools/proposalBuildInternal.js +211 -0
  78. package/dist/tools/proposalBuildInternal.js.map +1 -0
  79. package/dist/tools/proposalBuildMore.d.ts +4 -0
  80. package/dist/tools/proposalBuildMore.d.ts.map +1 -0
  81. package/dist/tools/proposalBuildMore.js +436 -0
  82. package/dist/tools/proposalBuildMore.js.map +1 -0
  83. package/dist/tools/proposalBuildOffchain.d.ts +4 -0
  84. package/dist/tools/proposalBuildOffchain.d.ts.map +1 -0
  85. package/dist/tools/proposalBuildOffchain.js +386 -0
  86. package/dist/tools/proposalBuildOffchain.js.map +1 -0
  87. package/dist/tools/read.d.ts +4 -0
  88. package/dist/tools/read.d.ts.map +1 -0
  89. package/dist/tools/read.js +353 -0
  90. package/dist/tools/read.js.map +1 -0
  91. package/dist/tools/vote.d.ts +4 -0
  92. package/dist/tools/vote.d.ts.map +1 -0
  93. package/dist/tools/vote.js +196 -0
  94. package/dist/tools/vote.js.map +1 -0
  95. package/dist/tools/voteBuild.d.ts +4 -0
  96. package/dist/tools/voteBuild.d.ts.map +1 -0
  97. package/dist/tools/voteBuild.js +563 -0
  98. package/dist/tools/voteBuild.js.map +1 -0
  99. package/package.json +9 -4
  100. package/PLAN.md +0 -132
@@ -0,0 +1,386 @@
1
+ import { z } from "zod";
2
+ import { isAddress } from "ethers";
3
+ /**
4
+ * Phase 3d — off-chain proposals via the DeXe backend API.
5
+ *
6
+ * Every tool returns a ready-to-send HTTP request object:
7
+ * { request: { method, url, headers, body }, authRequired?: boolean }
8
+ * The MCP NEVER sends HTTP itself. Agent wallet/client signs + dispatches.
9
+ *
10
+ * Auth is a 2-step dance:
11
+ * 1) dexe_auth_request_nonce → GET a nonce message for the user address
12
+ * 2) user wallet signs the message
13
+ * 3) dexe_auth_login_request → POST signed message, get access_token
14
+ * 4) all subsequent requests use `Authorization: Bearer <access_token>`
15
+ *
16
+ * JSON:API format everywhere: { data: { type, attributes: {...} } }.
17
+ *
18
+ * Base URL: DEXE_BACKEND_API_URL (e.g. https://api.dexe.io).
19
+ */
20
+ const PROPOSAL_ENDPOINT = "/integrations/voting/proposals";
21
+ const VOTE_ENDPOINT = "/integrations/voting/vote";
22
+ const NONCE_ENDPOINT = "/integrations/nonce-auth-svc/nonce";
23
+ const LOGIN_ENDPOINT = "/integrations/nonce-auth-svc/login";
24
+ function errorResult(message) {
25
+ return { content: [{ type: "text", text: message }], isError: true };
26
+ }
27
+ function requireBase() {
28
+ const base = process.env.DEXE_BACKEND_API_URL?.trim();
29
+ if (!base) {
30
+ return {
31
+ error: "DEXE_BACKEND_API_URL is not set. Add it to the MCP env block (e.g. https://api.dexe.io or https://api.beta.dexe.io).",
32
+ };
33
+ }
34
+ return base.replace(/\/$/, "");
35
+ }
36
+ function requestResult(method, url, body, opts = {}) {
37
+ const headers = { "Content-Type": "application/json" };
38
+ if (opts.authRequired) {
39
+ headers["Authorization"] = "Bearer <ACCESS_TOKEN>";
40
+ }
41
+ const request = { method, url, headers, body };
42
+ const preview = `${method} ${url}${opts.authRequired ? "\n(Authorization: Bearer <ACCESS_TOKEN>)" : ""}\n${JSON.stringify(body, null, 2)}`;
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: `${opts.note ?? ""}${opts.note ? "\n\n" : ""}${preview}`,
48
+ },
49
+ ],
50
+ structuredContent: { request, authRequired: !!opts.authRequired },
51
+ };
52
+ }
53
+ function requestOutputSchema() {
54
+ return {
55
+ request: z.object({
56
+ method: z.string(),
57
+ url: z.string(),
58
+ headers: z.record(z.string()),
59
+ body: z.unknown(),
60
+ }),
61
+ authRequired: z.boolean(),
62
+ };
63
+ }
64
+ // ---------- register ----------
65
+ export function registerProposalBuildOffchainTools(server, _ctx) {
66
+ registerAuthNonce(server);
67
+ registerAuthLogin(server);
68
+ registerSingleOption(server);
69
+ registerMultiOption(server);
70
+ registerForAgainst(server);
71
+ registerSettingsProposal(server);
72
+ registerCastVote(server);
73
+ registerCancelVote(server);
74
+ }
75
+ // ---------- auth: request nonce ----------
76
+ function registerAuthNonce(server) {
77
+ server.registerTool("dexe_auth_request_nonce", {
78
+ title: "Auth step 1/2: request a nonce to sign",
79
+ description: "Returns the HTTP request for POST /integrations/nonce-auth-svc/nonce. The response will contain `{ message: string }` — feed that to the wallet to sign, then call dexe_auth_login_request.",
80
+ inputSchema: {
81
+ address: z.string().describe("User wallet address"),
82
+ },
83
+ outputSchema: requestOutputSchema(),
84
+ }, async ({ address }) => {
85
+ if (!isAddress(address))
86
+ return errorResult(`Invalid address: ${address}`);
87
+ const base = requireBase();
88
+ if (typeof base !== "string")
89
+ return errorResult(base.error);
90
+ const body = {
91
+ data: { type: "auth_nonce_request", attributes: { address } },
92
+ };
93
+ return requestResult("POST", `${base}${NONCE_ENDPOINT}`, body, {
94
+ note: "Next: sign the `message` field of the response, then call dexe_auth_login_request with the signature.",
95
+ });
96
+ });
97
+ }
98
+ // ---------- auth: login with signed message ----------
99
+ function registerAuthLogin(server) {
100
+ server.registerTool("dexe_auth_login_request", {
101
+ title: "Auth step 2/2: exchange signed nonce for access_token",
102
+ description: "Returns the HTTP request for POST /integrations/nonce-auth-svc/login. Response: `{ access_token: { id }, refresh_token: { id } }`. Store access_token.id and use it as Bearer in all subsequent calls.",
103
+ inputSchema: {
104
+ address: z.string(),
105
+ signedMessage: z.string().describe("The nonce message signed by the user's wallet (0x-hex)"),
106
+ },
107
+ outputSchema: requestOutputSchema(),
108
+ }, async ({ address, signedMessage }) => {
109
+ if (!isAddress(address))
110
+ return errorResult(`Invalid address: ${address}`);
111
+ const base = requireBase();
112
+ if (typeof base !== "string")
113
+ return errorResult(base.error);
114
+ const body = {
115
+ data: {
116
+ type: "login_request",
117
+ attributes: {
118
+ auth_pair: { address, signed_message: signedMessage },
119
+ },
120
+ },
121
+ };
122
+ return requestResult("POST", `${base}${LOGIN_ENDPOINT}`, body, {
123
+ note: "Response: { access_token: { id }, refresh_token: { id } }. Store access_token.id.",
124
+ });
125
+ });
126
+ }
127
+ function buildCustomParameters(p, votingType, quorum) {
128
+ return {
129
+ title: p.title,
130
+ description: p.description,
131
+ type: p.type ?? String(Math.floor(Date.now() / 1000)),
132
+ use_delegated: p.useDelegated ?? true,
133
+ voting_duration: Number(p.votingDurationSeconds),
134
+ voting_type: votingType,
135
+ quorum,
136
+ minimal_vote_power: p.minimalVotePower ?? "0",
137
+ minimal_create_proposal_power: p.minimalCreateProposalPower ?? "0",
138
+ minimal_comment_read_power: p.minimalCommentReadPower ?? "0",
139
+ minimal_comment_create_power: p.minimalCommentCreatePower ?? "0",
140
+ pool_address: p.poolAddress,
141
+ };
142
+ }
143
+ function buildProposalBody(p, votingType, quorum) {
144
+ return {
145
+ data: {
146
+ type: "proposals",
147
+ attributes: {
148
+ type: p.type ?? String(Math.floor(Date.now() / 1000)),
149
+ title: p.title,
150
+ chain_id: p.chainId,
151
+ description: p.description,
152
+ pool_address: p.poolAddress,
153
+ vote_options: p.voteOptions,
154
+ custom_parameters: buildCustomParameters(p, votingType, quorum),
155
+ },
156
+ },
157
+ };
158
+ }
159
+ const commonInputSchema = {
160
+ poolAddress: z.string(),
161
+ chainId: z.number().int().positive(),
162
+ title: z.string().min(1),
163
+ description: z.string().default(""),
164
+ voteOptions: z.array(z.string()).min(2),
165
+ votingDurationSeconds: z.string(),
166
+ useDelegated: z.boolean().default(true),
167
+ minimalVotePower: z.string().default("0"),
168
+ minimalCreateProposalPower: z.string().default("0"),
169
+ minimalCommentReadPower: z.string().default("0"),
170
+ minimalCommentCreatePower: z.string().default("0"),
171
+ };
172
+ // ---------- single_option_voting ----------
173
+ function registerSingleOption(server) {
174
+ server.registerTool("dexe_proposal_build_offchain_single_option", {
175
+ title: "Off-chain: single-option voting proposal (pick one of N)",
176
+ description: "Builds POST /integrations/voting/proposals with voting_type='one_of'. Voter picks exactly one of `voteOptions`. Requires auth (Bearer access_token).",
177
+ inputSchema: {
178
+ ...commonInputSchema,
179
+ generalClosingPercent: z.number().min(0).max(100).default(50),
180
+ anticipatoryClosingPercent: z.number().min(0).max(100).default(0),
181
+ againstPercent: z.number().min(0).max(100).default(0),
182
+ },
183
+ outputSchema: requestOutputSchema(),
184
+ }, async (input) => {
185
+ if (!isAddress(input.poolAddress))
186
+ return errorResult(`Invalid poolAddress: ${input.poolAddress}`);
187
+ const base = requireBase();
188
+ if (typeof base !== "string")
189
+ return errorResult(base.error);
190
+ const body = buildProposalBody(input, "one_of", {
191
+ one_of_quorum: {
192
+ general_closing_percent: input.generalClosingPercent,
193
+ anticipatory_closing_percent: input.anticipatoryClosingPercent,
194
+ against_percent: input.againstPercent,
195
+ },
196
+ });
197
+ return requestResult("POST", `${base}${PROPOSAL_ENDPOINT}`, body, {
198
+ authRequired: true,
199
+ note: `Off-chain 'one_of' proposal for ${input.poolAddress} — ${input.voteOptions.length} options.`,
200
+ });
201
+ });
202
+ }
203
+ // ---------- multi_option_voting ----------
204
+ function registerMultiOption(server) {
205
+ server.registerTool("dexe_proposal_build_offchain_multi_option", {
206
+ title: "Off-chain: multi-option voting proposal (pick M of N)",
207
+ description: "POST /integrations/voting/proposals with voting_type='multiple_of'. Voter picks any subset of `voteOptions`.",
208
+ inputSchema: {
209
+ ...commonInputSchema,
210
+ boundaryPercent: z.number().min(0).max(100).default(50),
211
+ againstPercent: z.number().min(0).max(100).default(0),
212
+ },
213
+ outputSchema: requestOutputSchema(),
214
+ }, async (input) => {
215
+ if (!isAddress(input.poolAddress))
216
+ return errorResult(`Invalid poolAddress: ${input.poolAddress}`);
217
+ const base = requireBase();
218
+ if (typeof base !== "string")
219
+ return errorResult(base.error);
220
+ const body = buildProposalBody(input, "multiple_of", {
221
+ multiple_of_quorum: {
222
+ boundary_percent: input.boundaryPercent,
223
+ against_percent: input.againstPercent,
224
+ },
225
+ });
226
+ return requestResult("POST", `${base}${PROPOSAL_ENDPOINT}`, body, {
227
+ authRequired: true,
228
+ note: `Off-chain 'multiple_of' proposal for ${input.poolAddress} — ${input.voteOptions.length} options.`,
229
+ });
230
+ });
231
+ }
232
+ // ---------- for_against_voting ----------
233
+ function registerForAgainst(server) {
234
+ server.registerTool("dexe_proposal_build_offchain_for_against", {
235
+ title: "Off-chain: binary for/against voting proposal",
236
+ description: "POST /integrations/voting/proposals with voting_type='for_against'. `voteOptions` is usually ['For','Against'] but you can pass any 2 labels.",
237
+ inputSchema: {
238
+ ...commonInputSchema,
239
+ voteOptions: z
240
+ .array(z.string())
241
+ .default(["For", "Against"])
242
+ .describe("Exactly 2 labels; defaults to [For, Against]"),
243
+ forPercent: z.number().min(0).max(100).default(50),
244
+ againstPercent: z.number().min(0).max(100).default(50),
245
+ },
246
+ outputSchema: requestOutputSchema(),
247
+ }, async (input) => {
248
+ if (!isAddress(input.poolAddress))
249
+ return errorResult(`Invalid poolAddress: ${input.poolAddress}`);
250
+ if (input.voteOptions.length !== 2)
251
+ return errorResult("for_against expects exactly 2 voteOptions");
252
+ const base = requireBase();
253
+ if (typeof base !== "string")
254
+ return errorResult(base.error);
255
+ const body = buildProposalBody(input, "for_against", {
256
+ for_against_quorum: {
257
+ for_percent: input.forPercent,
258
+ against_percent: input.againstPercent,
259
+ },
260
+ });
261
+ return requestResult("POST", `${base}${PROPOSAL_ENDPOINT}`, body, {
262
+ authRequired: true,
263
+ note: `Off-chain 'for_against' proposal for ${input.poolAddress}.`,
264
+ });
265
+ });
266
+ }
267
+ // ---------- change_voting_settings_offchain / new_template ----------
268
+ function registerSettingsProposal(server) {
269
+ server.registerTool("dexe_proposal_build_offchain_settings", {
270
+ title: "Off-chain: change voting settings or save a new template",
271
+ description: "POST /integrations/voting/proposals with attributes.type='edit_proposal_type' (change DAO-wide off-chain settings) or 'create_proposal_type' (save a reusable voting template). Body shape mirrors the voting-type-specific tools.",
272
+ inputSchema: {
273
+ mode: z.enum(["edit_proposal_type", "create_proposal_type"]),
274
+ poolAddress: z.string(),
275
+ chainId: z.number().int().positive(),
276
+ title: z.string().min(1),
277
+ description: z.string().default(""),
278
+ votingType: z.enum(["one_of", "multiple_of", "for_against"]).default("one_of"),
279
+ voteOptions: z.array(z.string()).default([]),
280
+ votingDurationSeconds: z.string(),
281
+ quorum: z
282
+ .record(z.unknown())
283
+ .describe("Quorum object matching the chosen votingType"),
284
+ useDelegated: z.boolean().default(true),
285
+ minimalVotePower: z.string().default("0"),
286
+ minimalCreateProposalPower: z.string().default("0"),
287
+ minimalCommentReadPower: z.string().default("0"),
288
+ minimalCommentCreatePower: z.string().default("0"),
289
+ },
290
+ outputSchema: requestOutputSchema(),
291
+ }, async (input) => {
292
+ if (!isAddress(input.poolAddress))
293
+ return errorResult(`Invalid poolAddress: ${input.poolAddress}`);
294
+ const base = requireBase();
295
+ if (typeof base !== "string")
296
+ return errorResult(base.error);
297
+ const body = {
298
+ data: {
299
+ type: "proposals",
300
+ attributes: {
301
+ type: input.mode, // "edit_proposal_type" or "create_proposal_type"
302
+ title: input.title,
303
+ chain_id: input.chainId,
304
+ description: input.description,
305
+ pool_address: input.poolAddress,
306
+ vote_options: input.voteOptions,
307
+ custom_parameters: {
308
+ title: input.title,
309
+ description: input.description,
310
+ type: input.mode,
311
+ use_delegated: input.useDelegated,
312
+ voting_duration: Number(input.votingDurationSeconds),
313
+ voting_type: input.votingType,
314
+ quorum: input.quorum,
315
+ minimal_vote_power: input.minimalVotePower,
316
+ minimal_create_proposal_power: input.minimalCreateProposalPower,
317
+ minimal_comment_read_power: input.minimalCommentReadPower,
318
+ minimal_comment_create_power: input.minimalCommentCreatePower,
319
+ pool_address: input.poolAddress,
320
+ },
321
+ },
322
+ },
323
+ };
324
+ return requestResult("POST", `${base}${PROPOSAL_ENDPOINT}`, body, {
325
+ authRequired: true,
326
+ note: `Off-chain ${input.mode} for ${input.poolAddress}.`,
327
+ });
328
+ });
329
+ }
330
+ // ---------- cast_vote ----------
331
+ function registerCastVote(server) {
332
+ server.registerTool("dexe_offchain_build_vote", {
333
+ title: "Off-chain: cast a vote on an existing off-chain proposal",
334
+ description: "POST /integrations/voting/vote. `options` is an array of selected option strings (length 1 for one_of/for_against, ≥1 for multiple_of).",
335
+ inputSchema: {
336
+ proposalId: z.number().int().positive(),
337
+ voterAddress: z.string(),
338
+ options: z.array(z.string()).min(1),
339
+ },
340
+ outputSchema: requestOutputSchema(),
341
+ }, async ({ proposalId, voterAddress, options }) => {
342
+ if (!isAddress(voterAddress))
343
+ return errorResult(`Invalid voterAddress: ${voterAddress}`);
344
+ const base = requireBase();
345
+ if (typeof base !== "string")
346
+ return errorResult(base.error);
347
+ const body = {
348
+ data: {
349
+ type: "votes",
350
+ attributes: {
351
+ proposal_id: proposalId,
352
+ voter_address: voterAddress,
353
+ options,
354
+ },
355
+ },
356
+ };
357
+ return requestResult("POST", `${base}${VOTE_ENDPOINT}`, body, {
358
+ authRequired: true,
359
+ note: `Off-chain vote on proposal #${proposalId} by ${voterAddress}.`,
360
+ });
361
+ });
362
+ }
363
+ // ---------- cancel_vote ----------
364
+ function registerCancelVote(server) {
365
+ server.registerTool("dexe_offchain_build_cancel_vote", {
366
+ title: "Off-chain: cancel a previously cast vote",
367
+ description: "DELETE /integrations/voting/vote/{proposalId}/{voterAddress}. No body.",
368
+ inputSchema: {
369
+ proposalId: z.number().int().positive(),
370
+ voterAddress: z.string(),
371
+ },
372
+ outputSchema: requestOutputSchema(),
373
+ }, async ({ proposalId, voterAddress }) => {
374
+ if (!isAddress(voterAddress))
375
+ return errorResult(`Invalid voterAddress: ${voterAddress}`);
376
+ const base = requireBase();
377
+ if (typeof base !== "string")
378
+ return errorResult(base.error);
379
+ const url = `${base}${VOTE_ENDPOINT}/${proposalId}/${voterAddress}`;
380
+ return requestResult("DELETE", url, null, {
381
+ authRequired: true,
382
+ note: `Cancel off-chain vote on proposal #${proposalId} by ${voterAddress}.`,
383
+ });
384
+ });
385
+ }
386
+ //# sourceMappingURL=proposalBuildOffchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposalBuildOffchain.js","sourceRoot":"","sources":["../../src/tools/proposalBuildOffchain.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 registerReadTools(server: McpServer, ctx: ToolContext): void;
4
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAkChD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAO3E"}