@kaminari-ad/mcp 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/bin.js +3 -3
- package/dist/{chunk-IG36AHO3.js → chunk-DZ5IF6SC.js} +3 -3
- package/dist/{chunk-IG36AHO3.js.map → chunk-DZ5IF6SC.js.map} +1 -1
- package/dist/{chunk-MIDK3IA2.js → chunk-G5DUWW6D.js} +38 -14
- package/dist/chunk-G5DUWW6D.js.map +1 -0
- package/dist/{http-bootstrap-6L4VQJRM.js → http-bootstrap-AR3RJBCT.js} +4 -4
- package/dist/{http-bootstrap-6L4VQJRM.js.map → http-bootstrap-AR3RJBCT.js.map} +1 -1
- package/dist/{stdio-bootstrap-3IOUWYG3.js → stdio-bootstrap-SD25OPK7.js} +4 -4
- package/dist/{stdio-bootstrap-3IOUWYG3.js.map → stdio-bootstrap-SD25OPK7.js.map} +1 -1
- package/package.json +1 -1
- package/dist/chunk-MIDK3IA2.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.26.0] - 2026-10-06
|
|
11
|
+
|
|
12
|
+
> Requires the API-side bulk parity deploy. Until it lands, the API
|
|
13
|
+
> silently ignores the new `create_bulk_scans` fields. Do not tag this
|
|
14
|
+
> release ahead of the API.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **`create_bulk_scans` takes the same optional fields as `create_scan`.**
|
|
19
|
+
`campaign_id`, `run_id`, `ad_discovery`, `max_discovered_ads` and
|
|
20
|
+
`ad_formats` apply to every country in the batch. With a `campaign_id`,
|
|
21
|
+
bulk scans can raise alerts.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **`campaign_id` explains that alerts depend on it**, on both scan tools.
|
|
26
|
+
The three shared fields now live in one module, so the two tools'
|
|
27
|
+
descriptions cannot drift. Request schemas are regenerated from the API,
|
|
28
|
+
and country codes are documented as case-insensitive.
|
|
29
|
+
|
|
10
30
|
## [0.25.0] - 2026-10-04
|
|
11
31
|
|
|
12
32
|
> Requires the API-side batch rule test deploy. Until it lands, the tool
|
package/dist/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { NAME, VERSION, err, ok } from './chunk-
|
|
2
|
+
import { NAME, VERSION, err, ok } from './chunk-DZ5IF6SC.js';
|
|
3
3
|
import process from 'process';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
|
|
@@ -162,10 +162,10 @@ async function main() {
|
|
|
162
162
|
}
|
|
163
163
|
const config = configResult.value;
|
|
164
164
|
if (config.transport === "stdio") {
|
|
165
|
-
const { bootstrapStdio } = await import('./stdio-bootstrap-
|
|
165
|
+
const { bootstrapStdio } = await import('./stdio-bootstrap-SD25OPK7.js');
|
|
166
166
|
return bootstrapStdio(config);
|
|
167
167
|
}
|
|
168
|
-
const { bootstrapHttp } = await import('./http-bootstrap-
|
|
168
|
+
const { bootstrapHttp } = await import('./http-bootstrap-AR3RJBCT.js');
|
|
169
169
|
return bootstrapHttp(config);
|
|
170
170
|
}
|
|
171
171
|
main().then(
|
|
@@ -3,8 +3,8 @@ export { err, ok } from 'neverthrow';
|
|
|
3
3
|
|
|
4
4
|
// src/shared/version.ts
|
|
5
5
|
var NAME = "@kaminari-ad/mcp";
|
|
6
|
-
var VERSION = "0.
|
|
6
|
+
var VERSION = "0.26.0";
|
|
7
7
|
|
|
8
8
|
export { NAME, VERSION };
|
|
9
|
-
//# sourceMappingURL=chunk-
|
|
10
|
-
//# sourceMappingURL=chunk-
|
|
9
|
+
//# sourceMappingURL=chunk-DZ5IF6SC.js.map
|
|
10
|
+
//# sourceMappingURL=chunk-DZ5IF6SC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/version.ts"],"names":[],"mappings":";;;;AASO,IAAM,IAAA,GAAO;AACb,IAAM,OAAA,GAAU","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/shared/version.ts"],"names":[],"mappings":";;;;AASO,IAAM,IAAA,GAAO;AACb,IAAM,OAAA,GAAU","file":"chunk-DZ5IF6SC.js","sourcesContent":["/**\n * Package version and name. Hard-coded as constants here, asserted to\n * match `package.json` by a unit test.\n *\n * Why not import `package.json`: it would force JSON-module support at\n * runtime and tsup-bundling would inline the entire manifest. Two\n * constants + one assertion test is simpler and gives the same safety.\n */\n\nexport const NAME = \"@kaminari-ad/mcp\";\nexport const VERSION = \"0.26.0\";\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { err, ok } from './chunk-
|
|
2
|
+
import { err, ok } from './chunk-DZ5IF6SC.js';
|
|
3
3
|
import { createHash, randomUUID } from 'crypto';
|
|
4
4
|
import createClient from 'openapi-fetch';
|
|
5
5
|
import { fetch } from 'undici';
|
|
@@ -262,7 +262,6 @@ z.object({
|
|
|
262
262
|
vast_tag: z.union([z.string(), z.null()]).optional(),
|
|
263
263
|
referrer: z.union([z.string(), z.null()]).optional(),
|
|
264
264
|
ignore_first_n_domains: z.number().int().gte(0).lte(5).optional().default(0),
|
|
265
|
-
country_code: z.string().min(2).max(2),
|
|
266
265
|
emulator_id: z.string().min(1).max(100),
|
|
267
266
|
proxy: ProxyTargetRequest.optional(),
|
|
268
267
|
labels: z.record(z.string()).optional(),
|
|
@@ -273,7 +272,8 @@ z.object({
|
|
|
273
272
|
ad_formats: z.union([z.array(AdKind), z.null()]).optional(),
|
|
274
273
|
repeat_count: z.number().int().gte(1).optional().default(1),
|
|
275
274
|
repeat_mode: RepeatModeType.optional(),
|
|
276
|
-
retry_max_attempts: z.number().int().gte(0).optional().default(0)
|
|
275
|
+
retry_max_attempts: z.number().int().gte(0).optional().default(0),
|
|
276
|
+
country_code: z.string().min(2).max(2)
|
|
277
277
|
}).passthrough();
|
|
278
278
|
var ScanStatus = z.enum([
|
|
279
279
|
"pending",
|
|
@@ -461,13 +461,18 @@ z.object({
|
|
|
461
461
|
vast_tag: z.union([z.string(), z.null()]).optional(),
|
|
462
462
|
referrer: z.union([z.string(), z.null()]).optional(),
|
|
463
463
|
ignore_first_n_domains: z.number().int().gte(0).lte(5).optional().default(0),
|
|
464
|
-
country_codes: z.array(z.string()).min(1),
|
|
465
464
|
emulator_id: z.string().min(1).max(100),
|
|
466
465
|
proxy: ProxyTargetRequest.optional(),
|
|
467
466
|
labels: z.record(z.string()).optional(),
|
|
467
|
+
campaign_id: z.union([z.string(), z.null()]).optional(),
|
|
468
|
+
run_id: z.union([z.string(), z.null()]).optional(),
|
|
469
|
+
ad_discovery: z.boolean().optional().default(false),
|
|
470
|
+
max_discovered_ads: z.union([z.number(), z.null()]).optional(),
|
|
471
|
+
ad_formats: z.union([z.array(AdKind), z.null()]).optional(),
|
|
468
472
|
repeat_count: z.number().int().gte(1).optional().default(1),
|
|
469
473
|
repeat_mode: RepeatModeType.optional(),
|
|
470
|
-
retry_max_attempts: z.number().int().gte(0).optional().default(0)
|
|
474
|
+
retry_max_attempts: z.number().int().gte(0).optional().default(0),
|
|
475
|
+
country_codes: z.array(z.string().min(2).max(2)).min(1)
|
|
471
476
|
}).passthrough();
|
|
472
477
|
z.object({
|
|
473
478
|
scope_type: z.enum(["last_n", "hours"]),
|
|
@@ -5477,6 +5482,15 @@ var cancelScanTool = {
|
|
|
5477
5482
|
return ok(result.value);
|
|
5478
5483
|
}
|
|
5479
5484
|
};
|
|
5485
|
+
var scanCampaignIdField = z.string().uuid().optional().describe(
|
|
5486
|
+
"Optional campaign UUID to attribute the scan to. Required for alerts: policies are attached to campaigns, so a scan without a campaign is checked and tagged but never raises an alert."
|
|
5487
|
+
);
|
|
5488
|
+
var scanRunIdField = z.string().uuid().optional().describe(
|
|
5489
|
+
"Optional run UUID inside the campaign. Omit it to join the campaign's API run for the day."
|
|
5490
|
+
);
|
|
5491
|
+
var scanAdDiscoveryField = z.boolean().optional().describe(
|
|
5492
|
+
"Publisher ad discovery: detect ad blocks on the page and spawn one child scan per detected ad (banner/video/pop). Only valid with `url`. Each child is a separate billed scan; list them with `list_scan_children`."
|
|
5493
|
+
);
|
|
5480
5494
|
var scanProxyField = z.object({
|
|
5481
5495
|
proxy_type: z.enum(["residential", "mobile"]).optional().describe(
|
|
5482
5496
|
"Proxy network type. Default: residential. Residential and mobile are separate pools with separate catalogues, so pass the same value to `get_proxy_targeting` that you send here."
|
|
@@ -5508,15 +5522,22 @@ var CreateBulkScansInputShape = {
|
|
|
5508
5522
|
),
|
|
5509
5523
|
referrer: scanReferrerField,
|
|
5510
5524
|
ignore_first_n_domains: ignoreFirstNDomainsScanField,
|
|
5511
|
-
country_codes: z.array(z.string().length(2)).min(1).max(50).describe(
|
|
5525
|
+
country_codes: z.array(z.string().length(2)).min(1).max(50).describe(
|
|
5526
|
+
"List of ISO 3166-1 alpha-2 country codes, any case; one scan per country is created."
|
|
5527
|
+
),
|
|
5512
5528
|
emulator_id: z.string().min(1).max(100).describe("Device/OS profile slug; same for every country in the batch."),
|
|
5513
5529
|
proxy: scanProxyField,
|
|
5514
5530
|
labels: z.record(z.string()).optional().describe("Arbitrary metadata copied onto every created scan."),
|
|
5531
|
+
campaign_id: scanCampaignIdField,
|
|
5532
|
+
run_id: scanRunIdField,
|
|
5533
|
+
ad_discovery: scanAdDiscoveryField,
|
|
5534
|
+
max_discovered_ads: maxDiscoveredAdsField,
|
|
5535
|
+
ad_formats: adFormatsField,
|
|
5515
5536
|
...repeatRetryFields
|
|
5516
5537
|
};
|
|
5517
5538
|
var createBulkScansTool = {
|
|
5518
5539
|
name: "create_bulk_scans",
|
|
5519
|
-
description: "Queue one new scan per country in a single call (e.g. test the same URL, ad-tag, or VAST video tag from US + DE + JP). COSTS N CREDITS where N = number of countries times `repeat_count`. Returns one entry per country; each entry's `repeat_scan_ids` lists that country's extra repeats.",
|
|
5540
|
+
description: "Queue one new scan per country in a single call (e.g. test the same URL, ad-tag, or VAST video tag from US + DE + JP). Every other field applies to each country, `campaign_id` included. COSTS N CREDITS where N = number of countries times `repeat_count`. Returns one entry per country; each entry's `repeat_scan_ids` lists that country's extra repeats.",
|
|
5520
5541
|
annotations: {
|
|
5521
5542
|
title: "Create Bulk Scans",
|
|
5522
5543
|
readOnlyHint: false,
|
|
@@ -5536,6 +5557,11 @@ var createBulkScansTool = {
|
|
|
5536
5557
|
...input.ignore_first_n_domains !== void 0 ? { ignore_first_n_domains: input.ignore_first_n_domains } : {},
|
|
5537
5558
|
...input.proxy !== void 0 ? { proxy: input.proxy } : {},
|
|
5538
5559
|
...input.labels !== void 0 ? { labels: input.labels } : {},
|
|
5560
|
+
...input.campaign_id !== void 0 ? { campaign_id: input.campaign_id } : {},
|
|
5561
|
+
...input.run_id !== void 0 ? { run_id: input.run_id } : {},
|
|
5562
|
+
...input.ad_discovery !== void 0 ? { ad_discovery: input.ad_discovery } : {},
|
|
5563
|
+
...input.max_discovered_ads !== void 0 ? { max_discovered_ads: input.max_discovered_ads } : {},
|
|
5564
|
+
...input.ad_formats !== void 0 ? { ad_formats: input.ad_formats } : {},
|
|
5539
5565
|
...pickRepeatRetryBody(input)
|
|
5540
5566
|
};
|
|
5541
5567
|
const result = await ctx.api.createBulkScans(body);
|
|
@@ -5559,11 +5585,9 @@ var CreateScanInputShape = {
|
|
|
5559
5585
|
emulator_id: z.string().min(1).max(100).describe("Device/OS profile slug; use `list_emulators` to discover valid values."),
|
|
5560
5586
|
proxy: scanProxyField,
|
|
5561
5587
|
labels: z.record(z.string()).optional().describe("Arbitrary string -> string metadata attached to the scan."),
|
|
5562
|
-
campaign_id:
|
|
5563
|
-
run_id:
|
|
5564
|
-
ad_discovery:
|
|
5565
|
-
"Publisher ad discovery: detect ad blocks on the page and spawn one child scan per detected ad (banner/video/pop). Only valid with `url`. Each child is a separate billed scan; list them with `list_scan_children`."
|
|
5566
|
-
),
|
|
5588
|
+
campaign_id: scanCampaignIdField,
|
|
5589
|
+
run_id: scanRunIdField,
|
|
5590
|
+
ad_discovery: scanAdDiscoveryField,
|
|
5567
5591
|
max_discovered_ads: maxDiscoveredAdsField,
|
|
5568
5592
|
ad_formats: adFormatsField,
|
|
5569
5593
|
...repeatRetryFields
|
|
@@ -6484,5 +6508,5 @@ function formatToolError(error) {
|
|
|
6484
6508
|
}
|
|
6485
6509
|
|
|
6486
6510
|
export { BearerToken, SERVER_INSTRUCTIONS, createHttpApiGateway, createPinoLogger, declareEmptyResourcesAndPrompts, newRequestId, wireToolsIntoMcpServer };
|
|
6487
|
-
//# sourceMappingURL=chunk-
|
|
6488
|
-
//# sourceMappingURL=chunk-
|
|
6511
|
+
//# sourceMappingURL=chunk-G5DUWW6D.js.map
|
|
6512
|
+
//# sourceMappingURL=chunk-G5DUWW6D.js.map
|