sencre-mcp 1.3.0 → 1.4.0
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/index.mjs +46 -14
- package/package.json +1 -1
package/index.mjs
CHANGED
|
@@ -20,21 +20,43 @@ function logErr(...args) {
|
|
|
20
20
|
console.error("[sencre-mcp]", ...args);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
// ——— session (
|
|
24
|
-
function
|
|
25
|
-
|
|
23
|
+
// ——— session (workspace-local, global fallback) ———
|
|
24
|
+
function projectRoot(cwd = process.cwd()) {
|
|
25
|
+
let dir = cwd;
|
|
26
|
+
for (let i = 0; i < 12; i++) {
|
|
27
|
+
if (existsSync(join(dir, ".sencre.json"))) return dir;
|
|
28
|
+
const parent = dirname(dir);
|
|
29
|
+
if (parent === dir) break;
|
|
30
|
+
dir = parent;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
26
33
|
}
|
|
34
|
+
|
|
35
|
+
function globalSessionFile() {
|
|
36
|
+
return join(homedir(), ".sencre", "session.json");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function localSessionFile() {
|
|
40
|
+
const root = projectRoot();
|
|
41
|
+
if (root) return join(root, ".sencre", "session.json");
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Write target: workspace-local if .sencre.json found, else global. */
|
|
27
46
|
function sessionFile() {
|
|
28
|
-
return
|
|
47
|
+
return localSessionFile() || globalSessionFile();
|
|
29
48
|
}
|
|
30
|
-
|
|
49
|
+
|
|
50
|
+
function sessionDir() {
|
|
51
|
+
return dirname(sessionFile());
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function readSessionFile(p) {
|
|
31
55
|
try {
|
|
32
|
-
const p = sessionFile();
|
|
33
|
-
if (!existsSync(p)) return null;
|
|
34
56
|
const s = JSON.parse(readFileSync(p, "utf8"));
|
|
35
57
|
if (!s.token || !s.projectId) return null;
|
|
36
58
|
if (s.expiresAt && new Date(s.expiresAt).getTime() < Date.now()) {
|
|
37
|
-
|
|
59
|
+
try { unlinkSync(p); } catch { /* ignore */ }
|
|
38
60
|
return null;
|
|
39
61
|
}
|
|
40
62
|
return s;
|
|
@@ -42,17 +64,27 @@ function loadSession() {
|
|
|
42
64
|
return null;
|
|
43
65
|
}
|
|
44
66
|
}
|
|
67
|
+
|
|
68
|
+
function loadSession() {
|
|
69
|
+
const local = localSessionFile();
|
|
70
|
+
if (local && existsSync(local)) {
|
|
71
|
+
const s = readSessionFile(local);
|
|
72
|
+
if (s) return s;
|
|
73
|
+
}
|
|
74
|
+
if (existsSync(globalSessionFile())) {
|
|
75
|
+
return readSessionFile(globalSessionFile());
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
45
80
|
function saveSession(s) {
|
|
46
81
|
const d = sessionDir();
|
|
47
82
|
if (!existsSync(d)) mkdirSync(d, { recursive: true });
|
|
48
83
|
writeFileSync(sessionFile(), `${JSON.stringify(s, null, 2)}\n`, "utf8");
|
|
49
84
|
}
|
|
85
|
+
|
|
50
86
|
function clearSession() {
|
|
51
|
-
try {
|
|
52
|
-
unlinkSync(sessionFile());
|
|
53
|
-
} catch {
|
|
54
|
-
/* ignore */
|
|
55
|
-
}
|
|
87
|
+
try { unlinkSync(sessionFile()); } catch { /* ignore */ }
|
|
56
88
|
}
|
|
57
89
|
|
|
58
90
|
// ——— project bind ———
|
|
@@ -166,7 +198,7 @@ function openBrowser(url) {
|
|
|
166
198
|
}
|
|
167
199
|
|
|
168
200
|
async function main() {
|
|
169
|
-
const server = new McpServer({ name: "sencre", version: "1.
|
|
201
|
+
const server = new McpServer({ name: "sencre", version: "1.4.0" });
|
|
170
202
|
|
|
171
203
|
server.tool(
|
|
172
204
|
"login",
|