@butlr/butlr-mcp-server 0.1.2 → 0.4.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.
Files changed (74) hide show
  1. package/README.md +27 -1
  2. package/dist/cache/topology-cache.d.ts +18 -3
  3. package/dist/cache/topology-cache.d.ts.map +1 -1
  4. package/dist/cache/topology-cache.js +19 -3
  5. package/dist/cache/topology-cache.js.map +1 -1
  6. package/dist/clients/queries/tags.d.ts +96 -0
  7. package/dist/clients/queries/tags.d.ts.map +1 -0
  8. package/dist/clients/queries/tags.js +64 -0
  9. package/dist/clients/queries/tags.js.map +1 -0
  10. package/dist/clients/types.d.ts +6 -2
  11. package/dist/clients/types.d.ts.map +1 -1
  12. package/dist/errors/mcp-errors.d.ts +34 -0
  13. package/dist/errors/mcp-errors.d.ts.map +1 -1
  14. package/dist/errors/mcp-errors.js +71 -5
  15. package/dist/errors/mcp-errors.js.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/tools/butlr-available-rooms.d.ts +10 -4
  19. package/dist/tools/butlr-available-rooms.d.ts.map +1 -1
  20. package/dist/tools/butlr-available-rooms.js +177 -45
  21. package/dist/tools/butlr-available-rooms.js.map +1 -1
  22. package/dist/tools/butlr-fetch-entity-details.d.ts.map +1 -1
  23. package/dist/tools/butlr-fetch-entity-details.js +7 -1
  24. package/dist/tools/butlr-fetch-entity-details.js.map +1 -1
  25. package/dist/tools/butlr-get-asset-details.d.ts.map +1 -1
  26. package/dist/tools/butlr-get-asset-details.js +29 -4
  27. package/dist/tools/butlr-get-asset-details.js.map +1 -1
  28. package/dist/tools/butlr-get-current-occupancy.d.ts.map +1 -1
  29. package/dist/tools/butlr-get-current-occupancy.js +27 -6
  30. package/dist/tools/butlr-get-current-occupancy.js.map +1 -1
  31. package/dist/tools/butlr-get-occupancy-timeseries.d.ts.map +1 -1
  32. package/dist/tools/butlr-get-occupancy-timeseries.js +32 -11
  33. package/dist/tools/butlr-get-occupancy-timeseries.js.map +1 -1
  34. package/dist/tools/butlr-list-tags.d.ts +50 -0
  35. package/dist/tools/butlr-list-tags.d.ts.map +1 -0
  36. package/dist/tools/butlr-list-tags.js +165 -0
  37. package/dist/tools/butlr-list-tags.js.map +1 -0
  38. package/dist/tools/butlr-list-topology.d.ts +7 -1
  39. package/dist/tools/butlr-list-topology.d.ts.map +1 -1
  40. package/dist/tools/butlr-list-topology.js +845 -35
  41. package/dist/tools/butlr-list-topology.js.map +1 -1
  42. package/dist/tools/butlr-search-assets.d.ts.map +1 -1
  43. package/dist/tools/butlr-search-assets.js +7 -1
  44. package/dist/tools/butlr-search-assets.js.map +1 -1
  45. package/dist/tools/butlr-space-busyness.d.ts.map +1 -1
  46. package/dist/tools/butlr-space-busyness.js +30 -5
  47. package/dist/tools/butlr-space-busyness.js.map +1 -1
  48. package/dist/tools/butlr-traffic-flow.d.ts.map +1 -1
  49. package/dist/tools/butlr-traffic-flow.js +14 -9
  50. package/dist/tools/butlr-traffic-flow.js.map +1 -1
  51. package/dist/types/responses.d.ts +126 -4
  52. package/dist/types/responses.d.ts.map +1 -1
  53. package/dist/utils/asset-flattener.js +2 -2
  54. package/dist/utils/asset-flattener.js.map +1 -1
  55. package/dist/utils/field-validator.d.ts.map +1 -1
  56. package/dist/utils/field-validator.js +3 -0
  57. package/dist/utils/field-validator.js.map +1 -1
  58. package/dist/utils/graphql-helpers.d.ts +13 -0
  59. package/dist/utils/graphql-helpers.d.ts.map +1 -1
  60. package/dist/utils/graphql-helpers.js +25 -0
  61. package/dist/utils/graphql-helpers.js.map +1 -1
  62. package/dist/utils/occupancy-helpers.d.ts +2 -0
  63. package/dist/utils/occupancy-helpers.d.ts.map +1 -1
  64. package/dist/utils/occupancy-helpers.js +26 -9
  65. package/dist/utils/occupancy-helpers.js.map +1 -1
  66. package/dist/utils/tag-resolver.d.ts +99 -0
  67. package/dist/utils/tag-resolver.d.ts.map +1 -0
  68. package/dist/utils/tag-resolver.js +108 -0
  69. package/dist/utils/tag-resolver.js.map +1 -0
  70. package/dist/utils/timezone-helpers.d.ts +8 -3
  71. package/dist/utils/timezone-helpers.d.ts.map +1 -1
  72. package/dist/utils/timezone-helpers.js +22 -14
  73. package/dist/utils/timezone-helpers.js.map +1 -1
  74. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"butlr-get-asset-details.js","sourceRoot":"","sources":["../../src/tools/butlr-get-asset-details.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"butlr-get-asset-details.js","sourceRoot":"","sources":["../../src/tools/butlr-get-asset-details.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"butlr-get-current-occupancy.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-get-current-occupancy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,uBAAuB,CAAC;AAiB/B,eAAO,MAAM,6BAA6B;;;;;;EAAmD,CAAC;AAE9F,iDAAiD;AACjD,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAErF;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,wBAAwB,CAAC,CAyGnC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBnE"}
1
+ {"version":3,"file":"butlr-get-current-occupancy.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-get-current-occupancy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,uBAAuB,CAAC;AAiB/B,eAAO,MAAM,6BAA6B;;;;;;EAAmD,CAAC;AAE9F,iDAAiD;AACjD,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAErF;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,wBAAwB,CAAC,CA8HnC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBnE"}
@@ -1,4 +1,4 @@
1
- import { ReportingRequestBuilder } from "../clients/reporting-client.js";
1
+ import { ReportingRequestBuilder, ApiError } from "../clients/reporting-client.js";
2
2
  import { z } from "zod";
3
3
  import { fetchTopologyAndSensors, resolveAssetContext, getPresenceMeasurement, getTrafficMeasurement, getPresenceCoverageNote, getTrafficCoverageNote, buildRecommendation, } from "../utils/occupancy-helpers.js";
4
4
  import { debug } from "../utils/debug.js";
@@ -25,18 +25,24 @@ export async function executeGetCurrentOccupancy(args) {
25
25
  const ctx = await fetchTopologyAndSensors();
26
26
  // Process each asset
27
27
  const assets = [];
28
+ let hasAnyFallback = false;
28
29
  const now = new Date();
29
30
  const fiveMinAgo = new Date(now.getTime() - 5 * 60 * 1000);
30
31
  for (const assetId of args.asset_ids) {
31
32
  const asset = resolveAssetContext(assetId, ctx);
32
33
  // ---- Presence ----
34
+ // Zones have no client-visible sensor attribution (see occupancy-helpers
35
+ // `resolveAssetContext`), but the server computes `zone_occupancy`
36
+ // independently. Always query for zones; gate on sensor count for
37
+ // rooms/floors where 0 sensors really does mean "no data possible".
38
+ const shouldQueryPresence = asset.assetType === "zone" || asset.presenceSensors.length > 0;
33
39
  const presenceData = {
34
- available: asset.presenceSensors.length > 0,
40
+ available: shouldQueryPresence,
35
41
  sensor_count: asset.presenceSensors.length,
36
42
  coverage_note: getPresenceCoverageNote(asset.assetType, asset.presenceSensors.length),
37
43
  };
38
44
  let presenceHasData = false;
39
- if (asset.presenceSensors.length > 0) {
45
+ if (shouldQueryPresence) {
40
46
  const measurement = getPresenceMeasurement(asset.assetType);
41
47
  try {
42
48
  const response = await new ReportingRequestBuilder()
@@ -54,6 +60,9 @@ export async function executeGetCurrentOccupancy(args) {
54
60
  }
55
61
  catch (error) {
56
62
  debug("current-occupancy", "Presence query failed:", error);
63
+ if (error instanceof ApiError && error.statusCode >= 400) {
64
+ throw error;
65
+ }
57
66
  presenceData.warning =
58
67
  "Failed to retrieve current presence data. Occupancy value may be missing.";
59
68
  }
@@ -84,13 +93,16 @@ export async function executeGetCurrentOccupancy(args) {
84
93
  }
85
94
  catch (error) {
86
95
  debug("current-occupancy", "Traffic query failed:", error);
96
+ if (error instanceof ApiError && error.statusCode >= 400) {
97
+ throw error;
98
+ }
87
99
  trafficData.warning =
88
100
  "Failed to retrieve current traffic data. Occupancy value may be missing.";
89
101
  }
90
102
  }
91
103
  // ---- Recommendation (checks data success, not just sensor availability) ----
92
104
  const recommendation = buildRecommendation(presenceData, trafficData, presenceHasData, trafficHasData);
93
- assets.push({
105
+ const assetEntry = {
94
106
  asset_id: assetId,
95
107
  asset_type: asset.assetType,
96
108
  asset_name: asset.assetName,
@@ -98,12 +110,21 @@ export async function executeGetCurrentOccupancy(args) {
98
110
  presence: presenceData,
99
111
  traffic: trafficData,
100
112
  ...recommendation,
101
- });
113
+ };
114
+ if (asset.timezoneWarning) {
115
+ assetEntry.timezone_warning = asset.timezoneWarning;
116
+ }
117
+ if (asset.timezoneFallback) {
118
+ hasAnyFallback = true;
119
+ }
120
+ assets.push(assetEntry);
102
121
  }
103
122
  return {
104
123
  assets,
105
124
  timestamp: now.toISOString(),
106
- timezone_note: "All timestamps are UTC (ISO-8601). Use site_timezone for local conversion.",
125
+ timezone_note: hasAnyFallback
126
+ ? "All timestamps are UTC (ISO-8601). WARNING: One or more assets have no site timezone configured — UTC was used as fallback. Local time conversions may not reflect the site's actual local time."
127
+ : "All timestamps are UTC (ISO-8601). Use site_timezone for local conversion.",
107
128
  };
108
129
  }
109
130
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"butlr-get-current-occupancy.js","sourceRoot":"","sources":["../../src/tools/butlr-get-current-occupancy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,MAAM,iCAAiC,GACrC,2IAA2I;IAC3I,iHAAiH;IACjH,mEAAmE;IACnE,oBAAoB;IACpB,qGAAqG;IACrG,gHAAgH;IAChH,gEAAgE;IAChE,qEAAqE,CAAC;AAExE,gFAAgF;AAChF,MAAM,6BAA6B,GAAG;IACpC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CACnF,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,MAAM,EAAE,CAAC;AAK9F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAA6B;IAE7B,KAAK,CAAC,6BAA6B,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC;IAEjF,iDAAiD;IACjD,MAAM,GAAG,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAE5C,qBAAqB;IACrB,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE3D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEhD,qBAAqB;QACrB,MAAM,YAAY,GAA2B;YAC3C,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAC3C,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM;YAC1C,aAAa,EAAE,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC;SACtF,CAAC;QAEF,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAE5D,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,uBAAuB,EAAE;qBACjD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;qBAClC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC;qBAC3B,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;qBACtD,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;qBACtB,OAAO,EAAE,CAAC;gBAEb,IAAI,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACvD,YAAY,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC9C,YAAY,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC7D,eAAe,GAAG,IAAI,CAAC;gBACzB,CAAC;YACH,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,KAAK,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBAC5D,YAAY,CAAC,OAAO;oBAClB,2EAA2E,CAAC;YAChF,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAA2B;YAC1C,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YAC1C,qBAAqB,EAAE,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC5F,YAAY,EAAE,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAClF,aAAa,EAAE,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;SACpF,CAAC;QAEF,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,SAA6B,CAAC,CAAC;YAE/E,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,uBAAuB,EAAE;qBACjD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;qBAClC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC;qBAC3B,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;qBACtD,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;qBACtB,OAAO,EAAE,CAAC;gBAEb,IAAI,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACvD,WAAW,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC7C,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC5D,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,KAAK,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC3D,WAAW,CAAC,OAAO;oBACjB,0EAA0E,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,+EAA+E;QAC/E,MAAM,cAAc,GAAG,mBAAmB,CACxC,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,GAAG,KAAK,CAAC,UAAU;YACnB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,WAAW;YACpB,GAAG,cAAc;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM;QACN,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;QAC5B,aAAa,EAAE,4EAA4E;KAC5F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,6BAA6B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"butlr-get-current-occupancy.js","sourceRoot":"","sources":["../../src/tools/butlr-get-current-occupancy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"butlr-get-occupancy-timeseries.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-get-occupancy-timeseries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,OAAO,KAAK,EACV,2BAA2B,EAI5B,MAAM,uBAAuB,CAAC;AAyB/B,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;EAAsD,CAAC;AAEpG,sDAAsD;AACtD,KAAK,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAgCpF;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,2BAA2B,CAAC,CAsGtC;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBtE"}
1
+ {"version":3,"file":"butlr-get-occupancy-timeseries.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-get-occupancy-timeseries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,OAAO,KAAK,EACV,2BAA2B,EAI5B,MAAM,uBAAuB,CAAC;AAyB/B,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;EAAsD,CAAC;AAEpG,sDAAsD;AACtD,KAAK,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAiCpF;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,2BAA2B,CAAC,CA4HtC;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBtE"}
@@ -1,4 +1,4 @@
1
- import { ReportingRequestBuilder } from "../clients/reporting-client.js";
1
+ import { ReportingRequestBuilder, ApiError } from "../clients/reporting-client.js";
2
2
  import { z } from "zod";
3
3
  import { validateTimeRange } from "../utils/time-range-validator.js";
4
4
  import { fetchTopologyAndSensors, resolveAssetContext, getPresenceMeasurement, getTrafficMeasurement, getPresenceCoverageNote, getTrafficCoverageNote, buildRecommendation, } from "../utils/occupancy-helpers.js";
@@ -26,12 +26,12 @@ export const GetOccupancyTimeseriesArgsSchema = z.object(getOccupancyTimeseriesI
26
26
  * Query a single measurement type and map to TimeseriesPoint[].
27
27
  * Returns the array on success, or undefined on failure (with warning set on data).
28
28
  */
29
- async function queryTimeseries(assetType, assetId, measurement, start, stop, interval) {
29
+ async function queryTimeseries(assetType, assetId, measurement, start, stop, interval, timezone) {
30
30
  const response = await new ReportingRequestBuilder()
31
31
  .assets(assetType, [assetId])
32
32
  .measurements([measurement])
33
33
  .timeRange(start, stop)
34
- .window(interval, "median")
34
+ .window(interval, "median", timezone)
35
35
  .execute();
36
36
  if (response.data && Array.isArray(response.data)) {
37
37
  return response.data.map((d) => ({
@@ -52,25 +52,34 @@ export async function executeGetOccupancyTimeseries(args) {
52
52
  const ctx = await fetchTopologyAndSensors();
53
53
  // Process each asset
54
54
  const assets = [];
55
+ let hasAnyFallback = false;
55
56
  for (const assetId of args.asset_ids) {
56
57
  const asset = resolveAssetContext(assetId, ctx);
57
- // Build presence measurement data
58
+ // Build presence measurement data. Zones have no client-visible sensor
59
+ // attribution (see occupancy-helpers `resolveAssetContext`), but the
60
+ // server computes `zone_occupancy` independently. Always query for
61
+ // zones; gate on sensor count for rooms/floors where 0 sensors really
62
+ // does mean "no data possible".
63
+ const shouldQueryPresence = asset.assetType === "zone" || asset.presenceSensors.length > 0;
58
64
  const presenceData = {
59
- available: asset.presenceSensors.length > 0,
65
+ available: shouldQueryPresence,
60
66
  sensor_count: asset.presenceSensors.length,
61
67
  coverage_note: getPresenceCoverageNote(asset.assetType, asset.presenceSensors.length),
62
68
  timeseries: [],
63
69
  };
64
- if (asset.presenceSensors.length > 0) {
70
+ if (shouldQueryPresence) {
65
71
  const measurement = getPresenceMeasurement(asset.assetType);
66
72
  try {
67
- const points = await queryTimeseries(asset.assetType, assetId, measurement, args.start, args.stop, args.interval);
73
+ const points = await queryTimeseries(asset.assetType, assetId, measurement, args.start, args.stop, args.interval, asset.timezone);
68
74
  if (points) {
69
75
  presenceData.timeseries = points;
70
76
  }
71
77
  }
72
78
  catch (error) {
73
79
  debug("occupancy-timeseries", "Presence query failed:", error);
80
+ if (error instanceof ApiError && error.statusCode >= 400) {
81
+ throw error;
82
+ }
74
83
  presenceData.warning =
75
84
  "Failed to retrieve presence timeseries data. Results may be incomplete.";
76
85
  }
@@ -86,20 +95,23 @@ export async function executeGetOccupancyTimeseries(args) {
86
95
  if (asset.trafficSensors.length > 0 && asset.assetType !== "zone") {
87
96
  const measurement = getTrafficMeasurement(asset.assetType);
88
97
  try {
89
- const points = await queryTimeseries(asset.assetType, assetId, measurement, args.start, args.stop, args.interval);
98
+ const points = await queryTimeseries(asset.assetType, assetId, measurement, args.start, args.stop, args.interval, asset.timezone);
90
99
  if (points) {
91
100
  trafficData.timeseries = points;
92
101
  }
93
102
  }
94
103
  catch (error) {
95
104
  debug("occupancy-timeseries", "Traffic query failed:", error);
105
+ if (error instanceof ApiError && error.statusCode >= 400) {
106
+ throw error;
107
+ }
96
108
  trafficData.warning =
97
109
  "Failed to retrieve traffic timeseries data. Results may be incomplete.";
98
110
  }
99
111
  }
100
112
  // Recommendation checks data success, not just sensor count
101
113
  const recommendation = buildRecommendation(presenceData, trafficData, presenceData.timeseries.length > 0, trafficData.timeseries.length > 0);
102
- assets.push({
114
+ const assetEntry = {
103
115
  asset_id: assetId,
104
116
  asset_type: asset.assetType,
105
117
  asset_name: asset.assetName,
@@ -107,14 +119,23 @@ export async function executeGetOccupancyTimeseries(args) {
107
119
  presence: presenceData,
108
120
  traffic: trafficData,
109
121
  ...recommendation,
110
- });
122
+ };
123
+ if (asset.timezoneWarning) {
124
+ assetEntry.timezone_warning = asset.timezoneWarning;
125
+ }
126
+ if (asset.timezoneFallback) {
127
+ hasAnyFallback = true;
128
+ }
129
+ assets.push(assetEntry);
111
130
  }
112
131
  return {
113
132
  assets,
114
133
  interval: args.interval,
115
134
  start: args.start,
116
135
  stop: args.stop,
117
- timezone_note: "All timestamps are UTC (ISO-8601). Use site_timezone for each asset to convert to local time.",
136
+ timezone_note: hasAnyFallback
137
+ ? "All timestamps are UTC (ISO-8601). WARNING: One or more assets have no site timezone configured — UTC was used as fallback. Window aggregation boundaries and local time conversions may not reflect the site's actual local time."
138
+ : "All timestamps are UTC (ISO-8601). Use site_timezone for each asset to convert to local time.",
118
139
  timestamp: new Date().toISOString(),
119
140
  };
120
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"butlr-get-occupancy-timeseries.js","sourceRoot":"","sources":["../../src/tools/butlr-get-occupancy-timeseries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"butlr-get-occupancy-timeseries.js","sourceRoot":"","sources":["../../src/tools/butlr-get-occupancy-timeseries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { type TaggedEntityRef } from "../clients/queries/tags.js";
4
+ export declare const ListTagsArgsSchema: z.ZodObject<{
5
+ name_contains: z.ZodOptional<z.ZodString>;
6
+ min_usage: z.ZodOptional<z.ZodNumber>;
7
+ include_entities: z.ZodDefault<z.ZodBoolean>;
8
+ }, "strict", z.ZodTypeAny, {
9
+ include_entities: boolean;
10
+ name_contains?: string | undefined;
11
+ min_usage?: number | undefined;
12
+ }, {
13
+ name_contains?: string | undefined;
14
+ min_usage?: number | undefined;
15
+ include_entities?: boolean | undefined;
16
+ }>;
17
+ export type ListTagsArgs = z.output<typeof ListTagsArgsSchema>;
18
+ export interface TagFootprint {
19
+ readonly rooms: number;
20
+ readonly zones: number;
21
+ readonly floors: number;
22
+ }
23
+ export interface TaggedEntities {
24
+ readonly rooms: ReadonlyArray<TaggedEntityRef>;
25
+ readonly zones: ReadonlyArray<TaggedEntityRef>;
26
+ readonly floors: ReadonlyArray<TaggedEntityRef>;
27
+ }
28
+ export interface TagSummary {
29
+ readonly id: string;
30
+ readonly name: string;
31
+ readonly applied_to: TagFootprint;
32
+ readonly applied_to_entities?: TaggedEntities;
33
+ }
34
+ export interface ListTagsResponse {
35
+ readonly tags: ReadonlyArray<TagSummary>;
36
+ readonly total: number;
37
+ readonly timestamp: string;
38
+ readonly filtered_by?: Record<string, unknown>;
39
+ /**
40
+ * Set when upstream returned tag rows missing a usable id/name
41
+ * (`malformed_tag_rows` analogue). Counts and entities reflect the
42
+ * surviving valid rows; this field tells the caller how many were
43
+ * dropped so they can surface or escalate the upstream contract
44
+ * violation rather than misread it as "tag deleted".
45
+ */
46
+ readonly warning?: string;
47
+ }
48
+ export declare function executeListTags(args: ListTagsArgs): Promise<ListTagsResponse>;
49
+ export declare function registerListTags(server: McpServer): void;
50
+ //# sourceMappingURL=butlr-list-tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butlr-list-tags.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-list-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAgCpC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAAwC,CAAC;AAExE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AA0B/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,cAAc,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyGnF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBxD"}
@@ -0,0 +1,165 @@
1
+ import { z } from "zod";
2
+ import { apolloClient } from "../clients/graphql-client.js";
3
+ import { GET_TAGS_WITH_USAGE, } from "../clients/queries/tags.js";
4
+ import { rethrowIfGraphQLError, throwIfGraphQLErrors } from "../utils/graphql-helpers.js";
5
+ import { projectValidRefs } from "../utils/tag-resolver.js";
6
+ import { withToolErrorHandling, throwInternalError } from "../errors/mcp-errors.js";
7
+ import { debug } from "../utils/debug.js";
8
+ const listTagsInputShape = {
9
+ name_contains: z
10
+ .string()
11
+ .min(1, "name_contains cannot be empty")
12
+ .max(200, "name_contains too long (max: 200 chars)")
13
+ .optional()
14
+ .describe("Case-insensitive substring filter on tag name"),
15
+ min_usage: z
16
+ .number()
17
+ .int("min_usage must be an integer")
18
+ .min(0, "min_usage must be >= 0")
19
+ .max(100000)
20
+ .optional()
21
+ .describe("Exclude tags whose total application count (rooms + zones + floors) is below this threshold"),
22
+ include_entities: z
23
+ .boolean()
24
+ .default(false)
25
+ .describe("When true, each tag's response includes `applied_to_entities` with the id and name of every valid tagged room, zone, and floor (not just counts). Refs without a usable id (deleted entities whose tag link survived; partial GraphQL responses) are dropped silently — `applied_to.{rooms,zones,floors}` counts are derived from the SAME filtered list so they cannot disagree. Default false to keep the response token-light; set true when you need to know exactly which entities are tagged without follow-up calls."),
26
+ };
27
+ export const ListTagsArgsSchema = z.object(listTagsInputShape).strict();
28
+ const LIST_TAGS_DESCRIPTION = "List every tag in the organization, with the footprint (count of rooms, zones, and floors each tag is applied to). Tags are org-scoped labels — the same tag can be attached to any mix of rooms, zones, and floors. Use this tool first to discover what tags exist and which entity types they apply to before calling tag-filtered queries.\n\n" +
29
+ "Primary Users:\n" +
30
+ "- All Users: Discover what tag vocabulary exists in the org and where each tag is used\n" +
31
+ "- Workplace Manager: Find room-type, zone-type, or department tags before filtering availability\n" +
32
+ "- Facilities Coordinator: Audit tag coverage across rooms vs. zones\n\n" +
33
+ "Example Queries:\n" +
34
+ '1. "What tags are used in this org?" → list everything\n' +
35
+ '2. "Show me video-conferencing tags" → name_contains: "videoconf"\n' +
36
+ '3. "Which tags are actually in use?" → min_usage: 1\n' +
37
+ '4. "Find tags applied to many zones" → list, then look at applied_to.zones\n' +
38
+ '5. "What rooms and zones are tagged \'huddle\'?" → name_contains: "huddle", include_entities: true\n\n' +
39
+ "When to Use:\n" +
40
+ "- Before any tag-based filter, to map a human term (e.g. 'videoconf') to the right tag id and entity level\n" +
41
+ "- To understand whether a tag lives on rooms, zones, floors, or several levels at once\n" +
42
+ "- To audit tagging hygiene (unused tags, single-level tags, etc.)\n" +
43
+ "- With include_entities=true, to enumerate every tagged entity in one call (avoids per-tag follow-up to butlr_get_asset_details)\n\n" +
44
+ "When NOT to Use:\n" +
45
+ "- You want full topology browsing — use butlr_list_topology (supports tag_names filter for tagged-only views)\n" +
46
+ "- You only need available rooms by tag — use butlr_available_rooms\n\n" +
47
+ "Response Shape: { tags: [{ id, name, applied_to: { rooms: number, zones: number, floors: number }, applied_to_entities?: { rooms: [{id, name?}], zones: [{id, name?}], floors: [{id, name?}] } }], total, timestamp }. Tags are sorted by total usage descending. `applied_to_entities` is present only when include_entities=true; the inner `name` is best-effort (omitted when upstream returns no name for the tagged entity).\n\n" +
48
+ "Note on coverage: spot-level tags exist in the data model but are not yet exposed by this tool — applied_to and applied_to_entities cover rooms, zones, and floors only.\n\n" +
49
+ "See Also: butlr_list_topology (tag_names filter for tagged subtrees), butlr_available_rooms (uses tag names from this tool), butlr_search_assets";
50
+ function totalUsage(t) {
51
+ return t.applied_to.rooms + t.applied_to.zones + t.applied_to.floors;
52
+ }
53
+ export async function executeListTags(args) {
54
+ debug("list-tags", "Listing tags with args:", JSON.stringify(args));
55
+ let rawTags = [];
56
+ try {
57
+ const result = await apolloClient.query({
58
+ query: GET_TAGS_WITH_USAGE,
59
+ fetchPolicy: "network-only",
60
+ });
61
+ throwIfGraphQLErrors(result);
62
+ // Distinguish "empty array" (legitimate — org has no tags) from
63
+ // "null" (upstream contract violation — the schema should send `[]`
64
+ // when empty, never `null`). Treating `null` as legitimate-empty
65
+ // would silently launder a serialisation regression. `undefined`
66
+ // (field omitted entirely) is similarly treated as a contract
67
+ // violation; only an explicit array survives.
68
+ const tags = result.data?.tags;
69
+ if (!Array.isArray(tags)) {
70
+ throwInternalError("Unexpected response shape from tags query (expected array, got " +
71
+ `${tags === null ? "null" : typeof tags}). Please retry; if persistent, the upstream API contract may have changed.`);
72
+ }
73
+ rawTags = tags;
74
+ }
75
+ catch (error) {
76
+ rethrowIfGraphQLError(error);
77
+ throw error;
78
+ }
79
+ // Validate each row at the boundary. Mirrors the contract that
80
+ // `resolveTagNames` enforces on the topology path: any row missing a
81
+ // usable id/name is dropped, and the dropped count is surfaced as a
82
+ // `malformed_tag_rows` diagnostic. Without this, the name_contains
83
+ // filter below would call `.toLowerCase()` on a non-string and crash
84
+ // with a raw TypeError outside the MCP error translator.
85
+ const isValidRow = (t) => typeof t?.id === "string" &&
86
+ t.id.trim().length > 0 &&
87
+ typeof t?.name === "string" &&
88
+ t.name.trim().length > 0;
89
+ const validTagRows = rawTags.filter(isValidRow);
90
+ const malformedTagRowCount = rawTags.length - validTagRows.length;
91
+ // `projectValidRefs` filters out refs without a usable id (dangling
92
+ // associations after a hard delete, or partial GraphQL responses).
93
+ // Counts and the optional entity array are computed off the same
94
+ // filtered list so they cannot disagree within a single response. The
95
+ // helper is shared with `butlr_list_topology` so the validity predicate
96
+ // lives in one place — if the rule ever tightens, both tools update
97
+ // together.
98
+ let tags = validTagRows.map((t) => {
99
+ const rooms = projectValidRefs(t.rooms);
100
+ const zones = projectValidRefs(t.zones);
101
+ const floors = projectValidRefs(t.floors);
102
+ const applied_to = {
103
+ rooms: rooms.length,
104
+ zones: zones.length,
105
+ floors: floors.length,
106
+ };
107
+ return args.include_entities
108
+ ? {
109
+ id: t.id,
110
+ name: t.name,
111
+ applied_to,
112
+ applied_to_entities: { rooms, zones, floors },
113
+ }
114
+ : { id: t.id, name: t.name, applied_to };
115
+ });
116
+ if (args.name_contains) {
117
+ const needle = args.name_contains.toLowerCase();
118
+ tags = tags.filter((t) => t.name.toLowerCase().includes(needle));
119
+ }
120
+ if (args.min_usage !== undefined) {
121
+ const threshold = args.min_usage;
122
+ tags = tags.filter((t) => totalUsage(t) >= threshold);
123
+ }
124
+ tags.sort((a, b) => totalUsage(b) - totalUsage(a));
125
+ // Surface the args used to filter, but only when at least one filter was
126
+ // actually supplied. `include_entities` defaults to false at the schema
127
+ // layer so it's always set on `args`; treat the all-defaults case as
128
+ // "no filter applied".
129
+ const { include_entities, ...rest } = args;
130
+ const explicitFilters = { ...rest };
131
+ if (include_entities === true)
132
+ explicitFilters.include_entities = true;
133
+ const hasFilters = Object.keys(explicitFilters).length > 0;
134
+ const warning = malformedTagRowCount > 0
135
+ ? `${malformedTagRowCount} tag row(s) skipped — upstream returned entries ` +
136
+ "with missing or empty id/name fields. If unexpected, contact support."
137
+ : undefined;
138
+ return {
139
+ tags,
140
+ total: tags.length,
141
+ timestamp: new Date().toISOString(),
142
+ ...(hasFilters ? { filtered_by: explicitFilters } : {}),
143
+ ...(warning !== undefined ? { warning } : {}),
144
+ };
145
+ }
146
+ export function registerListTags(server) {
147
+ server.registerTool("butlr_list_tags", {
148
+ title: "List Butlr Tags",
149
+ description: LIST_TAGS_DESCRIPTION,
150
+ inputSchema: listTagsInputShape,
151
+ annotations: {
152
+ readOnlyHint: true,
153
+ destructiveHint: false,
154
+ idempotentHint: true,
155
+ openWorldHint: false,
156
+ },
157
+ }, withToolErrorHandling(async (args) => {
158
+ const validated = ListTagsArgsSchema.parse(args);
159
+ const result = await executeListTags(validated);
160
+ return {
161
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
162
+ };
163
+ }));
164
+ }
165
+ //# sourceMappingURL=butlr-list-tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butlr-list-tags.js","sourceRoot":"","sources":["../../src/tools/butlr-list-tags.ts"],"names":[],"mappings":"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"}
@@ -5,20 +5,26 @@ export declare const ListTopologyArgsSchema: z.ZodObject<{
5
5
  asset_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
6
  starting_depth: z.ZodDefault<z.ZodNumber>;
7
7
  traversal_depth: z.ZodDefault<z.ZodNumber>;
8
+ tag_names: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ tag_match: z.ZodDefault<z.ZodEnum<["all", "any"]>>;
8
10
  }, "strict", z.ZodTypeAny, {
11
+ tag_match: "all" | "any";
9
12
  starting_depth: number;
10
13
  traversal_depth: number;
11
14
  asset_ids?: string[] | undefined;
15
+ tag_names?: string[] | undefined;
12
16
  }, {
17
+ tag_match?: "all" | "any" | undefined;
13
18
  asset_ids?: string[] | undefined;
14
19
  starting_depth?: number | undefined;
15
20
  traversal_depth?: number | undefined;
21
+ tag_names?: string[] | undefined;
16
22
  }>;
17
23
  type ListTopologyArgs = z.output<typeof ListTopologyArgsSchema>;
18
24
  /**
19
25
  * Execute butlr_list_topology tool
20
26
  */
21
- export declare function executeListTopology(args?: ListTopologyArgs): Promise<ListTopologyResponse>;
27
+ export declare function executeListTopology(args: ListTopologyArgs): Promise<ListTopologyResponse>;
22
28
  /**
23
29
  * Register butlr_list_topology with an McpServer instance
24
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"butlr-list-topology.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-list-topology.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAsClE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAA4C,CAAC;AAEhF,KAAK,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEhE;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,GAAE,gBAAyC,GAC9C,OAAO,CAAC,oBAAoB,CAAC,CAsH/B;AAoGD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB5D"}
1
+ {"version":3,"file":"butlr-list-topology.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-list-topology.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoBzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB,OAAO,KAAK,EAAE,oBAAoB,EAAsB,MAAM,uBAAuB,CAAC;AAoEtF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;EAA4C,CAAC;AAEhF,KAAK,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAyMhE;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuf/F;AAmVD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB5D"}