@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.
Files changed (146) hide show
  1. package/README.md +1017 -0
  2. package/dist/bin/evercam-mcp.d.ts +3 -0
  3. package/dist/bin/evercam-mcp.d.ts.map +1 -0
  4. package/dist/bin/evercam-mcp.js +87 -0
  5. package/dist/bin/evercam-mcp.js.map +1 -0
  6. package/dist/src/auth/auth.d.ts +9 -0
  7. package/dist/src/auth/auth.d.ts.map +1 -0
  8. package/dist/src/auth/auth.js +44 -0
  9. package/dist/src/auth/auth.js.map +1 -0
  10. package/dist/src/auth/tokenStore.d.ts +9 -0
  11. package/dist/src/auth/tokenStore.d.ts.map +1 -0
  12. package/dist/src/auth/tokenStore.js +42 -0
  13. package/dist/src/auth/tokenStore.js.map +1 -0
  14. package/dist/src/cli/auth.d.ts +13 -0
  15. package/dist/src/cli/auth.d.ts.map +1 -0
  16. package/dist/src/cli/auth.js +98 -0
  17. package/dist/src/cli/auth.js.map +1 -0
  18. package/dist/src/cli/doctor.d.ts +4 -0
  19. package/dist/src/cli/doctor.d.ts.map +1 -0
  20. package/dist/src/cli/doctor.js +54 -0
  21. package/dist/src/cli/doctor.js.map +1 -0
  22. package/dist/src/cli/profile.d.ts +10 -0
  23. package/dist/src/cli/profile.d.ts.map +1 -0
  24. package/dist/src/cli/profile.js +53 -0
  25. package/dist/src/cli/profile.js.map +1 -0
  26. package/dist/src/cli/run.d.ts +5 -0
  27. package/dist/src/cli/run.d.ts.map +1 -0
  28. package/dist/src/cli/run.js +63 -0
  29. package/dist/src/cli/run.js.map +1 -0
  30. package/dist/src/cli/serve.d.ts +13 -0
  31. package/dist/src/cli/serve.d.ts.map +1 -0
  32. package/dist/src/cli/serve.js +58 -0
  33. package/dist/src/cli/serve.js.map +1 -0
  34. package/dist/src/cli/tools.d.ts +3 -0
  35. package/dist/src/cli/tools.d.ts.map +1 -0
  36. package/dist/src/cli/tools.js +151 -0
  37. package/dist/src/cli/tools.js.map +1 -0
  38. package/dist/src/config/env.d.ts +3 -0
  39. package/dist/src/config/env.d.ts.map +1 -0
  40. package/dist/src/config/env.js +17 -0
  41. package/dist/src/config/env.js.map +1 -0
  42. package/dist/src/config/profiles.d.ts +17 -0
  43. package/dist/src/config/profiles.d.ts.map +1 -0
  44. package/dist/src/config/profiles.js +56 -0
  45. package/dist/src/config/profiles.js.map +1 -0
  46. package/dist/src/index.d.ts +7 -0
  47. package/dist/src/index.d.ts.map +1 -0
  48. package/dist/src/index.js +7 -0
  49. package/dist/src/index.js.map +1 -0
  50. package/dist/src/server.d.ts +8 -0
  51. package/dist/src/server.d.ts.map +1 -0
  52. package/dist/src/server.js +23 -0
  53. package/dist/src/server.js.map +1 -0
  54. package/dist/src/tools/anpr.d.ts +4 -0
  55. package/dist/src/tools/anpr.d.ts.map +1 -0
  56. package/dist/src/tools/anpr.js +75 -0
  57. package/dist/src/tools/anpr.js.map +1 -0
  58. package/dist/src/tools/bim.d.ts +4 -0
  59. package/dist/src/tools/bim.d.ts.map +1 -0
  60. package/dist/src/tools/bim.js +24 -0
  61. package/dist/src/tools/bim.js.map +1 -0
  62. package/dist/src/tools/cameras.d.ts +4 -0
  63. package/dist/src/tools/cameras.d.ts.map +1 -0
  64. package/dist/src/tools/cameras.js +31 -0
  65. package/dist/src/tools/cameras.js.map +1 -0
  66. package/dist/src/tools/copilot.d.ts +4 -0
  67. package/dist/src/tools/copilot.d.ts.map +1 -0
  68. package/dist/src/tools/copilot.js +58 -0
  69. package/dist/src/tools/copilot.js.map +1 -0
  70. package/dist/src/tools/detections.d.ts +4 -0
  71. package/dist/src/tools/detections.d.ts.map +1 -0
  72. package/dist/src/tools/detections.js +40 -0
  73. package/dist/src/tools/detections.js.map +1 -0
  74. package/dist/src/tools/index.d.ts +4 -0
  75. package/dist/src/tools/index.d.ts.map +1 -0
  76. package/dist/src/tools/index.js +31 -0
  77. package/dist/src/tools/index.js.map +1 -0
  78. package/dist/src/tools/media.d.ts +4 -0
  79. package/dist/src/tools/media.d.ts.map +1 -0
  80. package/dist/src/tools/media.js +38 -0
  81. package/dist/src/tools/media.js.map +1 -0
  82. package/dist/src/tools/mutations.d.ts +8 -0
  83. package/dist/src/tools/mutations.d.ts.map +1 -0
  84. package/dist/src/tools/mutations.js +41 -0
  85. package/dist/src/tools/mutations.js.map +1 -0
  86. package/dist/src/tools/notifications.d.ts +4 -0
  87. package/dist/src/tools/notifications.d.ts.map +1 -0
  88. package/dist/src/tools/notifications.js +21 -0
  89. package/dist/src/tools/notifications.js.map +1 -0
  90. package/dist/src/tools/progressPhotos.d.ts +4 -0
  91. package/dist/src/tools/progressPhotos.d.ts.map +1 -0
  92. package/dist/src/tools/progressPhotos.js +36 -0
  93. package/dist/src/tools/progressPhotos.js.map +1 -0
  94. package/dist/src/tools/projects.d.ts +4 -0
  95. package/dist/src/tools/projects.d.ts.map +1 -0
  96. package/dist/src/tools/projects.js +56 -0
  97. package/dist/src/tools/projects.js.map +1 -0
  98. package/dist/src/tools/ptz.d.ts +4 -0
  99. package/dist/src/tools/ptz.d.ts.map +1 -0
  100. package/dist/src/tools/ptz.js +38 -0
  101. package/dist/src/tools/ptz.js.map +1 -0
  102. package/dist/src/tools/shares.d.ts +4 -0
  103. package/dist/src/tools/shares.d.ts.map +1 -0
  104. package/dist/src/tools/shares.js +11 -0
  105. package/dist/src/tools/shares.js.map +1 -0
  106. package/dist/src/tools/siteAnalytics.d.ts +4 -0
  107. package/dist/src/tools/siteAnalytics.d.ts.map +1 -0
  108. package/dist/src/tools/siteAnalytics.js +51 -0
  109. package/dist/src/tools/siteAnalytics.js.map +1 -0
  110. package/dist/src/tools/snapshots.d.ts +4 -0
  111. package/dist/src/tools/snapshots.d.ts.map +1 -0
  112. package/dist/src/tools/snapshots.js +83 -0
  113. package/dist/src/tools/snapshots.js.map +1 -0
  114. package/dist/src/tools/weather.d.ts +4 -0
  115. package/dist/src/tools/weather.d.ts.map +1 -0
  116. package/dist/src/tools/weather.js +11 -0
  117. package/dist/src/tools/weather.js.map +1 -0
  118. package/dist/src/transports/http.d.ts +24 -0
  119. package/dist/src/transports/http.d.ts.map +1 -0
  120. package/dist/src/transports/http.js +373 -0
  121. package/dist/src/transports/http.js.map +1 -0
  122. package/dist/src/transports/stdio.d.ts +3 -0
  123. package/dist/src/transports/stdio.d.ts.map +1 -0
  124. package/dist/src/transports/stdio.js +6 -0
  125. package/dist/src/transports/stdio.js.map +1 -0
  126. package/dist/src/utils/callTool.d.ts +18 -0
  127. package/dist/src/utils/callTool.d.ts.map +1 -0
  128. package/dist/src/utils/callTool.js +54 -0
  129. package/dist/src/utils/callTool.js.map +1 -0
  130. package/dist/src/utils/errors.d.ts +7 -0
  131. package/dist/src/utils/errors.d.ts.map +1 -0
  132. package/dist/src/utils/errors.js +70 -0
  133. package/dist/src/utils/errors.js.map +1 -0
  134. package/dist/src/utils/logger.d.ts +10 -0
  135. package/dist/src/utils/logger.d.ts.map +1 -0
  136. package/dist/src/utils/logger.js +4 -0
  137. package/dist/src/utils/logger.js.map +1 -0
  138. package/dist/src/utils/retry.d.ts +12 -0
  139. package/dist/src/utils/retry.d.ts.map +1 -0
  140. package/dist/src/utils/retry.js +29 -0
  141. package/dist/src/utils/retry.js.map +1 -0
  142. package/dist/src/utils/toolOutput.d.ts +21 -0
  143. package/dist/src/utils/toolOutput.d.ts.map +1 -0
  144. package/dist/src/utils/toolOutput.js +35 -0
  145. package/dist/src/utils/toolOutput.js.map +1 -0
  146. 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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerDetectionTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=detections.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerAllTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerMediaTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=media.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerNotificationTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=notifications.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerProgressPhotoTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=progressPhotos.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerProjectTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=projects.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerPtzTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=ptz.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerShareTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=shares.d.ts.map
@@ -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,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Evercam } from "@evercam/sdk";
3
+ export declare function registerSiteAnalyticsTools(server: McpServer, evercam: Evercam): void;
4
+ //# sourceMappingURL=siteAnalytics.d.ts.map
@@ -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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"}