@magicsword-io/magicsword-mcp 0.1.1 → 0.1.4

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
@@ -16,6 +16,31 @@ the user's machine, holds an `msk_…` API key, and speaks MCP over stdio.
16
16
 
17
17
  ## Quick start
18
18
 
19
+ ### Claude Desktop installer
20
+
21
+ For Claude Desktop on macOS or Windows, download **magicsword-mcp.mcpb** from
22
+ [GitHub Releases](https://github.com/magicsword-io/magicsword-mcp/releases).
23
+ The installer is included starting with version **0.1.4**. If that release is
24
+ not available yet, use terminal setup below.
25
+
26
+ 1. Generate an Enterprise API key in **Magic Portal → Settings → API Keys**.
27
+ Start with read scopes for endpoints, alerts, and policies.
28
+ 2. In Claude Desktop, open **Settings → Extensions → Advanced settings →
29
+ Install Extension…**, then select the downloaded `.mcpb` file.
30
+ 3. Review the extension and enter your API key in its secure configuration
31
+ field. Claude stores this sensitive field using the operating system's
32
+ secure storage. The installer does not save a separate MagicSword key file.
33
+ 4. Start a new conversation, then ask MagicSword to call `whoami` followed by
34
+ `list_endpoints`. Confirm the organization and scopes.
35
+
36
+ The installer includes the server and production dependencies and uses Claude
37
+ Desktop's bundled Node runtime (22+). It requires no npm installation or JSON
38
+ editing. Its SHA256 checksum is published beside the installer. A privately
39
+ downloaded extension must be updated by installing a newer `.mcpb` file;
40
+ automatic directory updates require a reviewed directory listing.
41
+
42
+ ### Terminal setup
43
+
19
44
  Requires **Node.js 22+**, an installed MCP client, and a MagicSword Enterprise
20
45
  API key from **Magic Portal → Settings → API Keys**.
21
46
 
@@ -153,7 +178,7 @@ Manual setup prints a credential-free launch entry for other local stdio MCP
153
178
  clients. Unattended setup without `--client` writes only the MagicSword file.
154
179
 
155
180
  Restart the selected client or start a new session to load `magicsword` and its
156
- 21 tools. Ask it to call `whoami` and then `list_endpoints` to verify access;
181
+ 22 tools. Ask it to call `whoami` and then `list_endpoints` to verify access;
157
182
  discovery alone does not verify API-key scopes. Claude Desktop logs are at
158
183
  `~/Library/Logs/Claude/mcp*.log` on macOS. Browser-only clients require a remote
159
184
  MCP transport; this package provides a local stdio server.
@@ -171,13 +196,14 @@ environment. Keep API keys out of shared config snippets and screenshots.
171
196
  | `show_endpoint` | Fetches one endpoint with OS, policy, compliance, upgrade, heartbeat, and AMSI details. |
172
197
  | `list_agent_releases` | Lists available agent versions and per-platform latest releases. |
173
198
  | `find_alerts` | Searches alerts by severity / ack state / since / hostname / MITRE technique. |
174
- | `list_events` | Lists audit/block telemetry events, including last-day event review workflows. |
199
+ | `list_events` | Searches Investigate events by name, filename, path, hash, publisher, computer, or package family, with type/status/policy/endpoint/time filters. |
175
200
  | `triage_alert` | Fetches one alert directly with triggering events, metadata, and file context; optionally acknowledges or dismisses it. |
176
201
  | `list_policies` | Lists policies with current version + mode. |
177
202
  | `show_policy` | Shows one policy by id. |
178
203
  | `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. |
179
204
  | `apply_policy_to_endpoints` | Resolves endpoints and previews a policy assignment; `confirm=true` applies it after approval. |
180
205
  | `flip_to_enforcing` | Two-step preview/confirm flip with a server-issued one-time confirm token. Safety-critical. |
206
+ | `list_intel_sources` | Discovers enabled global and organization-owned intel sources and IDs, with platform and pagination filters. |
181
207
  | `list_customer_intel_feeds` | Lists private intel feeds or feed items. |
182
208
  | `manage_customer_intel_feed` | Creates or updates feeds; deletion requires a preview followed by `confirm=true`. |
183
209
  | `manage_customer_intel_item` | Edits feed items; deletion requires a preview followed by `confirm=true`. |
@@ -198,6 +224,67 @@ marked read-only and idempotent; enforcement, deletion, policy assignment,
198
224
  rule changes, and agent upgrades are marked destructive so MCP clients can
199
225
  apply appropriate confirmation UX.
200
226
 
227
+ ## Adding and listing policy rules
228
+
229
+ `manage_policy_rules` accepts **one** input source per add: `rules` for explicit
230
+ rules, or `event_ids` for rules derived from telemetry. Each accepts 1–100 items.
231
+ Use `policy_id`, or `policy_name` with an optional `platform` to resolve a name.
232
+ The policy must already exist; ambiguous names require an ID or platform.
233
+
234
+ For example, to block the filenames from issue #5 on a Windows blocklist policy:
235
+
236
+ ```json
237
+ {
238
+ "action": "add",
239
+ "policy_name": "Workstations",
240
+ "platform": "windows",
241
+ "rules": [
242
+ { "type": "filename", "value": "rustdesk.exe", "status": "blocked" },
243
+ { "type": "filename", "value": "mshta.exe", "status": "blocked" },
244
+ { "type": "filename", "value": "wscript.exe", "status": "blocked" }
245
+ ]
246
+ }
247
+ ```
248
+
249
+ Explicit rules use `type` and `value`, with optional `status` (defaults to
250
+ `blocked`). Unknown rule fields are rejected; `rule_type` / `file_name` are not
251
+ substitutes. Filename and path values must be non-empty strings or supported
252
+ value objects. Publisher values require `publisherName` (or `publisher`) and a
253
+ valid `tbsHash` (or `tbs_hash` / `certificate_thumbprint`). Optional rule metadata
254
+ includes `name`, `mode`, version bounds, signer/file-attribute references,
255
+ `package_version`, and `target_platforms`. The Portal validates whether a rule
256
+ can be enforced on the resolved policy's platform. Flat Windows WDAC hashes
257
+ remain unsupported; use telemetry-derived rules or private intelligence feeds.
258
+
259
+ For telemetry, use `event_ids` with top-level `status` (defaults to `allowed`)
260
+ and an optional `type` override. Top-level `status` and `type` cannot be used
261
+ with explicit `rules`; set those fields on each rule instead.
262
+
263
+ Adds preserve existing rules and intelligence-source links. Matching customer
264
+ rules with a different status are updated; rules already at the requested status
265
+ are reported as unchanged duplicates. Feed-owned rules retain their provenance;
266
+ unsupported conflicts with a feed rule return an API error. The tool reports
267
+ the Portal's actual `added_count`, `updated_count`, and `duplicate_count`, and retains its version
268
+ information in structured output. An unchanged duplicate batch reports “No
269
+ changes needed.” Unexplained zero changes or malformed responses are errors:
270
+ inspect the current rules/version before retrying because the request may have
271
+ created a version. Writes are never retried automatically.
272
+ For event-derived batches, a count total smaller than the number of unique
273
+ requested events is also an error: some events may not have produced rules.
274
+ Successful changes and version details remain available in structured output.
275
+
276
+ To verify the current version's stored rules:
277
+
278
+ ```json
279
+ { "action": "list", "policy_id": "<policy UUID>", "limit": 500, "offset": 0 }
280
+ ```
281
+
282
+ List requires an ID and `policies:read`. It returns stored customer rules and
283
+ materialized feed rules for the current version, with `total`, `limit`, and
284
+ `offset`. The default page size is 100, maximum 500; increase `offset` until all
285
+ `total` rows have been read. An empty page does not describe other versions or
286
+ indicators that have not been materialized into this version.
287
+
201
288
  ## Example transcript
202
289
 
203
290
  ```
@@ -223,6 +310,52 @@ Claude: [calls manage_policy_rules action=add policy_name=Workstations event_ids
223
310
  → Created a new policy version with 5 allowed rules.
224
311
  ```
225
312
 
313
+ ## Investigate events and attach intelligence
314
+
315
+ Ask “Show audited filename events for image.png from the last week.” The agent
316
+ calls `list_events` with `type=filename`, `status=audited`, `file_name=image.png`,
317
+ and `hours=168`. `file_name` is an exact, case-sensitive match, including literal
318
+ punctuation. For broader discovery, `q` searches the same seven fields as Portal
319
+ Investigate: name, filename, path, hash, publisher, computer, and package family.
320
+ It is a case-insensitive literal substring search accepting up to 120 characters,
321
+ including Unicode, quotes, commas, parentheses, and Windows backslashes. `%`, `_`,
322
+ and `*` are literal characters; wildcard and field-query syntax are not supported.
323
+ Control characters are rejected. A blank query applies no text filter.
324
+ Filters combine, so `type=filename` selects filename events rather than all event
325
+ types that happen to include a filename. Omit `type` to search across event types.
326
+
327
+ For example, “Find events from publisher Contoso, Inc. (R&D)” uses
328
+ `list_events q="Contoso, Inc. (R&D)"`. To block a file found in those results,
329
+ review the returned IDs and rule context, choose the intended rule type, and call
330
+ `manage_policy_rules action=add policy_id=... event_ids=["<selected-event-id>"]
331
+ status=blocked type=filename`. Search does not change policies or automatically
332
+ block every match. Searching a publisher does not imply blocking that publisher;
333
+ the selected rule type determines what is blocked. Event IDs can also derive
334
+ other supported rules when appropriate, subject to Portal platform validation.
335
+
336
+ The default window is 24 hours with statuses `audited,blocked`; use `since` for
337
+ an explicit lower bound. The window uses the last observation time, falling back
338
+ to creation time. Results include file paths, publishers, hashes, computers,
339
+ occurrence counts, rule context, and pagination. Use `limit` and `offset` for
340
+ additional pages. This is normalized event data rather than a raw event log.
341
+
342
+ For “Attach LOLDrivers intel to my Windows policy”, the workflow is:
343
+
344
+ 1. `list_policies platform=windows` identifies the policy name and ID.
345
+ 2. `list_intel_sources platform=windows` returns available source names and IDs.
346
+ It defaults to enabled sources; use `is_enabled=false` to inspect disabled ones.
347
+ Use `limit` (up to 100) and `offset` to discover additional pages.
348
+ 3. `manage_policy_intel_sources action=list policy_id=...` shows current attachments.
349
+ 4. After identifying the intended policy and sources, use
350
+ `manage_policy_intel_sources action=attach policy_id=... source_ids=[...]`.
351
+ The result reports new attachments and sources already attached separately.
352
+ 5. List the policy attachments again to verify the result.
353
+
354
+ Source discovery requires `intel:read`, policy discovery/attachment listing
355
+ requires `policies:read`, and attachment requires `policies:write`. Source
356
+ visibility does not guarantee premium entitlement; the API checks it when attaching.
357
+ Attachments create a policy version and take effect as endpoints receive it.
358
+
226
359
  ## Configuration sources, in order of precedence
227
360
 
228
361
  1. `MAGICSWORD_API_KEY` / `MAGICSWORD_BASE_URL` env vars (set by the MCP host).
@@ -239,6 +372,17 @@ are retried; write actions are never retried automatically.
239
372
  - **`flip_to_enforcing` is two-step.** The first call returns a server preview
240
373
  and one-time confirmation token; you must show the preview to a human and
241
374
  pass the token back to commit. Tokens are short-lived and single-use.
375
+ This is **not MFA or server-verified human approval**: the same API key can
376
+ perform both calls. The MCP host must obtain human approval before committing.
377
+ A commit response must confirm success for the requested policy and identify
378
+ its new version; otherwise use `show_policy` to verify the outcome before retrying.
379
+ Success confirms the server policy version change. Endpoint enforcement takes
380
+ effect through check-in; this response does not confirm endpoint delivery.
381
+ - **Intel attachments use enabled sources in batches of at most 60.** Capture
382
+ requests share the API key creator's rate budget with the Portal UI. A 429
383
+ response includes retry guidance; wait before submitting another batch.
384
+ Attachment summaries report newly attached and already-attached counts
385
+ separately. Invalid or incomplete counts require listing attachments before retrying.
242
386
  - **Fleet changes and deletion are explicit.** Endpoint upgrades, policy
243
387
  assignments, and private-intel deletion return a no-op preview unless the
244
388
  approved follow-up call includes `confirm=true`.
@@ -270,6 +414,37 @@ Tests validate `--help`, `--version`, production-default migration, private clie
270
414
  registration, preservation and rollback, configure validation, secret redaction,
271
415
  modern and legacy MCP startup, focused mutation confirmation, retry and timeout
272
416
  semantics, response-size bounds, malformed responses, write non-retry behavior,
273
- and npm pack contents. `test:package` installs a production-only tarball and
417
+ all 22 tools' HTTP contracts and confirmation flows over modern and legacy
418
+ stdio, explicit filename round trips, invalid rule shapes, ambiguous inputs,
419
+ actual mutation counts, and npm pack
420
+ contents. `test:package` installs a production-only tarball and
274
421
  checks the installed CLI and MCP tool discovery; `release:verify` checks all
275
422
  release metadata. See `docs/RELEASING.md` for npm and MCP Registry releases.
423
+
424
+ An opt-in live policy test is also available after `npm run build`:
425
+
426
+ ```sh
427
+ MAGICSWORD_LIVE_TEST=1 MAGICSWORD_TEST_POLICY_ID="<disposable-policy-uuid>" node scripts/live-policy-rules.mjs
428
+ ```
429
+
430
+ Use your private saved credentials or `MAGICSWORD_API_KEY`; do not put keys in
431
+ commands or shared logs. This test **writes policy versions** and requires a
432
+ disposable, unassigned Windows audit policy named with the prefix
433
+ `MCP issue 5 disposable verification`, seeded with more than 1,000 baseline rules
434
+ with at least one attached intelligence source, and no existing `rustdesk.exe`,
435
+ `mshta.exe`, or `wscript.exe` customer rules.
436
+ It verifies append behavior, pagination, intelligence-source preservation,
437
+ repeat adds, status updates, invalid inputs, and event-derived filenames when
438
+ suitable telemetry exists. It also exercises discovery and read tools through
439
+ stdio. It prints assertion names/counts only. Remove the disposable policy and
440
+ its versions after inspection; the test does not create or delete the fixture.
441
+ Set `MAGICSWORD_TEST_PROTOCOL=legacy` to exercise the legacy live transport.
442
+
443
+ With the same disposable policy and opt-in environment, run
444
+ `node scripts/live-demo-tools.mjs` to check assignment, upgrade, and enforcement
445
+ previews, all three platforms' installer instructions, and a disabled temporary
446
+ feed's create/update/upsert/list/item-delete/attach/detach/feed-delete flows.
447
+ The feed is removed in `finally`; the policy fixture still requires manual
448
+ cleanup. These checks never commit endpoint assignments, upgrades, or enforcement.
449
+ Actual endpoint commands, enrollment tokens, and alert acknowledgements/dismissals
450
+ are covered by the local HTTP fixtures.
package/dist/client.js CHANGED
@@ -231,6 +231,9 @@ export class MagicSwordClient {
231
231
  query,
232
232
  });
233
233
  }
234
+ intelSources(query = {}) {
235
+ return this.req('GET', '/intel/sources', { query });
236
+ }
234
237
  createIntelFeed(body) {
235
238
  return this.req('POST', '/intel/feeds', { body });
236
239
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
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 21 tools.\n`);
95
+ stdout.write(`Registered magicsword with ${client} in ${target}.\nRestart the client or start a new session to load its 22 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');
@@ -0,0 +1,82 @@
1
+ import { z } from 'zod';
2
+ const text = z.string().trim().min(1).max(4096);
3
+ export const policyRuleTypeSchema = z.enum([
4
+ 'hash', 'filename', 'filepath', 'publisher', 'fileattrib', 'browser_extension',
5
+ 'packagefamilyname', 'amsi', 'path', 'team_id', 'signing_id', 'cdhash',
6
+ 'app_bundle', 'bundle_id', 'scr', 'asr', 'package',
7
+ ]);
8
+ const stringValue = z.union([
9
+ text,
10
+ z.strictObject({
11
+ value: text.optional(), name: text.optional(), path: text.optional(),
12
+ id: text.optional(), rule_id: text.optional(),
13
+ packageFamilyName: text.optional(), package_family_name: text.optional(),
14
+ }).refine((value) => Object.values(value).some(Boolean), 'A non-empty rule value is required'),
15
+ ]);
16
+ const hash = z.string().regex(/^(?:[a-f\d]{32}|[a-f\d]{40}|[a-f\d]{64})$/i);
17
+ const tbsHash = z.string().regex(/^(?:[a-f\d]{32}|[a-f\d]{40}|[a-f\d]{64}|[a-f\d]{96})$/i);
18
+ const publisherValue = z.strictObject({
19
+ publisherName: text.optional(), publisher: text.optional(),
20
+ signerName: text.optional(), signer: text.optional(),
21
+ tbsHash: tbsHash.optional(), tbs_hash: tbsHash.optional(), certificate_thumbprint: tbsHash.optional(),
22
+ certRuleLevel: z.enum(['publisher', 'filepublisher', 'pcacertificate', 'leafcertificate']).optional(),
23
+ cert_rule_level: z.enum(['publisher', 'filepublisher', 'pcacertificate', 'leafcertificate']).optional(),
24
+ }).refine((value) => Boolean(value.publisherName ?? value.publisher), 'publisherName or publisher is required')
25
+ .refine((value) => Boolean(value.tbsHash ?? value.tbs_hash ?? value.certificate_thumbprint), 'A valid TBS hash is required');
26
+ const browserValue = z.strictObject({
27
+ extensionId: text.optional(), extension_id: text.optional(),
28
+ browser: z.enum(['chrome', 'edge', 'firefox', 'safari']).optional(),
29
+ name: text.optional(), extension_name: text.optional(), version: text.optional(),
30
+ }).refine((value) => Boolean(value.extensionId ?? value.extension_id), 'extensionId is required');
31
+ const objectValue = z.record(z.string(), z.json()).refine((value) => Object.keys(value).length > 0, 'An object value must not be empty');
32
+ const metadata = {
33
+ name: z.string().trim().min(1).max(255).optional(),
34
+ status: z.enum(['allowed', 'blocked', 'disabled', 'prompt']).optional().describe('Defaults to blocked for explicit rules'),
35
+ source: text.optional().describe('The Portal assigns customer API provenance; this cannot override it'),
36
+ min_version: text.nullable().optional(), max_version: text.nullable().optional(),
37
+ mode: z.enum(['user', 'kernel', 'both']).nullable().optional(),
38
+ linked_signer_id: text.nullable().optional(),
39
+ file_attrib_refs: z.array(text).max(256).nullable().optional(),
40
+ package_version: text.nullable().optional(),
41
+ target_platforms: z.array(z.enum(['windows', 'macos', 'linux'])).min(1).max(3).nullable().optional(),
42
+ };
43
+ // Keep the strict rule envelope separate from platform-specific enforcement,
44
+ // which remains the Portal's authority once the target policy is resolved.
45
+ export const policyRuleSchema = z.discriminatedUnion('type', [
46
+ z.strictObject({ ...metadata, type: z.literal('filename'), value: stringValue }),
47
+ z.strictObject({ ...metadata, type: z.literal('filepath'), value: stringValue }),
48
+ z.strictObject({ ...metadata, type: z.literal('path'), value: stringValue }),
49
+ z.strictObject({ ...metadata, type: z.literal('fileattrib'), value: stringValue }),
50
+ z.strictObject({ ...metadata, type: z.literal('team_id'), value: stringValue }),
51
+ z.strictObject({ ...metadata, type: z.literal('signing_id'), value: stringValue }),
52
+ z.strictObject({ ...metadata, type: z.literal('bundle_id'), value: stringValue }),
53
+ z.strictObject({ ...metadata, type: z.literal('app_bundle'), value: stringValue }),
54
+ z.strictObject({ ...metadata, type: z.literal('cdhash'), value: stringValue.refine((value) => {
55
+ const candidate = typeof value === 'string' ? value
56
+ : value.value ?? value.name ?? value.path ?? value.id ?? value.rule_id ?? value.packageFamilyName ?? value.package_family_name;
57
+ return /^[a-f\d]{40}$/i.test(candidate ?? '');
58
+ }, 'cdhash rules require a 40-character hex value') }),
59
+ z.strictObject({ ...metadata, type: z.literal('hash'), value: z.union([
60
+ hash, z.strictObject({ SHA256: hash.optional(), SHA1: hash.optional(), MD5: hash.optional(), hash: hash.optional() })
61
+ .refine((value) => Object.values(value).some(Boolean), 'A hash value is required'),
62
+ ]) }),
63
+ z.strictObject({ ...metadata, type: z.literal('publisher'), value: publisherValue }),
64
+ z.strictObject({ ...metadata, type: z.literal('browser_extension'), value: browserValue }),
65
+ z.strictObject({ ...metadata, type: z.literal('packagefamilyname'), value: z.union([
66
+ text, z.strictObject({ packageFamilyName: text.optional(), package_family_name: text.optional(), name: text.optional(), version: text.optional(), publisher: text.optional() })
67
+ .refine((value) => Boolean(value.packageFamilyName ?? value.package_family_name), 'packageFamilyName is required'),
68
+ ]) }),
69
+ z.strictObject({ ...metadata, type: z.literal('package'), value: z.union([
70
+ text, z.strictObject({ name: text, manager: text.optional(), version: text.optional() }),
71
+ ]) }),
72
+ z.strictObject({ ...metadata, type: z.literal('amsi'), value: stringValue }),
73
+ z.strictObject({ ...metadata, type: z.literal('scr'), value: z.union([text, objectValue]) }),
74
+ z.strictObject({ ...metadata, type: z.literal('asr'), value: z.union([text, objectValue]) }),
75
+ ]).describe('Explicit Customer API rule with type, value and optional status/metadata. Filename example: {type:"filename", value:"rustdesk.exe", status:"blocked"}. Windows WDAC flat hash rules are rejected by the Portal; use event_ids or private intelligence feeds.');
76
+ export const addPolicyRulesResultSchema = z.object({
77
+ success: z.literal(true).optional(),
78
+ added_count: z.number().int().nonnegative(),
79
+ updated_count: z.number().int().nonnegative(),
80
+ duplicate_count: z.number().int().nonnegative(),
81
+ }).passthrough();
82
+ //# sourceMappingURL=policy-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-rules.js","sourceRoot":"","sources":["../src/policy-rules.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import { MagicSwordApiError } from '../client.js';
3
3
  import { defineTool, formatApiError, textError, textOk } from './shared.js';
4
+ const enforcementResultSchema = z.object({
5
+ ok: z.literal(true),
6
+ policy_id: z.string().uuid(),
7
+ new_version_id: z.string().uuid(),
8
+ }).passthrough();
4
9
  function renderPreview(policyId, preview) {
5
10
  const confirmation = preview.confirmation;
6
11
  const blockers = Array.isArray(preview.blockers) ? preview.blockers : [];
@@ -39,7 +44,8 @@ export const flipToEnforcingTool = defineTool({
39
44
  title: 'Flip a policy from audit to enforcing',
40
45
  description: 'Promotes a MagicSword policy from audit to enforcing mode through the Portal server confirmation flow. ' +
41
46
  'First call without confirmation_token to get readiness, blockers, endpoint count, and a one-time token. ' +
42
- 'Show the preview to the human. Second call with confirmation_token to commit. Requires policies:write.',
47
+ 'Show the preview to the human. Second call with confirmation_token to commit. Requires policies:write. ' +
48
+ 'This is two-step API confirmation, not MFA: the same API key can perform both calls. Human approval must be obtained by the MCP host.',
43
49
  inputSchema: {
44
50
  policy_id: z.string().uuid().describe('Policy UUID to flip'),
45
51
  acknowledge_blockers: z
@@ -57,6 +63,10 @@ export const flipToEnforcingTool = defineTool({
57
63
  try {
58
64
  if (confirmation_token) {
59
65
  const result = await client.enforcePolicy(policy_id, confirmation_token);
66
+ const parsed = enforcementResultSchema.safeParse(result);
67
+ if (!parsed.success || parsed.data.policy_id !== policy_id) {
68
+ return textError('The Portal returned an invalid enforcement response; the outcome could not be verified. Use show_policy to verify the current status and version before retrying; the policy may already be enforcing.');
69
+ }
60
70
  return textOk(`Policy ${policy_id} was flipped to enforcing.`, result);
61
71
  }
62
72
  const structured = (await client.enforcePreview(policy_id, acknowledge_blockers === true));
@@ -1 +1 @@
1
- {"version":3,"file":"flip_to_enforcing.js","sourceRoot":"","sources":["../../src/tools/flip_to_enforcing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flip_to_enforcing.js","sourceRoot":"","sources":["../../src/tools/flip_to_enforcing.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { whoamiTool } from './whoami.js';
2
2
  import { listEndpointsTool } from './list_endpoints.js';
3
3
  import { findAlertsTool } from './find_alerts.js';
4
4
  import { listEventsTool } from './list_events.js';
5
+ import { listIntelSourcesTool } from './list_intel_sources.js';
5
6
  import { triageAlertTool } from './triage_alert.js';
6
7
  import { listPoliciesTool } from './list_policies.js';
7
8
  import { showPolicyTool } from './show_policy.js';
@@ -33,6 +34,7 @@ export const allTools = [
33
34
  applyPolicyToEndpointsTool,
34
35
  flipToEnforcingTool,
35
36
  listCustomerIntelFeedsTool,
37
+ listIntelSourcesTool,
36
38
  manageCustomerIntelFeedTool,
37
39
  manageCustomerIntelItemTool,
38
40
  upsertCustomerIntelItemsTool,
@@ -52,6 +54,7 @@ const READ_ONLY_TOOLS = new Set([
52
54
  'list_policies',
53
55
  'show_policy',
54
56
  'list_customer_intel_feeds',
57
+ 'list_intel_sources',
55
58
  'agent_install_instructions',
56
59
  ]);
57
60
  const DESTRUCTIVE_TOOLS = new Set([
@@ -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,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,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,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":"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"}
@@ -2,8 +2,12 @@ import { z } from 'zod';
2
2
  import { defineTool, formatApiError, textOk } from './shared.js';
3
3
  export const listEventsTool = defineTool({
4
4
  name: 'list_events',
5
- title: 'List MagicSword audit/block events',
6
- description: 'Lists normalized, rule-relevant org events as JSON without raw endpoint telemetry. Use this for requests like “show me the last day of audit events” or “find blocked events for this policy”. Requires alerts:read.',
5
+ title: 'Investigate MagicSword audit/block events',
6
+ description: 'Searches normalized Investigate events across name, filename, path, hash, publisher, computer, and package family, with optional type, status, policy, and endpoint filters. ' +
7
+ 'For “show filename audit events for image.png”, use type=filename, status=audited, file_name=image.png. ' +
8
+ 'Defaults to audited and blocked events over the last 24 hours, based on when they were last observed. ' +
9
+ 'Returns file paths, publishers, hashes, endpoint names, occurrence counts, timestamps, and rule context without raw telemetry. ' +
10
+ 'Search is read-only. To create rules, review the results and pass selected event IDs to manage_policy_rules with an explicit status and optional rule type. Requires alerts:read.',
7
11
  inputSchema: {
8
12
  hours: z
9
13
  .number()
@@ -17,23 +21,27 @@ export const listEventsTool = defineTool({
17
21
  platform: z.enum(['windows', 'macos', 'linux']).optional(),
18
22
  endpoint_id: z.string().uuid().optional(),
19
23
  policy_id: z.string().uuid().optional(),
20
- q: z.string().max(255).optional().describe('Search name, file, hash, path, or computer'),
24
+ file_name: z.string().min(1).max(255).optional().describe('Exact, case-sensitive filename, e.g. image.png; punctuation is literal'),
25
+ q: z.string().max(120).regex(/^[^\u0000-\u001f\u007f-\u009f]*$/, 'Search must not contain control characters').optional()
26
+ .describe('Case-insensitive literal substring search across name, filename, path, hash, publisher, computer, and package family. Up to 120 characters, including Unicode and punctuation; %, _, and * are literal. Omit type to search across event types. Combine with file_name for an exact filename.'),
21
27
  limit: z.number().int().positive().max(500).optional(),
22
- offset: z.number().int().min(0).optional(),
28
+ offset: z.number().int().min(0).max(1_000_000).optional(),
23
29
  },
24
30
  async handler(args, { client }) {
25
31
  try {
26
32
  const result = await client.events(args);
27
33
  const lines = result.events
28
- .slice(0, 50)
29
34
  .map((event) => {
30
35
  const ruleContext = event.rule_context
31
36
  ? ` rule_context=${JSON.stringify(event.rule_context)}`
32
37
  : '';
33
- return (`- ${event.created_at ?? event.last_seen_at ?? ''} [${event.platform ?? '?'}] ${event.status}/${event.type} ` +
34
- `${event.name ?? event.file_name ?? event.file_path ?? event.file_hash ?? event.id} id=${event.id}${ruleContext}`);
38
+ return (`- ${event.last_seen_at ?? event.created_at ?? ''} [${event.platform ?? '?'}] ${event.status}/${event.type} ` +
39
+ `${event.file_name ?? event.name ?? event.id} id=${event.id} computer=${event.computer_name ?? '?'} ` +
40
+ `path=${event.file_path ?? '?'} hash=${event.file_hash ?? '?'} publisher=${event.publisher ?? '?'} ` +
41
+ `package_family=${event.package_family_name ?? '?'} ` +
42
+ `occurrences=${event.occurrence_count ?? '?'}${ruleContext}`);
35
43
  });
36
- return textOk(`Found ${result.total} event(s) since ${result.since}. Showing ${result.events.length}.\n\n${lines.join('\n')}`, result);
44
+ return textOk(`Found ${result.total} event(s) observed since ${result.since}. Showing ${result.events.length} at offset ${result.offset}.\n\n${lines.join('\n')}`, result);
37
45
  }
38
46
  catch (err) {
39
47
  return formatApiError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"list_events.js","sourceRoot":"","sources":["../../src/tools/list_events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list_events.js","sourceRoot":"","sources":["../../src/tools/list_events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { z } from 'zod';
2
+ import { defineTool, formatApiError, textOk } from './shared.js';
3
+ export const listIntelSourcesTool = defineTool({
4
+ name: 'list_intel_sources',
5
+ title: 'List available intelligence sources',
6
+ description: 'Discovers global and organization-owned intelligence sources and their IDs for attaching to a policy. ' +
7
+ 'Returns enabled sources by default; is_enabled=false lists disabled sources. Filter by the policy platform. ' +
8
+ 'Use list_policies to find the policy ID, then manage_policy_intel_sources action=list to inspect attachments ' +
9
+ 'or action=attach with the selected source_ids. Premium sources may require a paid plan. Requires intel:read.',
10
+ inputSchema: {
11
+ platform: z.enum(['windows', 'macos', 'linux']).optional(),
12
+ is_enabled: z.boolean().optional(),
13
+ limit: z.number().int().min(1).max(100).optional(),
14
+ offset: z.number().int().min(0).max(1_000_000).optional(),
15
+ },
16
+ async handler(args, { client }) {
17
+ try {
18
+ const result = await client.intelSources(args);
19
+ const lines = result.sources.map(source => `- ${source.name} — id: ${source.id}; ${source.scope === 'organization' ? 'organization-owned' : 'global'}; ` +
20
+ `${source.item_count ?? 0} items; platforms: ${source.platforms?.join(', ') || 'unspecified'}; ` +
21
+ `enabled: ${source.is_enabled}; premium: ${source.is_premium}`);
22
+ return textOk(`Found ${result.total} intelligence source(s). Showing ${result.sources.length} at offset ${result.offset}.` +
23
+ (lines.length ? `\n\n${lines.join('\n')}` : ''), result);
24
+ }
25
+ catch (err) {
26
+ return formatApiError(err);
27
+ }
28
+ },
29
+ });
30
+ //# sourceMappingURL=list_intel_sources.js.map
@@ -0,0 +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,28 +1,53 @@
1
1
  import { z } from 'zod';
2
2
  import { defineTool, formatApiError, textError, textOk } from './shared.js';
3
+ const attachmentResultSchema = z.object({
4
+ success: z.literal(true),
5
+ result: z.object({
6
+ sourcesAttached: z.number().int().nonnegative(),
7
+ skippedAlreadyAttached: z.number().int().nonnegative(),
8
+ }),
9
+ });
3
10
  export const managePolicyIntelSourcesTool = defineTool({
4
11
  name: 'manage_policy_intel_sources',
5
12
  title: 'List, attach, or detach intel feeds on a policy',
6
- description: 'Lists, attaches, or detaches global/customer-owned intel feeds on a policy current version. Customer feeds only affect endpoints in that org with the feed attached. List requires policies:read; attach/detach require policies:write.',
13
+ description: 'Lists, attaches, or detaches global/customer-owned intel feeds on a policy current version. First use list_policies to find policy_id and list_intel_sources to discover source IDs for that platform. Customer feeds only affect endpoints in that org with the feed attached. Attach/detach changes the policy version; show the selected policy and sources to the user before making the requested change. List requires policies:read; attach/detach require policies:write.',
7
14
  inputSchema: {
8
15
  action: z.enum(['list', 'attach', 'detach']),
9
16
  policy_id: z.string().uuid(),
10
- source_ids: z.array(z.string().uuid()).min(1).max(100).optional().describe('One or more source IDs for attach'),
17
+ source_ids: z.array(z.string().uuid()).min(1).max(60).optional().describe('1–60 enabled source IDs for attach; captures share the key creator\'s rate budget'),
11
18
  source_id: z.string().uuid().optional().describe('Source ID for detach'),
12
19
  },
13
20
  async handler({ action, policy_id, source_ids, source_id }, { client }) {
14
21
  try {
15
22
  if (action === 'list') {
16
23
  const result = await client.policyIntelSources(policy_id);
17
- const sources = Array.isArray(result.sources) ? result.sources : [];
18
- return textOk(`Policy ${policy_id} has ${sources.length} intel source(s) attached.`, result);
24
+ const parsed = z.object({ sources: z.array(z.object({ id: z.string(), name: z.string() })) }).safeParse(result);
25
+ if (!parsed.success)
26
+ return textError('The API returned an invalid source list; attached sources could not be verified.');
27
+ const sources = parsed.data.sources;
28
+ return textOk(`Policy ${policy_id} has ${sources.length} intel source(s) attached.` +
29
+ (sources.length ? `\n\n${sources.map(source => `- ${source.name} — id: ${source.id}`).join('\n')}` : ''), result);
19
30
  }
20
31
  if (action === 'attach') {
21
32
  const ids = source_ids?.length ? source_ids : source_id ? [source_id] : [];
22
33
  if (ids.length === 0)
23
34
  return textError('source_ids or source_id is required for attach.');
24
35
  const result = await client.attachIntelSources(policy_id, ids);
25
- return textOk(`Attached ${ids.length} intel source(s) to policy ${policy_id}.`, result);
36
+ const parsed = attachmentResultSchema.safeParse(result);
37
+ if (!parsed.success) {
38
+ return textError('The Portal returned an invalid attachment response; the outcome could not be verified. Use action=list to inspect attached sources before retrying; a new policy version may already have been created.');
39
+ }
40
+ const { sourcesAttached: attached, skippedAlreadyAttached: skipped } = parsed.data.result;
41
+ if (attached + skipped !== new Set(ids).size) {
42
+ return {
43
+ ...textError('The Portal attachment counts do not account for the requested sources. Use action=list to inspect attached sources before retrying; a new policy version may already have been created.'),
44
+ structuredContent: result,
45
+ };
46
+ }
47
+ const summary = attached === 0
48
+ ? `No changes needed: ${skipped} intel source(s) already attached.`
49
+ : `Attached ${attached} intel source(s) to policy ${policy_id}; ${skipped} already attached.`;
50
+ return textOk(summary, result);
26
51
  }
27
52
  if (!source_id)
28
53
  return textError('source_id is required for detach.');
@@ -1 +1 @@
1
- {"version":3,"file":"manage_policy_intel_sources.js","sourceRoot":"","sources":["../../src/tools/manage_policy_intel_sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;IACrD,IAAI,EAAE,6BAA6B;IACnC,KAAK,EAAE,iDAAiD;IACxD,WAAW,EACT,yOAAyO;IAC3O,WAAW,EAAE;QACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;QAC5B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC/G,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACzE;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE;QACpE,IAAI,CAAC;YACH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAE,MAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,MAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,OAAO,MAAM,CACX,UAAU,SAAS,QAAQ,OAAO,CAAC,MAAM,4BAA4B,EACrE,MAAiC,CAClC,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,SAAS,CAAC,iDAAiD,CAAC,CAAC;gBAC1F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC/D,OAAO,MAAM,CACX,YAAY,GAAG,CAAC,MAAM,8BAA8B,SAAS,GAAG,EAChE,MAAiC,CAClC,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,SAAS;gBAAE,OAAO,SAAS,CAAC,mCAAmC,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,yBAAyB,SAAS,gBAAgB,SAAS,GAAG,EAAE,MAAiC,CAAC,CAAC;QACnH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"manage_policy_intel_sources.js","sourceRoot":"","sources":["../../src/tools/manage_policy_intel_sources.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  import { defineTool, formatApiError, textError, textOk } from './shared.js';
3
- const ruleSchema = z
4
- .record(z.string(), z.unknown())
5
- .describe('Policy rule. Common Windows WDAC shapes: {type:"filepath", value:"%OSDRIVE%\\\\Tools\\\\tool.exe", status:"blocked"}, {type:"filename", value:"tool.exe", status:"blocked"}, or {type:"publisher", value:{publisherName, signerName, tbsHash}, status:"allowed"}. Do not create explicit type:"hash" rules for Windows WDAC; use event_ids or private intel feeds for hash/AuthentiHash/page-hash IOCs.');
3
+ import { addPolicyRulesResultSchema, policyRuleSchema, policyRuleTypeSchema } from '../policy-rules.js';
6
4
  export const managePolicyRulesTool = defineTool({
7
5
  name: 'manage_policy_rules',
8
6
  title: 'List or add policy rules',
9
- description: 'Lists policy rules or creates a new policy version with explicit rules or event-derived rules. ' +
7
+ description: 'Lists rules stored on the current policy version, including materialized feed rules, or appends/updates explicit or event-derived rules while preserving existing rules and feed links. ' +
10
8
  'Use event_ids with status=allowed for “allow all these audit events on my policy”; the Portal will derive supported policy rules when possible. ' +
9
+ 'Use list_events with q to find events across supported search fields, then pass only the selected IDs here; search terms are not rule values. ' +
11
10
  'Do not add explicit flat file-hash rules for Windows WDAC. Requires policies:read for list and policies:write for add.',
12
11
  inputSchema: {
13
12
  action: z.enum(['list', 'add']),
@@ -18,18 +17,19 @@ export const managePolicyRulesTool = defineTool({
18
17
  .describe('Policy UUID. Required for list; optional for add if policy_name is provided.'),
19
18
  policy_name: z
20
19
  .string()
20
+ .trim()
21
21
  .min(1)
22
- .max(4096)
22
+ .max(255)
23
23
  .optional()
24
24
  .describe('Policy current-version name for add when policy_id is unknown.'),
25
25
  platform: z.enum(['windows', 'macos', 'linux']).optional().describe('Disambiguates policy_name matches'),
26
- rules: z.array(ruleSchema).max(100).optional().describe('Explicit rules to add/update'),
27
- event_ids: z.array(z.string().uuid()).max(100).optional().describe('Telemetry event IDs to turn into rules'),
26
+ rules: z.array(policyRuleSchema).min(1).max(100).optional().describe('Explicit rules to add/update'),
27
+ event_ids: z.array(z.string().uuid()).min(1).max(100).optional().describe('Telemetry event IDs to turn into rules'),
28
28
  status: z
29
29
  .enum(['allowed', 'blocked', 'disabled'])
30
30
  .optional()
31
31
  .describe('Status for event-derived rules; defaults to allowed'),
32
- type: z.string().max(4096).optional().describe('Optional rule type override for event-derived rules'),
32
+ type: policyRuleTypeSchema.optional().describe('Optional rule type override for event-derived rules'),
33
33
  limit: z.number().int().positive().max(500).optional(),
34
34
  offset: z.number().int().min(0).optional(),
35
35
  },
@@ -46,6 +46,12 @@ export const managePolicyRulesTool = defineTool({
46
46
  if ((!rules || rules.length === 0) && (!event_ids || event_ids.length === 0)) {
47
47
  return textError('Provide rules or event_ids when action=add.');
48
48
  }
49
+ if (rules !== undefined && event_ids !== undefined) {
50
+ return textError('Provide exactly one of rules or event_ids; the Portal selects event_ids whenever that field is present.');
51
+ }
52
+ if (rules && (status !== undefined || type !== undefined)) {
53
+ return textError('Top-level status and type apply only to event_ids. Set type and status on each explicit rule.');
54
+ }
49
55
  const result = await client.addPolicyRules({
50
56
  policy_id,
51
57
  policy_name,
@@ -55,7 +61,31 @@ export const managePolicyRulesTool = defineTool({
55
61
  status,
56
62
  type,
57
63
  });
58
- return textOk(`Updated policy rules${policy_id ? ` for ${policy_id}` : ''}.`, result);
64
+ const parsed = addPolicyRulesResultSchema.safeParse(result);
65
+ if (!parsed.success) {
66
+ return textError('The Portal returned an invalid rule-change response; the outcome could not be verified. List the current rules before retrying; a new version may already have been created.');
67
+ }
68
+ const { added_count: added, updated_count: updated, duplicate_count: duplicates } = parsed.data;
69
+ if (added === 0 && updated === 0 && duplicates === 0) {
70
+ return {
71
+ ...textError('The Portal reported 0 rules added and 0 updated for a non-empty request. List the current rules and inspect the policy version before retrying; a new version may already have been created.'),
72
+ structuredContent: result,
73
+ };
74
+ }
75
+ if (event_ids) {
76
+ const requestedEvents = new Set(event_ids).size;
77
+ const accountedEvents = added + updated + duplicates;
78
+ if (accountedEvents < requestedEvents) {
79
+ return {
80
+ ...textError(`The Portal accounted for only ${accountedEvents} of ${requestedEvents} unique events in its rule-change counts. Some events may not have produced rules, and some rules may already have been saved. List the current rules and inspect the policy version before retrying.`),
81
+ structuredContent: result,
82
+ };
83
+ }
84
+ }
85
+ const summary = added === 0 && updated === 0
86
+ ? `No changes needed: ${duplicates} rule(s) already exist with the same status.`
87
+ : `Updated policy rules: added ${added}, updated ${updated}, already unchanged ${duplicates}.`;
88
+ return textOk(summary, result);
59
89
  }
60
90
  catch (err) {
61
91
  return formatApiError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"manage_policy_rules.js","sourceRoot":"","sources":["../../src/tools/manage_policy_rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manage_policy_rules.js","sourceRoot":"","sources":["../../src/tools/manage_policy_rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAExG,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,0BAA0B;IACjC,WAAW,EACT,0LAA0L;QAC1L,kJAAkJ;QAClJ,gJAAgJ;QAChJ,wHAAwH;IAC1H,WAAW,EAAE;QACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/B,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,IAAI,EAAE;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,8EAA8E,CAAC;QAC3F,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gEAAgE,CAAC;QAC7E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACxG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACpG,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACnH,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;aACxC,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QACrG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KAC3C;IACD,KAAK,CAAC,OAAO,CACX,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAC3F,EAAE,MAAM,EAAE;QAEV,IAAI,CAAC;YACH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,IAAI,CAAC,SAAS;oBAAE,OAAO,SAAS,CAAC,yCAAyC,CAAC,CAAC;gBAC5E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACtE,OAAO,MAAM,CAAC,2BAA2B,SAAS,GAAG,EAAE,MAAiC,CAAC,CAAC;YAC5F,CAAC;YAED,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW;gBAAE,OAAO,SAAS,CAAC,uDAAuD,CAAC,CAAC;YAC1G,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7E,OAAO,SAAS,CAAC,6CAA6C,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACnD,OAAO,SAAS,CAAC,yGAAyG,CAAC,CAAC;YAC9H,CAAC;YACD,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;gBAC1D,OAAO,SAAS,CAAC,+FAA+F,CAAC,CAAC;YACpH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;gBACzC,SAAS;gBACT,WAAW;gBACX,QAAQ;gBACR,KAAK;gBACL,SAAS;gBACT,MAAM;gBACN,IAAI;aACL,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,SAAS,CAAC,8KAA8K,CAAC,CAAC;YACnM,CAAC;YACD,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;YAChG,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACrD,OAAO;oBACL,GAAG,SAAS,CAAC,8LAA8L,CAAC;oBAC5M,iBAAiB,EAAE,MAAiC;iBACrD,CAAC;YACJ,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;gBAChD,MAAM,eAAe,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;gBACrD,IAAI,eAAe,GAAG,eAAe,EAAE,CAAC;oBACtC,OAAO;wBACL,GAAG,SAAS,CAAC,iCAAiC,eAAe,OAAO,eAAe,uMAAuM,CAAC;wBAC3R,iBAAiB,EAAE,MAAiC;qBACrD,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;gBAC1C,CAAC,CAAC,sBAAsB,UAAU,8CAA8C;gBAChF,CAAC,CAAC,+BAA+B,KAAK,aAAa,OAAO,uBAAuB,UAAU,GAAG,CAAC;YACjG,OAAO,MAAM,CAAC,OAAO,EAAE,MAAiC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF,CAAC,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.1",
4
+ "version": "0.1.4",
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",
@@ -20,11 +20,13 @@
20
20
  "node": ">=22"
21
21
  },
22
22
  "scripts": {
23
- "build": "tsc -p tsconfig.json && node scripts/postbuild.mjs",
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 && node scripts/client.mjs && node scripts/smoke.mjs",
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",
27
27
  "test:package": "npm run build && node scripts/package-smoke.mjs",
28
+ "bundle:desktop": "npm run build && node scripts/build-mcpb.mjs",
29
+ "test:desktop": "node scripts/desktop-smoke.mjs",
28
30
  "version": "node scripts/sync-registry-version.mjs",
29
31
  "release:sync": "node scripts/sync-registry-version.mjs",
30
32
  "release:verify": "node scripts/verify-release.mjs",
@@ -33,13 +35,16 @@
33
35
  "prepack": "npm run build"
34
36
  },
35
37
  "dependencies": {
36
- "@modelcontextprotocol/server": "^2.0.0",
37
- "undici": "^7.29.1",
38
- "zod": "^4.4.3"
38
+ "@modelcontextprotocol/server": "^2.3.1",
39
+ "undici": "^7.30.1",
40
+ "zod": "^4.6.7"
39
41
  },
40
42
  "devDependencies": {
41
- "@modelcontextprotocol/client": "^2.2.0",
43
+ "@modelcontextprotocol/client": "^2.3.1",
42
44
  "@types/node": "^22.10.0",
45
+ "ajv": "8.20.0",
46
+ "ajv-formats": "3.0.1",
47
+ "fflate": "0.8.3",
43
48
  "typescript": "^5.6.3"
44
49
  },
45
50
  "repository": {