@evercam/mcp 0.0.1
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 +1017 -0
- package/dist/bin/evercam-mcp.d.ts +3 -0
- package/dist/bin/evercam-mcp.d.ts.map +1 -0
- package/dist/bin/evercam-mcp.js +87 -0
- package/dist/bin/evercam-mcp.js.map +1 -0
- package/dist/src/auth/auth.d.ts +9 -0
- package/dist/src/auth/auth.d.ts.map +1 -0
- package/dist/src/auth/auth.js +44 -0
- package/dist/src/auth/auth.js.map +1 -0
- package/dist/src/auth/tokenStore.d.ts +9 -0
- package/dist/src/auth/tokenStore.d.ts.map +1 -0
- package/dist/src/auth/tokenStore.js +42 -0
- package/dist/src/auth/tokenStore.js.map +1 -0
- package/dist/src/cli/auth.d.ts +13 -0
- package/dist/src/cli/auth.d.ts.map +1 -0
- package/dist/src/cli/auth.js +98 -0
- package/dist/src/cli/auth.js.map +1 -0
- package/dist/src/cli/doctor.d.ts +4 -0
- package/dist/src/cli/doctor.d.ts.map +1 -0
- package/dist/src/cli/doctor.js +54 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/profile.d.ts +10 -0
- package/dist/src/cli/profile.d.ts.map +1 -0
- package/dist/src/cli/profile.js +53 -0
- package/dist/src/cli/profile.js.map +1 -0
- package/dist/src/cli/run.d.ts +5 -0
- package/dist/src/cli/run.d.ts.map +1 -0
- package/dist/src/cli/run.js +63 -0
- package/dist/src/cli/run.js.map +1 -0
- package/dist/src/cli/serve.d.ts +13 -0
- package/dist/src/cli/serve.d.ts.map +1 -0
- package/dist/src/cli/serve.js +58 -0
- package/dist/src/cli/serve.js.map +1 -0
- package/dist/src/cli/tools.d.ts +3 -0
- package/dist/src/cli/tools.d.ts.map +1 -0
- package/dist/src/cli/tools.js +151 -0
- package/dist/src/cli/tools.js.map +1 -0
- package/dist/src/config/env.d.ts +3 -0
- package/dist/src/config/env.d.ts.map +1 -0
- package/dist/src/config/env.js +17 -0
- package/dist/src/config/env.js.map +1 -0
- package/dist/src/config/profiles.d.ts +17 -0
- package/dist/src/config/profiles.d.ts.map +1 -0
- package/dist/src/config/profiles.js +56 -0
- package/dist/src/config/profiles.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/server.d.ts +8 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +23 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/tools/anpr.d.ts +4 -0
- package/dist/src/tools/anpr.d.ts.map +1 -0
- package/dist/src/tools/anpr.js +75 -0
- package/dist/src/tools/anpr.js.map +1 -0
- package/dist/src/tools/bim.d.ts +4 -0
- package/dist/src/tools/bim.d.ts.map +1 -0
- package/dist/src/tools/bim.js +24 -0
- package/dist/src/tools/bim.js.map +1 -0
- package/dist/src/tools/cameras.d.ts +4 -0
- package/dist/src/tools/cameras.d.ts.map +1 -0
- package/dist/src/tools/cameras.js +31 -0
- package/dist/src/tools/cameras.js.map +1 -0
- package/dist/src/tools/copilot.d.ts +4 -0
- package/dist/src/tools/copilot.d.ts.map +1 -0
- package/dist/src/tools/copilot.js +58 -0
- package/dist/src/tools/copilot.js.map +1 -0
- package/dist/src/tools/detections.d.ts +4 -0
- package/dist/src/tools/detections.d.ts.map +1 -0
- package/dist/src/tools/detections.js +40 -0
- package/dist/src/tools/detections.js.map +1 -0
- package/dist/src/tools/index.d.ts +4 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +31 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/media.d.ts +4 -0
- package/dist/src/tools/media.d.ts.map +1 -0
- package/dist/src/tools/media.js +38 -0
- package/dist/src/tools/media.js.map +1 -0
- package/dist/src/tools/mutations.d.ts +8 -0
- package/dist/src/tools/mutations.d.ts.map +1 -0
- package/dist/src/tools/mutations.js +41 -0
- package/dist/src/tools/mutations.js.map +1 -0
- package/dist/src/tools/notifications.d.ts +4 -0
- package/dist/src/tools/notifications.d.ts.map +1 -0
- package/dist/src/tools/notifications.js +21 -0
- package/dist/src/tools/notifications.js.map +1 -0
- package/dist/src/tools/progressPhotos.d.ts +4 -0
- package/dist/src/tools/progressPhotos.d.ts.map +1 -0
- package/dist/src/tools/progressPhotos.js +36 -0
- package/dist/src/tools/progressPhotos.js.map +1 -0
- package/dist/src/tools/projects.d.ts +4 -0
- package/dist/src/tools/projects.d.ts.map +1 -0
- package/dist/src/tools/projects.js +56 -0
- package/dist/src/tools/projects.js.map +1 -0
- package/dist/src/tools/ptz.d.ts +4 -0
- package/dist/src/tools/ptz.d.ts.map +1 -0
- package/dist/src/tools/ptz.js +38 -0
- package/dist/src/tools/ptz.js.map +1 -0
- package/dist/src/tools/shares.d.ts +4 -0
- package/dist/src/tools/shares.d.ts.map +1 -0
- package/dist/src/tools/shares.js +11 -0
- package/dist/src/tools/shares.js.map +1 -0
- package/dist/src/tools/siteAnalytics.d.ts +4 -0
- package/dist/src/tools/siteAnalytics.d.ts.map +1 -0
- package/dist/src/tools/siteAnalytics.js +51 -0
- package/dist/src/tools/siteAnalytics.js.map +1 -0
- package/dist/src/tools/snapshots.d.ts +4 -0
- package/dist/src/tools/snapshots.d.ts.map +1 -0
- package/dist/src/tools/snapshots.js +83 -0
- package/dist/src/tools/snapshots.js.map +1 -0
- package/dist/src/tools/weather.d.ts +4 -0
- package/dist/src/tools/weather.d.ts.map +1 -0
- package/dist/src/tools/weather.js +11 -0
- package/dist/src/tools/weather.js.map +1 -0
- package/dist/src/transports/http.d.ts +24 -0
- package/dist/src/transports/http.d.ts.map +1 -0
- package/dist/src/transports/http.js +373 -0
- package/dist/src/transports/http.js.map +1 -0
- package/dist/src/transports/stdio.d.ts +3 -0
- package/dist/src/transports/stdio.d.ts.map +1 -0
- package/dist/src/transports/stdio.js +6 -0
- package/dist/src/transports/stdio.js.map +1 -0
- package/dist/src/utils/callTool.d.ts +18 -0
- package/dist/src/utils/callTool.d.ts.map +1 -0
- package/dist/src/utils/callTool.js +54 -0
- package/dist/src/utils/callTool.js.map +1 -0
- package/dist/src/utils/errors.d.ts +7 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +70 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/logger.d.ts +10 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +4 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.d.ts +12 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +29 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/toolOutput.d.ts +21 -0
- package/dist/src/utils/toolOutput.d.ts.map +1 -0
- package/dist/src/utils/toolOutput.js +35 -0
- package/dist/src/utils/toolOutput.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerCopilotTools(server, evercam) {
|
|
4
|
+
const labsUrl = () => evercam.axios.env.evercamLabsUrl;
|
|
5
|
+
server.tool("create-copilot-conversation", "Create a Copilot conversation (Labs API fallback: not exposed in SDK namespace)", {
|
|
6
|
+
payload: z.record(z.any()).describe("Conversation creation payload"),
|
|
7
|
+
}, async ({ payload }) => {
|
|
8
|
+
const { data } = await evercam.axios.post(`${labsUrl()}/copilot/conversations`, payload, {
|
|
9
|
+
preserveCasing: true,
|
|
10
|
+
});
|
|
11
|
+
return safeText(data);
|
|
12
|
+
});
|
|
13
|
+
server.tool("list-copilot-conversations", "List all Copilot AI conversations", {
|
|
14
|
+
page: z.number().optional().describe("Page number"),
|
|
15
|
+
limit: z.number().optional().describe("Results per page"),
|
|
16
|
+
projectExid: z.string().optional().describe("Filter by project"),
|
|
17
|
+
cameraExid: z.string().optional().describe("Filter by camera"),
|
|
18
|
+
}, async ({ page, limit, ...filters }) => {
|
|
19
|
+
const safeLimit = Math.min(limit ?? 50, 200);
|
|
20
|
+
const { data } = await evercam.axios.get(`${labsUrl()}/copilot/conversations`, {
|
|
21
|
+
params: { page, limit: safeLimit, ...filters },
|
|
22
|
+
preserveCasing: true,
|
|
23
|
+
});
|
|
24
|
+
return safeText(data);
|
|
25
|
+
});
|
|
26
|
+
server.tool("get-copilot-conversation", "Get a single Copilot conversation by ID", {
|
|
27
|
+
conversationId: z.number().describe("Conversation ID"),
|
|
28
|
+
}, async ({ conversationId }) => {
|
|
29
|
+
const { data } = await evercam.axios.get(`${labsUrl()}/copilot/conversations/${conversationId}`, { preserveCasing: true });
|
|
30
|
+
return safeText(data);
|
|
31
|
+
});
|
|
32
|
+
server.tool("list-copilot-messages", "List messages in a Copilot conversation", {
|
|
33
|
+
conversationId: z.number().describe("Conversation ID"),
|
|
34
|
+
page: z.number().optional().describe("Page number"),
|
|
35
|
+
limit: z.number().optional().describe("Results per page"),
|
|
36
|
+
}, async ({ conversationId, page, limit }) => {
|
|
37
|
+
const safeLimit = Math.min(limit ?? 50, 200);
|
|
38
|
+
const { data } = await evercam.axios.get(`${labsUrl()}/copilot/conversations/${conversationId}/messages`, { params: { page, limit: safeLimit }, preserveCasing: true });
|
|
39
|
+
return safeText(data);
|
|
40
|
+
});
|
|
41
|
+
server.tool("send-copilot-message", "Send a message to a Copilot conversation", {
|
|
42
|
+
conversationId: z.number().describe("Conversation ID"),
|
|
43
|
+
message: z.string().describe("Message text to send"),
|
|
44
|
+
}, async ({ conversationId, message }) => {
|
|
45
|
+
const { data } = await evercam.axios.post(`${labsUrl()}/copilot/conversations/${conversationId}/messages`, { message }, { preserveCasing: true });
|
|
46
|
+
return safeText(data);
|
|
47
|
+
});
|
|
48
|
+
server.tool("submit-copilot-feedback", "Submit feedback on a Copilot message", {
|
|
49
|
+
conversationId: z.number().describe("Conversation ID"),
|
|
50
|
+
messageId: z.number().describe("Message ID"),
|
|
51
|
+
rating: z.enum(["positive", "negative"]).describe("Feedback rating"),
|
|
52
|
+
comment: z.string().optional().describe("Optional comment"),
|
|
53
|
+
}, async ({ conversationId, messageId, ...payload }) => {
|
|
54
|
+
const { data } = await evercam.axios.post(`${labsUrl()}/copilot/conversations/${conversationId}/messages/${messageId}/feedback`, payload, { preserveCasing: true });
|
|
55
|
+
return safeText(data);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/tools/copilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detections.d.ts","sourceRoot":"","sources":["../../../src/tools/detections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAqEhF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerDetectionTools(server, evercam) {
|
|
4
|
+
const labsUrl = () => evercam.axios.env.evercamLabsUrl;
|
|
5
|
+
server.tool("get-presence-intervals", "Get presence detection intervals for a camera over a date range", {
|
|
6
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
7
|
+
fromDate: z.string().describe("Start date ISO 8601"),
|
|
8
|
+
toDate: z.string().describe("End date ISO 8601"),
|
|
9
|
+
}, async ({ cameraExid, fromDate, toDate }) => {
|
|
10
|
+
const { data } = await evercam.axios.get(`${labsUrl()}/cameras/${cameraExid}/segments/presence-intervals`, { params: { fromDate, toDate }, preserveCasing: true });
|
|
11
|
+
return safeText(data);
|
|
12
|
+
});
|
|
13
|
+
server.tool("get-luminance-readings", "Get luminance (light level) readings for a camera over a date range", {
|
|
14
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
15
|
+
fromDate: z.string().describe("Start date ISO 8601"),
|
|
16
|
+
toDate: z.string().describe("End date ISO 8601"),
|
|
17
|
+
}, async ({ cameraExid, fromDate, toDate }) => {
|
|
18
|
+
const { data } = await evercam.axios.get(`${labsUrl()}/cameras/${cameraExid}/luminance/readings`, { params: { fromDate, toDate }, preserveCasing: true });
|
|
19
|
+
return safeText(data);
|
|
20
|
+
});
|
|
21
|
+
server.tool("get-site-analytics-processing-status", "Get site analytics processing status for cameras", {
|
|
22
|
+
projectExid: z.string().optional().describe("Filter by project"),
|
|
23
|
+
cameraExid: z.string().optional().describe("Filter by camera"),
|
|
24
|
+
}, async (params) => {
|
|
25
|
+
const { data } = await evercam.axios.get(`${labsUrl()}/site-analytics/processing-status`, {
|
|
26
|
+
params,
|
|
27
|
+
preserveCasing: true,
|
|
28
|
+
});
|
|
29
|
+
return safeText(data);
|
|
30
|
+
});
|
|
31
|
+
server.tool("get-heatmap-intersections", "Get heatmap intersection data for a camera", {
|
|
32
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
33
|
+
fromDate: z.string().describe("Start date ISO 8601"),
|
|
34
|
+
toDate: z.string().describe("End date ISO 8601"),
|
|
35
|
+
}, async ({ cameraExid, fromDate, toDate }) => {
|
|
36
|
+
const { data } = await evercam.axios.get(`${labsUrl()}/site-analytics/cameras/${cameraExid}/heatmap/intersections`, { params: { fromDate, toDate }, preserveCasing: true });
|
|
37
|
+
return safeText(data);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=detections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detections.js","sourceRoot":"","sources":["../../../src/tools/detections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAgBtC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAe1E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { registerCameraTools } from "./cameras.js";
|
|
2
|
+
import { registerSnapshotTools } from "./snapshots.js";
|
|
3
|
+
import { registerProjectTools } from "./projects.js";
|
|
4
|
+
import { registerMediaTools } from "./media.js";
|
|
5
|
+
import { registerBimTools } from "./bim.js";
|
|
6
|
+
import { registerCopilotTools } from "./copilot.js";
|
|
7
|
+
import { registerDetectionTools } from "./detections.js";
|
|
8
|
+
import { registerAnprTools } from "./anpr.js";
|
|
9
|
+
import { registerSiteAnalyticsTools } from "./siteAnalytics.js";
|
|
10
|
+
import { registerPtzTools } from "./ptz.js";
|
|
11
|
+
import { registerNotificationTools } from "./notifications.js";
|
|
12
|
+
import { registerWeatherTools } from "./weather.js";
|
|
13
|
+
import { registerProgressPhotoTools } from "./progressPhotos.js";
|
|
14
|
+
import { registerShareTools } from "./shares.js";
|
|
15
|
+
export function registerAllTools(server, evercam) {
|
|
16
|
+
registerCameraTools(server, evercam);
|
|
17
|
+
registerSnapshotTools(server, evercam);
|
|
18
|
+
registerProjectTools(server, evercam);
|
|
19
|
+
registerMediaTools(server, evercam);
|
|
20
|
+
registerBimTools(server, evercam);
|
|
21
|
+
registerCopilotTools(server, evercam);
|
|
22
|
+
registerDetectionTools(server, evercam);
|
|
23
|
+
registerAnprTools(server, evercam);
|
|
24
|
+
registerSiteAnalyticsTools(server, evercam);
|
|
25
|
+
registerPtzTools(server, evercam);
|
|
26
|
+
registerNotificationTools(server, evercam);
|
|
27
|
+
registerWeatherTools(server, evercam);
|
|
28
|
+
registerProgressPhotoTools(server, evercam);
|
|
29
|
+
registerShareTools(server, evercam);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,OAAgB;IAClE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3C,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC1C,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3C,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/tools/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAmD5E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerMediaTools(server, evercam) {
|
|
4
|
+
server.tool("list-timelapses", "List timelapses for a camera", {
|
|
5
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
6
|
+
fromDate: z.string().describe("Start date ISO 8601"),
|
|
7
|
+
toDate: z.string().describe("End date ISO 8601"),
|
|
8
|
+
}, async ({ cameraExid, fromDate, toDate }) => {
|
|
9
|
+
const data = await evercam.api.timelapse.getSnapshotRange(cameraExid, {
|
|
10
|
+
fromDate,
|
|
11
|
+
toDate,
|
|
12
|
+
});
|
|
13
|
+
return safeText(data);
|
|
14
|
+
});
|
|
15
|
+
server.tool("create-timelapse", "Create a timelapse for a project", {
|
|
16
|
+
projectExid: z.string().describe("Project exid"),
|
|
17
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
18
|
+
fromDate: z.string().describe("Start date ISO 8601"),
|
|
19
|
+
toDate: z.string().describe("End date ISO 8601"),
|
|
20
|
+
title: z.string().optional().describe("Timelapse title"),
|
|
21
|
+
}, async ({ projectExid, ...payload }) => {
|
|
22
|
+
const data = await evercam.api.timelapse.createTimelapse(projectExid, payload);
|
|
23
|
+
return safeText(data);
|
|
24
|
+
});
|
|
25
|
+
server.tool("list-media-hub", "List clips and media in the media hub for a project", {
|
|
26
|
+
projectExid: z.string().describe("Project exid"),
|
|
27
|
+
page: z.number().optional().describe("Page number"),
|
|
28
|
+
limit: z.number().optional().describe("Results per page"),
|
|
29
|
+
}, async ({ projectExid, page, limit }) => {
|
|
30
|
+
const safeLimit = Math.min(limit ?? 50, 200);
|
|
31
|
+
const data = await evercam.api.mediaHub.getAllMedia(projectExid, {
|
|
32
|
+
page,
|
|
33
|
+
limit: safeLimit,
|
|
34
|
+
});
|
|
35
|
+
return safeText(data);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/tools/media.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,OAAgB;IACpE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,8BAA8B,EAC9B;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE;YACpE,QAAQ;YACR,MAAM;SACA,CAAC,CAAA;QACT,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,kCAAkC,EAClC;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,EAAE,OAAc,CAAC,CAAA;QACrF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,qDAAqD,EACrD;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC1D,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE;YAC/D,IAAI;YACJ,KAAK,EAAE,SAAS;SACV,CAAC,CAAA;QACT,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* Tools that mutate data or trigger stateful actions.
|
|
4
|
+
* Disabled by default unless serve --enable-mutations is set.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MUTATION_TOOLS: Set<string>;
|
|
7
|
+
export declare function disableMutationTools(server: McpServer): string[];
|
|
8
|
+
//# sourceMappingURL=mutations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutations.d.ts","sourceRoot":"","sources":["../../../src/tools/mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE;;;GAGG;AACH,eAAO,MAAM,cAAc,aAoBzB,CAAA;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,CAchE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools that mutate data or trigger stateful actions.
|
|
3
|
+
* Disabled by default unless serve --enable-mutations is set.
|
|
4
|
+
*/
|
|
5
|
+
export const MUTATION_TOOLS = new Set([
|
|
6
|
+
"update-camera",
|
|
7
|
+
"create-project",
|
|
8
|
+
"invite-project-members",
|
|
9
|
+
"remove-project-members",
|
|
10
|
+
"update-project-members-role",
|
|
11
|
+
"create-timelapse",
|
|
12
|
+
"create-copilot-conversation",
|
|
13
|
+
"send-copilot-message",
|
|
14
|
+
"submit-copilot-feedback",
|
|
15
|
+
"create-roi",
|
|
16
|
+
"update-roi",
|
|
17
|
+
"delete-roi",
|
|
18
|
+
"go-to-ptz-preset",
|
|
19
|
+
"move-camera-ptz",
|
|
20
|
+
"mark-notifications-read",
|
|
21
|
+
"create-progress-photo",
|
|
22
|
+
"update-progress-photo",
|
|
23
|
+
"delete-progress-photo",
|
|
24
|
+
"delete-share-request",
|
|
25
|
+
]);
|
|
26
|
+
export function disableMutationTools(server) {
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
const internal = server;
|
|
29
|
+
const tools = internal._registeredTools;
|
|
30
|
+
if (!tools)
|
|
31
|
+
return [];
|
|
32
|
+
const disabled = [];
|
|
33
|
+
for (const name of MUTATION_TOOLS) {
|
|
34
|
+
if (tools[name]) {
|
|
35
|
+
tools[name].enabled = false;
|
|
36
|
+
disabled.push(name);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return disabled;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=mutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../../src/tools/mutations.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS;IAC5C,eAAe;IACf,gBAAgB;IAChB,wBAAwB;IACxB,wBAAwB;IACxB,6BAA6B;IAC7B,kBAAkB;IAClB,6BAA6B;IAC7B,sBAAsB;IACtB,yBAAyB;IACzB,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,yBAAyB;IACzB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;CACvB,CAAC,CAAA;AAEF,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,MAAa,CAAA;IAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAqE,CAAA;IAC5F,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IAErB,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,KAAK,CAAA;YAC3B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA6BnF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerNotificationTools(server, evercam) {
|
|
4
|
+
server.tool("list-notifications", "List the current user's Evercam notifications", {}, async () => {
|
|
5
|
+
const data = await evercam.api.notifications.get();
|
|
6
|
+
return safeText(data);
|
|
7
|
+
});
|
|
8
|
+
server.tool("mark-notifications-read", "Mark one or all notifications as read. Omit notificationId to mark all as read.", {
|
|
9
|
+
notificationId: z
|
|
10
|
+
.number()
|
|
11
|
+
.int()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Notification ID — omit to mark all notifications as read"),
|
|
14
|
+
}, async ({ notificationId }) => {
|
|
15
|
+
const data = notificationId !== undefined
|
|
16
|
+
? await evercam.api.notifications.markAsRead(notificationId)
|
|
17
|
+
: await evercam.api.notifications.markAllAsRead();
|
|
18
|
+
return safeText(data);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../../src/tools/notifications.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,OAAgB;IAC3E,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,+CAA+C,EAC/C,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAA;QAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,iFAAiF,EACjF;QACE,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,CAAC,0DAA0D,CAAC;KACxE,EACD,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,MAAM,IAAI,GACR,cAAc,KAAK,SAAS;YAC1B,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC;YAC5D,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,CAAA;QACrD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressPhotos.d.ts","sourceRoot":"","sources":["../../../src/tools/progressPhotos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA6DpF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerProgressPhotoTools(server, evercam) {
|
|
4
|
+
server.tool("create-progress-photo", "Create a progress photo entry", {
|
|
5
|
+
payload: z.record(z.any()).describe("Progress photo payload fields"),
|
|
6
|
+
}, async ({ payload }) => {
|
|
7
|
+
const data = await evercam.api.progressPhotos.create(payload);
|
|
8
|
+
return safeText(data);
|
|
9
|
+
});
|
|
10
|
+
server.tool("list-progress-photos", "List progress photos for a project", {
|
|
11
|
+
projectExid: z.string().describe("Project exid"),
|
|
12
|
+
}, async ({ projectExid }) => {
|
|
13
|
+
const data = await evercam.api.progressPhotos.index(projectExid);
|
|
14
|
+
return safeText(data);
|
|
15
|
+
});
|
|
16
|
+
server.tool("get-progress-photo", "Get a specific progress photo by ID", {
|
|
17
|
+
photoId: z.string().describe("Progress photo ID"),
|
|
18
|
+
}, async ({ photoId }) => {
|
|
19
|
+
const data = await evercam.api.progressPhotos.show(photoId);
|
|
20
|
+
return safeText(data);
|
|
21
|
+
});
|
|
22
|
+
server.tool("update-progress-photo", "Update a progress photo entry", {
|
|
23
|
+
photoId: z.union([z.string(), z.number()]).describe("Progress photo ID"),
|
|
24
|
+
payload: z.record(z.any()).describe("Progress photo payload fields"),
|
|
25
|
+
}, async ({ photoId, payload }) => {
|
|
26
|
+
const data = await evercam.api.progressPhotos.update(photoId, payload);
|
|
27
|
+
return safeText(data);
|
|
28
|
+
});
|
|
29
|
+
server.tool("delete-progress-photo", "Delete a progress photo entry", {
|
|
30
|
+
photoId: z.string().describe("Progress photo ID"),
|
|
31
|
+
}, async ({ photoId }) => {
|
|
32
|
+
const data = await evercam.api.progressPhotos.delete(photoId);
|
|
33
|
+
return safeText(data);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=progressPhotos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressPhotos.js","sourceRoot":"","sources":["../../../src/tools/progressPhotos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,OAAgB;IAC5E,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,+BAA+B,EAC/B;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACrE,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,OAAc,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,oCAAoC,EACpC;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAChE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,qCAAqC,EACrC;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAClD,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,+BAA+B,EAC/B;QACE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACxE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACrE,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,OAAc,CAAC,CAAA;QAC7E,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,+BAA+B,EAC/B;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAClD,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG9E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerProjectTools(server, evercam) {
|
|
4
|
+
server.tool("create-project", "Create a new project", {
|
|
5
|
+
name: z.string().describe("Project name"),
|
|
6
|
+
}, async ({ name }) => {
|
|
7
|
+
const data = await evercam.api.projects.create({ name });
|
|
8
|
+
return safeText(data);
|
|
9
|
+
});
|
|
10
|
+
server.tool("list-projects", "List all projects accessible to the authenticated user", {}, async () => {
|
|
11
|
+
const data = await evercam.api.projects.index();
|
|
12
|
+
return safeText(data);
|
|
13
|
+
});
|
|
14
|
+
server.tool("list-project-cameras", "List all cameras in a project", {
|
|
15
|
+
projectExid: z.string().describe("Project exid"),
|
|
16
|
+
}, async ({ projectExid }) => {
|
|
17
|
+
const data = await evercam.api.projects.getCameras(projectExid);
|
|
18
|
+
return safeText(data);
|
|
19
|
+
});
|
|
20
|
+
server.tool("list-project-users", "List all users/members in a project", {
|
|
21
|
+
projectExid: z.string().describe("Project exid"),
|
|
22
|
+
}, async ({ projectExid }) => {
|
|
23
|
+
const data = await evercam.api.projects.getUsers(projectExid);
|
|
24
|
+
return safeText(data);
|
|
25
|
+
});
|
|
26
|
+
server.tool("list-project-members", "List members with roles for a project", {
|
|
27
|
+
projectExid: z.string().describe("Project exid"),
|
|
28
|
+
}, async ({ projectExid }) => {
|
|
29
|
+
const data = await evercam.api.projects.getMembers(projectExid);
|
|
30
|
+
return safeText(data);
|
|
31
|
+
});
|
|
32
|
+
server.tool("invite-project-members", "Invite members to a project", {
|
|
33
|
+
projectExid: z.string().describe("Project exid"),
|
|
34
|
+
emails: z.array(z.string()).describe("Email addresses to invite"),
|
|
35
|
+
role: z.string().optional().describe("Optional role identifier/name"),
|
|
36
|
+
}, async ({ projectExid, ...payload }) => {
|
|
37
|
+
const data = await evercam.api.projects.inviteMembers(projectExid, payload);
|
|
38
|
+
return safeText(data);
|
|
39
|
+
});
|
|
40
|
+
server.tool("remove-project-members", "Remove members from a project by email", {
|
|
41
|
+
projectExid: z.string().describe("Project exid"),
|
|
42
|
+
emails: z.array(z.string()).describe("Email addresses to remove"),
|
|
43
|
+
}, async ({ projectExid, emails }) => {
|
|
44
|
+
const data = await evercam.api.projects.removeMembers(projectExid, emails);
|
|
45
|
+
return safeText(data);
|
|
46
|
+
});
|
|
47
|
+
server.tool("update-project-members-role", "Update role for project members", {
|
|
48
|
+
projectExid: z.string().describe("Project exid"),
|
|
49
|
+
emails: z.array(z.string()).describe("Email addresses to update"),
|
|
50
|
+
role: z.string().optional().describe("Role identifier/name"),
|
|
51
|
+
}, async ({ projectExid, ...payload }) => {
|
|
52
|
+
const data = await evercam.api.projects.updateMembersRole(projectExid, payload);
|
|
53
|
+
return safeText(data);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/tools/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ptz.d.ts","sourceRoot":"","sources":["../../../src/tools/ptz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAkD1E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerPtzTools(server, evercam) {
|
|
4
|
+
server.tool("list-ptz-presets", "List all saved PTZ presets for a camera", {
|
|
5
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
6
|
+
}, async ({ cameraExid }) => {
|
|
7
|
+
const data = await evercam.ptz.presets.index({ cameraExid });
|
|
8
|
+
return safeText(data);
|
|
9
|
+
});
|
|
10
|
+
server.tool("go-to-ptz-preset", "Move a PTZ camera to a saved preset position", {
|
|
11
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
12
|
+
presetId: z.string().describe("Preset token/ID to move to"),
|
|
13
|
+
}, async ({ cameraExid, presetId }) => {
|
|
14
|
+
const data = await evercam.ptz.presets.go({ cameraExid, presetId });
|
|
15
|
+
return safeText(data);
|
|
16
|
+
});
|
|
17
|
+
server.tool("move-camera-ptz", "Move or stop a PTZ camera. Use action 'stop' to halt movement.", {
|
|
18
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
19
|
+
action: z
|
|
20
|
+
.enum(["left", "right", "up", "down", "stop"])
|
|
21
|
+
.describe("Movement direction or 'stop' to halt"),
|
|
22
|
+
continuous: z.boolean().optional().describe("Use continuous movement mode (default: false)"),
|
|
23
|
+
}, async ({ cameraExid, action, continuous }) => {
|
|
24
|
+
let data;
|
|
25
|
+
if (action === "stop") {
|
|
26
|
+
data = await evercam.ptz.controls.stop({ cameraExid });
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
data = await evercam.ptz.controls.move({
|
|
30
|
+
cameraExid,
|
|
31
|
+
direction: action,
|
|
32
|
+
useContinuous: continuous ?? false,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return safeText(data);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ptz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ptz.js","sourceRoot":"","sources":["../../../src/tools/ptz.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,OAAgB;IAClE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,yCAAyC,EACzC;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;KAC/C,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,8CAA8C,EAC9C;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,gEAAgE,EAChE;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC9C,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;aAC7C,QAAQ,CAAC,sCAAsC,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KAC7F,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3C,IAAI,IAAI,CAAA;QACR,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACrC,UAAU;gBACV,SAAS,EAAE,MAAM;gBACjB,aAAa,EAAE,UAAU,IAAI,KAAK;aAC5B,CAAC,CAAA;QACX,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shares.d.ts","sourceRoot":"","sources":["../../../src/tools/shares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAY5E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerShareTools(server, evercam) {
|
|
4
|
+
server.tool("delete-share-request", "Delete a share request (SDK supports delete operation only)", {
|
|
5
|
+
payload: z.record(z.any()).describe("Share deletion payload fields"),
|
|
6
|
+
}, async ({ payload }) => {
|
|
7
|
+
const data = await evercam.api.shares.deleteShareRequest({ params: payload });
|
|
8
|
+
return safeText(data);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=shares.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shares.js","sourceRoot":"","sources":["../../../src/tools/shares.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,OAAgB;IACpE,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,6DAA6D,EAC7D;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACrE,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAc,EAAE,CAAC,CAAA;QACpF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siteAnalytics.d.ts","sourceRoot":"","sources":["../../../src/tools/siteAnalytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAyEpF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { safeText } from "../utils/toolOutput.js";
|
|
3
|
+
export function registerSiteAnalyticsTools(server, evercam) {
|
|
4
|
+
server.tool("smart-search", "Semantic/visual smart search over footage for a project", {
|
|
5
|
+
projectExid: z.string().describe("Project exid"),
|
|
6
|
+
cameraExid: z.string().optional().describe("Filter by camera"),
|
|
7
|
+
query: z.string().optional().describe("Text search query"),
|
|
8
|
+
labels: z
|
|
9
|
+
.array(z.string())
|
|
10
|
+
.optional()
|
|
11
|
+
.describe("Object labels to search for (e.g. ['person', 'car'])"),
|
|
12
|
+
fromDate: z.string().optional().describe("Start date ISO 8601"),
|
|
13
|
+
toDate: z.string().optional().describe("End date ISO 8601"),
|
|
14
|
+
page: z.number().optional().describe("Page number"),
|
|
15
|
+
pageSize: z.number().optional().describe("Results per page"),
|
|
16
|
+
}, async ({ projectExid, page, pageSize, ...filters }) => {
|
|
17
|
+
const safePageSize = Math.min(pageSize ?? 20, 100);
|
|
18
|
+
const data = await evercam.ai.siteAnalytics.smartSearchAll(projectExid, {
|
|
19
|
+
page,
|
|
20
|
+
pageSize: safePageSize,
|
|
21
|
+
...filters,
|
|
22
|
+
});
|
|
23
|
+
return safeText(data);
|
|
24
|
+
});
|
|
25
|
+
server.tool("list-smart-search-queries", "List saved smart search queries for a project", {
|
|
26
|
+
projectExid: z.string().describe("Project exid"),
|
|
27
|
+
}, async ({ projectExid }) => {
|
|
28
|
+
const data = await evercam.ai.siteAnalytics.getQueries(projectExid, {});
|
|
29
|
+
return safeText(data);
|
|
30
|
+
});
|
|
31
|
+
server.tool("get-detections-heatmap", "Get detection heatmap data for a camera", {
|
|
32
|
+
projectExid: z.string().describe("Project exid"),
|
|
33
|
+
cameraExid: z.string().describe("Camera exid"),
|
|
34
|
+
fromDate: z.string().describe("Start date ISO 8601"),
|
|
35
|
+
toDate: z.string().describe("End date ISO 8601"),
|
|
36
|
+
labels: z.array(z.string()).describe("Object labels (e.g. ['person', 'car'])"),
|
|
37
|
+
}, async ({ projectExid, ...params }) => {
|
|
38
|
+
const data = await evercam.ai.siteAnalytics.getDetectionsHeatmapData(projectExid, params);
|
|
39
|
+
return safeText(data);
|
|
40
|
+
});
|
|
41
|
+
server.tool("get-gate-report-counts", "Get event count statistics for a gate report project", {
|
|
42
|
+
projectExid: z.string().describe("Project exid"),
|
|
43
|
+
fromDate: z.string().describe("Start date ISO 8601"),
|
|
44
|
+
toDate: z.string().describe("End date ISO 8601"),
|
|
45
|
+
cameraExid: z.string().optional().describe("Filter by camera"),
|
|
46
|
+
}, async ({ projectExid, ...params }) => {
|
|
47
|
+
const data = await evercam.ai.gateReport.getCounts(projectExid, params);
|
|
48
|
+
return safeText(data);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=siteAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siteAnalytics.js","sourceRoot":"","sources":["../../../src/tools/siteAnalytics.ts"],"names":[],"mappings":"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"}
|