@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.
- package/LICENSE +21 -0
- package/README.md +195 -0
- package/dist/cache/occupancy-cache.d.ts +72 -0
- package/dist/cache/occupancy-cache.d.ts.map +1 -0
- package/dist/cache/occupancy-cache.js +166 -0
- package/dist/cache/occupancy-cache.js.map +1 -0
- package/dist/cache/topology-cache.d.ts +36 -0
- package/dist/cache/topology-cache.d.ts.map +1 -0
- package/dist/cache/topology-cache.js +74 -0
- package/dist/cache/topology-cache.js.map +1 -0
- package/dist/clients/auth-client.d.ts +22 -0
- package/dist/clients/auth-client.d.ts.map +1 -0
- package/dist/clients/auth-client.js +82 -0
- package/dist/clients/auth-client.js.map +1 -0
- package/dist/clients/graphql-client.d.ts +6 -0
- package/dist/clients/graphql-client.d.ts.map +1 -0
- package/dist/clients/graphql-client.js +106 -0
- package/dist/clients/graphql-client.js.map +1 -0
- package/dist/clients/queries/topology.d.ts +36 -0
- package/dist/clients/queries/topology.d.ts.map +1 -0
- package/dist/clients/queries/topology.js +252 -0
- package/dist/clients/queries/topology.js.map +1 -0
- package/dist/clients/reporting-client.d.ts +191 -0
- package/dist/clients/reporting-client.d.ts.map +1 -0
- package/dist/clients/reporting-client.js +353 -0
- package/dist/clients/reporting-client.js.map +1 -0
- package/dist/clients/stats-client.d.ts +119 -0
- package/dist/clients/stats-client.d.ts.map +1 -0
- package/dist/clients/stats-client.js +238 -0
- package/dist/clients/stats-client.js.map +1 -0
- package/dist/clients/types.d.ts +215 -0
- package/dist/clients/types.d.ts.map +1 -0
- package/dist/clients/types.js +6 -0
- package/dist/clients/types.js.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/mcp-errors.d.ts +63 -0
- package/dist/errors/mcp-errors.d.ts.map +1 -0
- package/dist/errors/mcp-errors.js +144 -0
- package/dist/errors/mcp-errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/butlr-available-rooms.d.ts +49 -0
- package/dist/tools/butlr-available-rooms.d.ts.map +1 -0
- package/dist/tools/butlr-available-rooms.js +492 -0
- package/dist/tools/butlr-available-rooms.js.map +1 -0
- package/dist/tools/butlr-fetch-entity-details.d.ts +42 -0
- package/dist/tools/butlr-fetch-entity-details.d.ts.map +1 -0
- package/dist/tools/butlr-fetch-entity-details.js +276 -0
- package/dist/tools/butlr-fetch-entity-details.js.map +1 -0
- package/dist/tools/butlr-get-asset-details.d.ts +51 -0
- package/dist/tools/butlr-get-asset-details.d.ts.map +1 -0
- package/dist/tools/butlr-get-asset-details.js +391 -0
- package/dist/tools/butlr-get-asset-details.js.map +1 -0
- package/dist/tools/butlr-get-current-occupancy.d.ts +21 -0
- package/dist/tools/butlr-get-current-occupancy.d.ts.map +1 -0
- package/dist/tools/butlr-get-current-occupancy.js +126 -0
- package/dist/tools/butlr-get-current-occupancy.js.map +1 -0
- package/dist/tools/butlr-get-occupancy-timeseries.d.ts +31 -0
- package/dist/tools/butlr-get-occupancy-timeseries.d.ts.map +1 -0
- package/dist/tools/butlr-get-occupancy-timeseries.js +145 -0
- package/dist/tools/butlr-get-occupancy-timeseries.js.map +1 -0
- package/dist/tools/butlr-hardware-snapshot.d.ts +55 -0
- package/dist/tools/butlr-hardware-snapshot.d.ts.map +1 -0
- package/dist/tools/butlr-hardware-snapshot.js +556 -0
- package/dist/tools/butlr-hardware-snapshot.js.map +1 -0
- package/dist/tools/butlr-list-topology.d.ts +27 -0
- package/dist/tools/butlr-list-topology.d.ts.map +1 -0
- package/dist/tools/butlr-list-topology.js +241 -0
- package/dist/tools/butlr-list-topology.js.map +1 -0
- package/dist/tools/butlr-search-assets.d.ts +53 -0
- package/dist/tools/butlr-search-assets.d.ts.map +1 -0
- package/dist/tools/butlr-search-assets.js +206 -0
- package/dist/tools/butlr-search-assets.js.map +1 -0
- package/dist/tools/butlr-space-busyness.d.ts +23 -0
- package/dist/tools/butlr-space-busyness.d.ts.map +1 -0
- package/dist/tools/butlr-space-busyness.js +304 -0
- package/dist/tools/butlr-space-busyness.js.map +1 -0
- package/dist/tools/butlr-traffic-flow.d.ts +39 -0
- package/dist/tools/butlr-traffic-flow.d.ts.map +1 -0
- package/dist/tools/butlr-traffic-flow.js +369 -0
- package/dist/tools/butlr-traffic-flow.js.map +1 -0
- package/dist/types/responses.d.ts +253 -0
- package/dist/types/responses.d.ts.map +1 -0
- package/dist/types/responses.js +8 -0
- package/dist/types/responses.js.map +1 -0
- package/dist/utils/asset-flattener.d.ts +50 -0
- package/dist/utils/asset-flattener.d.ts.map +1 -0
- package/dist/utils/asset-flattener.js +131 -0
- package/dist/utils/asset-flattener.js.map +1 -0
- package/dist/utils/asset-helpers.d.ts +8 -0
- package/dist/utils/asset-helpers.d.ts.map +1 -0
- package/dist/utils/asset-helpers.js +24 -0
- package/dist/utils/asset-helpers.js.map +1 -0
- package/dist/utils/field-validator.d.ts +29 -0
- package/dist/utils/field-validator.d.ts.map +1 -0
- package/dist/utils/field-validator.js +197 -0
- package/dist/utils/field-validator.js.map +1 -0
- package/dist/utils/fuzzy-match.d.ts +29 -0
- package/dist/utils/fuzzy-match.d.ts.map +1 -0
- package/dist/utils/fuzzy-match.js +70 -0
- package/dist/utils/fuzzy-match.js.map +1 -0
- package/dist/utils/graphql-helpers.d.ts +29 -0
- package/dist/utils/graphql-helpers.d.ts.map +1 -0
- package/dist/utils/graphql-helpers.js +43 -0
- package/dist/utils/graphql-helpers.js.map +1 -0
- package/dist/utils/natural-language.d.ts +73 -0
- package/dist/utils/natural-language.d.ts.map +1 -0
- package/dist/utils/natural-language.js +172 -0
- package/dist/utils/natural-language.js.map +1 -0
- package/dist/utils/occupancy-helpers.d.ts +63 -0
- package/dist/utils/occupancy-helpers.d.ts.map +1 -0
- package/dist/utils/occupancy-helpers.js +203 -0
- package/dist/utils/occupancy-helpers.js.map +1 -0
- package/dist/utils/path-builder.d.ts +10 -0
- package/dist/utils/path-builder.d.ts.map +1 -0
- package/dist/utils/path-builder.js +34 -0
- package/dist/utils/path-builder.js.map +1 -0
- package/dist/utils/time-range-validator.d.ts +13 -0
- package/dist/utils/time-range-validator.d.ts.map +1 -0
- package/dist/utils/time-range-validator.js +65 -0
- package/dist/utils/time-range-validator.js.map +1 -0
- package/dist/utils/timezone-helpers.d.ts +49 -0
- package/dist/utils/timezone-helpers.d.ts.map +1 -0
- package/dist/utils/timezone-helpers.js +209 -0
- package/dist/utils/timezone-helpers.js.map +1 -0
- package/dist/utils/tree-formatter.d.ts +23 -0
- package/dist/utils/tree-formatter.d.ts.map +1 -0
- package/dist/utils/tree-formatter.js +258 -0
- package/dist/utils/tree-formatter.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|