@steadwing/openalerts 0.2.7 → 0.2.8

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/dist/cli.js CHANGED
@@ -73,9 +73,15 @@ else if (command === "start") {
73
73
  }
74
74
  startDaemon(config);
75
75
  }
76
+ else if (command === "mcp") {
77
+ const port = parseInt(getFlag("--port") ?? "4242");
78
+ import("./mcp/index.js")
79
+ .then(({ startMcpServer }) => startMcpServer({ port }))
80
+ .catch(err => { console.error("[mcp] Failed to start MCP server:", err); process.exit(1); });
81
+ }
76
82
  else {
77
83
  console.error(`Unknown command: ${command}`);
78
- console.error("Usage: openalerts [start|init|status|test] [--port N] [--config path]");
84
+ console.error("Usage: openalerts [start|init|status|test|mcp] [--port N] [--config path]");
79
85
  process.exit(1);
80
86
  }
81
87
  // ── Daemon startup ────────────────────────────────────────────────────────────
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ export declare const DEFAULT_PORT = 4242;
2
+ export declare const DEFAULT_DB_PATH: string;
3
+ export interface EngineState {
4
+ running: boolean;
5
+ gatewayConnected: boolean | null;
6
+ startedAt: number;
7
+ stats: Record<string, number>;
8
+ hourlyAlerts: {
9
+ count: number;
10
+ resetAt: number;
11
+ };
12
+ lastHeartbeatTs: number;
13
+ }
14
+ export interface HealthState {
15
+ ok: boolean;
16
+ ts: number;
17
+ sseClients: number;
18
+ gatewayConnected: boolean | null;
19
+ }
20
+ export declare class OpenAlertsClient {
21
+ private port;
22
+ private dbPath;
23
+ private _db;
24
+ constructor(opts?: {
25
+ port?: number;
26
+ dbPath?: string;
27
+ });
28
+ private get baseUrl();
29
+ /** Try REST API; returns null on any error. */
30
+ private api;
31
+ /** Get or lazily open a read-only SQLite connection. */
32
+ private db;
33
+ close(): void;
34
+ getHealth(): Promise<HealthState | null>;
35
+ getEngine(): Promise<EngineState | null>;
36
+ getAlerts(limit?: number): Promise<unknown[]>;
37
+ getSessions(): Promise<unknown[]>;
38
+ getActivity(limit?: number, sessionKey?: string): Promise<unknown[]>;
39
+ getActions(limit?: number, sessionKey?: string): Promise<unknown[]>;
40
+ getAgents(): Promise<unknown[]>;
41
+ getCronJobs(): Promise<unknown[]>;
42
+ getFullState(): Promise<unknown>;
43
+ getDiagnostics(limit?: number): Promise<unknown[]>;
44
+ getHeartbeats(limit?: number): Promise<unknown[]>;
45
+ fireTestAlert(): Promise<{
46
+ ok: boolean;
47
+ message?: string;
48
+ error?: string;
49
+ }>;
50
+ isDaemonRunning(): Promise<boolean>;
51
+ }
52
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,eAAe,QAA0D,CAAC;AAIvF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAA6B;gBAE5B,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAKrD,OAAO,KAAK,OAAO,GAElB;IAED,+CAA+C;YACjC,GAAG;IAajB,wDAAwD;IACxD,OAAO,CAAC,EAAE;IAUV,KAAK,IAAI,IAAI;IAOP,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAIxC,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMxC,SAAS,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAUzC,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAUjC,WAAW,CAAC,KAAK,SAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAajE,UAAU,CAAC,KAAK,SAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAahE,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAU/B,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAUjC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAUhC,cAAc,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQ9C,aAAa,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU7C,aAAa,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAW3E,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;CAI1C"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * OpenAlerts MCP Client
3
+ * Fetches data from the REST API (localhost:4242) with direct SQLite fallback.
4
+ */
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { DatabaseSync } from "node:sqlite";
8
+ import { getRecentAlerts, getRecentActions, getAllSessions, getAllAgents, getAllCronJobs, getActivityLog, getRecentDiagnostics, getRecentHeartbeats, getDashboardState, } from "../db/queries.js";
9
+ export const DEFAULT_PORT = 4242;
10
+ export const DEFAULT_DB_PATH = path.join(os.homedir(), ".openalerts", "openalerts.db");
11
+ // ── Client ───────────────────────────────────────────────────────────────────
12
+ export class OpenAlertsClient {
13
+ port;
14
+ dbPath;
15
+ _db = null;
16
+ constructor(opts) {
17
+ this.port = opts?.port ?? DEFAULT_PORT;
18
+ this.dbPath = opts?.dbPath ?? DEFAULT_DB_PATH;
19
+ }
20
+ get baseUrl() {
21
+ return `http://127.0.0.1:${this.port}`;
22
+ }
23
+ /** Try REST API; returns null on any error. */
24
+ async api(endpoint, init) {
25
+ try {
26
+ const res = await fetch(`${this.baseUrl}${endpoint}`, {
27
+ ...init,
28
+ signal: AbortSignal.timeout(3000),
29
+ });
30
+ if (!res.ok)
31
+ return null;
32
+ return res.json();
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ /** Get or lazily open a read-only SQLite connection. */
39
+ db() {
40
+ if (this._db)
41
+ return this._db;
42
+ try {
43
+ this._db = new DatabaseSync(this.dbPath, { open: true });
44
+ return this._db;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ close() {
51
+ try {
52
+ this._db?.close();
53
+ }
54
+ catch { /* ignore */ }
55
+ this._db = null;
56
+ }
57
+ // ── Health / Engine ────────────────────────────────────────────────────────
58
+ async getHealth() {
59
+ return this.api("/health");
60
+ }
61
+ async getEngine() {
62
+ return this.api("/api/engine");
63
+ }
64
+ // ── Alerts ─────────────────────────────────────────────────────────────────
65
+ async getAlerts(limit = 50) {
66
+ const fromApi = await this.api(`/api/alerts?limit=${limit}`);
67
+ if (fromApi)
68
+ return fromApi;
69
+ const db = this.db();
70
+ if (!db)
71
+ return [];
72
+ return getRecentAlerts(db, limit);
73
+ }
74
+ // ── Sessions ───────────────────────────────────────────────────────────────
75
+ async getSessions() {
76
+ const state = await this.api("/api/state");
77
+ if (state?.sessions)
78
+ return state.sessions;
79
+ const db = this.db();
80
+ if (!db)
81
+ return [];
82
+ return getAllSessions(db);
83
+ }
84
+ // ── Activity ───────────────────────────────────────────────────────────────
85
+ async getActivity(limit = 100, sessionKey) {
86
+ const q = sessionKey
87
+ ? `/api/activity?limit=${limit}&session=${encodeURIComponent(sessionKey)}`
88
+ : `/api/activity?limit=${limit}`;
89
+ const fromApi = await this.api(q);
90
+ if (fromApi)
91
+ return fromApi;
92
+ const db = this.db();
93
+ if (!db)
94
+ return [];
95
+ return getActivityLog(db, limit, sessionKey);
96
+ }
97
+ // ── Actions ────────────────────────────────────────────────────────────────
98
+ async getActions(limit = 100, sessionKey) {
99
+ const q = sessionKey
100
+ ? `/api/actions?limit=${limit}&session=${encodeURIComponent(sessionKey)}`
101
+ : `/api/actions?limit=${limit}`;
102
+ const fromApi = await this.api(q);
103
+ if (fromApi)
104
+ return fromApi;
105
+ const db = this.db();
106
+ if (!db)
107
+ return [];
108
+ return getRecentActions(db, limit, sessionKey);
109
+ }
110
+ // ── Agents ─────────────────────────────────────────────────────────────────
111
+ async getAgents() {
112
+ const state = await this.api("/api/state");
113
+ if (state?.agents)
114
+ return state.agents;
115
+ const db = this.db();
116
+ if (!db)
117
+ return [];
118
+ return getAllAgents(db);
119
+ }
120
+ // ── Cron jobs ──────────────────────────────────────────────────────────────
121
+ async getCronJobs() {
122
+ const state = await this.api("/api/state");
123
+ if (state?.cronJobs)
124
+ return state.cronJobs;
125
+ const db = this.db();
126
+ if (!db)
127
+ return [];
128
+ return getAllCronJobs(db);
129
+ }
130
+ // ── Full state snapshot ────────────────────────────────────────────────────
131
+ async getFullState() {
132
+ const fromApi = await this.api("/api/state");
133
+ if (fromApi)
134
+ return fromApi;
135
+ const db = this.db();
136
+ if (!db)
137
+ return null;
138
+ return getDashboardState(db);
139
+ }
140
+ // ── Diagnostics & heartbeats ───────────────────────────────────────────────
141
+ async getDiagnostics(limit = 50) {
142
+ const fromApi = await this.api(`/api/diagnostics?limit=${limit}`);
143
+ if (fromApi)
144
+ return fromApi;
145
+ const db = this.db();
146
+ if (!db)
147
+ return [];
148
+ return getRecentDiagnostics(db, limit);
149
+ }
150
+ async getHeartbeats(limit = 10) {
151
+ const fromApi = await this.api(`/api/heartbeats?limit=${limit}`);
152
+ if (fromApi)
153
+ return fromApi;
154
+ const db = this.db();
155
+ if (!db)
156
+ return [];
157
+ return getRecentHeartbeats(db, limit);
158
+ }
159
+ // ── Test alert ─────────────────────────────────────────────────────────────
160
+ async fireTestAlert() {
161
+ const result = await this.api("/api/test", { method: "POST" });
162
+ if (result)
163
+ return result;
164
+ return { ok: false, error: "Daemon not running. Start with: openalerts start" };
165
+ }
166
+ // ── Daemon status ──────────────────────────────────────────────────────────
167
+ async isDaemonRunning() {
168
+ const h = await this.getHealth();
169
+ return h?.ok === true;
170
+ }
171
+ }
172
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function startMcpServer(opts?: {
2
+ port?: number;
3
+ dbPath?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AA2IA,wBAAsB,cAAc,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD7F"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * OpenAlerts MCP Server
3
+ *
4
+ * Exposes OpenAlerts monitoring data to any MCP-compatible AI assistant.
5
+ * Communicates via stdio. Start with: openalerts mcp
6
+ *
7
+ * Tools: get_status, get_alerts, get_sessions, get_session_detail,
8
+ * get_activity, get_rule_states, get_agents, get_cron_jobs,
9
+ * summarize, fire_test_alert
10
+ *
11
+ * Resources: openalerts://status, openalerts://alerts/recent,
12
+ * openalerts://sessions/active, openalerts://rules
13
+ */
14
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
15
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
16
+ import { ListToolsRequestSchema, CallToolRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
17
+ import { OpenAlertsClient } from "./client.js";
18
+ import { RESOURCES, readResource } from "./resources.js";
19
+ import { handleGetStatus, handleGetAlerts, handleGetSessions, handleGetSessionDetail, handleGetActivity, handleGetRuleStates, handleGetAgents, handleGetCronJobs, handleSummarize, handleFireTestAlert, } from "./tools.js";
20
+ // ── Tool definitions ──────────────────────────────────────────────────────────
21
+ const TOOLS = [
22
+ {
23
+ name: "get_status",
24
+ description: "Get OpenAlerts daemon health, gateway connection status, and 24h statistics (messages, errors, tokens, cost).",
25
+ inputSchema: {
26
+ type: "object",
27
+ properties: {},
28
+ },
29
+ },
30
+ {
31
+ name: "get_alerts",
32
+ description: "Get recent fired alerts. Optionally filter by severity or rule ID.",
33
+ inputSchema: {
34
+ type: "object",
35
+ properties: {
36
+ limit: { type: "number", description: "Max alerts to return (default 50)" },
37
+ severity: { type: "string", enum: ["info", "warn", "error", "critical"], description: "Filter by severity" },
38
+ rule_id: { type: "string", description: "Filter by rule ID (e.g. llm-errors, gateway-down)" },
39
+ },
40
+ },
41
+ },
42
+ {
43
+ name: "get_sessions",
44
+ description: "List agent monitoring sessions with status, message count, cost, and last activity.",
45
+ inputSchema: {
46
+ type: "object",
47
+ properties: {
48
+ status: { type: "string", description: "Filter by status (e.g. active, completed, error)" },
49
+ limit: { type: "number", description: "Max sessions to return" },
50
+ },
51
+ },
52
+ },
53
+ {
54
+ name: "get_session_detail",
55
+ description: "Get full detail for a specific session including all its actions/events.",
56
+ inputSchema: {
57
+ type: "object",
58
+ properties: {
59
+ session_key: { type: "string", description: "Session key to look up" },
60
+ action_limit: { type: "number", description: "Max actions to return (default 50)" },
61
+ },
62
+ required: ["session_key"],
63
+ },
64
+ },
65
+ {
66
+ name: "get_activity",
67
+ description: "Get the unified activity feed — agent steps, tool calls, LLM calls, infra events.",
68
+ inputSchema: {
69
+ type: "object",
70
+ properties: {
71
+ limit: { type: "number", description: "Max entries to return (default 50)" },
72
+ session_key: { type: "string", description: "Filter by session key" },
73
+ subsystem: { type: "string", enum: ["llm", "tool", "agent", "infra", "exec", "sys"], description: "Filter by subsystem" },
74
+ },
75
+ },
76
+ },
77
+ {
78
+ name: "get_rule_states",
79
+ description: "List all 10 alert rules with their thresholds, cooldowns, and last-fired timestamps.",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {},
83
+ },
84
+ },
85
+ {
86
+ name: "get_agents",
87
+ description: "List all known agents with their IDs, names, and last-updated timestamps.",
88
+ inputSchema: {
89
+ type: "object",
90
+ properties: {},
91
+ },
92
+ },
93
+ {
94
+ name: "get_cron_jobs",
95
+ description: "List all scheduled cron jobs with their last run status, schedule, and consecutive errors.",
96
+ inputSchema: {
97
+ type: "object",
98
+ properties: {},
99
+ },
100
+ },
101
+ {
102
+ name: "summarize",
103
+ description: "Get a concise narrative summary of what's happening right now — active sessions, recent alerts, activity, cost, and gateway status.",
104
+ inputSchema: {
105
+ type: "object",
106
+ properties: {},
107
+ },
108
+ },
109
+ {
110
+ name: "fire_test_alert",
111
+ description: "Send a test alert through all configured channels to verify delivery is working. Requires daemon to be running.",
112
+ inputSchema: {
113
+ type: "object",
114
+ properties: {},
115
+ },
116
+ },
117
+ ];
118
+ // ── Server bootstrap ──────────────────────────────────────────────────────────
119
+ export async function startMcpServer(opts) {
120
+ const client = new OpenAlertsClient(opts);
121
+ const server = new Server({ name: "openalerts", version: "1.0.0" }, {
122
+ capabilities: { tools: {}, resources: {} },
123
+ instructions: "OpenAlerts MCP server. Use 'summarize' for a quick overview, " +
124
+ "'get_status' for daemon health, 'get_alerts' for recent alerts, " +
125
+ "and 'get_activity' for live agent events. " +
126
+ "Data comes from the running daemon (localhost:4242) or SQLite fallback.",
127
+ });
128
+ // ── List tools ─────────────────────────────────────────────────────────────
129
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
130
+ // ── Call tool ──────────────────────────────────────────────────────────────
131
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
132
+ const { name, arguments: args } = request.params;
133
+ const a = (args ?? {});
134
+ switch (name) {
135
+ case "get_status": return handleGetStatus(client);
136
+ case "get_alerts": return handleGetAlerts(client, a);
137
+ case "get_sessions": return handleGetSessions(client, a);
138
+ case "get_session_detail": return handleGetSessionDetail(client, a);
139
+ case "get_activity": return handleGetActivity(client, a);
140
+ case "get_rule_states": return handleGetRuleStates(client);
141
+ case "get_agents": return handleGetAgents(client);
142
+ case "get_cron_jobs": return handleGetCronJobs(client);
143
+ case "summarize": return handleSummarize(client);
144
+ case "fire_test_alert": return handleFireTestAlert(client);
145
+ default:
146
+ return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true };
147
+ }
148
+ });
149
+ // ── List resources ─────────────────────────────────────────────────────────
150
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({ resources: RESOURCES }));
151
+ // ── Read resource ──────────────────────────────────────────────────────────
152
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
153
+ const { uri } = request.params;
154
+ const text = await readResource(uri, client);
155
+ return {
156
+ contents: [{ uri, mimeType: "text/plain", text }],
157
+ };
158
+ });
159
+ // ── Connect stdio transport ────────────────────────────────────────────────
160
+ const transport = new StdioServerTransport();
161
+ await server.connect(transport);
162
+ process.on("exit", () => client.close());
163
+ }
164
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * OpenAlerts MCP Resources
3
+ * Static context that clients can subscribe to or read on-demand.
4
+ */
5
+ import type { OpenAlertsClient } from "./client.js";
6
+ export declare const RESOURCES: {
7
+ uri: string;
8
+ name: string;
9
+ description: string;
10
+ mimeType: string;
11
+ }[];
12
+ export declare function readResource(uri: string, client: OpenAlertsClient): Promise<string>;
13
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,SAAS;;;;;GAyBrB,CAAC;AASF,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyEzF"}
@@ -0,0 +1,99 @@
1
+ export const RESOURCES = [
2
+ {
3
+ uri: "openalerts://status",
4
+ name: "Engine Status",
5
+ description: "Current daemon health, gateway connection, and 24h stats",
6
+ mimeType: "text/plain",
7
+ },
8
+ {
9
+ uri: "openalerts://alerts/recent",
10
+ name: "Recent Alerts",
11
+ description: "Last 50 fired alerts across all rules",
12
+ mimeType: "text/plain",
13
+ },
14
+ {
15
+ uri: "openalerts://sessions/active",
16
+ name: "Active Sessions",
17
+ description: "Sessions with activity in the last 15 minutes",
18
+ mimeType: "text/plain",
19
+ },
20
+ {
21
+ uri: "openalerts://rules",
22
+ name: "Alert Rules",
23
+ description: "All 10 alert rules with thresholds, cooldowns, and last-fired info",
24
+ mimeType: "text/plain",
25
+ },
26
+ ];
27
+ function ago(ms) {
28
+ const diff = Date.now() - ms;
29
+ if (diff < 60_000)
30
+ return `${Math.round(diff / 1000)}s ago`;
31
+ if (diff < 3_600_000)
32
+ return `${Math.round(diff / 60_000)}m ago`;
33
+ return `${Math.round(diff / 3_600_000)}h ago`;
34
+ }
35
+ export async function readResource(uri, client) {
36
+ switch (uri) {
37
+ case "openalerts://status": {
38
+ const [health, engine] = await Promise.all([client.getHealth(), client.getEngine()]);
39
+ if (!health && !engine)
40
+ return "Daemon not running.";
41
+ const lines = [];
42
+ if (health) {
43
+ lines.push(`Daemon: running | Gateway: ${health.gatewayConnected ? "connected" : "disconnected"} | SSE clients: ${health.sseClients}`);
44
+ }
45
+ if (engine) {
46
+ const s = engine.stats;
47
+ lines.push(`Uptime since: ${new Date(engine.startedAt).toISOString()} (${ago(engine.startedAt)})`);
48
+ lines.push(`Messages: ${s.messagesProcessed ?? 0} | Agent starts: ${s.agentStarts ?? 0} | Tool calls: ${s.toolCalls ?? 0}`);
49
+ lines.push(`Errors: ${s.messageErrors ?? 0} | Cost: $${(s.totalCostUsd ?? 0).toFixed(4)} | Tokens: ${(s.totalTokens ?? 0).toLocaleString()}`);
50
+ lines.push(`Alerts this hour: ${engine.hourlyAlerts.count}`);
51
+ }
52
+ return lines.join("\n");
53
+ }
54
+ case "openalerts://alerts/recent": {
55
+ const alerts = await client.getAlerts(50);
56
+ if (!alerts.length)
57
+ return "No recent alerts.";
58
+ return alerts.map(a => {
59
+ const icon = { warn: "⚠️", error: "🚨", critical: "🔥" }[a.severity] ?? "ℹ️";
60
+ return `${icon} [${new Date(a.ts).toISOString()}] ${a.title} [${a.rule_id}]\n ${a.detail}`;
61
+ }).join("\n\n");
62
+ }
63
+ case "openalerts://sessions/active": {
64
+ const sessions = await client.getSessions();
65
+ const active = sessions.filter(s => s.last_activity_at && (Date.now() - s.last_activity_at) < 15 * 60_000);
66
+ if (!active.length)
67
+ return "No sessions active in the last 15 minutes.";
68
+ return active.map(s => `${s.session_key} | status: ${s.status ?? "?"} | messages: ${s.message_count ?? 0} | cost: $${(s.total_cost_usd ?? 0).toFixed(4)} | last: ${ago(s.last_activity_at)}`).join("\n");
69
+ }
70
+ case "openalerts://rules": {
71
+ const RULES = [
72
+ { id: "infra-errors", severity: "error", threshold: 1, cooldownMin: 15, desc: "Infrastructure errors spike" },
73
+ { id: "llm-errors", severity: "error", threshold: 1, cooldownMin: 15, desc: "LLM / agent call errors" },
74
+ { id: "session-stuck", severity: "warn", threshold: 120, cooldownMin: 30, desc: "Session inactive for N seconds" },
75
+ { id: "heartbeat-fail", severity: "error", threshold: 3, cooldownMin: 30, desc: "N consecutive heartbeat failures" },
76
+ { id: "queue-depth", severity: "warn", threshold: 10, cooldownMin: 15, desc: "Delivery queue >= N items" },
77
+ { id: "high-error-rate", severity: "error", threshold: 50, cooldownMin: 30, desc: ">= N% of last 20 LLM calls failed" },
78
+ { id: "cost-hourly-spike", severity: "warn", threshold: 5, cooldownMin: 30, desc: "LLM spend >= $N/hour" },
79
+ { id: "cost-daily-budget", severity: "error", threshold: 20, cooldownMin: 360, desc: "LLM spend >= $N/day" },
80
+ { id: "tool-errors", severity: "warn", threshold: 1, cooldownMin: 15, desc: "Tool errors spike" },
81
+ { id: "gateway-down", severity: "critical", threshold: 30, cooldownMin: 60, desc: "No gateway heartbeat for N seconds" },
82
+ ];
83
+ const alerts = await client.getAlerts(200);
84
+ const lastFired = new Map();
85
+ for (const a of alerts) {
86
+ if (!lastFired.has(a.rule_id) || a.ts > lastFired.get(a.rule_id)) {
87
+ lastFired.set(a.rule_id, a.ts);
88
+ }
89
+ }
90
+ return RULES.map(r => {
91
+ const lf = lastFired.get(r.id);
92
+ return `[${r.severity.toUpperCase()}] ${r.id} — ${r.desc}\n threshold: ${r.threshold} | cooldown: ${r.cooldownMin}min | last fired: ${lf ? ago(lf) : "never"}`;
93
+ }).join("\n\n");
94
+ }
95
+ default:
96
+ return `Unknown resource: ${uri}`;
97
+ }
98
+ }
99
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * OpenAlerts MCP Tools
3
+ * Each function handles one tool call and returns MCP-compatible content.
4
+ */
5
+ import type { OpenAlertsClient } from "./client.js";
6
+ export declare function handleGetStatus(client: OpenAlertsClient): Promise<{
7
+ content: {
8
+ type: "text";
9
+ text: string;
10
+ }[];
11
+ }>;
12
+ export declare function handleGetAlerts(client: OpenAlertsClient, args: {
13
+ limit?: number;
14
+ severity?: string;
15
+ rule_id?: string;
16
+ }): Promise<{
17
+ content: {
18
+ type: "text";
19
+ text: string;
20
+ }[];
21
+ }>;
22
+ export declare function handleGetSessions(client: OpenAlertsClient, args: {
23
+ status?: string;
24
+ limit?: number;
25
+ }): Promise<{
26
+ content: {
27
+ type: "text";
28
+ text: string;
29
+ }[];
30
+ }>;
31
+ export declare function handleGetSessionDetail(client: OpenAlertsClient, args: {
32
+ session_key: string;
33
+ action_limit?: number;
34
+ }): Promise<{
35
+ content: {
36
+ type: "text";
37
+ text: string;
38
+ }[];
39
+ }>;
40
+ export declare function handleGetActivity(client: OpenAlertsClient, args: {
41
+ limit?: number;
42
+ session_key?: string;
43
+ subsystem?: string;
44
+ }): Promise<{
45
+ content: {
46
+ type: "text";
47
+ text: string;
48
+ }[];
49
+ }>;
50
+ export declare function handleGetRuleStates(client: OpenAlertsClient): Promise<{
51
+ content: {
52
+ type: "text";
53
+ text: string;
54
+ }[];
55
+ }>;
56
+ export declare function handleGetAgents(client: OpenAlertsClient): Promise<{
57
+ content: {
58
+ type: "text";
59
+ text: string;
60
+ }[];
61
+ }>;
62
+ export declare function handleSummarize(client: OpenAlertsClient): Promise<{
63
+ content: {
64
+ type: "text";
65
+ text: string;
66
+ }[];
67
+ }>;
68
+ export declare function handleFireTestAlert(client: OpenAlertsClient): Promise<{
69
+ content: {
70
+ type: "text";
71
+ text: string;
72
+ }[];
73
+ }>;
74
+ export declare function handleGetCronJobs(client: OpenAlertsClient): Promise<{
75
+ content: {
76
+ type: "text";
77
+ text: string;
78
+ }[];
79
+ }>;
80
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAoCpD,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB;;;;;GAsC7D;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GA2B9D;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAmC1C;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GA+BrD;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAgCnE;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB;;;;;GA+BjE;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB;;;;;GAgB7D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB;;;;;GAgF7D;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB;;;;;GAMjE;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB;;;;;GAuB/D"}
@@ -0,0 +1,304 @@
1
+ // ── Static rule catalogue (for get_rule_states when daemon is offline) ───────
2
+ const RULE_CATALOGUE = [
3
+ { id: "infra-errors", severity: "error", defaultThreshold: 1, defaultCooldownMin: 15, description: "Infrastructure errors spike (>= N in 1 min)" },
4
+ { id: "llm-errors", severity: "error", defaultThreshold: 1, defaultCooldownMin: 15, description: "LLM / agent call errors (>= N in 1 min)" },
5
+ { id: "session-stuck", severity: "warn", defaultThreshold: 120, defaultCooldownMin: 30, description: "Session inactive for >= N seconds" },
6
+ { id: "heartbeat-fail", severity: "error", defaultThreshold: 3, defaultCooldownMin: 30, description: ">= N consecutive heartbeat failures" },
7
+ { id: "queue-depth", severity: "warn", defaultThreshold: 10, defaultCooldownMin: 15, description: "Delivery queue >= N items" },
8
+ { id: "high-error-rate", severity: "error", defaultThreshold: 50, defaultCooldownMin: 30, description: ">= N% of last 20 LLM calls failed" },
9
+ { id: "cost-hourly-spike", severity: "warn", defaultThreshold: 5, defaultCooldownMin: 30, description: "LLM spend >= $N in last 60 minutes" },
10
+ { id: "cost-daily-budget", severity: "error", defaultThreshold: 20, defaultCooldownMin: 360, description: "LLM spend >= $N in last 24 hours" },
11
+ { id: "tool-errors", severity: "warn", defaultThreshold: 1, defaultCooldownMin: 15, description: "Tool execution errors (>= N in 1 min)" },
12
+ { id: "gateway-down", severity: "critical", defaultThreshold: 30, defaultCooldownMin: 60, description: "No gateway heartbeat for >= N seconds" },
13
+ ];
14
+ // ── Helpers ───────────────────────────────────────────────────────────────────
15
+ function text(content) {
16
+ return { content: [{ type: "text", text: content }] };
17
+ }
18
+ function ts(ms) {
19
+ return new Date(ms).toISOString();
20
+ }
21
+ function ago(ms) {
22
+ const diff = Date.now() - ms;
23
+ if (diff < 60_000)
24
+ return `${Math.round(diff / 1000)}s ago`;
25
+ if (diff < 3_600_000)
26
+ return `${Math.round(diff / 60_000)}m ago`;
27
+ return `${Math.round(diff / 3_600_000)}h ago`;
28
+ }
29
+ // ── Tool handlers ─────────────────────────────────────────────────────────────
30
+ export async function handleGetStatus(client) {
31
+ const [health, engine] = await Promise.all([
32
+ client.getHealth(),
33
+ client.getEngine(),
34
+ ]);
35
+ if (!health && !engine) {
36
+ return text("Daemon is not running.\n" +
37
+ "Start it with: openalerts start\n" +
38
+ "SQLite data may still be available via other tools.");
39
+ }
40
+ const lines = ["## OpenAlerts Status\n"];
41
+ if (health) {
42
+ lines.push(`**Daemon**: running`);
43
+ lines.push(`**Gateway**: ${health.gatewayConnected ? "connected" : "disconnected"}`);
44
+ lines.push(`**SSE clients**: ${health.sseClients}`);
45
+ lines.push(`**Checked at**: ${ts(health.ts)}\n`);
46
+ }
47
+ if (engine) {
48
+ const s = engine.stats;
49
+ lines.push(`**Uptime since**: ${ts(engine.startedAt)} (${ago(engine.startedAt)})`);
50
+ lines.push(`**Messages processed**: ${s.messagesProcessed ?? 0}`);
51
+ lines.push(`**Agent starts**: ${s.agentStarts ?? 0}`);
52
+ lines.push(`**Tool calls**: ${s.toolCalls ?? 0}`);
53
+ lines.push(`**Tool errors**: ${s.toolErrors ?? 0}`);
54
+ lines.push(`**LLM errors**: ${s.messageErrors ?? 0}`);
55
+ lines.push(`**Total tokens**: ${(s.totalTokens ?? 0).toLocaleString()}`);
56
+ lines.push(`**Total cost**: $${(s.totalCostUsd ?? 0).toFixed(4)}`);
57
+ lines.push(`**Alerts this hour**: ${engine.hourlyAlerts.count}`);
58
+ lines.push(`**Last heartbeat**: ${engine.lastHeartbeatTs ? ago(engine.lastHeartbeatTs) : "none"}`);
59
+ }
60
+ return text(lines.join("\n"));
61
+ }
62
+ export async function handleGetAlerts(client, args) {
63
+ let alerts = await client.getAlerts(args.limit ?? 50);
64
+ if (args.severity) {
65
+ alerts = alerts.filter(a => a.severity === args.severity);
66
+ }
67
+ if (args.rule_id) {
68
+ alerts = alerts.filter(a => a.rule_id === args.rule_id);
69
+ }
70
+ if (alerts.length === 0) {
71
+ return text("No alerts found matching the criteria.");
72
+ }
73
+ const lines = [`## Alerts (${alerts.length})\n`];
74
+ for (const a of alerts) {
75
+ const icon = { info: "ℹ️", warn: "⚠️", error: "🚨", critical: "🔥" }[a.severity] ?? "•";
76
+ lines.push(`${icon} **${a.title}** [${a.rule_id}] — ${ago(a.ts)}`);
77
+ lines.push(` ${a.detail}`);
78
+ lines.push(` _${ts(a.ts)}_\n`);
79
+ }
80
+ return text(lines.join("\n"));
81
+ }
82
+ export async function handleGetSessions(client, args) {
83
+ let sessions = await client.getSessions();
84
+ if (args.status) {
85
+ sessions = sessions.filter(s => s.status === args.status);
86
+ }
87
+ if (args.limit) {
88
+ sessions = sessions.slice(0, args.limit);
89
+ }
90
+ if (sessions.length === 0) {
91
+ return text("No sessions found.");
92
+ }
93
+ const lines = [`## Sessions (${sessions.length})\n`];
94
+ for (const s of sessions) {
95
+ lines.push(`**${s.session_key}**`);
96
+ if (s.agent_id)
97
+ lines.push(` Agent: ${s.agent_id}`);
98
+ if (s.platform)
99
+ lines.push(` Platform: ${s.platform}`);
100
+ if (s.status)
101
+ lines.push(` Status: ${s.status}`);
102
+ if (s.message_count)
103
+ lines.push(` Messages: ${s.message_count}`);
104
+ if (s.total_cost_usd)
105
+ lines.push(` Cost: $${s.total_cost_usd.toFixed(4)}`);
106
+ const tokens = (s.total_input_tokens ?? 0) + (s.total_output_tokens ?? 0);
107
+ if (tokens > 0)
108
+ lines.push(` Tokens: ${tokens.toLocaleString()}`);
109
+ if (s.last_activity_at)
110
+ lines.push(` Last activity: ${ago(s.last_activity_at)}`);
111
+ lines.push("");
112
+ }
113
+ return text(lines.join("\n"));
114
+ }
115
+ export async function handleGetSessionDetail(client, args) {
116
+ const [sessions, actions] = await Promise.all([
117
+ client.getSessions(),
118
+ client.getActions(args.action_limit ?? 50, args.session_key),
119
+ ]);
120
+ const session = sessions
121
+ .find(s => s.session_key === args.session_key);
122
+ if (!session) {
123
+ return text(`Session '${args.session_key}' not found.`);
124
+ }
125
+ const lines = [`## Session: ${args.session_key}\n`];
126
+ for (const [k, v] of Object.entries(session)) {
127
+ if (v != null)
128
+ lines.push(`**${k}**: ${v}`);
129
+ }
130
+ lines.push(`\n### Actions (${actions.length})\n`);
131
+ for (const a of actions) {
132
+ const icon = a.outcome === "error" ? "❌" : "✓";
133
+ lines.push(`${icon} [${ts(a.ts)}] ${a.type ?? a.event_type ?? "?"}` +
134
+ (a.tool_name ? ` — ${a.tool_name}` : "") +
135
+ (a.duration_ms ? ` (${a.duration_ms}ms)` : "") +
136
+ (a.error ? `\n Error: ${a.error}` : ""));
137
+ }
138
+ return text(lines.join("\n"));
139
+ }
140
+ export async function handleGetActivity(client, args) {
141
+ let activity = await client.getActivity(args.limit ?? 50, args.session_key);
142
+ if (args.subsystem) {
143
+ activity = activity.filter(e => e.subsystem === args.subsystem);
144
+ }
145
+ if (activity.length === 0) {
146
+ return text("No activity found.");
147
+ }
148
+ const lines = [`## Activity (${activity.length})\n`];
149
+ for (const e of activity) {
150
+ const subsysIcon = {
151
+ llm: "🤖", tool: "🔧", agent: "👤", infra: "⚙️", exec: "💻", sys: "📋",
152
+ };
153
+ const icon = subsysIcon[e.subsystem] ?? "•";
154
+ let line = `${icon} [${ts(e.ts)}] **${e.subsystem}** — ${e.message}`;
155
+ if (e.tool_name)
156
+ line += ` (${e.tool_name})`;
157
+ if (e.duration_ms)
158
+ line += ` ${e.duration_ms}ms`;
159
+ if (e.input_tokens || e.output_tokens) {
160
+ line += ` [in:${e.input_tokens ?? 0} out:${e.output_tokens ?? 0}]`;
161
+ }
162
+ lines.push(line);
163
+ }
164
+ return text(lines.join("\n"));
165
+ }
166
+ export async function handleGetRuleStates(client) {
167
+ const recentAlerts = await client.getAlerts(200);
168
+ const lastFiredMap = new Map();
169
+ for (const a of recentAlerts) {
170
+ const existing = lastFiredMap.get(a.rule_id);
171
+ if (!existing || a.ts > existing)
172
+ lastFiredMap.set(a.rule_id, a.ts);
173
+ }
174
+ const lines = ["## Alert Rules\n"];
175
+ for (const rule of RULE_CATALOGUE) {
176
+ const lastFired = lastFiredMap.get(rule.id);
177
+ const cooldownMs = rule.defaultCooldownMin * 60 * 1000;
178
+ const onCooldown = lastFired ? (Date.now() - lastFired) < cooldownMs : false;
179
+ const icon = { warn: "⚠️", error: "🚨", critical: "🔥" }[rule.severity] ?? "ℹ️";
180
+ lines.push(`${icon} **${rule.id}**`);
181
+ lines.push(` ${rule.description}`);
182
+ lines.push(` Threshold: ${rule.defaultThreshold} | Cooldown: ${rule.defaultCooldownMin}min`);
183
+ if (lastFired) {
184
+ lines.push(` Last fired: ${ago(lastFired)} (${ts(lastFired)})`);
185
+ lines.push(` On cooldown: ${onCooldown ? "yes" : "no"}`);
186
+ }
187
+ else {
188
+ lines.push(` Last fired: never`);
189
+ }
190
+ lines.push("");
191
+ }
192
+ return text(lines.join("\n"));
193
+ }
194
+ export async function handleGetAgents(client) {
195
+ const agents = await client.getAgents();
196
+ if (agents.length === 0) {
197
+ return text("No agents found in the database.");
198
+ }
199
+ const lines = [`## Agents (${agents.length})\n`];
200
+ for (const a of agents) {
201
+ lines.push(`${a.emoji ?? "🤖"} **${a.name ?? a.agent_id}** (${a.agent_id})`);
202
+ lines.push(` Updated: ${ago(a.updated_at)}`);
203
+ lines.push("");
204
+ }
205
+ return text(lines.join("\n"));
206
+ }
207
+ export async function handleSummarize(client) {
208
+ const [engine, alerts, sessions, activity] = await Promise.all([
209
+ client.getEngine(),
210
+ client.getAlerts(100),
211
+ client.getSessions(),
212
+ client.getActivity(200),
213
+ ]);
214
+ const now = Date.now();
215
+ const window1h = now - 3_600_000;
216
+ const window15m = now - 15 * 60_000;
217
+ const recentAlerts = alerts
218
+ .filter(a => a.ts > window1h);
219
+ const typedSessions = sessions;
220
+ const activeSessions = typedSessions.filter(s => s.last_activity_at && s.last_activity_at > window15m);
221
+ const typedActivity = activity;
222
+ const recentActivity = typedActivity.filter(e => e.ts > window1h);
223
+ const llmCalls = recentActivity.filter(e => e.subsystem === "llm").length;
224
+ const toolCalls = recentActivity.filter(e => e.subsystem === "tool").length;
225
+ const errors = recentActivity.filter(e => e.event_type.includes("error") || e.event_type.includes("fail")).length;
226
+ const lines = ["## OpenAlerts Summary\n"];
227
+ if (engine) {
228
+ const gw = engine.gatewayConnected;
229
+ lines.push(`**Daemon**: running since ${ago(engine.startedAt)}` +
230
+ ` | Gateway: ${gw === true ? "connected" : gw === false ? "disconnected" : "unknown"}`);
231
+ }
232
+ else {
233
+ lines.push("**Daemon**: not running (showing historical data from SQLite)");
234
+ }
235
+ lines.push("");
236
+ if (activeSessions.length > 0) {
237
+ lines.push(`**Active sessions** (last 15m): ${activeSessions.length}`);
238
+ for (const s of activeSessions.slice(0, 5)) {
239
+ lines.push(` • ${s.session_key}` + (s.total_cost_usd ? ` — $${s.total_cost_usd.toFixed(4)}` : ""));
240
+ }
241
+ }
242
+ else {
243
+ lines.push(`**Active sessions**: none in last 15 minutes`);
244
+ }
245
+ lines.push(`**Total sessions**: ${typedSessions.length}`);
246
+ lines.push("");
247
+ lines.push(`**Activity (last 1h)**: ${recentActivity.length} events`);
248
+ if (llmCalls > 0)
249
+ lines.push(` • LLM calls: ${llmCalls}`);
250
+ if (toolCalls > 0)
251
+ lines.push(` • Tool calls: ${toolCalls}`);
252
+ if (errors > 0)
253
+ lines.push(` • ⚠️ Errors: ${errors}`);
254
+ lines.push("");
255
+ if (engine?.stats) {
256
+ const s = engine.stats;
257
+ if (s.totalCostUsd > 0) {
258
+ lines.push(`**Cost (24h)**: $${s.totalCostUsd.toFixed(4)} | Tokens: ${(s.totalTokens ?? 0).toLocaleString()}`);
259
+ lines.push("");
260
+ }
261
+ }
262
+ if (recentAlerts.length > 0) {
263
+ lines.push(`**Alerts fired (last 1h)**: ${recentAlerts.length}`);
264
+ for (const a of recentAlerts.slice(0, 5)) {
265
+ const icon = { warn: "⚠️", error: "🚨", critical: "🔥" }[a.severity] ?? "ℹ️";
266
+ lines.push(` ${icon} ${a.title} [${a.rule_id}] — ${ago(a.ts)}`);
267
+ }
268
+ }
269
+ else {
270
+ lines.push(`**Alerts (last 1h)**: none ✓`);
271
+ }
272
+ return text(lines.join("\n"));
273
+ }
274
+ export async function handleFireTestAlert(client) {
275
+ const result = await client.fireTestAlert();
276
+ if (result.ok) {
277
+ return text(`Test alert fired successfully. ${result.message ?? ""}`);
278
+ }
279
+ return text(`Failed to fire test alert: ${result.error ?? "unknown error"}`);
280
+ }
281
+ export async function handleGetCronJobs(client) {
282
+ const jobs = await client.getCronJobs();
283
+ if (jobs.length === 0) {
284
+ return text("No cron jobs found.");
285
+ }
286
+ const lines = [`## Cron Jobs (${jobs.length})\n`];
287
+ for (const j of jobs) {
288
+ const statusIcon = j.last_status === "error" ? "❌" : j.last_status === "ok" ? "✓" : "•";
289
+ lines.push(`${statusIcon} **${j.name ?? j.id}**`);
290
+ if (j.schedule_expr)
291
+ lines.push(` Schedule: ${j.schedule_expr}`);
292
+ if (j.agent_id)
293
+ lines.push(` Agent: ${j.agent_id}`);
294
+ if (j.last_run_at)
295
+ lines.push(` Last run: ${ago(j.last_run_at)}`);
296
+ if (j.next_run_at)
297
+ lines.push(` Next run: ${new Date(j.next_run_at).toISOString()}`);
298
+ if (j.consecutive_errors)
299
+ lines.push(` Consecutive errors: ${j.consecutive_errors}`);
300
+ lines.push("");
301
+ }
302
+ return text(lines.join("\n"));
303
+ }
304
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,19 @@
1
1
  {
2
2
  "name": "@steadwing/openalerts",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "type": "module",
5
5
  "description": "Standalone monitoring daemon for OpenClaw — live dashboard, alerts via Telegram/webhook, REST API",
6
6
  "author": "Nilay",
7
7
  "license": "Apache-2.0",
8
- "keywords": ["openclaw", "monitoring", "alerts", "telegram", "dashboard", "ai-agent", "llm"],
8
+ "keywords": [
9
+ "openclaw",
10
+ "monitoring",
11
+ "alerts",
12
+ "telegram",
13
+ "dashboard",
14
+ "ai-agent",
15
+ "llm"
16
+ ],
9
17
  "repository": {
10
18
  "type": "git",
11
19
  "url": "https://github.com/steadwing/openalerts.git",
@@ -28,6 +36,7 @@
28
36
  "clean": "node -e \"const fs=require('fs');try{fs.rmSync('dist',{recursive:true,force:true})}catch{}\""
29
37
  },
30
38
  "dependencies": {
39
+ "@modelcontextprotocol/sdk": "^1.27.1",
31
40
  "ws": "^8.18.0"
32
41
  },
33
42
  "devDependencies": {