@robinmordasiewicz/f5xc-api-mcp 1.0.82-2512312028
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/CHANGELOG.md +74 -0
- package/README.md +415 -0
- package/dist/auth/credential-manager.d.ts +151 -0
- package/dist/auth/credential-manager.d.ts.map +1 -0
- package/dist/auth/credential-manager.js +330 -0
- package/dist/auth/credential-manager.js.map +1 -0
- package/dist/auth/http-client.d.ts +81 -0
- package/dist/auth/http-client.d.ts.map +1 -0
- package/dist/auth/http-client.js +197 -0
- package/dist/auth/http-client.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/config/config-manager.d.ts +72 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +247 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +74 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +75 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +77 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +31 -0
- package/dist/config/types.js.map +1 -0
- package/dist/generator/dependency-extractor.d.ts +103 -0
- package/dist/generator/dependency-extractor.d.ts.map +1 -0
- package/dist/generator/dependency-extractor.js +473 -0
- package/dist/generator/dependency-extractor.js.map +1 -0
- package/dist/generator/dependency-graph.d.ts +67 -0
- package/dist/generator/dependency-graph.d.ts.map +1 -0
- package/dist/generator/dependency-graph.js +330 -0
- package/dist/generator/dependency-graph.js.map +1 -0
- package/dist/generator/dependency-types.d.ts +206 -0
- package/dist/generator/dependency-types.d.ts.map +1 -0
- package/dist/generator/dependency-types.js +37 -0
- package/dist/generator/dependency-types.js.map +1 -0
- package/dist/generator/index.d.ts +7 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +7 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/naming/acronyms.d.ts +81 -0
- package/dist/generator/naming/acronyms.d.ts.map +1 -0
- package/dist/generator/naming/acronyms.js +253 -0
- package/dist/generator/naming/acronyms.js.map +1 -0
- package/dist/generator/naming/index.d.ts +6 -0
- package/dist/generator/naming/index.d.ts.map +1 -0
- package/dist/generator/naming/index.js +6 -0
- package/dist/generator/naming/index.js.map +1 -0
- package/dist/generator/naming/volterra-mapping.d.ts +102 -0
- package/dist/generator/naming/volterra-mapping.d.ts.map +1 -0
- package/dist/generator/naming/volterra-mapping.js +259 -0
- package/dist/generator/naming/volterra-mapping.js.map +1 -0
- package/dist/generator/openapi-parser.d.ts +701 -0
- package/dist/generator/openapi-parser.d.ts.map +1 -0
- package/dist/generator/openapi-parser.js +704 -0
- package/dist/generator/openapi-parser.js.map +1 -0
- package/dist/generator/tool-generator.d.ts +118 -0
- package/dist/generator/tool-generator.d.ts.map +1 -0
- package/dist/generator/tool-generator.js +529 -0
- package/dist/generator/tool-generator.js.map +1 -0
- package/dist/generator/transformers/index.d.ts +7 -0
- package/dist/generator/transformers/index.d.ts.map +1 -0
- package/dist/generator/transformers/index.js +7 -0
- package/dist/generator/transformers/index.js.map +1 -0
- package/dist/generator/transformers/normalize-examples.d.ts +48 -0
- package/dist/generator/transformers/normalize-examples.d.ts.map +1 -0
- package/dist/generator/transformers/normalize-examples.js +66 -0
- package/dist/generator/transformers/normalize-examples.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/error-resolution.d.ts +70 -0
- package/dist/prompts/error-resolution.d.ts.map +1 -0
- package/dist/prompts/error-resolution.js +350 -0
- package/dist/prompts/error-resolution.js.map +1 -0
- package/dist/prompts/index.d.ts +8 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflows.d.ts +59 -0
- package/dist/prompts/workflows.d.ts.map +1 -0
- package/dist/prompts/workflows.js +441 -0
- package/dist/prompts/workflows.js.map +1 -0
- package/dist/resources/handlers.d.ts +70 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +270 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/index.d.ts +8 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +6 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/templates.d.ts +86 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +248 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/server.d.ts +78 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +721 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/discovery/best-practices.d.ts +140 -0
- package/dist/tools/discovery/best-practices.d.ts.map +1 -0
- package/dist/tools/discovery/best-practices.js +499 -0
- package/dist/tools/discovery/best-practices.js.map +1 -0
- package/dist/tools/discovery/consolidate.d.ts +97 -0
- package/dist/tools/discovery/consolidate.d.ts.map +1 -0
- package/dist/tools/discovery/consolidate.js +200 -0
- package/dist/tools/discovery/consolidate.js.map +1 -0
- package/dist/tools/discovery/cost-estimator.d.ts +114 -0
- package/dist/tools/discovery/cost-estimator.d.ts.map +1 -0
- package/dist/tools/discovery/cost-estimator.js +273 -0
- package/dist/tools/discovery/cost-estimator.js.map +1 -0
- package/dist/tools/discovery/dependencies.d.ts +113 -0
- package/dist/tools/discovery/dependencies.d.ts.map +1 -0
- package/dist/tools/discovery/dependencies.js +258 -0
- package/dist/tools/discovery/dependencies.js.map +1 -0
- package/dist/tools/discovery/describe.d.ts +133 -0
- package/dist/tools/discovery/describe.d.ts.map +1 -0
- package/dist/tools/discovery/describe.js +208 -0
- package/dist/tools/discovery/describe.js.map +1 -0
- package/dist/tools/discovery/execute.d.ts +96 -0
- package/dist/tools/discovery/execute.d.ts.map +1 -0
- package/dist/tools/discovery/execute.js +220 -0
- package/dist/tools/discovery/execute.js.map +1 -0
- package/dist/tools/discovery/index-loader.d.ts +28 -0
- package/dist/tools/discovery/index-loader.d.ts.map +1 -0
- package/dist/tools/discovery/index-loader.js +72 -0
- package/dist/tools/discovery/index-loader.js.map +1 -0
- package/dist/tools/discovery/index.d.ts +363 -0
- package/dist/tools/discovery/index.d.ts.map +1 -0
- package/dist/tools/discovery/index.js +361 -0
- package/dist/tools/discovery/index.js.map +1 -0
- package/dist/tools/discovery/resolver.d.ts +119 -0
- package/dist/tools/discovery/resolver.d.ts.map +1 -0
- package/dist/tools/discovery/resolver.js +369 -0
- package/dist/tools/discovery/resolver.js.map +1 -0
- package/dist/tools/discovery/search.d.ts +41 -0
- package/dist/tools/discovery/search.d.ts.map +1 -0
- package/dist/tools/discovery/search.js +176 -0
- package/dist/tools/discovery/search.js.map +1 -0
- package/dist/tools/discovery/types.d.ts +91 -0
- package/dist/tools/discovery/types.d.ts.map +1 -0
- package/dist/tools/discovery/types.js +9 -0
- package/dist/tools/discovery/types.js.map +1 -0
- package/dist/tools/discovery/validate.d.ts +63 -0
- package/dist/tools/discovery/validate.d.ts.map +1 -0
- package/dist/tools/discovery/validate.js +239 -0
- package/dist/tools/discovery/validate.js.map +1 -0
- package/dist/tools/generated/admin_console_and_ui/index.d.ts +8 -0
- package/dist/tools/generated/admin_console_and_ui/index.d.ts.map +1 -0
- package/dist/tools/generated/admin_console_and_ui/index.js +265 -0
- package/dist/tools/generated/admin_console_and_ui/index.js.map +1 -0
- package/dist/tools/generated/api/index.d.ts +8 -0
- package/dist/tools/generated/api/index.d.ts.map +1 -0
- package/dist/tools/generated/api/index.js +7016 -0
- package/dist/tools/generated/api/index.js.map +1 -0
- package/dist/tools/generated/authentication/index.d.ts +8 -0
- package/dist/tools/generated/authentication/index.d.ts.map +1 -0
- package/dist/tools/generated/authentication/index.js +907 -0
- package/dist/tools/generated/authentication/index.js.map +1 -0
- package/dist/tools/generated/bigip/index.d.ts +8 -0
- package/dist/tools/generated/bigip/index.d.ts.map +1 -0
- package/dist/tools/generated/bigip/index.js +3152 -0
- package/dist/tools/generated/bigip/index.js.map +1 -0
- package/dist/tools/generated/billing_and_usage/index.d.ts +8 -0
- package/dist/tools/generated/billing_and_usage/index.d.ts.map +1 -0
- package/dist/tools/generated/billing_and_usage/index.js +2452 -0
- package/dist/tools/generated/billing_and_usage/index.js.map +1 -0
- package/dist/tools/generated/blindfold/index.d.ts +8 -0
- package/dist/tools/generated/blindfold/index.d.ts.map +1 -0
- package/dist/tools/generated/blindfold/index.js +3790 -0
- package/dist/tools/generated/blindfold/index.js.map +1 -0
- package/dist/tools/generated/bot_and_threat_defense/index.d.ts +8 -0
- package/dist/tools/generated/bot_and_threat_defense/index.d.ts.map +1 -0
- package/dist/tools/generated/bot_and_threat_defense/index.js +2746 -0
- package/dist/tools/generated/bot_and_threat_defense/index.js.map +1 -0
- package/dist/tools/generated/cdn/index.d.ts +8 -0
- package/dist/tools/generated/cdn/index.d.ts.map +1 -0
- package/dist/tools/generated/cdn/index.js +2686 -0
- package/dist/tools/generated/cdn/index.js.map +1 -0
- package/dist/tools/generated/ce_management/index.d.ts +8 -0
- package/dist/tools/generated/ce_management/index.d.ts.map +1 -0
- package/dist/tools/generated/ce_management/index.js +3812 -0
- package/dist/tools/generated/ce_management/index.js.map +1 -0
- package/dist/tools/generated/certificates/index.d.ts +8 -0
- package/dist/tools/generated/certificates/index.d.ts.map +1 -0
- package/dist/tools/generated/certificates/index.js +2547 -0
- package/dist/tools/generated/certificates/index.js.map +1 -0
- package/dist/tools/generated/cloud_infrastructure/index.d.ts +8 -0
- package/dist/tools/generated/cloud_infrastructure/index.d.ts.map +1 -0
- package/dist/tools/generated/cloud_infrastructure/index.js +3959 -0
- package/dist/tools/generated/cloud_infrastructure/index.js.map +1 -0
- package/dist/tools/generated/container_services/index.d.ts +8 -0
- package/dist/tools/generated/container_services/index.d.ts.map +1 -0
- package/dist/tools/generated/container_services/index.js +2018 -0
- package/dist/tools/generated/container_services/index.js.map +1 -0
- package/dist/tools/generated/data_and_privacy_security/index.d.ts +8 -0
- package/dist/tools/generated/data_and_privacy_security/index.d.ts.map +1 -0
- package/dist/tools/generated/data_and_privacy_security/index.js +1662 -0
- package/dist/tools/generated/data_and_privacy_security/index.js.map +1 -0
- package/dist/tools/generated/data_intelligence/index.d.ts +8 -0
- package/dist/tools/generated/data_intelligence/index.d.ts.map +1 -0
- package/dist/tools/generated/data_intelligence/index.js +1600 -0
- package/dist/tools/generated/data_intelligence/index.js.map +1 -0
- package/dist/tools/generated/ddos/index.d.ts +8 -0
- package/dist/tools/generated/ddos/index.d.ts.map +1 -0
- package/dist/tools/generated/ddos/index.js +8091 -0
- package/dist/tools/generated/ddos/index.js.map +1 -0
- package/dist/tools/generated/dependency-graph.json +26358 -0
- package/dist/tools/generated/dns/index.d.ts +8 -0
- package/dist/tools/generated/dns/index.d.ts.map +1 -0
- package/dist/tools/generated/dns/index.js +6096 -0
- package/dist/tools/generated/dns/index.js.map +1 -0
- package/dist/tools/generated/generative_ai/index.d.ts +8 -0
- package/dist/tools/generated/generative_ai/index.d.ts.map +1 -0
- package/dist/tools/generated/generative_ai/index.js +1019 -0
- package/dist/tools/generated/generative_ai/index.js.map +1 -0
- package/dist/tools/generated/managed_kubernetes/index.d.ts +8 -0
- package/dist/tools/generated/managed_kubernetes/index.d.ts.map +1 -0
- package/dist/tools/generated/managed_kubernetes/index.js +3368 -0
- package/dist/tools/generated/managed_kubernetes/index.js.map +1 -0
- package/dist/tools/generated/marketplace/index.d.ts +8 -0
- package/dist/tools/generated/marketplace/index.d.ts.map +1 -0
- package/dist/tools/generated/marketplace/index.js +4329 -0
- package/dist/tools/generated/marketplace/index.js.map +1 -0
- package/dist/tools/generated/network/index.d.ts +8 -0
- package/dist/tools/generated/network/index.d.ts.map +1 -0
- package/dist/tools/generated/network/index.js +12424 -0
- package/dist/tools/generated/network/index.js.map +1 -0
- package/dist/tools/generated/network_security/index.d.ts +8 -0
- package/dist/tools/generated/network_security/index.d.ts.map +1 -0
- package/dist/tools/generated/network_security/index.js +9637 -0
- package/dist/tools/generated/network_security/index.js.map +1 -0
- package/dist/tools/generated/nginx_one/index.d.ts +8 -0
- package/dist/tools/generated/nginx_one/index.d.ts.map +1 -0
- package/dist/tools/generated/nginx_one/index.js +1692 -0
- package/dist/tools/generated/nginx_one/index.js.map +1 -0
- package/dist/tools/generated/object_storage/index.d.ts +8 -0
- package/dist/tools/generated/object_storage/index.d.ts.map +1 -0
- package/dist/tools/generated/object_storage/index.js +996 -0
- package/dist/tools/generated/object_storage/index.js.map +1 -0
- package/dist/tools/generated/observability/index.d.ts +8 -0
- package/dist/tools/generated/observability/index.d.ts.map +1 -0
- package/dist/tools/generated/observability/index.js +5285 -0
- package/dist/tools/generated/observability/index.js.map +1 -0
- package/dist/tools/generated/rate_limiting/index.d.ts +8 -0
- package/dist/tools/generated/rate_limiting/index.d.ts.map +1 -0
- package/dist/tools/generated/rate_limiting/index.js +2108 -0
- package/dist/tools/generated/rate_limiting/index.js.map +1 -0
- package/dist/tools/generated/secops_and_incident_response/index.d.ts +8 -0
- package/dist/tools/generated/secops_and_incident_response/index.d.ts.map +1 -0
- package/dist/tools/generated/secops_and_incident_response/index.js +710 -0
- package/dist/tools/generated/secops_and_incident_response/index.js.map +1 -0
- package/dist/tools/generated/service_mesh/index.d.ts +8 -0
- package/dist/tools/generated/service_mesh/index.d.ts.map +1 -0
- package/dist/tools/generated/service_mesh/index.js +6062 -0
- package/dist/tools/generated/service_mesh/index.js.map +1 -0
- package/dist/tools/generated/shape/index.d.ts +8 -0
- package/dist/tools/generated/shape/index.d.ts.map +1 -0
- package/dist/tools/generated/shape/index.js +19381 -0
- package/dist/tools/generated/shape/index.js.map +1 -0
- package/dist/tools/generated/sites/index.d.ts +8 -0
- package/dist/tools/generated/sites/index.d.ts.map +1 -0
- package/dist/tools/generated/sites/index.js +13160 -0
- package/dist/tools/generated/sites/index.js.map +1 -0
- package/dist/tools/generated/statistics/index.d.ts +8 -0
- package/dist/tools/generated/statistics/index.d.ts.map +1 -0
- package/dist/tools/generated/statistics/index.js +8131 -0
- package/dist/tools/generated/statistics/index.js.map +1 -0
- package/dist/tools/generated/support/index.d.ts +8 -0
- package/dist/tools/generated/support/index.d.ts.map +1 -0
- package/dist/tools/generated/support/index.js +5608 -0
- package/dist/tools/generated/support/index.js.map +1 -0
- package/dist/tools/generated/telemetry_and_insights/index.d.ts +8 -0
- package/dist/tools/generated/telemetry_and_insights/index.d.ts.map +1 -0
- package/dist/tools/generated/telemetry_and_insights/index.js +2404 -0
- package/dist/tools/generated/telemetry_and_insights/index.js.map +1 -0
- package/dist/tools/generated/tenant_and_identity/index.d.ts +8 -0
- package/dist/tools/generated/tenant_and_identity/index.d.ts.map +1 -0
- package/dist/tools/generated/tenant_and_identity/index.js +18938 -0
- package/dist/tools/generated/tenant_and_identity/index.js.map +1 -0
- package/dist/tools/generated/threat_campaign/index.d.ts +8 -0
- package/dist/tools/generated/threat_campaign/index.d.ts.map +1 -0
- package/dist/tools/generated/threat_campaign/index.js +102 -0
- package/dist/tools/generated/threat_campaign/index.js.map +1 -0
- package/dist/tools/generated/users/index.d.ts +8 -0
- package/dist/tools/generated/users/index.d.ts.map +1 -0
- package/dist/tools/generated/users/index.js +1515 -0
- package/dist/tools/generated/users/index.js.map +1 -0
- package/dist/tools/generated/virtual/index.d.ts +8 -0
- package/dist/tools/generated/virtual/index.d.ts.map +1 -0
- package/dist/tools/generated/virtual/index.js +11263 -0
- package/dist/tools/generated/virtual/index.js.map +1 -0
- package/dist/tools/generated/vpm_and_node_management/index.d.ts +8 -0
- package/dist/tools/generated/vpm_and_node_management/index.d.ts.map +1 -0
- package/dist/tools/generated/vpm_and_node_management/index.js +88 -0
- package/dist/tools/generated/vpm_and_node_management/index.js.map +1 -0
- package/dist/tools/generated/waf/index.d.ts +8 -0
- package/dist/tools/generated/waf/index.d.ts.map +1 -0
- package/dist/tools/generated/waf/index.js +4586 -0
- package/dist/tools/generated/waf/index.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +27 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +115 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/utils/error-handling.d.ts +109 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/error-handling.js +239 -0
- package/dist/utils/error-handling.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logging.d.ts +75 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +131 -0
- package/dist/utils/logging.js.map +1 -0
- package/manifest.json +143 -0
- package/package.json +110 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling utilities for F5XC API MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Provides typed error classes for different error scenarios
|
|
5
|
+
* and utilities for error categorization and handling.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Base error class for F5XC API errors
|
|
9
|
+
*/
|
|
10
|
+
export class F5XCError extends Error {
|
|
11
|
+
/** Error code for categorization */
|
|
12
|
+
code;
|
|
13
|
+
/** Additional error context */
|
|
14
|
+
context;
|
|
15
|
+
constructor(message, code, context) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "F5XCError";
|
|
18
|
+
this.code = code;
|
|
19
|
+
this.context = context;
|
|
20
|
+
// Maintains proper stack trace for where our error was thrown
|
|
21
|
+
if (Error.captureStackTrace) {
|
|
22
|
+
Error.captureStackTrace(this, F5XCError);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert error to JSON representation
|
|
27
|
+
*/
|
|
28
|
+
toJSON() {
|
|
29
|
+
return {
|
|
30
|
+
name: this.name,
|
|
31
|
+
message: this.message,
|
|
32
|
+
code: this.code,
|
|
33
|
+
context: this.context,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Authentication-related errors
|
|
39
|
+
*/
|
|
40
|
+
export class AuthenticationError extends F5XCError {
|
|
41
|
+
constructor(message, context) {
|
|
42
|
+
super(message, "AUTH_ERROR", context);
|
|
43
|
+
this.name = "AuthenticationError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* API request/response errors
|
|
48
|
+
*/
|
|
49
|
+
export class F5XCApiError extends F5XCError {
|
|
50
|
+
/** HTTP status code */
|
|
51
|
+
status;
|
|
52
|
+
/** Raw API response */
|
|
53
|
+
response;
|
|
54
|
+
constructor(message, status, response, context) {
|
|
55
|
+
super(message, "API_ERROR", context);
|
|
56
|
+
this.name = "F5XCApiError";
|
|
57
|
+
this.status = status;
|
|
58
|
+
this.response = response;
|
|
59
|
+
}
|
|
60
|
+
toJSON() {
|
|
61
|
+
return {
|
|
62
|
+
...super.toJSON(),
|
|
63
|
+
status: this.status,
|
|
64
|
+
response: this.response,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Configuration errors
|
|
70
|
+
*/
|
|
71
|
+
export class ConfigurationError extends F5XCError {
|
|
72
|
+
constructor(message, context) {
|
|
73
|
+
super(message, "CONFIG_ERROR", context);
|
|
74
|
+
this.name = "ConfigurationError";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Validation errors for request parameters
|
|
79
|
+
*/
|
|
80
|
+
export class ValidationError extends F5XCError {
|
|
81
|
+
/** Field-level validation errors */
|
|
82
|
+
errors;
|
|
83
|
+
constructor(message, errors, context) {
|
|
84
|
+
super(message, "VALIDATION_ERROR", context);
|
|
85
|
+
this.name = "ValidationError";
|
|
86
|
+
this.errors = errors;
|
|
87
|
+
}
|
|
88
|
+
toJSON() {
|
|
89
|
+
return {
|
|
90
|
+
...super.toJSON(),
|
|
91
|
+
errors: this.errors,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Tool execution errors
|
|
97
|
+
*/
|
|
98
|
+
export class ToolExecutionError extends F5XCError {
|
|
99
|
+
/** Name of the tool that failed */
|
|
100
|
+
toolName;
|
|
101
|
+
constructor(toolName, message, context) {
|
|
102
|
+
super(message, "TOOL_ERROR", context);
|
|
103
|
+
this.name = "ToolExecutionError";
|
|
104
|
+
this.toolName = toolName;
|
|
105
|
+
}
|
|
106
|
+
toJSON() {
|
|
107
|
+
return {
|
|
108
|
+
...super.toJSON(),
|
|
109
|
+
toolName: this.toolName,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* OpenAPI specification errors
|
|
115
|
+
*/
|
|
116
|
+
export class SpecificationError extends F5XCError {
|
|
117
|
+
constructor(message, context) {
|
|
118
|
+
super(message, "SPEC_ERROR", context);
|
|
119
|
+
this.name = "SpecificationError";
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Error categorization for MCP responses
|
|
124
|
+
*/
|
|
125
|
+
export var ErrorCategory;
|
|
126
|
+
(function (ErrorCategory) {
|
|
127
|
+
/** User input validation errors */
|
|
128
|
+
ErrorCategory["VALIDATION"] = "validation";
|
|
129
|
+
/** Authentication/authorization errors */
|
|
130
|
+
ErrorCategory["AUTHENTICATION"] = "authentication";
|
|
131
|
+
/** Server-side errors */
|
|
132
|
+
ErrorCategory["SERVER"] = "server";
|
|
133
|
+
/** Network/connectivity errors */
|
|
134
|
+
ErrorCategory["NETWORK"] = "network";
|
|
135
|
+
/** Configuration errors */
|
|
136
|
+
ErrorCategory["CONFIGURATION"] = "configuration";
|
|
137
|
+
/** Unknown errors */
|
|
138
|
+
ErrorCategory["UNKNOWN"] = "unknown";
|
|
139
|
+
})(ErrorCategory || (ErrorCategory = {}));
|
|
140
|
+
/**
|
|
141
|
+
* Categorize an error for appropriate handling
|
|
142
|
+
*/
|
|
143
|
+
export function categorizeError(error) {
|
|
144
|
+
if (error instanceof ValidationError) {
|
|
145
|
+
return ErrorCategory.VALIDATION;
|
|
146
|
+
}
|
|
147
|
+
if (error instanceof AuthenticationError) {
|
|
148
|
+
return ErrorCategory.AUTHENTICATION;
|
|
149
|
+
}
|
|
150
|
+
if (error instanceof ConfigurationError) {
|
|
151
|
+
return ErrorCategory.CONFIGURATION;
|
|
152
|
+
}
|
|
153
|
+
if (error instanceof F5XCApiError) {
|
|
154
|
+
if (error.status !== undefined) {
|
|
155
|
+
if (error.status === 401 || error.status === 403) {
|
|
156
|
+
return ErrorCategory.AUTHENTICATION;
|
|
157
|
+
}
|
|
158
|
+
if (error.status >= 400 && error.status < 500) {
|
|
159
|
+
return ErrorCategory.VALIDATION;
|
|
160
|
+
}
|
|
161
|
+
if (error.status >= 500) {
|
|
162
|
+
return ErrorCategory.SERVER;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return ErrorCategory.SERVER;
|
|
166
|
+
}
|
|
167
|
+
if (error instanceof Error) {
|
|
168
|
+
const message = error.message.toLowerCase();
|
|
169
|
+
if (message.includes("network") ||
|
|
170
|
+
message.includes("timeout") ||
|
|
171
|
+
message.includes("econnrefused") ||
|
|
172
|
+
message.includes("enotfound")) {
|
|
173
|
+
return ErrorCategory.NETWORK;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return ErrorCategory.UNKNOWN;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Format error for MCP tool response
|
|
180
|
+
*/
|
|
181
|
+
export function formatErrorForMcp(error) {
|
|
182
|
+
const category = categorizeError(error);
|
|
183
|
+
let errorMessage;
|
|
184
|
+
let errorCode;
|
|
185
|
+
let details;
|
|
186
|
+
if (error instanceof F5XCError) {
|
|
187
|
+
errorMessage = error.message;
|
|
188
|
+
errorCode = error.code;
|
|
189
|
+
details = error.context;
|
|
190
|
+
}
|
|
191
|
+
else if (error instanceof Error) {
|
|
192
|
+
errorMessage = error.message;
|
|
193
|
+
errorCode = "UNKNOWN_ERROR";
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
errorMessage = String(error);
|
|
197
|
+
errorCode = "UNKNOWN_ERROR";
|
|
198
|
+
}
|
|
199
|
+
const errorResponse = {
|
|
200
|
+
error: {
|
|
201
|
+
category,
|
|
202
|
+
code: errorCode,
|
|
203
|
+
message: errorMessage,
|
|
204
|
+
details,
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
return {
|
|
208
|
+
isError: true,
|
|
209
|
+
content: [
|
|
210
|
+
{
|
|
211
|
+
type: "text",
|
|
212
|
+
text: JSON.stringify(errorResponse, null, 2),
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Wrap async function with error handling
|
|
219
|
+
*/
|
|
220
|
+
export function withErrorHandling(fn) {
|
|
221
|
+
return async (...args) => {
|
|
222
|
+
try {
|
|
223
|
+
return await fn(...args);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
if (error instanceof F5XCError) {
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
if (error instanceof Error) {
|
|
230
|
+
throw new F5XCError(error.message, "UNKNOWN_ERROR", {
|
|
231
|
+
originalError: error.name,
|
|
232
|
+
stack: error.stack,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
throw new F5XCError(String(error), "UNKNOWN_ERROR");
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=error-handling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handling.js","sourceRoot":"","sources":["../../src/utils/error-handling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils Module - Export all utility functions
|
|
3
|
+
*/
|
|
4
|
+
export { logger, createLogger, LogLevel } from "./logging.js";
|
|
5
|
+
export type { LoggerConfig } from "./logging.js";
|
|
6
|
+
export { F5XCError, AuthenticationError, F5XCApiError, ConfigurationError, ValidationError, ToolExecutionError, SpecificationError, ErrorCategory, categorizeError, formatErrorForMcp, withErrorHandling, } from "./error-handling.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils Module - Export all utility functions
|
|
3
|
+
*/
|
|
4
|
+
export { logger, createLogger, LogLevel } from "./logging.js";
|
|
5
|
+
export { F5XCError, AuthenticationError, F5XCApiError, ConfigurationError, ValidationError, ToolExecutionError, SpecificationError, ErrorCategory, categorizeError, formatErrorForMcp, withErrorHandling, } from "./error-handling.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG9D,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging utilities for F5XC API MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Uses stderr for logging to avoid interfering with STDIO transport.
|
|
5
|
+
* Provides structured logging with levels and context.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Log levels
|
|
9
|
+
*/
|
|
10
|
+
export declare enum LogLevel {
|
|
11
|
+
DEBUG = "debug",
|
|
12
|
+
INFO = "info",
|
|
13
|
+
WARN = "warn",
|
|
14
|
+
ERROR = "error"
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Logger configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface LoggerConfig {
|
|
20
|
+
/** Minimum log level to output */
|
|
21
|
+
level: LogLevel;
|
|
22
|
+
/** Include timestamp in log output */
|
|
23
|
+
timestamps: boolean;
|
|
24
|
+
/** Enable JSON format for structured logging */
|
|
25
|
+
json: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Logger class for structured logging to stderr
|
|
29
|
+
*/
|
|
30
|
+
declare class Logger {
|
|
31
|
+
private config;
|
|
32
|
+
constructor(config?: Partial<LoggerConfig>);
|
|
33
|
+
/**
|
|
34
|
+
* Check if a log level should be output
|
|
35
|
+
*/
|
|
36
|
+
private shouldLog;
|
|
37
|
+
/**
|
|
38
|
+
* Format and output a log entry
|
|
39
|
+
*/
|
|
40
|
+
private log;
|
|
41
|
+
/**
|
|
42
|
+
* Log a debug message
|
|
43
|
+
*/
|
|
44
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
45
|
+
/**
|
|
46
|
+
* Log an info message
|
|
47
|
+
*/
|
|
48
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
49
|
+
/**
|
|
50
|
+
* Log a warning message
|
|
51
|
+
*/
|
|
52
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
53
|
+
/**
|
|
54
|
+
* Log an error message
|
|
55
|
+
*/
|
|
56
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
57
|
+
/**
|
|
58
|
+
* Set the minimum log level
|
|
59
|
+
*/
|
|
60
|
+
setLevel(level: LogLevel): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get current configuration
|
|
63
|
+
*/
|
|
64
|
+
getConfig(): Readonly<LoggerConfig>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Singleton logger instance
|
|
68
|
+
*/
|
|
69
|
+
export declare const logger: Logger;
|
|
70
|
+
/**
|
|
71
|
+
* Create a child logger with additional context
|
|
72
|
+
*/
|
|
73
|
+
export declare function createLogger(config?: Partial<LoggerConfig>): Logger;
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAYD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,KAAK,EAAE,QAAQ,CAAC;IAChB,sCAAsC;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,IAAI,EAAE,OAAO,CAAC;CACf;AAqBD;;GAEG;AACH,cAAM,MAAM;IACV,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAc9C;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,GAAG;IA+BX;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC;CAGpC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging utilities for F5XC API MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Uses stderr for logging to avoid interfering with STDIO transport.
|
|
5
|
+
* Provides structured logging with levels and context.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Log levels
|
|
9
|
+
*/
|
|
10
|
+
export var LogLevel;
|
|
11
|
+
(function (LogLevel) {
|
|
12
|
+
LogLevel["DEBUG"] = "debug";
|
|
13
|
+
LogLevel["INFO"] = "info";
|
|
14
|
+
LogLevel["WARN"] = "warn";
|
|
15
|
+
LogLevel["ERROR"] = "error";
|
|
16
|
+
})(LogLevel || (LogLevel = {}));
|
|
17
|
+
/**
|
|
18
|
+
* Log level priority for filtering
|
|
19
|
+
*/
|
|
20
|
+
const LOG_LEVEL_PRIORITY = {
|
|
21
|
+
[LogLevel.DEBUG]: 0,
|
|
22
|
+
[LogLevel.INFO]: 1,
|
|
23
|
+
[LogLevel.WARN]: 2,
|
|
24
|
+
[LogLevel.ERROR]: 3,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Default logger configuration
|
|
28
|
+
*/
|
|
29
|
+
const DEFAULT_CONFIG = {
|
|
30
|
+
level: LogLevel.INFO,
|
|
31
|
+
timestamps: true,
|
|
32
|
+
json: false,
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Logger class for structured logging to stderr
|
|
36
|
+
*/
|
|
37
|
+
class Logger {
|
|
38
|
+
config;
|
|
39
|
+
constructor(config = {}) {
|
|
40
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
41
|
+
// Check for environment variable overrides
|
|
42
|
+
const envLevel = process.env["LOG_LEVEL"]?.toLowerCase();
|
|
43
|
+
if (envLevel && Object.values(LogLevel).includes(envLevel)) {
|
|
44
|
+
this.config.level = envLevel;
|
|
45
|
+
}
|
|
46
|
+
if (process.env["LOG_JSON"] === "true") {
|
|
47
|
+
this.config.json = true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if a log level should be output
|
|
52
|
+
*/
|
|
53
|
+
shouldLog(level) {
|
|
54
|
+
return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[this.config.level];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format and output a log entry
|
|
58
|
+
*/
|
|
59
|
+
log(entry) {
|
|
60
|
+
if (!this.shouldLog(entry.level)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (this.config.timestamps) {
|
|
64
|
+
entry.timestamp = new Date().toISOString();
|
|
65
|
+
}
|
|
66
|
+
if (this.config.json) {
|
|
67
|
+
// Structured JSON output
|
|
68
|
+
process.stderr.write(JSON.stringify(entry) + "\n");
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Human-readable output
|
|
72
|
+
const parts = [];
|
|
73
|
+
if (entry.timestamp) {
|
|
74
|
+
parts.push(`[${entry.timestamp}]`);
|
|
75
|
+
}
|
|
76
|
+
parts.push(`[${entry.level.toUpperCase()}]`);
|
|
77
|
+
parts.push(entry.message);
|
|
78
|
+
if (entry.context && Object.keys(entry.context).length > 0) {
|
|
79
|
+
parts.push(JSON.stringify(entry.context));
|
|
80
|
+
}
|
|
81
|
+
process.stderr.write(parts.join(" ") + "\n");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Log a debug message
|
|
86
|
+
*/
|
|
87
|
+
debug(message, context) {
|
|
88
|
+
this.log({ level: LogLevel.DEBUG, message, context });
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Log an info message
|
|
92
|
+
*/
|
|
93
|
+
info(message, context) {
|
|
94
|
+
this.log({ level: LogLevel.INFO, message, context });
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Log a warning message
|
|
98
|
+
*/
|
|
99
|
+
warn(message, context) {
|
|
100
|
+
this.log({ level: LogLevel.WARN, message, context });
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Log an error message
|
|
104
|
+
*/
|
|
105
|
+
error(message, context) {
|
|
106
|
+
this.log({ level: LogLevel.ERROR, message, context });
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Set the minimum log level
|
|
110
|
+
*/
|
|
111
|
+
setLevel(level) {
|
|
112
|
+
this.config.level = level;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get current configuration
|
|
116
|
+
*/
|
|
117
|
+
getConfig() {
|
|
118
|
+
return Object.freeze({ ...this.config });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Singleton logger instance
|
|
123
|
+
*/
|
|
124
|
+
export const logger = new Logger();
|
|
125
|
+
/**
|
|
126
|
+
* Create a child logger with additional context
|
|
127
|
+
*/
|
|
128
|
+
export function createLogger(config) {
|
|
129
|
+
return new Logger(config);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": "0.3",
|
|
3
|
+
"name": "f5xc-api-mcp",
|
|
4
|
+
"display_name": "F5 Distributed Cloud API",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"description": "MCP server for F5 Distributed Cloud API - AI-powered infrastructure management with 1500+ tools across 22 domains",
|
|
7
|
+
"long_description": "Enables AI assistants to manage F5 Distributed Cloud resources including HTTP load balancers, origin pools, WAF policies, DNS zones, and multi-cloud sites. Works in dual mode: documentation mode (no auth) or execution mode (with auth). Every response includes equivalent f5xcctl CLI commands and Terraform HCL examples.",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Robin Mordasiewicz"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/robinmordasiewicz/f5xc-api-mcp.git"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/robinmordasiewicz/f5xc-api-mcp",
|
|
16
|
+
"documentation": "https://robinmordasiewicz.github.io/f5xc-api-mcp",
|
|
17
|
+
"support": "https://github.com/robinmordasiewicz/f5xc-api-mcp/issues",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mcp",
|
|
20
|
+
"f5",
|
|
21
|
+
"f5xc",
|
|
22
|
+
"distributed-cloud",
|
|
23
|
+
"api",
|
|
24
|
+
"infrastructure",
|
|
25
|
+
"load-balancer",
|
|
26
|
+
"waf",
|
|
27
|
+
"dns",
|
|
28
|
+
"terraform",
|
|
29
|
+
"ai"
|
|
30
|
+
],
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"compatibility": {
|
|
33
|
+
"claude_desktop": ">=1.0.0",
|
|
34
|
+
"platforms": ["darwin", "win32", "linux"],
|
|
35
|
+
"runtimes": {
|
|
36
|
+
"node": ">=18.0.0"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"server": {
|
|
40
|
+
"type": "node",
|
|
41
|
+
"entry_point": "dist/index.js",
|
|
42
|
+
"mcp_config": {
|
|
43
|
+
"command": "node",
|
|
44
|
+
"args": ["${__dirname}/dist/index.js"],
|
|
45
|
+
"env": {
|
|
46
|
+
"F5XC_API_URL": "${user_config.f5xc_api_url}",
|
|
47
|
+
"F5XC_API_TOKEN": "${user_config.f5xc_api_token}",
|
|
48
|
+
"F5XC_P12_FILE": "${user_config.f5xc_p12_file}",
|
|
49
|
+
"F5XC_P12_PASSWORD": "${user_config.f5xc_p12_password}",
|
|
50
|
+
"LOG_LEVEL": "${user_config.log_level}"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"user_config": {
|
|
55
|
+
"f5xc_api_url": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"title": "F5XC Tenant URL",
|
|
58
|
+
"description": "F5 Distributed Cloud tenant URL (e.g., https://your-tenant.console.ves.volterra.io)",
|
|
59
|
+
"required": false
|
|
60
|
+
},
|
|
61
|
+
"f5xc_api_token": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"title": "API Token",
|
|
64
|
+
"description": "API token for authentication (optional - runs in documentation mode without)",
|
|
65
|
+
"sensitive": true,
|
|
66
|
+
"required": false
|
|
67
|
+
},
|
|
68
|
+
"f5xc_p12_file": {
|
|
69
|
+
"type": "file",
|
|
70
|
+
"title": "P12 Certificate File",
|
|
71
|
+
"description": "Path to P12 certificate for mTLS authentication (alternative to API token)",
|
|
72
|
+
"required": false
|
|
73
|
+
},
|
|
74
|
+
"f5xc_p12_password": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"title": "P12 Password",
|
|
77
|
+
"description": "Password for P12 certificate",
|
|
78
|
+
"sensitive": true,
|
|
79
|
+
"required": false
|
|
80
|
+
},
|
|
81
|
+
"log_level": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"title": "Log Level",
|
|
84
|
+
"description": "Logging verbosity (debug, info, warn, error)",
|
|
85
|
+
"default": "info",
|
|
86
|
+
"required": false
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"tools": [
|
|
90
|
+
{
|
|
91
|
+
"name": "f5xc-api-server-info",
|
|
92
|
+
"description": "Get server information and authentication status"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "f5xc-api-search-tools",
|
|
96
|
+
"description": "Search for F5XC API tools using natural language"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "f5xc-api-describe-tool",
|
|
100
|
+
"description": "Get detailed information about a specific tool"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"name": "f5xc-api-execute-tool",
|
|
104
|
+
"description": "Execute an F5XC API tool"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"name": "f5xc-api-search-resources",
|
|
108
|
+
"description": "Search for F5XC resources"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "f5xc-api-execute-resource",
|
|
112
|
+
"description": "Execute CRUD operation on a resource"
|
|
113
|
+
}
|
|
114
|
+
],
|
|
115
|
+
"tools_generated": true,
|
|
116
|
+
"prompts": [
|
|
117
|
+
{
|
|
118
|
+
"name": "deploy-http-loadbalancer",
|
|
119
|
+
"description": "Guided workflow for deploying HTTP Load Balancer with origin pool",
|
|
120
|
+
"arguments": ["namespace", "name"],
|
|
121
|
+
"text": "Deploy an HTTP Load Balancer named ${arguments.name} in namespace ${arguments.namespace}"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"name": "configure-waf",
|
|
125
|
+
"description": "Guided workflow for configuring Web Application Firewall",
|
|
126
|
+
"arguments": ["namespace"],
|
|
127
|
+
"text": "Configure WAF protection in namespace ${arguments.namespace}"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "create-multicloud-site",
|
|
131
|
+
"description": "Guided workflow for deploying F5XC site in AWS/Azure/GCP",
|
|
132
|
+
"arguments": ["provider", "region"],
|
|
133
|
+
"text": "Create a multi-cloud site on ${arguments.provider} in ${arguments.region}"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"name": "generate-terraform",
|
|
137
|
+
"description": "Export F5XC resources as Terraform configuration",
|
|
138
|
+
"arguments": ["resource_type", "namespace"],
|
|
139
|
+
"text": "Generate Terraform for ${arguments.resource_type} resources in ${arguments.namespace}"
|
|
140
|
+
}
|
|
141
|
+
],
|
|
142
|
+
"prompts_generated": false
|
|
143
|
+
}
|