master
h 169 lines 4.84 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #ifndef NETDATA_MCP_PARAMS_H
4 #define NETDATA_MCP_PARAMS_H
5
6 #include "mcp.h"
7 #include <json-c/json.h>
8
9 // Common parameter parsing functions
10
11 // Parse array parameters (nodes, instances, dimensions) and convert to pipe-separated string
12 // Returns newly allocated BUFFER on success, or NULL if not provided/on error
13 // Writes error message to error buffer on failure
14 // required: if true, validates parameter exists, is array type, and is non-empty
15 // list_tool: tool name to recommend for discovering exact values (e.g., MCP_TOOL_LIST_NODES)
16 BUFFER *mcp_params_parse_array_to_pattern(
17 struct json_object *params,
18 const char *param_name,
19 bool required,
20 bool allow_wildcards,
21 const char *list_tool,
22 BUFFER *error
23 );
24
25 // Parse labels object parameter and convert to query string format
26 // Returns newly allocated BUFFER on success, or NULL if not provided/on error
27 // Writes error message to error buffer on failure
28 // list_tool: tool name to recommend for discovering exact values (e.g., MCP_TOOL_GET_METRICS_DETAILS)
29 BUFFER *mcp_params_parse_labels_object(
30 struct json_object *params,
31 const char *list_tool,
32 BUFFER *error
33 );
34
35 // Add array parameter schema (for nodes, instances, dimensions)
36 void mcp_schema_add_array_param(
37 BUFFER *buffer,
38 const char *param_name,
39 const char *title,
40 const char *description
41 );
42
43 // Add labels object parameter schema
44 void mcp_schema_add_labels_object(
45 BUFFER *buffer,
46 const char *title,
47 const char *description
48 );
49
50 // Add time window parameters (after, before) to schema
51 void mcp_schema_add_time_params(
52 BUFFER *buffer,
53 const char *time_description_prefix,
54 bool required
55 );
56
57 // Add cardinality limit parameter to schema
58 void mcp_schema_add_cardinality_limit(
59 BUFFER *buffer,
60 const char *description,
61 size_t default_value,
62 size_t min_value,
63 size_t max_value
64 );
65
66 // Extract string parameter with optional default
67 // Returns the string value or default_value if not found
68 const char *mcp_params_extract_string(
69 struct json_object *params,
70 const char *param_name,
71 const char *default_value
72 );
73
74 // Extract numeric size parameter with bounds checking
75 // Returns the size value or default_value if not found
76 // Writes error message to error buffer if value is out of bounds
77 size_t mcp_params_extract_size(
78 struct json_object *params,
79 const char *param_name,
80 size_t default_value,
81 size_t min_value,
82 size_t max_value,
83 BUFFER *error
84 );
85
86 // Extract timeout parameter (in seconds)
87 // Returns the timeout value or default_value if not found
88 // Writes error message to error buffer if value is out of bounds
89 int mcp_params_extract_timeout(
90 struct json_object *params,
91 const char *param_name,
92 int default_seconds,
93 int min_seconds,
94 int max_seconds,
95 BUFFER *error
96 );
97
98 // Schema generation for timeout parameter
99 void mcp_schema_add_timeout(
100 BUFFER *buffer,
101 const char *param_name,
102 const char *title,
103 const char *description,
104 int default_seconds,
105 int min_seconds,
106 int max_seconds,
107 bool required
108 );
109
110 // Schema generation for generic string parameter
111 void mcp_schema_add_string_param(
112 BUFFER *buffer,
113 const char *param_name,
114 const char *title,
115 const char *description,
116 const char *default_value,
117 bool required
118 );
119
120 // Schema generation for size parameter
121 void mcp_schema_add_size_param(
122 BUFFER *buffer,
123 const char *param_name,
124 const char *title,
125 const char *description,
126 size_t default_value,
127 size_t min_value,
128 size_t max_value,
129 bool required
130 );
131
132 time_t mcp_params_parse_time(
133 struct json_object *params,
134 const char *name,
135 time_t default_value);
136
137 // Validate and auto-correct time window parameters
138 // Contract: 'after' is relative to 'before', 'before' is relative to 'now'
139 // Handles common AI assistant mistakes:
140 // - Both positive relative times → make both negative
141 // - Positive after + negative before that results in future time → make after negative
142 void mcp_params_validate_time_window(time_t *after, time_t *before, time_t now);
143
144 // Parse and validate time window parameters (after and before) together
145 // This ensures consistent parsing and validation across all MCP tools
146 // Returns true on success, false on error (with error message in error buffer)
147 // allow_both_zero: set to true for baseline times that use 0,0 for auto-calculation
148 bool mcp_params_parse_time_window(
149 struct json_object *params,
150 time_t *after,
151 time_t *before,
152 time_t default_after,
153 time_t default_before,
154 bool allow_both_zero,
155 BUFFER *error
156 );
157
158 // Schema generation for individual time parameter
159 void mcp_schema_add_time_param(
160 BUFFER *buffer,
161 const char *param_name,
162 const char *title,
163 const char *description,
164 const char *relative_to,
165 time_t default_value,
166 bool required
167 );
168
169 #endif // NETDATA_MCP_PARAMS_H