@mokoconsulting/mokomysql-mcp 0.0.0-stage → 2.5.4
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/LICENSE +696 -0
- package/README.md +112 -3
- package/config.example.json +26 -0
- package/dist/README.md +7 -0
- package/dist/client.d.ts +49 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +180 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +86 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +758 -0
- package/dist/index.js.map +1 -0
- package/dist/secrets.d.ts +8 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +75 -0
- package/dist/secrets.js.map +1 -0
- package/dist/state.d.ts +13 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +59 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +73 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -4
- package/source/client.ts +210 -0
- package/source/config.ts +97 -0
- package/source/index.ts +1100 -0
- package/source/secrets.ts +70 -0
- package/source/state.ts +62 -0
- package/source/types.ts +91 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recursively resolve every "file:" secret reference in a parsed config object,
|
|
3
|
+
* in place. Lets secrets (tokens, passwords, API keys) live in files such as
|
|
4
|
+
* ~/.ssh/tokens/* instead of inline in the config JSON. Plain values are left
|
|
5
|
+
* untouched, so pre-existing inline configs remain valid.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveSecretRefs(obj: unknown): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../source/secrets.ts"],"names":[],"mappings":"AAgDA;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAenE"}
|
package/dist/secrets.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
2
|
+
*
|
|
3
|
+
* This file is part of a Moko Consulting project.
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
6
|
+
*
|
|
7
|
+
* FILE INFORMATION
|
|
8
|
+
* DEFGROUP: mokomysql-mcp.Secrets
|
|
9
|
+
* INGROUP: mokomysql-mcp
|
|
10
|
+
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokomysql-mcp
|
|
11
|
+
* PATH: /source/secrets.ts
|
|
12
|
+
* BRIEF: Resolve file-backed secret references in a parsed config object.
|
|
13
|
+
*/
|
|
14
|
+
import { readFile } from 'node:fs/promises';
|
|
15
|
+
import { homedir } from 'node:os';
|
|
16
|
+
import { resolve } from 'node:path';
|
|
17
|
+
/** Expand a leading "~" to the user's home directory, then resolve to absolute. */
|
|
18
|
+
function expandHome(p) {
|
|
19
|
+
if (p === '~')
|
|
20
|
+
return homedir();
|
|
21
|
+
if (p.startsWith('~/') || p.startsWith('~\\')) {
|
|
22
|
+
return resolve(homedir(), p.slice(2));
|
|
23
|
+
}
|
|
24
|
+
return resolve(p);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve a single config string.
|
|
28
|
+
* - "file:<path>" -> the trimmed contents of <path> (a leading "~" expands to $HOME).
|
|
29
|
+
* - anything else -> returned unchanged, so inline literals keep working.
|
|
30
|
+
*
|
|
31
|
+
* A missing/unreadable file throws (fail loud) — a secret must never silently
|
|
32
|
+
* degrade to the literal "file:..." string.
|
|
33
|
+
*/
|
|
34
|
+
async function resolveRef(value) {
|
|
35
|
+
const m = /^file:(.+)$/s.exec(value.trim());
|
|
36
|
+
if (!m)
|
|
37
|
+
return value;
|
|
38
|
+
const path = expandHome(m[1].trim());
|
|
39
|
+
try {
|
|
40
|
+
const raw = await readFile(path, 'utf-8');
|
|
41
|
+
return raw.replace(/\r?\n+$/, '');
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
45
|
+
throw new Error(`Failed to read secret file "${path}" (referenced as "${value}"): ${msg}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Recursively resolve every "file:" secret reference in a parsed config object,
|
|
50
|
+
* in place. Lets secrets (tokens, passwords, API keys) live in files such as
|
|
51
|
+
* ~/.ssh/tokens/* instead of inline in the config JSON. Plain values are left
|
|
52
|
+
* untouched, so pre-existing inline configs remain valid.
|
|
53
|
+
*/
|
|
54
|
+
export async function resolveSecretRefs(obj) {
|
|
55
|
+
if (Array.isArray(obj)) {
|
|
56
|
+
for (let i = 0; i < obj.length; i++) {
|
|
57
|
+
const v = obj[i];
|
|
58
|
+
if (typeof v === 'string')
|
|
59
|
+
obj[i] = await resolveRef(v);
|
|
60
|
+
else if (v && typeof v === 'object')
|
|
61
|
+
await resolveSecretRefs(v);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (obj && typeof obj === 'object') {
|
|
65
|
+
const rec = obj;
|
|
66
|
+
for (const k of Object.keys(rec)) {
|
|
67
|
+
const v = rec[k];
|
|
68
|
+
if (typeof v === 'string')
|
|
69
|
+
rec[k] = await resolveRef(v);
|
|
70
|
+
else if (v && typeof v === 'object')
|
|
71
|
+
await resolveSecretRefs(v);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../source/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,mFAAmF;AACnF,SAAS,UAAU,CAAC,CAAS;IAC5B,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,qBAAqB,KAAK,OAAO,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAY;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;iBACnD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,MAAM,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;iBACnD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,MAAM,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;AACF,CAAC"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { JoomlaMarker, MySqlState } from './types.js';
|
|
2
|
+
/** Stable key for a learned verdict: identifies the physical database target. */
|
|
3
|
+
export declare function markerKey(host: string, port: number, database: string): string;
|
|
4
|
+
/** Load the sidecar once into memory; a missing/corrupt file is an empty store. */
|
|
5
|
+
export declare function loadState(): Promise<MySqlState>;
|
|
6
|
+
export declare function getMarker(key: string): Promise<JoomlaMarker | undefined>;
|
|
7
|
+
/**
|
|
8
|
+
* Record a learned verdict and persist it. The write is best-effort: an unwritable
|
|
9
|
+
* sidecar (read-only home, permissions) must not break queries — the in-memory
|
|
10
|
+
* cache still carries the verdict for this process, we just can't remember it next time.
|
|
11
|
+
*/
|
|
12
|
+
export declare function setMarker(key: string, marker: JoomlaMarker): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../source/state.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM3D,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,mFAAmF;AACnF,wBAAsB,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAWrD;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAE9E;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhF"}
|
package/dist/state.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
2
|
+
*
|
|
3
|
+
* This file is part of a Moko Consulting project.
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
6
|
+
*
|
|
7
|
+
* FILE INFORMATION
|
|
8
|
+
* DEFGROUP: mokomysql.State
|
|
9
|
+
* INGROUP: mokomysql
|
|
10
|
+
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokomysql-mcp
|
|
11
|
+
* PATH: /source/state.ts
|
|
12
|
+
* BRIEF: Sidecar state store for learned Joomla markers (per host:port/database).
|
|
13
|
+
*/
|
|
14
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
15
|
+
import { getStatePath } from './config.js';
|
|
16
|
+
let cache = null;
|
|
17
|
+
/** Serializes write-through so concurrent setMarker calls can't clobber the file. */
|
|
18
|
+
let writeChain = Promise.resolve();
|
|
19
|
+
/** Stable key for a learned verdict: identifies the physical database target. */
|
|
20
|
+
export function markerKey(host, port, database) {
|
|
21
|
+
return `${host}:${port}/${database}`;
|
|
22
|
+
}
|
|
23
|
+
/** Load the sidecar once into memory; a missing/corrupt file is an empty store. */
|
|
24
|
+
export async function loadState() {
|
|
25
|
+
if (cache)
|
|
26
|
+
return cache;
|
|
27
|
+
try {
|
|
28
|
+
const parsed = JSON.parse(await readFile(getStatePath(), 'utf-8'));
|
|
29
|
+
cache = parsed && typeof parsed.markers === 'object' && parsed.markers !== null
|
|
30
|
+
? { markers: parsed.markers }
|
|
31
|
+
: { markers: {} };
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
cache = { markers: {} };
|
|
35
|
+
}
|
|
36
|
+
return cache;
|
|
37
|
+
}
|
|
38
|
+
export async function getMarker(key) {
|
|
39
|
+
return (await loadState()).markers[key];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Record a learned verdict and persist it. The write is best-effort: an unwritable
|
|
43
|
+
* sidecar (read-only home, permissions) must not break queries — the in-memory
|
|
44
|
+
* cache still carries the verdict for this process, we just can't remember it next time.
|
|
45
|
+
*/
|
|
46
|
+
export async function setMarker(key, marker) {
|
|
47
|
+
const state = await loadState();
|
|
48
|
+
state.markers[key] = marker;
|
|
49
|
+
writeChain = writeChain.then(async () => {
|
|
50
|
+
try {
|
|
51
|
+
await writeFile(getStatePath(), JSON.stringify(state, null, '\t') + '\n', 'utf-8');
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
process.stderr.write(`mokomysql: could not write state file ${getStatePath()}: ${e}\n`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
await writeChain;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../source/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,IAAI,KAAK,GAAsB,IAAI,CAAC;AACpC,qFAAqF;AACrF,IAAI,UAAU,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAElD,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,QAAgB;IACrE,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,SAAS;IAC9B,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAwB,CAAC;QAC1F,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;YAC9E,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YAC7B,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACR,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IAC1C,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,MAAoB;IAChE,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAC5B,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC;IACF,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,CAAC;AAClB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface MySqlSslConfig {
|
|
2
|
+
/** Verify the server certificate against a CA. Defaults to true. */
|
|
3
|
+
rejectUnauthorized?: boolean;
|
|
4
|
+
/** PEM CA certificate(s) to trust. */
|
|
5
|
+
ca?: string;
|
|
6
|
+
/** PEM client certificate. */
|
|
7
|
+
cert?: string;
|
|
8
|
+
/** PEM client private key. */
|
|
9
|
+
key?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface MySqlConnection {
|
|
12
|
+
host: string;
|
|
13
|
+
port?: number;
|
|
14
|
+
user: string;
|
|
15
|
+
password: string;
|
|
16
|
+
database?: string;
|
|
17
|
+
/**
|
|
18
|
+
* TLS for the connection. `true` enables TLS with certificate verification
|
|
19
|
+
* (secure default). Pass an object to customize — e.g. `{ ca: '...' }` for a
|
|
20
|
+
* private CA, or `{ rejectUnauthorized: false }` to explicitly opt out of
|
|
21
|
+
* verification (insecure; only for trusted internal hosts with self-signed
|
|
22
|
+
* certs). A bare `true` is never silently downgraded.
|
|
23
|
+
*/
|
|
24
|
+
ssl?: boolean | MySqlSslConfig;
|
|
25
|
+
timezone?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Extra keyword shortcuts that resolve to this connection.
|
|
28
|
+
* Matched case-insensitively with all punctuation stripped, so
|
|
29
|
+
* "moko.live", "moko-live", "Moko Live" and "mokolive" are equivalent.
|
|
30
|
+
*/
|
|
31
|
+
tags?: string[];
|
|
32
|
+
/**
|
|
33
|
+
* Marks this connection as pointing at a Joomla database. Writes to a Joomla DB
|
|
34
|
+
* require the two-step `confirm_token` handshake (first call returns a token and
|
|
35
|
+
* does not execute; the same call repeated with the token runs it) on top of the
|
|
36
|
+
* usual `confirm: true` — reads stay unrestricted. Leave unset to auto-detect from
|
|
37
|
+
* the schema signature (presence of `<prefix>extensions` + `<prefix>assets`);
|
|
38
|
+
* set `true` to force the gate on, or `false` to force it off and skip detection.
|
|
39
|
+
*/
|
|
40
|
+
joomla?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Joomla table prefix for this connection (e.g. "jos_", "vkw4n_"). Only used when
|
|
43
|
+
* `joomla: true` is set explicitly — it lets the nested-set guard recognize
|
|
44
|
+
* `#__assets`/`#__categories`/`#__menu` without a schema probe. When omitted, the
|
|
45
|
+
* prefix is derived from the detected signature tables.
|
|
46
|
+
*/
|
|
47
|
+
joomlaPrefix?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface MySqlConfig {
|
|
50
|
+
connections: Record<string, MySqlConnection>;
|
|
51
|
+
defaultConnection: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A learned Joomla verdict for one `host:port/database` target, persisted to the
|
|
55
|
+
* sidecar state file so the server knows the target is Joomla on future connects
|
|
56
|
+
* without re-probing the schema.
|
|
57
|
+
*/
|
|
58
|
+
export interface JoomlaMarker {
|
|
59
|
+
joomla: boolean;
|
|
60
|
+
/** Live table prefix (e.g. "jos_", "vkw4n_") when known. */
|
|
61
|
+
prefix: string | null;
|
|
62
|
+
/** ISO timestamp of when the verdict was learned. */
|
|
63
|
+
detectedAt: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Sidecar state the MCP manages itself (distinct from the user-authored config).
|
|
67
|
+
* Lives next to the config as `<config>.state.json`. Pure cache: delete it and
|
|
68
|
+
* the server re-detects; an explicit per-connection `joomla` flag overrides it.
|
|
69
|
+
*/
|
|
70
|
+
export interface MySqlState {
|
|
71
|
+
markers: Record<string, JoomlaMarker>;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../source/types.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC9B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sCAAsC;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
2
|
+
*
|
|
3
|
+
* This file is part of a Moko Consulting project.
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
6
|
+
*
|
|
7
|
+
* FILE INFORMATION
|
|
8
|
+
* DEFGROUP: mokomysql.Types
|
|
9
|
+
* INGROUP: mokomysql
|
|
10
|
+
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokomysql-mcp
|
|
11
|
+
* PATH: /src/types.ts
|
|
12
|
+
* VERSION: 01.00.00
|
|
13
|
+
* BRIEF: TypeScript type definitions for MySQL MCP server
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../source/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mokoconsulting/mokomysql-mcp",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "2.5.4",
|
|
4
|
+
"description": "MCP server for MySQL database management — queries, schema, users, maintenance, and Joomla helpers",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mokomysql-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"source",
|
|
13
|
+
"tsconfig.json",
|
|
14
|
+
"config.example.json",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"dev": "tsc --watch",
|
|
21
|
+
"start": "node dist/index.js",
|
|
22
|
+
"clean": "rm -rf dist/"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
26
|
+
"mysql2": "^3.11.0",
|
|
27
|
+
"zod": "^3.24.4"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^22.15.3",
|
|
31
|
+
"typescript": "^5.8.3"
|
|
32
|
+
},
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=20.0.0"
|
|
35
|
+
},
|
|
36
|
+
"license": "GPL-3.0-or-later",
|
|
37
|
+
"author": "Moko Consulting <hello@mokoconsulting.tech>",
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://git.mokoconsulting.tech/MokoConsulting/mokomysql-mcp.git"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/source/client.ts
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
2
|
+
*
|
|
3
|
+
* This file is part of a Moko Consulting project.
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
6
|
+
*
|
|
7
|
+
* FILE INFORMATION
|
|
8
|
+
* DEFGROUP: mokomysql.Client
|
|
9
|
+
* INGROUP: mokomysql
|
|
10
|
+
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokomysql-mcp
|
|
11
|
+
* PATH: /src/client.ts
|
|
12
|
+
* VERSION: 01.00.00
|
|
13
|
+
* BRIEF: MySQL client with connection pool management
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import mysql from 'mysql2/promise';
|
|
17
|
+
import type { Pool, PoolOptions, FieldPacket, ResultSetHeader } from 'mysql2/promise';
|
|
18
|
+
import { getConnection } from './config.js';
|
|
19
|
+
import { getMarker, markerKey, setMarker } from './state.js';
|
|
20
|
+
import type { MySqlConfig, MySqlConnection } from './types.js';
|
|
21
|
+
|
|
22
|
+
/** Result of probing a (connection, database) pair for Joomla-ness. */
|
|
23
|
+
export interface JoomlaDetection {
|
|
24
|
+
/** Whether this target is treated as a Joomla database. */
|
|
25
|
+
isJoomla: boolean;
|
|
26
|
+
/** The live table prefix (e.g. "jos_", "vkw4n_"), when known. */
|
|
27
|
+
prefix: string | null;
|
|
28
|
+
/** How the verdict was reached — for surfacing in warnings. */
|
|
29
|
+
source: 'config' | 'marker' | 'auto' | 'none';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class MysqlClient {
|
|
33
|
+
private pools: Map<string, Pool> = new Map();
|
|
34
|
+
private config: MySqlConfig;
|
|
35
|
+
/** Memoized Joomla verdicts, keyed by `${connectionKey}::${schema}`. */
|
|
36
|
+
private joomlaCache: Map<string, JoomlaDetection> = new Map();
|
|
37
|
+
|
|
38
|
+
constructor(config: MySqlConfig) {
|
|
39
|
+
this.config = config;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the canonical identity of a target for binding/keying: the config
|
|
44
|
+
* connection key and the effective schema (explicit database or the connection
|
|
45
|
+
* default). Keeps callers consistent with how detection and markers are keyed.
|
|
46
|
+
*/
|
|
47
|
+
resolveIdentity(connectionName?: string, database?: string): { connKey: string; schema: string } {
|
|
48
|
+
const { key, conn } = getConnection(this.config, connectionName);
|
|
49
|
+
return { connKey: key, schema: database ?? conn.database ?? '' };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Determine whether a target is a Joomla database, so writes can be gated.
|
|
54
|
+
* Resolution order: in-memory cache → explicit per-connection `joomla` flag
|
|
55
|
+
* (authoritative) → persisted sidecar marker (learned on a prior connect) →
|
|
56
|
+
* live schema probe for the Joomla signature (`<prefix>extensions` paired with
|
|
57
|
+
* `<prefix>assets`). A fresh probe result is persisted as a marker so future
|
|
58
|
+
* connects skip the round-trip entirely.
|
|
59
|
+
*/
|
|
60
|
+
async detectJoomla(connectionName?: string, database?: string): Promise<JoomlaDetection> {
|
|
61
|
+
const { key, conn } = getConnection(this.config, connectionName);
|
|
62
|
+
const schema = database ?? conn.database ?? '';
|
|
63
|
+
const cacheKey = `${key}::${schema}`;
|
|
64
|
+
const cached = this.joomlaCache.get(cacheKey);
|
|
65
|
+
if (cached) return cached;
|
|
66
|
+
|
|
67
|
+
// Explicit config flag is authoritative — no probe, and it overrides any marker.
|
|
68
|
+
if (conn.joomla === true) {
|
|
69
|
+
return this.cache(cacheKey, { isJoomla: true, prefix: conn.joomlaPrefix ?? null, source: 'config' });
|
|
70
|
+
}
|
|
71
|
+
if (conn.joomla === false) {
|
|
72
|
+
return this.cache(cacheKey, { isJoomla: false, prefix: null, source: 'config' });
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Without a resolvable target schema we cannot probe or key a marker.
|
|
76
|
+
if (!schema) {
|
|
77
|
+
return this.cache(cacheKey, { isJoomla: false, prefix: null, source: 'none' });
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Learned marker from a previous connect — instant, no round-trip.
|
|
81
|
+
const mKey = markerKey(conn.host, conn.port ?? 3306, schema);
|
|
82
|
+
const marker = await getMarker(mKey);
|
|
83
|
+
if (marker) {
|
|
84
|
+
return this.cache(cacheKey, { isJoomla: marker.joomla, prefix: marker.prefix, source: 'marker' });
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
const { rows } = await this.query(
|
|
89
|
+
"SELECT TABLE_NAME AS name FROM information_schema.TABLES " +
|
|
90
|
+
"WHERE TABLE_SCHEMA = ? AND TABLE_NAME REGEXP '(extensions|assets)$'",
|
|
91
|
+
[schema], connectionName,
|
|
92
|
+
);
|
|
93
|
+
const names = new Set(rows.map((r) => String((r as Record<string, unknown>).name)));
|
|
94
|
+
let prefix: string | null = null;
|
|
95
|
+
for (const name of names) {
|
|
96
|
+
if (!name.endsWith('extensions')) continue;
|
|
97
|
+
const candidate = name.slice(0, -'extensions'.length);
|
|
98
|
+
if (names.has(`${candidate}assets`)) { prefix = candidate; break; }
|
|
99
|
+
}
|
|
100
|
+
const verdict: JoomlaDetection = prefix !== null
|
|
101
|
+
? { isJoomla: true, prefix, source: 'auto' }
|
|
102
|
+
: { isJoomla: false, prefix: null, source: 'auto' };
|
|
103
|
+
// Persist what we learned so the next connect just knows.
|
|
104
|
+
await setMarker(mKey, { joomla: verdict.isJoomla, prefix: verdict.prefix, detectedAt: new Date().toISOString() });
|
|
105
|
+
return this.cache(cacheKey, verdict);
|
|
106
|
+
} catch {
|
|
107
|
+
// Probe failed (permissions, missing schema). Degrade to "none" and do
|
|
108
|
+
// not cache or persist, so a later successful probe can still classify it.
|
|
109
|
+
return { isJoomla: false, prefix: null, source: 'none' };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private cache(cacheKey: string, verdict: JoomlaDetection): JoomlaDetection {
|
|
114
|
+
this.joomlaCache.set(cacheKey, verdict);
|
|
115
|
+
return verdict;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private poolFor(connectionName?: string): Pool {
|
|
119
|
+
const { key, conn } = getConnection(this.config, connectionName);
|
|
120
|
+
let pool = this.pools.get(key);
|
|
121
|
+
if (!pool) {
|
|
122
|
+
const opts: PoolOptions = {
|
|
123
|
+
host: conn.host,
|
|
124
|
+
port: conn.port ?? 3306,
|
|
125
|
+
user: conn.user,
|
|
126
|
+
password: conn.password,
|
|
127
|
+
database: conn.database,
|
|
128
|
+
connectionLimit: 5,
|
|
129
|
+
waitForConnections: true,
|
|
130
|
+
timezone: conn.timezone ?? 'Z',
|
|
131
|
+
multipleStatements: false,
|
|
132
|
+
};
|
|
133
|
+
if (conn.ssl) {
|
|
134
|
+
// Default to verified TLS. A bare `ssl: true` is never silently
|
|
135
|
+
// downgraded — callers who must skip verification (trusted internal
|
|
136
|
+
// hosts with self-signed certs) opt out explicitly via
|
|
137
|
+
// `ssl: { rejectUnauthorized: false }` in their config.
|
|
138
|
+
opts.ssl = typeof conn.ssl === 'object'
|
|
139
|
+
? conn.ssl
|
|
140
|
+
: { rejectUnauthorized: true };
|
|
141
|
+
}
|
|
142
|
+
pool = mysql.createPool(opts);
|
|
143
|
+
this.pools.set(key, pool);
|
|
144
|
+
// On first connect, learn (and persist) the Joomla verdict for the
|
|
145
|
+
// connection's default database so the write-gate knows immediately.
|
|
146
|
+
// Best-effort and non-blocking — never let it break pool creation.
|
|
147
|
+
if (conn.database) {
|
|
148
|
+
void this.detectJoomla(connectionName, conn.database).catch(() => undefined);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return pool;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
async query(
|
|
155
|
+
sql: string,
|
|
156
|
+
params?: unknown[],
|
|
157
|
+
connectionName?: string,
|
|
158
|
+
database?: string,
|
|
159
|
+
): Promise<{ rows: Record<string, unknown>[]; fields: FieldPacket[] }> {
|
|
160
|
+
const pool = this.poolFor(connectionName);
|
|
161
|
+
const p = (params ?? []) as (string | number | null)[];
|
|
162
|
+
if (database) {
|
|
163
|
+
const conn = await pool.getConnection();
|
|
164
|
+
try {
|
|
165
|
+
await conn.query(`USE \`${database.replace(/`/g, '``')}\``);
|
|
166
|
+
const [rows, fields] = await conn.query(sql, p);
|
|
167
|
+
return { rows: rows as Record<string, unknown>[], fields };
|
|
168
|
+
} finally {
|
|
169
|
+
conn.release();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const [rows, fields] = await pool.query(sql, p);
|
|
173
|
+
return { rows: rows as Record<string, unknown>[], fields };
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
async execute(
|
|
177
|
+
sql: string,
|
|
178
|
+
params?: unknown[],
|
|
179
|
+
connectionName?: string,
|
|
180
|
+
database?: string,
|
|
181
|
+
): Promise<{ affectedRows: number; insertId: number; changedRows: number }> {
|
|
182
|
+
const pool = this.poolFor(connectionName);
|
|
183
|
+
const p = (params ?? []) as (string | number | null)[];
|
|
184
|
+
if (database) {
|
|
185
|
+
const conn = await pool.getConnection();
|
|
186
|
+
try {
|
|
187
|
+
await conn.query(`USE \`${database.replace(/`/g, '``')}\``);
|
|
188
|
+
const [result] = await conn.execute(sql, p);
|
|
189
|
+
const r = result as ResultSetHeader;
|
|
190
|
+
return { affectedRows: r.affectedRows ?? 0, insertId: r.insertId ?? 0, changedRows: r.changedRows ?? 0 };
|
|
191
|
+
} finally {
|
|
192
|
+
conn.release();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const [result] = await pool.execute(sql, p);
|
|
196
|
+
const r = result as ResultSetHeader;
|
|
197
|
+
return {
|
|
198
|
+
affectedRows: r.affectedRows ?? 0,
|
|
199
|
+
insertId: r.insertId ?? 0,
|
|
200
|
+
changedRows: r.changedRows ?? 0,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async closeAll(): Promise<void> {
|
|
205
|
+
for (const [, pool] of this.pools) {
|
|
206
|
+
await pool.end();
|
|
207
|
+
}
|
|
208
|
+
this.pools.clear();
|
|
209
|
+
}
|
|
210
|
+
}
|