@openziti/ziti-mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +868 -0
  3. package/dist/auth/client-credentials-flow.d.ts +21 -0
  4. package/dist/auth/client-credentials-flow.js +63 -0
  5. package/dist/auth/client-credentials-flow.js.map +1 -0
  6. package/dist/auth/device-auth-flow.d.ts +47 -0
  7. package/dist/auth/device-auth-flow.js +291 -0
  8. package/dist/auth/device-auth-flow.js.map +1 -0
  9. package/dist/clients/base.d.ts +74 -0
  10. package/dist/clients/base.js +109 -0
  11. package/dist/clients/base.js.map +1 -0
  12. package/dist/clients/claude.d.ts +22 -0
  13. package/dist/clients/claude.js +40 -0
  14. package/dist/clients/claude.js.map +1 -0
  15. package/dist/clients/cursor.d.ts +22 -0
  16. package/dist/clients/cursor.js +39 -0
  17. package/dist/clients/cursor.js.map +1 -0
  18. package/dist/clients/index.d.ts +33 -0
  19. package/dist/clients/index.js +39 -0
  20. package/dist/clients/index.js.map +1 -0
  21. package/dist/clients/types.d.ts +70 -0
  22. package/dist/clients/types.js +2 -0
  23. package/dist/clients/types.js.map +1 -0
  24. package/dist/clients/utils.d.ts +22 -0
  25. package/dist/clients/utils.js +46 -0
  26. package/dist/clients/utils.js.map +1 -0
  27. package/dist/clients/vscode.d.ts +76 -0
  28. package/dist/clients/vscode.js +159 -0
  29. package/dist/clients/vscode.js.map +1 -0
  30. package/dist/clients/windsurf.d.ts +22 -0
  31. package/dist/clients/windsurf.js +39 -0
  32. package/dist/clients/windsurf.js.map +1 -0
  33. package/dist/commands/init.d.ts +45 -0
  34. package/dist/commands/init.js +133 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/logout.d.ts +12 -0
  37. package/dist/commands/logout.js +90 -0
  38. package/dist/commands/logout.js.map +1 -0
  39. package/dist/commands/run.d.ts +15 -0
  40. package/dist/commands/run.js +94 -0
  41. package/dist/commands/run.js.map +1 -0
  42. package/dist/commands/session.d.ts +12 -0
  43. package/dist/commands/session.js +99 -0
  44. package/dist/commands/session.js.map +1 -0
  45. package/dist/index.d.ts +2 -0
  46. package/dist/index.js +105 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/server.d.ts +67 -0
  49. package/dist/server.js +171 -0
  50. package/dist/server.js.map +1 -0
  51. package/dist/tools/api-sessions.d.ts +3 -0
  52. package/dist/tools/api-sessions.js +86 -0
  53. package/dist/tools/api-sessions.js.map +1 -0
  54. package/dist/tools/auth-policies.d.ts +3 -0
  55. package/dist/tools/auth-policies.js +347 -0
  56. package/dist/tools/auth-policies.js.map +1 -0
  57. package/dist/tools/authenticators.d.ts +3 -0
  58. package/dist/tools/authenticators.js +183 -0
  59. package/dist/tools/authenticators.js.map +1 -0
  60. package/dist/tools/certificate-authorities.d.ts +3 -0
  61. package/dist/tools/certificate-authorities.js +288 -0
  62. package/dist/tools/certificate-authorities.js.map +1 -0
  63. package/dist/tools/config-types.d.ts +3 -0
  64. package/dist/tools/config-types.js +194 -0
  65. package/dist/tools/config-types.js.map +1 -0
  66. package/dist/tools/configs.d.ts +3 -0
  67. package/dist/tools/configs.js +203 -0
  68. package/dist/tools/configs.js.map +1 -0
  69. package/dist/tools/controller-settings.d.ts +3 -0
  70. package/dist/tools/controller-settings.js +219 -0
  71. package/dist/tools/controller-settings.js.map +1 -0
  72. package/dist/tools/controllers.d.ts +3 -0
  73. package/dist/tools/controllers.js +89 -0
  74. package/dist/tools/controllers.js.map +1 -0
  75. package/dist/tools/edge-router-policies.d.ts +3 -0
  76. package/dist/tools/edge-router-policies.js +262 -0
  77. package/dist/tools/edge-router-policies.js.map +1 -0
  78. package/dist/tools/edge-routers.d.ts +3 -0
  79. package/dist/tools/edge-routers.js +381 -0
  80. package/dist/tools/edge-routers.js.map +1 -0
  81. package/dist/tools/enrollments.d.ts +3 -0
  82. package/dist/tools/enrollments.js +187 -0
  83. package/dist/tools/enrollments.js.map +1 -0
  84. package/dist/tools/external-jwt-signers.d.ts +3 -0
  85. package/dist/tools/external-jwt-signers.js +242 -0
  86. package/dist/tools/external-jwt-signers.js.map +1 -0
  87. package/dist/tools/identities.d.ts +3 -0
  88. package/dist/tools/identities.js +741 -0
  89. package/dist/tools/identities.js.map +1 -0
  90. package/dist/tools/identity-types.d.ts +3 -0
  91. package/dist/tools/identity-types.js +58 -0
  92. package/dist/tools/identity-types.js.map +1 -0
  93. package/dist/tools/index.d.ts +3 -0
  94. package/dist/tools/index.js +101 -0
  95. package/dist/tools/index.js.map +1 -0
  96. package/dist/tools/posture-checks.d.ts +3 -0
  97. package/dist/tools/posture-checks.js +254 -0
  98. package/dist/tools/posture-checks.js.map +1 -0
  99. package/dist/tools/routers.d.ts +3 -0
  100. package/dist/tools/routers.js +169 -0
  101. package/dist/tools/routers.js.map +1 -0
  102. package/dist/tools/service-edge-router-policies.d.ts +3 -0
  103. package/dist/tools/service-edge-router-policies.js +282 -0
  104. package/dist/tools/service-edge-router-policies.js.map +1 -0
  105. package/dist/tools/service-policies.d.ts +3 -0
  106. package/dist/tools/service-policies.js +311 -0
  107. package/dist/tools/service-policies.js.map +1 -0
  108. package/dist/tools/services.d.ts +3 -0
  109. package/dist/tools/services.js +403 -0
  110. package/dist/tools/services.js.map +1 -0
  111. package/dist/tools/sessions.d.ts +3 -0
  112. package/dist/tools/sessions.js +86 -0
  113. package/dist/tools/sessions.js.map +1 -0
  114. package/dist/tools/terminators.d.ts +3 -0
  115. package/dist/tools/terminators.js +187 -0
  116. package/dist/tools/terminators.js.map +1 -0
  117. package/dist/tools/transit-routers.d.ts +3 -0
  118. package/dist/tools/transit-routers.js +169 -0
  119. package/dist/tools/transit-routers.js.map +1 -0
  120. package/dist/utils/analytics.d.ts +75 -0
  121. package/dist/utils/analytics.js +191 -0
  122. package/dist/utils/analytics.js.map +1 -0
  123. package/dist/utils/auth0-client.d.ts +27 -0
  124. package/dist/utils/auth0-client.js +67 -0
  125. package/dist/utils/auth0-client.js.map +1 -0
  126. package/dist/utils/authenticated-client.d.ts +6 -0
  127. package/dist/utils/authenticated-client.js +55 -0
  128. package/dist/utils/authenticated-client.js.map +1 -0
  129. package/dist/utils/config.d.ts +65 -0
  130. package/dist/utils/config.js +80 -0
  131. package/dist/utils/config.js.map +1 -0
  132. package/dist/utils/constants.d.ts +15 -0
  133. package/dist/utils/constants.js +17 -0
  134. package/dist/utils/constants.js.map +1 -0
  135. package/dist/utils/controller-client/client/client.gen.d.ts +2 -0
  136. package/dist/utils/controller-client/client/client.gen.js +229 -0
  137. package/dist/utils/controller-client/client/client.gen.js.map +1 -0
  138. package/dist/utils/controller-client/client/index.d.ts +8 -0
  139. package/dist/utils/controller-client/client/index.js +7 -0
  140. package/dist/utils/controller-client/client/index.js.map +1 -0
  141. package/dist/utils/controller-client/client/types.gen.d.ts +117 -0
  142. package/dist/utils/controller-client/client/types.gen.js +3 -0
  143. package/dist/utils/controller-client/client/types.gen.js.map +1 -0
  144. package/dist/utils/controller-client/client/utils.gen.d.ts +33 -0
  145. package/dist/utils/controller-client/client/utils.gen.js +232 -0
  146. package/dist/utils/controller-client/client/utils.gen.js.map +1 -0
  147. package/dist/utils/controller-client/client.gen.d.ts +12 -0
  148. package/dist/utils/controller-client/client.gen.js +6 -0
  149. package/dist/utils/controller-client/client.gen.js.map +1 -0
  150. package/dist/utils/controller-client/core/auth.gen.d.ts +18 -0
  151. package/dist/utils/controller-client/core/auth.gen.js +15 -0
  152. package/dist/utils/controller-client/core/auth.gen.js.map +1 -0
  153. package/dist/utils/controller-client/core/bodySerializer.gen.d.ts +25 -0
  154. package/dist/utils/controller-client/core/bodySerializer.gen.js +58 -0
  155. package/dist/utils/controller-client/core/bodySerializer.gen.js.map +1 -0
  156. package/dist/utils/controller-client/core/params.gen.d.ts +43 -0
  157. package/dist/utils/controller-client/core/params.gen.js +101 -0
  158. package/dist/utils/controller-client/core/params.gen.js.map +1 -0
  159. package/dist/utils/controller-client/core/pathSerializer.gen.d.ts +33 -0
  160. package/dist/utils/controller-client/core/pathSerializer.gen.js +115 -0
  161. package/dist/utils/controller-client/core/pathSerializer.gen.js.map +1 -0
  162. package/dist/utils/controller-client/core/queryKeySerializer.gen.d.ts +18 -0
  163. package/dist/utils/controller-client/core/queryKeySerializer.gen.js +100 -0
  164. package/dist/utils/controller-client/core/queryKeySerializer.gen.js.map +1 -0
  165. package/dist/utils/controller-client/core/serverSentEvents.gen.d.ts +71 -0
  166. package/dist/utils/controller-client/core/serverSentEvents.gen.js +136 -0
  167. package/dist/utils/controller-client/core/serverSentEvents.gen.js.map +1 -0
  168. package/dist/utils/controller-client/core/types.gen.d.ts +78 -0
  169. package/dist/utils/controller-client/core/types.gen.js +3 -0
  170. package/dist/utils/controller-client/core/types.gen.js.map +1 -0
  171. package/dist/utils/controller-client/core/utils.gen.d.ts +19 -0
  172. package/dist/utils/controller-client/core/utils.gen.js +88 -0
  173. package/dist/utils/controller-client/core/utils.gen.js.map +1 -0
  174. package/dist/utils/controller-client/index.d.ts +2 -0
  175. package/dist/utils/controller-client/index.js +3 -0
  176. package/dist/utils/controller-client/index.js.map +1 -0
  177. package/dist/utils/controller-client/sdk.gen.d.ts +1302 -0
  178. package/dist/utils/controller-client/sdk.gen.js +4436 -0
  179. package/dist/utils/controller-client/sdk.gen.js.map +1 -0
  180. package/dist/utils/controller-client/types.gen.d.ts +9170 -0
  181. package/dist/utils/controller-client/types.gen.js +3 -0
  182. package/dist/utils/controller-client/types.gen.js.map +1 -0
  183. package/dist/utils/glob.d.ts +75 -0
  184. package/dist/utils/glob.js +110 -0
  185. package/dist/utils/glob.js.map +1 -0
  186. package/dist/utils/http-utility.d.ts +5 -0
  187. package/dist/utils/http-utility.js +68 -0
  188. package/dist/utils/http-utility.js.map +1 -0
  189. package/dist/utils/keychain.d.ts +129 -0
  190. package/dist/utils/keychain.js +193 -0
  191. package/dist/utils/keychain.js.map +1 -0
  192. package/dist/utils/logger.d.ts +4 -0
  193. package/dist/utils/logger.js +28 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/package.d.ts +3 -0
  196. package/dist/utils/package.js +9 -0
  197. package/dist/utils/package.js.map +1 -0
  198. package/dist/utils/scopes.d.ts +12 -0
  199. package/dist/utils/scopes.js +19 -0
  200. package/dist/utils/scopes.js.map +1 -0
  201. package/dist/utils/terminal.d.ts +35 -0
  202. package/dist/utils/terminal.js +409 -0
  203. package/dist/utils/terminal.js.map +1 -0
  204. package/dist/utils/tools.d.ts +63 -0
  205. package/dist/utils/tools.js +149 -0
  206. package/dist/utils/tools.js.map +1 -0
  207. package/dist/utils/types.d.ts +55 -0
  208. package/dist/utils/types.js +3 -0
  209. package/dist/utils/types.js.map +1 -0
  210. package/package.json +89 -0
@@ -0,0 +1,149 @@
1
+ import { log } from './logger.js';
2
+ import { Glob } from './glob.js';
3
+ /**
4
+ * Filters the provided tools collection based on specified glob patterns and readOnly flag.
5
+ * This function processes the input patterns against available tools to determine
6
+ * which tools should be returned. It handles special cases like wildcard patterns,
7
+ * empty pattern arrays, and pattern matching errors. When readOnly is true,
8
+ * it only returns tools that have _meta.readOnly set to true or tools that follow read-only patterns.
9
+ *
10
+ * IMPORTANT: The readOnly flag takes priority over pattern matching for security reasons.
11
+ * Even if patterns match non-read-only tools, when readOnly=true is specified,
12
+ * only read-only tools will be returned.
13
+ *
14
+ * @param allTools - Complete collection of available tools to be filtered
15
+ * @param patterns - Optional glob patterns to filter tools by (e.g., 'ziti*', 'jwt-*')
16
+ * If omitted or empty, all tools will be returned
17
+ * A single '*' pattern will return all tools
18
+ * @param readOnly - Optional flag to only return read-only tools
19
+ * When true, only returns tools marked as readOnly
20
+ * Takes priority over pattern matching for security
21
+ * @returns Array of Tool objects that match the specified criteria
22
+ * Returns all tools if no patterns provided or on error
23
+ *
24
+ * @example
25
+ * // Return all tools that start with "auth"
26
+ * const authTools = getAvailableTools(tools, ['auth*']);
27
+ *
28
+ * @example
29
+ * // Return all read-only tools (regardless of pattern matching)
30
+ * const readOnlyTools = getAvailableTools(tools, ['*'], true);
31
+ *
32
+ * @example
33
+ * // Return only read-only tools that match the pattern
34
+ * // Note: --read-only takes priority, so even if the pattern matches non-read-only tools,
35
+ * // only the read-only ones will be returned
36
+ * const readOnlyAuthTools = getAvailableTools(tools, ['ziti_*_application'], true);
37
+ */
38
+ export function getAvailableTools(allTools, patterns, readOnly) {
39
+ // Start with all tools
40
+ let filteredTools = allTools;
41
+ // Apply pattern filtering if patterns are provided
42
+ if (patterns?.length) {
43
+ filteredTools = filterToolsByPatterns(filteredTools, patterns);
44
+ }
45
+ // Apply read-only filtering if requested
46
+ // IMPORTANT: This is applied AFTER pattern filtering, ensuring that
47
+ // --read-only takes priority over --tools for security
48
+ // Even if non-read-only tools match the pattern, they will be filtered out here
49
+ if (readOnly) {
50
+ filteredTools = filterToolsByReadOnly(filteredTools);
51
+ }
52
+ return filteredTools;
53
+ }
54
+ function filterToolsByPatterns(tools, patterns) {
55
+ try {
56
+ // Special case for global wildcard
57
+ if (patterns.length === 1 && patterns[0] === '*') {
58
+ return tools; // Keep all tools, no pattern filtering needed
59
+ }
60
+ // Compile glob patterns once for performance
61
+ const globs = patterns.map((pattern) => new Glob(pattern));
62
+ // Track matching tools and matches per pattern
63
+ const enabledToolNames = new Set();
64
+ const matchesByPattern = new Map();
65
+ // For each tool, check if it matches any pattern
66
+ for (const tool of tools) {
67
+ for (const glob of globs) {
68
+ if (glob.matches(tool.name)) {
69
+ enabledToolNames.add(tool.name);
70
+ // Count matches per pattern for logging
71
+ const patternString = glob.toString();
72
+ matchesByPattern.set(patternString, (matchesByPattern.get(patternString) || 0) + 1);
73
+ // Once we find a match, no need to check other patterns
74
+ break;
75
+ }
76
+ }
77
+ }
78
+ // Log match counts for wildcard patterns for debugging
79
+ for (const [pattern, count] of matchesByPattern.entries()) {
80
+ if (pattern.includes('*')) {
81
+ log(`Glob pattern '${pattern}' matched ${count} tools`);
82
+ }
83
+ }
84
+ // Create the filtered tool list based on patterns
85
+ const filteredTools = tools.filter((tool) => enabledToolNames.has(tool.name));
86
+ log(`Selected ${filteredTools.length} available tools based on patterns`);
87
+ return filteredTools;
88
+ }
89
+ catch (error) {
90
+ // Log error and use all tools as fallback
91
+ log(`Error determining available tools: ${error instanceof Error ? error.message : String(error)}`);
92
+ return tools;
93
+ }
94
+ }
95
+ function filterToolsByReadOnly(tools) {
96
+ const readOnlyTools = tools.filter((tool) => tool._meta?.readOnly === true);
97
+ log(`Filtered to ${readOnlyTools.length} read-only tools`);
98
+ return readOnlyTools;
99
+ }
100
+ /**
101
+ * Validates tool patterns against available tools to ensure each pattern matches at least one tool.
102
+ * This function verifies that each provided pattern (including glob patterns) corresponds to
103
+ * at least one available tool, throwing specific errors for different validation scenarios.
104
+ *
105
+ * @param patterns - Array of tool name patterns to validate
106
+ * Can include glob patterns with wildcards (e.g., 'ziti*')
107
+ * Empty array or undefined will skip validation
108
+ * @param availableTools - Collection of Tool objects to validate patterns against
109
+ *
110
+ * @throws {Error} If availableTools is not a valid array or is empty
111
+ * @throws {Error} If any pattern doesn't match at least one tool name, with different
112
+ * error messages for exact matches vs. wildcard patterns
113
+ *
114
+ * @example
115
+ * // Validate specific tool names
116
+ * validatePatterns(['ziti-jwt', 'ziti-management'], tools);
117
+ *
118
+ * @example
119
+ * // Validate with glob patterns
120
+ * validatePatterns(['ziti*', 'jwt-*'], tools);
121
+ *
122
+ * @see {@link Glob} for the pattern matching implementation
123
+ * @see {@link getAvailableTools} for filtering tools using these patterns
124
+ */
125
+ export function validatePatterns(patterns, availableTools) {
126
+ // Skip validation if patterns array is empty
127
+ if (!patterns || patterns.length === 0) {
128
+ return;
129
+ }
130
+ // Input validation
131
+ if (!availableTools || !Array.isArray(availableTools)) {
132
+ throw new Error('Invalid tools array provided for validation');
133
+ }
134
+ if (availableTools.length === 0) {
135
+ throw new Error('No tools available for pattern validation');
136
+ }
137
+ // Extract tool names for faster matching
138
+ const toolNames = availableTools.map((tool) => tool.name);
139
+ // Validate each pattern
140
+ for (const pattern of patterns) {
141
+ const glob = new Glob(pattern);
142
+ const matchesAnyTool = toolNames.some((name) => glob.matches(name));
143
+ if (!matchesAnyTool) {
144
+ const errorPrefix = pattern.includes('*') ? `No tools match the pattern` : `Invalid tool`;
145
+ throw new Error(`${errorPrefix}: ${pattern}. Accepted tools are: ${toolNames.join(', ')}`);
146
+ }
147
+ }
148
+ }
149
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/utils/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface ToolAnnotations {
2
+ destructiveHint?: boolean;
3
+ idempotentHint?: boolean;
4
+ openWorldHint?: boolean;
5
+ readOnlyHint?: boolean;
6
+ title?: string;
7
+ }
8
+ export interface Tool {
9
+ name: string;
10
+ description: string;
11
+ inputSchema?: Record<string, any>;
12
+ _meta?: {
13
+ requiredScopes: string[];
14
+ readOnly?: boolean;
15
+ };
16
+ annotations?: ToolAnnotations;
17
+ }
18
+ export interface HandlerRequest {
19
+ token: string;
20
+ parameters: Record<string, any>;
21
+ }
22
+ export interface HandlerConfig {
23
+ zitiControllerHost: string;
24
+ domain: string | undefined;
25
+ }
26
+ export interface HandlerResponse {
27
+ content: Array<{
28
+ type: string;
29
+ [key: string]: any;
30
+ }>;
31
+ isError: boolean;
32
+ }
33
+ export interface ClientOptions {
34
+ tools: string[];
35
+ readOnly?: boolean;
36
+ }
37
+ export interface OpenZitiApplication {
38
+ client_id: string;
39
+ name: string;
40
+ [key: string]: any;
41
+ }
42
+ export interface OpenZitiResourceServer {
43
+ id: string;
44
+ name: string;
45
+ identifier: string;
46
+ [key: string]: any;
47
+ }
48
+ export interface OpenZitiPaginatedResponse {
49
+ clients?: OpenZitiApplication[];
50
+ resource_servers?: OpenZitiResourceServer[];
51
+ total?: number;
52
+ page?: number;
53
+ per_page?: number;
54
+ [key: string]: any;
55
+ }
@@ -0,0 +1,3 @@
1
+ // This file contains common types and interfaces used across the application.
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,8EAA8E"}
package/package.json ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ "name": "@openziti/ziti-mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "OpenZiti Model Context Protocol (MCP) Server — A secure implementation of an MCP server that provides AI assistants with controlled access to the OpenZiti Controller's Management API through natural language. It enables AI-assisted Ziti Network management while enforcing best practices around security, least-privilege access, and zero-trust.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "ziti-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "package.json",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "prebuild": "npm run format | grep -vF '(unchanged)' && npm run lint",
18
+ "build": "rm -rf dist && tsc",
19
+ "build-controller-client-2": "rm -rf ./src/utils/controller-client && npx @hey-api/openapi-ts -i management.yml -o ./src/utils/controller-client",
20
+ "build-controller-client": "rm -rf ./src/utils/controller-client && npx @hey-api/openapi-ts",
21
+ "postbuild": "shx chmod +x dist/*.js",
22
+ "dev": "tsx src/index.ts run",
23
+ "dev:debug": "DEBUG=ziti-mcp tsx src/index.ts run",
24
+ "dev:inspect": "npx @modelcontextprotocol/inspector tsx src/index.ts run",
25
+ "start": "node dist/index.js run",
26
+ "start:debug": "DEBUG=ziti-mcp node dist/index.js run",
27
+ "start:inspect": "npx @modelcontextprotocol/inspector node dist/index.js run",
28
+ "test": "vitest run",
29
+ "test:watch": "vitest",
30
+ "test:coverage": "vitest run --coverage",
31
+ "setup": "node utils/local-setup.js",
32
+ "notice": "node utils/generate-notice.js",
33
+ "lint": "eslint . --ext .js,.ts",
34
+ "lint:fix": "eslint . --ext .js,.ts --fix",
35
+ "format": "prettier --write \"**/*.{js,ts,json,md}\"",
36
+ "format:check": "prettier --check \"**/*.{js,ts,json,md}\"",
37
+ "typecheck": "tsc --noEmit"
38
+ },
39
+ "keywords": [
40
+ "ziti",
41
+ "openziti",
42
+ "ai",
43
+ "mcp",
44
+ "model context protocol",
45
+ "claude"
46
+ ],
47
+ "author": "NetFoundry",
48
+ "license": "Apache-2.0",
49
+ "dependencies": {
50
+ "@modelcontextprotocol/sdk": "^1.10.2",
51
+ "auth0": "^4.21.0",
52
+ "chalk": "^5.4.1",
53
+ "commander": "^13.1.0",
54
+ "debug": "^4.4.0",
55
+ "jwt-decode": "^4.0.0",
56
+ "keytar": "^7.9.0",
57
+ "open": "^10.1.0",
58
+ "which": "^5.0.0"
59
+ },
60
+ "devDependencies": {
61
+ "@eslint/js": "^9.23.0",
62
+ "@hey-api/openapi-ts": "^0.87.4",
63
+ "@types/debug": "^4.1.12",
64
+ "@types/node": "^22.14.0",
65
+ "@vitest/coverage-v8": "^3.1.1",
66
+ "@vitest/ui": "^3.1.1",
67
+ "eslint": "9.39.2",
68
+ "eslint-config-prettier": "^10.1.8",
69
+ "globals": "^16.0.0",
70
+ "msw": "^2.7.3",
71
+ "prettier": "^3.6.2",
72
+ "shx": "^0.4.0",
73
+ "tsx": "^4.19.3",
74
+ "typescript": "^5.8.2",
75
+ "typescript-eslint": "^8.29.0",
76
+ "vitest": "^3.1.1"
77
+ },
78
+ "engines": {
79
+ "node": ">=18.0.0"
80
+ },
81
+ "repository": {
82
+ "type": "git",
83
+ "url": "git+https://github.com/openziti/openziti-mcp-server.git"
84
+ },
85
+ "homepage": "https://github.com/openziti/openziti-mcp-server#readme",
86
+ "publishConfig": {
87
+ "access": "public"
88
+ }
89
+ }