@tocharianou/mcp-server-kibana 0.6.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 (48) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +530 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.js +417 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/kibana-openapi-source.yaml +52597 -0
  7. package/dist/src/analysis-tools.d.ts +6 -0
  8. package/dist/src/analysis-tools.js +134 -0
  9. package/dist/src/analysis-tools.js.map +1 -0
  10. package/dist/src/base-tools.d.ts +2 -0
  11. package/dist/src/base-tools.js +349 -0
  12. package/dist/src/base-tools.js.map +1 -0
  13. package/dist/src/dependency-analyzer.d.ts +65 -0
  14. package/dist/src/dependency-analyzer.js +233 -0
  15. package/dist/src/dependency-analyzer.js.map +1 -0
  16. package/dist/src/health-analyzer.d.ts +60 -0
  17. package/dist/src/health-analyzer.js +301 -0
  18. package/dist/src/health-analyzer.js.map +1 -0
  19. package/dist/src/kibana-openapi-source.yaml +52597 -0
  20. package/dist/src/openapi-simplifier.d.ts +33 -0
  21. package/dist/src/openapi-simplifier.js +122 -0
  22. package/dist/src/openapi-simplifier.js.map +1 -0
  23. package/dist/src/prompts.d.ts +2 -0
  24. package/dist/src/prompts.js +91 -0
  25. package/dist/src/prompts.js.map +1 -0
  26. package/dist/src/resources.d.ts +2 -0
  27. package/dist/src/resources.js +125 -0
  28. package/dist/src/resources.js.map +1 -0
  29. package/dist/src/types.d.ts +150 -0
  30. package/dist/src/types.js +38 -0
  31. package/dist/src/types.js.map +1 -0
  32. package/dist/src/vl_create_tools.d.ts +5 -0
  33. package/dist/src/vl_create_tools.js +264 -0
  34. package/dist/src/vl_create_tools.js.map +1 -0
  35. package/dist/src/vl_delete_tools.d.ts +5 -0
  36. package/dist/src/vl_delete_tools.js +158 -0
  37. package/dist/src/vl_delete_tools.js.map +1 -0
  38. package/dist/src/vl_get_tools.d.ts +5 -0
  39. package/dist/src/vl_get_tools.js +201 -0
  40. package/dist/src/vl_get_tools.js.map +1 -0
  41. package/dist/src/vl_search_tools.d.ts +9 -0
  42. package/dist/src/vl_search_tools.js +290 -0
  43. package/dist/src/vl_search_tools.js.map +1 -0
  44. package/dist/src/vl_update_tools.d.ts +5 -0
  45. package/dist/src/vl_update_tools.js +372 -0
  46. package/dist/src/vl_update_tools.js.map +1 -0
  47. package/kibana-openapi-source.yaml +52597 -0
  48. package/package.json +95 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Intelligent Analysis Tools Registration Module
3
+ * Register dependency analysis and health check features as MCP Tools
4
+ */
5
+ import type { ServerBase, KibanaClient } from "./types.js";
6
+ export declare function registerAnalysisTools(server: ServerBase, kibanaClient: KibanaClient, defaultSpace: string): void;
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Intelligent Analysis Tools Registration Module
3
+ * Register dependency analysis and health check features as MCP Tools
4
+ */
5
+ import { z } from "zod";
6
+ import { buildDependencyTree, analyzeImpact, formatDependencyTreeToMarkdown, formatImpactAnalysisToMarkdown } from "./dependency-analyzer.js";
7
+ import { analyzeDashboardHealth, batchAnalyzeDashboards, formatHealthReportToMarkdown, formatBatchHealthReportToMarkdown } from "./health-analyzer.js";
8
+ export function registerAnalysisTools(server, kibanaClient, defaultSpace) {
9
+ // Tool 1: Analyze Saved Object dependency tree
10
+ server.tool("analyze_object_dependencies", "Analyze dependency tree for a Kibana saved object (Dashboard, Visualization, etc.)", z.object({
11
+ id: z.string().describe("Saved object ID"),
12
+ type: z.string().describe("Saved object type (e.g., dashboard, visualization, lens, index-pattern)"),
13
+ space: z.string().optional().describe("Kibana space (optional)"),
14
+ max_depth: z.number().optional().default(5).describe("Maximum depth to traverse (default: 5)")
15
+ }), async ({ id, type, space, max_depth }) => {
16
+ try {
17
+ const targetSpace = space || defaultSpace;
18
+ const tree = await buildDependencyTree(kibanaClient, id, type, targetSpace, max_depth);
19
+ const markdown = formatDependencyTreeToMarkdown(tree);
20
+ return {
21
+ content: [
22
+ {
23
+ type: "text",
24
+ text: markdown
25
+ }
26
+ ]
27
+ };
28
+ }
29
+ catch (error) {
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: `Error analyzing dependencies: ${error instanceof Error ? error.message : String(error)}`
35
+ }
36
+ ],
37
+ isError: true
38
+ };
39
+ }
40
+ });
41
+ // Tool 2: Impact scope analysis
42
+ server.tool("analyze_deletion_impact", "Analyze the impact of deleting or modifying a saved object (what will be affected)", z.object({
43
+ id: z.string().describe("Saved object ID to analyze"),
44
+ type: z.string().describe("Saved object type (e.g., visualization, lens, index-pattern)"),
45
+ space: z.string().optional().describe("Kibana space (optional)")
46
+ }), async ({ id, type, space }) => {
47
+ try {
48
+ const targetSpace = space || defaultSpace;
49
+ const impact = await analyzeImpact(kibanaClient, id, type, targetSpace);
50
+ const markdown = formatImpactAnalysisToMarkdown(impact);
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: markdown
56
+ }
57
+ ]
58
+ };
59
+ }
60
+ catch (error) {
61
+ return {
62
+ content: [
63
+ {
64
+ type: "text",
65
+ text: `Error analyzing impact: ${error instanceof Error ? error.message : String(error)}`
66
+ }
67
+ ],
68
+ isError: true
69
+ };
70
+ }
71
+ });
72
+ // Tool 3: Dashboard health check
73
+ server.tool("check_dashboard_health", "Perform health check on a Dashboard to detect broken references, performance issues, etc.", z.object({
74
+ dashboard_id: z.string().describe("Dashboard ID to check"),
75
+ space: z.string().optional().describe("Kibana space (optional)"),
76
+ check_indices: z.boolean().optional().default(false).describe("Also check if referenced Elasticsearch indices exist (requires additional permissions)")
77
+ }), async ({ dashboard_id, space, check_indices }) => {
78
+ try {
79
+ const targetSpace = space || defaultSpace;
80
+ const health = await analyzeDashboardHealth(kibanaClient, dashboard_id, targetSpace, check_indices);
81
+ const markdown = formatHealthReportToMarkdown(health);
82
+ return {
83
+ content: [
84
+ {
85
+ type: "text",
86
+ text: markdown
87
+ }
88
+ ]
89
+ };
90
+ }
91
+ catch (error) {
92
+ return {
93
+ content: [
94
+ {
95
+ type: "text",
96
+ text: `Error checking dashboard health: ${error instanceof Error ? error.message : String(error)}`
97
+ }
98
+ ],
99
+ isError: true
100
+ };
101
+ }
102
+ });
103
+ // Tool 4: Batch Dashboard health scan
104
+ server.tool("scan_all_dashboards_health", "Scan health status of all Dashboards in a space (returns summary report)", z.object({
105
+ space: z.string().optional().describe("Kibana space (optional)"),
106
+ max_dashboards: z.number().optional().default(50).describe("Maximum number of dashboards to scan (default: 50)")
107
+ }), async ({ space, max_dashboards }) => {
108
+ try {
109
+ const targetSpace = space || defaultSpace;
110
+ const report = await batchAnalyzeDashboards(kibanaClient, targetSpace, max_dashboards);
111
+ const markdown = formatBatchHealthReportToMarkdown(report);
112
+ return {
113
+ content: [
114
+ {
115
+ type: "text",
116
+ text: markdown
117
+ }
118
+ ]
119
+ };
120
+ }
121
+ catch (error) {
122
+ return {
123
+ content: [
124
+ {
125
+ type: "text",
126
+ text: `Error scanning dashboards: ${error instanceof Error ? error.message : String(error)}`
127
+ }
128
+ ],
129
+ isError: true
130
+ };
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=analysis-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis-tools.js","sourceRoot":"","sources":["../../src/analysis-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,iCAAiC,EAClC,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,qBAAqB,CAAC,MAAkB,EAAE,YAA0B,EAAE,YAAoB;IAExG,+CAA+C;IAC/C,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,oFAAoF,EACpF,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;QACpG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAC/F,CAAC,EACF,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAyB,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,KAAK,IAAI,YAAY,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YACvF,MAAM,QAAQ,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC;YAEtD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBAChG;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gCAAgC;IAChC,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,oFAAoF,EACpF,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;QACzF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACjE,CAAC,EACF,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAyB,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,KAAK,IAAI,YAAY,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;YAExD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC1F;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,2FAA2F,EAC3F,CAAC,CAAC,MAAM,CAAC;QACP,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChE,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wFAAwF,CAAC;KACxJ,CAAC,EACF,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,EAAyB,EAAE;QACtE,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,KAAK,IAAI,YAAY,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;YACpG,MAAM,QAAQ,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;YAEtD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBACnG;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,sCAAsC;IACtC,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,0EAA0E,EAC1E,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KACjH,CAAC,EACF,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAyB,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,KAAK,IAAI,YAAY,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YACvF,MAAM,QAAQ,GAAG,iCAAiC,CAAC,MAAM,CAAC,CAAC;YAE3D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC7F;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ServerBase, KibanaClient } from "./types";
2
+ export declare function registerBaseTools(server: ServerBase, kibanaClient: KibanaClient, defaultSpace: string): void;
@@ -0,0 +1,349 @@
1
+ import { z } from "zod";
2
+ import { simplifyEndpointDetail, formatEndpointToMarkdown } from "./openapi-simplifier.js";
3
+ // Import API index and search logic
4
+ import fs from 'fs';
5
+ import path from 'path';
6
+ import yaml from 'js-yaml';
7
+ import { fileURLToPath } from 'url';
8
+ import { dirname } from 'path';
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ let apiEndpointIndex = [];
12
+ let isIndexBuilt = false;
13
+ let YAML_FILE_PATH = '';
14
+ let openApiDoc = null;
15
+ async function buildApiIndex() {
16
+ if (isIndexBuilt)
17
+ return;
18
+ // Enhanced path resolution for both compiled JS and direct TS execution
19
+ const possiblePaths = [
20
+ // Environment variable takes highest priority
21
+ process.env.KIBANA_OPENAPI_YAML_PATH,
22
+ // Current working directory
23
+ path.join(process.cwd(), 'kibana-openapi-source.yaml'),
24
+ // Relative to the source file
25
+ path.join(__dirname, 'kibana-openapi-source.yaml'),
26
+ // One level up from source file (for ts-node execution)
27
+ path.resolve(__dirname, '..', 'kibana-openapi-source.yaml'),
28
+ // dist directory for compiled JS
29
+ path.join(process.cwd(), 'dist', 'src', 'kibana-openapi-source.yaml')
30
+ ].filter((p) => typeof p === 'string' && p.length > 0);
31
+ for (const p of possiblePaths) {
32
+ if (fs.existsSync(p)) {
33
+ YAML_FILE_PATH = p;
34
+ console.warn(`Using YAML file from: ${p}`);
35
+ break;
36
+ }
37
+ }
38
+ if (!YAML_FILE_PATH) {
39
+ console.error('Could not find kibana-openapi-source.yaml file');
40
+ isIndexBuilt = true;
41
+ return;
42
+ }
43
+ try {
44
+ const yamlContent = fs.readFileSync(YAML_FILE_PATH, 'utf8');
45
+ openApiDoc = yaml.load(yamlContent);
46
+ if (!openApiDoc || !openApiDoc.paths) {
47
+ throw new Error('Invalid YAML file structure: missing paths');
48
+ }
49
+ for (const [pathStr, pathObj] of Object.entries(openApiDoc.paths)) {
50
+ for (const [method, methodObj] of Object.entries(pathObj)) {
51
+ if (["get", "post", "put", "delete", "patch"].includes(method)) {
52
+ apiEndpointIndex.push({
53
+ path: pathStr,
54
+ method: method.toUpperCase(),
55
+ description: methodObj.description,
56
+ summary: methodObj.summary,
57
+ parameters: methodObj.parameters,
58
+ requestBody: methodObj.requestBody,
59
+ responses: methodObj.responses,
60
+ deprecated: methodObj.deprecated,
61
+ tags: methodObj.tags
62
+ });
63
+ }
64
+ }
65
+ }
66
+ isIndexBuilt = true;
67
+ }
68
+ catch (error) {
69
+ console.error('Error loading or parsing YAML file:', error);
70
+ throw error;
71
+ }
72
+ }
73
+ /**
74
+ * Smart API endpoint search (with simple relevance ranking)
75
+ */
76
+ function searchApiEndpoints(query) {
77
+ if (!isIndexBuilt)
78
+ throw new Error('API index not built yet');
79
+ const q = query.toLowerCase();
80
+ return apiEndpointIndex
81
+ .map(e => {
82
+ let score = 0;
83
+ const pathLower = e.path.toLowerCase();
84
+ const summaryLower = (e.summary || '').toLowerCase();
85
+ const descLower = (e.description || '').toLowerCase();
86
+ // Path match has highest weight
87
+ if (pathLower === q)
88
+ score += 100;
89
+ else if (pathLower.includes(q))
90
+ score += 20;
91
+ // Summary match has secondary weight
92
+ if (summaryLower.includes(q))
93
+ score += 10;
94
+ // Tag match
95
+ if (e.tags && e.tags.some(tag => tag.toLowerCase().includes(q)))
96
+ score += 5;
97
+ // Description match has lowest weight
98
+ if (descLower.includes(q))
99
+ score += 1;
100
+ return { endpoint: e, score };
101
+ })
102
+ .filter(item => item.score > 0)
103
+ .sort((a, b) => b.score - a.score) // Sort by score descending
104
+ .map(item => item.endpoint);
105
+ }
106
+ // Recursively resolve $ref references
107
+ function resolveRef(obj, doc, seen = new Set()) {
108
+ if (!obj || typeof obj !== 'object')
109
+ return obj;
110
+ if (Array.isArray(obj))
111
+ return obj.map(item => resolveRef(item, doc, seen));
112
+ if (obj.$ref) {
113
+ const ref = obj.$ref;
114
+ if (seen.has(ref))
115
+ return { circularRef: ref };
116
+ seen.add(ref);
117
+ const parts = ref.replace(/^#\//, '').split('/');
118
+ let target = doc;
119
+ for (const p of parts) {
120
+ if (target && typeof target === 'object')
121
+ target = target[p];
122
+ else
123
+ return { invalidRef: ref };
124
+ }
125
+ return resolveRef(target, doc, seen);
126
+ }
127
+ const result = {};
128
+ for (const k of Object.keys(obj)) {
129
+ result[k] = resolveRef(obj[k], doc, seen);
130
+ }
131
+ return result;
132
+ }
133
+ export function registerBaseTools(server, kibanaClient, defaultSpace) {
134
+ // Tool: Get Kibana server status
135
+ server.tool("get_status", `Get Kibana server status with multi-space support`, z.object({
136
+ space: z.string().optional().describe("Target Kibana space (optional, defaults to configured space)")
137
+ }), async ({ space }) => {
138
+ try {
139
+ const targetSpace = space || defaultSpace;
140
+ const response = await kibanaClient.get('/api/status', { space });
141
+ return {
142
+ content: [
143
+ {
144
+ type: "text",
145
+ text: `[Space: ${targetSpace}] Kibana server status: ${JSON.stringify(response, null, 2)}`
146
+ }
147
+ ]
148
+ };
149
+ }
150
+ catch (error) {
151
+ console.error(`Failed to get server status: ${error}`);
152
+ return {
153
+ content: [
154
+ {
155
+ type: "text",
156
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
157
+ }
158
+ ],
159
+ isError: true
160
+ };
161
+ }
162
+ });
163
+ // Tool: Execute custom API request
164
+ server.tool("execute_kb_api", `Execute a custom API request for Kibana with multi-space support`, z.object({
165
+ method: z.enum(['GET', 'POST', 'PUT', 'DELETE']),
166
+ path: z.string(),
167
+ body: z.any().optional(),
168
+ params: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),
169
+ space: z.string().optional().describe("Target Kibana space (optional, defaults to configured space)")
170
+ }), async ({ method, path, body, params, space }) => {
171
+ try {
172
+ const targetSpace = space || defaultSpace;
173
+ let url = path;
174
+ if (params) {
175
+ const queryString = new URLSearchParams(Object.entries(params).map(([key, value]) => [key, String(value)])).toString();
176
+ url += `?${queryString}`;
177
+ }
178
+ let response;
179
+ switch (method.toLowerCase()) {
180
+ case 'get':
181
+ response = await kibanaClient.get(url, { space });
182
+ break;
183
+ case 'post':
184
+ response = await kibanaClient.post(url, body, { space });
185
+ break;
186
+ case 'put':
187
+ response = await kibanaClient.put(url, body, { space });
188
+ break;
189
+ case 'delete':
190
+ response = await kibanaClient.delete(url, { space });
191
+ break;
192
+ default:
193
+ throw new Error(`Unsupported HTTP method: ${method}`);
194
+ }
195
+ return {
196
+ content: [
197
+ {
198
+ type: "text",
199
+ text: `[Space: ${targetSpace}] API response: ${JSON.stringify(response, null, 2)}`
200
+ }
201
+ ]
202
+ };
203
+ }
204
+ catch (error) {
205
+ console.error(`API request failed: ${error}`);
206
+ return {
207
+ content: [
208
+ {
209
+ type: "text",
210
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
211
+ }
212
+ ],
213
+ isError: true
214
+ };
215
+ }
216
+ });
217
+ // Tool: Search Kibana API endpoints (by keyword)
218
+ server.tool("search_kibana_api_paths", `Search Kibana API endpoints by keyword`, z.object({
219
+ search: z.string().describe('Search keyword for filtering API endpoints')
220
+ }), async ({ search }) => {
221
+ await buildApiIndex();
222
+ const endpoints = searchApiEndpoints(search);
223
+ // Limit results to avoid token overflow
224
+ const limitedEndpoints = endpoints.slice(0, 15);
225
+ return {
226
+ content: [
227
+ {
228
+ type: "text",
229
+ text: `Found ${endpoints.length} API endpoints (showing top ${limitedEndpoints.length}): ${JSON.stringify(limitedEndpoints.map(e => ({
230
+ method: e.method,
231
+ path: e.path,
232
+ summary: e.summary,
233
+ description: e.description ? (e.description.length > 100 ? e.description.substring(0, 100) + '...' : e.description) : undefined
234
+ })), null, 2)}`
235
+ }
236
+ ]
237
+ };
238
+ });
239
+ // Tool: List all Kibana API endpoints (no filter, full list, resource style)
240
+ server.tool("list_all_kibana_api_paths", `List all Kibana API endpoints as a resource list`, z.object({}), async () => {
241
+ await buildApiIndex();
242
+ const endpoints = apiEndpointIndex.map(e => ({
243
+ method: e.method,
244
+ path: e.path,
245
+ summary: e.summary,
246
+ description: e.description
247
+ }));
248
+ return {
249
+ content: [
250
+ {
251
+ type: "text",
252
+ text: JSON.stringify({
253
+ contents: [
254
+ {
255
+ uri: "kibana-api://paths",
256
+ mimeType: "application/json",
257
+ text: JSON.stringify(endpoints, null, 2)
258
+ }
259
+ ]
260
+ }, null, 2)
261
+ }
262
+ ]
263
+ };
264
+ });
265
+ // Tool: Get details for a specific Kibana API endpoint
266
+ server.tool("get_kibana_api_detail", `Get details for a specific Kibana API endpoint`, z.object({
267
+ method: z.string().describe("HTTP method, e.g. GET, POST, PUT, DELETE"),
268
+ path: z.string().describe("API path, e.g. /api/actions/connector_types"),
269
+ raw: z.boolean().optional().describe("If true, return raw JSON schema instead of simplified TypeScript interface")
270
+ }), async ({ method, path, raw }) => {
271
+ await buildApiIndex();
272
+ const endpoint = apiEndpointIndex.find(e => e.method === method.toUpperCase() && e.path === path);
273
+ if (!endpoint) {
274
+ return {
275
+ content: [
276
+ {
277
+ type: "text",
278
+ text: `API endpoint not found: ${method} ${path}`
279
+ }
280
+ ],
281
+ isError: true
282
+ };
283
+ }
284
+ // Recursively resolve parameters, requestBody, and responses references
285
+ const detailed = {
286
+ ...endpoint,
287
+ parameters: resolveRef(endpoint.parameters, openApiDoc),
288
+ requestBody: resolveRef(endpoint.requestBody, openApiDoc),
289
+ responses: resolveRef(endpoint.responses, openApiDoc)
290
+ };
291
+ if (raw) {
292
+ return {
293
+ content: [
294
+ {
295
+ type: "text",
296
+ text: `API endpoint details (Raw): ${JSON.stringify(detailed, null, 2)}`
297
+ }
298
+ ]
299
+ };
300
+ }
301
+ // Use smart simplifier
302
+ const simplified = simplifyEndpointDetail(detailed);
303
+ const markdown = formatEndpointToMarkdown(simplified);
304
+ return {
305
+ content: [
306
+ {
307
+ type: "text",
308
+ text: markdown
309
+ }
310
+ ]
311
+ };
312
+ });
313
+ server.tool("get_available_spaces", "Get all available Kibana spaces with current context", z.object({
314
+ include_details: z.boolean().optional().default(true).describe("Include detailed space information (name, description, etc.)")
315
+ }), async ({ include_details = true }) => {
316
+ try {
317
+ const response = await kibanaClient.get('/api/spaces/space');
318
+ const result = {
319
+ current_default_space: defaultSpace,
320
+ total_count: response.length,
321
+ available_spaces: include_details ? response : response.map((space) => ({
322
+ id: space.id,
323
+ name: space.name
324
+ }))
325
+ };
326
+ return {
327
+ content: [
328
+ {
329
+ type: "text",
330
+ text: JSON.stringify(result, null, 2)
331
+ }
332
+ ]
333
+ };
334
+ }
335
+ catch (error) {
336
+ console.error(`Failed to get available spaces: ${error}`);
337
+ return {
338
+ content: [
339
+ {
340
+ type: "text",
341
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
342
+ }
343
+ ],
344
+ isError: true
345
+ };
346
+ }
347
+ });
348
+ }
349
+ //# sourceMappingURL=base-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-tools.js","sourceRoot":"","sources":["../../src/base-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Saved Object Dependency Analyzer
3
+ * Analyzes reference relationships between Kibana objects (Dashboard, Visualization, Index Pattern, etc.)
4
+ */
5
+ import type { KibanaClient } from "./types";
6
+ export interface SavedObjectRef {
7
+ id: string;
8
+ type: string;
9
+ name: string;
10
+ }
11
+ export interface DependencyNode {
12
+ id: string;
13
+ type: string;
14
+ title?: string;
15
+ referencedBy: SavedObjectRef[];
16
+ references: SavedObjectRef[];
17
+ depth: number;
18
+ }
19
+ export interface DependencyTree {
20
+ root: DependencyNode;
21
+ allNodes: Map<string, DependencyNode>;
22
+ summary: {
23
+ total_objects: number;
24
+ max_depth: number;
25
+ top_referenced: Array<{
26
+ id: string;
27
+ type: string;
28
+ title?: string;
29
+ count: number;
30
+ }>;
31
+ orphans: Array<{
32
+ id: string;
33
+ type: string;
34
+ title?: string;
35
+ }>;
36
+ };
37
+ }
38
+ export interface ImpactAnalysis {
39
+ target: {
40
+ id: string;
41
+ type: string;
42
+ title?: string;
43
+ };
44
+ direct_dependencies: number;
45
+ indirect_dependencies: number;
46
+ affected_dashboards: SavedObjectRef[];
47
+ risk_level: 'Low' | 'Medium' | 'High' | 'Critical';
48
+ recommendation: string;
49
+ }
50
+ /**
51
+ * Build dependency tree
52
+ */
53
+ export declare function buildDependencyTree(kibanaClient: KibanaClient, rootId: string, rootType: string, space?: string, maxDepth?: number): Promise<DependencyTree>;
54
+ /**
55
+ * Analyze impact scope of deleting/modifying an object
56
+ */
57
+ export declare function analyzeImpact(kibanaClient: KibanaClient, targetId: string, targetType: string, space?: string): Promise<ImpactAnalysis>;
58
+ /**
59
+ * Format dependency tree to Markdown
60
+ */
61
+ export declare function formatDependencyTreeToMarkdown(tree: DependencyTree): string;
62
+ /**
63
+ * Format impact analysis to Markdown
64
+ */
65
+ export declare function formatImpactAnalysisToMarkdown(analysis: ImpactAnalysis): string;