@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.
- package/LICENSE +201 -0
- package/README.md +868 -0
- package/dist/auth/client-credentials-flow.d.ts +21 -0
- package/dist/auth/client-credentials-flow.js +63 -0
- package/dist/auth/client-credentials-flow.js.map +1 -0
- package/dist/auth/device-auth-flow.d.ts +47 -0
- package/dist/auth/device-auth-flow.js +291 -0
- package/dist/auth/device-auth-flow.js.map +1 -0
- package/dist/clients/base.d.ts +74 -0
- package/dist/clients/base.js +109 -0
- package/dist/clients/base.js.map +1 -0
- package/dist/clients/claude.d.ts +22 -0
- package/dist/clients/claude.js +40 -0
- package/dist/clients/claude.js.map +1 -0
- package/dist/clients/cursor.d.ts +22 -0
- package/dist/clients/cursor.js +39 -0
- package/dist/clients/cursor.js.map +1 -0
- package/dist/clients/index.d.ts +33 -0
- package/dist/clients/index.js +39 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/types.d.ts +70 -0
- package/dist/clients/types.js +2 -0
- package/dist/clients/types.js.map +1 -0
- package/dist/clients/utils.d.ts +22 -0
- package/dist/clients/utils.js +46 -0
- package/dist/clients/utils.js.map +1 -0
- package/dist/clients/vscode.d.ts +76 -0
- package/dist/clients/vscode.js +159 -0
- package/dist/clients/vscode.js.map +1 -0
- package/dist/clients/windsurf.d.ts +22 -0
- package/dist/clients/windsurf.js +39 -0
- package/dist/clients/windsurf.js.map +1 -0
- package/dist/commands/init.d.ts +45 -0
- package/dist/commands/init.js +133 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logout.d.ts +12 -0
- package/dist/commands/logout.js +90 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/run.d.ts +15 -0
- package/dist/commands/run.js +94 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/session.d.ts +12 -0
- package/dist/commands/session.js +99 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +105 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +67 -0
- package/dist/server.js +171 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/api-sessions.d.ts +3 -0
- package/dist/tools/api-sessions.js +86 -0
- package/dist/tools/api-sessions.js.map +1 -0
- package/dist/tools/auth-policies.d.ts +3 -0
- package/dist/tools/auth-policies.js +347 -0
- package/dist/tools/auth-policies.js.map +1 -0
- package/dist/tools/authenticators.d.ts +3 -0
- package/dist/tools/authenticators.js +183 -0
- package/dist/tools/authenticators.js.map +1 -0
- package/dist/tools/certificate-authorities.d.ts +3 -0
- package/dist/tools/certificate-authorities.js +288 -0
- package/dist/tools/certificate-authorities.js.map +1 -0
- package/dist/tools/config-types.d.ts +3 -0
- package/dist/tools/config-types.js +194 -0
- package/dist/tools/config-types.js.map +1 -0
- package/dist/tools/configs.d.ts +3 -0
- package/dist/tools/configs.js +203 -0
- package/dist/tools/configs.js.map +1 -0
- package/dist/tools/controller-settings.d.ts +3 -0
- package/dist/tools/controller-settings.js +219 -0
- package/dist/tools/controller-settings.js.map +1 -0
- package/dist/tools/controllers.d.ts +3 -0
- package/dist/tools/controllers.js +89 -0
- package/dist/tools/controllers.js.map +1 -0
- package/dist/tools/edge-router-policies.d.ts +3 -0
- package/dist/tools/edge-router-policies.js +262 -0
- package/dist/tools/edge-router-policies.js.map +1 -0
- package/dist/tools/edge-routers.d.ts +3 -0
- package/dist/tools/edge-routers.js +381 -0
- package/dist/tools/edge-routers.js.map +1 -0
- package/dist/tools/enrollments.d.ts +3 -0
- package/dist/tools/enrollments.js +187 -0
- package/dist/tools/enrollments.js.map +1 -0
- package/dist/tools/external-jwt-signers.d.ts +3 -0
- package/dist/tools/external-jwt-signers.js +242 -0
- package/dist/tools/external-jwt-signers.js.map +1 -0
- package/dist/tools/identities.d.ts +3 -0
- package/dist/tools/identities.js +741 -0
- package/dist/tools/identities.js.map +1 -0
- package/dist/tools/identity-types.d.ts +3 -0
- package/dist/tools/identity-types.js +58 -0
- package/dist/tools/identity-types.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +101 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/posture-checks.d.ts +3 -0
- package/dist/tools/posture-checks.js +254 -0
- package/dist/tools/posture-checks.js.map +1 -0
- package/dist/tools/routers.d.ts +3 -0
- package/dist/tools/routers.js +169 -0
- package/dist/tools/routers.js.map +1 -0
- package/dist/tools/service-edge-router-policies.d.ts +3 -0
- package/dist/tools/service-edge-router-policies.js +282 -0
- package/dist/tools/service-edge-router-policies.js.map +1 -0
- package/dist/tools/service-policies.d.ts +3 -0
- package/dist/tools/service-policies.js +311 -0
- package/dist/tools/service-policies.js.map +1 -0
- package/dist/tools/services.d.ts +3 -0
- package/dist/tools/services.js +403 -0
- package/dist/tools/services.js.map +1 -0
- package/dist/tools/sessions.d.ts +3 -0
- package/dist/tools/sessions.js +86 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/terminators.d.ts +3 -0
- package/dist/tools/terminators.js +187 -0
- package/dist/tools/terminators.js.map +1 -0
- package/dist/tools/transit-routers.d.ts +3 -0
- package/dist/tools/transit-routers.js +169 -0
- package/dist/tools/transit-routers.js.map +1 -0
- package/dist/utils/analytics.d.ts +75 -0
- package/dist/utils/analytics.js +191 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/auth0-client.d.ts +27 -0
- package/dist/utils/auth0-client.js +67 -0
- package/dist/utils/auth0-client.js.map +1 -0
- package/dist/utils/authenticated-client.d.ts +6 -0
- package/dist/utils/authenticated-client.js +55 -0
- package/dist/utils/authenticated-client.js.map +1 -0
- package/dist/utils/config.d.ts +65 -0
- package/dist/utils/config.js +80 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/constants.d.ts +15 -0
- package/dist/utils/constants.js +17 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/controller-client/client/client.gen.d.ts +2 -0
- package/dist/utils/controller-client/client/client.gen.js +229 -0
- package/dist/utils/controller-client/client/client.gen.js.map +1 -0
- package/dist/utils/controller-client/client/index.d.ts +8 -0
- package/dist/utils/controller-client/client/index.js +7 -0
- package/dist/utils/controller-client/client/index.js.map +1 -0
- package/dist/utils/controller-client/client/types.gen.d.ts +117 -0
- package/dist/utils/controller-client/client/types.gen.js +3 -0
- package/dist/utils/controller-client/client/types.gen.js.map +1 -0
- package/dist/utils/controller-client/client/utils.gen.d.ts +33 -0
- package/dist/utils/controller-client/client/utils.gen.js +232 -0
- package/dist/utils/controller-client/client/utils.gen.js.map +1 -0
- package/dist/utils/controller-client/client.gen.d.ts +12 -0
- package/dist/utils/controller-client/client.gen.js +6 -0
- package/dist/utils/controller-client/client.gen.js.map +1 -0
- package/dist/utils/controller-client/core/auth.gen.d.ts +18 -0
- package/dist/utils/controller-client/core/auth.gen.js +15 -0
- package/dist/utils/controller-client/core/auth.gen.js.map +1 -0
- package/dist/utils/controller-client/core/bodySerializer.gen.d.ts +25 -0
- package/dist/utils/controller-client/core/bodySerializer.gen.js +58 -0
- package/dist/utils/controller-client/core/bodySerializer.gen.js.map +1 -0
- package/dist/utils/controller-client/core/params.gen.d.ts +43 -0
- package/dist/utils/controller-client/core/params.gen.js +101 -0
- package/dist/utils/controller-client/core/params.gen.js.map +1 -0
- package/dist/utils/controller-client/core/pathSerializer.gen.d.ts +33 -0
- package/dist/utils/controller-client/core/pathSerializer.gen.js +115 -0
- package/dist/utils/controller-client/core/pathSerializer.gen.js.map +1 -0
- package/dist/utils/controller-client/core/queryKeySerializer.gen.d.ts +18 -0
- package/dist/utils/controller-client/core/queryKeySerializer.gen.js +100 -0
- package/dist/utils/controller-client/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/utils/controller-client/core/serverSentEvents.gen.d.ts +71 -0
- package/dist/utils/controller-client/core/serverSentEvents.gen.js +136 -0
- package/dist/utils/controller-client/core/serverSentEvents.gen.js.map +1 -0
- package/dist/utils/controller-client/core/types.gen.d.ts +78 -0
- package/dist/utils/controller-client/core/types.gen.js +3 -0
- package/dist/utils/controller-client/core/types.gen.js.map +1 -0
- package/dist/utils/controller-client/core/utils.gen.d.ts +19 -0
- package/dist/utils/controller-client/core/utils.gen.js +88 -0
- package/dist/utils/controller-client/core/utils.gen.js.map +1 -0
- package/dist/utils/controller-client/index.d.ts +2 -0
- package/dist/utils/controller-client/index.js +3 -0
- package/dist/utils/controller-client/index.js.map +1 -0
- package/dist/utils/controller-client/sdk.gen.d.ts +1302 -0
- package/dist/utils/controller-client/sdk.gen.js +4436 -0
- package/dist/utils/controller-client/sdk.gen.js.map +1 -0
- package/dist/utils/controller-client/types.gen.d.ts +9170 -0
- package/dist/utils/controller-client/types.gen.js +3 -0
- package/dist/utils/controller-client/types.gen.js.map +1 -0
- package/dist/utils/glob.d.ts +75 -0
- package/dist/utils/glob.js +110 -0
- package/dist/utils/glob.js.map +1 -0
- package/dist/utils/http-utility.d.ts +5 -0
- package/dist/utils/http-utility.js +68 -0
- package/dist/utils/http-utility.js.map +1 -0
- package/dist/utils/keychain.d.ts +129 -0
- package/dist/utils/keychain.js +193 -0
- package/dist/utils/keychain.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package.d.ts +3 -0
- package/dist/utils/package.js +9 -0
- package/dist/utils/package.js.map +1 -0
- package/dist/utils/scopes.d.ts +12 -0
- package/dist/utils/scopes.js +19 -0
- package/dist/utils/scopes.js.map +1 -0
- package/dist/utils/terminal.d.ts +35 -0
- package/dist/utils/terminal.js +409 -0
- package/dist/utils/terminal.js.map +1 -0
- package/dist/utils/tools.d.ts +63 -0
- package/dist/utils/tools.js +149 -0
- package/dist/utils/tools.js.map +1 -0
- package/dist/utils/types.d.ts +55 -0
- package/dist/utils/types.js +3 -0
- package/dist/utils/types.js.map +1 -0
- 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 @@
|
|
|
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
|
+
}
|