@tailormade/seq-mcp 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -0
- package/dist/api/client.d.ts +63 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +176 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/formatter.d.ts +4 -0
- package/dist/api/formatter.d.ts.map +1 -0
- package/dist/api/formatter.js +214 -0
- package/dist/api/formatter.js.map +1 -0
- package/dist/api/history.d.ts +26 -0
- package/dist/api/history.d.ts.map +1 -0
- package/dist/api/history.js +122 -0
- package/dist/api/history.js.map +1 -0
- package/dist/api/prefs.d.ts +12 -0
- package/dist/api/prefs.d.ts.map +1 -0
- package/dist/api/prefs.js +59 -0
- package/dist/api/prefs.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/history.d.ts +3 -0
- package/dist/tools/history.d.ts.map +1 -0
- package/dist/tools/history.js +78 -0
- package/dist/tools/history.js.map +1 -0
- package/dist/tools/live.d.ts +4 -0
- package/dist/tools/live.d.ts.map +1 -0
- package/dist/tools/live.js +26 -0
- package/dist/tools/live.js.map +1 -0
- package/dist/tools/prefs.d.ts +3 -0
- package/dist/tools/prefs.d.ts.map +1 -0
- package/dist/tools/prefs.js +34 -0
- package/dist/tools/prefs.js.map +1 -0
- package/dist/tools/query.d.ts +4 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +220 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/tools/recent.d.ts +4 -0
- package/dist/tools/recent.d.ts.map +1 -0
- package/dist/tools/recent.js +31 -0
- package/dist/tools/recent.js.map +1 -0
- package/dist/tools/search.d.ts +4 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +42 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/signals.d.ts +4 -0
- package/dist/tools/signals.d.ts.map +1 -0
- package/dist/tools/signals.js +19 -0
- package/dist/tools/signals.js.map +1 -0
- package/dist/tools/stream.d.ts +4 -0
- package/dist/tools/stream.d.ts.map +1 -0
- package/dist/tools/stream.js +36 -0
- package/dist/tools/stream.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearHistory = clearHistory;
|
|
4
|
+
exports.clearSystem = clearSystem;
|
|
5
|
+
exports.clearQueriesOlderThan = clearQueriesOlderThan;
|
|
6
|
+
exports.historyFile = historyFile;
|
|
7
|
+
exports.loadHistory = loadHistory;
|
|
8
|
+
exports.recordQuery = recordQuery;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const os_1 = require("os");
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
const prefs_js_1 = require("./prefs.js");
|
|
13
|
+
function historyPath() {
|
|
14
|
+
const url = process.env.SEQ_SERVER_URL ?? "";
|
|
15
|
+
try {
|
|
16
|
+
const host = new URL(url).hostname.replace(/[^a-z0-9.-]/gi, "_");
|
|
17
|
+
return (0, path_1.join)((0, os_1.homedir)(), `.seq-mcp-history-${host}.json`);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
console.error("seq-mcp: invalid SEQ_SERVER_URL, falling back to default history path");
|
|
21
|
+
return (0, path_1.join)((0, os_1.homedir)(), ".seq-mcp-history.json");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const HISTORY_PATH = historyPath();
|
|
25
|
+
function load() {
|
|
26
|
+
if (!(0, fs_1.existsSync)(HISTORY_PATH))
|
|
27
|
+
return { queries: [], systems: {} };
|
|
28
|
+
try {
|
|
29
|
+
return JSON.parse((0, fs_1.readFileSync)(HISTORY_PATH, "utf-8"));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return { queries: [], systems: {} };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function prune(h) {
|
|
36
|
+
const prefs = (0, prefs_js_1.loadPrefs)();
|
|
37
|
+
const ms = (days) => Date.now() - days * 24 * 60 * 60 * 1000;
|
|
38
|
+
const systemCutoff = ms(prefs.historySystemKeepDays);
|
|
39
|
+
for (const [system, entry] of Object.entries(h.systems)) {
|
|
40
|
+
if (new Date(entry.lastUsed).getTime() < systemCutoff)
|
|
41
|
+
delete h.systems[system];
|
|
42
|
+
}
|
|
43
|
+
const queryCutoff = ms(prefs.historyQueryKeepDays);
|
|
44
|
+
h.queries = h.queries.filter((q) => new Date(q.usedAt).getTime() >= queryCutoff);
|
|
45
|
+
}
|
|
46
|
+
function save(h) {
|
|
47
|
+
prune(h);
|
|
48
|
+
try {
|
|
49
|
+
(0, fs_1.writeFileSync)(HISTORY_PATH, JSON.stringify(h, null, 2), "utf-8");
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
console.error("seq-mcp: failed to write history file:", e);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function clearHistory(what) {
|
|
56
|
+
const h = load();
|
|
57
|
+
if (what === "all" || what === "queries")
|
|
58
|
+
h.queries = [];
|
|
59
|
+
if (what === "all" || what === "systems")
|
|
60
|
+
h.systems = {};
|
|
61
|
+
save(h);
|
|
62
|
+
}
|
|
63
|
+
function clearSystem(system) {
|
|
64
|
+
const h = load();
|
|
65
|
+
if (!(system in h.systems))
|
|
66
|
+
return false;
|
|
67
|
+
delete h.systems[system];
|
|
68
|
+
save(h);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
function clearQueriesOlderThan(days) {
|
|
72
|
+
const h = load();
|
|
73
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
74
|
+
const before = h.queries.length;
|
|
75
|
+
h.queries = h.queries.filter((q) => new Date(q.usedAt).getTime() >= cutoff);
|
|
76
|
+
save(h);
|
|
77
|
+
return before - h.queries.length;
|
|
78
|
+
}
|
|
79
|
+
function historyFile() {
|
|
80
|
+
return HISTORY_PATH;
|
|
81
|
+
}
|
|
82
|
+
function loadHistory() {
|
|
83
|
+
return load();
|
|
84
|
+
}
|
|
85
|
+
function recordQuery(params, events) {
|
|
86
|
+
const h = load();
|
|
87
|
+
// Extract systems and their properties from results
|
|
88
|
+
const seenSystems = new Set();
|
|
89
|
+
for (const e of events) {
|
|
90
|
+
const p = e.Properties;
|
|
91
|
+
if (!p)
|
|
92
|
+
continue;
|
|
93
|
+
const propMap = Array.isArray(p)
|
|
94
|
+
? Object.fromEntries(p.map(({ Name, Value }) => [Name, Value]))
|
|
95
|
+
: p;
|
|
96
|
+
const system = String(propMap.System ?? propMap.ApplicationName ?? "");
|
|
97
|
+
if (!system)
|
|
98
|
+
continue;
|
|
99
|
+
seenSystems.add(system);
|
|
100
|
+
const existing = h.systems[system] ?? { properties: [], lastUsed: "" };
|
|
101
|
+
const known = new Set(existing.properties);
|
|
102
|
+
for (const key of Object.keys(propMap))
|
|
103
|
+
known.add(key);
|
|
104
|
+
h.systems[system] = { properties: [...known].sort(), lastUsed: new Date().toISOString() };
|
|
105
|
+
}
|
|
106
|
+
// Save query entry (skip duplicates of same filter within last 5)
|
|
107
|
+
const entry = {
|
|
108
|
+
filter: params.filter,
|
|
109
|
+
startedAt: params.startedAt,
|
|
110
|
+
endedAt: params.endedAt,
|
|
111
|
+
usedAt: new Date().toISOString(),
|
|
112
|
+
systems: [...seenSystems],
|
|
113
|
+
};
|
|
114
|
+
const recent = h.queries.slice(0, 5);
|
|
115
|
+
const isDuplicate = recent.some((q) => q.filter === entry.filter && q.startedAt === entry.startedAt && q.endedAt === entry.endedAt);
|
|
116
|
+
if (!isDuplicate) {
|
|
117
|
+
h.queries.unshift(entry);
|
|
118
|
+
h.queries = h.queries.slice(0, (0, prefs_js_1.loadPrefs)().maxHistoryQueries);
|
|
119
|
+
}
|
|
120
|
+
save(h);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/api/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface SeqPrefs {
|
|
2
|
+
hideFields: string[];
|
|
3
|
+
defaultFormat: "compact" | "table" | "detail" | "raw";
|
|
4
|
+
maxMessageLength: number;
|
|
5
|
+
historyQueryKeepDays: number;
|
|
6
|
+
historySystemKeepDays: number;
|
|
7
|
+
maxHistoryQueries: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function loadPrefs(): SeqPrefs;
|
|
10
|
+
export declare function savePrefs(prefs: SeqPrefs): void;
|
|
11
|
+
export declare function updatePref(key: string, value: unknown): SeqPrefs;
|
|
12
|
+
//# sourceMappingURL=prefs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefs.d.ts","sourceRoot":"","sources":["../../src/api/prefs.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAaD,wBAAgB,SAAS,IAAI,QAAQ,CAQpC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAM/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAiBhE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadPrefs = loadPrefs;
|
|
4
|
+
exports.savePrefs = savePrefs;
|
|
5
|
+
exports.updatePref = updatePref;
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const os_1 = require("os");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const PREFS_PATH = (0, path_1.join)((0, os_1.homedir)(), ".seq-mcp-prefs.json");
|
|
10
|
+
const DEFAULTS = {
|
|
11
|
+
hideFields: ["ProcessId", "ThreadId", "EventId"],
|
|
12
|
+
defaultFormat: "compact",
|
|
13
|
+
maxMessageLength: 120,
|
|
14
|
+
historyQueryKeepDays: 60,
|
|
15
|
+
historySystemKeepDays: 60,
|
|
16
|
+
maxHistoryQueries: 500,
|
|
17
|
+
};
|
|
18
|
+
function loadPrefs() {
|
|
19
|
+
if (!(0, fs_1.existsSync)(PREFS_PATH))
|
|
20
|
+
return { ...DEFAULTS };
|
|
21
|
+
try {
|
|
22
|
+
const raw = JSON.parse((0, fs_1.readFileSync)(PREFS_PATH, "utf-8"));
|
|
23
|
+
return { ...DEFAULTS, ...raw };
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { ...DEFAULTS };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function savePrefs(prefs) {
|
|
30
|
+
try {
|
|
31
|
+
(0, fs_1.writeFileSync)(PREFS_PATH, JSON.stringify(prefs, null, 2), "utf-8");
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
console.error("seq-mcp: failed to write prefs file:", e);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function updatePref(key, value) {
|
|
38
|
+
const prefs = loadPrefs();
|
|
39
|
+
if (!(key in DEFAULTS))
|
|
40
|
+
throw new Error(`Unknown preference: ${key}`);
|
|
41
|
+
const defaultValue = DEFAULTS[key];
|
|
42
|
+
if (key === "defaultFormat") {
|
|
43
|
+
const valid = ["compact", "table", "detail", "raw"];
|
|
44
|
+
if (!valid.includes(value))
|
|
45
|
+
throw new Error(`Invalid value for defaultFormat: must be one of ${valid.join(", ")} (got: ${value})`);
|
|
46
|
+
}
|
|
47
|
+
if (typeof defaultValue === "number") {
|
|
48
|
+
const n = Number(value);
|
|
49
|
+
if (!Number.isInteger(n) || n < 1)
|
|
50
|
+
throw new Error(`Invalid value for ${key}: must be a positive integer (got: ${value})`);
|
|
51
|
+
Object.assign(prefs, { [key]: n });
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
Object.assign(prefs, { [key]: value });
|
|
55
|
+
}
|
|
56
|
+
savePrefs(prefs);
|
|
57
|
+
return prefs;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=prefs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefs.js","sourceRoot":"","sources":["../../src/api/prefs.ts"],"names":[],"mappings":";;AAwBA,8BAQC;AAED,8BAMC;AAED,gCAiBC;AA3DD,2BAA6D;AAC7D,2BAA6B;AAC7B,+BAA4B;AAW5B,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,qBAAqB,CAAC,CAAC;AAE1D,MAAM,QAAQ,GAAa;IACzB,UAAU,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC;IAChD,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,GAAG;IACrB,oBAAoB,EAAE,EAAE;IACxB,qBAAqB,EAAE,EAAE;IACzB,iBAAiB,EAAE,GAAG;CACvB,CAAC;AAEF,SAAgB,SAAS;IACvB,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,GAAG,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,KAAe;IACvC,IAAI,CAAC;QACH,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW,EAAE,KAAc;IACpD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IACtE,MAAM,YAAY,GAAI,QAA+C,CAAC,GAAG,CAAC,CAAC;IAC3E,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAe,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;IAC/I,CAAC;IACD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,sCAAsC,KAAK,GAAG,CAAC,CAAC;QAC3H,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const { version } = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../package.json"), "utf-8"));
|
|
9
|
+
const client_js_1 = require("./api/client.js");
|
|
10
|
+
const search_js_1 = require("./tools/search.js");
|
|
11
|
+
const signals_js_1 = require("./tools/signals.js");
|
|
12
|
+
const recent_js_1 = require("./tools/recent.js");
|
|
13
|
+
const stream_js_1 = require("./tools/stream.js");
|
|
14
|
+
const prefs_js_1 = require("./tools/prefs.js");
|
|
15
|
+
const query_js_1 = require("./tools/query.js");
|
|
16
|
+
const history_js_1 = require("./tools/history.js");
|
|
17
|
+
function getRequiredEnv(name) {
|
|
18
|
+
const value = process.env[name];
|
|
19
|
+
if (!value)
|
|
20
|
+
throw new Error(`Missing required environment variable: ${name}`);
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
process.on("unhandledRejection", (err) => {
|
|
24
|
+
console.error(JSON.stringify({ level: "ERROR", op: "process", msg: "Unhandled rejection", error: String(err) }));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
|
27
|
+
async function main() {
|
|
28
|
+
const client = new client_js_1.SeqClient({
|
|
29
|
+
serverUrl: getRequiredEnv("SEQ_SERVER_URL"),
|
|
30
|
+
apiKey: getRequiredEnv("SEQ_API_KEY"),
|
|
31
|
+
});
|
|
32
|
+
const server = new mcp_js_1.McpServer({ name: "seq-mcp", version });
|
|
33
|
+
(0, search_js_1.registerSearchTools)(server, client);
|
|
34
|
+
(0, signals_js_1.registerSignalTools)(server, client);
|
|
35
|
+
(0, recent_js_1.registerRecentTools)(server, client);
|
|
36
|
+
(0, stream_js_1.registerStreamTools)(server, client);
|
|
37
|
+
(0, prefs_js_1.registerPrefsTools)(server);
|
|
38
|
+
(0, query_js_1.registerQueryTools)(server, client);
|
|
39
|
+
(0, history_js_1.registerHistoryTools)(server);
|
|
40
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
41
|
+
await server.connect(transport);
|
|
42
|
+
}
|
|
43
|
+
main().catch((err) => { console.error(err); process.exit(1); });
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,oEAAoE;AACpE,wEAAiF;AACjF,2BAAkC;AAClC,+BAA4B;AAE5B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAC;AACjH,+CAA4C;AAC5C,iDAAwD;AACxD,mDAAyD;AACzD,iDAAwD;AACxD,iDAAwD;AACxD,+CAAsD;AACtD,+CAAsD;AACtD,mDAA0D;AAE1D,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;IACvC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,qBAAS,CAAC;QAC3B,SAAS,EAAE,cAAc,CAAC,gBAAgB,CAAC;QAC3C,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3D,IAAA,+BAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAA,gCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAA,+BAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAA,+BAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAA,6BAAkB,EAAC,MAAM,CAAC,CAAC;IAC3B,IAAA,6BAAkB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAA,iCAAoB,EAAC,MAAM,CAAC,CAAC;IAE7B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/tools/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6E5D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerHistoryTools = registerHistoryTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const history_js_1 = require("../api/history.js");
|
|
6
|
+
function respond(text) {
|
|
7
|
+
return { content: [{ type: "text", text }] };
|
|
8
|
+
}
|
|
9
|
+
function registerHistoryTools(server) {
|
|
10
|
+
server.tool("seq_history", "Show cached query history and discovered Seq systems/properties. Auto-built from previous seq_search calls. Scoped per Seq server (separate file per SEQ_SERVER_URL). Use to find known System names, property names per system, and recent filter patterns.\n\nllmTip: NOTE: call this before seq_fields or writing a new filter — known systems and properties may already be resolved. NOTE: retention is configurable via seq_prefs_update: historyQueryKeepDays, historySystemKeepDays, maxHistoryQueries (defaults 60/60/500). NOTE: each Seq server gets its own cache file — no cross-client pollution.", {
|
|
11
|
+
filter: zod_1.z.string().optional().describe("Optional text filter (case-insensitive). When provided, shows only systems and queries whose name, filter, or systems contain this term."),
|
|
12
|
+
}, async (params) => {
|
|
13
|
+
const h = (0, history_js_1.loadHistory)();
|
|
14
|
+
const lines = [`file: ${(0, history_js_1.historyFile)()}`, ""];
|
|
15
|
+
const term = params.filter?.toLowerCase();
|
|
16
|
+
// Systems + properties
|
|
17
|
+
const systemEntries = Object.entries(h.systems)
|
|
18
|
+
.filter(([system]) => !term || system.toLowerCase().includes(term));
|
|
19
|
+
if (systemEntries.length > 0) {
|
|
20
|
+
lines.push("## Known Systems & Properties");
|
|
21
|
+
for (const [system, entry] of systemEntries) {
|
|
22
|
+
const lastUsed = entry.lastUsed.slice(0, 10);
|
|
23
|
+
lines.push(`\n### ${system} (last used: ${lastUsed})`);
|
|
24
|
+
lines.push(entry.properties.join(", "));
|
|
25
|
+
}
|
|
26
|
+
lines.push("");
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
lines.push("## Known Systems & Properties\n(none yet)\n");
|
|
30
|
+
}
|
|
31
|
+
// Recent queries
|
|
32
|
+
lines.push("## Recent Queries");
|
|
33
|
+
const queries = h.queries.filter((q) => !term ||
|
|
34
|
+
(q.filter ?? "").toLowerCase().includes(term) ||
|
|
35
|
+
q.systems.some((s) => s.toLowerCase().includes(term)));
|
|
36
|
+
if (queries.length === 0) {
|
|
37
|
+
lines.push("(none yet)");
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
for (const q of queries) {
|
|
41
|
+
const date = q.usedAt.slice(0, 16).replace("T", " ");
|
|
42
|
+
const sys = q.systems.length ? ` [${q.systems.join(", ")}]` : "";
|
|
43
|
+
lines.push(`\n${date}${sys}`);
|
|
44
|
+
if (q.filter)
|
|
45
|
+
lines.push(` filter: ${q.filter}`);
|
|
46
|
+
if (q.startedAt)
|
|
47
|
+
lines.push(` from: ${q.startedAt}`);
|
|
48
|
+
if (q.endedAt)
|
|
49
|
+
lines.push(` to: ${q.endedAt}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return respond(lines.join("\n"));
|
|
53
|
+
});
|
|
54
|
+
server.tool("seq_history_clear", "Clear the local Seq history cache.\n\nllmTip: NOTE: 'all'/'queries'/'systems' need no extra params. NOTE: use 'system' + system param to remove one specific system (e.g. after a client offboards). NOTE: use 'queries_older_than' + days param for a manual retention sweep outside the auto-prune cycle.", {
|
|
55
|
+
what: zod_1.z.enum(["all", "queries", "systems", "system", "queries_older_than"]).describe("'all' = everything | 'queries' = query history only | 'systems' = all discovered systems/properties | 'system' = one system by name (requires system param) | 'queries_older_than' = queries older than N days (requires days param)"),
|
|
56
|
+
system: zod_1.z.string().optional().describe("System name to remove. Only used when what='system'. e.g. 'MyApp'"),
|
|
57
|
+
days: zod_1.z.coerce.number().min(1).optional().describe("Number of days threshold. Only used when what='queries_older_than'. e.g. 30"),
|
|
58
|
+
}, async (params) => {
|
|
59
|
+
switch (params.what) {
|
|
60
|
+
case "system": {
|
|
61
|
+
if (!params.system)
|
|
62
|
+
throw new Error("system parameter is required");
|
|
63
|
+
const found = (0, history_js_1.clearSystem)(params.system);
|
|
64
|
+
return respond(found ? `Cleared system: ${params.system}` : `System not found: ${params.system}`);
|
|
65
|
+
}
|
|
66
|
+
case "queries_older_than": {
|
|
67
|
+
if (params.days == null)
|
|
68
|
+
throw new Error("days parameter is required");
|
|
69
|
+
const removed = (0, history_js_1.clearQueriesOlderThan)(params.days);
|
|
70
|
+
return respond(`Removed ${removed} queries older than ${params.days} days`);
|
|
71
|
+
}
|
|
72
|
+
default:
|
|
73
|
+
(0, history_js_1.clearHistory)(params.what);
|
|
74
|
+
return respond(`Cleared: ${params.what} (file: ${(0, history_js_1.historyFile)()})`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/tools/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/tools/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM7C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB5E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerLiveTools = registerLiveTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
function respond(text) {
|
|
6
|
+
return { content: [{ type: "text", text }] };
|
|
7
|
+
}
|
|
8
|
+
function registerLiveTools(server, client) {
|
|
9
|
+
server.tool("seq_live", "Fetch the most recent events from Seq (live tail). Use afterId to poll for new events since a previous call — pass the Id of the last event you received. Useful for monitoring in real-time.\n\nllmTip: For continuous monitoring, first call without afterId to get the latest events, then use the Id of the newest event as afterId in subsequent calls. Combine with q/filter/signal to watch specific event streams.", {
|
|
10
|
+
q: zod_1.z.string().optional().describe("DEPRECATED — do not use for text search. Use filter with @Message like '%keyword%' instead."),
|
|
11
|
+
filter: zod_1.z.string().optional().describe("Seq filter expression. For text search: @Message like '%keyword%'. For structured: @Level = 'Error'. Combine with and/or."),
|
|
12
|
+
signal: zod_1.z.string().optional().describe("Signal ID to filter by, e.g. signal-354"),
|
|
13
|
+
count: zod_1.z.coerce.number().optional().describe("Max events to return (default 10)"),
|
|
14
|
+
afterId: zod_1.z.string().optional().describe("Only return events newer than this event ID. Use for polling: pass the Id of the last event from your previous call."),
|
|
15
|
+
}, async (params) => {
|
|
16
|
+
const events = await client.streamLive({
|
|
17
|
+
q: params.q,
|
|
18
|
+
filter: params.filter,
|
|
19
|
+
signal: params.signal,
|
|
20
|
+
count: params.count ?? 10,
|
|
21
|
+
afterId: params.afterId,
|
|
22
|
+
});
|
|
23
|
+
return respond(JSON.stringify(events, null, 2));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/tools/live.ts"],"names":[],"mappings":";;AAQA,8CAsBC;AA7BD,6BAAwB;AAGxB,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAiB,EAAE,MAAiB;IACpE,MAAM,CAAC,IAAI,CACT,UAAU,EACV,4ZAA4Z,EAC5Z;QACE,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6FAA6F,CAAC;QAChI,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2HAA2H,CAAC;QACnK,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACjF,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACjF,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sHAAsH,CAAC;KAChK,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YACrC,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefs.d.ts","sourceRoot":"","sources":["../../src/tools/prefs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmC1D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPrefsTools = registerPrefsTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const prefs_js_1 = require("../api/prefs.js");
|
|
6
|
+
function respond(text) {
|
|
7
|
+
return { content: [{ type: "text", text }] };
|
|
8
|
+
}
|
|
9
|
+
function registerPrefsTools(server) {
|
|
10
|
+
server.tool("seq_prefs", "Show current Seq MCP preferences (output format, hidden fields, message length, history retention days).", {}, async () => {
|
|
11
|
+
const prefs = (0, prefs_js_1.loadPrefs)();
|
|
12
|
+
const lines = [
|
|
13
|
+
"Current preferences (valid values shown):",
|
|
14
|
+
` defaultFormat: compact | table | detail | raw [current: ${prefs.defaultFormat}]`,
|
|
15
|
+
` maxMessageLength: positive integer [current: ${prefs.maxMessageLength}]`,
|
|
16
|
+
` hideFields: comma-separated field names [current: ${prefs.hideFields.join(", ")}]`,
|
|
17
|
+
` historyQueryKeepDays: positive integer [current: ${prefs.historyQueryKeepDays}]`,
|
|
18
|
+
` historySystemKeepDays: positive integer [current: ${prefs.historySystemKeepDays}]`,
|
|
19
|
+
` maxHistoryQueries: positive integer [current: ${prefs.maxHistoryQueries}]`,
|
|
20
|
+
];
|
|
21
|
+
return respond(lines.join("\n"));
|
|
22
|
+
});
|
|
23
|
+
server.tool("seq_prefs_update", "Update a Seq MCP preference. Valid keys: defaultFormat (compact|table|detail|raw), maxMessageLength (number), hideFields (comma-separated list), historyQueryKeepDays (number, default 60), historySystemKeepDays (number, default 60), maxHistoryQueries (number, default 500).", {
|
|
24
|
+
key: zod_1.z.string().describe("Preference key: defaultFormat, maxMessageLength, hideFields, historyQueryKeepDays, historySystemKeepDays, or maxHistoryQueries"),
|
|
25
|
+
value: zod_1.z.string().describe("New value. For hideFields use comma-separated list, e.g. 'ProcessId,ThreadId'"),
|
|
26
|
+
}, async (params) => {
|
|
27
|
+
const value = params.key === "hideFields"
|
|
28
|
+
? params.value.split(",").map((s) => s.trim()).filter(Boolean)
|
|
29
|
+
: params.value;
|
|
30
|
+
const prefs = (0, prefs_js_1.updatePref)(params.key, value);
|
|
31
|
+
return respond(`Updated. Current preferences:\n${JSON.stringify(prefs, null, 2)}`);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=prefs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefs.js","sourceRoot":"","sources":["../../src/tools/prefs.ts"],"names":[],"mappings":";;AAQA,gDAmCC;AA1CD,6BAAwB;AACxB,8CAAwD;AAExD,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,IAAI,CACT,WAAW,EACX,0GAA0G,EAC1G,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,IAAA,oBAAS,GAAE,CAAC;QAC1B,MAAM,KAAK,GAAG;YACZ,2CAA2C;YAC3C,8DAA8D,KAAK,CAAC,aAAa,GAAG;YACpF,mDAAmD,KAAK,CAAC,gBAAgB,GAAG;YAC5E,wDAAwD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACtF,uDAAuD,KAAK,CAAC,oBAAoB,GAAG;YACpF,wDAAwD,KAAK,CAAC,qBAAqB,GAAG;YACtF,oDAAoD,KAAK,CAAC,iBAAiB,GAAG;SAC/E,CAAC;QACF,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,kRAAkR,EAClR;QACE,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gIAAgI,CAAC;QAC1J,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;KAC5G,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,KAAK,GAAY,MAAM,CAAC,GAAG,KAAK,YAAY;YAChD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9D,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACjB,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqK7C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAuF7E"}
|