@carrierllc/mcp 0.13.30 → 0.13.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,6 +29,41 @@ carrier exec -- bash # real child terminal with CARRIER_API_KEY in its en
29
29
  **Entry A:** register `https://mcp.carrier.llc/mcp` with no token. The first tool
30
30
  call in Claude/Cursor opens Clerk OAuth (Google / GitHub / email).
31
31
 
32
+ ### Natural-language answers
33
+
34
+ `carrier ask "how many subscribers are there?"` and the interactive home's
35
+ **Ask the fleet** action present executed tool results as readable answers.
36
+ Known OCS list summaries use the server's authoritative `summary.total`, not a
37
+ recount of the displayed rows. That number describes the result/page, not
38
+ necessarily the entire fleet; paging, missing rows and shortened display are
39
+ reported explicitly. Nested subscriber status and SIM inventory status remain
40
+ separate. A server facet that could not read nested status is not a claim that
41
+ subscriber status is missing.
42
+
43
+ This is deterministic presentation, not another AI/model call. The original
44
+ question distinguishes counts from requested lists/status/details. Unsupported
45
+ predictions and judgements receive an explicit limitation rather than unrelated
46
+ records. Current subscriber status uses the shared OCS open-period normalizer,
47
+ with its maintained closed-history fallback; SIM inventory remains separate.
48
+
49
+ Default JSON presentation uses typed scalar allowlists and explicit shallow
50
+ account/result wrappers. Unknown fields, nested shapes, and wrong field types
51
+ are omitted with a safe limitation; they are never recursively dumped. Safe
52
+ ordinary scalar facts remain readable. Empty or unsupported summary facets are
53
+ omitted. Plain-text tool answers are passed through, shortened only at whole
54
+ sentence/row boundaries; this is not a general redaction guarantee for arbitrary
55
+ prose. Oversized indivisible rows are omitted entirely with the raw-output hint.
56
+
57
+ ```bash
58
+ carrier ask "how many subscribers are there?" --json
59
+ ```
60
+
61
+ `--json` is explicit raw access: complete JSON stdout, no banner/spinner; plain
62
+ text is encoded as a JSON string. Raw output may contain sensitive data. Failures
63
+ remain nonzero with errors on stderr. The MCP machine contract and domain
64
+ commands are unchanged. Ambiguous intents and confirmation-required mutations
65
+ still do not execute a resolved tool.
66
+
32
67
  ### OAuth and terminal handoff
33
68
 
34
69
  Carrier commands, status and Ask the Fleet share credential resolution. Explicit
@@ -1855,7 +1855,7 @@ function storefrontScreen(input) {
1855
1855
  // package.json
1856
1856
  var package_default = {
1857
1857
  name: "@carrierllc/mcp",
1858
- version: "0.13.30",
1858
+ version: "0.13.31",
1859
1859
  description: "Carrier MCP \u2014 natural-language control of MVNO/eSIM fleets via eSIMVault OCS. Stdio mode for direct integration with Claude Desktop, Cursor, Windsurf, and MCP-compatible clients. Ships the `carrier` CLI (plugin install + white-label eSIM storefront scaffold).",
1860
1860
  license: "MIT",
1861
1861
  author: "Carrier (Lifecycle Innovations Limited)",
@@ -4352,6 +4352,32 @@ function ocsArray(data, keys) {
4352
4352
  }
4353
4353
  return [];
4354
4354
  }
4355
+ function subscriberIccid(row) {
4356
+ if (row === null || typeof row !== "object") return "";
4357
+ const r = row;
4358
+ const imsiList = r.imsiList;
4359
+ if (Array.isArray(imsiList)) {
4360
+ for (const entry of imsiList) {
4361
+ if (entry && typeof entry === "object") {
4362
+ const v = entry.iccid;
4363
+ if (typeof v === "string" && v.length > 0) return v;
4364
+ if (typeof v === "number") return String(v);
4365
+ }
4366
+ }
4367
+ }
4368
+ for (const key of ["iccid", "ICCID"]) {
4369
+ const v = r[key];
4370
+ if (typeof v === "string" && v.length > 0) return v;
4371
+ if (typeof v === "number") return String(v);
4372
+ }
4373
+ const sim = r.sim;
4374
+ if (sim && typeof sim === "object") {
4375
+ const v = sim.iccid;
4376
+ if (typeof v === "string" && v.length > 0) return v;
4377
+ if (typeof v === "number") return String(v);
4378
+ }
4379
+ return "";
4380
+ }
4355
4381
  var FACET_TALLY_MAX = 25;
4356
4382
  var OCS_LIST_FACETS = {
4357
4383
  templates: [
@@ -5426,6 +5452,8 @@ export {
5426
5452
  recordToolDescription,
5427
5453
  buildRouterCatalog,
5428
5454
  ROUTER_RULES,
5455
+ OCS_LIST_KEYS,
5456
+ subscriberIccid,
5429
5457
  withOcsListSummary,
5430
5458
  extractDailyUsage,
5431
5459
  daysUntil,
@@ -5491,4 +5519,4 @@ export {
5491
5519
  package_default,
5492
5520
  CARRIER_VERSION
5493
5521
  };
5494
- //# sourceMappingURL=chunk-ZJY7H2QW.js.map
5522
+ //# sourceMappingURL=chunk-EHJEAI4V.js.map