@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,3 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ //# sourceMappingURL=evercam-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evercam-mcp.d.ts","sourceRoot":"","sources":["../../bin/evercam-mcp.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAA"}
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ import { Command } from "commander";
4
+ import { authLogin, authRelogin, authLogout, authStatus } from "../src/cli/auth.js";
5
+ import { profileList, profileAdd, profileSwitch, profileDelete } from "../src/cli/profile.js";
6
+ import { toolsList } from "../src/cli/tools.js";
7
+ import { runTool } from "../src/cli/run.js";
8
+ import { serve } from "../src/cli/serve.js";
9
+ import { doctor } from "../src/cli/doctor.js";
10
+ const program = new Command();
11
+ program.name("evercam-mcp").description("MCP server + CLI for Evercam").version("0.1.0");
12
+ // auth
13
+ const auth = program.command("auth").description("Authentication commands");
14
+ auth
15
+ .command("login")
16
+ .description("Log in to Evercam")
17
+ .option("--profile <name>", "Profile to use", "default")
18
+ .action(authLogin);
19
+ auth
20
+ .command("logout")
21
+ .description("Log out of Evercam")
22
+ .option("--profile <name>", "Profile to use", "default")
23
+ .action(authLogout);
24
+ auth
25
+ .command("relogin")
26
+ .description("Prompt credentials and replace the stored token")
27
+ .option("--profile <name>", "Profile to use", "default")
28
+ .action(authRelogin);
29
+ auth
30
+ .command("status")
31
+ .description("Show authentication status")
32
+ .option("--profile <name>", "Profile to check", "default")
33
+ .action(authStatus);
34
+ // profile
35
+ const profile = program.command("profile").description("Profile management");
36
+ profile.command("list").description("List all profiles").action(profileList);
37
+ profile
38
+ .command("add <name>")
39
+ .description("Add a new profile")
40
+ .option("--base-url <url>", "Evercam backend URL")
41
+ .option("--ai-url <url>", "Evercam AI API URL")
42
+ .option("--labs-url <url>", "Evercam Labs URL")
43
+ .option("--ingest-url <url>", "Evercam Ingest URL")
44
+ .action(profileAdd);
45
+ profile.command("switch <name>").description("Switch active profile").action(profileSwitch);
46
+ profile
47
+ .command("delete <name>")
48
+ .description("Delete a profile and its stored token")
49
+ .action(profileDelete);
50
+ // tools
51
+ const tools = program.command("tools").description("Tool discovery");
52
+ tools.command("list").description("List all available MCP tools").action(toolsList);
53
+ // run
54
+ program
55
+ .command("run <tool> [args...]")
56
+ .description("Run a tool directly (args as key=value pairs)")
57
+ .option("--profile <name>", "Profile to use", "default")
58
+ .option("--format <format>", "Output format: json or table", "json")
59
+ .action((tool, args, options) => runTool(tool, args, options));
60
+ // serve
61
+ program
62
+ .command("serve")
63
+ .description("Start the MCP server")
64
+ .option("--transport <type>", "Transport: stdio or http", "stdio")
65
+ .option("--port <number>", "HTTP port (http transport only)", "4004")
66
+ .option("--profile <name>", "Profile to use", "default")
67
+ .option("--allowed-origins <origins>", "CORS allowed origins (comma-separated or *)", "*")
68
+ .option("--timeout <ms>", "Tool call timeout in milliseconds (http transport)", "30000")
69
+ .option("--api-key <key>", "Require Authorization: ApiKey <key> on HTTP endpoints")
70
+ .option("--allowed-tools <tools>", "Comma-separated tool allowlist for HTTP REST endpoint")
71
+ .option("--denied-tools <tools>", "Comma-separated tool denylist for HTTP REST endpoint")
72
+ .option("--rate-limit <number>", "Max POST /tools requests per minute per IP", "60")
73
+ .option("--enable-mutations", "Enable mutating tools (create/update/delete/actions). Disabled by default.")
74
+ .action((options) => serve({
75
+ ...options,
76
+ port: parseInt(options.port, 10),
77
+ timeout: parseInt(options.timeout, 10),
78
+ rateLimit: parseInt(options.rateLimit, 10),
79
+ }));
80
+ // doctor
81
+ program
82
+ .command("doctor")
83
+ .description("Check authentication, config, and API connectivity")
84
+ .option("--profile <name>", "Profile to check", "default")
85
+ .action((options) => doctor(options));
86
+ program.parse();
87
+ //# sourceMappingURL=evercam-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evercam-mcp.js","sourceRoot":"","sources":["../../bin/evercam-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function login(username: string, password: string, profile?: string): Promise<string>;
2
+ export declare function logout(profile?: string): Promise<void>;
3
+ export declare function getAuthStatus(profile?: string): {
4
+ loggedIn: boolean;
5
+ profile: string;
6
+ token: string | null;
7
+ tokenAgeDays: number | null;
8
+ };
9
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/auth.ts"],"names":[],"mappings":"AAKA,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAY,GAClB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,wBAAsB,MAAM,CAAC,OAAO,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/D;AAED,wBAAgB,aAAa,CAAC,OAAO,SAAY,GAAG;IAClD,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,CAQA"}
@@ -0,0 +1,44 @@
1
+ import { Evercam } from "@evercam/sdk";
2
+ import { setToken, clearToken, getToken, getTokenAge } from "./tokenStore.js";
3
+ import { resolveConfig } from "../config/env.js";
4
+ import { normalizeError } from "../utils/errors.js";
5
+ export async function login(username, password, profile = "default") {
6
+ const config = resolveConfig(profile);
7
+ const evercam = new Evercam({
8
+ ...config,
9
+ credentials: { username, password },
10
+ });
11
+ try {
12
+ await evercam.connect();
13
+ }
14
+ catch (err) {
15
+ throw new Error(normalizeError(err).message);
16
+ }
17
+ const token = evercam.token;
18
+ if (!token) {
19
+ throw new Error("Login succeeded but no token was returned");
20
+ }
21
+ setToken(token, profile);
22
+ return token;
23
+ }
24
+ export async function logout(profile = "default") {
25
+ const token = getToken(profile);
26
+ if (token) {
27
+ const evercam = new Evercam({
28
+ ...resolveConfig(profile),
29
+ credentials: { token },
30
+ });
31
+ await evercam.disconnect().catch(() => { });
32
+ }
33
+ clearToken(profile);
34
+ }
35
+ export function getAuthStatus(profile = "default") {
36
+ const token = getToken(profile);
37
+ return {
38
+ loggedIn: !!token,
39
+ profile,
40
+ token: token ? `${token.slice(0, 6)}...${token.slice(-4)}` : null,
41
+ tokenAgeDays: token ? getTokenAge(profile) : null,
42
+ };
43
+ }
44
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,QAAgB,EAChB,QAAgB,EAChB,OAAO,GAAG,SAAS;IAEnB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,GAAG,MAAM;QACT,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACpC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IAE3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IAED,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACxB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAO,GAAG,SAAS;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAE/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;YAC1B,GAAG,aAAa,CAAC,OAAO,CAAC;YACzB,WAAW,EAAE,EAAE,KAAK,EAAE;SACvB,CAAC,CAAA;QACF,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,UAAU,CAAC,OAAO,CAAC,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAO,GAAG,SAAS;IAM/C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO;QACL,QAAQ,EAAE,CAAC,CAAC,KAAK;QACjB,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QACjE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;KAClD,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function getToken(profile?: string): string | undefined;
2
+ export declare function setToken(token: string, profile?: string): void;
3
+ export declare function clearToken(profile?: string): void;
4
+ /**
5
+ * Returns token age in days for the given profile.
6
+ * Returns null if the entry uses the legacy string format (savedAt unknown).
7
+ */
8
+ export declare function getTokenAge(profile?: string): number | null;
9
+ //# sourceMappingURL=tokenStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenStore.d.ts","sourceRoot":"","sources":["../../../src/auth/tokenStore.ts"],"names":[],"mappings":"AAyBA,wBAAgB,QAAQ,CAAC,OAAO,SAAY,GAAG,MAAM,GAAG,SAAS,CAIhE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,IAAI,CAIjE;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAY,GAAG,IAAI,CAIpD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAY,GAAG,MAAM,GAAG,IAAI,CAK9D"}
@@ -0,0 +1,42 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ const CONFIG_DIR = path.join(os.homedir(), ".evercam");
5
+ const TOKENS_FILE = path.join(CONFIG_DIR, "tokens.json");
6
+ function readTokens() {
7
+ if (!fs.existsSync(TOKENS_FILE))
8
+ return {};
9
+ return JSON.parse(fs.readFileSync(TOKENS_FILE, "utf-8"));
10
+ }
11
+ function writeTokens(tokens) {
12
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
13
+ fs.writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), { mode: 0o600 });
14
+ }
15
+ export function getToken(profile = "default") {
16
+ const entry = readTokens()[profile];
17
+ if (!entry)
18
+ return undefined;
19
+ return typeof entry === "string" ? entry : entry.token;
20
+ }
21
+ export function setToken(token, profile = "default") {
22
+ const tokens = readTokens();
23
+ tokens[profile] = { token, savedAt: Date.now() };
24
+ writeTokens(tokens);
25
+ }
26
+ export function clearToken(profile = "default") {
27
+ const tokens = readTokens();
28
+ delete tokens[profile];
29
+ writeTokens(tokens);
30
+ }
31
+ /**
32
+ * Returns token age in days for the given profile.
33
+ * Returns null if the entry uses the legacy string format (savedAt unknown).
34
+ */
35
+ export function getTokenAge(profile = "default") {
36
+ const entry = readTokens()[profile];
37
+ if (!entry || typeof entry === "string")
38
+ return null;
39
+ const ageMs = Date.now() - entry.savedAt;
40
+ return Math.floor(ageMs / (1000 * 60 * 60 * 24));
41
+ }
42
+ //# sourceMappingURL=tokenStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenStore.js","sourceRoot":"","sources":["../../../src/auth/tokenStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAUxD,SAAS,UAAU;IACjB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAA;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAe,CAAA;AACxE,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB;IACrC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAO,GAAG,SAAS;IAC1C,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,OAAO,GAAG,SAAS;IACzD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IAChD,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAO,GAAG,SAAS;IAC5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;IACtB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAO,GAAG,SAAS;IAC7C,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAA;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;AAClD,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare function authLogin(options: {
2
+ profile?: string;
3
+ }): Promise<void>;
4
+ export declare function authRelogin(options: {
5
+ profile?: string;
6
+ }): Promise<void>;
7
+ export declare function authLogout(options: {
8
+ profile?: string;
9
+ }): Promise<void>;
10
+ export declare function authStatus(options: {
11
+ profile?: string;
12
+ }): void;
13
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/auth.ts"],"names":[],"mappings":"AAuCA,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAoCD,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiB9D"}
@@ -0,0 +1,98 @@
1
+ import chalk from "chalk";
2
+ import * as readline from "node:readline/promises";
3
+ import { stdin as input, stdout as output } from "node:process";
4
+ import { login, logout, getAuthStatus } from "../auth/auth.js";
5
+ import { normalizeError } from "../utils/errors.js";
6
+ function readPassword(prompt) {
7
+ return new Promise((resolve) => {
8
+ output.write(prompt);
9
+ let password = "";
10
+ input.setRawMode(true);
11
+ input.resume();
12
+ input.setEncoding("utf8");
13
+ const onData = (char) => {
14
+ if (char === "\r" || char === "\n") {
15
+ input.setRawMode(false);
16
+ input.pause();
17
+ input.removeListener("data", onData);
18
+ output.write("\n");
19
+ resolve(password);
20
+ }
21
+ else if (char === "\u0003") {
22
+ input.setRawMode(false);
23
+ process.exit(1);
24
+ }
25
+ else if (char === "\u007f" || char === "\b") {
26
+ if (password.length > 0) {
27
+ password = password.slice(0, -1);
28
+ }
29
+ }
30
+ else {
31
+ password += char;
32
+ }
33
+ };
34
+ input.on("data", onData);
35
+ });
36
+ }
37
+ export async function authLogin(options) {
38
+ await runAuthLogin(options, "Logged in successfully");
39
+ }
40
+ export async function authRelogin(options) {
41
+ await runAuthLogin(options, "Re-authenticated successfully");
42
+ }
43
+ async function runAuthLogin(options, successMessage) {
44
+ const profile = options.profile ?? "default";
45
+ const rl = readline.createInterface({ input, output });
46
+ try {
47
+ const maxAttempts = 3;
48
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
49
+ const username = await rl.question("Username or email: ");
50
+ const password = await readPassword("Password: ");
51
+ console.log(chalk.dim("Connecting to Evercam..."));
52
+ try {
53
+ await login(username, password, profile);
54
+ console.log(chalk.green(`✓ ${successMessage} (profile: ${profile})`));
55
+ return;
56
+ }
57
+ catch (err) {
58
+ const message = normalizeError(err).message;
59
+ if (attempt < maxAttempts) {
60
+ console.error(chalk.yellow(`✗ Login failed (${attempt}/${maxAttempts}): ${message}`));
61
+ console.log(chalk.dim("Try again.\n"));
62
+ continue;
63
+ }
64
+ console.error(chalk.red(`✗ Login failed (${attempt}/${maxAttempts}): ${message}`));
65
+ process.exit(1);
66
+ }
67
+ }
68
+ }
69
+ catch (err) {
70
+ console.error(chalk.red(`✗ Login failed: ${normalizeError(err).message}`));
71
+ process.exit(1);
72
+ }
73
+ finally {
74
+ rl.close();
75
+ }
76
+ }
77
+ export async function authLogout(options) {
78
+ const profile = options.profile ?? "default";
79
+ await logout(profile);
80
+ console.log(chalk.green(`✓ Logged out (profile: ${profile})`));
81
+ }
82
+ export function authStatus(options) {
83
+ const profile = options.profile ?? "default";
84
+ const status = getAuthStatus(profile);
85
+ if (status.loggedIn) {
86
+ console.log(chalk.green(`✓ Logged in`));
87
+ console.log(` Profile: ${status.profile}`);
88
+ console.log(` Token: ${status.token}`);
89
+ if (status.tokenAgeDays !== null && status.tokenAgeDays > 25) {
90
+ console.log(chalk.yellow(` ⚠ Token is ${status.tokenAgeDays} days old — consider re-authenticating`));
91
+ }
92
+ }
93
+ else {
94
+ console.log(chalk.yellow(`✗ Not logged in (profile: ${status.profile})`));
95
+ console.log(` Run: evercam-mcp auth login`);
96
+ }
97
+ }
98
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function doctor(options: {
2
+ profile?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/doctor.ts"],"names":[],"mappings":"AAQA,wBAAsB,MAAM,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDzE"}
@@ -0,0 +1,54 @@
1
+ import chalk from "chalk";
2
+ import { Evercam } from "@evercam/sdk";
3
+ import { getAuthStatus } from "../auth/auth.js";
4
+ import { getToken, getTokenAge } from "../auth/tokenStore.js";
5
+ import { resolveConfig } from "../config/env.js";
6
+ import { TOOL_DESCRIPTIONS } from "./tools.js";
7
+ import { normalizeError } from "../utils/errors.js";
8
+ export async function doctor(options) {
9
+ const profile = options.profile ?? "default";
10
+ console.log(chalk.bold("\nevercam-mcp doctor\n"));
11
+ // 1. Auth check
12
+ const status = getAuthStatus(profile);
13
+ if (status.loggedIn) {
14
+ console.log(chalk.green("✓ Authenticated"), chalk.dim(`(profile: ${profile}, token: ${status.token})`));
15
+ const age = getTokenAge(profile);
16
+ if (age === null) {
17
+ console.log(chalk.dim(" ℹ Token age unknown (legacy format — re-login to track age)"));
18
+ }
19
+ else if (age > 60) {
20
+ console.log(chalk.red(` ✗ Token is ${age} days old — re-authenticate now`));
21
+ }
22
+ else if (age > 25) {
23
+ console.log(chalk.yellow(` ⚠ Token is ${age} days old — consider re-authenticating`));
24
+ }
25
+ }
26
+ else {
27
+ console.log(chalk.red("✗ Not authenticated"), chalk.dim(`— run: evercam-mcp auth login`));
28
+ }
29
+ // 2. Config check
30
+ const config = resolveConfig(profile);
31
+ console.log(chalk.green("✓ Config resolved"));
32
+ console.log(chalk.dim(` Base URL: ${config.baseUrls?.baseUrl ?? "(sdk default)"}`));
33
+ console.log(chalk.dim(` AI URL: ${config.baseUrls?.aiApiUrl ?? "(sdk default)"}`));
34
+ console.log(chalk.dim(` Labs URL: ${config.baseUrls?.evercamLabsUrl ?? "(sdk default)"}`));
35
+ // 3. API connectivity (only if authenticated)
36
+ if (status.loggedIn) {
37
+ const token = getToken(profile);
38
+ process.stdout.write(" Checking API connectivity... ");
39
+ try {
40
+ const evercam = new Evercam(config);
41
+ evercam.setToken(token);
42
+ await evercam.api.projects.index();
43
+ console.log(chalk.green("✓ Evercam API reachable"));
44
+ }
45
+ catch (err) {
46
+ console.log(chalk.red(`✗ Evercam API unreachable — ${normalizeError(err).message}`));
47
+ }
48
+ }
49
+ // 4. Tool count
50
+ const count = Object.keys(TOOL_DESCRIPTIONS).length;
51
+ console.log(chalk.green(`✓ ${count} tools registered`));
52
+ console.log();
53
+ }
54
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function profileList(): void;
2
+ export declare function profileAdd(name: string, options: {
3
+ baseUrl?: string;
4
+ aiUrl?: string;
5
+ labsUrl?: string;
6
+ ingestUrl?: string;
7
+ }): void;
8
+ export declare function profileSwitch(name: string): void;
9
+ export declare function profileDelete(name: string): void;
10
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/cli/profile.ts"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,IAAI,IAAI,CAoBlC;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GACA,IAAI,CAQN;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAShD"}
@@ -0,0 +1,53 @@
1
+ import chalk from "chalk";
2
+ import { listProfiles, addProfile, switchProfile, deleteProfile } from "../config/profiles.js";
3
+ import { clearToken } from "../auth/tokenStore.js";
4
+ import { normalizeError } from "../utils/errors.js";
5
+ export function profileList() {
6
+ const profiles = listProfiles();
7
+ if (profiles.length === 0) {
8
+ console.log(chalk.dim("No profiles configured."));
9
+ return;
10
+ }
11
+ for (const p of profiles) {
12
+ const marker = p.active ? chalk.green("● ") : " ";
13
+ const urls = [
14
+ p.config.baseUrl && `backend: ${p.config.baseUrl}`,
15
+ p.config.aiApiUrl && `ai: ${p.config.aiApiUrl}`,
16
+ p.config.evercamLabsUrl && `labs: ${p.config.evercamLabsUrl}`,
17
+ ]
18
+ .filter(Boolean)
19
+ .join(", ");
20
+ console.log(`${marker}${chalk.bold(p.name)}${urls ? chalk.dim(` (${urls})`) : ""}`);
21
+ }
22
+ }
23
+ export function profileAdd(name, options) {
24
+ addProfile(name, {
25
+ baseUrl: options.baseUrl,
26
+ aiApiUrl: options.aiUrl,
27
+ evercamLabsUrl: options.labsUrl,
28
+ ingestApiUrl: options.ingestUrl,
29
+ });
30
+ console.log(chalk.green(`✓ Profile "${name}" added`));
31
+ }
32
+ export function profileSwitch(name) {
33
+ try {
34
+ switchProfile(name);
35
+ console.log(chalk.green(`✓ Switched to profile "${name}"`));
36
+ }
37
+ catch (err) {
38
+ console.error(chalk.red(`✗ ${normalizeError(err).message}`));
39
+ process.exit(1);
40
+ }
41
+ }
42
+ export function profileDelete(name) {
43
+ try {
44
+ deleteProfile(name);
45
+ clearToken(name);
46
+ console.log(chalk.green(`✓ Profile "${name}" deleted`));
47
+ }
48
+ catch (err) {
49
+ console.error(chalk.red(`✗ ${normalizeError(err).message}`));
50
+ process.exit(1);
51
+ }
52
+ }
53
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/cli/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function runTool(toolName: string, rawArgs: string[], options: {
2
+ profile?: string;
3
+ format?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AA8BA,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -0,0 +1,63 @@
1
+ import chalk from "chalk";
2
+ import { createEvercamMcpServer } from "../server.js";
3
+ import { resolveConfig } from "../config/env.js";
4
+ import { callToolDirect } from "../utils/callTool.js";
5
+ import { normalizeError } from "../utils/errors.js";
6
+ function parseArgs(args) {
7
+ const result = {};
8
+ for (const arg of args) {
9
+ const [key, ...rest] = arg.split("=");
10
+ const value = rest.join("=");
11
+ const cleanKey = key.replace(/^--/, "");
12
+ if (value === "true") {
13
+ result[cleanKey] = true;
14
+ }
15
+ else if (value === "false") {
16
+ result[cleanKey] = false;
17
+ }
18
+ else if (!isNaN(Number(value)) && value !== "") {
19
+ result[cleanKey] = Number(value);
20
+ }
21
+ else {
22
+ try {
23
+ result[cleanKey] = JSON.parse(value);
24
+ }
25
+ catch {
26
+ result[cleanKey] = value;
27
+ }
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ export async function runTool(toolName, rawArgs, options) {
33
+ const config = resolveConfig(options.profile);
34
+ if (!config.credentials?.token) {
35
+ console.error(chalk.red("✗ Not authenticated. Run: evercam-mcp auth login"));
36
+ process.exit(1);
37
+ }
38
+ const args = parseArgs(rawArgs);
39
+ const { server } = await createEvercamMcpServer(config);
40
+ try {
41
+ const result = await callToolDirect(server, toolName, args);
42
+ const text = result?.content?.[0]?.text ?? JSON.stringify(result, null, 2);
43
+ if (options.format === "table") {
44
+ try {
45
+ const parsed = JSON.parse(text);
46
+ const rows = Array.isArray(parsed)
47
+ ? parsed
48
+ : (parsed?.data ?? parsed?.items ?? parsed?.cameras ?? parsed?.projects ?? [parsed]);
49
+ console.table(rows);
50
+ return;
51
+ }
52
+ catch {
53
+ // fall through to JSON
54
+ }
55
+ }
56
+ console.log(text);
57
+ }
58
+ catch (err) {
59
+ console.error(chalk.red(`✗ Tool "${toolName}" failed: ${normalizeError(err).message}`));
60
+ process.exit(1);
61
+ }
62
+ }
63
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAEvC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;QACzB,CAAC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;QAC1B,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,QAAgB,EAChB,OAAiB,EACjB,OAA8C;IAE9C,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE7C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAA;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAEvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC3D,MAAM,IAAI,GAAI,MAAc,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAEnF,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;oBAChC,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,OAAO,IAAI,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;gBACtF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACnB,OAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,aAAa,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare function serve(options: {
2
+ transport?: string;
3
+ port?: number;
4
+ profile?: string;
5
+ allowedOrigins?: string;
6
+ timeout?: number;
7
+ apiKey?: string;
8
+ allowedTools?: string;
9
+ deniedTools?: string;
10
+ rateLimit?: number;
11
+ enableMutations?: boolean;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/serve.ts"],"names":[],"mappings":"AAOA,wBAAsB,KAAK,CAAC,OAAO,EAAE;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DhB"}