@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 +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/mcp/client.d.ts +52 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +172 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +164 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/resources.d.ts +13 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +99 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/tools.d.ts +80 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +304 -0
- package/dist/mcp/tools.js.map +1 -0
- package/package.json +11 -2
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 @@
|
|
|
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.
|
|
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": [
|
|
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": {
|