@signdocs-brasil/mcp-server 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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +121 -0
  3. package/dist/annotations.d.ts +31 -0
  4. package/dist/annotations.js +29 -0
  5. package/dist/annotations.js.map +1 -0
  6. package/dist/bin/stdio.d.ts +2 -0
  7. package/dist/bin/stdio.js +19 -0
  8. package/dist/bin/stdio.js.map +1 -0
  9. package/dist/client.d.ts +35 -0
  10. package/dist/client.js +80 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/http/server.d.ts +34 -0
  13. package/dist/http/server.js +38 -0
  14. package/dist/http/server.js.map +1 -0
  15. package/dist/resources.d.ts +2 -0
  16. package/dist/resources.js +91 -0
  17. package/dist/resources.js.map +1 -0
  18. package/dist/schemas.d.ts +179 -0
  19. package/dist/schemas.js +169 -0
  20. package/dist/schemas.js.map +1 -0
  21. package/dist/server.d.ts +9 -0
  22. package/dist/server.js +38 -0
  23. package/dist/server.js.map +1 -0
  24. package/dist/tools/documents.d.ts +2 -0
  25. package/dist/tools/documents.js +22 -0
  26. package/dist/tools/documents.js.map +1 -0
  27. package/dist/tools/envelopes.d.ts +2 -0
  28. package/dist/tools/envelopes.js +59 -0
  29. package/dist/tools/envelopes.js.map +1 -0
  30. package/dist/tools/evidence.d.ts +2 -0
  31. package/dist/tools/evidence.js +13 -0
  32. package/dist/tools/evidence.js.map +1 -0
  33. package/dist/tools/helpers.d.ts +20 -0
  34. package/dist/tools/helpers.js +33 -0
  35. package/dist/tools/helpers.js.map +1 -0
  36. package/dist/tools/signingSessions.d.ts +2 -0
  37. package/dist/tools/signingSessions.js +70 -0
  38. package/dist/tools/signingSessions.js.map +1 -0
  39. package/dist/tools/transactions.d.ts +2 -0
  40. package/dist/tools/transactions.js +37 -0
  41. package/dist/tools/transactions.js.map +1 -0
  42. package/dist/tools/verify.d.ts +2 -0
  43. package/dist/tools/verify.js +39 -0
  44. package/dist/tools/verify.js.map +1 -0
  45. package/dist/tools/webhooks.d.ts +2 -0
  46. package/dist/tools/webhooks.js +35 -0
  47. package/dist/tools/webhooks.js.map +1 -0
  48. package/package.json +49 -0
@@ -0,0 +1,179 @@
1
+ import { z } from 'zod';
2
+ export declare const createSigningSessionShape: {
3
+ purpose: z.ZodEnum<["DOCUMENT_SIGNATURE", "ACTION_AUTHENTICATION"]>;
4
+ policyProfile: z.ZodString;
5
+ customSteps: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
+ signer: z.ZodObject<{
7
+ name: z.ZodString;
8
+ userExternalId: z.ZodString;
9
+ email: z.ZodOptional<z.ZodString>;
10
+ phone: z.ZodOptional<z.ZodString>;
11
+ cpf: z.ZodOptional<z.ZodString>;
12
+ cnpj: z.ZodOptional<z.ZodString>;
13
+ otpChannel: z.ZodOptional<z.ZodEnum<["email", "sms"]>>;
14
+ otpChannelSelectable: z.ZodOptional<z.ZodBoolean>;
15
+ birthDate: z.ZodOptional<z.ZodString>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ name: string;
18
+ userExternalId: string;
19
+ email?: string | undefined;
20
+ phone?: string | undefined;
21
+ cpf?: string | undefined;
22
+ cnpj?: string | undefined;
23
+ otpChannel?: "email" | "sms" | undefined;
24
+ otpChannelSelectable?: boolean | undefined;
25
+ birthDate?: string | undefined;
26
+ }, {
27
+ name: string;
28
+ userExternalId: string;
29
+ email?: string | undefined;
30
+ phone?: string | undefined;
31
+ cpf?: string | undefined;
32
+ cnpj?: string | undefined;
33
+ otpChannel?: "email" | "sms" | undefined;
34
+ otpChannelSelectable?: boolean | undefined;
35
+ birthDate?: string | undefined;
36
+ }>;
37
+ documentBase64: z.ZodOptional<z.ZodString>;
38
+ documentFilename: z.ZodOptional<z.ZodString>;
39
+ action: z.ZodOptional<z.ZodObject<{
40
+ type: z.ZodString;
41
+ description: z.ZodString;
42
+ reference: z.ZodOptional<z.ZodString>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ description: string;
45
+ type: string;
46
+ reference?: string | undefined;
47
+ }, {
48
+ description: string;
49
+ type: string;
50
+ reference?: string | undefined;
51
+ }>>;
52
+ returnUrl: z.ZodOptional<z.ZodString>;
53
+ cancelUrl: z.ZodOptional<z.ZodString>;
54
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
55
+ locale: z.ZodOptional<z.ZodEnum<["pt-BR", "en", "es"]>>;
56
+ expiresInMinutes: z.ZodOptional<z.ZodNumber>;
57
+ owner: z.ZodOptional<z.ZodObject<{
58
+ name: z.ZodOptional<z.ZodString>;
59
+ email: z.ZodOptional<z.ZodString>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ email?: string | undefined;
62
+ name?: string | undefined;
63
+ }, {
64
+ email?: string | undefined;
65
+ name?: string | undefined;
66
+ }>>;
67
+ idempotencyKey: z.ZodOptional<z.ZodString>;
68
+ };
69
+ export declare const sessionIdShape: {
70
+ sessionId: z.ZodString;
71
+ };
72
+ export declare const listSigningSessionsShape: {
73
+ status: z.ZodString;
74
+ limit: z.ZodOptional<z.ZodNumber>;
75
+ cursor: z.ZodOptional<z.ZodString>;
76
+ };
77
+ export declare const resendOtpShape: {
78
+ sessionId: z.ZodString;
79
+ channel: z.ZodOptional<z.ZodEnum<["email", "sms"]>>;
80
+ };
81
+ export declare const createEnvelopeShape: {
82
+ signingMode: z.ZodEnum<["PARALLEL", "SEQUENTIAL"]>;
83
+ totalSigners: z.ZodNumber;
84
+ documentBase64: z.ZodString;
85
+ documentFilename: z.ZodOptional<z.ZodString>;
86
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
87
+ locale: z.ZodOptional<z.ZodEnum<["pt-BR", "en", "es"]>>;
88
+ returnUrl: z.ZodOptional<z.ZodString>;
89
+ cancelUrl: z.ZodOptional<z.ZodString>;
90
+ expiresInMinutes: z.ZodOptional<z.ZodNumber>;
91
+ owner: z.ZodOptional<z.ZodObject<{
92
+ name: z.ZodOptional<z.ZodString>;
93
+ email: z.ZodOptional<z.ZodString>;
94
+ }, "strip", z.ZodTypeAny, {
95
+ email?: string | undefined;
96
+ name?: string | undefined;
97
+ }, {
98
+ email?: string | undefined;
99
+ name?: string | undefined;
100
+ }>>;
101
+ idempotencyKey: z.ZodOptional<z.ZodString>;
102
+ };
103
+ export declare const envelopeIdShape: {
104
+ envelopeId: z.ZodString;
105
+ };
106
+ export declare const addEnvelopeSessionShape: {
107
+ envelopeId: z.ZodString;
108
+ signer: z.ZodObject<{
109
+ name: z.ZodString;
110
+ userExternalId: z.ZodString;
111
+ email: z.ZodOptional<z.ZodString>;
112
+ phone: z.ZodOptional<z.ZodString>;
113
+ cpf: z.ZodOptional<z.ZodString>;
114
+ cnpj: z.ZodOptional<z.ZodString>;
115
+ otpChannel: z.ZodOptional<z.ZodEnum<["email", "sms"]>>;
116
+ otpChannelSelectable: z.ZodOptional<z.ZodBoolean>;
117
+ birthDate: z.ZodOptional<z.ZodString>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ name: string;
120
+ userExternalId: string;
121
+ email?: string | undefined;
122
+ phone?: string | undefined;
123
+ cpf?: string | undefined;
124
+ cnpj?: string | undefined;
125
+ otpChannel?: "email" | "sms" | undefined;
126
+ otpChannelSelectable?: boolean | undefined;
127
+ birthDate?: string | undefined;
128
+ }, {
129
+ name: string;
130
+ userExternalId: string;
131
+ email?: string | undefined;
132
+ phone?: string | undefined;
133
+ cpf?: string | undefined;
134
+ cnpj?: string | undefined;
135
+ otpChannel?: "email" | "sms" | undefined;
136
+ otpChannelSelectable?: boolean | undefined;
137
+ birthDate?: string | undefined;
138
+ }>;
139
+ policyProfile: z.ZodString;
140
+ purpose: z.ZodOptional<z.ZodEnum<["DOCUMENT_SIGNATURE", "ACTION_AUTHENTICATION"]>>;
141
+ signerIndex: z.ZodNumber;
142
+ returnUrl: z.ZodOptional<z.ZodString>;
143
+ cancelUrl: z.ZodOptional<z.ZodString>;
144
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
145
+ };
146
+ export declare const uploadDocumentShape: {
147
+ transactionId: z.ZodString;
148
+ documentBase64: z.ZodString;
149
+ filename: z.ZodOptional<z.ZodString>;
150
+ };
151
+ export declare const transactionIdShape: {
152
+ transactionId: z.ZodString;
153
+ };
154
+ export declare const listTransactionsShape: {
155
+ status: z.ZodOptional<z.ZodString>;
156
+ userExternalId: z.ZodOptional<z.ZodString>;
157
+ documentGroupId: z.ZodOptional<z.ZodString>;
158
+ limit: z.ZodOptional<z.ZodNumber>;
159
+ nextToken: z.ZodOptional<z.ZodString>;
160
+ startDate: z.ZodOptional<z.ZodString>;
161
+ endDate: z.ZodOptional<z.ZodString>;
162
+ };
163
+ export declare const verifyEvidenceShape: {
164
+ evidenceId: z.ZodString;
165
+ };
166
+ export declare const verifyEnvelopeShape: {
167
+ envelopeId: z.ZodString;
168
+ };
169
+ export declare const verifyDocumentShape: {
170
+ documentBase64: z.ZodString;
171
+ filename: z.ZodOptional<z.ZodString>;
172
+ };
173
+ export declare const registerWebhookShape: {
174
+ url: z.ZodString;
175
+ events: z.ZodArray<z.ZodEnum<["TRANSACTION.CREATED", "TRANSACTION.COMPLETED", "TRANSACTION.CANCELLED", "TRANSACTION.FAILED", "TRANSACTION.EXPIRED", "STEP.STARTED", "STEP.COMPLETED", "STEP.FAILED", "QUOTA.WARNING", "API.DEPRECATION_NOTICE", "SIGNING_SESSION.CREATED", "SIGNING_SESSION.COMPLETED", "SIGNING_SESSION.CANCELLED", "SIGNING_SESSION.EXPIRED", "ENVELOPE.CREATED", "ENVELOPE.ALL_SIGNED", "ENVELOPE.EXPIRED"]>, "many">;
176
+ };
177
+ export declare const webhookIdShape: {
178
+ webhookId: z.ZodString;
179
+ };
@@ -0,0 +1,169 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod input shapes for every MCP tool. Each export is a ZodRawShape (a plain
4
+ * object of Zod types) passed straight to `server.registerTool(...)`. They are
5
+ * a flattened, AI-friendly projection of the SDK request types — handlers in
6
+ * tools/*.ts assemble the nested SDK request objects from these.
7
+ */
8
+ const PURPOSE = z
9
+ .enum(['DOCUMENT_SIGNATURE', 'ACTION_AUTHENTICATION'])
10
+ .describe('DOCUMENT_SIGNATURE to sign a PDF; ACTION_AUTHENTICATION to authenticate an action with no document.');
11
+ const LOCALE = z.enum(['pt-BR', 'en', 'es']).describe('UI/email language. Default pt-BR.');
12
+ const POLICY_PROFILE = z
13
+ .string()
14
+ .describe('Identity-assurance profile: CLICK_ONLY, CLICK_PLUS_OTP, BIOMETRIC, BIOMETRIC_PLUS_OTP, or CUSTOM. ' +
15
+ 'Read the signdocs://policy-profiles resource for the authoritative list — an invalid value returns 400.');
16
+ const signerObject = z
17
+ .object({
18
+ name: z.string().describe('Signer full name.'),
19
+ userExternalId: z.string().describe('Stable per-signer ID in your system (used for biometric enrollment lookup).'),
20
+ email: z.string().email().optional().describe('Required to email the signer their invite link.'),
21
+ phone: z.string().optional().describe('E.164 phone, e.g. +5541999998888 (for SMS OTP).'),
22
+ cpf: z.string().optional().describe('Brazilian individual taxpayer ID (digits only).'),
23
+ cnpj: z.string().optional().describe('Brazilian company taxpayer ID (digits only).'),
24
+ otpChannel: z.enum(['email', 'sms']).optional().describe('Preferred OTP delivery channel.'),
25
+ otpChannelSelectable: z.boolean().optional().describe('Let the signer pick the OTP channel.'),
26
+ birthDate: z.string().optional().describe('ISO date (YYYY-MM-DD), used by some gov-db validations.'),
27
+ })
28
+ .describe('The person who will sign / authenticate.');
29
+ const ownerObject = z
30
+ .object({
31
+ name: z.string().optional(),
32
+ email: z.string().email().optional(),
33
+ })
34
+ .optional()
35
+ .describe('The requester (distinct from the signer). When set and signer.email differs, SignDocs auto-emails ' +
36
+ 'the signer an invite and notifies the owner on completion. Omit to deliver links yourself via webhooks.');
37
+ const metadata = z.record(z.string()).optional().describe('Free-form key/value tags (keys ≤256, values ≤1024 chars).');
38
+ // ── Signing sessions ────────────────────────────────────────────────────────
39
+ export const createSigningSessionShape = {
40
+ purpose: PURPOSE,
41
+ policyProfile: POLICY_PROFILE,
42
+ customSteps: z
43
+ .array(z.string())
44
+ .optional()
45
+ .describe('Ordered step types — REQUIRED only when policyProfile=CUSTOM (e.g. ["CLICKWRAP","OTP"]).'),
46
+ signer: signerObject,
47
+ documentBase64: z
48
+ .string()
49
+ .optional()
50
+ .describe('Base64-encoded PDF (≤10MB). Required when purpose=DOCUMENT_SIGNATURE.'),
51
+ documentFilename: z.string().optional().describe('Original filename, e.g. contrato.pdf.'),
52
+ action: z
53
+ .object({
54
+ type: z.string(),
55
+ description: z.string(),
56
+ reference: z.string().optional(),
57
+ })
58
+ .optional()
59
+ .describe('What is being authenticated — used when purpose=ACTION_AUTHENTICATION.'),
60
+ returnUrl: z.string().url().optional().describe('Redirect URL after completion (sessionId appended as query param).'),
61
+ cancelUrl: z.string().url().optional().describe('Redirect URL if the signer cancels.'),
62
+ metadata,
63
+ locale: LOCALE.optional(),
64
+ expiresInMinutes: z.number().int().min(5).max(1440).optional().describe('Session lifetime, 5–1440 min (default 60).'),
65
+ owner: ownerObject,
66
+ idempotencyKey: z.string().optional().describe('Idempotency key for safe retries; a UUID is generated if omitted.'),
67
+ };
68
+ export const sessionIdShape = {
69
+ sessionId: z.string().describe('The signing session ID (sigex_…).'),
70
+ };
71
+ export const listSigningSessionsShape = {
72
+ status: z
73
+ .string()
74
+ .describe('Filter by status: ACTIVE, COMPLETED, CANCELLED, EXPIRED, or FAILED.'),
75
+ limit: z.number().int().min(1).max(100).optional().describe('Page size (default server value).'),
76
+ cursor: z.string().optional().describe('Pagination cursor from a previous response (nextCursor).'),
77
+ };
78
+ export const resendOtpShape = {
79
+ sessionId: z.string().describe('The signing session ID.'),
80
+ channel: z.enum(['email', 'sms']).optional().describe('Override OTP delivery channel.'),
81
+ };
82
+ // ── Envelopes (multi-signer) ─────────────────────────────────────────────────
83
+ export const createEnvelopeShape = {
84
+ signingMode: z.enum(['PARALLEL', 'SEQUENTIAL']).describe('PARALLEL: anyone signs in any order. SEQUENTIAL: ordered.'),
85
+ totalSigners: z.number().int().min(1).describe('How many signers will be added to this envelope.'),
86
+ documentBase64: z.string().describe('Base64-encoded PDF (≤10MB) shared by all signers.'),
87
+ documentFilename: z.string().optional(),
88
+ metadata,
89
+ locale: LOCALE.optional(),
90
+ returnUrl: z.string().url().optional(),
91
+ cancelUrl: z.string().url().optional(),
92
+ expiresInMinutes: z.number().int().optional(),
93
+ owner: ownerObject,
94
+ idempotencyKey: z.string().optional().describe('Idempotency key for safe retries; a UUID is generated if omitted.'),
95
+ };
96
+ export const envelopeIdShape = {
97
+ envelopeId: z.string().describe('The envelope ID (env_…).'),
98
+ };
99
+ export const addEnvelopeSessionShape = {
100
+ envelopeId: z.string().describe('The envelope to add a signer to.'),
101
+ signer: signerObject,
102
+ policyProfile: POLICY_PROFILE,
103
+ purpose: PURPOSE.optional(),
104
+ signerIndex: z.number().int().min(0).describe('Zero-based position of this signer (0..totalSigners-1).'),
105
+ returnUrl: z.string().url().optional(),
106
+ cancelUrl: z.string().url().optional(),
107
+ metadata,
108
+ };
109
+ // ── Documents ────────────────────────────────────────────────────────────────
110
+ export const uploadDocumentShape = {
111
+ transactionId: z.string().describe('Transaction to attach the document to (txn_…).'),
112
+ documentBase64: z.string().describe('Base64-encoded PDF (≤10MB).'),
113
+ filename: z.string().optional(),
114
+ };
115
+ export const transactionIdShape = {
116
+ transactionId: z.string().describe('The transaction ID (txn_…).'),
117
+ };
118
+ // ── Transactions (low-level / search) ────────────────────────────────────────
119
+ export const listTransactionsShape = {
120
+ status: z.string().optional().describe('Filter by transaction status (e.g. PENDING, COMPLETED, CANCELLED).'),
121
+ userExternalId: z.string().optional().describe('Filter by signer external ID.'),
122
+ documentGroupId: z.string().optional(),
123
+ limit: z.number().int().min(1).max(100).optional(),
124
+ nextToken: z.string().optional().describe('Pagination token from a previous response.'),
125
+ startDate: z.string().optional().describe('ISO date lower bound.'),
126
+ endDate: z.string().optional().describe('ISO date upper bound.'),
127
+ };
128
+ // ── Verification ─────────────────────────────────────────────────────────────
129
+ export const verifyEvidenceShape = {
130
+ evidenceId: z.string().describe('Evidence ID (evd_…) to verify. Public — no signer PII is revealed.'),
131
+ };
132
+ export const verifyEnvelopeShape = {
133
+ envelopeId: z.string().describe('Envelope ID to verify all signers for. Public endpoint.'),
134
+ };
135
+ export const verifyDocumentShape = {
136
+ documentBase64: z.string().describe('Base64-encoded PDF to inspect for embedded signatures.'),
137
+ filename: z.string().optional(),
138
+ };
139
+ // ── Webhooks ─────────────────────────────────────────────────────────────────
140
+ const WEBHOOK_EVENTS = [
141
+ 'TRANSACTION.CREATED',
142
+ 'TRANSACTION.COMPLETED',
143
+ 'TRANSACTION.CANCELLED',
144
+ 'TRANSACTION.FAILED',
145
+ 'TRANSACTION.EXPIRED',
146
+ 'STEP.STARTED',
147
+ 'STEP.COMPLETED',
148
+ 'STEP.FAILED',
149
+ 'QUOTA.WARNING',
150
+ 'API.DEPRECATION_NOTICE',
151
+ 'SIGNING_SESSION.CREATED',
152
+ 'SIGNING_SESSION.COMPLETED',
153
+ 'SIGNING_SESSION.CANCELLED',
154
+ 'SIGNING_SESSION.EXPIRED',
155
+ 'ENVELOPE.CREATED',
156
+ 'ENVELOPE.ALL_SIGNED',
157
+ 'ENVELOPE.EXPIRED',
158
+ ];
159
+ export const registerWebhookShape = {
160
+ url: z.string().url().describe('HTTPS endpoint that will receive event POSTs.'),
161
+ events: z
162
+ .array(z.enum(WEBHOOK_EVENTS))
163
+ .min(1)
164
+ .describe('Event types to subscribe to. The response returns a signing secret for HMAC verification.'),
165
+ };
166
+ export const webhookIdShape = {
167
+ webhookId: z.string().describe('The webhook ID to act on.'),
168
+ };
169
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const SERVER_NAME = "signdocs-brasil";
3
+ export declare const SERVER_VERSION = "0.1.0";
4
+ /**
5
+ * Build a fully-wired MCP server. Transport-agnostic: the same instance is
6
+ * mounted on stdio (bin/stdio.ts) today and on Streamable HTTP later
7
+ * (http/server.ts).
8
+ */
9
+ export declare function createServer(): McpServer;
package/dist/server.js ADDED
@@ -0,0 +1,38 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { registerSigningSessionTools } from './tools/signingSessions.js';
3
+ import { registerEnvelopeTools } from './tools/envelopes.js';
4
+ import { registerDocumentTools } from './tools/documents.js';
5
+ import { registerTransactionTools } from './tools/transactions.js';
6
+ import { registerEvidenceTools } from './tools/evidence.js';
7
+ import { registerVerifyTools } from './tools/verify.js';
8
+ import { registerWebhookTools } from './tools/webhooks.js';
9
+ import { registerResources } from './resources.js';
10
+ export const SERVER_NAME = 'signdocs-brasil';
11
+ export const SERVER_VERSION = '0.1.0';
12
+ const INSTRUCTIONS = `SignDocs Brasil electronic-signature API.
13
+
14
+ Use signing sessions for single-signer flows and envelopes for multi-signer
15
+ documents. Read the signdocs://quickstart and signdocs://policy-profiles
16
+ resources before creating sessions.
17
+
18
+ Tools whose names start with create_, add_, cancel_, delete_, or verify_document
19
+ take real, quota-consuming, and often legally-binding actions — confirm with the
20
+ human before invoking them. All other tools are read-only or non-binding.`;
21
+ /**
22
+ * Build a fully-wired MCP server. Transport-agnostic: the same instance is
23
+ * mounted on stdio (bin/stdio.ts) today and on Streamable HTTP later
24
+ * (http/server.ts).
25
+ */
26
+ export function createServer() {
27
+ const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { instructions: INSTRUCTIONS });
28
+ registerSigningSessionTools(server);
29
+ registerEnvelopeTools(server);
30
+ registerDocumentTools(server);
31
+ registerTransactionTools(server);
32
+ registerEvidenceTools(server);
33
+ registerVerifyTools(server);
34
+ registerWebhookTools(server);
35
+ registerResources(server);
36
+ return server;
37
+ }
38
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,YAAY,GAAG;;;;;;;;0EAQqD,CAAC;AAE3E;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,EAC9C,EAAE,YAAY,EAAE,YAAY,EAAE,CAC/B,CAAC;IAEF,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerDocumentTools(server: McpServer): void;
@@ -0,0 +1,22 @@
1
+ import { getClient } from '../client.js';
2
+ import { READ_ONLY, WRITE_SAFE } from '../annotations.js';
3
+ import { run } from './helpers.js';
4
+ import { uploadDocumentShape, transactionIdShape } from '../schemas.js';
5
+ export function registerDocumentTools(server) {
6
+ server.registerTool('upload_document', {
7
+ title: 'Upload document',
8
+ description: 'Upload a base64-encoded PDF to an existing transaction (≤10MB inline; use presign for larger).',
9
+ inputSchema: uploadDocumentShape,
10
+ annotations: WRITE_SAFE,
11
+ }, async (args) => run(() => getClient().documents.upload(args.transactionId, {
12
+ content: args.documentBase64,
13
+ ...(args.filename ? { filename: args.filename } : {}),
14
+ })));
15
+ server.registerTool('download_document', {
16
+ title: 'Download document',
17
+ description: 'Get presigned download URLs for a transaction’s document and signed artifacts.',
18
+ inputSchema: transactionIdShape,
19
+ annotations: READ_ONLY,
20
+ }, async (args) => run(() => getClient().documents.download(args.transactionId)));
21
+ }
22
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,gGAAgG;QAC7G,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE,UAAU;KACxB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,GAAG,CAAC,GAAG,EAAE,CACP,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;QAC/C,OAAO,EAAE,IAAI,CAAC,cAAc;QAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC,CACH,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAC9E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerEnvelopeTools(server: McpServer): void;
@@ -0,0 +1,59 @@
1
+ import { getClient, buildSigningUrl } from '../client.js';
2
+ import { CONFIRM_WARNING, DESTRUCTIVE, READ_ONLY } from '../annotations.js';
3
+ import { run, idempotencyKey } from './helpers.js';
4
+ import { createEnvelopeShape, envelopeIdShape, addEnvelopeSessionShape } from '../schemas.js';
5
+ export function registerEnvelopeTools(server) {
6
+ server.registerTool('create_envelope', {
7
+ title: 'Create envelope',
8
+ description: CONFIRM_WARNING +
9
+ 'Create a multi-signer envelope around one PDF. After creating, add each signer with ' +
10
+ 'add_session_to_envelope. Consumes quota.',
11
+ inputSchema: createEnvelopeShape,
12
+ annotations: DESTRUCTIVE,
13
+ }, async (args) => run(() => {
14
+ const req = {
15
+ signingMode: args.signingMode,
16
+ totalSigners: args.totalSigners,
17
+ document: { content: args.documentBase64, filename: args.documentFilename },
18
+ ...(args.metadata ? { metadata: args.metadata } : {}),
19
+ ...(args.locale ? { locale: args.locale } : {}),
20
+ ...(args.returnUrl ? { returnUrl: args.returnUrl } : {}),
21
+ ...(args.cancelUrl ? { cancelUrl: args.cancelUrl } : {}),
22
+ ...(args.expiresInMinutes ? { expiresInMinutes: args.expiresInMinutes } : {}),
23
+ ...(args.owner ? { owner: args.owner } : {}),
24
+ };
25
+ return getClient().envelopes.create(req, idempotencyKey(args.idempotencyKey));
26
+ }));
27
+ server.registerTool('get_envelope', {
28
+ title: 'Get envelope',
29
+ description: 'Get envelope details including per-signer session summaries and completion counts.',
30
+ inputSchema: envelopeIdShape,
31
+ annotations: READ_ONLY,
32
+ }, async (args) => run(() => getClient().envelopes.get(args.envelopeId)));
33
+ server.registerTool('add_session_to_envelope', {
34
+ title: 'Add signer to envelope',
35
+ description: CONFIRM_WARNING +
36
+ 'Add a signing session for one signer to an envelope. Returns IDs plus a ready-to-share `signingUrl`.',
37
+ inputSchema: addEnvelopeSessionShape,
38
+ annotations: DESTRUCTIVE,
39
+ }, async (args) => run(async () => {
40
+ const req = {
41
+ signer: args.signer,
42
+ policy: { profile: args.policyProfile },
43
+ signerIndex: args.signerIndex,
44
+ ...(args.purpose ? { purpose: args.purpose } : {}),
45
+ ...(args.returnUrl ? { returnUrl: args.returnUrl } : {}),
46
+ ...(args.cancelUrl ? { cancelUrl: args.cancelUrl } : {}),
47
+ ...(args.metadata ? { metadata: args.metadata } : {}),
48
+ };
49
+ const session = await getClient().envelopes.addSession(args.envelopeId, req);
50
+ return { ...session, signingUrl: buildSigningUrl(session.url, session.clientSecret) };
51
+ }));
52
+ server.registerTool('get_envelope_combined_stamp', {
53
+ title: 'Get envelope combined stamp',
54
+ description: 'Generate the combined stamped PDF (all signers) for a COMPLETED envelope and return a download URL.',
55
+ inputSchema: envelopeIdShape,
56
+ annotations: READ_ONLY,
57
+ }, async (args) => run(() => getClient().envelopes.combinedStamp(args.envelopeId)));
58
+ }
59
+ //# sourceMappingURL=envelopes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelopes.js","sourceRoot":"","sources":["../../src/tools/envelopes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerEvidenceTools(server: McpServer): void;
@@ -0,0 +1,13 @@
1
+ import { getClient } from '../client.js';
2
+ import { READ_ONLY } from '../annotations.js';
3
+ import { run } from './helpers.js';
4
+ import { transactionIdShape } from '../schemas.js';
5
+ export function registerEvidenceTools(server) {
6
+ server.registerTool('get_evidence', {
7
+ title: 'Get evidence',
8
+ description: 'Retrieve the cryptographic evidence (hashes, step proofs, evidenceId) for a completed transaction.',
9
+ inputSchema: transactionIdShape,
10
+ annotations: READ_ONLY,
11
+ }, async (args) => run(() => getClient().evidence.get(args.transactionId)));
12
+ }
13
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/tools/evidence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,oGAAoG;QACtG,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CACxE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /** MCP tool result shape (subset we use). Index signature matches the SDK's CallToolResult. */
2
+ export interface ToolResult {
3
+ [key: string]: unknown;
4
+ content: Array<{
5
+ type: 'text';
6
+ text: string;
7
+ }>;
8
+ isError?: boolean;
9
+ structuredContent?: Record<string, unknown>;
10
+ }
11
+ export declare function jsonContent(data: unknown): ToolResult;
12
+ /**
13
+ * Normalize any thrown value (SDK errors are RFC-7807 ProblemDetail-bearing)
14
+ * into a clean, non-throwing MCP error result so the agent can read and react.
15
+ */
16
+ export declare function errorContent(err: unknown): ToolResult;
17
+ /** Run an SDK call and wrap success/failure into a tool result. */
18
+ export declare function run(fn: () => Promise<unknown>): Promise<ToolResult>;
19
+ /** Use the caller-supplied idempotency key, or mint a fresh UUID. */
20
+ export declare function idempotencyKey(provided?: string): string;
@@ -0,0 +1,33 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ export function jsonContent(data) {
3
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
4
+ }
5
+ /**
6
+ * Normalize any thrown value (SDK errors are RFC-7807 ProblemDetail-bearing)
7
+ * into a clean, non-throwing MCP error result so the agent can read and react.
8
+ */
9
+ export function errorContent(err) {
10
+ const e = err;
11
+ const parts = [];
12
+ parts.push(`SignDocs API error: ${e?.message ?? String(err)}`);
13
+ if (typeof e?.status === 'number')
14
+ parts.push(`(HTTP ${e.status})`);
15
+ const problem = e?.problem ?? e?.detail;
16
+ if (problem)
17
+ parts.push(`\n${JSON.stringify(problem, null, 2)}`);
18
+ return { content: [{ type: 'text', text: parts.join(' ') }], isError: true };
19
+ }
20
+ /** Run an SDK call and wrap success/failure into a tool result. */
21
+ export async function run(fn) {
22
+ try {
23
+ return jsonContent(await fn());
24
+ }
25
+ catch (err) {
26
+ return errorContent(err);
27
+ }
28
+ }
29
+ /** Use the caller-supplied idempotency key, or mint a fresh UUID. */
30
+ export function idempotencyKey(provided) {
31
+ return provided ?? randomUUID();
32
+ }
33
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUzC,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,CAAC,GAAG,GAAiF,CAAC;IAC5F,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,EAAE,MAAM,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,CAAC;IACxC,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC/E,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,EAA0B;IAClD,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,OAAO,QAAQ,IAAI,UAAU,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerSigningSessionTools(server: McpServer): void;