@butlr/butlr-mcp-server 0.1.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 (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/cache/occupancy-cache.d.ts +72 -0
  4. package/dist/cache/occupancy-cache.d.ts.map +1 -0
  5. package/dist/cache/occupancy-cache.js +166 -0
  6. package/dist/cache/occupancy-cache.js.map +1 -0
  7. package/dist/cache/topology-cache.d.ts +36 -0
  8. package/dist/cache/topology-cache.d.ts.map +1 -0
  9. package/dist/cache/topology-cache.js +74 -0
  10. package/dist/cache/topology-cache.js.map +1 -0
  11. package/dist/clients/auth-client.d.ts +22 -0
  12. package/dist/clients/auth-client.d.ts.map +1 -0
  13. package/dist/clients/auth-client.js +82 -0
  14. package/dist/clients/auth-client.js.map +1 -0
  15. package/dist/clients/graphql-client.d.ts +6 -0
  16. package/dist/clients/graphql-client.d.ts.map +1 -0
  17. package/dist/clients/graphql-client.js +106 -0
  18. package/dist/clients/graphql-client.js.map +1 -0
  19. package/dist/clients/queries/topology.d.ts +36 -0
  20. package/dist/clients/queries/topology.d.ts.map +1 -0
  21. package/dist/clients/queries/topology.js +252 -0
  22. package/dist/clients/queries/topology.js.map +1 -0
  23. package/dist/clients/reporting-client.d.ts +191 -0
  24. package/dist/clients/reporting-client.d.ts.map +1 -0
  25. package/dist/clients/reporting-client.js +353 -0
  26. package/dist/clients/reporting-client.js.map +1 -0
  27. package/dist/clients/stats-client.d.ts +119 -0
  28. package/dist/clients/stats-client.d.ts.map +1 -0
  29. package/dist/clients/stats-client.js +238 -0
  30. package/dist/clients/stats-client.js.map +1 -0
  31. package/dist/clients/types.d.ts +215 -0
  32. package/dist/clients/types.d.ts.map +1 -0
  33. package/dist/clients/types.js +6 -0
  34. package/dist/clients/types.js.map +1 -0
  35. package/dist/constants.d.ts +3 -0
  36. package/dist/constants.d.ts.map +1 -0
  37. package/dist/constants.js +3 -0
  38. package/dist/constants.js.map +1 -0
  39. package/dist/errors/mcp-errors.d.ts +63 -0
  40. package/dist/errors/mcp-errors.d.ts.map +1 -0
  41. package/dist/errors/mcp-errors.js +144 -0
  42. package/dist/errors/mcp-errors.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +43 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/tools/butlr-available-rooms.d.ts +49 -0
  48. package/dist/tools/butlr-available-rooms.d.ts.map +1 -0
  49. package/dist/tools/butlr-available-rooms.js +492 -0
  50. package/dist/tools/butlr-available-rooms.js.map +1 -0
  51. package/dist/tools/butlr-fetch-entity-details.d.ts +42 -0
  52. package/dist/tools/butlr-fetch-entity-details.d.ts.map +1 -0
  53. package/dist/tools/butlr-fetch-entity-details.js +276 -0
  54. package/dist/tools/butlr-fetch-entity-details.js.map +1 -0
  55. package/dist/tools/butlr-get-asset-details.d.ts +51 -0
  56. package/dist/tools/butlr-get-asset-details.d.ts.map +1 -0
  57. package/dist/tools/butlr-get-asset-details.js +391 -0
  58. package/dist/tools/butlr-get-asset-details.js.map +1 -0
  59. package/dist/tools/butlr-get-current-occupancy.d.ts +21 -0
  60. package/dist/tools/butlr-get-current-occupancy.d.ts.map +1 -0
  61. package/dist/tools/butlr-get-current-occupancy.js +126 -0
  62. package/dist/tools/butlr-get-current-occupancy.js.map +1 -0
  63. package/dist/tools/butlr-get-occupancy-timeseries.d.ts +31 -0
  64. package/dist/tools/butlr-get-occupancy-timeseries.d.ts.map +1 -0
  65. package/dist/tools/butlr-get-occupancy-timeseries.js +145 -0
  66. package/dist/tools/butlr-get-occupancy-timeseries.js.map +1 -0
  67. package/dist/tools/butlr-hardware-snapshot.d.ts +55 -0
  68. package/dist/tools/butlr-hardware-snapshot.d.ts.map +1 -0
  69. package/dist/tools/butlr-hardware-snapshot.js +556 -0
  70. package/dist/tools/butlr-hardware-snapshot.js.map +1 -0
  71. package/dist/tools/butlr-list-topology.d.ts +27 -0
  72. package/dist/tools/butlr-list-topology.d.ts.map +1 -0
  73. package/dist/tools/butlr-list-topology.js +241 -0
  74. package/dist/tools/butlr-list-topology.js.map +1 -0
  75. package/dist/tools/butlr-search-assets.d.ts +53 -0
  76. package/dist/tools/butlr-search-assets.d.ts.map +1 -0
  77. package/dist/tools/butlr-search-assets.js +206 -0
  78. package/dist/tools/butlr-search-assets.js.map +1 -0
  79. package/dist/tools/butlr-space-busyness.d.ts +23 -0
  80. package/dist/tools/butlr-space-busyness.d.ts.map +1 -0
  81. package/dist/tools/butlr-space-busyness.js +304 -0
  82. package/dist/tools/butlr-space-busyness.js.map +1 -0
  83. package/dist/tools/butlr-traffic-flow.d.ts +39 -0
  84. package/dist/tools/butlr-traffic-flow.d.ts.map +1 -0
  85. package/dist/tools/butlr-traffic-flow.js +369 -0
  86. package/dist/tools/butlr-traffic-flow.js.map +1 -0
  87. package/dist/types/responses.d.ts +253 -0
  88. package/dist/types/responses.d.ts.map +1 -0
  89. package/dist/types/responses.js +8 -0
  90. package/dist/types/responses.js.map +1 -0
  91. package/dist/utils/asset-flattener.d.ts +50 -0
  92. package/dist/utils/asset-flattener.d.ts.map +1 -0
  93. package/dist/utils/asset-flattener.js +131 -0
  94. package/dist/utils/asset-flattener.js.map +1 -0
  95. package/dist/utils/asset-helpers.d.ts +8 -0
  96. package/dist/utils/asset-helpers.d.ts.map +1 -0
  97. package/dist/utils/asset-helpers.js +24 -0
  98. package/dist/utils/asset-helpers.js.map +1 -0
  99. package/dist/utils/field-validator.d.ts +29 -0
  100. package/dist/utils/field-validator.d.ts.map +1 -0
  101. package/dist/utils/field-validator.js +197 -0
  102. package/dist/utils/field-validator.js.map +1 -0
  103. package/dist/utils/fuzzy-match.d.ts +29 -0
  104. package/dist/utils/fuzzy-match.d.ts.map +1 -0
  105. package/dist/utils/fuzzy-match.js +70 -0
  106. package/dist/utils/fuzzy-match.js.map +1 -0
  107. package/dist/utils/graphql-helpers.d.ts +29 -0
  108. package/dist/utils/graphql-helpers.d.ts.map +1 -0
  109. package/dist/utils/graphql-helpers.js +43 -0
  110. package/dist/utils/graphql-helpers.js.map +1 -0
  111. package/dist/utils/natural-language.d.ts +73 -0
  112. package/dist/utils/natural-language.d.ts.map +1 -0
  113. package/dist/utils/natural-language.js +172 -0
  114. package/dist/utils/natural-language.js.map +1 -0
  115. package/dist/utils/occupancy-helpers.d.ts +63 -0
  116. package/dist/utils/occupancy-helpers.d.ts.map +1 -0
  117. package/dist/utils/occupancy-helpers.js +203 -0
  118. package/dist/utils/occupancy-helpers.js.map +1 -0
  119. package/dist/utils/path-builder.d.ts +10 -0
  120. package/dist/utils/path-builder.d.ts.map +1 -0
  121. package/dist/utils/path-builder.js +34 -0
  122. package/dist/utils/path-builder.js.map +1 -0
  123. package/dist/utils/time-range-validator.d.ts +13 -0
  124. package/dist/utils/time-range-validator.d.ts.map +1 -0
  125. package/dist/utils/time-range-validator.js +65 -0
  126. package/dist/utils/time-range-validator.js.map +1 -0
  127. package/dist/utils/timezone-helpers.d.ts +49 -0
  128. package/dist/utils/timezone-helpers.d.ts.map +1 -0
  129. package/dist/utils/timezone-helpers.js +209 -0
  130. package/dist/utils/timezone-helpers.js.map +1 -0
  131. package/dist/utils/tree-formatter.d.ts +23 -0
  132. package/dist/utils/tree-formatter.d.ts.map +1 -0
  133. package/dist/utils/tree-formatter.js +258 -0
  134. package/dist/utils/tree-formatter.js.map +1 -0
  135. package/package.json +93 -0
@@ -0,0 +1,276 @@
1
+ import { apolloClient } from "../clients/graphql-client.js";
2
+ import { gql } from "@apollo/client";
3
+ import { z } from "zod";
4
+ import { detectAssetType } from "../utils/asset-helpers.js";
5
+ import { ENTITY_TYPES, getValidatedFields } from "../utils/field-validator.js";
6
+ import { createValidationError } from "../errors/mcp-errors.js";
7
+ import { rethrowIfGraphQLError } from "../utils/graphql-helpers.js";
8
+ const FETCH_ENTITY_DETAILS_DESCRIPTION = "Retrieve specific fields for entities by ID with selective field fetching. " +
9
+ "Supports mixed entity types in a single call (site_, building_, floor_, room_, zone_, sensor_, hive_). " +
10
+ "Minimizes token usage by fetching only requested fields. " +
11
+ "Default fields if none specified: Sites (id, name), Buildings (id, name), Floors (id, name, floorNumber), " +
12
+ "Rooms (id, name), Zones (id, name), Sensors (id, mac_address), Hives (id, serialNumber).";
13
+ /** Shared shape — used by both registerTool (SDK schema) and full validation */
14
+ const fetchEntityDetailsInputShape = {
15
+ ids: z
16
+ .array(z.string())
17
+ .min(1, "ids must contain at least 1 entity ID")
18
+ .max(50, "ids cannot exceed 50 entities")
19
+ .describe("Entity IDs (mixed types supported: site_, building_, floor_, room_, zone_, sensor_, hive_)"),
20
+ site_fields: z
21
+ .array(z.string())
22
+ .optional()
23
+ .describe("Optional: Fields to fetch for sites (e.g., ['timezone', 'siteNumber', 'customID'])"),
24
+ building_fields: z
25
+ .array(z.string())
26
+ .optional()
27
+ .describe("Optional: Fields for buildings (e.g., ['capacity', 'address', 'building_number'])"),
28
+ floor_fields: z
29
+ .array(z.string())
30
+ .optional()
31
+ .describe("Optional: Fields for floors (e.g., ['floorNumber', 'capacity', 'timezone'])"),
32
+ room_fields: z
33
+ .array(z.string())
34
+ .optional()
35
+ .describe("Optional: Fields for rooms (e.g., ['roomType', 'capacity', 'coordinates'])"),
36
+ zone_fields: z
37
+ .array(z.string())
38
+ .optional()
39
+ .describe("Optional: Fields for zones (e.g., ['roomID', 'capacity'])"),
40
+ sensor_fields: z
41
+ .array(z.string())
42
+ .optional()
43
+ .describe("Optional: Fields for sensors (e.g., ['name', 'mac_address', 'mode', 'is_online'])"),
44
+ hive_fields: z
45
+ .array(z.string())
46
+ .optional()
47
+ .describe("Optional: Fields for hives (e.g., ['name', 'serialNumber', 'isOnline'])"),
48
+ };
49
+ export const FetchEntityDetailsArgsSchema = z.object(fetchEntityDetailsInputShape).strict();
50
+ /**
51
+ * Build GraphQL query dynamically based on requested fields
52
+ */
53
+ function buildQueryForFields(type, fields) {
54
+ // Defense-in-depth: reject any field name that isn't a simple identifier
55
+ for (const field of fields) {
56
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(field) || field.startsWith("__")) {
57
+ throw new Error(`Invalid field name: ${field}`);
58
+ }
59
+ }
60
+ const fieldList = fields.join("\n ");
61
+ switch (type) {
62
+ case "site":
63
+ return gql `
64
+ query GetSiteDetails($id: ID!) {
65
+ site(id: $id) {
66
+ ${fieldList}
67
+ }
68
+ }
69
+ `;
70
+ case "building":
71
+ return gql `
72
+ query GetBuildingDetails($id: ID!) {
73
+ building(id: $id) {
74
+ ${fieldList}
75
+ }
76
+ }
77
+ `;
78
+ case "floor":
79
+ return gql `
80
+ query GetFloorDetails($id: ID!) {
81
+ floor(id: $id) {
82
+ ${fieldList}
83
+ }
84
+ }
85
+ `;
86
+ case "room":
87
+ return gql `
88
+ query GetRoomDetails($id: ID!) {
89
+ room(id: $id) {
90
+ ${fieldList}
91
+ }
92
+ }
93
+ `;
94
+ case "zone":
95
+ return gql `
96
+ query GetZoneDetails($id: ID!) {
97
+ zone(id: $id) {
98
+ ${fieldList}
99
+ }
100
+ }
101
+ `;
102
+ case "sensor":
103
+ // Sensors API accepts ids parameter (batch query)
104
+ return gql `
105
+ query GetSensorDetails($ids: [String!]) {
106
+ sensors(ids: $ids) {
107
+ data {
108
+ ${fieldList}
109
+ }
110
+ }
111
+ }
112
+ `;
113
+ case "hive":
114
+ // Hives API accepts both ids and serial_numbers (batch query)
115
+ return gql `
116
+ query GetHiveDetails($ids: [String!], $serial_numbers: [String!]) {
117
+ hives(ids: $ids, serial_numbers: $serial_numbers) {
118
+ data {
119
+ ${fieldList}
120
+ }
121
+ }
122
+ }
123
+ `;
124
+ default:
125
+ throw createValidationError(`Unsupported asset type: ${type}`);
126
+ }
127
+ }
128
+ /**
129
+ * Execute butlr_fetch_entity_details tool
130
+ */
131
+ export async function executeFetchEntityDetails(args) {
132
+ if (process.env.DEBUG) {
133
+ console.error(`[butlr-fetch-entity-details] Fetching details for ${args.ids.length} asset(s)`);
134
+ }
135
+ // Group IDs by type
136
+ const assetsByType = {};
137
+ for (const id of args.ids) {
138
+ const type = detectAssetType(id);
139
+ if (type === "unknown") {
140
+ throw createValidationError(`Unknown asset type for ID: ${id}`);
141
+ }
142
+ // Validate that detectAssetType returned a known EntityType
143
+ if (!ENTITY_TYPES.includes(type)) {
144
+ throw createValidationError(`Unsupported asset type: ${type}`);
145
+ }
146
+ if (!assetsByType[type]) {
147
+ assetsByType[type] = [];
148
+ }
149
+ assetsByType[type].push(id);
150
+ }
151
+ // Fetch assets by type
152
+ const results = [];
153
+ for (const [type, ids] of Object.entries(assetsByType)) {
154
+ const entityType = type;
155
+ // Get fields for this type
156
+ const fieldParam = `${type}_fields`;
157
+ const requestedFields = args[fieldParam];
158
+ // Validate and get final field list (defaults if none provided)
159
+ const fields = getValidatedFields(entityType, requestedFields);
160
+ // Build query
161
+ const query = buildQueryForFields(type, fields);
162
+ // For hives and sensors, batch query all at once
163
+ if (type === "hive" || type === "sensor") {
164
+ try {
165
+ // Use ids for both types (API supports it)
166
+ const variables = { ids };
167
+ const { data, error } = await apolloClient.query({
168
+ query,
169
+ variables,
170
+ fetchPolicy: "network-only",
171
+ });
172
+ if (error) {
173
+ throw error;
174
+ }
175
+ // Extract assets from response
176
+ const pluralType = type === "hive" ? "hives" : "sensors";
177
+ const dataArray = data[pluralType]?.data || [];
178
+ // Add all found assets
179
+ for (const asset of dataArray) {
180
+ results.push({
181
+ ...asset,
182
+ _type: type,
183
+ });
184
+ }
185
+ // Report missing assets
186
+ const foundIds = new Set(dataArray.map((a) => a.id));
187
+ for (const id of ids) {
188
+ if (!foundIds.has(id)) {
189
+ if (process.env.DEBUG) {
190
+ console.error(`[butlr-fetch-entity-details] Asset not found: ${id}`);
191
+ }
192
+ results.push({
193
+ id,
194
+ _type: type,
195
+ error: "Asset not found",
196
+ });
197
+ }
198
+ }
199
+ }
200
+ catch (error) {
201
+ rethrowIfGraphQLError(error);
202
+ throw error;
203
+ }
204
+ }
205
+ else {
206
+ // Query individually for other types (site, building, floor, room, zone)
207
+ for (const id of ids) {
208
+ try {
209
+ const { data, error } = await apolloClient.query({
210
+ query,
211
+ variables: { id },
212
+ fetchPolicy: "network-only",
213
+ });
214
+ if (error) {
215
+ throw error;
216
+ }
217
+ const asset = data[type];
218
+ if (asset) {
219
+ results.push({
220
+ ...asset,
221
+ _type: type,
222
+ });
223
+ }
224
+ else {
225
+ if (process.env.DEBUG) {
226
+ console.error(`[butlr-fetch-entity-details] Asset not found: ${id}`);
227
+ }
228
+ results.push({
229
+ id,
230
+ _type: type,
231
+ error: "Asset not found",
232
+ });
233
+ }
234
+ }
235
+ catch (error) {
236
+ rethrowIfGraphQLError(error);
237
+ throw error;
238
+ }
239
+ }
240
+ }
241
+ }
242
+ const failedCount = results.filter((r) => r.error).length;
243
+ const response = {
244
+ entities: results,
245
+ requested_count: args.ids.length,
246
+ fetched_count: results.filter((r) => !r.error).length,
247
+ timestamp: new Date().toISOString(),
248
+ };
249
+ if (failedCount > 0) {
250
+ response.warning = `${failedCount} of ${args.ids.length} entities failed to fetch. Check individual entity 'error' fields for details.`;
251
+ }
252
+ return response;
253
+ }
254
+ /**
255
+ * Register butlr_fetch_entity_details with an McpServer instance
256
+ */
257
+ export function registerFetchEntityDetails(server) {
258
+ server.registerTool("butlr_fetch_entity_details", {
259
+ title: "Fetch Entity Details",
260
+ description: FETCH_ENTITY_DETAILS_DESCRIPTION,
261
+ inputSchema: fetchEntityDetailsInputShape,
262
+ annotations: {
263
+ readOnlyHint: true,
264
+ destructiveHint: false,
265
+ idempotentHint: true,
266
+ openWorldHint: true,
267
+ },
268
+ }, async (args) => {
269
+ const validated = FetchEntityDetailsArgsSchema.parse(args);
270
+ const result = await executeFetchEntityDetails(validated);
271
+ return {
272
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
273
+ };
274
+ });
275
+ }
276
+ //# sourceMappingURL=butlr-fetch-entity-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butlr-fetch-entity-details.js","sourceRoot":"","sources":["../../src/tools/butlr-fetch-entity-details.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAmB,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,MAAM,gCAAgC,GACpC,6EAA6E;IAC7E,yGAAyG;IACzG,2DAA2D;IAC3D,4GAA4G;IAC5G,0FAA0F,CAAC;AAE7F,gFAAgF;AAChF,MAAM,4BAA4B,GAAG;IACnC,GAAG,EAAE,CAAC;SACH,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,EAAE,uCAAuC,CAAC;SAC/C,GAAG,CAAC,EAAE,EAAE,+BAA+B,CAAC;SACxC,QAAQ,CACP,4FAA4F,CAC7F;IAEH,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IAEjG,eAAe,EAAE,CAAC;SACf,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,mFAAmF,CAAC;IAEhG,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IAE1F,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;IAEzF,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IAExE,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,mFAAmF,CAAC;IAEhG,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,yEAAyE,CAAC;CACvF,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC;AAI5F;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAE,MAAgB;IACzD,yEAAyE;IACzE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE1C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,CAAA;;;cAGF,SAAS;;;OAGhB,CAAC;QAEJ,KAAK,UAAU;YACb,OAAO,GAAG,CAAA;;;cAGF,SAAS;;;OAGhB,CAAC;QAEJ,KAAK,OAAO;YACV,OAAO,GAAG,CAAA;;;cAGF,SAAS;;;OAGhB,CAAC;QAEJ,KAAK,MAAM;YACT,OAAO,GAAG,CAAA;;;cAGF,SAAS;;;OAGhB,CAAC;QAEJ,KAAK,MAAM;YACT,OAAO,GAAG,CAAA;;;cAGF,SAAS;;;OAGhB,CAAC;QAEJ,KAAK,QAAQ;YACX,kDAAkD;YAClD,OAAO,GAAG,CAAA;;;;gBAIA,SAAS;;;;OAIlB,CAAC;QAEJ,KAAK,MAAM;YACT,8DAA8D;YAC9D,OAAO,GAAG,CAAA;;;;gBAIA,SAAS;;;;OAIlB,CAAC;QAEJ;YACE,MAAM,qBAAqB,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAA4B;IAE5B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,qDAAqD,IAAI,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC;IACjG,CAAC;IAED,oBAAoB;IACpB,MAAM,YAAY,GAA6B,EAAE,CAAC;IAClD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,qBAAqB,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAkB,CAAC,EAAE,CAAC;YAC/C,MAAM,qBAAqB,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,uBAAuB;IACvB,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,IAAkB,CAAC;QAEtC,2BAA2B;QAC3B,MAAM,UAAU,GAAG,GAAG,IAAI,SAAyC,CAAC;QACpE,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAyB,CAAC;QAEjE,gEAAgE;QAChE,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAE/D,cAAc;QACd,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEhD,iDAAiD;QACjD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,2CAA2C;gBAC3C,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC;gBAE1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC;oBAC/C,KAAK;oBACL,SAAS;oBACT,WAAW,EAAE,cAAc;iBAC5B,CAAC,CAAC;gBAEH,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,UAAU,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBACzD,MAAM,SAAS,GAAI,IAAY,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBAExD,uBAAuB;gBACvB,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC;wBACX,GAAG,KAAK;wBACR,KAAK,EAAE,IAAI;qBACZ,CAAC,CAAC;gBACL,CAAC;gBAED,wBAAwB;gBACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1D,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBACtB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;4BACtB,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAC;wBACvE,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC;4BACX,EAAE;4BACF,KAAK,EAAE,IAAI;4BACX,KAAK,EAAE,iBAAiB;yBACzB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC;wBAC/C,KAAK;wBACL,SAAS,EAAE,EAAE,EAAE,EAAE;wBACjB,WAAW,EAAE,cAAc;qBAC5B,CAAC,CAAC;oBAEH,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,MAAM,KAAK,GAAI,IAAY,CAAC,IAAI,CAAC,CAAC;oBAElC,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,IAAI,CAAC;4BACX,GAAG,KAAK;4BACR,KAAK,EAAE,IAAI;yBACZ,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;4BACtB,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAC;wBACvE,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC;4BACX,EAAE;4BACF,KAAK,EAAE,IAAI;4BACX,KAAK,EAAE,iBAAiB;yBACzB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACxB,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBAC7B,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,QAAQ,GAA+B;QAC3C,QAAQ,EAAE,OAAO;QACjB,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;QAChC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM;QACrD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,QAAQ,CAAC,OAAO,GAAG,GAAG,WAAW,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,gFAAgF,CAAC;IAC1I,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,gCAAgC;QAC7C,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAC1D,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,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ export declare const GetAssetDetailsArgsSchema: z.ZodEffects<z.ZodObject<{
4
+ ids: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
5
+ include_children: z.ZodDefault<z.ZodBoolean>;
6
+ include_devices: z.ZodDefault<z.ZodBoolean>;
7
+ include_parent_context: z.ZodDefault<z.ZodBoolean>;
8
+ }, "strict", z.ZodTypeAny, {
9
+ ids: string[];
10
+ include_children: boolean;
11
+ include_devices: boolean;
12
+ include_parent_context: boolean;
13
+ }, {
14
+ ids: string[];
15
+ include_children?: boolean | undefined;
16
+ include_devices?: boolean | undefined;
17
+ include_parent_context?: boolean | undefined;
18
+ }>, {
19
+ ids: string[];
20
+ include_children: boolean;
21
+ include_devices: boolean;
22
+ include_parent_context: boolean;
23
+ }, {
24
+ ids: string[];
25
+ include_children?: boolean | undefined;
26
+ include_devices?: boolean | undefined;
27
+ include_parent_context?: boolean | undefined;
28
+ }>;
29
+ /**
30
+ * Input arguments for get_asset_details (output type from Zod schema after defaults applied)
31
+ */
32
+ export type GetAssetDetailsArgs = z.output<typeof GetAssetDetailsArgsSchema>;
33
+ /**
34
+ * Execute get_asset_details tool
35
+ */
36
+ export declare function executeGetAssetDetails(args: GetAssetDetailsArgs): Promise<{
37
+ assets: Record<string, unknown>[];
38
+ total_count: number;
39
+ requested_count: number;
40
+ options: {
41
+ include_children: boolean;
42
+ include_devices: boolean;
43
+ include_parent_context: boolean;
44
+ };
45
+ timestamp: string;
46
+ }>;
47
+ /**
48
+ * Register butlr_get_asset_details with an McpServer instance
49
+ */
50
+ export declare function registerGetAssetDetails(server: McpServer): void;
51
+ //# sourceMappingURL=butlr-get-asset-details.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butlr-get-asset-details.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-get-asset-details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkCxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;EAYnC,CAAC;AAiCJ;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAyP7E;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB;;;;;;;;;;GAgGrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB/D"}