@hasna/microservices 0.0.4 → 0.0.6
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/bin/index.js +9 -1
- package/bin/mcp.js +9 -1
- package/dist/index.js +9 -1
- package/microservices/microservice-ads/src/cli/index.ts +198 -0
- package/microservices/microservice-ads/src/db/campaigns.ts +304 -0
- package/microservices/microservice-ads/src/mcp/index.ts +160 -0
- package/microservices/microservice-company/package.json +27 -0
- package/microservices/microservice-company/src/cli/index.ts +1126 -0
- package/microservices/microservice-company/src/db/company.ts +854 -0
- package/microservices/microservice-company/src/db/database.ts +93 -0
- package/microservices/microservice-company/src/db/migrations.ts +214 -0
- package/microservices/microservice-company/src/db/workflow-migrations.ts +44 -0
- package/microservices/microservice-company/src/index.ts +60 -0
- package/microservices/microservice-company/src/lib/audit.ts +168 -0
- package/microservices/microservice-company/src/lib/finance.ts +299 -0
- package/microservices/microservice-company/src/lib/settings.ts +85 -0
- package/microservices/microservice-company/src/lib/workflows.ts +698 -0
- package/microservices/microservice-company/src/mcp/index.ts +991 -0
- package/microservices/microservice-contracts/src/cli/index.ts +410 -23
- package/microservices/microservice-contracts/src/db/contracts.ts +430 -1
- package/microservices/microservice-contracts/src/db/migrations.ts +83 -0
- package/microservices/microservice-contracts/src/mcp/index.ts +312 -3
- package/microservices/microservice-domains/src/cli/index.ts +673 -0
- package/microservices/microservice-domains/src/db/domains.ts +613 -0
- package/microservices/microservice-domains/src/index.ts +21 -0
- package/microservices/microservice-domains/src/lib/brandsight.ts +285 -0
- package/microservices/microservice-domains/src/lib/godaddy.ts +328 -0
- package/microservices/microservice-domains/src/lib/namecheap.ts +474 -0
- package/microservices/microservice-domains/src/lib/registrar.ts +355 -0
- package/microservices/microservice-domains/src/mcp/index.ts +413 -0
- package/microservices/microservice-hiring/src/cli/index.ts +318 -8
- package/microservices/microservice-hiring/src/db/hiring.ts +503 -0
- package/microservices/microservice-hiring/src/db/migrations.ts +21 -0
- package/microservices/microservice-hiring/src/index.ts +29 -0
- package/microservices/microservice-hiring/src/lib/scoring.ts +206 -0
- package/microservices/microservice-hiring/src/mcp/index.ts +245 -0
- package/microservices/microservice-payments/src/cli/index.ts +255 -3
- package/microservices/microservice-payments/src/db/migrations.ts +18 -0
- package/microservices/microservice-payments/src/db/payments.ts +552 -0
- package/microservices/microservice-payments/src/mcp/index.ts +223 -0
- package/microservices/microservice-payroll/src/cli/index.ts +269 -0
- package/microservices/microservice-payroll/src/db/migrations.ts +26 -0
- package/microservices/microservice-payroll/src/db/payroll.ts +636 -0
- package/microservices/microservice-payroll/src/mcp/index.ts +246 -0
- package/microservices/microservice-shipping/src/cli/index.ts +211 -3
- package/microservices/microservice-shipping/src/db/migrations.ts +8 -0
- package/microservices/microservice-shipping/src/db/shipping.ts +453 -3
- package/microservices/microservice-shipping/src/mcp/index.ts +149 -1
- package/microservices/microservice-social/src/cli/index.ts +244 -2
- package/microservices/microservice-social/src/db/migrations.ts +33 -0
- package/microservices/microservice-social/src/db/social.ts +378 -4
- package/microservices/microservice-social/src/mcp/index.ts +221 -1
- package/microservices/microservice-subscriptions/src/cli/index.ts +315 -0
- package/microservices/microservice-subscriptions/src/db/migrations.ts +68 -0
- package/microservices/microservice-subscriptions/src/db/subscriptions.ts +567 -3
- package/microservices/microservice-subscriptions/src/mcp/index.ts +267 -1
- package/package.json +1 -1
|
@@ -22,7 +22,35 @@ import {
|
|
|
22
22
|
createAlert,
|
|
23
23
|
listAlerts,
|
|
24
24
|
deleteAlert,
|
|
25
|
+
whoisLookup,
|
|
26
|
+
checkDnsPropagation,
|
|
27
|
+
checkSsl,
|
|
28
|
+
exportZoneFile,
|
|
29
|
+
importZoneFile,
|
|
30
|
+
discoverSubdomains,
|
|
31
|
+
validateDns,
|
|
32
|
+
exportPortfolio,
|
|
33
|
+
checkAllDomains,
|
|
34
|
+
getDomainByName,
|
|
25
35
|
} from "../db/domains.js";
|
|
36
|
+
import {
|
|
37
|
+
syncToLocalDb,
|
|
38
|
+
renewDomain as namecheapRenew,
|
|
39
|
+
checkAvailability as namecheapCheck,
|
|
40
|
+
} from "../lib/namecheap.js";
|
|
41
|
+
import {
|
|
42
|
+
syncToLocalDb as godaddySyncToLocalDb,
|
|
43
|
+
renewDomain as godaddyRenewDomain,
|
|
44
|
+
} from "../lib/godaddy.js";
|
|
45
|
+
import {
|
|
46
|
+
getAvailableProviders,
|
|
47
|
+
syncAll,
|
|
48
|
+
} from "../lib/registrar.js";
|
|
49
|
+
import {
|
|
50
|
+
monitorBrand,
|
|
51
|
+
getSimilarDomains,
|
|
52
|
+
getThreatAssessment,
|
|
53
|
+
} from "../lib/brandsight.js";
|
|
26
54
|
|
|
27
55
|
const server = new McpServer({
|
|
28
56
|
name: "microservice-domains",
|
|
@@ -355,6 +383,391 @@ server.registerTool(
|
|
|
355
383
|
}
|
|
356
384
|
);
|
|
357
385
|
|
|
386
|
+
// --- WHOIS Lookup ---
|
|
387
|
+
|
|
388
|
+
server.registerTool(
|
|
389
|
+
"whois_lookup",
|
|
390
|
+
{
|
|
391
|
+
title: "WHOIS Lookup",
|
|
392
|
+
description: "Run a WHOIS lookup for a domain. Parses registrar, expiry, nameservers from output. Updates DB record if found.",
|
|
393
|
+
inputSchema: { domain: z.string().describe("Domain name (e.g. example.com)") },
|
|
394
|
+
},
|
|
395
|
+
async ({ domain }) => {
|
|
396
|
+
try {
|
|
397
|
+
const result = whoisLookup(domain);
|
|
398
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
399
|
+
} catch (error: unknown) {
|
|
400
|
+
return {
|
|
401
|
+
content: [{ type: "text", text: `WHOIS lookup failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
402
|
+
isError: true,
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
);
|
|
407
|
+
|
|
408
|
+
// --- DNS Propagation Check ---
|
|
409
|
+
|
|
410
|
+
server.registerTool(
|
|
411
|
+
"check_dns_propagation",
|
|
412
|
+
{
|
|
413
|
+
title: "Check DNS Propagation",
|
|
414
|
+
description: "Check DNS propagation by querying multiple DNS servers (Google, Cloudflare, Quad9, OpenDNS).",
|
|
415
|
+
inputSchema: {
|
|
416
|
+
domain: z.string().describe("Domain name to check"),
|
|
417
|
+
record_type: z.string().default("A").describe("DNS record type (A, AAAA, CNAME, MX, TXT, NS)"),
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
async ({ domain, record_type }) => {
|
|
421
|
+
const result = checkDnsPropagation(domain, record_type);
|
|
422
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
423
|
+
}
|
|
424
|
+
);
|
|
425
|
+
|
|
426
|
+
// --- SSL Check ---
|
|
427
|
+
|
|
428
|
+
server.registerTool(
|
|
429
|
+
"check_ssl",
|
|
430
|
+
{
|
|
431
|
+
title: "Check SSL Certificate",
|
|
432
|
+
description: "Check SSL certificate for a domain. Extracts issuer and expiry. Updates DB record if found.",
|
|
433
|
+
inputSchema: { domain: z.string().describe("Domain name (e.g. example.com)") },
|
|
434
|
+
},
|
|
435
|
+
async ({ domain }) => {
|
|
436
|
+
const result = checkSsl(domain);
|
|
437
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
438
|
+
}
|
|
439
|
+
);
|
|
440
|
+
|
|
441
|
+
// --- Zone File Export ---
|
|
442
|
+
|
|
443
|
+
server.registerTool(
|
|
444
|
+
"export_zone_file",
|
|
445
|
+
{
|
|
446
|
+
title: "Export Zone File",
|
|
447
|
+
description: "Export DNS records for a domain as a BIND-format zone file.",
|
|
448
|
+
inputSchema: { domain_id: z.string().describe("Domain ID") },
|
|
449
|
+
},
|
|
450
|
+
async ({ domain_id }) => {
|
|
451
|
+
const zone = exportZoneFile(domain_id);
|
|
452
|
+
if (!zone) {
|
|
453
|
+
return { content: [{ type: "text", text: `Domain '${domain_id}' not found.` }], isError: true };
|
|
454
|
+
}
|
|
455
|
+
return { content: [{ type: "text", text: zone }] };
|
|
456
|
+
}
|
|
457
|
+
);
|
|
458
|
+
|
|
459
|
+
// --- Zone File Import ---
|
|
460
|
+
|
|
461
|
+
server.registerTool(
|
|
462
|
+
"import_zone_file",
|
|
463
|
+
{
|
|
464
|
+
title: "Import Zone File",
|
|
465
|
+
description: "Import DNS records from BIND zone file content into a domain.",
|
|
466
|
+
inputSchema: {
|
|
467
|
+
domain_id: z.string().describe("Domain ID"),
|
|
468
|
+
content: z.string().describe("Zone file content"),
|
|
469
|
+
},
|
|
470
|
+
},
|
|
471
|
+
async ({ domain_id, content }) => {
|
|
472
|
+
const result = importZoneFile(domain_id, content);
|
|
473
|
+
if (!result) {
|
|
474
|
+
return { content: [{ type: "text", text: `Domain '${domain_id}' not found.` }], isError: true };
|
|
475
|
+
}
|
|
476
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
477
|
+
}
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
// --- Subdomain Discovery ---
|
|
481
|
+
|
|
482
|
+
server.registerTool(
|
|
483
|
+
"discover_subdomains",
|
|
484
|
+
{
|
|
485
|
+
title: "Discover Subdomains",
|
|
486
|
+
description: "Discover subdomains via certificate transparency logs (crt.sh).",
|
|
487
|
+
inputSchema: { domain: z.string().describe("Domain name") },
|
|
488
|
+
},
|
|
489
|
+
async ({ domain }) => {
|
|
490
|
+
const result = await discoverSubdomains(domain);
|
|
491
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
492
|
+
}
|
|
493
|
+
);
|
|
494
|
+
|
|
495
|
+
// --- DNS Validation ---
|
|
496
|
+
|
|
497
|
+
server.registerTool(
|
|
498
|
+
"validate_dns",
|
|
499
|
+
{
|
|
500
|
+
title: "Validate DNS",
|
|
501
|
+
description: "Validate DNS records for common issues (CNAME conflicts, missing MX, orphan records).",
|
|
502
|
+
inputSchema: { domain_id: z.string().describe("Domain ID") },
|
|
503
|
+
},
|
|
504
|
+
async ({ domain_id }) => {
|
|
505
|
+
const result = validateDns(domain_id);
|
|
506
|
+
if (!result) {
|
|
507
|
+
return { content: [{ type: "text", text: `Domain '${domain_id}' not found.` }], isError: true };
|
|
508
|
+
}
|
|
509
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
510
|
+
}
|
|
511
|
+
);
|
|
512
|
+
|
|
513
|
+
// --- Portfolio Export ---
|
|
514
|
+
|
|
515
|
+
server.registerTool(
|
|
516
|
+
"export_portfolio",
|
|
517
|
+
{
|
|
518
|
+
title: "Export Portfolio",
|
|
519
|
+
description: "Export all domains as CSV or JSON with expiry, SSL, registrar, and auto-renew info.",
|
|
520
|
+
inputSchema: {
|
|
521
|
+
format: z.enum(["csv", "json"]).default("json").describe("Export format"),
|
|
522
|
+
},
|
|
523
|
+
},
|
|
524
|
+
async ({ format }) => {
|
|
525
|
+
const output = exportPortfolio(format);
|
|
526
|
+
return { content: [{ type: "text", text: output }] };
|
|
527
|
+
}
|
|
528
|
+
);
|
|
529
|
+
|
|
530
|
+
// --- Bulk Domain Check ---
|
|
531
|
+
|
|
532
|
+
server.registerTool(
|
|
533
|
+
"check_all_domains",
|
|
534
|
+
{
|
|
535
|
+
title: "Check All Domains",
|
|
536
|
+
description: "Run WHOIS + SSL + DNS validation on all domains. Returns a summary of issues found.",
|
|
537
|
+
inputSchema: {},
|
|
538
|
+
},
|
|
539
|
+
async () => {
|
|
540
|
+
const results = checkAllDomains();
|
|
541
|
+
return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }] };
|
|
542
|
+
}
|
|
543
|
+
);
|
|
544
|
+
|
|
545
|
+
// --- Namecheap Integration ---
|
|
546
|
+
|
|
547
|
+
server.registerTool(
|
|
548
|
+
"sync_namecheap",
|
|
549
|
+
{
|
|
550
|
+
title: "Sync Namecheap Domains",
|
|
551
|
+
description: "Sync all domains from Namecheap account to local database. Requires NAMECHEAP_API_KEY, NAMECHEAP_USERNAME, and NAMECHEAP_CLIENT_IP env vars.",
|
|
552
|
+
inputSchema: {},
|
|
553
|
+
},
|
|
554
|
+
async () => {
|
|
555
|
+
try {
|
|
556
|
+
const result = await syncToLocalDb({
|
|
557
|
+
getDomainByName,
|
|
558
|
+
createDomain,
|
|
559
|
+
updateDomain,
|
|
560
|
+
});
|
|
561
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
562
|
+
} catch (error: unknown) {
|
|
563
|
+
return {
|
|
564
|
+
content: [{ type: "text", text: `Sync failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
565
|
+
isError: true,
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
);
|
|
570
|
+
|
|
571
|
+
server.registerTool(
|
|
572
|
+
"renew_via_namecheap",
|
|
573
|
+
{
|
|
574
|
+
title: "Renew Domain via Namecheap",
|
|
575
|
+
description: "Renew a domain through the Namecheap API.",
|
|
576
|
+
inputSchema: {
|
|
577
|
+
domain: z.string().describe("Domain name to renew (e.g. example.com)"),
|
|
578
|
+
years: z.number().default(1).describe("Number of years to renew"),
|
|
579
|
+
},
|
|
580
|
+
},
|
|
581
|
+
async ({ domain, years }) => {
|
|
582
|
+
try {
|
|
583
|
+
const result = await namecheapRenew(domain, years);
|
|
584
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
585
|
+
} catch (error: unknown) {
|
|
586
|
+
return {
|
|
587
|
+
content: [{ type: "text", text: `Renewal failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
588
|
+
isError: true,
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
);
|
|
593
|
+
|
|
594
|
+
server.registerTool(
|
|
595
|
+
"check_availability_namecheap",
|
|
596
|
+
{
|
|
597
|
+
title: "Check Domain Availability",
|
|
598
|
+
description: "Check if a domain name is available for registration via Namecheap.",
|
|
599
|
+
inputSchema: {
|
|
600
|
+
domain: z.string().describe("Domain name to check (e.g. example.com)"),
|
|
601
|
+
},
|
|
602
|
+
},
|
|
603
|
+
async ({ domain }) => {
|
|
604
|
+
try {
|
|
605
|
+
const result = await namecheapCheck(domain);
|
|
606
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
607
|
+
} catch (error: unknown) {
|
|
608
|
+
return {
|
|
609
|
+
content: [{ type: "text", text: `Check failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
610
|
+
isError: true,
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
);
|
|
615
|
+
|
|
616
|
+
// --- GoDaddy Integration ---
|
|
617
|
+
|
|
618
|
+
server.registerTool(
|
|
619
|
+
"sync_godaddy",
|
|
620
|
+
{
|
|
621
|
+
title: "Sync GoDaddy Domains",
|
|
622
|
+
description: "Sync all domains from GoDaddy account to local database. Requires GODADDY_API_KEY and GODADDY_API_SECRET env vars.",
|
|
623
|
+
inputSchema: {},
|
|
624
|
+
},
|
|
625
|
+
async () => {
|
|
626
|
+
try {
|
|
627
|
+
const result = await godaddySyncToLocalDb({
|
|
628
|
+
getDomainByName,
|
|
629
|
+
createDomain,
|
|
630
|
+
updateDomain,
|
|
631
|
+
});
|
|
632
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
633
|
+
} catch (error: unknown) {
|
|
634
|
+
return {
|
|
635
|
+
content: [{ type: "text", text: `Sync failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
636
|
+
isError: true,
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
);
|
|
641
|
+
|
|
642
|
+
server.registerTool(
|
|
643
|
+
"renew_via_godaddy",
|
|
644
|
+
{
|
|
645
|
+
title: "Renew Domain via GoDaddy",
|
|
646
|
+
description: "Renew a domain through the GoDaddy API for 1 year.",
|
|
647
|
+
inputSchema: {
|
|
648
|
+
domain: z.string().describe("Domain name to renew (e.g. example.com)"),
|
|
649
|
+
},
|
|
650
|
+
},
|
|
651
|
+
async ({ domain }) => {
|
|
652
|
+
try {
|
|
653
|
+
const result = await godaddyRenewDomain(domain);
|
|
654
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
655
|
+
} catch (error: unknown) {
|
|
656
|
+
return {
|
|
657
|
+
content: [{ type: "text", text: `Renewal failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
658
|
+
isError: true,
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
);
|
|
663
|
+
|
|
664
|
+
// --- Unified Provider Tools ---
|
|
665
|
+
|
|
666
|
+
server.registerTool(
|
|
667
|
+
"sync_all_providers",
|
|
668
|
+
{
|
|
669
|
+
title: "Sync All Providers",
|
|
670
|
+
description: "Sync domains from all configured registrar providers (Namecheap, GoDaddy) to local database.",
|
|
671
|
+
inputSchema: {},
|
|
672
|
+
},
|
|
673
|
+
async () => {
|
|
674
|
+
try {
|
|
675
|
+
const result = await syncAll({
|
|
676
|
+
getDomainByName,
|
|
677
|
+
createDomain,
|
|
678
|
+
updateDomain,
|
|
679
|
+
});
|
|
680
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
681
|
+
} catch (error: unknown) {
|
|
682
|
+
return {
|
|
683
|
+
content: [{ type: "text", text: `Sync failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
684
|
+
isError: true,
|
|
685
|
+
};
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
);
|
|
689
|
+
|
|
690
|
+
server.registerTool(
|
|
691
|
+
"list_providers",
|
|
692
|
+
{
|
|
693
|
+
title: "List Providers",
|
|
694
|
+
description: "Show which registrar providers are configured (have API keys set).",
|
|
695
|
+
inputSchema: {},
|
|
696
|
+
},
|
|
697
|
+
async () => {
|
|
698
|
+
const providers = getAvailableProviders();
|
|
699
|
+
return { content: [{ type: "text", text: JSON.stringify(providers, null, 2) }] };
|
|
700
|
+
}
|
|
701
|
+
);
|
|
702
|
+
|
|
703
|
+
// --- Brandsight Tools ---
|
|
704
|
+
|
|
705
|
+
server.registerTool(
|
|
706
|
+
"monitor_brand",
|
|
707
|
+
{
|
|
708
|
+
title: "Monitor Brand",
|
|
709
|
+
description: "Monitor a brand name for new domain registrations that are similar (typosquats, homoglyphs, keyword matches). Uses Brandsight API.",
|
|
710
|
+
inputSchema: {
|
|
711
|
+
brand: z.string().describe("Brand name to monitor"),
|
|
712
|
+
},
|
|
713
|
+
},
|
|
714
|
+
async ({ brand }) => {
|
|
715
|
+
try {
|
|
716
|
+
const result = await monitorBrand(brand);
|
|
717
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
718
|
+
} catch (error: unknown) {
|
|
719
|
+
return {
|
|
720
|
+
content: [{ type: "text", text: `Monitor failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
721
|
+
isError: true,
|
|
722
|
+
};
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
);
|
|
726
|
+
|
|
727
|
+
server.registerTool(
|
|
728
|
+
"similar_domains",
|
|
729
|
+
{
|
|
730
|
+
title: "Similar Domains",
|
|
731
|
+
description: "Find typosquat/competing domains similar to the given domain. Uses Brandsight API.",
|
|
732
|
+
inputSchema: {
|
|
733
|
+
domain: z.string().describe("Domain to find similar domains for"),
|
|
734
|
+
},
|
|
735
|
+
},
|
|
736
|
+
async ({ domain }) => {
|
|
737
|
+
try {
|
|
738
|
+
const result = await getSimilarDomains(domain);
|
|
739
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
740
|
+
} catch (error: unknown) {
|
|
741
|
+
return {
|
|
742
|
+
content: [{ type: "text", text: `Similar domains check failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
743
|
+
isError: true,
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
);
|
|
748
|
+
|
|
749
|
+
server.registerTool(
|
|
750
|
+
"domain_threats",
|
|
751
|
+
{
|
|
752
|
+
title: "Domain Threats",
|
|
753
|
+
description: "Get a threat assessment for a domain including risk level, threats, and recommendation. Uses Brandsight API.",
|
|
754
|
+
inputSchema: {
|
|
755
|
+
domain: z.string().describe("Domain to assess threats for"),
|
|
756
|
+
},
|
|
757
|
+
},
|
|
758
|
+
async ({ domain }) => {
|
|
759
|
+
try {
|
|
760
|
+
const result = await getThreatAssessment(domain);
|
|
761
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
762
|
+
} catch (error: unknown) {
|
|
763
|
+
return {
|
|
764
|
+
content: [{ type: "text", text: `Threat assessment failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
765
|
+
isError: true,
|
|
766
|
+
};
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
);
|
|
770
|
+
|
|
358
771
|
// --- Start ---
|
|
359
772
|
async function main() {
|
|
360
773
|
const transport = new StdioServerTransport();
|