1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include "mcp/tools/common/registry.h"
#include "mcp/tools/common/common.h"
#include "mcp/tools/common/context.h"
static void
call_get_system_health(const mcpc_tool_t *tool, mcpc_ucbr_t *result)
{
tiny_mcp_tools_context_t *context = tiny_mcp_tools_context_current();
tiny_store_health_t health;
tiny_json_buffer_t json;
(void)tool;
if (!context)
{
tiny_mcp_tool_add_error(result, "INTERNAL_ERROR", "tool context is unavailable");
return;
}
tiny_store_health(context->store, &health);
tiny_json_init(&json);
tiny_json_raw(&json, "{\"status\":");
tiny_json_string(&json, health.last_error[0] ? "DEGRADED" : "OK");
tiny_json_raw(&json, ",\"format_version\":1,\"log_size\":");
tiny_json_u64(&json, health.log_size);
tiny_json_raw(&json, ",\"snapshot_size\":");
tiny_json_u64(&json, health.snapshot_size);
tiny_json_raw(&json, ",\"active_messages\":");
tiny_json_u64(&json, health.active_messages);
tiny_json_raw(&json, ",\"deleted_messages\":");
tiny_json_u64(&json, health.deleted_messages);
tiny_json_raw(&json, ",\"last_sequence\":");
tiny_json_u64(&json, health.last_sequence);
tiny_json_raw(&json, ",\"recovered_tail\":");
tiny_json_raw(&json, health.recovered_tail ? "true" : "false");
tiny_json_raw(&json, ",\"snapshot_valid\":");
tiny_json_raw(&json, health.snapshot_valid ? "true" : "false");
tiny_json_raw(&json, ",\"last_error\":");
tiny_json_string(&json, health.last_error);
tiny_json_raw(&json, "}");
tiny_mcp_tool_add_json(result, &json);
tiny_json_free(&json);
}
bool
tiny_mcp_register_get_system_health(mcpc_server_t *server)
{
mcpc_tool_t *tool = tiny_mcp_tool_new(
"get_system_health",
"Inspect storage health, recovery state, message counts, and file sizes. Use "
"it to diagnose persistence or recovery problems.",
call_get_system_health);
return tool && mcpc_server_add_tool(server, tool) == MCPC_EC_0;
}
|