@magicsword-io/magicsword-mcp 0.1.4 → 0.1.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/README.md CHANGED
@@ -10,12 +10,13 @@ The server is a thin, opinionated wrapper around the
10
10
  `/api/public/v1/*` customer API exposed by the Magic Portal. It runs on
11
11
  the user's machine, holds an `msk_…` API key, and speaks MCP over stdio.
12
12
 
13
- > **Plan gate.** The customer API is Enterprise-only. With a pilot-tier key
14
- > the server returns a clear "this MagicSword org needs the Enterprise plan
15
- > to use MCP" message; nothing else works until the org is upgraded.
16
-
17
13
  ## Quick start
18
14
 
15
+ > **Free to use.** MagicSword MCP and the customer API are available on the
16
+ > **Free plan**, as well as Enterprise. Get started with a Free account and an
17
+ > API key; no Enterprise subscription is required. Your key's scopes and plan
18
+ > determine which operations are available; strict policy mode requires Enterprise.
19
+
19
20
  ### Claude Desktop installer
20
21
 
21
22
  For Claude Desktop on macOS or Windows, download **magicsword-mcp.mcpb** from
@@ -23,7 +24,7 @@ For Claude Desktop on macOS or Windows, download **magicsword-mcp.mcpb** from
23
24
  The installer is included starting with version **0.1.4**. If that release is
24
25
  not available yet, use terminal setup below.
25
26
 
26
- 1. Generate an Enterprise API key in **Magic Portal → Settings → API Keys**.
27
+ 1. Generate an API key in **Magic Portal → Settings → API Keys**.
27
28
  Start with read scopes for endpoints, alerts, and policies.
28
29
  2. In Claude Desktop, open **Settings → Extensions → Advanced settings →
29
30
  Install Extension…**, then select the downloaded `.mcpb` file.
@@ -41,7 +42,7 @@ automatic directory updates require a reviewed directory listing.
41
42
 
42
43
  ### Terminal setup
43
44
 
44
- Requires **Node.js 22+**, an installed MCP client, and a MagicSword Enterprise
45
+ Requires **Node.js 22+**, an installed MCP client, and a MagicSword
45
46
  API key from **Magic Portal → Settings → API Keys**.
46
47
 
47
48
  **Recommended: install and connect your client in one command.** Setup prompts
@@ -178,7 +179,7 @@ Manual setup prints a credential-free launch entry for other local stdio MCP
178
179
  clients. Unattended setup without `--client` writes only the MagicSword file.
179
180
 
180
181
  Restart the selected client or start a new session to load `magicsword` and its
181
- 22 tools. Ask it to call `whoami` and then `list_endpoints` to verify access;
182
+ 25 tools. Ask it to call `whoami` and then `list_endpoints` to verify access;
182
183
  discovery alone does not verify API-key scopes. Claude Desktop logs are at
183
184
  `~/Library/Logs/Claude/mcp*.log` on macOS. Browser-only clients require a remote
184
185
  MCP transport; this package provides a local stdio server.
@@ -192,6 +193,7 @@ environment. Keep API keys out of shared config snippets and screenshots.
192
193
  | Tool | What it does |
193
194
  | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
194
195
  | `whoami` | Returns organization, key id, and scopes. Always call first when troubleshooting. |
196
+ | `list_endpoint_groups` | Lists organization computer groups and parent group IDs for assignment previews. Requires `endpoints:read`. |
195
197
  | `list_endpoints` | Lists endpoints with optional platform / status / hostname-glob filtering. |
196
198
  | `show_endpoint` | Fetches one endpoint with OS, policy, compliance, upgrade, heartbeat, and AMSI details. |
197
199
  | `list_agent_releases` | Lists available agent versions and per-platform latest releases. |
@@ -199,9 +201,11 @@ environment. Keep API keys out of shared config snippets and screenshots.
199
201
  | `list_events` | Searches Investigate events by name, filename, path, hash, publisher, computer, or package family, with type/status/policy/endpoint/time filters. |
200
202
  | `triage_alert` | Fetches one alert directly with triggering events, metadata, and file context; optionally acknowledges or dismisses it. |
201
203
  | `list_policies` | Lists policies with current version + mode. |
204
+ | `create_policy` | Creates a new empty audit policy for Windows, macOS, or Linux without assigning devices. Requires `policies:write`. |
205
+ | `clone_policy` | Copies a policy into an independent audit policy with its rules, settings, intelligence links and collection links; no computers assigned. |
202
206
  | `show_policy` | Shows one policy by id. |
203
207
  | `manage_policy_rules` | Lists rules or adds explicit / event-derived rules to a policy by id or name. Avoid explicit flat hash rules for Windows WDAC. |
204
- | `apply_policy_to_endpoints` | Resolves endpoints and previews a policy assignment; `confirm=true` applies it after approval. |
208
+ | `apply_policy_to_endpoints` | Previews assignment to computer IDs, hostname matches, or groups; a server-issued `confirmation_token` commits the approved snapshot. |
205
209
  | `flip_to_enforcing` | Two-step preview/confirm flip with a server-issued one-time confirm token. Safety-critical. |
206
210
  | `list_intel_sources` | Discovers enabled global and organization-owned intel sources and IDs, with platform and pagination filters. |
207
211
  | `list_customer_intel_feeds` | Lists private intel feeds or feed items. |
@@ -217,13 +221,159 @@ environment. Keep API keys out of shared config snippets and screenshots.
217
221
  Write tools require matching Customer API scopes in Magic Portal, such as
218
222
  `alerts:write`, `policies:write`, `endpoints:write`, or `intel:write`.
219
223
  Event review uses `alerts:read`; turning selected events into policy rules
220
- uses `policies:write`.
224
+ uses `policies:write`. Cloning requires `policies:write`; group discovery requires
225
+ `endpoints:read`; assignment preview and commit require **both** `policies:write`
226
+ and `endpoints:read`.
221
227
 
222
228
  Tools publish standard MCP safety annotations. Read-only discovery tools are
223
229
  marked read-only and idempotent; enforcement, deletion, policy assignment,
224
230
  rule changes, and agent upgrades are marked destructive so MCP clients can
225
231
  apply appropriate confirmation UX.
226
232
 
233
+ ## Creating a policy
234
+
235
+ Ask “Create a Windows policy named Block LOLBAS.” The agent calls:
236
+
237
+ ```json
238
+ {
239
+ "name": "Block LOLBAS",
240
+ "platform": "windows",
241
+ "policy_mode": "blocklist"
242
+ }
243
+ ```
244
+
245
+ `create_policy` creates a new empty policy and version 1 in **audit mode** in the
246
+ organization selected by your API key or connection. It returns the policy ID
247
+ for subsequent rule and intelligence-source additions. It does not assign
248
+ devices, make the policy a default, attach feeds, or switch enforcement on.
249
+ Existing organization collection settings can be inherited.
250
+
251
+ The name must contain 1–200 characters. `platform` is required; `policy_mode`
252
+ defaults to `blocklist`. Windows/macOS `strict` mode requires Enterprise; Linux
253
+ strict is unsupported. Free accounts can create blocklist policies. Creation
254
+ requires `policies:write`; later list/show calls also require `policies:read`.
255
+
256
+ For “Create Block LOLBAS and attach LOLBAS”, first create the policy, then use
257
+ `list_intel_sources` to resolve the feed and `manage_policy_intel_sources` with
258
+ the returned policy ID. Use `manage_policy_rules` for explicit or selected-event
259
+ rules. Creation is a separate operation from building and deploying the policy.
260
+ Every successful create call makes a new policy, including repeated names.
261
+ Writes are not automatically retried: if the connection drops or the response
262
+ cannot be verified, list policies before trying again.
263
+
264
+ Deploy the Portal policy-creation route and migration before using this tool.
265
+ Hosted Portal MCP includes the tool when the connection has policy write scope.
266
+
267
+ ## Cloning and assigning to computers or groups
268
+
269
+ You can ask: “Clone Workstations as Finance pilot, then assign the copy to
270
+ FINANCE-01,” “assign it to these three computers,” or “assign it to the Finance
271
+ group.” The client discovers the source policy and targets, creates a copy,
272
+ and shows an assignment preview before committing after your approval.
273
+
274
+ Call `clone_policy` with the source ID from `list_policies` and a new name:
275
+
276
+ ```json
277
+ { "policy_id": "<source-policy-uuid>", "name": "Finance pilot" }
278
+ ```
279
+
280
+ The returned `policy.id` is the **new** policy ID. The copy starts at version 1
281
+ in audit mode even if the source enforces. It preserves supported policy and
282
+ version settings, all rules (including signer/file-attribute relationships),
283
+ intelligence links and sync watermarks, and analytics collection links. Feeds
284
+ and collections remain shared; their underlying data is not duplicated. The
285
+ source, device assignments, organization defaults, version history, and generated
286
+ policy artifacts are not copied or changed. If your plan cannot preserve the
287
+ content, the request fails instead of silently removing protections. A clone
288
+ may inherit the organization's collection settings, as with other new policies.
289
+
290
+ Cloning alone assigns no computers. Find device IDs using `list_endpoints`, or
291
+ get group IDs and hierarchy using `list_endpoint_groups`:
292
+
293
+ ```json
294
+ { "limit": 100, "offset": 0 }
295
+ ```
296
+
297
+ Group pages include `id`, `name`, `parent_group_id`, and `description`, with
298
+ `total`, `limit`, and `offset`. Maximum page size is 500; page through the full
299
+ list when resolving a group name. Names must resolve unambiguously before use.
300
+
301
+ Preview with `apply_policy_to_endpoints` using **one** selector. Replace the
302
+ placeholders below with real UUIDs and use the newly returned clone ID:
303
+
304
+ ```json
305
+ { "policy_id": "<cloned-policy-uuid>", "endpoint_ids": ["<computer-uuid>"] }
306
+ ```
307
+
308
+ ```json
309
+ {
310
+ "policy_id": "<cloned-policy-uuid>",
311
+ "endpoint_ids": ["<computer-1-uuid>", "<computer-2-uuid>", "<computer-3-uuid>"]
312
+ }
313
+ ```
314
+
315
+ ```json
316
+ {
317
+ "policy_id": "<cloned-policy-uuid>",
318
+ "group_ids": ["<finance-group-uuid>"],
319
+ "include_descendants": true
320
+ }
321
+ ```
322
+
323
+ You can also use `hostname_pattern`, such as `FINANCE-*`, with an optional
324
+ `platform` filter. Select at most 50 groups and 500 resolved computers per
325
+ preview. Subgroups are included by default; set `include_descendants=false`
326
+ for direct members only. Overlapping groups resolve each computer once.
327
+ Foreign, missing, incompatible-platform, agentless, or uninstalled targets
328
+ reject the whole request. An empty or oversized selection is not deployed.
329
+
330
+ The preview shows the exact computers, previous assignments, policy status and
331
+ mode, plus a five-minute confirmation token. **Assignment replaces the previous
332
+ desired policy set**; it is not additive. An audit copy can remove existing
333
+ blocking protection, and assigning an enforcing policy can cause applications
334
+ to be blocked. Review that change with the human before committing.
335
+
336
+ After approval, call the same tool with **only** the policy ID and the returned
337
+ `confirmation.token`:
338
+
339
+ ```json
340
+ {
341
+ "policy_id": "<cloned-policy-uuid>",
342
+ "confirmation_token": "<token-from-preview>"
343
+ }
344
+ ```
345
+
346
+ The server binds approval to the key, organization, policy content and concrete
347
+ computer snapshot. Expired/reused tokens, changed policy content or previous
348
+ assignments, and newly ineligible computers require a fresh preview. Membership
349
+ changes do not expand the approved set. This is a one-time assignment to members
350
+ at preview time, **not** a persistent rule for computers added later.
351
+
352
+ Success means `policy_id` and `desired_policy_ids` were saved atomically for
353
+ all targets, pending agent check-in; it does not prove device installation.
354
+ Use `show_endpoint` and subsequent check-ins to inspect actual deployment.
355
+ This flow does not itself change the policy's audit/enforcement status.
356
+
357
+ `confirm=true` alone no longer authorizes this tool. Existing callers must use
358
+ the server token; sending selectors with a token is rejected. Writes are never
359
+ retried automatically. If a clone or assignment response is missing/malformed,
360
+ reconcile with `list_policies` or endpoint desired state before retrying: the
361
+ operation may already have committed.
362
+
363
+ The customer API exposes the same workflow:
364
+
365
+ | Method | Route under `/api/public/v1` | Body / purpose |
366
+ | --- | --- | --- |
367
+ | POST | `/policies/{sourceId}/clone` | `{ "name": "Finance pilot" }`; returns 201 with the new audit policy, source IDs and copied counts. |
368
+ | GET | `/endpoint-groups` | `limit` and `offset` query parameters; tenant-scoped group discovery. |
369
+ | POST | `/policies/{policyId}/assignment-preview` | One selector and its options; returns concrete targets and a confirmation token. |
370
+ | POST | `/policies/{policyId}/assign` | `{ "confirmation_token": "..." }`; returns desired-state count and endpoint IDs, `assignment_status=pending_checkin`. |
371
+
372
+ Deploy the **Portal migrations and routes first**. Hosted MCP includes these
373
+ calls after that deployment; then merge the MCP PR to trigger its automatic npm
374
+ release. Upgrade existing local MCP installs and restart their client to load
375
+ the new tools. Do not point a new client at a Portal that lacks these routes.
376
+
227
377
  ## Adding and listing policy rules
228
378
 
229
379
  `manage_policy_rules` accepts **one** input source per add: `rules` for explicit
@@ -383,9 +533,10 @@ are retried; write actions are never retried automatically.
383
533
  response includes retry guidance; wait before submitting another batch.
384
534
  Attachment summaries report newly attached and already-attached counts
385
535
  separately. Invalid or incomplete counts require listing attachments before retrying.
386
- - **Fleet changes and deletion are explicit.** Endpoint upgrades, policy
387
- assignments, and private-intel deletion return a no-op preview unless the
388
- approved follow-up call includes `confirm=true`.
536
+ - **Fleet changes and deletion are explicit.** Endpoint upgrades and private-intel
537
+ deletion require a preview followed by an approved `confirm=true` call. Policy
538
+ assignment requires a concrete preview followed by its server-issued
539
+ `confirmation_token`; `confirm=true` alone cannot commit an assignment.
389
540
  - **Windows WDAC policy edits should not use explicit flat file hashes.**
390
541
  Use `manage_policy_rules` with `event_ids` when approving audit events so
391
542
  the Portal can derive supported path / publisher / filename rules, or use
@@ -414,12 +565,15 @@ Tests validate `--help`, `--version`, production-default migration, private clie
414
565
  registration, preservation and rollback, configure validation, secret redaction,
415
566
  modern and legacy MCP startup, focused mutation confirmation, retry and timeout
416
567
  semantics, response-size bounds, malformed responses, write non-retry behavior,
417
- all 22 tools' HTTP contracts and confirmation flows over modern and legacy
568
+ all 25 tools' HTTP contracts and confirmation flows over modern and legacy
418
569
  stdio, explicit filename round trips, invalid rule shapes, ambiguous inputs,
419
570
  actual mutation counts, and npm pack
420
571
  contents. `test:package` installs a production-only tarball and
421
572
  checks the installed CLI and MCP tool discovery; `release:verify` checks all
422
- release metadata. See `docs/RELEASING.md` for npm and MCP Registry releases.
573
+ release metadata. Merging to `main` now creates the next patch release after
574
+ main CI succeeds and automatically publishes npm, MCP Registry metadata and
575
+ the desktop installer. No manual version bump or npm command is needed.
576
+ See `docs/RELEASING.md` for checks, settings and recovery.
423
577
 
424
578
  An opt-in live policy test is also available after `npm run build`:
425
579
 
package/dist/client.js CHANGED
@@ -159,6 +159,9 @@ export class MagicSwordClient {
159
159
  policy(policyId) {
160
160
  return this.req('GET', `/policies/${MagicSwordClient.pathId(policyId)}`);
161
161
  }
162
+ createPolicy(body) {
163
+ return this.req('POST', '/policies', { body });
164
+ }
162
165
  policyRules(policyId, query = {}) {
163
166
  return this.req('GET', `/policies/${MagicSwordClient.pathId(policyId)}/rules`, { query });
164
167
  }
@@ -216,6 +219,18 @@ export class MagicSwordClient {
216
219
  body: { endpoint_ids: endpointIds },
217
220
  });
218
221
  }
222
+ clonePolicy(policyId, body) {
223
+ return this.req('POST', `/policies/${MagicSwordClient.pathId(policyId)}/clone`, { body });
224
+ }
225
+ endpointGroups(query = {}) {
226
+ return this.req('GET', '/endpoint-groups', { query });
227
+ }
228
+ previewPolicyAssignment(policyId, body) {
229
+ return this.req('POST', `/policies/${MagicSwordClient.pathId(policyId)}/assignment-preview`, { body });
230
+ }
231
+ assignPolicyWithConfirmation(policyId, confirmationToken) {
232
+ return this.req('POST', `/policies/${MagicSwordClient.pathId(policyId)}/assign`, { body: { confirmation_token: confirmationToken } });
233
+ }
219
234
  acknowledgeAlert(alertId, comment) {
220
235
  return this.req('POST', `/alerts/${MagicSwordClient.pathId(alertId)}/acknowledge`, {
221
236
  body: comment ? { comment } : {},
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAC;AA4BlD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,CAAS;IACf,OAAO,CAAU;IACjB,IAAI,CAAU;IACd,GAAG,CAAS;IAEZ,YAAY,MAAc,EAAE,IAAa,EAAE,GAAW;QACpD,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,IAAI,QAAQ,MAAM,SAAS,GAAG,EAAE,CAAC;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,kEAAkE;IAClE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC;IAC/D,CAAC;IAED,2DAA2D;IAC3D,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,6EAA6E;IAC7E,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACV,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,gBAAgB,CAAS;IACzB,gBAAgB,CAAS;IACzB,UAAU,CAAS;IACnB,gBAAgB,CAAS;IAE1C,YAAY,MAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,oBAAoB,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACnE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,GAAG,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,IAAuE;QAEvE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;YAChC,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,IAAI,wBAAwB,CACxC,mDAAmD,IAAI,CAAC,gBAAgB,cAAc,CACvF,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEO,YAAY,CAAC,OAAe,EAAE,UAAyC;QAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACtE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;YACvF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,EAAU;QAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,KAAa;QACjC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,GAAG,CACf,MAA2C,EAC3C,IAAY,EACZ,UAGI,EAAE;QAEN,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;oBAAE,SAAS;gBACpE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;oBACxC,MAAM;oBACN,OAAO,EAAE;wBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;wBACtC,MAAM,EAAE,kBAAkB;wBAC1B,YAAY,EAAE,IAAI,CAAC,SAAS;wBAC5B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC9E;oBACD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC3E,WAAW,EAAE,IAAI,CAAC,gBAAgB;oBAClC,cAAc,EAAE,IAAI,CAAC,gBAAgB;oBACrC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;iBACnD,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,MAAM,GAAY,SAAS,CAAC;gBAChC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,IAAI,CAAC;wBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC1B,UAAU,GAAG,IAAI,CAAC;oBACpB,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBAED,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC3E,IAAI,eAAe,IAAI,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,CAAC;oBACjD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC7E,SAAS;gBACX,CAAC;gBACD,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBAC/B,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACrD,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBACxF,MAAM,iBAAiB,GAAG,qBAAqB;oBAC7C,CAAC,CAAC,yCAAyC,CAAC,IAAI,CAAC,qBAAqB,CAAC;oBACvE,CAAC,CAAC,KAAK,CAAC;gBACV,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3D,MAAM,IAAI,wBAAwB,CAAC,2DAA2D,CAAC,CAAC;gBAClG,CAAC;gBACD,OAAO,MAAW,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,kBAAkB,IAAI,KAAK,YAAY,wBAAwB;oBAAE,MAAM,KAAK,CAAC;gBAClG,IAAI,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,CAAC;oBAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;oBACvD,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,wBAAwB,CAChC,uCAAuC,WAAW,WAAW,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAC5F,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,IAAI,wBAAwB,CAAC,6CAA6C,CAAC,CAAC;IACpF,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,GAAG,CAAa,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,QAA+B,EAAE;QACxC,OAAO,IAAI,CAAC,GAAG,CAAmB,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAuB,KAAK,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,QAA6C,EAAE;QAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,cAAc,CAAC,IAQd;QACC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,cAAc,CAAC,QAAgB,EAAE,mBAAmB,GAAG,KAAK;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACxF,IAAI,EAAE,EAAE,oBAAoB,EAAE,mBAAmB,EAAE;SACpD,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,iBAAyB;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE;YAChF,IAAI,EAAE,EAAE,kBAAkB,EAAE,iBAAiB,EAAE;SAChD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CACJ,QAQI,EAAE;QAEN,OAAO,IAAI,CAAC,GAAG,CAAiB,KAAK,EAAE,SAAS,EAAE;YAChD,KAAK,EAAE;gBACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;gBACvF,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,GAAG,CAAsB,KAAK,EAAE,WAAW,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,SAAS,CACP,QAMI,EAAE;QAEN,OAAO,IAAI,CAAC,GAAG,CAAoB,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAyB,KAAK,EAAE,cAAc,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,aAAa,CAAC,QAAiD,EAAE;QAC/D,OAAO,IAAI,CAAC,GAAG,CAAwB,KAAK,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CACJ,QAYI,EAAE;QAEN,OAAO,IAAI,CAAC,GAAG,CAAiB,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,mBAAmB,CAAC,OAAiC,EAAE;QACrD,OAAO,IAAI,CAAC,GAAG,CAA0B,MAAM,EAAE,oBAAoB,EAAE;YACrE,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB,CAAC,QAAgB,EAAE,WAAqB;QAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE;YACzF,IAAI,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,OAAe,EAAE,OAAgB;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE;YACjF,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,OAAe,EAAE,MAAe;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;YAC7E,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,QAA6C,EAAE;QACxD,OAAO,IAAI,CAAC,GAAG,CAA6B,KAAK,EAAE,cAAc,EAAE;YACjE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,QAAsF,EAAE;QACnG,OAAO,IAAI,CAAC,GAAG,CAAuB,KAAK,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,eAAe,CAAC,IAKf;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CACb,MAAc,EACd,IAKC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,QAA6C,EAAE;QAC5E,OAAO,IAAI,CAAC,GAAG,CAA6B,KAAK,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC1G,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,MAAc,EAAE,KAAgB;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,MAAc,EAAE,IAAa;QAC/D,OAAO,IAAI,CAAC,GAAG,CACb,OAAO,EACP,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAC1F,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,MAAc;QAChD,OAAO,IAAI,CAAC,GAAG,CACb,QAAQ,EACR,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,QAAgB,EAAE,SAAmB;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YACtF,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACzF,CAAC;IAED,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;QAClD,OAAO,IAAI,CAAC,GAAG,CACb,QAAQ,EACR,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,UAAkB,EAAE,aAAa,GAAG,QAAQ;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE;YACnF,IAAI,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,IAOpB;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9G,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/configure.js CHANGED
@@ -92,7 +92,7 @@ export async function runConfigure(rawArgs) {
92
92
  const definition = serverDefinition(path, baseUrl);
93
93
  const target = registerClient(client ?? 'manual', definition, opts.clientConfig);
94
94
  if (target) {
95
- stdout.write(`Registered magicsword with ${client} in ${target}.\nRestart the client or start a new session to load its 22 tools.\n`);
95
+ stdout.write(`Registered magicsword with ${client} in ${target}.\nRestart the client or start a new session to load its 25 tools.\n`);
96
96
  }
97
97
  else {
98
98
  stdout.write('\nChoose --client claude-desktop, codex, claude-code, or cursor to register automatically.\nFor another local stdio MCP client, merge this entry into its configuration:\n');
package/dist/index.js CHANGED
@@ -47,7 +47,8 @@ function printHelp() {
47
47
  function createServer(client) {
48
48
  const server = new McpServer({ name: 'magicsword-mcp', version: VERSION }, {
49
49
  instructions: 'MagicSword MCP exposes EDR management as conversational tools. Start with `whoami` to confirm the organization, key, and scopes. ' +
50
- 'Use `find_alerts`, `triage_alert`, and `list_events` for triage; `list_endpoints` then `show_endpoint` to inspect a fleet; `list_agent_releases` before upgrades; `upsert_customer_intel_items` to load report IOCs; and `manage_policy_rules` to add approved rules. ' +
50
+ 'Use `find_alerts`, `triage_alert`, and `list_events` for triage; `list_endpoints` then `show_endpoint` to inspect a fleet; `list_agent_releases` before upgrades; `upsert_customer_intel_items` to load report IOCs; `create_policy` for an empty audit policy or `clone_policy` for an audit copy. ' +
51
+ 'Use `list_endpoint_groups` to discover groups and `apply_policy_to_endpoints` to preview assignment, then pass its server confirmation token only after human approval. Group assignment uses the preview snapshot, not future members; desired assignments replace existing protections and are not proof of installation. ' +
51
52
  'For Windows WDAC, do not create explicit flat file-hash policy rules; use event_ids so the Portal can derive supported rules, or use private intel feeds for hash/AuthentiHash/page-hash/TBS IOCs. ' +
52
53
  'Fleet-wide and destructive operations require an explicit confirmation; show the preview to the human first.',
53
54
  });
@@ -55,7 +56,7 @@ function createServer(client) {
55
56
  server.registerTool(tool.name, {
56
57
  title: tool.title,
57
58
  description: tool.description,
58
- inputSchema: z.object(tool.inputSchema),
59
+ inputSchema: 'strictInput' in tool && tool.strictInput ? z.strictObject(tool.inputSchema) : z.object(tool.inputSchema),
59
60
  annotations: annotationsForTool(tool.name),
60
61
  }, async (args) => tool.handler(args, { client }));
61
62
  }
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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"}
@@ -1,87 +1,93 @@
1
1
  import { z } from 'zod';
2
- import { defineTool, formatApiError, textError, textOk } from './shared.js';
2
+ import { MagicSwordApiError } from '../client.js';
3
+ import { defineTool, textError, textOk } from './shared.js';
4
+ const uuid = z.string().uuid().transform(value => value.toLowerCase());
5
+ const previewSchema = z.object({
6
+ policy_id: uuid, current_version_id: uuid, platform: z.enum(['windows', 'macos', 'linux']),
7
+ status: z.enum(['audit', 'enforcing', 'disabled']), policy_mode: z.enum(['blocklist', 'strict']),
8
+ endpoint_count: z.number().int().min(1).max(500), requires_confirmation: z.literal(true),
9
+ would_assign: z.array(z.object({
10
+ id: uuid, computer_name: z.string().nullable(), platform: z.enum(['windows', 'macos', 'linux']),
11
+ policy_id: uuid.nullable(), desired_policy_ids: z.array(uuid).nullable(),
12
+ }).passthrough()).min(1).max(500),
13
+ confirmation: z.object({ token: z.string().regex(/^msac_[A-Za-z0-9_-]{43}$/), action: z.literal('policy.assign'),
14
+ expires_at: z.string().refine(value => Number.isFinite(Date.parse(value))) }),
15
+ }).passthrough();
16
+ const commitSchema = z.object({
17
+ success: z.literal(true), policy_id: uuid, current_version_id: uuid,
18
+ updated: z.number().int().min(1).max(500), endpoint_ids: z.array(uuid).min(1).max(500),
19
+ assignment_status: z.literal('pending_checkin'),
20
+ }).passthrough();
3
21
  export const applyPolicyToEndpointsTool = defineTool({
4
- name: 'apply_policy_to_endpoints',
5
- title: 'Assign a policy to endpoints',
6
- description: 'Resolves either an explicit endpoint_ids list or a hostname_pattern (glob) into a concrete set of endpoints, ' +
7
- 'then previews the concrete assignment. Rerun with confirm=true after human approval to apply it.',
22
+ name: 'apply_policy_to_endpoints', title: 'Preview or confirm a policy assignment', strictInput: true,
23
+ description: 'Requires policies:write and endpoints:read. Preview exactly one selector: endpoint_ids for one/many computers, hostname_pattern, or group_ids. ' +
24
+ 'Groups include current subgroup members by default, capped at 500 eligible computers; no future-member binding. ' +
25
+ 'Show the concrete computers, policy status/mode and replacement warning to the human. ' +
26
+ 'After approval call again with ONLY policy_id and confirmation_token from that preview. confirm=true alone cannot commit. ' +
27
+ 'The one-time server token freezes the target IDs; stale policy/assignments or ineligible computers reject the whole operation. ' +
28
+ 'This replaces desired assignments and may remove existing protections or schedule an enforcing policy. ' +
29
+ 'Success means desired state is saved, not that computers have installed it. Never automatically retry writes.',
8
30
  inputSchema: {
9
- policy_id: z.string().uuid().describe('The policy UUID to assign'),
10
- endpoint_ids: z
11
- .array(z.string().uuid())
12
- .min(1)
13
- .max(500)
14
- .optional()
15
- .describe('Explicit list of endpoint UUIDs. Mutually exclusive with hostname_pattern.'),
16
- hostname_pattern: z
17
- .string()
18
- .min(1)
19
- .max(255)
20
- .optional()
21
- .describe('Glob pattern (case-insensitive) matched against computer_name. Mutually exclusive with endpoint_ids.'),
22
- platform: z
23
- .enum(['windows', 'macos', 'linux'])
24
- .optional()
25
- .describe('Optional platform filter, applied when resolving hostname_pattern'),
26
- confirm: z.boolean().optional().describe('Set true only after a human approves the resolved preview'),
31
+ policy_id: uuid.describe('Policy ID to assign'),
32
+ endpoint_ids: z.array(uuid).min(1).max(500).refine(ids => new Set(ids).size === ids.length, 'Endpoint IDs must be unique').optional().describe('One or more endpoint IDs; exclusive with hostname_pattern/group_ids'),
33
+ hostname_pattern: z.string().regex(/^[^\u0000-\u001f\u007f-\u009f]*$/).trim().min(1).max(255).optional()
34
+ .describe('Case-insensitive hostname glob; exclusive with endpoint_ids/group_ids'),
35
+ group_ids: z.array(uuid).min(1).max(50).refine(ids => new Set(ids).size === ids.length, 'Group IDs must be unique').optional().describe('Existing group IDs; exclusive with endpoint_ids/hostname_pattern'),
36
+ include_descendants: z.boolean().optional().describe('Group selector only: include subgroups, default true'),
37
+ platform: z.enum(['windows', 'macos', 'linux']).optional().describe('Hostname selector only: optional platform filter'),
38
+ confirmation_token: z.string().regex(/^msac_[A-Za-z0-9_-]{43}$/).optional().describe('Server token: commit uses only policy_id and this token after approval'),
39
+ confirm: z.boolean().optional().describe('Legacy flag: true without a server confirmation_token is rejected'),
27
40
  },
28
- async handler({ policy_id, endpoint_ids, hostname_pattern, platform, confirm }, { client }) {
29
- if (!endpoint_ids?.length && !hostname_pattern) {
30
- return textError('Must supply either endpoint_ids or hostname_pattern.');
31
- }
32
- if (endpoint_ids?.length && hostname_pattern) {
33
- return textError('Supply endpoint_ids OR hostname_pattern, not both.');
34
- }
35
- try {
36
- // Confirm the policy exists & matches platform.
37
- const policies = await client.policies({ platform });
38
- const policy = policies.policies.find((p) => p.id === policy_id);
39
- if (!policy) {
40
- return textError(`Policy ${policy_id} not found in this org${platform ? ` for platform ${platform}` : ''}. ` +
41
- `Run list_policies first.`);
42
- }
43
- let targetEndpoints = [];
44
- if (endpoint_ids?.length) {
45
- targetEndpoints = endpoint_ids.map((id) => ({
46
- id,
47
- computer_name: null,
48
- }));
41
+ async handler({ policy_id, endpoint_ids, hostname_pattern, group_ids, include_descendants, platform, confirmation_token, confirm }, { client }) {
42
+ const selectors = Number(endpoint_ids !== undefined) + Number(hostname_pattern !== undefined) + Number(group_ids !== undefined);
43
+ if (confirmation_token) {
44
+ if (selectors || include_descendants !== undefined || platform !== undefined || confirm !== undefined) {
45
+ return textError('Commit must contain only policy_id and confirmation_token. The approved preview already fixes the computers.');
49
46
  }
50
- else if (hostname_pattern) {
51
- const result = await client.endpoints({
52
- platform,
53
- hostname_pattern,
54
- limit: 500,
55
- });
56
- if (result.total > result.endpoints.length) {
57
- return textError(`Hostname pattern matched ${result.total} endpoints, above the 500-endpoint assignment limit. ` +
58
- 'Narrow the pattern or assign explicit endpoint IDs.');
47
+ try {
48
+ const parsed = commitSchema.safeParse(await client.assignPolicyWithConfirmation(policy_id, confirmation_token));
49
+ if (!parsed.success || parsed.data.policy_id !== policy_id ||
50
+ parsed.data.updated !== parsed.data.endpoint_ids.length || new Set(parsed.data.endpoint_ids).size !== parsed.data.updated) {
51
+ return textError('Assignment result could not be verified. Check endpoint desired assignments before retrying; the operation may have committed.');
59
52
  }
60
- targetEndpoints = result.endpoints.map((e) => ({
61
- id: e.id,
62
- computer_name: e.computer_name,
63
- }));
53
+ return textOk(`Saved policy ${policy_id} as the desired assignment for ${parsed.data.updated} computer(s). ` +
54
+ 'Replaced their previous desired policy assignments. Waiting for agent check-in; installation and enforcement have not been verified.', parsed.data);
64
55
  }
65
- if (targetEndpoints.length === 0) {
66
- return textOk(`No endpoints matched. Nothing to assign. (policy_id=${policy_id})`, {
67
- policy_id,
68
- would_assign: [],
69
- });
56
+ catch (error) {
57
+ const status = error instanceof MagicSwordApiError ? ` (HTTP ${error.status})` : '';
58
+ return textError(`Policy assignment failed${status}. Check endpoint desired assignments before retrying. ` +
59
+ 'A fresh preview may be needed; a failed response does not prove no changes occurred.');
70
60
  }
71
- const list = targetEndpoints.map((e) => ` - ${e.computer_name ?? '(no name)'} ${e.id}`).join('\n');
72
- if (confirm !== true) {
73
- return textOk(`PREVIEW — would assign policy ${policy_id} (${policy.platform}) to ${targetEndpoints.length} endpoint(s):\n${list}\n` +
74
- 'No changes were made. Re-run with confirm=true after human approval.', { policy_id, would_assign: targetEndpoints, requires_confirmation: true });
61
+ }
62
+ if (confirm === true)
63
+ return textError('confirm=true alone cannot assign. Preview first, show it to the human, then pass its confirmation_token.');
64
+ if (selectors !== 1 || (include_descendants !== undefined && !group_ids) || (platform !== undefined && !hostname_pattern)) {
65
+ return textError('Preview requires exactly one of endpoint_ids, hostname_pattern or group_ids. include_descendants is group-only; platform is hostname-only.');
66
+ }
67
+ try {
68
+ const parsed = previewSchema.safeParse(await client.previewPolicyAssignment(policy_id, {
69
+ ...(endpoint_ids ? { endpoint_ids } : {}), ...(hostname_pattern ? { hostname_pattern } : {}),
70
+ ...(group_ids ? { group_ids, include_descendants: include_descendants ?? true } : {}),
71
+ ...(platform ? { platform } : {}),
72
+ }));
73
+ if (!parsed.success)
74
+ return textError('The Portal returned an invalid assignment preview. No commit was requested.');
75
+ const body = parsed.data, targets = body.would_assign, ids = new Set(targets.map(target => target.id));
76
+ if (body.policy_id !== policy_id || body.endpoint_count !== targets.length || ids.size !== targets.length ||
77
+ targets.some(target => target.platform !== body.platform) || (platform && platform !== body.platform) ||
78
+ Date.parse(body.confirmation.expires_at) <= Date.now() ||
79
+ (endpoint_ids && (new Set(endpoint_ids).size !== ids.size || endpoint_ids.some(id => !ids.has(id))))) {
80
+ return textError('Assignment preview does not match the requested policy or computers. No commit was requested.');
75
81
  }
76
- const response = await client.assignPolicyToEndpoints(policy_id, targetEndpoints.map((e) => e.id));
77
- return textOk(`Assigned policy ${policy_id} (${policy.platform}) to ${targetEndpoints.length} endpoint(s):\n${list}`, {
78
- policy_id,
79
- assigned: targetEndpoints,
80
- response: response,
81
- });
82
+ return textOk(`PREVIEW — policy ${policy_id}, ${body.platform}, ${body.status}, ${body.policy_mode}.\n` +
83
+ targets.map(target => `- ${target.computer_name ?? '(unnamed)'} (${target.id}) — previous desired: ${(target.desired_policy_ids ?? []).join(', ') || target.policy_id || '(none)'}`).join('\n') +
84
+ '\nThis REPLACES existing desired assignments. An audit policy can remove existing blocking protection; an enforcing policy may block applications. ' +
85
+ 'No endpoint assignments changed. Group membership is a snapshot; later changes do not add targets or create a persistent binding. ' +
86
+ `After human approval, call again with only policy_id and confirmation_token. Expires ${body.confirmation.expires_at}.`, body);
82
87
  }
83
- catch (err) {
84
- return formatApiError(err);
88
+ catch (error) {
89
+ const status = error instanceof MagicSwordApiError ? ` (HTTP ${error.status})` : '';
90
+ return textError(`Policy assignment preview failed${status}. Requires policies:write and endpoints:read, with compatible agent-managed computers. No commit was requested.`);
85
91
  }
86
92
  },
87
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"apply_policy_to_endpoints.js","sourceRoot":"","sources":["../../src/tools/apply_policy_to_endpoints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply_policy_to_endpoints.js","sourceRoot":"","sources":["../../src/tools/apply_policy_to_endpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ import { MagicSwordApiError } from '../client.js';
3
+ import { defineTool, textError, textOk } from './shared.js';
4
+ const uuid = z.string().uuid().transform(value => value.toLowerCase());
5
+ const responseSchema = z.object({
6
+ policy: z.object({
7
+ id: uuid, platform: z.enum(['windows', 'macos', 'linux']),
8
+ created_at: z.string().refine(value => Number.isFinite(Date.parse(value))),
9
+ updated_at: z.string().refine(value => Number.isFinite(Date.parse(value))),
10
+ current_version: z.object({
11
+ id: uuid, policy_id: uuid, name: z.string(),
12
+ version: z.literal(1), status: z.literal('audit'), parent_version_id: z.null(), policy_mode: z.enum(['blocklist', 'strict']),
13
+ }).passthrough(),
14
+ }).passthrough(),
15
+ cloned_from: z.object({ policy_id: uuid, version_id: uuid }),
16
+ copied: z.object({ rules: z.number().int().nonnegative(), intelligence_sources: z.number().int().nonnegative(),
17
+ analytics_collections: z.number().int().nonnegative() }),
18
+ }).passthrough();
19
+ const reconcile = 'List policies before retrying; a clone may already have been created.';
20
+ export const clonePolicyTool = defineTool({
21
+ name: 'clone_policy', title: 'Clone a MagicSword policy', strictInput: true,
22
+ description: 'Copies the current version of a policy into a new, independent policy with the requested name. ' +
23
+ 'Preserves supported rules, settings, intelligence source links and collection links; starts at version 1 in audit mode. ' +
24
+ 'Does not assign devices, change the source, make a default, or enable enforcement. Requires policies:write and access to all copied content. ' +
25
+ 'Use apply_policy_to_endpoints with the returned policy ID to preview a later assignment. Never automatically retry cloning: list policies if the outcome is uncertain.',
26
+ inputSchema: {
27
+ policy_id: uuid.describe('Source policy ID from list_policies'),
28
+ name: z.string().regex(/^[^\u0000-\u001f\u007f-\u009f]*$/, 'Policy name must not contain control characters')
29
+ .trim().min(1).max(200).describe('Name for the new audit copy'),
30
+ },
31
+ async handler({ policy_id, name }, { client }) {
32
+ try {
33
+ const parsed = responseSchema.safeParse(await client.clonePolicy(policy_id, { name }));
34
+ if (!parsed.success)
35
+ return textError(`Invalid policy clone response. ${reconcile}`);
36
+ const body = parsed.data, policy = body.policy, version = policy.current_version;
37
+ if (policy.id === policy_id || body.cloned_from.policy_id !== policy_id ||
38
+ version.policy_id !== policy.id || version.id === body.cloned_from.version_id || version.name !== name ||
39
+ (policy.platform === 'linux' && version.policy_mode !== 'blocklist')) {
40
+ return textError(`Policy clone identity or version could not be verified. ${reconcile}`);
41
+ }
42
+ return textOk(`Cloned policy as "${name}" — id: ${policy.id}. Version 1, audit mode, ${policy.platform}. ` +
43
+ `Copied ${body.copied.rules} rules, ${body.copied.intelligence_sources} intelligence links and ${body.copied.analytics_collections} collection links. ` +
44
+ 'No computers assigned. Use apply_policy_to_endpoints to preview assignment.', body);
45
+ }
46
+ catch (error) {
47
+ const status = error instanceof MagicSwordApiError ? ` (HTTP ${error.status})` : '';
48
+ return textError(`Policy cloning failed${status}. Requires policies:write and access to the source content. ${reconcile}`);
49
+ }
50
+ },
51
+ });
52
+ //# sourceMappingURL=clone_policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone_policy.js","sourceRoot":"","sources":["../../src/tools/clone_policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { z } from 'zod';
2
+ import { MagicSwordApiError } from '../client.js';
3
+ import { defineTool, textError, textOk } from './shared.js';
4
+ const createdPolicySchema = z.object({
5
+ policy: z.object({
6
+ id: z.string().uuid(),
7
+ platform: z.enum(['windows', 'macos', 'linux']),
8
+ created_at: z.string().refine(value => Number.isFinite(Date.parse(value))),
9
+ updated_at: z.string().refine(value => Number.isFinite(Date.parse(value))),
10
+ current_version: z.object({
11
+ id: z.string().uuid(),
12
+ policy_id: z.string().uuid(),
13
+ name: z.string(),
14
+ version: z.literal(1),
15
+ status: z.literal('audit'),
16
+ policy_mode: z.enum(['blocklist', 'strict']),
17
+ }).passthrough(),
18
+ }).passthrough(),
19
+ }).passthrough();
20
+ export const createPolicyTool = defineTool({
21
+ name: 'create_policy',
22
+ title: 'Create a MagicSword policy',
23
+ strictInput: true,
24
+ description: 'Creates a new empty policy in the authenticated organization with version 1 in audit mode. ' +
25
+ 'Requires a name, platform, and policies:write. Defaults to blocklist; strict requires Enterprise and is supported only for Windows/macOS. ' +
26
+ 'Does not add rules, attach feeds, make it the default, assign devices, or enable enforcement. ' +
27
+ 'Use the returned policy ID with manage_policy_rules and manage_policy_intel_sources to build the policy. ' +
28
+ 'Each successful call creates a new policy, even with the same name. If the outcome is uncertain, list policies before retrying.',
29
+ inputSchema: {
30
+ name: z.string().regex(/^[^\u0000-\u001f\u007f-\u009f]*$/, 'Policy name must not contain control characters')
31
+ .trim().min(1).max(200)
32
+ .describe('Name for the new policy'),
33
+ platform: z.enum(['windows', 'macos', 'linux']).describe('Operating system for this policy'),
34
+ policy_mode: z.enum(['blocklist', 'strict']).optional()
35
+ .describe('Defaults to blocklist. Strict requires Enterprise and is unsupported on Linux.'),
36
+ },
37
+ async handler({ name, platform, policy_mode }, { client }) {
38
+ const mode = policy_mode ?? 'blocklist';
39
+ if (platform === 'linux' && mode === 'strict') {
40
+ return textError('Linux strict policies are not supported. Use policy_mode=blocklist.');
41
+ }
42
+ try {
43
+ const result = await client.createPolicy({ name, platform, policy_mode: mode });
44
+ const parsed = createdPolicySchema.safeParse(result);
45
+ const policy = parsed.success ? parsed.data.policy : null;
46
+ if (!policy || policy.platform !== platform || policy.current_version.policy_id !== policy.id ||
47
+ policy.current_version.name !== name || policy.current_version.policy_mode !== mode) {
48
+ return textError('The Portal returned an invalid policy-creation response; creation could not be verified. List policies before retrying: a policy may already have been created.');
49
+ }
50
+ return textOk(`Created ${platform} policy "${name}" — id: ${policy.id}. Version 1, audit mode, ${mode}. ` +
51
+ 'No devices assigned. Add rules or intelligence sources using this policy ID.', parsed.data);
52
+ }
53
+ catch (error) {
54
+ if (error instanceof MagicSwordApiError) {
55
+ return textError(`Policy creation failed (${error.status}): ${error.message}. ` +
56
+ (error.status >= 500 ? 'List policies before retrying; creation may have completed.' : ''));
57
+ }
58
+ return textError('Policy creation could not be verified. List policies before retrying; a policy may already have been created.');
59
+ }
60
+ },
61
+ });
62
+ //# sourceMappingURL=create_policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_policy.js","sourceRoot":"","sources":["../../src/tools/create_policy.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,9 @@ import { listEventsTool } from './list_events.js';
5
5
  import { listIntelSourcesTool } from './list_intel_sources.js';
6
6
  import { triageAlertTool } from './triage_alert.js';
7
7
  import { listPoliciesTool } from './list_policies.js';
8
+ import { createPolicyTool } from './create_policy.js';
9
+ import { clonePolicyTool } from './clone_policy.js';
10
+ import { listEndpointGroupsTool } from './list_endpoint_groups.js';
8
11
  import { showPolicyTool } from './show_policy.js';
9
12
  import { managePolicyRulesTool } from './manage_policy_rules.js';
10
13
  import { applyPolicyToEndpointsTool } from './apply_policy_to_endpoints.js';
@@ -23,12 +26,15 @@ import { listAgentReleasesTool } from './list_agent_releases.js';
23
26
  export const allTools = [
24
27
  whoamiTool,
25
28
  listEndpointsTool,
29
+ listEndpointGroupsTool,
26
30
  showEndpointTool,
27
31
  listAgentReleasesTool,
28
32
  findAlertsTool,
29
33
  listEventsTool,
30
34
  triageAlertTool,
31
35
  listPoliciesTool,
36
+ createPolicyTool,
37
+ clonePolicyTool,
32
38
  showPolicyTool,
33
39
  managePolicyRulesTool,
34
40
  applyPolicyToEndpointsTool,
@@ -47,6 +53,7 @@ export const allTools = [
47
53
  const READ_ONLY_TOOLS = new Set([
48
54
  'whoami',
49
55
  'list_endpoints',
56
+ 'list_endpoint_groups',
50
57
  'show_endpoint',
51
58
  'list_agent_releases',
52
59
  'find_alerts',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,qBAAqB;IACrB,cAAc;IACd,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,qBAAqB;IACrB,0BAA0B;IAC1B,mBAAmB;IACnB,0BAA0B;IAC1B,oBAAoB;IACpB,2BAA2B;IAC3B,2BAA2B;IAC3B,4BAA4B;IAC5B,4BAA4B;IAC5B,oBAAoB;IACpB,0BAA0B;IAC1B,uBAAuB;IACvB,4BAA4B;CAC7B,CAAC;AAEF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,QAAQ;IACR,gBAAgB;IAChB,eAAe;IACf,qBAAqB;IACrB,aAAa;IACb,aAAa;IACb,eAAe;IACf,aAAa;IACb,2BAA2B;IAC3B,oBAAoB;IACpB,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,cAAc;IACd,qBAAqB;IACrB,2BAA2B;IAC3B,mBAAmB;IACnB,4BAA4B;IAC5B,4BAA4B;IAC5B,6BAA6B;IAC7B,mBAAmB;CACpB,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO;QACL,YAAY,EAAE,QAAQ;QACtB,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/D,cAAc,EAAE,QAAQ;QACxB,aAAa,EAAE,KAAK;KACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import { defineTool, formatApiError, textError, textOk } from './shared.js';
3
+ const pageSchema = z.object({
4
+ groups: z.array(z.object({
5
+ id: z.string().uuid(), name: z.string(), parent_group_id: z.string().uuid().nullable(),
6
+ description: z.string().nullable(),
7
+ }).passthrough()).max(500),
8
+ total: z.number().int().nonnegative(), limit: z.number().int().min(1).max(500), offset: z.number().int().nonnegative(),
9
+ }).passthrough();
10
+ export const listEndpointGroupsTool = defineTool({
11
+ name: 'list_endpoint_groups', title: 'List computer groups', strictInput: true,
12
+ description: 'Lists paginated endpoint groups in the authenticated organization, including their parent group IDs. ' +
13
+ 'Requires endpoints:read. Use selected group IDs with apply_policy_to_endpoints to preview current members (including subgroups by default). ' +
14
+ 'Group assignment is a one-time snapshot, not an automatic rule for future members.',
15
+ inputSchema: {
16
+ limit: z.number().int().min(1).max(500).optional().describe('Page size, default 100'),
17
+ offset: z.number().int().min(0).max(1_000_000).optional().describe('Pagination offset'),
18
+ },
19
+ async handler({ limit, offset }, { client }) {
20
+ try {
21
+ const parsed = pageSchema.safeParse(await client.endpointGroups({ limit, offset }));
22
+ if (!parsed.success)
23
+ return textError('The Portal returned an invalid endpoint group page.');
24
+ const page = parsed.data;
25
+ if (page.groups.length > page.limit || page.groups.length > Math.max(0, page.total - page.offset) || page.offset !== (offset ?? 0) ||
26
+ page.limit !== (limit ?? 100) || new Set(page.groups.map(group => group.id)).size !== page.groups.length) {
27
+ return textError('The Portal returned inconsistent endpoint group pagination.');
28
+ }
29
+ return textOk(`Showing ${page.groups.length} of ${page.total} computer groups.\n` +
30
+ page.groups.map(group => `- ${group.name} (${group.id}) — parent: ${group.parent_group_id ?? '(none)'}`).join('\n'), page);
31
+ }
32
+ catch (error) {
33
+ return formatApiError(error);
34
+ }
35
+ },
36
+ });
37
+ //# sourceMappingURL=list_endpoint_groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_endpoint_groups.js","sourceRoot":"","sources":["../../src/tools/list_endpoint_groups.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import { z } from 'zod';
2
2
  import { defineTool, formatApiError, textOk } from './shared.js';
3
+ // Preserve valid API dates verbatim; never invent a freshness fallback.
4
+ const displayDate = (value) => typeof value === 'string' && value.trim() && Number.isFinite(Date.parse(value)) ? value : 'unknown';
3
5
  export const listIntelSourcesTool = defineTool({
4
6
  name: 'list_intel_sources',
5
7
  title: 'List available intelligence sources',
6
8
  description: 'Discovers global and organization-owned intelligence sources and their IDs for attaching to a policy. ' +
7
9
  'Returns enabled sources by default; is_enabled=false lists disabled sources. Filter by the policy platform. ' +
10
+ 'Includes creation, update, sync, and last successful collection check timestamps when available; unknown dates remain unknown. ' +
8
11
  'Use list_policies to find the policy ID, then manage_policy_intel_sources action=list to inspect attachments ' +
9
12
  'or action=attach with the selected source_ids. Premium sources may require a paid plan. Requires intel:read.',
10
13
  inputSchema: {
@@ -18,7 +21,9 @@ export const listIntelSourcesTool = defineTool({
18
21
  const result = await client.intelSources(args);
19
22
  const lines = result.sources.map(source => `- ${source.name} — id: ${source.id}; ${source.scope === 'organization' ? 'organization-owned' : 'global'}; ` +
20
23
  `${source.item_count ?? 0} items; platforms: ${source.platforms?.join(', ') || 'unspecified'}; ` +
21
- `enabled: ${source.is_enabled}; premium: ${source.is_premium}`);
24
+ `enabled: ${source.is_enabled}; premium: ${source.is_premium}; ` +
25
+ `created: ${displayDate(source.created_at)}; updated: ${displayDate(source.updated_at)}; ` +
26
+ `last synced: ${displayDate(source.last_sync)}; last checked: ${displayDate(source.last_checked_at)}`);
22
27
  return textOk(`Found ${result.total} intelligence source(s). Showing ${result.sources.length} at offset ${result.offset}.` +
23
28
  (lines.length ? `\n\n${lines.join('\n')}` : ''), result);
24
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list_intel_sources.js","sourceRoot":"","sources":["../../src/tools/list_intel_sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,qCAAqC;IAC5C,WAAW,EACT,wGAAwG;QACxG,8GAA8G;QAC9G,+GAA+G;QAC/G,8GAA8G;IAChH,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC1D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QAClD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;KAC1D;IACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACxC,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,IAAI;gBAC7G,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,sBAAsB,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,IAAI;gBAChG,YAAY,MAAM,CAAC,UAAU,cAAc,MAAM,CAAC,UAAU,EAAE,CAC/D,CAAC;YACF,OAAO,MAAM,CACX,SAAS,MAAM,CAAC,KAAK,oCAAoC,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,MAAM,CAAC,MAAM,GAAG;gBAC5G,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC/C,MAA4C,CAC7C,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"list_intel_sources.js","sourceRoot":"","sources":["../../src/tools/list_intel_sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjE,wEAAwE;AACxE,MAAM,WAAW,GAAG,CAAC,KAAgC,EAAU,EAAE,CAC/D,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAEtG,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,qCAAqC;IAC5C,WAAW,EACT,wGAAwG;QACxG,8GAA8G;QAC9G,iIAAiI;QACjI,+GAA+G;QAC/G,8GAA8G;IAChH,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC1D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QAClD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;KAC1D;IACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACxC,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,IAAI;gBAC7G,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,sBAAsB,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,IAAI;gBAChG,YAAY,MAAM,CAAC,UAAU,cAAc,MAAM,CAAC,UAAU,IAAI;gBAChE,YAAY,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI;gBAC1F,gBAAgB,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CACtG,CAAC;YACF,OAAO,MAAM,CACX,SAAS,MAAM,CAAC,KAAK,oCAAoC,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,MAAM,CAAC,MAAM,GAAG;gBAC5G,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC/C,MAA4C,CAC7C,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,cAAc,CAAC;AAqBzE,MAAM,UAAU,UAAU,CAA4B,GAA0B;IAC9E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,OAAO,SAAS,CACd,4DAA4D;gBAC1D,yBAAyB,GAAG,CAAC,OAAO,KAAK;gBACzC,mEAAmE,CACtE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACtB,OAAO,SAAS,CACd,wDAAwD;gBACtD,mFAAmF;gBACnF,kBAAkB,GAAG,CAAC,OAAO,KAAK,CACrC,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,SAAS,CACd,oEAAoE;gBAClE,iBAAiB,GAAG,CAAC,OAAO,iEAAiE,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,SAAS,CACd,8CAA8C,GAAG,CAAC,MAAM,KAAK;gBAC3D,sEAAsE,GAAG,CAAC,OAAO,KAAK,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,SAAS,CACd,mFAAmF;gBACjF,kBAAkB,GAAG,CAAC,OAAO,KAAK,CACrC,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC,yBAAyB,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC,qBAAqB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,UAAoC;IACvE,MAAM,MAAM,GAAsB;QAChC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC,CAAC;IACF,IAAI,UAAU;QAAE,MAAM,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,cAAc,CAAC;AAsBzE,MAAM,UAAU,UAAU,CAA4B,GAA0B;IAC9E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,OAAO,SAAS,CACd,4DAA4D;gBAC1D,yBAAyB,GAAG,CAAC,OAAO,KAAK;gBACzC,mEAAmE,CACtE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACtB,OAAO,SAAS,CACd,wDAAwD;gBACtD,mFAAmF;gBACnF,kBAAkB,GAAG,CAAC,OAAO,KAAK,CACrC,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,SAAS,CACd,oEAAoE;gBAClE,iBAAiB,GAAG,CAAC,OAAO,iEAAiE,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,SAAS,CACd,8CAA8C,GAAG,CAAC,MAAM,KAAK;gBAC3D,sEAAsE,GAAG,CAAC,OAAO,KAAK,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,SAAS,CACd,mFAAmF;gBACjF,kBAAkB,GAAG,CAAC,OAAO,KAAK,CACrC,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC,yBAAyB,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC,qBAAqB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,UAAoC;IACvE,MAAM,MAAM,GAAsB;QAChC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC,CAAC;IACF,IAAI,UAAU;QAAE,MAAM,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@magicsword-io/magicsword-mcp",
3
3
  "mcpName": "io.github.magicsword-io/magicsword-mcp",
4
- "version": "0.1.4",
4
+ "version": "0.1.6",
5
5
  "description": "MagicSword MCP server — manage MagicSword conversationally from Claude Desktop, Cursor, or any MCP-aware client.",
6
6
  "license": "Apache-2.0",
7
7
  "type": "module",
@@ -23,7 +23,7 @@
23
23
  "build": "node scripts/clean.mjs && tsc -p tsconfig.json && node scripts/postbuild.mjs",
24
24
  "start": "node dist/index.js",
25
25
  "configure": "node dist/index.js configure",
26
- "test": "npm run build && node --test scripts/verify-release.test.mjs scripts/configure.test.mjs scripts/install-links.test.mjs scripts/policy-rules.test.mjs scripts/policy-rules-stdio.test.mjs scripts/tools-stdio.test.mjs scripts/enforcement.test.mjs scripts/intel-sources.test.mjs scripts/investigate.test.mjs && node scripts/client.mjs && node scripts/smoke.mjs",
26
+ "test": "npm run build && node --test scripts/auto-release.test.mjs scripts/verify-release.test.mjs scripts/configure.test.mjs scripts/install-links.test.mjs scripts/policy-rules.test.mjs scripts/policy-rules-stdio.test.mjs scripts/tools-stdio.test.mjs scripts/enforcement.test.mjs scripts/intel-sources.test.mjs scripts/investigate.test.mjs scripts/create-policy.test.mjs scripts/clone-assignment.test.mjs && node scripts/client.mjs && node scripts/smoke.mjs",
27
27
  "test:package": "npm run build && node scripts/package-smoke.mjs",
28
28
  "bundle:desktop": "npm run build && node scripts/build-mcpb.mjs",
29
29
  "test:desktop": "node scripts/desktop-smoke.mjs",