sophos-central-mcp-server 0.2.12 → 0.4.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 (37) hide show
  1. package/README.md +83 -15
  2. package/dist/client/sophos-client.d.ts.map +1 -1
  3. package/dist/client/sophos-client.js +7 -1
  4. package/dist/client/sophos-client.js.map +1 -1
  5. package/dist/index.js +14 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/tools/accounts.d.ts +11 -0
  8. package/dist/tools/accounts.d.ts.map +1 -0
  9. package/dist/tools/accounts.js +166 -0
  10. package/dist/tools/accounts.js.map +1 -0
  11. package/dist/tools/audit-events.d.ts +9 -0
  12. package/dist/tools/audit-events.d.ts.map +1 -0
  13. package/dist/tools/audit-events.js +98 -0
  14. package/dist/tools/audit-events.js.map +1 -0
  15. package/dist/tools/business-automation.d.ts +12 -0
  16. package/dist/tools/business-automation.d.ts.map +1 -0
  17. package/dist/tools/business-automation.js +274 -0
  18. package/dist/tools/business-automation.js.map +1 -0
  19. package/dist/tools/firewall.d.ts +6 -3
  20. package/dist/tools/firewall.d.ts.map +1 -1
  21. package/dist/tools/firewall.js +380 -156
  22. package/dist/tools/firewall.js.map +1 -1
  23. package/dist/tools/licensing.d.ts +9 -0
  24. package/dist/tools/licensing.d.ts.map +1 -0
  25. package/dist/tools/licensing.js +94 -0
  26. package/dist/tools/licensing.js.map +1 -0
  27. package/dist/tools/switch.d.ts +10 -0
  28. package/dist/tools/switch.d.ts.map +1 -0
  29. package/dist/tools/switch.js +119 -0
  30. package/dist/tools/switch.js.map +1 -0
  31. package/dist/tools/web-filtering.d.ts +15 -0
  32. package/dist/tools/web-filtering.d.ts.map +1 -0
  33. package/dist/tools/web-filtering.js +549 -0
  34. package/dist/tools/web-filtering.js.map +1 -0
  35. package/package.json +5 -1
  36. package/generate_health_report.py +0 -443
  37. package/generate_sales_report.py +0 -483
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Sophos Central MCP Server
2
2
 
3
- MCP (Model Context Protocol) server for interacting with Sophos Central APIs. Supports partner, organisation, and single-tenant credential types with automatic region routing. **255 tools** covering 14 Sophos API namespaces.
3
+ MCP (Model Context Protocol) server for interacting with Sophos Central APIs. Supports partner, organisation, and single-tenant credential types with automatic region routing. **288 tools** covering 20 Sophos API namespaces.
4
4
 
5
5
  ## Quick Start
6
6
 
@@ -82,7 +82,7 @@ claude mcp add sophos-central ^
82
82
  - **Token lifecycle**: Automatic OAuth2 token refresh before expiry
83
83
  - **Rate limit handling**: Retry with backoff on 429 responses
84
84
  - **Dual transport**: Streamable HTTP (for Claude Desktop / Claude Code) or stdio
85
- - **Full API coverage**: 255 tools across endpoints, alerts, policies, firewalls, email, mobile, XDR, cases, SIEM, and more
85
+ - **Full API coverage**: 288 tools across endpoints, alerts, policies, firewalls, web filtering, licensing, audit events, email, mobile, XDR, cases, SIEM, and more
86
86
 
87
87
  ## Screenshots
88
88
 
@@ -380,29 +380,34 @@ Async API — run OSquery SQL on live endpoints. Rate limited to 10 runs/minute,
380
380
  | `sophos_get_live_discover_run` | Poll Live Discover run status |
381
381
  | `sophos_get_live_discover_results` | Fetch Live Discover results |
382
382
 
383
- ### Firewall (19 tools)
383
+ ### Firewall (21 tools)
384
384
 
385
385
  | Tool | Description |
386
386
  |------|-------------|
387
387
  | `sophos_list_firewalls` | List managed firewalls |
388
- | `sophos_get_firewall` | Get firewall detail |
389
388
  | `sophos_update_firewall` | Update firewall properties |
390
389
  | `sophos_delete_firewall` | Delete a firewall |
391
- | `sophos_firewall_action` | Perform action (reboot, sync, upgrade check) |
392
- | `sophos_check_firmware_upgrade` | Check for firmware upgrades |
393
- | `sophos_start_firmware_upgrade` | Start a firmware upgrade |
394
- | `sophos_cancel_firmware_upgrade` | Cancel a firmware upgrade |
390
+ | `sophos_firewall_action` | Perform an action (approveManagement, the only documented action) |
391
+ | `sophos_check_firmware_upgrade` | Check firmware upgrades for a set of firewalls |
392
+ | `sophos_start_firmware_upgrade` | Start or schedule firmware upgrades |
393
+ | `sophos_cancel_firmware_upgrade` | Cancel scheduled firmware upgrades |
395
394
  | `sophos_list_firewall_groups` | List firewall groups |
396
395
  | `sophos_get_firewall_group` | Get firewall group detail |
397
396
  | `sophos_create_firewall_group` | Create a firewall group |
398
397
  | `sophos_update_firewall_group` | Update a firewall group |
399
398
  | `sophos_delete_firewall_group` | Delete a firewall group |
400
- | `sophos_get_firewall_sync_status` | Get firewall sync status |
401
- | `sophos_get_threat_feed_settings` | Get MDR threat feed settings |
402
- | `sophos_update_threat_feed_settings` | Update threat feed settings |
403
- | `sophos_list_threat_feed_indicators` | List threat feed indicators |
404
- | `sophos_search_threat_feed_indicators` | Search threat feed indicators |
405
- | `sophos_get_threat_feed_indicator` | Get specific threat indicator |
399
+ | `sophos_get_firewall_sync_status` | Get sync status of the firewalls in a group |
400
+ | `sophos_get_threat_feed_settings` | Get a firewall's MDR threat feed |
401
+ | `sophos_update_threat_feed_settings` | Update a firewall's MDR threat feed settings |
402
+ | `sophos_search_threat_feed_indicators` | Search a firewall's MDR threat feed indicators |
403
+ | `sophos_get_firewall_transaction` | Poll a per-firewall transaction (threat feed ops) |
404
+ | `sophos_export_firewall_config` | Start a config export (backup) of a firewall |
405
+ | `sophos_get_firewall_import_export_transaction` | Poll an export/import transaction |
406
+ | `sophos_download_firewall_backup` | Download a finished backup archive to a local file |
407
+ | `sophos_import_firewall_config` | Upload and import a config archive into firewalls |
408
+
409
+ Config import/export requires the firewall to run SFOS v22 MR2 or later, be
410
+ managed by Sophos Central, and hold an active license.
406
411
 
407
412
  ### Email Protection (29 tools)
408
413
 
@@ -510,6 +515,69 @@ Async API — run OSquery SQL on live endpoints. Rate limited to 10 runs/minute,
510
515
  | `sophos_create_attestation` | Create a user attestation/sign-off |
511
516
  | `sophos_get_attestation` | Get attestation detail |
512
517
 
518
+ ### Audit Events (1 tool)
519
+
520
+ | Tool | Description |
521
+ |------|-------------|
522
+ | `sophos_list_audit_events` | List Sophos Central audit events (who did what, 90-day window) |
523
+
524
+ ### Licensing (2 tools)
525
+
526
+ | Tool | Description |
527
+ |------|-------------|
528
+ | `sophos_list_licenses` | List a tenant's product licenses, usage, and entitlements |
529
+ | `sophos_list_firewall_licenses` | List firewall license details (tenant or partner-wide) |
530
+
531
+ ### Web Filtering (16 tools)
532
+
533
+ | Tool | Description |
534
+ |------|-------------|
535
+ | `sophos_list_web_filtering_profiles` | List web filtering profiles |
536
+ | `sophos_get_web_filtering_profile` | Get a web filtering profile |
537
+ | `sophos_create_web_filtering_profile` | Create a web filtering profile |
538
+ | `sophos_update_web_filtering_profile` | Update (replace) a web filtering profile |
539
+ | `sophos_delete_web_filtering_profile` | Delete a web filtering profile |
540
+ | `sophos_clone_web_filtering_profile` | Clone a web filtering profile |
541
+ | `sophos_get_web_filtering_metadata` | Get categories, groups, and presets |
542
+ | `sophos_list_site_lists` | List site lists |
543
+ | `sophos_get_site_list` | Get a site list |
544
+ | `sophos_create_site_list` | Create a site list |
545
+ | `sophos_update_site_list` | Update (replace) a site list |
546
+ | `sophos_delete_site_list` | Delete a site list |
547
+ | `sophos_clone_site_list` | Clone a site list |
548
+ | `sophos_list_sites` | List the sites in a site list |
549
+ | `sophos_add_site` | Add a site to a site list |
550
+ | `sophos_delete_site` | Delete a site from a site list |
551
+
552
+ ### Switch Management (3 tools)
553
+
554
+ | Tool | Description |
555
+ |------|-------------|
556
+ | `sophos_get_switch_mac_filtering` | Get global switch MAC filtering settings |
557
+ | `sophos_update_switch_mac_filtering` | Replace the switch MAC filtering address list |
558
+ | `sophos_list_switch_tasks` | List switch configuration tasks |
559
+
560
+ ### Accounts / Access Tokens (4 tools)
561
+
562
+ | Tool | Description |
563
+ |------|-------------|
564
+ | `sophos_list_access_tokens` | List repository access tokens |
565
+ | `sophos_create_access_token` | Create a repository access token (Sophos Linux Sensor) |
566
+ | `sophos_update_access_token` | Update a token's label or expiry |
567
+ | `sophos_revoke_access_token` | Revoke a token |
568
+
569
+ ### Business Automation (4 tools)
570
+
571
+ Distributor-scoped: requires distributor-entitled credentials and an
572
+ X-Distributor-ID.
573
+
574
+ | Tool | Description |
575
+ |------|-------------|
576
+ | `sophos_list_ba_quotes` | List distributor quotes (new, amendment, renewal) |
577
+ | `sophos_get_ba_quote` | Get a quote by proposal number |
578
+ | `sophos_get_ba_partner_levels` | Partner program levels for a billing sub-region |
579
+ | `sophos_get_ba_pricing` | Price a set of product lines for a reseller |
580
+
513
581
  ### Tenant context
514
582
 
515
583
  For **partner/org** callers, every tenant-scoped tool requires a `tenant_id` parameter. Use `sophos_list_tenants` first to discover available tenant IDs.
@@ -570,7 +638,7 @@ src/
570
638
  │ ├── siem.ts # SIEM events and alerts
571
639
  │ ├── xdr.ts # XDR Data Lake queries (async)
572
640
  │ ├── live-discover.ts # Live Discover queries (async)
573
- │ ├── firewall.ts # Firewall CRUD, firmware, groups, threat feed
641
+ │ ├── firewall.ts # Firewall CRUD, firmware, groups, threat feed, config import/export
574
642
  │ ├── email.ts # Quarantine, mailboxes, message actions
575
643
  │ ├── mobile.ts # Mobile devices, groups, actions, policies
576
644
  │ ├── dns-protection.ts # DNS locations
@@ -1 +1 @@
1
- {"version":3,"file":"sophos-client.d.ts","sourceRoot":"","sources":["../../src/client/sophos-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,wBAAwB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;gBADd,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc;IAGxC;;;OAGG;IACG,aAAa,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC;IAgCb;;OAEG;IACG,aAAa,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC;YAiCC,gBAAgB;IAwE9B,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"sophos-client.d.ts","sourceRoot":"","sources":["../../src/client/sophos-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,wBAAwB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;gBADd,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc;IAGxC;;;OAGG;IACG,aAAa,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC;IAgCb;;OAEG;IACG,aAAa,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC;YA2CC,gBAAgB;IAwE9B,OAAO,CAAC,KAAK;CAGd"}
@@ -54,9 +54,15 @@ export class SophosClient {
54
54
  }
55
55
  }
56
56
  }
57
+ // Some global-host APIs (licensing, accounts, audit, business automation) are
58
+ // scoped by an explicit X-Tenant-ID / X-Distributor-ID header. Sending the
59
+ // caller's identity header alongside those can be rejected, so skip it when
60
+ // the caller provides its own scope header.
61
+ const hasOwnScopeHeader = options.headers &&
62
+ Object.keys(options.headers).some((h) => ["x-tenant-id", "x-distributor-id"].includes(h.toLowerCase()));
57
63
  const headers = {
58
64
  Authorization: `Bearer ${token}`,
59
- [idHeader.name]: idHeader.value,
65
+ ...(hasOwnScopeHeader ? {} : { [idHeader.name]: idHeader.value }),
60
66
  ...(options.body !== undefined ? { "Content-Type": "application/json" } : {}),
61
67
  ...options.headers,
62
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sophos-client.js","sourceRoot":"","sources":["../../src/client/sophos-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sophos-client.js","sourceRoot":"","sources":["../../src/client/sophos-client.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -39,6 +39,12 @@ import { registerWifiTools } from "./tools/wifi.js";
39
39
  import { registerUserActivityTools } from "./tools/user-activity.js";
40
40
  import { registerPartnerTools } from "./tools/partner.js";
41
41
  import { registerMobileTools } from "./tools/mobile.js";
42
+ import { registerAuditEventTools } from "./tools/audit-events.js";
43
+ import { registerLicensingTools } from "./tools/licensing.js";
44
+ import { registerWebFilteringTools } from "./tools/web-filtering.js";
45
+ import { registerSwitchTools } from "./tools/switch.js";
46
+ import { registerAccountsTools } from "./tools/accounts.js";
47
+ import { registerBusinessAutomationTools } from "./tools/business-automation.js";
42
48
  async function main() {
43
49
  // Load and validate config
44
50
  const config = loadConfig();
@@ -98,6 +104,14 @@ async function main() {
98
104
  registerUserActivityTools(server, sophosClient, tenantResolver);
99
105
  // Phase 10: Mobile device management tools
100
106
  registerMobileTools(server, sophosClient, tenantResolver);
107
+ // Phase 11: Audit events, licensing, web filtering, switch, accounts,
108
+ // business automation
109
+ registerAuditEventTools(server, sophosClient, tenantResolver);
110
+ registerLicensingTools(server, sophosClient, tenantResolver);
111
+ registerWebFilteringTools(server, sophosClient, tenantResolver);
112
+ registerSwitchTools(server, sophosClient, tenantResolver);
113
+ registerAccountsTools(server, sophosClient, tenantResolver);
114
+ registerBusinessAutomationTools(server, sophosClient, tenantResolver);
101
115
  console.error("[sophos-mcp] All tools registered.");
102
116
  // Start transport
103
117
  if (config.transport === "http") {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tools: sophos_list_access_tokens, sophos_create_access_token,
3
+ * sophos_update_access_token, sophos_revoke_access_token
4
+ * Interact with the Sophos Accounts API /accounts/v1/ (global host).
5
+ * Manages repository access tokens (e.g. for the Sophos Linux Sensor).
6
+ */
7
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ import type { SophosClient } from "../client/sophos-client.js";
9
+ import type { TenantResolver } from "../client/tenant-resolver.js";
10
+ export declare function registerAccountsTools(server: McpServer, client: SophosClient, tenantResolver: TenantResolver): void;
11
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/tools/accounts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,cAAc,GAC7B,IAAI,CAuLN"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Tools: sophos_list_access_tokens, sophos_create_access_token,
3
+ * sophos_update_access_token, sophos_revoke_access_token
4
+ * Interact with the Sophos Accounts API /accounts/v1/ (global host).
5
+ * Manages repository access tokens (e.g. for the Sophos Linux Sensor).
6
+ */
7
+ import { z } from "zod";
8
+ import { jsonResult, withErrorHandling } from "./helpers.js";
9
+ import { DEFAULT_PAGE_SIZE } from "../config/config.js";
10
+ export function registerAccountsTools(server, client, tenantResolver) {
11
+ // --- List Access Tokens ---
12
+ server.registerTool("sophos_list_access_tokens", {
13
+ title: "List Sophos Access Tokens",
14
+ description: `List a tenant's repository access tokens (e.g. Sophos Linux Sensor package tokens).
15
+
16
+ Args:
17
+ - limit (number, optional): Max results per page (1-100, default 50).
18
+ - page (number, optional): Page number (default 1).
19
+ - tenant_id (string, optional): Tenant ID. Required for partner/org callers.`,
20
+ inputSchema: {
21
+ limit: z
22
+ .number()
23
+ .int()
24
+ .min(1)
25
+ .max(100)
26
+ .optional()
27
+ .default(DEFAULT_PAGE_SIZE)
28
+ .describe("Max results per page (default 50)"),
29
+ page: z
30
+ .number()
31
+ .int()
32
+ .min(1)
33
+ .optional()
34
+ .default(1)
35
+ .describe("Page number (default 1)"),
36
+ tenant_id: z
37
+ .string()
38
+ .uuid()
39
+ .optional()
40
+ .describe("Tenant ID. Required for partner/org callers."),
41
+ },
42
+ annotations: {
43
+ readOnlyHint: true,
44
+ destructiveHint: false,
45
+ idempotentHint: true,
46
+ openWorldHint: true,
47
+ },
48
+ }, withErrorHandling(async ({ limit, page, tenant_id }) => {
49
+ const resolvedTenantId = tenantResolver.resolveTenantId(tenant_id);
50
+ const data = await client.globalRequest("/accounts/v1/access-tokens", {
51
+ params: { pageSize: String(limit), page: String(page), pageTotal: "true" },
52
+ headers: { "X-Tenant-ID": resolvedTenantId },
53
+ });
54
+ return jsonResult(data);
55
+ }));
56
+ // --- Create Access Token ---
57
+ server.registerTool("sophos_create_access_token", {
58
+ title: "Create Sophos Access Token",
59
+ description: `Create a repository access token for a tenant.
60
+
61
+ Args:
62
+ - label (string): Human-readable token label.
63
+ - type (string): Token type. Only "sophosLinuxSensor" is supported.
64
+ - expires_at (string, optional): Expiry (ISO 8601 datetime).
65
+ - tenant_id (string, optional): Tenant ID. Required for partner/org callers.`,
66
+ inputSchema: {
67
+ label: z.string().describe("Human-readable token label"),
68
+ type: z
69
+ .enum(["sophosLinuxSensor"])
70
+ .describe("Token type (only sophosLinuxSensor is supported)"),
71
+ expires_at: z.string().optional().describe("Expiry (ISO 8601 datetime)"),
72
+ tenant_id: z
73
+ .string()
74
+ .uuid()
75
+ .optional()
76
+ .describe("Tenant ID. Required for partner/org callers."),
77
+ },
78
+ annotations: {
79
+ readOnlyHint: false,
80
+ destructiveHint: false,
81
+ idempotentHint: false,
82
+ openWorldHint: true,
83
+ },
84
+ }, withErrorHandling(async ({ label, type, expires_at, tenant_id }) => {
85
+ const resolvedTenantId = tenantResolver.resolveTenantId(tenant_id);
86
+ const body = { label, type };
87
+ if (expires_at)
88
+ body.expiresAt = expires_at;
89
+ const data = await client.globalRequest("/accounts/v1/access-tokens", { method: "POST", body, headers: { "X-Tenant-ID": resolvedTenantId } });
90
+ return jsonResult({ status: "created", token: data });
91
+ }));
92
+ // --- Update Access Token ---
93
+ server.registerTool("sophos_update_access_token", {
94
+ title: "Update Sophos Access Token",
95
+ description: `Update a repository access token's label or expiry.
96
+
97
+ Args:
98
+ - token_id (string): The token ID.
99
+ - label (string, optional): New label.
100
+ - expires_at (string, optional): New expiry (ISO 8601 datetime).
101
+ - tenant_id (string, optional): Tenant ID. Required for partner/org callers.`,
102
+ inputSchema: {
103
+ token_id: z.string().describe("Token ID"),
104
+ label: z.string().optional().describe("New label"),
105
+ expires_at: z.string().optional().describe("New expiry (ISO 8601 datetime)"),
106
+ tenant_id: z
107
+ .string()
108
+ .uuid()
109
+ .optional()
110
+ .describe("Tenant ID. Required for partner/org callers."),
111
+ },
112
+ annotations: {
113
+ readOnlyHint: false,
114
+ destructiveHint: false,
115
+ idempotentHint: true,
116
+ openWorldHint: true,
117
+ },
118
+ }, withErrorHandling(async ({ token_id, label, expires_at, tenant_id }) => {
119
+ const resolvedTenantId = tenantResolver.resolveTenantId(tenant_id);
120
+ const body = {};
121
+ if (label !== undefined)
122
+ body.label = label;
123
+ if (expires_at !== undefined)
124
+ body.expiresAt = expires_at;
125
+ if (Object.keys(body).length === 0) {
126
+ return jsonResult({
127
+ error: "No fields to update. Provide at least one of: label, expires_at.",
128
+ });
129
+ }
130
+ const data = await client.globalRequest(`/accounts/v1/access-tokens/${token_id}`, { method: "PATCH", body, headers: { "X-Tenant-ID": resolvedTenantId } });
131
+ return jsonResult({ status: "updated", token: data });
132
+ }));
133
+ // --- Revoke Access Token ---
134
+ server.registerTool("sophos_revoke_access_token", {
135
+ title: "Revoke Sophos Access Token",
136
+ description: `Revoke a repository access token.
137
+
138
+ WARNING: Systems using this token lose repository access.
139
+
140
+ Args:
141
+ - token_id (string): The token ID to revoke.
142
+ - tenant_id (string, optional): Tenant ID. Required for partner/org callers.`,
143
+ inputSchema: {
144
+ token_id: z.string().describe("Token ID to revoke"),
145
+ tenant_id: z
146
+ .string()
147
+ .uuid()
148
+ .optional()
149
+ .describe("Tenant ID. Required for partner/org callers."),
150
+ },
151
+ annotations: {
152
+ readOnlyHint: false,
153
+ destructiveHint: true,
154
+ idempotentHint: true,
155
+ openWorldHint: true,
156
+ },
157
+ }, withErrorHandling(async ({ token_id, tenant_id }) => {
158
+ const resolvedTenantId = tenantResolver.resolveTenantId(tenant_id);
159
+ await client.globalRequest(`/accounts/v1/access-tokens/${token_id}`, {
160
+ method: "DELETE",
161
+ headers: { "X-Tenant-ID": resolvedTenantId },
162
+ });
163
+ return jsonResult({ status: "revoked", token_id });
164
+ }));
165
+ }
166
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/tools/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tools: sophos_list_audit_events
3
+ * Interact with the Sophos Audit Events API /audit/v1/ (global host).
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import type { SophosClient } from "../client/sophos-client.js";
7
+ import type { TenantResolver } from "../client/tenant-resolver.js";
8
+ export declare function registerAuditEventTools(server: McpServer, client: SophosClient, tenantResolver: TenantResolver): void;
9
+ //# sourceMappingURL=audit-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-events.d.ts","sourceRoot":"","sources":["../../src/tools/audit-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,cAAc,GAC7B,IAAI,CAuGN"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Tools: sophos_list_audit_events
3
+ * Interact with the Sophos Audit Events API /audit/v1/ (global host).
4
+ */
5
+ import { z } from "zod";
6
+ import { jsonResult, withErrorHandling } from "./helpers.js";
7
+ import { DEFAULT_PAGE_SIZE } from "../config/config.js";
8
+ export function registerAuditEventTools(server, client, tenantResolver) {
9
+ // --- List Audit Events ---
10
+ server.registerTool("sophos_list_audit_events", {
11
+ title: "List Sophos Central Audit Events",
12
+ description: `List audit events (who did what in Sophos Central).
13
+
14
+ Covers administrative activity across Sophos Central: sign-ins, policy and
15
+ settings changes, and API activity. Events are retained for 90 days; the
16
+ start date must be within that window. Cursor-paginated via page_from_key.
17
+
18
+ Scoping: pass tenant_id to query one tenant's audit trail. Omit it to query
19
+ at the caller's own level (partner, organization, or tenant depending on the
20
+ credentials).
21
+
22
+ Args:
23
+ - start_date (string): Start date (ISO 8601), no earlier than 90 days ago.
24
+ - end_date (string, optional): Up to this end date (ISO 8601).
25
+ - origin_ip_address (string, optional): Filter by origin IP address.
26
+ - modified_by (string, optional): Filter by modifier's email.
27
+ - modifier_account_id (string, optional): Filter by modifier account ID.
28
+ - resource_owner_id (string, optional): Filter by resource owner ID.
29
+ - page_from_key (string, optional): Cursor key from a previous response.
30
+ - limit (number, optional): Max results per page (1-100, default 50).
31
+ - tenant_id (string, optional): Tenant ID to scope the query to one tenant.`,
32
+ inputSchema: {
33
+ start_date: z
34
+ .string()
35
+ .describe("Start date (ISO 8601), no earlier than 90 days ago"),
36
+ end_date: z.string().optional().describe("Up to this end date (ISO 8601)"),
37
+ origin_ip_address: z
38
+ .string()
39
+ .optional()
40
+ .describe("Filter by origin IP address"),
41
+ modified_by: z.string().optional().describe("Filter by modifier's email"),
42
+ modifier_account_id: z
43
+ .string()
44
+ .optional()
45
+ .describe("Filter by modifier account ID"),
46
+ resource_owner_id: z
47
+ .string()
48
+ .optional()
49
+ .describe("Filter by resource owner ID"),
50
+ page_from_key: z
51
+ .string()
52
+ .optional()
53
+ .describe("Cursor key from a previous response"),
54
+ limit: z
55
+ .number()
56
+ .int()
57
+ .min(1)
58
+ .max(100)
59
+ .optional()
60
+ .default(DEFAULT_PAGE_SIZE)
61
+ .describe("Max results per page (default 50)"),
62
+ tenant_id: z
63
+ .string()
64
+ .uuid()
65
+ .optional()
66
+ .describe("Tenant ID to scope the query to one tenant"),
67
+ },
68
+ annotations: {
69
+ readOnlyHint: true,
70
+ destructiveHint: false,
71
+ idempotentHint: true,
72
+ openWorldHint: true,
73
+ },
74
+ }, withErrorHandling(async ({ start_date, end_date, origin_ip_address, modified_by, modifier_account_id, resource_owner_id, page_from_key, limit, tenant_id, }) => {
75
+ const params = {
76
+ startDate: start_date,
77
+ pageSize: String(limit),
78
+ };
79
+ if (end_date)
80
+ params.endDate = end_date;
81
+ if (origin_ip_address)
82
+ params.originIpAddress = origin_ip_address;
83
+ if (modified_by)
84
+ params.modifiedBy = modified_by;
85
+ if (modifier_account_id)
86
+ params.modifierAccountId = modifier_account_id;
87
+ if (resource_owner_id)
88
+ params.resourceOwnerId = resource_owner_id;
89
+ if (page_from_key)
90
+ params.pageFromKey = page_from_key;
91
+ const data = await client.globalRequest("/audit/v1/audit-events", {
92
+ params,
93
+ ...(tenant_id ? { headers: { "X-Tenant-ID": tenant_id } } : {}),
94
+ });
95
+ return jsonResult(data);
96
+ }));
97
+ }
98
+ //# sourceMappingURL=audit-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-events.js","sourceRoot":"","sources":["../../src/tools/audit-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tools: sophos_list_ba_quotes, sophos_get_ba_quote,
3
+ * sophos_get_ba_partner_levels, sophos_get_ba_pricing
4
+ * Interact with the Sophos Business Automation API /business-automation/v1/
5
+ * (global host). Distributor-scoped: every call needs a distributor ID and
6
+ * distributor-entitled API credentials.
7
+ */
8
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import type { SophosClient } from "../client/sophos-client.js";
10
+ import type { TenantResolver } from "../client/tenant-resolver.js";
11
+ export declare function registerBusinessAutomationTools(server: McpServer, client: SophosClient, _tenantResolver: TenantResolver): void;
12
+ //# sourceMappingURL=business-automation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-automation.d.ts","sourceRoot":"","sources":["../../src/tools/business-automation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,cAAc,GAC9B,IAAI,CAwTN"}