@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 +168 -14
- package/dist/client.js +15 -0
- package/dist/client.js.map +1 -1
- package/dist/configure.js +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/apply_policy_to_endpoints.js +80 -74
- package/dist/tools/apply_policy_to_endpoints.js.map +1 -1
- package/dist/tools/clone_policy.js +52 -0
- package/dist/tools/clone_policy.js.map +1 -0
- package/dist/tools/create_policy.js +62 -0
- package/dist/tools/create_policy.js.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list_endpoint_groups.js +37 -0
- package/dist/tools/list_endpoint_groups.js.map +1 -0
- package/dist/tools/list_intel_sources.js +6 -1
- package/dist/tools/list_intel_sources.js.map +1 -1
- package/dist/tools/shared.js.map +1 -1
- package/package.json +2 -2
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
|
|
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
|
|
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
|
-
|
|
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` |
|
|
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
|
|
387
|
-
|
|
388
|
-
|
|
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
|
|
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.
|
|
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 } : {},
|
package/dist/client.js.map
CHANGED
|
@@ -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
|
|
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;
|
|
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":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;QACnH,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;AAErC,SAAS,YAAY;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,wCAAwC;QACxC,EAAE;QACF,QAAQ;QACR,wGAAwG;QACxG,uFAAuF;QACvF,0FAA0F;QAC1F,sFAAsF;QACtF,gGAAgG;QAChG,0FAA0F;QAC1F,mDAAmD;QACnD,qDAAqD;QACrD,EAAE;QACF,cAAc;QACd,mEAAmE;QACnE,mFAAmF;QACnF,iFAAiF;QACjF,kEAAkE;QAClE,iEAAiE;QACjE,oEAAoE;QACpE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAwB;IAC5C,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C;QACE,YAAY,EACV,mIAAmI;YACnI,
|
|
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 {
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
'
|
|
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:
|
|
10
|
-
endpoint_ids: z
|
|
11
|
-
|
|
12
|
-
.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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 (
|
|
84
|
-
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACvE,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC;YACxB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAC3C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;SAC7H,CAAC,CAAC,WAAW,EAAE;KACjB,CAAC,CAAC,WAAW,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC5G,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;CAC3D,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,SAAS,GAAG,uEAAuE,CAAC;AAC1F,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,IAAI;IAC3E,WAAW,EACT,iGAAiG;QACjG,0HAA0H;QAC1H,+IAA+I;QAC/I,wKAAwK;IAC1K,WAAW,EAAE;QACX,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kCAAkC,EAAE,iDAAiD,CAAC;aAC1G,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAClE;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;YACrF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;YACjF,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS;gBACnE,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;gBACtG,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,EAAE,CAAC;gBACzE,OAAO,SAAS,CAAC,2DAA2D,SAAS,EAAE,CAAC,CAAC;YAC3F,CAAC;YACD,OAAO,MAAM,CAAC,qBAAqB,IAAI,WAAW,MAAM,CAAC,EAAE,4BAA4B,MAAM,CAAC,QAAQ,IAAI;gBACxG,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,oBAAoB,2BAA2B,IAAI,CAAC,MAAM,CAAC,qBAAqB,qBAAqB;gBACvJ,6EAA6E,EAAE,IAAI,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,kBAAkB,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,OAAO,SAAS,CAAC,wBAAwB,MAAM,+DAA+D,SAAS,EAAE,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -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',
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACvB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QACtF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;CACvH,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;IAC/C,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,IAAI;IAC9E,WAAW,EAAE,uGAAuG;QAClH,8IAA8I;QAC9I,oFAAoF;IACtF,WAAW,EAAE;QACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACxF;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC,qDAAqD,CAAC,CAAC;YAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC9H,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC7G,OAAO,SAAS,CAAC,6DAA6D,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,qBAAqB;gBAC/E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,eAAe,KAAK,CAAC,eAAe,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/H,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACnD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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,
|
|
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"}
|
package/dist/tools/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,cAAc,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
|
+
"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",
|