@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.
- package/README.md +27 -1
- package/dist/cache/topology-cache.d.ts +18 -3
- package/dist/cache/topology-cache.d.ts.map +1 -1
- package/dist/cache/topology-cache.js +19 -3
- package/dist/cache/topology-cache.js.map +1 -1
- package/dist/clients/queries/tags.d.ts +96 -0
- package/dist/clients/queries/tags.d.ts.map +1 -0
- package/dist/clients/queries/tags.js +64 -0
- package/dist/clients/queries/tags.js.map +1 -0
- package/dist/clients/types.d.ts +6 -2
- package/dist/clients/types.d.ts.map +1 -1
- package/dist/errors/mcp-errors.d.ts +34 -0
- package/dist/errors/mcp-errors.d.ts.map +1 -1
- package/dist/errors/mcp-errors.js +71 -5
- package/dist/errors/mcp-errors.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/butlr-available-rooms.d.ts +10 -4
- package/dist/tools/butlr-available-rooms.d.ts.map +1 -1
- package/dist/tools/butlr-available-rooms.js +177 -45
- package/dist/tools/butlr-available-rooms.js.map +1 -1
- package/dist/tools/butlr-fetch-entity-details.d.ts.map +1 -1
- package/dist/tools/butlr-fetch-entity-details.js +7 -1
- package/dist/tools/butlr-fetch-entity-details.js.map +1 -1
- package/dist/tools/butlr-get-asset-details.d.ts.map +1 -1
- package/dist/tools/butlr-get-asset-details.js +29 -4
- package/dist/tools/butlr-get-asset-details.js.map +1 -1
- package/dist/tools/butlr-get-current-occupancy.d.ts.map +1 -1
- package/dist/tools/butlr-get-current-occupancy.js +27 -6
- package/dist/tools/butlr-get-current-occupancy.js.map +1 -1
- package/dist/tools/butlr-get-occupancy-timeseries.d.ts.map +1 -1
- package/dist/tools/butlr-get-occupancy-timeseries.js +32 -11
- package/dist/tools/butlr-get-occupancy-timeseries.js.map +1 -1
- package/dist/tools/butlr-list-tags.d.ts +50 -0
- package/dist/tools/butlr-list-tags.d.ts.map +1 -0
- package/dist/tools/butlr-list-tags.js +165 -0
- package/dist/tools/butlr-list-tags.js.map +1 -0
- package/dist/tools/butlr-list-topology.d.ts +7 -1
- package/dist/tools/butlr-list-topology.d.ts.map +1 -1
- package/dist/tools/butlr-list-topology.js +845 -35
- package/dist/tools/butlr-list-topology.js.map +1 -1
- package/dist/tools/butlr-search-assets.d.ts.map +1 -1
- package/dist/tools/butlr-search-assets.js +7 -1
- package/dist/tools/butlr-search-assets.js.map +1 -1
- package/dist/tools/butlr-space-busyness.d.ts.map +1 -1
- package/dist/tools/butlr-space-busyness.js +30 -5
- package/dist/tools/butlr-space-busyness.js.map +1 -1
- package/dist/tools/butlr-traffic-flow.d.ts.map +1 -1
- package/dist/tools/butlr-traffic-flow.js +14 -9
- package/dist/tools/butlr-traffic-flow.js.map +1 -1
- package/dist/types/responses.d.ts +126 -4
- package/dist/types/responses.d.ts.map +1 -1
- package/dist/utils/asset-flattener.js +2 -2
- package/dist/utils/asset-flattener.js.map +1 -1
- package/dist/utils/field-validator.d.ts.map +1 -1
- package/dist/utils/field-validator.js +3 -0
- package/dist/utils/field-validator.js.map +1 -1
- package/dist/utils/graphql-helpers.d.ts +13 -0
- package/dist/utils/graphql-helpers.d.ts.map +1 -1
- package/dist/utils/graphql-helpers.js +25 -0
- package/dist/utils/graphql-helpers.js.map +1 -1
- package/dist/utils/occupancy-helpers.d.ts +2 -0
- package/dist/utils/occupancy-helpers.d.ts.map +1 -1
- package/dist/utils/occupancy-helpers.js +26 -9
- package/dist/utils/occupancy-helpers.js.map +1 -1
- package/dist/utils/tag-resolver.d.ts +99 -0
- package/dist/utils/tag-resolver.d.ts.map +1 -0
- package/dist/utils/tag-resolver.js +108 -0
- package/dist/utils/tag-resolver.js.map +1 -0
- package/dist/utils/timezone-helpers.d.ts +8 -3
- package/dist/utils/timezone-helpers.d.ts.map +1 -1
- package/dist/utils/timezone-helpers.js +22 -14
- package/dist/utils/timezone-helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,39 +5,45 @@ export declare const AvailableRoomsArgsSchema: z.ZodEffects<z.ZodObject<{
|
|
|
5
5
|
min_capacity: z.ZodOptional<z.ZodNumber>;
|
|
6
6
|
max_capacity: z.ZodOptional<z.ZodNumber>;
|
|
7
7
|
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
8
|
+
tag_match: z.ZodDefault<z.ZodEnum<["all", "any"]>>;
|
|
8
9
|
building_id: z.ZodOptional<z.ZodString>;
|
|
9
10
|
floor_id: z.ZodOptional<z.ZodString>;
|
|
10
11
|
max_results: z.ZodDefault<z.ZodNumber>;
|
|
11
12
|
}, "strict", z.ZodTypeAny, {
|
|
12
13
|
max_results: number;
|
|
13
|
-
|
|
14
|
+
tag_match: "all" | "any";
|
|
14
15
|
tags?: string[] | undefined;
|
|
16
|
+
building_id?: string | undefined;
|
|
15
17
|
min_capacity?: number | undefined;
|
|
16
18
|
max_capacity?: number | undefined;
|
|
17
19
|
floor_id?: string | undefined;
|
|
18
20
|
}, {
|
|
19
21
|
max_results?: number | undefined;
|
|
20
|
-
building_id?: string | undefined;
|
|
21
22
|
tags?: string[] | undefined;
|
|
23
|
+
building_id?: string | undefined;
|
|
22
24
|
min_capacity?: number | undefined;
|
|
23
25
|
max_capacity?: number | undefined;
|
|
26
|
+
tag_match?: "all" | "any" | undefined;
|
|
24
27
|
floor_id?: string | undefined;
|
|
25
28
|
}>, {
|
|
26
29
|
max_results: number;
|
|
27
|
-
|
|
30
|
+
tag_match: "all" | "any";
|
|
28
31
|
tags?: string[] | undefined;
|
|
32
|
+
building_id?: string | undefined;
|
|
29
33
|
min_capacity?: number | undefined;
|
|
30
34
|
max_capacity?: number | undefined;
|
|
31
35
|
floor_id?: string | undefined;
|
|
32
36
|
}, {
|
|
33
37
|
max_results?: number | undefined;
|
|
34
|
-
building_id?: string | undefined;
|
|
35
38
|
tags?: string[] | undefined;
|
|
39
|
+
building_id?: string | undefined;
|
|
36
40
|
min_capacity?: number | undefined;
|
|
37
41
|
max_capacity?: number | undefined;
|
|
42
|
+
tag_match?: "all" | "any" | undefined;
|
|
38
43
|
floor_id?: string | undefined;
|
|
39
44
|
}>;
|
|
40
45
|
export type AvailableRoomsArgs = z.output<typeof AvailableRoomsArgsSchema>;
|
|
46
|
+
export declare const GET_ROOMS_BY_TAG: import("@apollo/client").DocumentNode;
|
|
41
47
|
/**
|
|
42
48
|
* Execute available rooms tool
|
|
43
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"butlr-available-rooms.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-available-rooms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"butlr-available-rooms.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-available-rooms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,KAAK,EAAiB,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAiEpG,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAclC,CAAC;AAgCJ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAgE3E,eAAO,MAAM,gBAAgB,uCA+B5B,CAAC;AAuCF;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,sBAAsB,CAAC,CA+bjC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB9D"}
|
|
@@ -4,9 +4,11 @@ import { z } from "zod";
|
|
|
4
4
|
import { getCurrentOccupancy } from "../clients/reporting-client.js";
|
|
5
5
|
import { buildAvailableRoomsSummary } from "../utils/natural-language.js";
|
|
6
6
|
import { getCachedOccupancy, setBulkCachedOccupancy } from "../cache/occupancy-cache.js";
|
|
7
|
-
import { rethrowIfGraphQLError } from "../utils/graphql-helpers.js";
|
|
7
|
+
import { rethrowIfGraphQLError, throwIfGraphQLErrors } from "../utils/graphql-helpers.js";
|
|
8
|
+
import { GET_TAGS_MINIMAL } from "../clients/queries/tags.js";
|
|
9
|
+
import { resolveTagNames } from "../utils/tag-resolver.js";
|
|
8
10
|
import { debug } from "../utils/debug.js";
|
|
9
|
-
import { withToolErrorHandling } from "../errors/mcp-errors.js";
|
|
11
|
+
import { ensureArrayOrEmpty, throwInternalError, withToolErrorHandling, } from "../errors/mcp-errors.js";
|
|
10
12
|
/** Shared shape — used by both registerTool (SDK schema) and full validation */
|
|
11
13
|
const availableRoomsInputShape = {
|
|
12
14
|
min_capacity: z
|
|
@@ -24,10 +26,14 @@ const availableRoomsInputShape = {
|
|
|
24
26
|
.optional()
|
|
25
27
|
.describe("Maximum room capacity"),
|
|
26
28
|
tags: z
|
|
27
|
-
.array(z.string().min(1, "Tag cannot be empty")
|
|
29
|
+
.array(z.string().trim().min(1, "Tag cannot be empty"))
|
|
28
30
|
.min(1, "tags array cannot be empty")
|
|
29
31
|
.optional()
|
|
30
|
-
.describe("Filter by
|
|
32
|
+
.describe("Filter by tag names (case-insensitive). Use butlr_list_tags to discover what tags exist."),
|
|
33
|
+
tag_match: z
|
|
34
|
+
.enum(["all", "any"])
|
|
35
|
+
.default("all")
|
|
36
|
+
.describe("Multi-tag semantics when tags has more than one entry: 'all' (default) requires every tag, 'any' requires at least one"),
|
|
31
37
|
building_id: z
|
|
32
38
|
.string()
|
|
33
39
|
.regex(/^building_[a-zA-Z0-9_-]+$/, "building_id must match pattern: 'building_<id>'")
|
|
@@ -76,7 +82,7 @@ const AVAILABLE_ROOMS_DESCRIPTION = "Find meeting rooms and collaboration spaces
|
|
|
76
82
|
"When to Use:\n" +
|
|
77
83
|
"- Real-time room availability for immediate use (next 5-10 minutes)\n" +
|
|
78
84
|
"- Filter by capacity (e.g., rooms for 6-8 people)\n" +
|
|
79
|
-
"- Filter by room types using tags (conference, collaboration, focus)
|
|
85
|
+
"- Filter by room types using tags (conference, collaboration, focus). Tag names are case-insensitive; pass tag_match='all' (default) or 'any' for multi-tag semantics. Use butlr_list_tags first to discover what tag vocabulary exists in this org.\n" +
|
|
80
86
|
"- Validating room booking system accuracy against actual occupancy\n" +
|
|
81
87
|
"- Analyzing meeting room demand vs. supply across buildings/floors\n\n" +
|
|
82
88
|
"When NOT to Use:\n" +
|
|
@@ -146,31 +152,33 @@ const GET_ROOMS_BY_BUILDING = gql `
|
|
|
146
152
|
}
|
|
147
153
|
}
|
|
148
154
|
`;
|
|
149
|
-
const GET_ROOMS_BY_TAG = gql `
|
|
150
|
-
query GetRoomsByTag($
|
|
151
|
-
roomsByTag(
|
|
152
|
-
|
|
153
|
-
name
|
|
154
|
-
floorID
|
|
155
|
-
roomType
|
|
156
|
-
capacity {
|
|
157
|
-
max
|
|
158
|
-
mid
|
|
159
|
-
}
|
|
160
|
-
area {
|
|
161
|
-
value
|
|
162
|
-
unit
|
|
163
|
-
}
|
|
164
|
-
coordinates
|
|
165
|
-
customID
|
|
166
|
-
floor {
|
|
155
|
+
export const GET_ROOMS_BY_TAG = gql `
|
|
156
|
+
query GetRoomsByTag($tagIDs: [String!]!, $useOR: Boolean) {
|
|
157
|
+
roomsByTag(tagIDs: $tagIDs, useOR: $useOR) {
|
|
158
|
+
data {
|
|
167
159
|
id
|
|
168
160
|
name
|
|
169
|
-
|
|
170
|
-
|
|
161
|
+
floorID
|
|
162
|
+
roomType
|
|
163
|
+
capacity {
|
|
164
|
+
max
|
|
165
|
+
mid
|
|
166
|
+
}
|
|
167
|
+
area {
|
|
168
|
+
value
|
|
169
|
+
unit
|
|
170
|
+
}
|
|
171
|
+
coordinates
|
|
172
|
+
customID
|
|
173
|
+
floor {
|
|
171
174
|
id
|
|
172
175
|
name
|
|
173
|
-
|
|
176
|
+
building_id
|
|
177
|
+
building {
|
|
178
|
+
id
|
|
179
|
+
name
|
|
180
|
+
site_id
|
|
181
|
+
}
|
|
174
182
|
}
|
|
175
183
|
}
|
|
176
184
|
}
|
|
@@ -217,50 +225,152 @@ const GET_ALL_ROOMS = gql `
|
|
|
217
225
|
*/
|
|
218
226
|
export async function executeAvailableRooms(args) {
|
|
219
227
|
debug("available-rooms", "Finding available rooms with filters:", JSON.stringify(args, null, 2));
|
|
228
|
+
// Strip Zod defaults before exposing args as `filtered_by`. Mirrors
|
|
229
|
+
// butlr_list_tags's behaviour — without this, every response carries
|
|
230
|
+
// `tag_match: "all"` and `max_results: 50` even when the caller never
|
|
231
|
+
// supplied a tag or a result cap, and "no filter applied" is
|
|
232
|
+
// indistinguishable from "default filter applied". The two tools'
|
|
233
|
+
// `filtered_by` shapes drift if this is not consistent.
|
|
234
|
+
const explicitFilters = (() => {
|
|
235
|
+
const out = {};
|
|
236
|
+
if (args.min_capacity !== undefined)
|
|
237
|
+
out.min_capacity = args.min_capacity;
|
|
238
|
+
if (args.max_capacity !== undefined)
|
|
239
|
+
out.max_capacity = args.max_capacity;
|
|
240
|
+
if (args.building_id !== undefined)
|
|
241
|
+
out.building_id = args.building_id;
|
|
242
|
+
if (args.floor_id !== undefined)
|
|
243
|
+
out.floor_id = args.floor_id;
|
|
244
|
+
if (args.tags !== undefined) {
|
|
245
|
+
out.tags = args.tags;
|
|
246
|
+
// tag_match is only meaningful with a non-empty tags filter.
|
|
247
|
+
if (args.tag_match !== undefined && args.tag_match !== "all") {
|
|
248
|
+
out.tag_match = args.tag_match;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (args.max_results !== undefined && args.max_results !== 50) {
|
|
252
|
+
out.max_results = args.max_results;
|
|
253
|
+
}
|
|
254
|
+
return out;
|
|
255
|
+
})();
|
|
256
|
+
const hasExplicitFilters = Object.keys(explicitFilters).length > 0;
|
|
220
257
|
// Query rooms based on scope
|
|
221
258
|
let rooms = [];
|
|
222
259
|
let buildings = [];
|
|
223
260
|
let floors = [];
|
|
261
|
+
const warnings = [];
|
|
262
|
+
let unknownTagNames = [];
|
|
224
263
|
try {
|
|
225
264
|
if (args.floor_id) {
|
|
226
|
-
// Query specific floor
|
|
227
265
|
const result = await apolloClient.query({
|
|
228
266
|
query: GET_ROOMS_BY_FLOOR,
|
|
229
267
|
variables: { floorId: args.floor_id },
|
|
230
268
|
fetchPolicy: "network-only",
|
|
231
269
|
});
|
|
270
|
+
throwIfGraphQLErrors(result);
|
|
232
271
|
if (!result.data?.floor) {
|
|
233
272
|
throw new Error(`Floor ${args.floor_id} not found`);
|
|
234
273
|
}
|
|
235
|
-
rooms = result.data.floor.rooms
|
|
274
|
+
rooms = [...ensureArrayOrEmpty(result.data.floor.rooms, "floor.rooms")];
|
|
236
275
|
floors = [result.data.floor];
|
|
237
276
|
buildings = result.data.floor.building ? [result.data.floor.building] : [];
|
|
238
277
|
}
|
|
239
278
|
else if (args.building_id) {
|
|
240
|
-
// Query specific building
|
|
241
279
|
const result = await apolloClient.query({
|
|
242
280
|
query: GET_ROOMS_BY_BUILDING,
|
|
243
281
|
variables: { buildingId: args.building_id },
|
|
244
282
|
fetchPolicy: "network-only",
|
|
245
283
|
});
|
|
284
|
+
throwIfGraphQLErrors(result);
|
|
246
285
|
if (!result.data?.building) {
|
|
247
286
|
throw new Error(`Building ${args.building_id} not found`);
|
|
248
287
|
}
|
|
249
288
|
buildings = [result.data.building];
|
|
250
|
-
floors = result.data.building.floors
|
|
251
|
-
rooms = floors.flatMap((f) => f.rooms
|
|
289
|
+
floors = [...ensureArrayOrEmpty(result.data.building.floors, "building.floors")];
|
|
290
|
+
rooms = floors.flatMap((f) => [...ensureArrayOrEmpty(f.rooms, "floor.rooms")]);
|
|
252
291
|
}
|
|
253
292
|
else if (args.tags && args.tags.length > 0) {
|
|
254
|
-
//
|
|
293
|
+
// Resolve tag names → tag IDs (the API requires IDs, not names)
|
|
294
|
+
const tagsResult = await apolloClient.query({
|
|
295
|
+
query: GET_TAGS_MINIMAL,
|
|
296
|
+
fetchPolicy: "network-only",
|
|
297
|
+
});
|
|
298
|
+
throwIfGraphQLErrors(tagsResult);
|
|
299
|
+
// Same null-is-violation rule as butlr-list-tags — see comment there.
|
|
300
|
+
const allTags = tagsResult.data?.tags;
|
|
301
|
+
if (!Array.isArray(allTags)) {
|
|
302
|
+
throwInternalError("Unexpected response shape from tags query (expected array, got " +
|
|
303
|
+
`${allTags === null ? "null" : typeof allTags}). Please retry; if persistent, the upstream API contract may have changed.`);
|
|
304
|
+
}
|
|
305
|
+
// Apply tag_match default at the call site so direct invocations
|
|
306
|
+
// (tests bypassing Zod parsing, downstream programmatic callers)
|
|
307
|
+
// get the same semantics as the schema default.
|
|
308
|
+
//
|
|
309
|
+
// The default ("all") here DIFFERS from butlr_list_topology's
|
|
310
|
+
// default ("any") on purpose — available-rooms filters one entity type
|
|
311
|
+
// (rooms), where AND is intuitive; list-topology filters across rooms,
|
|
312
|
+
// zones, and floors, where AND is rarely satisfied. Do not unify these
|
|
313
|
+
// defaults via a shared helper without changing the user-facing
|
|
314
|
+
// semantics described in each tool's description string.
|
|
315
|
+
const tagMatch = args.tag_match ?? "all";
|
|
316
|
+
const resolution = resolveTagNames({
|
|
317
|
+
allTags,
|
|
318
|
+
requestedNames: args.tags,
|
|
319
|
+
match: tagMatch,
|
|
320
|
+
});
|
|
321
|
+
if (resolution.droppedRowCount > 0) {
|
|
322
|
+
warnings.push(`${resolution.droppedRowCount} tag row(s) skipped — upstream returned entries with missing or empty id/name fields.`);
|
|
323
|
+
}
|
|
324
|
+
// Compose the early-return warning from the resolver-prepended
|
|
325
|
+
// warnings array AND the primary diagnostic, so signals like
|
|
326
|
+
// droppedRowCount aren't lost on the no_match / unsatisfiable arms.
|
|
327
|
+
const composeWarning = (primary) => [...warnings, primary].join(" ");
|
|
328
|
+
if (resolution.kind === "no_match") {
|
|
329
|
+
return {
|
|
330
|
+
summary: buildAvailableRoomsSummary({ count: 0, roomType: args.tags?.[0] }),
|
|
331
|
+
available_rooms: [],
|
|
332
|
+
total_available: 0,
|
|
333
|
+
showing: 0,
|
|
334
|
+
timestamp: new Date().toISOString(),
|
|
335
|
+
filtered_by: explicitFilters,
|
|
336
|
+
unknown_tags: resolution.unknownNames,
|
|
337
|
+
warning: composeWarning(`No matching tags found in this org for: ${resolution.unknownNames.join(", ")}. ` +
|
|
338
|
+
"Use butlr_list_tags to see available tag names."),
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
if (resolution.kind === "unsatisfiable") {
|
|
342
|
+
// Gate on the resolver's discriminant rather than re-deriving the
|
|
343
|
+
// all-vs-any rule inline, so the semantics live in one place
|
|
344
|
+
// (resolveTagNames) and can't drift between tools.
|
|
345
|
+
return {
|
|
346
|
+
summary: buildAvailableRoomsSummary({ count: 0, roomType: args.tags?.[0] }),
|
|
347
|
+
available_rooms: [],
|
|
348
|
+
total_available: 0,
|
|
349
|
+
showing: 0,
|
|
350
|
+
timestamp: new Date().toISOString(),
|
|
351
|
+
filtered_by: explicitFilters,
|
|
352
|
+
unknown_tags: resolution.unknownNames,
|
|
353
|
+
warning: composeWarning(`Cannot satisfy tag_match='all': unknown tag(s) ${resolution.unknownNames.join(", ")}. ` +
|
|
354
|
+
"Use butlr_list_tags to see available tag names, or pass tag_match='any' to match rooms tagged with any of the supplied tags."),
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
// resolution.kind === "ok" — safe to read resolvedIds / resolvedRows.
|
|
358
|
+
const { resolvedIds, unknownNames } = resolution;
|
|
359
|
+
if (unknownNames.length > 0) {
|
|
360
|
+
unknownTagNames = unknownNames;
|
|
361
|
+
warnings.push(`Unknown tag(s) ignored: ${unknownNames.join(", ")}. Use butlr_list_tags to see available tag names.`);
|
|
362
|
+
}
|
|
363
|
+
const useOR = tagMatch === "any";
|
|
255
364
|
const result = await apolloClient.query({
|
|
256
365
|
query: GET_ROOMS_BY_TAG,
|
|
257
|
-
variables: {
|
|
366
|
+
variables: { tagIDs: resolvedIds, useOR },
|
|
258
367
|
fetchPolicy: "network-only",
|
|
259
368
|
});
|
|
260
|
-
|
|
261
|
-
|
|
369
|
+
throwIfGraphQLErrors(result);
|
|
370
|
+
if (!result.data?.roomsByTag?.data) {
|
|
371
|
+
throwInternalError("Unexpected response shape from roomsByTag query (missing data envelope). Please retry; if persistent, the upstream API contract may have changed.");
|
|
262
372
|
}
|
|
263
|
-
rooms = result.data.roomsByTag;
|
|
373
|
+
rooms = result.data.roomsByTag.data;
|
|
264
374
|
// Extract floors and buildings from room.floor references
|
|
265
375
|
for (const room of rooms) {
|
|
266
376
|
if (room.floor) {
|
|
@@ -272,17 +382,21 @@ export async function executeAvailableRooms(args) {
|
|
|
272
382
|
}
|
|
273
383
|
}
|
|
274
384
|
else {
|
|
275
|
-
// Query all rooms (org-wide)
|
|
276
385
|
const result = await apolloClient.query({
|
|
277
386
|
query: GET_ALL_ROOMS,
|
|
278
387
|
fetchPolicy: "network-only",
|
|
279
388
|
});
|
|
389
|
+
throwIfGraphQLErrors(result);
|
|
280
390
|
if (!result.data?.sites?.data) {
|
|
281
|
-
|
|
391
|
+
throwInternalError("Unexpected response shape from sites query (missing data envelope). Please retry; if persistent, the upstream API contract may have changed.");
|
|
282
392
|
}
|
|
283
|
-
buildings = result.data.sites.data.flatMap((s) =>
|
|
284
|
-
|
|
285
|
-
|
|
393
|
+
buildings = result.data.sites.data.flatMap((s) => [
|
|
394
|
+
...ensureArrayOrEmpty(s.buildings, "site.buildings"),
|
|
395
|
+
]);
|
|
396
|
+
floors = buildings.flatMap((b) => [
|
|
397
|
+
...ensureArrayOrEmpty(b.floors, "building.floors"),
|
|
398
|
+
]);
|
|
399
|
+
rooms = floors.flatMap((f) => [...ensureArrayOrEmpty(f.rooms, "floor.rooms")]);
|
|
286
400
|
}
|
|
287
401
|
}
|
|
288
402
|
catch (error) {
|
|
@@ -291,7 +405,6 @@ export async function executeAvailableRooms(args) {
|
|
|
291
405
|
}
|
|
292
406
|
debug("available-rooms", `Found ${rooms.length} rooms before filtering`);
|
|
293
407
|
// Apply capacity filters and track rooms excluded due to missing capacity data
|
|
294
|
-
const warnings = [];
|
|
295
408
|
if (args.min_capacity !== undefined || args.max_capacity !== undefined) {
|
|
296
409
|
const roomsWithoutCapacity = rooms.filter((r) => !r.capacity?.max).length;
|
|
297
410
|
const minCapacity = args.min_capacity;
|
|
@@ -319,11 +432,15 @@ export async function executeAvailableRooms(args) {
|
|
|
319
432
|
timestamp: new Date().toISOString(),
|
|
320
433
|
};
|
|
321
434
|
if (Object.keys(args).length > 0) {
|
|
322
|
-
|
|
435
|
+
if (hasExplicitFilters)
|
|
436
|
+
response.filtered_by = explicitFilters;
|
|
323
437
|
}
|
|
324
438
|
if (warnings.length > 0) {
|
|
325
439
|
response.warning = warnings.join(" ");
|
|
326
440
|
}
|
|
441
|
+
if (unknownTagNames.length > 0) {
|
|
442
|
+
response.unknown_tags = unknownTagNames;
|
|
443
|
+
}
|
|
327
444
|
return response;
|
|
328
445
|
}
|
|
329
446
|
// Get current occupancy for all rooms
|
|
@@ -361,7 +478,18 @@ export async function executeAvailableRooms(args) {
|
|
|
361
478
|
setBulkCachedOccupancy(cacheEntries);
|
|
362
479
|
}
|
|
363
480
|
catch (error) {
|
|
364
|
-
|
|
481
|
+
// Translate auth / rate-limit / validation errors via the MCP error
|
|
482
|
+
// pipeline so the user gets actionable AUTH_EXPIRED / RATE_LIMITED
|
|
483
|
+
// signals instead of a generic "occupancy unavailable" warning.
|
|
484
|
+
// Only unknown / non-translatable errors fall through to the
|
|
485
|
+
// cache-only degraded path below.
|
|
486
|
+
rethrowIfGraphQLError(error);
|
|
487
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
488
|
+
debug("available-rooms", "Failed to get occupancy data:", msg);
|
|
489
|
+
// Include the upstream message in the user-visible warning so an
|
|
490
|
+
// operator inspecting a degraded response can correlate without
|
|
491
|
+
// needing DEBUG=butlr-mcp turned on.
|
|
492
|
+
warnings.push(`real-time occupancy unavailable (${msg}); availability inferred from cached topology where possible`);
|
|
365
493
|
occupancyFetchFailed = true;
|
|
366
494
|
}
|
|
367
495
|
}
|
|
@@ -448,7 +576,8 @@ export async function executeAvailableRooms(args) {
|
|
|
448
576
|
timestamp: new Date().toISOString(),
|
|
449
577
|
};
|
|
450
578
|
if (Object.keys(args).length > 0) {
|
|
451
|
-
|
|
579
|
+
if (hasExplicitFilters)
|
|
580
|
+
response.filtered_by = explicitFilters;
|
|
452
581
|
}
|
|
453
582
|
if (buildingContext) {
|
|
454
583
|
response.building_context = buildingContext;
|
|
@@ -459,6 +588,9 @@ export async function executeAvailableRooms(args) {
|
|
|
459
588
|
if (warnings.length > 0) {
|
|
460
589
|
response.warning = warnings.join(" ");
|
|
461
590
|
}
|
|
591
|
+
if (unknownTagNames.length > 0) {
|
|
592
|
+
response.unknown_tags = unknownTagNames;
|
|
593
|
+
}
|
|
462
594
|
return response;
|
|
463
595
|
}
|
|
464
596
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"butlr-available-rooms.js","sourceRoot":"","sources":["../../src/tools/butlr-available-rooms.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"butlr-available-rooms.js","sourceRoot":"","sources":["../../src/tools/butlr-available-rooms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"butlr-fetch-entity-details.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-fetch-entity-details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EAAE,0BAA0B,EAAgB,MAAM,uBAAuB,CAAC;AA4DtF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAkD,CAAC;AAE5F,KAAK,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"butlr-fetch-entity-details.d.ts","sourceRoot":"","sources":["../../src/tools/butlr-fetch-entity-details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EAAE,0BAA0B,EAAgB,MAAM,uBAAuB,CAAC;AA4DtF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAkD,CAAC;AAE5F,KAAK,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAgG5E;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,0BAA0B,CAAC,CAoIrC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBlE"}
|
|
@@ -56,6 +56,12 @@ export const FetchEntityDetailsArgsSchema = z.object(fetchEntityDetailsInputShap
|
|
|
56
56
|
/**
|
|
57
57
|
* Build GraphQL query dynamically based on requested fields
|
|
58
58
|
*/
|
|
59
|
+
// GraphQL object-typed fields require an explicit subselection. The
|
|
60
|
+
// allowlist guard only checks for safe identifiers; the emitted query
|
|
61
|
+
// substitutes the canonical subselection for any field listed here.
|
|
62
|
+
const FIELD_SELECTIONS = {
|
|
63
|
+
tags: "tags { id name }",
|
|
64
|
+
};
|
|
59
65
|
function buildQueryForFields(type, fields) {
|
|
60
66
|
// Defense-in-depth: reject any field name that isn't a simple identifier
|
|
61
67
|
for (const field of fields) {
|
|
@@ -63,7 +69,7 @@ function buildQueryForFields(type, fields) {
|
|
|
63
69
|
throw new Error(`Invalid field name: ${field}`);
|
|
64
70
|
}
|
|
65
71
|
}
|
|
66
|
-
const fieldList = fields.join("\n ");
|
|
72
|
+
const fieldList = fields.map((f) => FIELD_SELECTIONS[f] ?? f).join("\n ");
|
|
67
73
|
switch (type) {
|
|
68
74
|
case "site":
|
|
69
75
|
return gql `
|
|
@@ -1 +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,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,MAAM,gCAAgC,GACpC,6EAA6E;IAC7E,yGAAyG;IACzG,2DAA2D;IAC3D,4GAA4G;IAC5G,8FAA8F;IAC9F,oBAAoB;IACpB,6GAA6G;IAC7G,mFAAmF;IACnF,gFAAgF;IAChF,iFAAiF,CAAC;AAEpF,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;
|
|
1
|
+
{"version":3,"file":"butlr-fetch-entity-details.js","sourceRoot":"","sources":["../../src/tools/butlr-fetch-entity-details.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;AAoCxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;EAYnC,CAAC;
|
|
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;AAoCxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;EAYnC,CAAC;AAoCJ;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAsQ7E;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB;;;;;;;;;;GAoGrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB/D"}
|
|
@@ -48,13 +48,15 @@ const GET_ASSET_DETAILS_DESCRIPTION = "Get comprehensive details for specific as
|
|
|
48
48
|
"5. \"Show me sensor MAC addresses for Room 'Café Barista' for field tech visit\"\n" +
|
|
49
49
|
'6. "Get hive serial numbers and online status for Building 2"\n' +
|
|
50
50
|
'7. "Show me site timezone and all buildings in the Chicago office"\n' +
|
|
51
|
-
'8. "Get room coordinates and rotation for floor plan mapping"\n
|
|
51
|
+
'8. "Get room coordinates and rotation for floor plan mapping"\n' +
|
|
52
|
+
'9. "Which tags are applied to this room?" (after finding the room ID via butlr_search_assets — tags always returned for rooms/zones/floors)\n\n' +
|
|
52
53
|
"When to Use:\n" +
|
|
53
54
|
"- Have asset IDs and need detailed configuration, metadata, or relationships\n" +
|
|
54
55
|
"- Validating sensor/hive assignments for troubleshooting (which hive is this sensor on?)\n" +
|
|
55
56
|
"- Need room capacities, areas, or coordinates for space planning or floor plan integrations\n" +
|
|
56
57
|
"- Preparing for field technician site visit (need device identifiers: MACs, serials)\n" +
|
|
57
|
-
"- Building integrations and need to fetch parent context (room → floor → building → site)\n
|
|
58
|
+
"- Building integrations and need to fetch parent context (room → floor → building → site)\n" +
|
|
59
|
+
"- Inspecting which tags a specific room/zone/floor carries without searching the org tag list\n\n" +
|
|
58
60
|
"When NOT to Use:\n" +
|
|
59
61
|
"- Don't have asset IDs yet → use butlr_search_assets first to find IDs by name\n" +
|
|
60
62
|
"- Need real-time occupancy or sensor data → use occupancy/traffic tools instead\n" +
|
|
@@ -62,7 +64,8 @@ const GET_ASSET_DETAILS_DESCRIPTION = "Get comprehensive details for specific as
|
|
|
62
64
|
"- Need to update/configure assets → this is read-only; use Butlr Dashboard for changes\n\n" +
|
|
63
65
|
"Options: include_children (default true), include_devices (default false), include_parent_context (default true)\n\n" +
|
|
64
66
|
"Batch Query: Supports multiple IDs in single call - mixed asset types supported\n\n" +
|
|
65
|
-
"
|
|
67
|
+
"Tags: rooms, zones, and floors include a `tags: [{id, name}]` array in the response (always present, empty if the asset has no tags). Buildings and sites do not have tags in the data model. Tags appear only on the top-level requested asset — when `include_children: true`, nested rooms/zones inside a floor response do NOT carry their own `tags`; call butlr_get_asset_details again with specific child IDs (up to 50 per batch) to see those. To discover what tag vocabulary exists in the org, use butlr_list_tags.\n\n" +
|
|
68
|
+
"See Also: butlr_search_assets, butlr_list_topology, butlr_list_tags, butlr_fetch_entity_details, butlr_hardware_snapshot";
|
|
66
69
|
/**
|
|
67
70
|
* Build GraphQL query based on asset type and options
|
|
68
71
|
*/
|
|
@@ -133,6 +136,12 @@ function buildQuery(type, includeChildren, includeDevices, includeParentContext)
|
|
|
133
136
|
}
|
|
134
137
|
`;
|
|
135
138
|
case "floor":
|
|
139
|
+
// `tags { id name }` is always selected (no opt-in flag) — tags are
|
|
140
|
+
// entity metadata on the same level as name/capacity/area, not a
|
|
141
|
+
// fan-out relation that scales with topology size. The top-level
|
|
142
|
+
// asset gets its own tags; nested children (rooms/zones below)
|
|
143
|
+
// stay minimal — call `butlr_get_asset_details` on a specific
|
|
144
|
+
// child ID to see its tags.
|
|
136
145
|
return gql `
|
|
137
146
|
query GetFloorDetails($id: ID!) {
|
|
138
147
|
floor(id: $id) {
|
|
@@ -145,6 +154,7 @@ function buildQuery(type, includeChildren, includeDevices, includeParentContext)
|
|
|
145
154
|
customID
|
|
146
155
|
capacity { max mid }
|
|
147
156
|
area { value unit }
|
|
157
|
+
tags { id name }
|
|
148
158
|
${includeParentContext
|
|
149
159
|
? `
|
|
150
160
|
building {
|
|
@@ -204,6 +214,8 @@ function buildQuery(type, includeChildren, includeDevices, includeParentContext)
|
|
|
204
214
|
}
|
|
205
215
|
`;
|
|
206
216
|
case "room":
|
|
217
|
+
// `tags { id name }` is always selected — entity metadata, not a
|
|
218
|
+
// fan-out relation. Cost is bounded by the per-entity tag count.
|
|
207
219
|
return gql `
|
|
208
220
|
query GetRoomDetails($id: ID!) {
|
|
209
221
|
room(id: $id) {
|
|
@@ -216,6 +228,7 @@ function buildQuery(type, includeChildren, includeDevices, includeParentContext)
|
|
|
216
228
|
coordinates
|
|
217
229
|
rotation
|
|
218
230
|
note
|
|
231
|
+
tags { id name }
|
|
219
232
|
${includeParentContext
|
|
220
233
|
? `
|
|
221
234
|
floor {
|
|
@@ -250,6 +263,8 @@ function buildQuery(type, includeChildren, includeDevices, includeParentContext)
|
|
|
250
263
|
}
|
|
251
264
|
`;
|
|
252
265
|
case "zone":
|
|
266
|
+
// `tags { id name }` is always selected — entity metadata, not a
|
|
267
|
+
// fan-out relation. Cost is bounded by the per-entity tag count.
|
|
253
268
|
return gql `
|
|
254
269
|
query GetZoneDetails($id: ID!) {
|
|
255
270
|
zone(id: $id) {
|
|
@@ -262,6 +277,7 @@ function buildQuery(type, includeChildren, includeDevices, includeParentContext)
|
|
|
262
277
|
coordinates
|
|
263
278
|
rotation
|
|
264
279
|
note
|
|
280
|
+
tags { id name }
|
|
265
281
|
${includeDevices
|
|
266
282
|
? `
|
|
267
283
|
sensors {
|
|
@@ -331,7 +347,16 @@ export async function executeGetAssetDetails(args) {
|
|
|
331
347
|
}
|
|
332
348
|
const asset = data[type];
|
|
333
349
|
if (asset && typeof asset === "object") {
|
|
334
|
-
|
|
350
|
+
const assetRecord = { ...asset };
|
|
351
|
+
// The MCP tool description guarantees `tags: TagRef[]` is always
|
|
352
|
+
// present on room/zone/floor responses. Apollo `errorPolicy: 'all'`
|
|
353
|
+
// and nullable list resolvers can yield `tags: null` or omit the
|
|
354
|
+
// field on partial-error paths; coerce here so the wire contract
|
|
355
|
+
// and the TypeScript type agree at the tool boundary.
|
|
356
|
+
if (type === "room" || type === "zone" || type === "floor") {
|
|
357
|
+
assetRecord.tags = Array.isArray(assetRecord.tags) ? assetRecord.tags : [];
|
|
358
|
+
}
|
|
359
|
+
results.push({ ...assetRecord, _type: type });
|
|
335
360
|
}
|
|
336
361
|
else {
|
|
337
362
|
debug("get-asset-details", `Asset not found: ${id}`);
|