@magicsword-io/magicsword-mcp 0.1.6 → 0.1.7
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 +127 -4
- package/dist/client.js +39 -0
- package/dist/client.js.map +1 -1
- package/dist/configure.js +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/policy-download.js +109 -0
- package/dist/policy-download.js.map +1 -0
- package/dist/policy-zip.js +79 -0
- package/dist/policy-zip.js.map +1 -0
- package/dist/tools/download_policy.js +53 -0
- package/dist/tools/download_policy.js.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -10,6 +10,10 @@ 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
|
+
For Microsoft Copilot Studio, use the portal's hosted Streamable HTTP connector
|
|
14
|
+
with OAuth instead. Hosted access must be enabled by your MagicSword
|
|
15
|
+
administrator; the npm package remains a local stdio server.
|
|
16
|
+
|
|
13
17
|
## Quick start
|
|
14
18
|
|
|
15
19
|
> **Free to use.** MagicSword MCP and the customer API are available on the
|
|
@@ -179,7 +183,7 @@ Manual setup prints a credential-free launch entry for other local stdio MCP
|
|
|
179
183
|
clients. Unattended setup without `--client` writes only the MagicSword file.
|
|
180
184
|
|
|
181
185
|
Restart the selected client or start a new session to load `magicsword` and its
|
|
182
|
-
|
|
186
|
+
26 tools. Ask it to call `whoami` and then `list_endpoints` to verify access;
|
|
183
187
|
discovery alone does not verify API-key scopes. Claude Desktop logs are at
|
|
184
188
|
`~/Library/Logs/Claude/mcp*.log` on macOS. Browser-only clients require a remote
|
|
185
189
|
MCP transport; this package provides a local stdio server.
|
|
@@ -188,6 +192,40 @@ If you need a per-client override instead of `~/.magicsword/mcp.json`, set
|
|
|
188
192
|
`MAGICSWORD_API_KEY` and optionally `MAGICSWORD_BASE_URL` in that MCP host's
|
|
189
193
|
environment. Keep API keys out of shared config snippets and screenshots.
|
|
190
194
|
|
|
195
|
+
## Microsoft Copilot Studio
|
|
196
|
+
|
|
197
|
+
Use the **hosted connector** shown at **Magic Portal → Settings → API Keys →
|
|
198
|
+
MCP setup**, or on your portal's `/mcp` page. If that environment does not show a
|
|
199
|
+
connector URL, hosted access has not been enabled there. A local npm install
|
|
200
|
+
cannot make the server reachable from Copilot Studio.
|
|
201
|
+
|
|
202
|
+
1. In Copilot Studio, open your agent's **Tools → Add a tool → New tool →
|
|
203
|
+
Model Context Protocol**.
|
|
204
|
+
2. Set **Server name** to `MagicSword`. For **Server description**, use:
|
|
205
|
+
`Investigate MagicSword endpoints, alerts, policies, and intelligence using the permissions you approve.`
|
|
206
|
+
Paste the exact enabled portal connector URL into **Server URL**.
|
|
207
|
+
3. Choose **OAuth 2.0 → Dynamic discovery**, then **Create → Next**.
|
|
208
|
+
4. Select **Create a new connection**, sign in to MagicSword, choose your
|
|
209
|
+
organization, and approve read permissions first. Select **Add to agent**.
|
|
210
|
+
5. In the added tool's Authentication settings, choose **User authentication
|
|
211
|
+
(End user credentials)** and use a supported channel. Each person must connect
|
|
212
|
+
with their own MagicSword account rather than sharing the author's grant.
|
|
213
|
+
6. In the agent's test chat, ask:
|
|
214
|
+
|
|
215
|
+
> Use MagicSword to call whoami, then list_endpoints. Show the connected
|
|
216
|
+
> organization, my approved permissions, and my devices. Do not make any changes.
|
|
217
|
+
|
|
218
|
+
Copilot Studio uses Streamable HTTP. Do not select API-key authentication or
|
|
219
|
+
paste a Settings API key into the hosted connector; it accepts OAuth access
|
|
220
|
+
tokens. Each user should connect with their own account. Your Power Platform
|
|
221
|
+
data policies must allow the connector.
|
|
222
|
+
|
|
223
|
+
See the [Copilot Studio connection and verification guide](docs/COPILOT_STUDIO.md)
|
|
224
|
+
and [Microsoft's setup documentation](https://learn.microsoft.com/en-us/microsoft-copilot-studio/mcp-add-existing-server-to-agent).
|
|
225
|
+
Native tenant verification is required before announcing tested compatibility.
|
|
226
|
+
See [Microsoft's user-authentication guidance](https://learn.microsoft.com/en-us/microsoft-copilot-studio/configure-enduser-authentication)
|
|
227
|
+
for supported channels and connection behavior.
|
|
228
|
+
|
|
191
229
|
## Tools
|
|
192
230
|
|
|
193
231
|
| Tool | What it does |
|
|
@@ -203,6 +241,7 @@ environment. Keep API keys out of shared config snippets and screenshots.
|
|
|
203
241
|
| `list_policies` | Lists policies with current version + mode. |
|
|
204
242
|
| `create_policy` | Creates a new empty audit policy for Windows, macOS, or Linux without assigning devices. Requires `policies:write`. |
|
|
205
243
|
| `clone_policy` | Copies a policy into an independent audit policy with its rules, settings, intelligence links and collection links; no computers assigned. |
|
|
244
|
+
| `download_policy` | Downloads the current Windows policy as a complete WDAC XML ZIP or AppLocker XML; local MCP saves to Downloads or a requested directory. Requires `policies:read` and Enterprise agentless export. |
|
|
206
245
|
| `show_policy` | Shows one policy by id. |
|
|
207
246
|
| `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. |
|
|
208
247
|
| `apply_policy_to_endpoints` | Previews assignment to computer IDs, hostname matches, or groups; a server-issued `confirmation_token` commits the approved snapshot. |
|
|
@@ -223,12 +262,96 @@ Write tools require matching Customer API scopes in Magic Portal, such as
|
|
|
223
262
|
Event review uses `alerts:read`; turning selected events into policy rules
|
|
224
263
|
uses `policies:write`. Cloning requires `policies:write`; group discovery requires
|
|
225
264
|
`endpoints:read`; assignment preview and commit require **both** `policies:write`
|
|
226
|
-
and `endpoints:read`.
|
|
265
|
+
and `endpoints:read`. Policy download uses `policies:read` and requires Enterprise agentless export access.
|
|
227
266
|
|
|
228
267
|
Tools publish standard MCP safety annotations. Read-only discovery tools are
|
|
229
268
|
marked read-only and idempotent; enforcement, deletion, policy assignment,
|
|
230
269
|
rule changes, and agent upgrades are marked destructive so MCP clients can
|
|
231
|
-
apply appropriate confirmation UX.
|
|
270
|
+
apply appropriate confirmation UX. Local `download_policy` is marked as a non-destructive write because it creates a file; hosted download is read-only and returns a resource.
|
|
271
|
+
|
|
272
|
+
## Downloading policies for agentless deployment
|
|
273
|
+
|
|
274
|
+
Ask **“Download my Finance policy as WDAC and put it in Downloads”** or
|
|
275
|
+
**“Download its AppLocker XML to Downloads.”** The client finds the Windows
|
|
276
|
+
policy with `list_policies`, then calls:
|
|
277
|
+
|
|
278
|
+
```json
|
|
279
|
+
{ "policy_id": "<Windows policy UUID>", "format": "wdac" }
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Use `"format": "applocker"` for AppLocker. With the local stdio server, files go
|
|
283
|
+
to `~/Downloads` on the machine running the MCP server. To choose another folder:
|
|
284
|
+
|
|
285
|
+
```json
|
|
286
|
+
{
|
|
287
|
+
"policy_id": "<Windows policy UUID>",
|
|
288
|
+
"format": "applocker",
|
|
289
|
+
"output_directory": "~/Downloads/Finance"
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Absolute Windows paths work too (escape backslashes in JSON). The directory is
|
|
294
|
+
created if needed. Downloads use new filenames, so existing files are preserved.
|
|
295
|
+
The result includes the saved **path, SHA256, byte count and policy version ID**.
|
|
296
|
+
A failed or invalid response is not saved. Downloading does not install, assign,
|
|
297
|
+
activate, or change the policy's audit/enforcing mode.
|
|
298
|
+
|
|
299
|
+
WDAC downloads contain **all generated XML files** for that version: base and
|
|
300
|
+
supplementals when applicable, plus signer, customer and intelligence block
|
|
301
|
+
policies. These are XML source files, not compiled `.cip` files. Review and
|
|
302
|
+
compile them with Windows tooling before deployment. AppLocker is the same
|
|
303
|
+
**blocklist projection** used by the Portal's Compatible Windows download; it
|
|
304
|
+
cannot reproduce WDAC strict allowlisting. Review its returned projection summary
|
|
305
|
+
for omitted rules and weaker or broader matches before deploying it. Policies
|
|
306
|
+
with no compatible AppLocker rules return an error instead of a clearing policy.
|
|
307
|
+
|
|
308
|
+
Downloads require **`policies:read` and Enterprise agentless deployment access**.
|
|
309
|
+
The API exports the current Windows version and rejects a change detected while
|
|
310
|
+
preparing it; macOS and Linux exports are not supported by this tool.
|
|
311
|
+
|
|
312
|
+
**Hosted MCP:** `download_policy` returns an attached resource for the client to
|
|
313
|
+
save, with the same version/hash metadata. It cannot write to your computer and
|
|
314
|
+
does not accept `output_directory`. Client attachment support varies. Hosted
|
|
315
|
+
attachments are limited to **2 MiB** so the base64 response fits the hosting limit;
|
|
316
|
+
use local MCP or the authenticated API for larger artifacts. API/local WDAC
|
|
317
|
+
archives include up to **4,096 XML files** and are capped at 32 MiB (30 MiB XML).
|
|
318
|
+
Every generated member must fit these bounds; an over-limit export fails as a
|
|
319
|
+
whole rather than dropping files. AppLocker exports must be below
|
|
320
|
+
4,000,000 bytes. Nothing is extracted or executed by the tool.
|
|
321
|
+
|
|
322
|
+
**Direct API:** agentless customers can call either endpoint with a Customer API
|
|
323
|
+
key; no installed MagicSword agent is required:
|
|
324
|
+
|
|
325
|
+
| Request | Response |
|
|
326
|
+
| --- | --- |
|
|
327
|
+
| `GET /api/public/v1/policies/{policyId}/download?format=wdac` | Complete WDAC XML ZIP; `format` defaults to `wdac`. |
|
|
328
|
+
| `GET /api/public/v1/policies/{policyId}/download?format=applocker` | AppLocker XML with projection summary headers. |
|
|
329
|
+
|
|
330
|
+
For example, with `MAGICSWORD_API_KEY` set privately and `POLICY_ID` set to your
|
|
331
|
+
Windows policy UUID, create a new download directory and fetch the archive:
|
|
332
|
+
|
|
333
|
+
```sh
|
|
334
|
+
download_dir="$(mktemp -d "$HOME/Downloads/magicsword-policy.XXXXXX")"
|
|
335
|
+
curl --fail --silent --show-error \
|
|
336
|
+
--header "Authorization: Bearer $MAGICSWORD_API_KEY" \
|
|
337
|
+
--dump-header "$download_dir/headers.txt" \
|
|
338
|
+
--output "$download_dir/policy.zip" \
|
|
339
|
+
"https://www.magicsword.io/api/public/v1/policies/$POLICY_ID/download?format=wdac"
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
For AppLocker, change `format=applocker` and the output name to `policy.xml`.
|
|
343
|
+
Check the command succeeds before using its output. Headers include
|
|
344
|
+
`X-MagicSword-Policy-Version-ID`, `X-MagicSword-Policy-Xml-File-Count`, and
|
|
345
|
+
`X-MagicSword-Policy-Artifact-Format`; AppLocker also includes
|
|
346
|
+
`X-MagicSword-AppLocker-Projection-Summary`. Responses are private, streamed
|
|
347
|
+
attachments with `Cache-Control: no-store`. No public Storage URL or API key is
|
|
348
|
+
included in the downloaded artifact.
|
|
349
|
+
|
|
350
|
+
The API uses the same generators as the Portal's download buttons. Agent-delivery
|
|
351
|
+
artifacts may also be cached in Supabase Storage; this customer export generates
|
|
352
|
+
from the current policy rows without writing to that cache or changing policy
|
|
353
|
+
metadata. Existing stored policy GUID metadata is reused when available; an
|
|
354
|
+
export is not a device synchronization protocol.
|
|
232
355
|
|
|
233
356
|
## Creating a policy
|
|
234
357
|
|
|
@@ -565,7 +688,7 @@ Tests validate `--help`, `--version`, production-default migration, private clie
|
|
|
565
688
|
registration, preservation and rollback, configure validation, secret redaction,
|
|
566
689
|
modern and legacy MCP startup, focused mutation confirmation, retry and timeout
|
|
567
690
|
semantics, response-size bounds, malformed responses, write non-retry behavior,
|
|
568
|
-
all
|
|
691
|
+
all 26 tools' HTTP contracts and confirmation flows over modern and legacy
|
|
569
692
|
stdio, explicit filename round trips, invalid rule shapes, ambiguous inputs,
|
|
570
693
|
actual mutation counts, and npm pack
|
|
571
694
|
contents. `test:package` installs a production-only tarball and
|
package/dist/client.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { request as undiciRequest } from 'undici';
|
|
2
|
+
import { POLICY_DOWNLOAD_MAX_BYTES, validatePolicyDownload } from './policy-download.js';
|
|
2
3
|
export class MagicSwordTransportError extends Error {
|
|
3
4
|
constructor(message, options) {
|
|
4
5
|
super(message, options);
|
|
@@ -159,6 +160,44 @@ export class MagicSwordClient {
|
|
|
159
160
|
policy(policyId) {
|
|
160
161
|
return this.req('GET', `/policies/${MagicSwordClient.pathId(policyId)}`);
|
|
161
162
|
}
|
|
163
|
+
/** Generation may take 50 seconds. Binary artifacts have a separate 32 MiB cap. */
|
|
164
|
+
async downloadPolicy(policyId, format = 'wdac') {
|
|
165
|
+
const url = new URL(`${this.baseUrl}/api/public/v1/policies/${MagicSwordClient.pathId(policyId)}/download`);
|
|
166
|
+
url.searchParams.set('format', format);
|
|
167
|
+
const timeout = Math.max(this.requestTimeoutMs, 60_000);
|
|
168
|
+
try {
|
|
169
|
+
const response = await undiciRequest(url, {
|
|
170
|
+
// undici.request does not follow redirects without an opt-in interceptor.
|
|
171
|
+
method: 'GET',
|
|
172
|
+
headers: { authorization: `Bearer ${this.apiKey}`, 'user-agent': this.userAgent,
|
|
173
|
+
accept: format === 'wdac' ? 'application/zip' : 'application/xml' },
|
|
174
|
+
headersTimeout: timeout, bodyTimeout: timeout, signal: AbortSignal.timeout(timeout),
|
|
175
|
+
});
|
|
176
|
+
response.body.on('error', () => { });
|
|
177
|
+
if (response.statusCode !== 200) {
|
|
178
|
+
response.body.destroy();
|
|
179
|
+
// Never include server text, auth headers or generated XML in an error.
|
|
180
|
+
throw new MagicSwordApiError(response.statusCode, { error: 'Policy download request failed.' }, url.toString());
|
|
181
|
+
}
|
|
182
|
+
const chunks = [];
|
|
183
|
+
let total = 0;
|
|
184
|
+
for await (const chunk of response.body) {
|
|
185
|
+
const buffer = Buffer.from(chunk);
|
|
186
|
+
total += buffer.length;
|
|
187
|
+
if (total > POLICY_DOWNLOAD_MAX_BYTES) {
|
|
188
|
+
response.body.destroy();
|
|
189
|
+
throw new MagicSwordTransportError('Policy download exceeded the 32 MiB size limit.');
|
|
190
|
+
}
|
|
191
|
+
chunks.push(buffer);
|
|
192
|
+
}
|
|
193
|
+
return validatePolicyDownload(Buffer.concat(chunks, total), format, response.headers);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
if (error instanceof MagicSwordApiError || error instanceof MagicSwordTransportError)
|
|
197
|
+
throw error;
|
|
198
|
+
throw new MagicSwordTransportError('Policy download failed or returned an invalid artifact.');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
162
201
|
createPolicy(body) {
|
|
163
202
|
return this.req('POST', '/policies', { body });
|
|
164
203
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAC;AA4BlD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,CAAS;IACf,OAAO,CAAU;IACjB,IAAI,CAAU;IACd,GAAG,CAAS;IAEZ,YAAY,MAAc,EAAE,IAAa,EAAE,GAAW;QACpD,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,IAAI,QAAQ,MAAM,SAAS,GAAG,EAAE,CAAC;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,kEAAkE;IAClE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC;IAC/D,CAAC;IAED,2DAA2D;IAC3D,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,6EAA6E;IAC7E,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACV,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,gBAAgB,CAAS;IACzB,gBAAgB,CAAS;IACzB,UAAU,CAAS;IACnB,gBAAgB,CAAS;IAE1C,YAAY,MAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,oBAAoB,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACnE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,GAAG,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,IAAuE;QAEvE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;YAChC,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,IAAI,wBAAwB,CACxC,mDAAmD,IAAI,CAAC,gBAAgB,cAAc,CACvF,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEO,YAAY,CAAC,OAAe,EAAE,UAAyC;QAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACtE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;YACvF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,EAAU;QAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,KAAa;QACjC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,GAAG,CACf,MAA2C,EAC3C,IAAY,EACZ,UAGI,EAAE;QAEN,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;oBAAE,SAAS;gBACpE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;oBACxC,MAAM;oBACN,OAAO,EAAE;wBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;wBACtC,MAAM,EAAE,kBAAkB;wBAC1B,YAAY,EAAE,IAAI,CAAC,SAAS;wBAC5B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC9E;oBACD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC3E,WAAW,EAAE,IAAI,CAAC,gBAAgB;oBAClC,cAAc,EAAE,IAAI,CAAC,gBAAgB;oBACrC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;iBACnD,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,MAAM,GAAY,SAAS,CAAC;gBAChC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,IAAI,CAAC;wBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC1B,UAAU,GAAG,IAAI,CAAC;oBACpB,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBAED,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC3E,IAAI,eAAe,IAAI,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,CAAC;oBACjD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC7E,SAAS;gBACX,CAAC;gBACD,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBAC/B,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACrD,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBACxF,MAAM,iBAAiB,GAAG,qBAAqB;oBAC7C,CAAC,CAAC,yCAAyC,CAAC,IAAI,CAAC,qBAAqB,CAAC;oBACvE,CAAC,CAAC,KAAK,CAAC;gBACV,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3D,MAAM,IAAI,wBAAwB,CAAC,2DAA2D,CAAC,CAAC;gBAClG,CAAC;gBACD,OAAO,MAAW,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,kBAAkB,IAAI,KAAK,YAAY,wBAAwB;oBAAE,MAAM,KAAK,CAAC;gBAClG,IAAI,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,CAAC;oBAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;oBACvD,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,wBAAwB,CAChC,uCAAuC,WAAW,WAAW,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAC5F,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,IAAI,wBAAwB,CAAC,6CAA6C,CAAC,CAAC;IACpF,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,GAAG,CAAa,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,QAA+B,EAAE;QACxC,OAAO,IAAI,CAAC,GAAG,CAAmB,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAuB,KAAK,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,YAAY,CAAC,IAAqG;QAChH,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,QAA6C,EAAE;QAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,cAAc,CAAC,IAQd;QACC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,cAAc,CAAC,QAAgB,EAAE,mBAAmB,GAAG,KAAK;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACxF,IAAI,EAAE,EAAE,oBAAoB,EAAE,mBAAmB,EAAE;SACpD,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,iBAAyB;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE;YAChF,IAAI,EAAE,EAAE,kBAAkB,EAAE,iBAAiB,EAAE;SAChD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CACJ,QAQI,EAAE;QAEN,OAAO,IAAI,CAAC,GAAG,CAAiB,KAAK,EAAE,SAAS,EAAE;YAChD,KAAK,EAAE;gBACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;gBACvF,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,GAAG,CAAsB,KAAK,EAAE,WAAW,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,SAAS,CACP,QAMI,EAAE;QAEN,OAAO,IAAI,CAAC,GAAG,CAAoB,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAyB,KAAK,EAAE,cAAc,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,aAAa,CAAC,QAAiD,EAAE;QAC/D,OAAO,IAAI,CAAC,GAAG,CAAwB,KAAK,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CACJ,QAYI,EAAE;QAEN,OAAO,IAAI,CAAC,GAAG,CAAiB,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,mBAAmB,CAAC,OAAiC,EAAE;QACrD,OAAO,IAAI,CAAC,GAAG,CAA0B,MAAM,EAAE,oBAAoB,EAAE;YACrE,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB,CAAC,QAAgB,EAAE,WAAqB;QAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE;YACzF,IAAI,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,IAAsB;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,cAAc,CAAC,QAA6C,EAAE;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,uBAAuB,CAAC,QAAgB,EAAE,IAGzC;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,4BAA4B,CAAC,QAAgB,EAAE,iBAAyB;QACtE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACxI,CAAC;IAED,gBAAgB,CAAC,OAAe,EAAE,OAAgB;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE;YACjF,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,OAAe,EAAE,MAAe;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;YAC7E,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,QAA6C,EAAE;QACxD,OAAO,IAAI,CAAC,GAAG,CAA6B,KAAK,EAAE,cAAc,EAAE;YACjE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,QAAsF,EAAE;QACnG,OAAO,IAAI,CAAC,GAAG,CAAuB,KAAK,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,eAAe,CAAC,IAKf;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CACb,MAAc,EACd,IAKC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,QAA6C,EAAE;QAC5E,OAAO,IAAI,CAAC,GAAG,CAA6B,KAAK,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC1G,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,MAAc,EAAE,KAAgB;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,MAAc,EAAE,IAAa;QAC/D,OAAO,IAAI,CAAC,GAAG,CACb,OAAO,EACP,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAC1F,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,MAAc;QAChD,OAAO,IAAI,CAAC,GAAG,CACb,QAAQ,EACR,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,QAAgB,EAAE,SAAmB;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YACtF,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACzF,CAAC;IAED,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;QAClD,OAAO,IAAI,CAAC,GAAG,CACb,QAAQ,EACR,aAAa,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,UAAkB,EAAE,aAAa,GAAG,QAAQ;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE;YACnF,IAAI,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,IAOpB;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9G,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/configure.js
CHANGED
|
@@ -92,7 +92,7 @@ export async function runConfigure(rawArgs) {
|
|
|
92
92
|
const definition = serverDefinition(path, baseUrl);
|
|
93
93
|
const target = registerClient(client ?? 'manual', definition, opts.clientConfig);
|
|
94
94
|
if (target) {
|
|
95
|
-
stdout.write(`Registered magicsword with ${client} in ${target}.\nRestart the client or start a new session to load its
|
|
95
|
+
stdout.write(`Registered magicsword with ${client} in ${target}.\nRestart the client or start a new session to load its 26 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
|
@@ -49,6 +49,7 @@ function createServer(client) {
|
|
|
49
49
|
instructions: 'MagicSword MCP exposes EDR management as conversational tools. Start with `whoami` to confirm the organization, key, and scopes. ' +
|
|
50
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
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. ' +
|
|
52
|
+
'Use download_policy to save generated Windows policy files locally; it does not deploy them. Downloads default to the machine running this server. ' +
|
|
52
53
|
'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. ' +
|
|
53
54
|
'Fleet-wide and destructive operations require an explicit confirmation; show the preview to the human first.',
|
|
54
55
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { mkdir, open, unlink } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
5
|
+
import { XMLParser, XMLValidator } from 'fast-xml-parser';
|
|
6
|
+
import { readPolicyZip } from './policy-zip.js';
|
|
7
|
+
export const POLICY_DOWNLOAD_MAX_BYTES = 32 * 1024 * 1024;
|
|
8
|
+
const MAX_XML_BYTES = 30 * 1024 * 1024;
|
|
9
|
+
const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
10
|
+
function validateXml(bytes, root) {
|
|
11
|
+
const xml = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
12
|
+
if (/<!DOCTYPE|<!ENTITY/i.test(xml) || XMLValidator.validate(xml) !== true) {
|
|
13
|
+
throw new Error('Invalid policy XML.');
|
|
14
|
+
}
|
|
15
|
+
// FXP ignores text outside a document root. Wrapping the already validated
|
|
16
|
+
// input makes leading/trailing text observable instead of silently dropping it.
|
|
17
|
+
const body = xml.replace(/^\uFEFF/, '').replace(/^\s*<\?xml\b[^?]*\?>/, '');
|
|
18
|
+
const wrapped = new XMLParser({ preserveOrder: true, ignoreDeclaration: true,
|
|
19
|
+
ignorePiTags: true, processEntities: false, maxNestedTags: 256 })
|
|
20
|
+
.parse(`<_MagicSwordPolicyDocument_>${body}</_MagicSwordPolicyDocument_>`);
|
|
21
|
+
const parsed = wrapped[0]?._MagicSwordPolicyDocument_;
|
|
22
|
+
if (!Array.isArray(parsed) || parsed.length !== 1 || !parsed[0] ||
|
|
23
|
+
!Object.hasOwn(parsed[0], root) || Object.keys(parsed[0]).some(key => key !== root && key !== ':@')) {
|
|
24
|
+
throw new Error('Unexpected policy XML format.');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Validate the complete response before touching the user's output directory. */
|
|
28
|
+
export function validatePolicyDownload(bytes, format, headers) {
|
|
29
|
+
const header = (name) => {
|
|
30
|
+
const value = headers[name];
|
|
31
|
+
return typeof value === 'string' ? value : '';
|
|
32
|
+
};
|
|
33
|
+
const mime = header('content-type').split(';')[0].trim().toLowerCase();
|
|
34
|
+
const versionId = header('x-magicsword-policy-version-id');
|
|
35
|
+
if (!UUID.test(versionId) || !bytes.length || bytes.length > POLICY_DOWNLOAD_MAX_BYTES ||
|
|
36
|
+
mime !== (format === 'wdac' ? 'application/zip' : 'application/xml')) {
|
|
37
|
+
throw new Error('Invalid policy download response.');
|
|
38
|
+
}
|
|
39
|
+
let fileCount = 1;
|
|
40
|
+
if (format === 'wdac') {
|
|
41
|
+
const files = readPolicyZip(bytes);
|
|
42
|
+
fileCount = files.length;
|
|
43
|
+
if (!fileCount || String(fileCount) !== header('x-magicsword-policy-xml-file-count')) {
|
|
44
|
+
throw new Error('WDAC archive file count could not be verified.');
|
|
45
|
+
}
|
|
46
|
+
for (const xml of files)
|
|
47
|
+
validateXml(xml, 'SiPolicy');
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
if (bytes.length > MAX_XML_BYTES)
|
|
51
|
+
throw new Error('AppLocker XML exceeds the size limit.');
|
|
52
|
+
validateXml(bytes, 'AppLockerPolicy');
|
|
53
|
+
}
|
|
54
|
+
let projectionSummary;
|
|
55
|
+
const summary = header('x-magicsword-applocker-projection-summary');
|
|
56
|
+
if (format === 'applocker' && !summary)
|
|
57
|
+
throw new Error('Missing AppLocker projection summary.');
|
|
58
|
+
if (summary) {
|
|
59
|
+
if (summary.length > 8192)
|
|
60
|
+
throw new Error('Invalid policy projection summary.');
|
|
61
|
+
const parsed = JSON.parse(summary);
|
|
62
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
63
|
+
throw new Error('Invalid policy projection summary.');
|
|
64
|
+
projectionSummary = parsed;
|
|
65
|
+
}
|
|
66
|
+
return { bytes, format, versionId: versionId.toLowerCase(), fileCount,
|
|
67
|
+
sha256: createHash('sha256').update(bytes).digest('hex'), projectionSummary };
|
|
68
|
+
}
|
|
69
|
+
export function policyDownloadDirectory(input) {
|
|
70
|
+
if (input === undefined)
|
|
71
|
+
return join(homedir(), 'Downloads');
|
|
72
|
+
if (!input || /[\u0000-\u001f\u007f]/.test(input))
|
|
73
|
+
throw new Error('Invalid output directory.');
|
|
74
|
+
const expanded = input === '~' ? homedir() : /^~[\\/]/.test(input) ? join(homedir(), input.slice(2)) : input;
|
|
75
|
+
if (!isAbsolute(expanded))
|
|
76
|
+
throw new Error('Output directory must be an absolute path or start with ~/.');
|
|
77
|
+
return resolve(expanded);
|
|
78
|
+
}
|
|
79
|
+
/** Exclusive creation prevents overwriting existing files and final-path symlinks. */
|
|
80
|
+
export async function savePolicyDownload(download, policyId, directory) {
|
|
81
|
+
if (!UUID.test(policyId))
|
|
82
|
+
throw new Error('Invalid policy ID.');
|
|
83
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
84
|
+
const stem = `magicsword-${download.format}-${policyId.toLowerCase()}-${download.versionId}`;
|
|
85
|
+
const extension = download.format === 'wdac' ? '.zip' : '.applocker.xml';
|
|
86
|
+
for (let suffix = 0; suffix < 100; suffix++) {
|
|
87
|
+
const path = join(directory, `${stem}${suffix ? `-${suffix + 1}` : ''}${extension}`);
|
|
88
|
+
const file = await open(path, 'wx', 0o600).catch(error => {
|
|
89
|
+
if (error.code === 'EEXIST')
|
|
90
|
+
return null;
|
|
91
|
+
throw error;
|
|
92
|
+
});
|
|
93
|
+
if (!file)
|
|
94
|
+
continue;
|
|
95
|
+
try {
|
|
96
|
+
await file.writeFile(download.bytes);
|
|
97
|
+
await file.sync();
|
|
98
|
+
await file.close();
|
|
99
|
+
return path;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
await file.close().catch(() => { });
|
|
103
|
+
await unlink(path).catch(() => { });
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
throw new Error('Too many existing policy downloads in this directory.');
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=policy-download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-download.js","sourceRoot":"","sources":["../src/policy-download.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { inflateRawSync } from 'node:zlib';
|
|
2
|
+
const MAX_XML_BYTES = 30 * 1024 * 1024;
|
|
3
|
+
const MAX_XML_FILES = 4096;
|
|
4
|
+
const crcTable = Array.from({ length: 256 }, (_, value) => {
|
|
5
|
+
for (let bit = 0; bit < 8; bit++)
|
|
6
|
+
value = value & 1 ? 0xedb88320 ^ (value >>> 1) : value >>> 1;
|
|
7
|
+
return value >>> 0;
|
|
8
|
+
});
|
|
9
|
+
function crc32(bytes) {
|
|
10
|
+
let value = 0xffffffff;
|
|
11
|
+
for (const byte of bytes)
|
|
12
|
+
value = crcTable[(value ^ byte) & 255] ^ (value >>> 8);
|
|
13
|
+
return (value ^ 0xffffffff) >>> 0;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The API produces ordinary ZIPs containing flat XML names, with no encryption,
|
|
17
|
+
* data descriptors or ZIP64. Verify every byte/size/CRC before saving the ZIP;
|
|
18
|
+
* a central-directory size must never be used to truncate inflated output.
|
|
19
|
+
*/
|
|
20
|
+
export function readPolicyZip(bytes) {
|
|
21
|
+
const invalid = () => new Error('Invalid or unsafe WDAC archive.');
|
|
22
|
+
let end = bytes.length - 22;
|
|
23
|
+
while (end >= Math.max(0, bytes.length - 65557) && bytes.readUInt32LE(end) !== 0x06054b50)
|
|
24
|
+
end--;
|
|
25
|
+
if (end < 0 || bytes.readUInt32LE(end) !== 0x06054b50 ||
|
|
26
|
+
end + 22 + bytes.readUInt16LE(end + 20) !== bytes.length ||
|
|
27
|
+
bytes.readUInt16LE(end + 4) !== 0 || bytes.readUInt16LE(end + 6) !== 0)
|
|
28
|
+
throw invalid();
|
|
29
|
+
const count = bytes.readUInt16LE(end + 10);
|
|
30
|
+
let cursor = bytes.readUInt32LE(end + 16);
|
|
31
|
+
const centralStart = cursor;
|
|
32
|
+
if (!count || count > MAX_XML_FILES || bytes.readUInt16LE(end + 8) !== count ||
|
|
33
|
+
cursor + bytes.readUInt32LE(end + 12) !== end)
|
|
34
|
+
throw invalid();
|
|
35
|
+
const names = new Set();
|
|
36
|
+
const files = [];
|
|
37
|
+
let actualTotal = 0, localOffset = 0;
|
|
38
|
+
for (let index = 0; index < count; index++) {
|
|
39
|
+
if (cursor + 46 > end || bytes.readUInt32LE(cursor) !== 0x02014b50)
|
|
40
|
+
throw invalid();
|
|
41
|
+
const flags = bytes.readUInt16LE(cursor + 8), compression = bytes.readUInt16LE(cursor + 10);
|
|
42
|
+
const crc = bytes.readUInt32LE(cursor + 16), compressed = bytes.readUInt32LE(cursor + 20);
|
|
43
|
+
const original = bytes.readUInt32LE(cursor + 24), nameSize = bytes.readUInt16LE(cursor + 28);
|
|
44
|
+
const next = cursor + 46 + nameSize + bytes.readUInt16LE(cursor + 30) + bytes.readUInt16LE(cursor + 32);
|
|
45
|
+
const offset = bytes.readUInt32LE(cursor + 42);
|
|
46
|
+
if (next > end || flags & ~0x0800 || ![0, 8].includes(compression) ||
|
|
47
|
+
bytes.readUInt16LE(cursor + 34) !== 0 || offset !== localOffset || original < 1 ||
|
|
48
|
+
original > MAX_XML_BYTES - actualTotal)
|
|
49
|
+
throw invalid();
|
|
50
|
+
const nameBytes = bytes.subarray(cursor + 46, cursor + 46 + nameSize);
|
|
51
|
+
const name = new TextDecoder('utf-8', { fatal: true }).decode(nameBytes);
|
|
52
|
+
if (!/^[a-zA-Z0-9_-]+\.xml$/.test(name) || names.has(name.toLowerCase()))
|
|
53
|
+
throw invalid();
|
|
54
|
+
names.add(name.toLowerCase());
|
|
55
|
+
if (offset + 30 > centralStart || bytes.readUInt32LE(offset) !== 0x04034b50 ||
|
|
56
|
+
bytes.readUInt16LE(offset + 6) !== flags || bytes.readUInt16LE(offset + 8) !== compression ||
|
|
57
|
+
bytes.readUInt32LE(offset + 14) !== crc || bytes.readUInt32LE(offset + 18) !== compressed ||
|
|
58
|
+
bytes.readUInt32LE(offset + 22) !== original || bytes.readUInt16LE(offset + 26) !== nameSize ||
|
|
59
|
+
!bytes.subarray(offset + 30, offset + 30 + nameSize).equals(nameBytes))
|
|
60
|
+
throw invalid();
|
|
61
|
+
const start = offset + 30 + nameSize + bytes.readUInt16LE(offset + 28);
|
|
62
|
+
localOffset = start + compressed;
|
|
63
|
+
if (localOffset > centralStart)
|
|
64
|
+
throw invalid();
|
|
65
|
+
const compressedBytes = bytes.subarray(start, localOffset);
|
|
66
|
+
const xml = compression === 0 ? compressedBytes : inflateRawSync(compressedBytes, {
|
|
67
|
+
maxOutputLength: MAX_XML_BYTES - actualTotal,
|
|
68
|
+
});
|
|
69
|
+
if (xml.length !== original || crc32(xml) !== crc)
|
|
70
|
+
throw invalid();
|
|
71
|
+
actualTotal += xml.length;
|
|
72
|
+
files.push(xml);
|
|
73
|
+
cursor = next;
|
|
74
|
+
}
|
|
75
|
+
if (cursor !== end || localOffset !== centralStart)
|
|
76
|
+
throw invalid();
|
|
77
|
+
return files;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=policy-zip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-zip.js","sourceRoot":"","sources":["../src/policy-zip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MagicSwordApiError } from '../client.js';
|
|
3
|
+
import { policyDownloadDirectory, savePolicyDownload } from '../policy-download.js';
|
|
4
|
+
import { defineTool, textError, textOk } from './shared.js';
|
|
5
|
+
export const downloadPolicyTool = defineTool({
|
|
6
|
+
name: 'download_policy', title: 'Download a generated Windows policy', strictInput: true,
|
|
7
|
+
description: 'Download the current Windows policy as a WDAC XML ZIP (format=wdac, default) or compatible AppLocker XML (format=applocker). ' +
|
|
8
|
+
'Requires policies:read and Enterprise agentless deployment access. Saves on the machine running this local MCP server, ' +
|
|
9
|
+
'in ~/Downloads by default or an explicitly requested absolute output_directory. Creates a new file without overwriting existing files. ' +
|
|
10
|
+
'Returns the saved path, SHA256, version and byte count. AppLocker is a blocklist projection: review omitted rules before deployment. ' +
|
|
11
|
+
'Preserves audit/enforcing mode; downloading does not install, assign, compile or enforce a policy. Never execute the downloaded file.',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
policy_id: z.string().uuid().transform(value => value.toLowerCase()).describe('Windows policy ID from list_policies'),
|
|
14
|
+
format: z.enum(['wdac', 'applocker']).default('wdac').describe('WDAC ZIP or AppLocker XML'),
|
|
15
|
+
output_directory: z.string().min(1).max(4096).optional().describe('Optional absolute local directory or ~/ path; defaults to ~/Downloads'),
|
|
16
|
+
},
|
|
17
|
+
async handler({ policy_id, format, output_directory }, { client }) {
|
|
18
|
+
let directory;
|
|
19
|
+
try {
|
|
20
|
+
directory = policyDownloadDirectory(output_directory);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return textError('Use an absolute output_directory or a ~/ path. The default is ~/Downloads.');
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const download = await client.downloadPolicy(policy_id, format);
|
|
27
|
+
const path = await savePolicyDownload(download, policy_id, directory);
|
|
28
|
+
const warning = format === 'applocker'
|
|
29
|
+
? ' AppLocker is a blocklist projection; review the projection summary for omitted rules before deployment.' :
|
|
30
|
+
' WDAC XML must be reviewed and compiled using Windows tooling before deployment.';
|
|
31
|
+
return textOk(`Saved ${format === 'wdac' ? 'WDAC XML archive' : 'AppLocker XML'} to ${path} ` +
|
|
32
|
+
`(${download.bytes.length} bytes, ${download.fileCount} XML files). SHA256: ${download.sha256}.` +
|
|
33
|
+
warning + ' Nothing was installed or assigned.', {
|
|
34
|
+
policy_id, format, path, bytes: download.bytes.length, sha256: download.sha256,
|
|
35
|
+
current_version_id: download.versionId, xml_file_count: download.fileCount,
|
|
36
|
+
...(download.projectionSummary ? { projection_summary: download.projectionSummary } : {}),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error instanceof MagicSwordApiError) {
|
|
41
|
+
const help = {
|
|
42
|
+
401: 'Check the API key.', 403: 'Requires policies:read and Enterprise agentless deployment access.',
|
|
43
|
+
404: 'Check the policy ID and organization.', 409: 'The policy changed; retry the download.',
|
|
44
|
+
413: 'The generated artifact exceeds the size limit.', 422: 'The policy has no supported export for this format.',
|
|
45
|
+
503: 'Generation is temporarily unavailable; retry later.',
|
|
46
|
+
};
|
|
47
|
+
return textError(`Policy download failed (HTTP ${error.status}). ${help[error.status] ?? 'Retry later.'}`);
|
|
48
|
+
}
|
|
49
|
+
return textError('Could not download and save the policy. Check the destination directory permissions and available disk space, then retry.');
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=download_policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download_policy.js","sourceRoot":"","sources":["../../src/tools/download_policy.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { createPolicyTool } from './create_policy.js';
|
|
|
9
9
|
import { clonePolicyTool } from './clone_policy.js';
|
|
10
10
|
import { listEndpointGroupsTool } from './list_endpoint_groups.js';
|
|
11
11
|
import { showPolicyTool } from './show_policy.js';
|
|
12
|
+
import { downloadPolicyTool } from './download_policy.js';
|
|
12
13
|
import { managePolicyRulesTool } from './manage_policy_rules.js';
|
|
13
14
|
import { applyPolicyToEndpointsTool } from './apply_policy_to_endpoints.js';
|
|
14
15
|
import { flipToEnforcingTool } from './flip_to_enforcing.js';
|
|
@@ -36,6 +37,7 @@ export const allTools = [
|
|
|
36
37
|
createPolicyTool,
|
|
37
38
|
clonePolicyTool,
|
|
38
39
|
showPolicyTool,
|
|
40
|
+
downloadPolicyTool,
|
|
39
41
|
managePolicyRulesTool,
|
|
40
42
|
applyPolicyToEndpointsTool,
|
|
41
43
|
flipToEnforcingTool,
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
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.7",
|
|
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/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",
|
|
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 scripts/policy-download.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",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@modelcontextprotocol/server": "^2.3.1",
|
|
39
|
+
"fast-xml-parser": "5.12.0",
|
|
39
40
|
"undici": "^7.30.1",
|
|
40
41
|
"zod": "^4.6.7"
|
|
41
42
|
},
|