@butlr/butlr-mcp-server 0.1.2 → 0.2.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 (46) hide show
  1. package/README.md +27 -1
  2. package/dist/clients/queries/tags.d.ts +39 -0
  3. package/dist/clients/queries/tags.d.ts.map +1 -0
  4. package/dist/clients/queries/tags.js +42 -0
  5. package/dist/clients/queries/tags.js.map +1 -0
  6. package/dist/clients/types.d.ts +2 -2
  7. package/dist/clients/types.d.ts.map +1 -1
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/tools/butlr-available-rooms.d.ts +25 -1
  11. package/dist/tools/butlr-available-rooms.d.ts.map +1 -1
  12. package/dist/tools/butlr-available-rooms.js +114 -35
  13. package/dist/tools/butlr-available-rooms.js.map +1 -1
  14. package/dist/tools/butlr-get-current-occupancy.d.ts.map +1 -1
  15. package/dist/tools/butlr-get-current-occupancy.js +13 -3
  16. package/dist/tools/butlr-get-current-occupancy.js.map +1 -1
  17. package/dist/tools/butlr-get-occupancy-timeseries.d.ts.map +1 -1
  18. package/dist/tools/butlr-get-occupancy-timeseries.js +17 -7
  19. package/dist/tools/butlr-get-occupancy-timeseries.js.map +1 -1
  20. package/dist/tools/butlr-list-tags.d.ts +32 -0
  21. package/dist/tools/butlr-list-tags.d.ts.map +1 -0
  22. package/dist/tools/butlr-list-tags.js +108 -0
  23. package/dist/tools/butlr-list-tags.js.map +1 -0
  24. package/dist/tools/butlr-space-busyness.d.ts.map +1 -1
  25. package/dist/tools/butlr-space-busyness.js +13 -3
  26. package/dist/tools/butlr-space-busyness.js.map +1 -1
  27. package/dist/tools/butlr-traffic-flow.d.ts.map +1 -1
  28. package/dist/tools/butlr-traffic-flow.js +5 -6
  29. package/dist/tools/butlr-traffic-flow.js.map +1 -1
  30. package/dist/types/responses.d.ts +4 -0
  31. package/dist/types/responses.d.ts.map +1 -1
  32. package/dist/utils/asset-flattener.js +2 -2
  33. package/dist/utils/asset-flattener.js.map +1 -1
  34. package/dist/utils/graphql-helpers.d.ts +13 -0
  35. package/dist/utils/graphql-helpers.d.ts.map +1 -1
  36. package/dist/utils/graphql-helpers.js +25 -0
  37. package/dist/utils/graphql-helpers.js.map +1 -1
  38. package/dist/utils/occupancy-helpers.d.ts +2 -0
  39. package/dist/utils/occupancy-helpers.d.ts.map +1 -1
  40. package/dist/utils/occupancy-helpers.js +8 -5
  41. package/dist/utils/occupancy-helpers.js.map +1 -1
  42. package/dist/utils/timezone-helpers.d.ts +8 -3
  43. package/dist/utils/timezone-helpers.d.ts.map +1 -1
  44. package/dist/utils/timezone-helpers.js +22 -14
  45. package/dist/utils/timezone-helpers.js.map +1 -1
  46. package/package.json +1 -1
package/README.md CHANGED
@@ -18,7 +18,7 @@ A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that co
18
18
  ## Prerequisites
19
19
 
20
20
  - [Node.js](https://nodejs.org/) 18 or higher
21
- - An MCP-compatible client ([Claude Desktop](https://claude.ai/download), [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [VS Code](https://code.visualstudio.com/), [Cursor](https://cursor.com/), etc.)
21
+ - An MCP-compatible client ([Claude Desktop](https://claude.ai/download), [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://developers.openai.com/codex/cli), [VS Code](https://code.visualstudio.com/), [Cursor](https://cursor.com/), etc.)
22
22
  - Butlr API token — see [Getting API Credentials](#getting-api-credentials)
23
23
 
24
24
  ## Quick Start
@@ -57,6 +57,32 @@ claude mcp add butlr \
57
57
 
58
58
  </details>
59
59
 
60
+ <details>
61
+ <summary><strong>Codex CLI</strong></summary>
62
+
63
+ Add with the `codex mcp` command:
64
+
65
+ ```bash
66
+ codex mcp add butlr \
67
+ --env BUTLR_CLIENT_ID=your_client_id \
68
+ --env BUTLR_CLIENT_SECRET=your_client_secret \
69
+ -- npx -y @butlr/butlr-mcp-server@latest
70
+ ```
71
+
72
+ Or edit `~/.codex/config.toml` directly:
73
+
74
+ ```toml
75
+ [mcp_servers.butlr]
76
+ command = "npx"
77
+ args = ["-y", "@butlr/butlr-mcp-server@latest"]
78
+
79
+ [mcp_servers.butlr.env]
80
+ BUTLR_CLIENT_ID = "your_client_id"
81
+ BUTLR_CLIENT_SECRET = "your_client_secret"
82
+ ```
83
+
84
+ </details>
85
+
60
86
  <details>
61
87
  <summary><strong>VS Code (Copilot)</strong></summary>
62
88
 
@@ -0,0 +1,39 @@
1
+ /**
2
+ * GraphQL queries for tag retrieval and lookups.
3
+ *
4
+ * Tags are org-scoped: a single tag (id, name, organization_id) can be
5
+ * applied to any combination of rooms, zones, and floors via separate
6
+ * association tables. There is no per-level tag namespace.
7
+ */
8
+ /**
9
+ * Branded string types for tag identifiers.
10
+ *
11
+ * The Butlr API filter `roomsByTag` accepts tag *IDs*, not tag *names*.
12
+ * These two are both `string` at runtime, which previously led to silent
13
+ * filter failures when names were sent in the IDs slot. Branding them keeps
14
+ * the distinction visible at the type level so the wrong one cannot be
15
+ * passed by accident.
16
+ */
17
+ export type TagId = string & {
18
+ readonly __brand: "TagId";
19
+ };
20
+ export type TagName = string & {
21
+ readonly __brand: "TagName";
22
+ };
23
+ export declare const asTagId: (value: string) => TagId;
24
+ export declare const asTagName: (value: string) => TagName;
25
+ /**
26
+ * List every tag in the org along with its application footprint.
27
+ *
28
+ * Each tag's `rooms`, `zones`, and `floors` arrays are returned with
29
+ * id-only payloads so the response stays bounded by tag count.
30
+ */
31
+ export declare const GET_TAGS_WITH_USAGE: import("@apollo/client").DocumentNode;
32
+ /**
33
+ * Minimal tag listing — id and name only.
34
+ *
35
+ * Used to resolve user-supplied tag names to tag IDs before invoking
36
+ * tag-filtered queries (e.g. `roomsByTag(tagIDs:..)`).
37
+ */
38
+ export declare const GET_TAGS_MINIMAL: import("@apollo/client").DocumentNode;
39
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/clients/queries/tags.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAC3D,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,KAAG,KAAuB,CAAC;AAChE,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,OAA2B,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,uCAiB/B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,uCAO5B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { gql } from "@apollo/client";
2
+ export const asTagId = (value) => value;
3
+ export const asTagName = (value) => value;
4
+ /**
5
+ * List every tag in the org along with its application footprint.
6
+ *
7
+ * Each tag's `rooms`, `zones`, and `floors` arrays are returned with
8
+ * id-only payloads so the response stays bounded by tag count.
9
+ */
10
+ export const GET_TAGS_WITH_USAGE = gql `
11
+ query GetTagsWithUsage {
12
+ tags {
13
+ id
14
+ name
15
+ organization_id
16
+ rooms {
17
+ id
18
+ }
19
+ zones {
20
+ id
21
+ }
22
+ floors {
23
+ id
24
+ }
25
+ }
26
+ }
27
+ `;
28
+ /**
29
+ * Minimal tag listing — id and name only.
30
+ *
31
+ * Used to resolve user-supplied tag names to tag IDs before invoking
32
+ * tag-filtered queries (e.g. `roomsByTag(tagIDs:..)`).
33
+ */
34
+ export const GET_TAGS_MINIMAL = gql `
35
+ query GetTagsMinimal {
36
+ tags {
37
+ id
38
+ name
39
+ }
40
+ }
41
+ `;
42
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/clients/queries/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAsBrC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAS,EAAE,CAAC,KAAc,CAAC;AAChE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAgB,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;CAiBrC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;;;;;;;CAOlC,CAAC"}
@@ -24,7 +24,7 @@ export interface Area {
24
24
  export interface Site {
25
25
  id: string;
26
26
  name: string;
27
- timezone: string;
27
+ timezone: string | null;
28
28
  org_id: string;
29
29
  siteNumber?: number;
30
30
  customID?: string;
@@ -55,7 +55,7 @@ export interface Floor {
55
55
  name: string;
56
56
  building_id: string;
57
57
  floorNumber?: number;
58
- timezone: string;
58
+ timezone: string | null;
59
59
  installation_date: number;
60
60
  installation_status?: string;
61
61
  service_status?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/clients/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/clients/types.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import { registerListTopology } from "./tools/butlr-list-topology.js";
12
12
  import { registerFetchEntityDetails } from "./tools/butlr-fetch-entity-details.js";
13
13
  import { registerGetOccupancyTimeseries } from "./tools/butlr-get-occupancy-timeseries.js";
14
14
  import { registerGetCurrentOccupancy } from "./tools/butlr-get-current-occupancy.js";
15
+ import { registerListTags } from "./tools/butlr-list-tags.js";
15
16
  import { debug } from "./utils/debug.js";
16
17
  const require = createRequire(import.meta.url);
17
18
  const { version: SERVER_VERSION } = require("../package.json");
@@ -31,6 +32,7 @@ registerListTopology(server);
31
32
  registerFetchEntityDetails(server);
32
33
  registerGetOccupancyTimeseries(server);
33
34
  registerGetCurrentOccupancy(server);
35
+ registerListTags(server);
34
36
  async function main() {
35
37
  const transport = new StdioServerTransport();
36
38
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtF,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAEH,qBAAqB;AACrB,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACnC,8BAA8B,CAAC,MAAM,CAAC,CAAC;AACvC,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAEpC,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,KAAK,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;IACxD,KAAK,CAAC,WAAW,EAAE,YAAY,cAAc,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtF,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAEH,qBAAqB;AACrB,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACnC,8BAA8B,CAAC,MAAM,CAAC,CAAC;AACvC,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACpC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,KAAK,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;IACxD,KAAK,CAAC,WAAW,EAAE,YAAY,cAAc,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,15 +1,18 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { z } from "zod";
3
+ import { type TagName } from "../clients/queries/tags.js";
3
4
  import type { AvailableRoomsResponse } from "../types/responses.js";
4
5
  export declare const AvailableRoomsArgsSchema: z.ZodEffects<z.ZodObject<{
5
6
  min_capacity: z.ZodOptional<z.ZodNumber>;
6
7
  max_capacity: z.ZodOptional<z.ZodNumber>;
7
8
  tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ tag_match: z.ZodDefault<z.ZodEnum<["all", "any"]>>;
8
10
  building_id: z.ZodOptional<z.ZodString>;
9
11
  floor_id: z.ZodOptional<z.ZodString>;
10
12
  max_results: z.ZodDefault<z.ZodNumber>;
11
13
  }, "strict", z.ZodTypeAny, {
12
14
  max_results: number;
15
+ tag_match: "all" | "any";
13
16
  building_id?: string | undefined;
14
17
  tags?: string[] | undefined;
15
18
  min_capacity?: number | undefined;
@@ -21,9 +24,11 @@ export declare const AvailableRoomsArgsSchema: z.ZodEffects<z.ZodObject<{
21
24
  tags?: string[] | undefined;
22
25
  min_capacity?: number | undefined;
23
26
  max_capacity?: number | undefined;
27
+ tag_match?: "all" | "any" | undefined;
24
28
  floor_id?: string | undefined;
25
29
  }>, {
26
30
  max_results: number;
31
+ tag_match: "all" | "any";
27
32
  building_id?: string | undefined;
28
33
  tags?: string[] | undefined;
29
34
  min_capacity?: number | undefined;
@@ -35,13 +40,32 @@ export declare const AvailableRoomsArgsSchema: z.ZodEffects<z.ZodObject<{
35
40
  tags?: string[] | undefined;
36
41
  min_capacity?: number | undefined;
37
42
  max_capacity?: number | undefined;
43
+ tag_match?: "all" | "any" | undefined;
38
44
  floor_id?: string | undefined;
39
45
  }>;
40
46
  export type AvailableRoomsArgs = z.output<typeof AvailableRoomsArgsSchema>;
47
+ export declare const GET_ROOMS_BY_TAG: import("@apollo/client").DocumentNode;
41
48
  /**
42
49
  * Execute available rooms tool
43
50
  */
44
- export declare function executeAvailableRooms(args: AvailableRoomsArgs): Promise<AvailableRoomsResponse>;
51
+ export declare function executeAvailableRooms(args: AvailableRoomsArgs): Promise<AvailableRoomsResponse | {
52
+ summary: string;
53
+ available_rooms: never[];
54
+ total_available: number;
55
+ showing: number;
56
+ timestamp: string;
57
+ filtered_by: {
58
+ max_results: number;
59
+ tag_match: "all" | "any";
60
+ building_id?: string | undefined;
61
+ tags?: string[] | undefined;
62
+ min_capacity?: number | undefined;
63
+ max_capacity?: number | undefined;
64
+ floor_id?: string | undefined;
65
+ };
66
+ unknown_tags: TagName[];
67
+ warning: string;
68
+ }>;
45
69
  /**
46
70
  * Register butlr_available_rooms with an McpServer instance
47
71
  */
@@ -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;AAMxB,OAAO,KAAK,EAAiB,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAoDpG,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAclC,CAAC;AAgCJ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAoI3E;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,mCA2SnE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB9D"}
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;AAMxB,OAAO,EAKL,KAAK,OAAO,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAiB,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AA2EpG,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,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;;;;;;GA8XnE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB9D"}
@@ -4,9 +4,18 @@ 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, asTagId, asTagName, } from "../clients/queries/tags.js";
8
9
  import { debug } from "../utils/debug.js";
9
- import { withToolErrorHandling } from "../errors/mcp-errors.js";
10
+ import { withToolErrorHandling, formatMCPError, MCPErrorCode, } from "../errors/mcp-errors.js";
11
+ function throwInternalError(message) {
12
+ const mcpError = {
13
+ code: MCPErrorCode.INTERNAL_ERROR,
14
+ message,
15
+ retryable: true,
16
+ };
17
+ throw new Error(formatMCPError(mcpError));
18
+ }
10
19
  /** Shared shape — used by both registerTool (SDK schema) and full validation */
11
20
  const availableRoomsInputShape = {
12
21
  min_capacity: z
@@ -27,7 +36,11 @@ const availableRoomsInputShape = {
27
36
  .array(z.string().min(1, "Tag cannot be empty").trim())
28
37
  .min(1, "tags array cannot be empty")
29
38
  .optional()
30
- .describe("Filter by room tags"),
39
+ .describe("Filter by tag names (case-insensitive). Use butlr_list_tags to discover what tags exist."),
40
+ tag_match: z
41
+ .enum(["all", "any"])
42
+ .default("all")
43
+ .describe("Multi-tag semantics when tags has more than one entry: 'all' (default) requires every tag, 'any' requires at least one"),
31
44
  building_id: z
32
45
  .string()
33
46
  .regex(/^building_[a-zA-Z0-9_-]+$/, "building_id must match pattern: 'building_<id>'")
@@ -76,7 +89,7 @@ const AVAILABLE_ROOMS_DESCRIPTION = "Find meeting rooms and collaboration spaces
76
89
  "When to Use:\n" +
77
90
  "- Real-time room availability for immediate use (next 5-10 minutes)\n" +
78
91
  "- Filter by capacity (e.g., rooms for 6-8 people)\n" +
79
- "- Filter by room types using tags (conference, collaboration, focus)\n" +
92
+ "- 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
93
  "- Validating room booking system accuracy against actual occupancy\n" +
81
94
  "- Analyzing meeting room demand vs. supply across buildings/floors\n\n" +
82
95
  "When NOT to Use:\n" +
@@ -146,31 +159,33 @@ const GET_ROOMS_BY_BUILDING = gql `
146
159
  }
147
160
  }
148
161
  `;
149
- const GET_ROOMS_BY_TAG = gql `
150
- query GetRoomsByTag($tags: [String!]!) {
151
- roomsByTag(tags: $tags) {
152
- id
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 {
162
+ export const GET_ROOMS_BY_TAG = gql `
163
+ query GetRoomsByTag($tagIDs: [String!]!, $useOR: Boolean) {
164
+ roomsByTag(tagIDs: $tagIDs, useOR: $useOR) {
165
+ data {
167
166
  id
168
167
  name
169
- building_id
170
- building {
168
+ floorID
169
+ roomType
170
+ capacity {
171
+ max
172
+ mid
173
+ }
174
+ area {
175
+ value
176
+ unit
177
+ }
178
+ coordinates
179
+ customID
180
+ floor {
171
181
  id
172
182
  name
173
- site_id
183
+ building_id
184
+ building {
185
+ id
186
+ name
187
+ site_id
188
+ }
174
189
  }
175
190
  }
176
191
  }
@@ -221,14 +236,16 @@ export async function executeAvailableRooms(args) {
221
236
  let rooms = [];
222
237
  let buildings = [];
223
238
  let floors = [];
239
+ const warnings = [];
240
+ let unknownTagNames = [];
224
241
  try {
225
242
  if (args.floor_id) {
226
- // Query specific floor
227
243
  const result = await apolloClient.query({
228
244
  query: GET_ROOMS_BY_FLOOR,
229
245
  variables: { floorId: args.floor_id },
230
246
  fetchPolicy: "network-only",
231
247
  });
248
+ throwIfGraphQLErrors(result);
232
249
  if (!result.data?.floor) {
233
250
  throw new Error(`Floor ${args.floor_id} not found`);
234
251
  }
@@ -237,12 +254,12 @@ export async function executeAvailableRooms(args) {
237
254
  buildings = result.data.floor.building ? [result.data.floor.building] : [];
238
255
  }
239
256
  else if (args.building_id) {
240
- // Query specific building
241
257
  const result = await apolloClient.query({
242
258
  query: GET_ROOMS_BY_BUILDING,
243
259
  variables: { buildingId: args.building_id },
244
260
  fetchPolicy: "network-only",
245
261
  });
262
+ throwIfGraphQLErrors(result);
246
263
  if (!result.data?.building) {
247
264
  throw new Error(`Building ${args.building_id} not found`);
248
265
  }
@@ -251,16 +268,73 @@ export async function executeAvailableRooms(args) {
251
268
  rooms = floors.flatMap((f) => f.rooms || []);
252
269
  }
253
270
  else if (args.tags && args.tags.length > 0) {
254
- // Query by tags
271
+ // Resolve tag names → tag IDs (the API requires IDs, not names)
272
+ const tagsResult = await apolloClient.query({
273
+ query: GET_TAGS_MINIMAL,
274
+ fetchPolicy: "network-only",
275
+ });
276
+ throwIfGraphQLErrors(tagsResult);
277
+ const allTags = tagsResult.data?.tags ?? [];
278
+ // Lookup is keyed by lowercased name; values are typed TagIds so the
279
+ // resolver boundary cannot accidentally surface raw names downstream.
280
+ const lookup = new Map(allTags.map((t) => [t.name.toLowerCase(), asTagId(t.id)]));
281
+ const resolvedIDs = [];
282
+ const unknownNames = [];
283
+ for (const rawName of args.tags) {
284
+ const name = asTagName(rawName);
285
+ const id = lookup.get(name.toLowerCase());
286
+ if (id) {
287
+ resolvedIDs.push(id);
288
+ }
289
+ else {
290
+ unknownNames.push(name);
291
+ }
292
+ }
293
+ if (resolvedIDs.length === 0) {
294
+ return {
295
+ summary: buildAvailableRoomsSummary({ count: 0, roomType: args.tags?.[0] }),
296
+ available_rooms: [],
297
+ total_available: 0,
298
+ showing: 0,
299
+ timestamp: new Date().toISOString(),
300
+ filtered_by: args,
301
+ unknown_tags: unknownNames,
302
+ warning: `No matching tags found in this org for: ${unknownNames.join(", ")}. ` +
303
+ "Use butlr_list_tags to see available tag names.",
304
+ };
305
+ }
306
+ // Under tag_match='all' (the default), an unresolved tag means the AND
307
+ // constraint is unsatisfiable — querying with the resolved subset would
308
+ // return a strictly broader result that silently answers a different
309
+ // question. Only continue-with-warning is safe under tag_match='any'.
310
+ if (unknownNames.length > 0 && args.tag_match !== "any") {
311
+ return {
312
+ summary: buildAvailableRoomsSummary({ count: 0, roomType: args.tags?.[0] }),
313
+ available_rooms: [],
314
+ total_available: 0,
315
+ showing: 0,
316
+ timestamp: new Date().toISOString(),
317
+ filtered_by: args,
318
+ unknown_tags: unknownNames,
319
+ warning: `Cannot satisfy tag_match='all': unknown tag(s) ${unknownNames.join(", ")}. ` +
320
+ "Use butlr_list_tags to see available tag names, or pass tag_match='any' to match rooms tagged with any of the supplied tags.",
321
+ };
322
+ }
323
+ if (unknownNames.length > 0) {
324
+ unknownTagNames = unknownNames;
325
+ warnings.push(`Unknown tag(s) ignored: ${unknownNames.join(", ")}. Use butlr_list_tags to see available tag names.`);
326
+ }
327
+ const useOR = args.tag_match === "any";
255
328
  const result = await apolloClient.query({
256
329
  query: GET_ROOMS_BY_TAG,
257
- variables: { tags: args.tags },
330
+ variables: { tagIDs: resolvedIDs, useOR },
258
331
  fetchPolicy: "network-only",
259
332
  });
260
- if (!result.data?.roomsByTag) {
261
- throw new Error("Invalid response structure from API");
333
+ throwIfGraphQLErrors(result);
334
+ if (!result.data?.roomsByTag?.data) {
335
+ throwInternalError("Unexpected response shape from roomsByTag query (missing data envelope). Please retry; if persistent, the upstream API contract may have changed.");
262
336
  }
263
- rooms = result.data.roomsByTag;
337
+ rooms = result.data.roomsByTag.data;
264
338
  // Extract floors and buildings from room.floor references
265
339
  for (const room of rooms) {
266
340
  if (room.floor) {
@@ -272,13 +346,13 @@ export async function executeAvailableRooms(args) {
272
346
  }
273
347
  }
274
348
  else {
275
- // Query all rooms (org-wide)
276
349
  const result = await apolloClient.query({
277
350
  query: GET_ALL_ROOMS,
278
351
  fetchPolicy: "network-only",
279
352
  });
353
+ throwIfGraphQLErrors(result);
280
354
  if (!result.data?.sites?.data) {
281
- throw new Error("Invalid response structure from API");
355
+ throwInternalError("Unexpected response shape from sites query (missing data envelope). Please retry; if persistent, the upstream API contract may have changed.");
282
356
  }
283
357
  buildings = result.data.sites.data.flatMap((s) => s.buildings || []);
284
358
  floors = buildings.flatMap((b) => b.floors || []);
@@ -291,7 +365,6 @@ export async function executeAvailableRooms(args) {
291
365
  }
292
366
  debug("available-rooms", `Found ${rooms.length} rooms before filtering`);
293
367
  // Apply capacity filters and track rooms excluded due to missing capacity data
294
- const warnings = [];
295
368
  if (args.min_capacity !== undefined || args.max_capacity !== undefined) {
296
369
  const roomsWithoutCapacity = rooms.filter((r) => !r.capacity?.max).length;
297
370
  const minCapacity = args.min_capacity;
@@ -324,6 +397,9 @@ export async function executeAvailableRooms(args) {
324
397
  if (warnings.length > 0) {
325
398
  response.warning = warnings.join(" ");
326
399
  }
400
+ if (unknownTagNames.length > 0) {
401
+ response.unknown_tags = unknownTagNames;
402
+ }
327
403
  return response;
328
404
  }
329
405
  // Get current occupancy for all rooms
@@ -459,6 +535,9 @@ export async function executeAvailableRooms(args) {
459
535
  if (warnings.length > 0) {
460
536
  response.warning = warnings.join(" ");
461
537
  }
538
+ if (unknownTagNames.length > 0) {
539
+ response.unknown_tags = unknownTagNames;
540
+ }
462
541
  return response;
463
542
  }
464
543
  /**
@@ -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-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,CAmHnC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBnE"}
@@ -25,6 +25,7 @@ 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) {
@@ -90,7 +91,7 @@ export async function executeGetCurrentOccupancy(args) {
90
91
  }
91
92
  // ---- Recommendation (checks data success, not just sensor availability) ----
92
93
  const recommendation = buildRecommendation(presenceData, trafficData, presenceHasData, trafficHasData);
93
- assets.push({
94
+ const assetEntry = {
94
95
  asset_id: assetId,
95
96
  asset_type: asset.assetType,
96
97
  asset_name: asset.assetName,
@@ -98,12 +99,21 @@ export async function executeGetCurrentOccupancy(args) {
98
99
  presence: presenceData,
99
100
  traffic: trafficData,
100
101
  ...recommendation,
101
- });
102
+ };
103
+ if (asset.timezoneWarning) {
104
+ assetEntry.timezone_warning = asset.timezoneWarning;
105
+ }
106
+ if (asset.timezoneFallback) {
107
+ hasAnyFallback = true;
108
+ }
109
+ assets.push(assetEntry);
102
110
  }
103
111
  return {
104
112
  assets,
105
113
  timestamp: now.toISOString(),
106
- timezone_note: "All timestamps are UTC (ISO-8601). Use site_timezone for local conversion.",
114
+ timezone_note: hasAnyFallback
115
+ ? "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."
116
+ : "All timestamps are UTC (ISO-8601). Use site_timezone for local conversion.",
107
117
  };
108
118
  }
109
119
  /**