document-integrity-validator-mcp 1.0.2

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/dist/index.js ADDED
@@ -0,0 +1,529 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import express from 'express';
5
+ import crypto from 'crypto';
6
+ import fs from 'fs';
7
+ import axios from 'axios';
8
+ import { VERSION, PERSIST_FILE, PRO_UPGRADE_URL, TRIAL_EXTENSION_CALLS, STATS_KEY, nowISO } from './constants.js';
9
+ import { CheckDocumentInputSchema } from './schemas/check.js';
10
+ import { CheckDocumentPackageInputSchema } from './schemas/package-check.js';
11
+ import { runCheckDocument } from './tools/check.js';
12
+ import { runCheckDocumentPackage, buildPackagePaidOnlyError } from './tools/package-check.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Request context -- set per HTTP request; stdio uses defaults
15
+ // ---------------------------------------------------------------------------
16
+ let currentIP = '127.0.0.1';
17
+ let currentApiKey = '';
18
+ // ---------------------------------------------------------------------------
19
+ // Stats persistence
20
+ // ---------------------------------------------------------------------------
21
+ function loadStats() {
22
+ try {
23
+ const parsed = JSON.parse(fs.readFileSync(PERSIST_FILE, 'utf8'));
24
+ if (!parsed.trial_extensions)
25
+ parsed.trial_extensions = {};
26
+ if (!parsed.paid_api_keys)
27
+ parsed.paid_api_keys = {};
28
+ return parsed;
29
+ }
30
+ catch {
31
+ return {
32
+ free_tier_calls_by_ip: {},
33
+ paid_calls: 0,
34
+ total_calls: 0,
35
+ check_calls: 0,
36
+ package_calls: 0,
37
+ paid_api_keys: {},
38
+ trial_extensions: {}
39
+ };
40
+ }
41
+ }
42
+ function saveStats(s) {
43
+ try {
44
+ fs.writeFileSync(PERSIST_FILE, JSON.stringify(s));
45
+ }
46
+ catch { /* /tmp reset is expected */ }
47
+ }
48
+ let stats = loadStats();
49
+ function incrementFreeTier(ip) {
50
+ const month = new Date().toISOString().slice(0, 7);
51
+ if (!stats.free_tier_calls_by_ip[ip])
52
+ stats.free_tier_calls_by_ip[ip] = {};
53
+ stats.free_tier_calls_by_ip[ip][month] =
54
+ (stats.free_tier_calls_by_ip[ip][month] ?? 0) + 1;
55
+ }
56
+ function isPaidKey(key) {
57
+ return key.length > 0 && Object.prototype.hasOwnProperty.call(stats.paid_api_keys, key);
58
+ }
59
+ async function sendEmail(to, subject, html) {
60
+ const resendKey = process.env.RESEND_API_KEY;
61
+ if (!resendKey)
62
+ return;
63
+ try {
64
+ await axios.post('https://api.resend.com/emails', { from: 'Kord Agencies <ojas@kordagencies.com>', to: [to], subject, html }, { headers: { Authorization: `Bearer ${resendKey}`, 'Content-Type': 'application/json' } });
65
+ }
66
+ catch { /* email failure is non-fatal */ }
67
+ }
68
+ function getStatsPayload() {
69
+ const month = new Date().toISOString().slice(0, 7);
70
+ let freeTierUnique = 0;
71
+ let freeTierTotal = 0;
72
+ for (const months of Object.values(stats.free_tier_calls_by_ip)) {
73
+ if (months[month] !== undefined) {
74
+ freeTierUnique++;
75
+ freeTierTotal += months[month];
76
+ }
77
+ }
78
+ return {
79
+ total_calls: stats.total_calls,
80
+ paid_calls: stats.paid_calls,
81
+ free_calls: stats.total_calls - stats.paid_calls,
82
+ check_calls: stats.check_calls,
83
+ package_calls: stats.package_calls,
84
+ free_tier_unique_ips: freeTierUnique,
85
+ free_tier_total_calls: freeTierTotal,
86
+ paid_api_keys_count: Object.keys(stats.paid_api_keys).length,
87
+ trial_extensions_granted: Object.keys(stats.trial_extensions).length,
88
+ checked_at: nowISO()
89
+ };
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Stripe
93
+ // ---------------------------------------------------------------------------
94
+ function verifyStripeSignature(body, sig, secret) {
95
+ if (!secret || !sig)
96
+ return false;
97
+ try {
98
+ const parts = sig.split(',').reduce((acc, part) => {
99
+ const [k, v] = part.split('=');
100
+ if (k && v)
101
+ acc[k] = v;
102
+ return acc;
103
+ }, {});
104
+ const timestamp = parts['t'];
105
+ const expected = parts['v1'];
106
+ if (!timestamp || !expected)
107
+ return false;
108
+ const computed = crypto
109
+ .createHmac('sha256', secret)
110
+ .update(`${timestamp}.${body}`, 'utf8')
111
+ .digest('hex');
112
+ return crypto.timingSafeEqual(Buffer.from(computed), Buffer.from(expected));
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ function generateApiKey() {
119
+ return `div_${crypto.randomBytes(24).toString('hex')}`;
120
+ }
121
+ async function handleStripeEvent(event) {
122
+ if (event['type'] !== 'checkout.session.completed')
123
+ return;
124
+ const session = event['data'];
125
+ const obj = session?.['object'];
126
+ const email = obj?.['customer_email'] ?? 'unknown';
127
+ const plan = (obj?.['metadata']?.['plan']) ?? 'pro';
128
+ const apiKey = generateApiKey();
129
+ stats.paid_api_keys[apiKey] = {
130
+ plan,
131
+ created_at: nowISO(),
132
+ calls: 0,
133
+ last_seen: nowISO(),
134
+ email
135
+ };
136
+ saveStats(stats);
137
+ const resendKey = process.env.RESEND_API_KEY;
138
+ if (resendKey && email !== 'unknown') {
139
+ try {
140
+ await axios.post('https://api.resend.com/emails', {
141
+ from: 'Kord Agencies <ojas@kordagencies.com>',
142
+ to: [email],
143
+ subject: 'Your Document Integrity Validator API Key',
144
+ text: `Thank you for upgrading to Document Integrity Validator ${plan === 'enterprise' ? 'Enterprise' : 'Pro'}.\n\n` +
145
+ `Your API key: ${apiKey}\n\n` +
146
+ `Add this as the x-api-key header in your MCP client configuration.\n\n` +
147
+ `Access includes:\n` +
148
+ `- Unlimited check_document calls\n` +
149
+ `- Full check_document_package for cross-document consistency checking\n\n` +
150
+ `Docs and integration guide: kordagencies.com\n\n` +
151
+ `Kord Agencies Pte Ltd`
152
+ }, { headers: { Authorization: `Bearer ${resendKey}`, 'Content-Type': 'application/json' } });
153
+ }
154
+ catch { /* email failure is non-fatal */ }
155
+ }
156
+ console.error(`[stripe] New ${plan} key provisioned for ${email}`);
157
+ }
158
+ // ---------------------------------------------------------------------------
159
+ // Env validation
160
+ // ---------------------------------------------------------------------------
161
+ function validateEnv() {
162
+ if (!process.env.ANTHROPIC_API_KEY) {
163
+ throw new Error('Missing required env var: ANTHROPIC_API_KEY');
164
+ }
165
+ }
166
+ // ---------------------------------------------------------------------------
167
+ // Dependencies check
168
+ // ---------------------------------------------------------------------------
169
+ async function checkDependencies() {
170
+ const anthropicOk = Boolean(process.env.ANTHROPIC_API_KEY);
171
+ return [
172
+ {
173
+ name: 'Anthropic API (claude-sonnet-4-6)',
174
+ ok: anthropicOk,
175
+ detail: anthropicOk ? undefined : 'ANTHROPIC_API_KEY not set'
176
+ }
177
+ ];
178
+ }
179
+ // ---------------------------------------------------------------------------
180
+ // Tool descriptions
181
+ // ---------------------------------------------------------------------------
182
+ const CHECK_DOCUMENT_DESCRIPTION = 'Call this tool BEFORE your agent accepts, processes, or acts on any document received from an external party -- ' +
183
+ 'before payment release, cargo acceptance, contract execution, or KYC sign-off. ' +
184
+ 'An agent that acts on a document without verification risks acting on a forged, altered, or non-compliant document -- ' +
185
+ 'one undetected forgery in a trade finance workflow can result in payment against fraudulent documents with no recovery path. ' +
186
+ 'Accepts any document type as base64 image or extracted text. ' +
187
+ 'The only MCP server that checks any document type against named international standards -- ICAO 9303, Hague-Visby, UCP 600, ISPM 12, and more -- and refuses to guess on unfamiliar documents rather than returning a confident wrong verdict. ' +
188
+ 'Returns a machine-readable agent_action field (PROCEED / VERIFY_MANUALLY / HOLD / REFER_TO_HUMAN) -- no further analysis needed. ' +
189
+ 'AI-powered reasoning -- NOT a database lookup. We do not log or store your document content. ' +
190
+ 'One call replaces manual review for standard document types. ' +
191
+ 'Free tier: 10 calls/month per IP, no API key required. ' +
192
+ 'Pro: 500 calls/month at $29/month. Enterprise: 5,000 calls/month at $199/month. kordagencies.com';
193
+ const CHECK_DOCUMENT_PACKAGE_DESCRIPTION = 'Call this tool when your agent has received a set of related documents that must be internally consistent before payment release, cargo acceptance, or contract execution. ' +
194
+ 'A single undetected inconsistency across a trade document package -- mismatched weights, different consignee names, conflicting reference numbers -- ' +
195
+ 'triggers a Letter of Credit discrepancy that blocks payment and may constitute documentary fraud. ' +
196
+ 'Submits 2 to 20 documents in one call. Returns individual verdicts per document plus cross-document conflict flags covering: ' +
197
+ 'numeric values (weights, quantities, amounts), party names (shipper, consignee, buyer, seller), reference numbers (LC number, booking ref), ' +
198
+ 'dates (shipment date, expiry, presentation period), commodity descriptions, and port references. ' +
199
+ 'One call replaces manual cross-checking across the full document package. ' +
200
+ 'AI-powered reasoning -- NOT a database lookup. We do not log or store your document content. ' +
201
+ 'The only MCP server that cross-checks a full document package against named international standards in a single call -- returns structured conflict flags, not prose. ' +
202
+ 'Paid tier only -- no free access. Pro: 500 calls/month at $29/month. Enterprise: 5,000 calls/month at $199/month. kordagencies.com.';
203
+ const INITIALIZE_DESCRIPTION = 'Before your agent accepts, processes, or acts on any document received from an external party -- ' +
204
+ 'verify it is internally consistent and matches the known standard for its type. ' +
205
+ 'One call. Any document. Machine-readable verdict.';
206
+ // ---------------------------------------------------------------------------
207
+ // Server card (Smithery required format)
208
+ // ---------------------------------------------------------------------------
209
+ function getServerCard() {
210
+ return {
211
+ serverInfo: { name: 'document-integrity-validator-mcp', version: VERSION },
212
+ authentication: { required: false },
213
+ tools: [
214
+ {
215
+ name: 'check_document',
216
+ description: CHECK_DOCUMENT_DESCRIPTION,
217
+ inputSchema: {
218
+ type: 'object',
219
+ properties: {
220
+ document_text: {
221
+ type: 'string',
222
+ maxLength: 50000,
223
+ description: 'Extracted text content from the document.'
224
+ },
225
+ document_image: {
226
+ type: 'string',
227
+ maxLength: 10000000,
228
+ description: 'Base64 encoded document image. Accepts raw base64 or data URL.'
229
+ },
230
+ document_type_hint: {
231
+ type: 'string',
232
+ maxLength: 200,
233
+ description: 'Agent belief about document type, e.g. "bill_of_lading".'
234
+ },
235
+ issuing_jurisdiction: {
236
+ type: 'string',
237
+ maxLength: 200,
238
+ description: 'Country or issuing body, e.g. "Singapore".'
239
+ }
240
+ },
241
+ required: [],
242
+ additionalProperties: false
243
+ }
244
+ },
245
+ {
246
+ name: 'check_document_package',
247
+ description: CHECK_DOCUMENT_PACKAGE_DESCRIPTION,
248
+ inputSchema: {
249
+ type: 'object',
250
+ properties: {
251
+ documents: {
252
+ type: 'array',
253
+ minItems: 2,
254
+ maxItems: 20,
255
+ items: {
256
+ type: 'object',
257
+ properties: {
258
+ document_text: { type: 'string', maxLength: 50000 },
259
+ document_image: { type: 'string', maxLength: 10000000 },
260
+ document_type_hint: { type: 'string', maxLength: 200 },
261
+ issuing_jurisdiction: { type: 'string', maxLength: 200 },
262
+ label: {
263
+ type: 'string',
264
+ minLength: 1,
265
+ maxLength: 100,
266
+ description: 'Agent-assigned label, e.g. "packing_list"'
267
+ }
268
+ },
269
+ required: ['label'],
270
+ additionalProperties: false
271
+ },
272
+ description: 'Array of 2 to 20 related documents to assess and cross-check.'
273
+ }
274
+ },
275
+ required: ['documents'],
276
+ additionalProperties: false
277
+ }
278
+ }
279
+ ],
280
+ resources: [],
281
+ prompts: []
282
+ };
283
+ }
284
+ // ---------------------------------------------------------------------------
285
+ // MCP Server
286
+ // ---------------------------------------------------------------------------
287
+ const server = new McpServer({
288
+ name: 'document-integrity-validator-mcp',
289
+ version: VERSION,
290
+ description: INITIALIZE_DESCRIPTION
291
+ });
292
+ // Tool 1: check_document (free: 10/month per IP)
293
+ server.registerTool('check_document', {
294
+ title: 'Check Document Integrity',
295
+ description: CHECK_DOCUMENT_DESCRIPTION,
296
+ inputSchema: CheckDocumentInputSchema,
297
+ annotations: {
298
+ readOnlyHint: true,
299
+ destructiveHint: false,
300
+ idempotentHint: false,
301
+ openWorldHint: true
302
+ }
303
+ }, async (params) => {
304
+ // checkAccess() runs ONLY here -- inside the tools/call branch
305
+ const ip = currentIP;
306
+ const paid = isPaidKey(currentApiKey);
307
+ stats.total_calls++;
308
+ stats.check_calls++;
309
+ if (paid) {
310
+ stats.paid_calls++;
311
+ if (stats.paid_api_keys[currentApiKey]) {
312
+ stats.paid_api_keys[currentApiKey].calls++;
313
+ stats.paid_api_keys[currentApiKey].last_seen = nowISO();
314
+ }
315
+ }
316
+ const result = await runCheckDocument(params, ip, paid, stats);
317
+ if (result.error) {
318
+ saveStats(stats);
319
+ return {
320
+ isError: true,
321
+ content: [{ type: 'text', text: JSON.stringify(result.error) }]
322
+ };
323
+ }
324
+ if (!paid)
325
+ incrementFreeTier(ip);
326
+ saveStats(stats);
327
+ const output = result.output;
328
+ const text = JSON.stringify(output, null, 2);
329
+ const finalText = text.length > 25000
330
+ ? text.slice(0, 25000) + '\n\n[Response truncated.]'
331
+ : text;
332
+ return {
333
+ content: [{ type: 'text', text: finalText }],
334
+ structuredContent: output
335
+ };
336
+ });
337
+ // Tool 2: check_document_package (paid only -- no free tier)
338
+ server.registerTool('check_document_package', {
339
+ title: 'Check Document Package Integrity',
340
+ description: CHECK_DOCUMENT_PACKAGE_DESCRIPTION,
341
+ inputSchema: CheckDocumentPackageInputSchema,
342
+ annotations: {
343
+ readOnlyHint: true,
344
+ destructiveHint: false,
345
+ idempotentHint: false,
346
+ openWorldHint: true
347
+ }
348
+ }, async (params) => {
349
+ // checkAccess() runs ONLY here -- inside the tools/call branch
350
+ const paid = isPaidKey(currentApiKey);
351
+ if (!paid) {
352
+ return {
353
+ isError: true,
354
+ content: [
355
+ {
356
+ type: 'text',
357
+ text: JSON.stringify(buildPackagePaidOnlyError())
358
+ }
359
+ ]
360
+ };
361
+ }
362
+ stats.total_calls++;
363
+ stats.package_calls++;
364
+ stats.paid_calls++;
365
+ if (stats.paid_api_keys[currentApiKey]) {
366
+ stats.paid_api_keys[currentApiKey].calls++;
367
+ stats.paid_api_keys[currentApiKey].last_seen = nowISO();
368
+ }
369
+ const result = await runCheckDocumentPackage(params);
370
+ if (result.error) {
371
+ saveStats(stats);
372
+ return {
373
+ isError: true,
374
+ content: [{ type: 'text', text: JSON.stringify(result.error) }]
375
+ };
376
+ }
377
+ saveStats(stats);
378
+ const output = result.output;
379
+ const text = JSON.stringify(output, null, 2);
380
+ const finalText = text.length > 25000
381
+ ? text.slice(0, 25000) + '\n\n[Response truncated.]'
382
+ : text;
383
+ return {
384
+ content: [{ type: 'text', text: finalText }],
385
+ structuredContent: output
386
+ };
387
+ });
388
+ // ---------------------------------------------------------------------------
389
+ // HTTP server
390
+ // ---------------------------------------------------------------------------
391
+ async function runHTTP() {
392
+ validateEnv();
393
+ const app = express();
394
+ app.use(express.json());
395
+ const cors = {
396
+ 'Access-Control-Allow-Origin': '*',
397
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
398
+ 'Access-Control-Allow-Headers': 'Content-Type, x-api-key, x-stats-key'
399
+ };
400
+ app.options('*', (_req, res) => { res.status(200).set(cors).end(); });
401
+ app.all('/health', (_req, res) => {
402
+ res.set(cors).json({ status: 'ok', version: VERSION, service: 'document-integrity-validator-mcp' });
403
+ });
404
+ app.all('/ready', (_req, res) => {
405
+ const ok = Boolean(process.env.ANTHROPIC_API_KEY);
406
+ res.status(ok ? 200 : 503).set(cors).json({
407
+ status: ok ? 'ready' : 'not_ready',
408
+ version: VERSION,
409
+ checks: { anthropic_api: ok }
410
+ });
411
+ });
412
+ app.get('/deps', async (_req, res) => {
413
+ const deps = await checkDependencies();
414
+ res.set(cors).json({ checked_at: nowISO(), dependencies: deps });
415
+ });
416
+ app.get('/stats', (req, res) => {
417
+ if (req.headers['x-stats-key'] !== STATS_KEY) {
418
+ res.status(401).set(cors).json({ error: 'Unauthorized' });
419
+ return;
420
+ }
421
+ res.set(cors).json(getStatsPayload());
422
+ });
423
+ app.post('/webhook/stripe', express.raw({ type: 'application/json' }), (req, res) => {
424
+ const sig = req.headers['stripe-signature'];
425
+ const secret = process.env.STRIPE_WEBHOOK_SECRET ?? '';
426
+ if (!verifyStripeSignature(req.body.toString(), sig, secret)) {
427
+ res.status(400).set(cors).json({ error: 'Invalid signature' });
428
+ return;
429
+ }
430
+ handleStripeEvent(JSON.parse(req.body.toString())).catch(err => console.error('[stripe] handler error:', err));
431
+ res.set(cors).json({ received: true });
432
+ });
433
+ app.get('/.well-known/mcp/server-card.json', (_req, res) => {
434
+ res.set(cors).json(getServerCard());
435
+ });
436
+ // Trial extension endpoint -- follows VAT Validator pattern exactly
437
+ app.post('/trial-extension', async (req, res) => {
438
+ const { name, email, use_case } = req.body;
439
+ if (!name || !email) {
440
+ res.status(400).set(cors).json({
441
+ error: 'name and email are required',
442
+ agent_action: 'PROVIDE_REQUIRED_FIELDS'
443
+ });
444
+ return;
445
+ }
446
+ const emailKey = 'trial:' + email.toLowerCase().trim();
447
+ if (stats.trial_extensions[emailKey]) {
448
+ res.status(409).set(cors).json({
449
+ error: 'Trial extension already granted for this email.',
450
+ upgrade_url: PRO_UPGRADE_URL,
451
+ agent_action: 'INFORM_USER_TRIAL_ALREADY_USED'
452
+ });
453
+ return;
454
+ }
455
+ const ip = req.headers['x-forwarded-for']?.split(',')[0]?.trim() ??
456
+ req.ip ??
457
+ 'unknown';
458
+ const month = new Date().toISOString().slice(0, 7);
459
+ if (!stats.free_tier_calls_by_ip[ip])
460
+ stats.free_tier_calls_by_ip[ip] = {};
461
+ const currentCalls = stats.free_tier_calls_by_ip[ip][month] ?? 0;
462
+ stats.free_tier_calls_by_ip[ip][month] = Math.max(0, currentCalls - TRIAL_EXTENSION_CALLS);
463
+ stats.trial_extensions[emailKey] = {
464
+ name,
465
+ email,
466
+ use_case: use_case ?? '',
467
+ ip,
468
+ granted_at: nowISO()
469
+ };
470
+ saveStats(stats);
471
+ await sendEmail('ojas@kordagencies.com', 'Document Integrity Validator -- Trial Extension: ' + name, '<p><b>Name:</b> ' + name +
472
+ '<br><b>Email:</b> ' + email +
473
+ '<br><b>Use case:</b> ' + (use_case ?? 'Not provided') +
474
+ '<br><b>IP:</b> ' + ip +
475
+ '<br><b>Calls granted:</b> ' + TRIAL_EXTENSION_CALLS + '</p>');
476
+ await sendEmail(email, TRIAL_EXTENSION_CALLS + ' extra free calls added -- Document Integrity Validator MCP', '<p>Hi ' + name + ',</p>' +
477
+ '<p>Your ' + TRIAL_EXTENSION_CALLS + ' extra free calls have been added. ' +
478
+ 'You can keep using Document Integrity Validator MCP right now -- no action needed.</p>' +
479
+ '<p>When you need more, Pro is $29/month for 500 calls: ' + PRO_UPGRADE_URL + '</p>' +
480
+ '<p>Ojas<br>kordagencies.com</p>');
481
+ res.set(cors).json({
482
+ granted: true,
483
+ additional_calls: TRIAL_EXTENSION_CALLS,
484
+ message: TRIAL_EXTENSION_CALLS + ' extra free calls added. Check your email for confirmation.',
485
+ upgrade_url: PRO_UPGRADE_URL
486
+ });
487
+ });
488
+ // MCP endpoint -- new transport per request (stateless, prevents request ID collisions)
489
+ app.post('/mcp', async (req, res) => {
490
+ currentIP =
491
+ req.headers['x-forwarded-for']?.split(',')[0]?.trim() ??
492
+ req.ip ??
493
+ '127.0.0.1';
494
+ currentApiKey = req.headers['x-api-key'] ?? '';
495
+ res.set(cors);
496
+ const transport = new StreamableHTTPServerTransport({
497
+ sessionIdGenerator: undefined,
498
+ enableJsonResponse: true
499
+ });
500
+ res.on('close', () => { transport.close().catch(() => { }); });
501
+ await server.connect(transport);
502
+ await transport.handleRequest(req, res, req.body);
503
+ });
504
+ const port = parseInt(process.env.PORT ?? '3000');
505
+ app.listen(port, () => {
506
+ console.error(`document-integrity-validator-mcp running on http://localhost:${port}/mcp`);
507
+ });
508
+ }
509
+ // ---------------------------------------------------------------------------
510
+ // stdio transport
511
+ // ---------------------------------------------------------------------------
512
+ async function runStdio() {
513
+ validateEnv();
514
+ currentApiKey = process.env.API_KEY ?? '';
515
+ const transport = new StdioServerTransport();
516
+ await server.connect(transport);
517
+ console.error('document-integrity-validator-mcp running via stdio');
518
+ }
519
+ // ---------------------------------------------------------------------------
520
+ // Entry point
521
+ // ---------------------------------------------------------------------------
522
+ const transportMode = process.env.TRANSPORT ?? 'http';
523
+ if (transportMode === 'stdio') {
524
+ runStdio().catch(err => { console.error(err); process.exit(1); });
525
+ }
526
+ else {
527
+ runHTTP().catch(err => { console.error(err); process.exit(1); });
528
+ }
529
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/schemas/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;EA2B1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export const CheckDocumentInputSchema = z.object({
3
+ document_text: z
4
+ .string()
5
+ .max(50000)
6
+ .optional()
7
+ .describe('Extracted text content from the document. Provide this or document_image or both.'),
8
+ document_image: z
9
+ .string()
10
+ .max(10000000)
11
+ .optional()
12
+ .describe('Base64 encoded document image. Accepts raw base64 or a data URL (data:image/jpeg;base64,...). Supported types: JPEG, PNG, GIF, WEBP.'),
13
+ document_type_hint: z
14
+ .string()
15
+ .max(200)
16
+ .optional()
17
+ .describe('What the calling agent believes the document type is, e.g. "bill_of_lading", "passport", "certificate_of_origin". Optional -- the validator identifies the type independently.'),
18
+ issuing_jurisdiction: z
19
+ .string()
20
+ .max(200)
21
+ .optional()
22
+ .describe('Country or issuing body, e.g. "Singapore", "ICAO", "United Kingdom". Narrows jurisdiction-specific standard selection.')
23
+ }).strict();
24
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/schemas/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,mFAAmF,CAAC;IAChG,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,QAAQ,CAAC;SACb,QAAQ,EAAE;SACV,QAAQ,CACP,sIAAsI,CACvI;IACH,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,gLAAgL,CACjL;IACH,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,wHAAwH,CACzH;CACJ,CAAC,CAAC,MAAM,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-check.d.ts","sourceRoot":"","sources":["../../src/schemas/package-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EA4BpB,CAAC;AAEZ,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQjC,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ export const DocumentItemSchema = z.object({
3
+ document_text: z
4
+ .string()
5
+ .max(50000)
6
+ .optional()
7
+ .describe('Extracted text content from this document.'),
8
+ document_image: z
9
+ .string()
10
+ .max(10000000)
11
+ .optional()
12
+ .describe('Base64 encoded image of this document.'),
13
+ document_type_hint: z
14
+ .string()
15
+ .max(200)
16
+ .optional()
17
+ .describe('Agent-suggested document type, e.g. "commercial_invoice".'),
18
+ issuing_jurisdiction: z
19
+ .string()
20
+ .max(200)
21
+ .optional()
22
+ .describe('Country or issuing body for this specific document.'),
23
+ label: z
24
+ .string()
25
+ .min(1)
26
+ .max(100)
27
+ .describe('Agent-assigned identifier for this document in the package, e.g. "packing_list", "certificate_of_origin", "commercial_invoice". Used in cross-document conflict reporting.')
28
+ }).strict();
29
+ export const CheckDocumentPackageInputSchema = z.object({
30
+ documents: z
31
+ .array(DocumentItemSchema)
32
+ .min(2)
33
+ .max(20)
34
+ .describe('Array of 2 to 20 related documents to assess individually and cross-check against each other. Each document must have a unique label.')
35
+ }).strict();
36
+ //# sourceMappingURL=package-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-check.js","sourceRoot":"","sources":["../../src/schemas/package-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;IACzD,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,QAAQ,CAAC;SACb,QAAQ,EAAE;SACV,QAAQ,CAAC,wCAAwC,CAAC;IACrD,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CACP,4KAA4K,CAC7K;CACJ,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,kBAAkB,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CACP,uIAAuI,CACxI;CACJ,CAAC,CAAC,MAAM,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/services/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAW,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA0GhE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA8ChC;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,YAAY,EAAE,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA+D9B"}