@signatrust/mcp-server 0.1.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 signatrstio, LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # @signatrust/mcp-server
2
+
3
+ Model Context Protocol (MCP) server for the SignaTrust document signing API. Enables AI assistants like Claude to create envelopes, manage templates, check signing status, and verify blockchain anchors via natural language.
4
+
5
+ ## Quick Start
6
+
7
+ ### Claude Code
8
+
9
+ ```bash
10
+ claude mcp add signatrust -- npx -y @signatrust/mcp-server
11
+ ```
12
+
13
+ Then set your API key in the MCP server environment.
14
+
15
+ ### Claude Desktop
16
+
17
+ Add to your `claude_desktop_config.json`:
18
+
19
+ ```json
20
+ {
21
+ "mcpServers": {
22
+ "signatrust": {
23
+ "command": "npx",
24
+ "args": ["-y", "@signatrust/mcp-server"],
25
+ "env": {
26
+ "SIGNATRUST_API_KEY": "sk_live_your_key_here"
27
+ }
28
+ }
29
+ }
30
+ }
31
+ ```
32
+
33
+ ## Available Tools
34
+
35
+ | Tool | Description | Required Scope |
36
+ |------|-------------|---------------|
37
+ | `list_envelopes` | List envelopes with status filter and pagination | `envelopes:read` |
38
+ | `get_envelope` | Get full envelope details (signers, docs, blockchain) | `envelopes:read` |
39
+ | `create_envelope` | Create and send envelope for signing. Accepts `documentIds` (after `upload_document`) or `templateId` (backend copies the template). Supports three-tier `securityLevel`. | `envelopes:write` |
40
+ | `list_templates` | List available document templates | `templates:read` |
41
+ | `upload_document` | Read a local file and upload it to SignaTrust, returning a document ID for `create_envelope` | `documents:write` |
42
+ | `analyze_document` | Run AI contract analysis on an envelope (Gemini-powered risk/sentiment review, plan-gated) | `ai:analyze` |
43
+ | `verify_blockchain` | Verify Solana anchor and return composite hash + file hash + explorer URL | `envelopes:read` |
44
+
45
+ **Three-tier security.** `create_envelope` accepts `securityLevel`: `STANDARD` (bearer token only), `VERIFIED` (adds SMS/email OTP — recommended for employment, vendor, or healthcare consent), or `CERTIFIED` (adds WebAuthn biometric + device binding — recommended for real estate, high-value, or regulatory signings).
46
+
47
+ ## API Key Scopes
48
+
49
+ Create an API key at **Settings > API Keys** in your SignaTrust dashboard. Assign scopes based on what tools you need:
50
+
51
+ | Scope | Tools Enabled |
52
+ |-------|--------------|
53
+ | `envelopes:read` | list_envelopes, get_envelope, verify_blockchain |
54
+ | `envelopes:write` | create_envelope |
55
+ | `templates:read` | list_templates |
56
+ | `documents:write` | upload_document |
57
+ | `ai:analyze` | analyze_document |
58
+
59
+ ## Environment Variables
60
+
61
+ | Variable | Required | Default | Description |
62
+ |----------|----------|---------|-------------|
63
+ | `SIGNATRUST_API_KEY` | Yes | - | API key starting with `sk_live_` |
64
+ | `SIGNATRUST_API_URL` | No | `https://app.signatrust.io` | API base URL |
65
+
66
+ ## Natural Language Examples
67
+
68
+ Once connected, you can ask your AI assistant things like:
69
+
70
+ - "List all my pending envelopes"
71
+ - "Upload ~/Documents/nda.pdf and send it to alice@example.com with VERIFIED security"
72
+ - "Show me available templates, then create a lease agreement from the residential template for John Doe"
73
+ - "Check the blockchain verification for envelope env_abc123 and show me the composite hash"
74
+ - "Run AI analysis on envelope env_xyz — I want to know if there are any risky clauses before the signer reviews it"
75
+
76
+ ## Development
77
+
78
+ ```bash
79
+ # Install dependencies
80
+ npm install
81
+
82
+ # Build
83
+ npm run build
84
+
85
+ # Run tests
86
+ npm test
87
+
88
+ # Run tests with coverage
89
+ npm run test:coverage
90
+
91
+ # Type check
92
+ npm run typecheck
93
+
94
+ # Local smoke test
95
+ SIGNATRUST_API_KEY=sk_live_xxx SIGNATRUST_API_URL=http://localhost:3000 node dist/server.js
96
+ ```
97
+
98
+ ## Architecture
99
+
100
+ ```
101
+ src/
102
+ server.ts # Entry point — env validation, MCP server setup, stdio transport
103
+ handlers.ts # Tool definitions and handler dispatch (testable)
104
+ errors.ts # RFC 7807 ProblemDetails -> MCP tool error mapping
105
+ vendor/signatrust-sdk/ # Vendored HTTP client + types (zero external runtime deps)
106
+ *.test.ts # Co-located test files
107
+ ```
108
+
109
+ The HTTP client and API types are vendored under `src/vendor/signatrust-sdk/` so
110
+ this package has no external runtime dependencies beyond `@modelcontextprotocol/sdk`.
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Error formatting for MCP tool responses.
3
+ *
4
+ * Maps HTTP status codes and RFC 7807 ProblemDetails bodies into MCP error
5
+ * content. Sanitizes detail strings to prevent internal information
6
+ * (stack traces, file paths, request IDs) from leaking to the LLM client.
7
+ */
8
+ import type { ProblemDetails } from "./vendor/signatrust-sdk/index.js";
9
+ export interface McpErrorContent {
10
+ content: Array<{
11
+ type: "text";
12
+ text: string;
13
+ }>;
14
+ isError: true;
15
+ }
16
+ /**
17
+ * Format an API error into an MCP-friendly error response.
18
+ */
19
+ export declare function formatApiError(status: number, body?: ProblemDetails | string | null, retryAfter?: string | null): McpErrorContent;
20
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf;AAyCD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,EACrC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,eAAe,CA6CjB"}
package/dist/errors.js ADDED
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Error formatting for MCP tool responses.
3
+ *
4
+ * Maps HTTP status codes and RFC 7807 ProblemDetails bodies into MCP error
5
+ * content. Sanitizes detail strings to prevent internal information
6
+ * (stack traces, file paths, request IDs) from leaking to the LLM client.
7
+ */
8
+ const MAX_DETAIL_LENGTH = 300;
9
+ /**
10
+ * Strip content that looks like leaked internals (stack traces, file paths,
11
+ * AWS-style request IDs) and cap length. Applied to 4xx detail strings.
12
+ * 5xx details are discarded entirely.
13
+ */
14
+ function sanitizeDetail(detail) {
15
+ let clean = detail
16
+ // Stack-trace lines like " at Foo.bar (/some/path.ts:42:7)"
17
+ .replace(/^\s*at\s+.*$/gm, "")
18
+ // Absolute Unix paths inside node_modules
19
+ .replace(/\/[\w.-]+\/node_modules\/[\S]+/g, "[path]")
20
+ // Absolute Windows paths
21
+ .replace(/[A-Za-z]:\\[\S]+/g, "[path]")
22
+ // AWS request-id / x-amz-request-id patterns (32+ hex chars)
23
+ .replace(/[A-F0-9]{32,}/gi, "[request-id]")
24
+ // Collapse whitespace runs
25
+ .replace(/\s+/g, " ")
26
+ .trim();
27
+ if (clean.length > MAX_DETAIL_LENGTH) {
28
+ clean = clean.slice(0, MAX_DETAIL_LENGTH) + "…";
29
+ }
30
+ return clean;
31
+ }
32
+ function extractDetail(body) {
33
+ const raw = typeof body === "string"
34
+ ? body
35
+ : body?.detail ?? body?.title ?? undefined;
36
+ if (!raw)
37
+ return undefined;
38
+ const sanitized = sanitizeDetail(raw);
39
+ return sanitized.length > 0 ? sanitized : undefined;
40
+ }
41
+ /**
42
+ * Format an API error into an MCP-friendly error response.
43
+ */
44
+ export function formatApiError(status, body, retryAfter) {
45
+ const detail = extractDetail(body);
46
+ let message;
47
+ switch (status) {
48
+ case 400:
49
+ message = detail ?? "Bad request. Check your input parameters.";
50
+ break;
51
+ case 401:
52
+ message =
53
+ "Authentication failed. Check your SIGNATRUST_API_KEY environment variable.";
54
+ break;
55
+ case 403:
56
+ message =
57
+ detail ??
58
+ "Forbidden. Your API key may lack the required scope for this operation.";
59
+ break;
60
+ case 404:
61
+ message = detail ?? "Resource not found.";
62
+ break;
63
+ case 409:
64
+ message = detail ?? "Conflict. The resource may already exist.";
65
+ break;
66
+ case 429: {
67
+ const wait = retryAfter ? ` Retry after ${retryAfter}s.` : "";
68
+ message = `Rate limited.${wait} Please wait before making more requests.`;
69
+ break;
70
+ }
71
+ case 500:
72
+ message =
73
+ "Internal server error. The SignaTrust API encountered an unexpected error. If this persists, contact support at https://github.com/SignaTrustDev/signatrust-mcp/issues.";
74
+ break;
75
+ case 503:
76
+ message =
77
+ "Service unavailable. The SignaTrust API is temporarily down. Retry in a few moments.";
78
+ break;
79
+ default:
80
+ message = detail ?? `Request failed with status ${status}.`;
81
+ }
82
+ return {
83
+ content: [{ type: "text", text: message }],
84
+ isError: true,
85
+ };
86
+ }
87
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;;GAIG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,KAAK,GAAG,MAAM;QAChB,+DAA+D;SAC9D,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAC9B,0CAA0C;SACzC,OAAO,CAAC,iCAAiC,EAAE,QAAQ,CAAC;QACrD,yBAAyB;SACxB,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC;QACvC,6DAA6D;SAC5D,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC;QAC3C,2BAA2B;SAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IAEV,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACrC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,GAAG,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CACpB,IAAgD;IAEhD,MAAM,GAAG,GACP,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,IAAqC,EACrC,UAA0B;IAE1B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAe,CAAC;IAEpB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,GAAG,MAAM,IAAI,2CAA2C,CAAC;YAChE,MAAM;QACR,KAAK,GAAG;YACN,OAAO;gBACL,4EAA4E,CAAC;YAC/E,MAAM;QACR,KAAK,GAAG;YACN,OAAO;gBACL,MAAM;oBACN,yEAAyE,CAAC;YAC5E,MAAM;QACR,KAAK,GAAG;YACN,OAAO,GAAG,MAAM,IAAI,qBAAqB,CAAC;YAC1C,MAAM;QACR,KAAK,GAAG;YACN,OAAO,GAAG,MAAM,IAAI,2CAA2C,CAAC;YAChE,MAAM;QACR,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,GAAG,gBAAgB,IAAI,2CAA2C,CAAC;YAC1E,MAAM;QACR,CAAC;QACD,KAAK,GAAG;YACN,OAAO;gBACL,yKAAyK,CAAC;YAC5K,MAAM;QACR,KAAK,GAAG;YACN,OAAO;gBACL,sFAAsF,CAAC;YACzF,MAAM;QACR;YACE,OAAO,GAAG,MAAM,IAAI,8BAA8B,MAAM,GAAG,CAAC;IAChE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * MCP tool definitions and handlers.
3
+ *
4
+ * The SignaTrust client is injected rather than instantiated at module level
5
+ * so handlers are straightforward to unit test.
6
+ */
7
+ import type { SignaTrustClient } from "./vendor/signatrust-sdk/index.js";
8
+ export declare const TOOLS: ({
9
+ name: string;
10
+ description: string;
11
+ inputSchema: {
12
+ type: "object";
13
+ properties: {
14
+ status: {
15
+ type: string;
16
+ enum: string[];
17
+ description: string;
18
+ };
19
+ page: {
20
+ type: string;
21
+ description: string;
22
+ minimum: number;
23
+ };
24
+ limit: {
25
+ type: string;
26
+ enum: number[];
27
+ description: string;
28
+ };
29
+ id?: undefined;
30
+ name?: undefined;
31
+ securityLevel?: undefined;
32
+ signers?: undefined;
33
+ documentIds?: undefined;
34
+ templateId?: undefined;
35
+ message?: undefined;
36
+ includeSystem?: undefined;
37
+ filePath?: undefined;
38
+ contentType?: undefined;
39
+ envelopeId?: undefined;
40
+ reason?: undefined;
41
+ };
42
+ required?: undefined;
43
+ };
44
+ annotations: {
45
+ title: string;
46
+ readOnlyHint: boolean;
47
+ destructiveHint: boolean;
48
+ };
49
+ } | {
50
+ name: string;
51
+ description: string;
52
+ inputSchema: {
53
+ type: "object";
54
+ properties: {
55
+ id: {
56
+ type: string;
57
+ description: string;
58
+ };
59
+ status?: undefined;
60
+ page?: undefined;
61
+ limit?: undefined;
62
+ name?: undefined;
63
+ securityLevel?: undefined;
64
+ signers?: undefined;
65
+ documentIds?: undefined;
66
+ templateId?: undefined;
67
+ message?: undefined;
68
+ includeSystem?: undefined;
69
+ filePath?: undefined;
70
+ contentType?: undefined;
71
+ envelopeId?: undefined;
72
+ reason?: undefined;
73
+ };
74
+ required: string[];
75
+ };
76
+ annotations: {
77
+ title: string;
78
+ readOnlyHint: boolean;
79
+ destructiveHint: boolean;
80
+ };
81
+ } | {
82
+ name: string;
83
+ description: string;
84
+ inputSchema: {
85
+ type: "object";
86
+ properties: {
87
+ name: {
88
+ type: string;
89
+ description: string;
90
+ maxLength: number;
91
+ };
92
+ securityLevel: {
93
+ type: string;
94
+ enum: string[];
95
+ description: string;
96
+ };
97
+ signers: {
98
+ type: string;
99
+ description: string;
100
+ items: {
101
+ type: string;
102
+ properties: {
103
+ name: {
104
+ type: string;
105
+ description: string;
106
+ };
107
+ email: {
108
+ type: string;
109
+ description: string;
110
+ };
111
+ phone: {
112
+ type: string;
113
+ description: string;
114
+ };
115
+ role: {
116
+ type: string;
117
+ enum: string[];
118
+ description: string;
119
+ };
120
+ routingOrder: {
121
+ type: string;
122
+ description: string;
123
+ minimum: number;
124
+ };
125
+ deliveryMethod: {
126
+ type: string;
127
+ enum: string[];
128
+ description: string;
129
+ };
130
+ };
131
+ required: string[];
132
+ };
133
+ minItems: number;
134
+ };
135
+ documentIds: {
136
+ type: string;
137
+ description: string;
138
+ items: {
139
+ type: string;
140
+ };
141
+ };
142
+ templateId: {
143
+ type: string;
144
+ description: string;
145
+ };
146
+ message: {
147
+ type: string;
148
+ description: string;
149
+ };
150
+ status?: undefined;
151
+ page?: undefined;
152
+ limit?: undefined;
153
+ id?: undefined;
154
+ includeSystem?: undefined;
155
+ filePath?: undefined;
156
+ contentType?: undefined;
157
+ envelopeId?: undefined;
158
+ reason?: undefined;
159
+ };
160
+ required: string[];
161
+ };
162
+ annotations: {
163
+ title: string;
164
+ readOnlyHint: boolean;
165
+ destructiveHint: boolean;
166
+ };
167
+ } | {
168
+ name: string;
169
+ description: string;
170
+ inputSchema: {
171
+ type: "object";
172
+ properties: {
173
+ includeSystem: {
174
+ type: string;
175
+ description: string;
176
+ };
177
+ status?: undefined;
178
+ page?: undefined;
179
+ limit?: undefined;
180
+ id?: undefined;
181
+ name?: undefined;
182
+ securityLevel?: undefined;
183
+ signers?: undefined;
184
+ documentIds?: undefined;
185
+ templateId?: undefined;
186
+ message?: undefined;
187
+ filePath?: undefined;
188
+ contentType?: undefined;
189
+ envelopeId?: undefined;
190
+ reason?: undefined;
191
+ };
192
+ required?: undefined;
193
+ };
194
+ annotations: {
195
+ title: string;
196
+ readOnlyHint: boolean;
197
+ destructiveHint: boolean;
198
+ };
199
+ } | {
200
+ name: string;
201
+ description: string;
202
+ inputSchema: {
203
+ type: "object";
204
+ properties: {
205
+ filePath: {
206
+ type: string;
207
+ description: string;
208
+ };
209
+ name: {
210
+ type: string;
211
+ description: string;
212
+ maxLength?: undefined;
213
+ };
214
+ contentType: {
215
+ type: string;
216
+ description: string;
217
+ };
218
+ status?: undefined;
219
+ page?: undefined;
220
+ limit?: undefined;
221
+ id?: undefined;
222
+ securityLevel?: undefined;
223
+ signers?: undefined;
224
+ documentIds?: undefined;
225
+ templateId?: undefined;
226
+ message?: undefined;
227
+ includeSystem?: undefined;
228
+ envelopeId?: undefined;
229
+ reason?: undefined;
230
+ };
231
+ required: string[];
232
+ };
233
+ annotations: {
234
+ title: string;
235
+ readOnlyHint: boolean;
236
+ destructiveHint: boolean;
237
+ };
238
+ } | {
239
+ name: string;
240
+ description: string;
241
+ inputSchema: {
242
+ type: "object";
243
+ properties: {
244
+ envelopeId: {
245
+ type: string;
246
+ description: string;
247
+ };
248
+ status?: undefined;
249
+ page?: undefined;
250
+ limit?: undefined;
251
+ id?: undefined;
252
+ name?: undefined;
253
+ securityLevel?: undefined;
254
+ signers?: undefined;
255
+ documentIds?: undefined;
256
+ templateId?: undefined;
257
+ message?: undefined;
258
+ includeSystem?: undefined;
259
+ filePath?: undefined;
260
+ contentType?: undefined;
261
+ reason?: undefined;
262
+ };
263
+ required: string[];
264
+ };
265
+ annotations: {
266
+ title: string;
267
+ readOnlyHint: boolean;
268
+ destructiveHint: boolean;
269
+ };
270
+ } | {
271
+ name: string;
272
+ description: string;
273
+ inputSchema: {
274
+ type: "object";
275
+ properties: {
276
+ id: {
277
+ type: string;
278
+ description: string;
279
+ };
280
+ reason: {
281
+ type: string;
282
+ description: string;
283
+ maxLength: number;
284
+ };
285
+ status?: undefined;
286
+ page?: undefined;
287
+ limit?: undefined;
288
+ name?: undefined;
289
+ securityLevel?: undefined;
290
+ signers?: undefined;
291
+ documentIds?: undefined;
292
+ templateId?: undefined;
293
+ message?: undefined;
294
+ includeSystem?: undefined;
295
+ filePath?: undefined;
296
+ contentType?: undefined;
297
+ envelopeId?: undefined;
298
+ };
299
+ required: string[];
300
+ };
301
+ annotations: {
302
+ title: string;
303
+ readOnlyHint: boolean;
304
+ destructiveHint: boolean;
305
+ };
306
+ })[];
307
+ type ToolArgs = Record<string, unknown>;
308
+ export declare function handleTool(client: SignaTrustClient, name: string, args: ToolArgs): Promise<{
309
+ content: Array<{
310
+ type: "text";
311
+ text: string;
312
+ }>;
313
+ isError?: boolean;
314
+ }>;
315
+ export {};
316
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,kCAAkC,CAAC;AAM1C,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAySjB,CAAC;AAMF,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA4BxC,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAuFD"}