basedoc-dameng-mcp 0.1.0 → 0.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 CHANGED
@@ -31,14 +31,24 @@ npm install
31
31
  npm run build
32
32
  ```
33
33
 
34
+ ## Modes
35
+
36
+ The server supports two run modes, picked automatically from env vars:
37
+
38
+ - **DB + docs mode** (set both DB credentials and `DAMENG_DOCS_ROOT`): all 8 tools registered.
39
+ - **Docs-only mode** (set only `DAMENG_DOCS_ROOT`, no DB credentials): just the 4 docs tools — useful when you want to ship Dameng manuals to an LLM without exposing the database.
40
+ - (DB-only mode also works if you set DB creds without `DAMENG_DOCS_ROOT`.)
41
+
42
+ Server fails fast (exit 2) if neither set is provided.
43
+
34
44
  ## Configuration (env vars)
35
45
 
36
46
  | Variable | Required | Default | Notes |
37
47
  |---|---|---|---|
38
- | `DAMENG_HOST` | yes | — | e.g. `dameng.example.com` |
39
- | `DAMENG_PORT` | yes | — | e.g. `5236` |
40
- | `DAMENG_USER` | yes | — | low-privilege account |
41
- | `DAMENG_PASSWORD` | yes | — | no fallback |
48
+ | `DAMENG_HOST` | for DB | — | e.g. `dameng.example.com` |
49
+ | `DAMENG_PORT` | for DB | — | e.g. `5236` |
50
+ | `DAMENG_USER` | for DB | — | low-privilege account |
51
+ | `DAMENG_PASSWORD` | for DB | — | no fallback |
42
52
  | `DAMENG_SCHEMA` | no | — | default schema for `list_tables` / `describe_table` |
43
53
  | `DAMENG_QUERY_TIMEOUT_MS` | no | `10000` | per-query timeout |
44
54
  | `DAMENG_MAX_ROWS` | no | `1000` | hard cap on returned rows |
@@ -47,6 +57,7 @@ npm run build
47
57
  | `DAMENG_DOCS_ROOT` | no | — | absolute path to a directory of Markdown manuals. Enables the docs tools. |
48
58
  | `DAMENG_DOCS_INCLUDE` | no | — | comma-separated top-level dir patterns to include (glob `*` supported). Recommended: `DM8-*` to scope to official manuals only. |
49
59
  | `DAMENG_DOCS_EXCLUDE` | no | — | comma-separated top-level dir patterns to exclude. `node_modules` is always excluded. |
60
+ | `DAMENG_NO_LEGACY_OPENSSL` | no | unset | Set to `1` to skip the auto-relaunch with `--openssl-legacy-provider` (only useful if your dmdb build doesn't need it). |
50
61
 
51
62
  ## Tools
52
63
 
@@ -108,6 +119,10 @@ Tests cover the SQL guard (rejection rules, comment stripping, multi-statement d
108
119
  - No HTTP transport. stdio only — no inbound network surface.
109
120
  - No automatic schema introspection on startup. Tools query system views on demand.
110
121
 
122
+ ## Why does the binary self-relaunch?
123
+
124
+ `dmdb`'s login handshake uses encryption algorithms OpenSSL 3 disabled by default in Node 17+. Without `--openssl-legacy-provider` you get `[6071] 消息加密失败` / `error:0308010C`. Rather than asking every user to set `NODE_OPTIONS=--openssl-legacy-provider`, the bin re-execs itself with the flag on first start. Cost is one extra ~50 ms Node startup. Opt out with `DAMENG_NO_LEGACY_OPENSSL=1`.
125
+
111
126
  ## Known transitive vulnerabilities
112
127
 
113
128
  `npm audit` flags issues in `@modelcontextprotocol/sdk`'s HTTP transport chain (`express-rate-limit` → `ip-address`) and in the dev-only Vitest/Vite chain. The stdio server we ship doesn't load the HTTP transport, and Vitest isn't part of the runtime. These will clear when upstream bumps; we don't paper over them with `npm audit fix --force`.
package/dist/config.js CHANGED
@@ -4,14 +4,23 @@ export class ConfigError extends Error {
4
4
  this.name = "ConfigError";
5
5
  }
6
6
  }
7
- const REQUIRED = ["DAMENG_HOST", "DAMENG_PORT", "DAMENG_USER", "DAMENG_PASSWORD"];
8
7
  export function loadConfig(env) {
9
- for (const key of REQUIRED) {
10
- if (!env[key] || env[key].length === 0) {
11
- throw new ConfigError(`Missing required env var: ${key}`);
8
+ // Parse docs config first (always optional, but useful independently)
9
+ let docsRoot;
10
+ if (env.DAMENG_DOCS_ROOT) {
11
+ if (!env.DAMENG_DOCS_ROOT.startsWith("/")) {
12
+ throw new ConfigError(`DAMENG_DOCS_ROOT must be an absolute path, got "${env.DAMENG_DOCS_ROOT}"`);
12
13
  }
14
+ docsRoot = env.DAMENG_DOCS_ROOT.replace(/\/+$/, "");
15
+ }
16
+ const docsInclude = parsePatternList(env.DAMENG_DOCS_INCLUDE);
17
+ const docsExclude = parsePatternList(env.DAMENG_DOCS_EXCLUDE);
18
+ // Check if DB credentials are provided
19
+ const DB_KEYS = ["DAMENG_HOST", "DAMENG_PORT", "DAMENG_USER", "DAMENG_PASSWORD"];
20
+ const hasDbConfig = DB_KEYS.every((k) => env[k] && env[k].length > 0);
21
+ if (!hasDbConfig && !docsRoot) {
22
+ throw new ConfigError("Either DB credentials (DAMENG_HOST/PORT/USER/PASSWORD) or DAMENG_DOCS_ROOT must be set.");
13
23
  }
14
- const port = parsePositiveInt(env.DAMENG_PORT, "DAMENG_PORT");
15
24
  const queryTimeoutMs = env.DAMENG_QUERY_TIMEOUT_MS
16
25
  ? parsePositiveInt(env.DAMENG_QUERY_TIMEOUT_MS, "DAMENG_QUERY_TIMEOUT_MS")
17
26
  : 10_000;
@@ -24,20 +33,11 @@ export function loadConfig(env) {
24
33
  const poolMax = env.DAMENG_POOL_MAX
25
34
  ? parsePositiveInt(env.DAMENG_POOL_MAX, "DAMENG_POOL_MAX")
26
35
  : 4;
27
- let docsRoot;
28
- if (env.DAMENG_DOCS_ROOT) {
29
- if (!env.DAMENG_DOCS_ROOT.startsWith("/")) {
30
- throw new ConfigError(`DAMENG_DOCS_ROOT must be an absolute path, got "${env.DAMENG_DOCS_ROOT}"`);
31
- }
32
- docsRoot = env.DAMENG_DOCS_ROOT.replace(/\/+$/, "");
33
- }
34
- const docsInclude = parsePatternList(env.DAMENG_DOCS_INCLUDE);
35
- const docsExclude = parsePatternList(env.DAMENG_DOCS_EXCLUDE);
36
36
  return {
37
- host: env.DAMENG_HOST,
38
- port,
39
- user: env.DAMENG_USER,
40
- password: env.DAMENG_PASSWORD,
37
+ host: env.DAMENG_HOST ?? "",
38
+ port: hasDbConfig ? parsePositiveInt(env.DAMENG_PORT, "DAMENG_PORT") : 0,
39
+ user: env.DAMENG_USER ?? "",
40
+ password: env.DAMENG_PASSWORD ?? "",
41
41
  schema: env.DAMENG_SCHEMA,
42
42
  queryTimeoutMs,
43
43
  maxRows,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -1,4 +1,20 @@
1
1
  #!/usr/bin/env node
2
+ // Self-relaunch with --openssl-legacy-provider so dmdb's login handshake works
3
+ // on Node >= 17 (OpenSSL 3 disabled the algos dmdb relies on by default).
4
+ // Set DAMENG_NO_LEGACY_OPENSSL=1 to skip this, or invoke node directly with
5
+ // the flag already set.
6
+ import { spawnSync } from "node:child_process";
7
+ import { fileURLToPath } from "node:url";
8
+ const haveLegacyFlag = process.execArgv.some((a) => a.includes("openssl-legacy-provider")) ||
9
+ (process.env.NODE_OPTIONS ?? "").includes("openssl-legacy-provider");
10
+ if (!haveLegacyFlag && !process.env.DAMENG_NO_LEGACY_OPENSSL) {
11
+ const r = spawnSync(process.execPath, [
12
+ "--openssl-legacy-provider",
13
+ fileURLToPath(import.meta.url),
14
+ ...process.argv.slice(2),
15
+ ], { stdio: "inherit" });
16
+ process.exit(r.status ?? 1);
17
+ }
2
18
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
19
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
20
  import { z } from "zod";
@@ -51,197 +67,207 @@ async function main() {
51
67
  }
52
68
  throw e;
53
69
  }
54
- const db = new Database(config);
55
- await db.connect();
70
+ const hasDb = config.host.length > 0 && config.port > 0;
71
+ const db = hasDb ? new Database(config) : null;
72
+ if (db) {
73
+ await db.connect();
74
+ }
75
+ else {
76
+ console.error("[dameng-mcp] no DB credentials — docs-only mode");
77
+ }
56
78
  const server = new McpServer({
57
79
  name: "dameng-mcp",
58
80
  version: "0.1.0",
59
81
  });
60
- server.registerTool("query", {
61
- description: "Execute a read-only SQL statement against Dameng. Only SELECT/WITH/EXPLAIN are accepted; multi-statement input is rejected. Results are capped by DAMENG_MAX_ROWS.",
62
- inputSchema: {
63
- sql: z.string().describe("Single SELECT, WITH, or EXPLAIN statement."),
64
- },
65
- annotations: { readOnlyHint: true, destructiveHint: false },
66
- }, async ({ sql }) => {
67
- try {
68
- const result = await db.runReadOnly(sql);
69
- return toolText(formatResult(result));
70
- }
71
- catch (e) {
72
- return toolError(formatToolError(e));
73
- }
74
- });
75
- server.registerTool("list_tables", {
76
- description: "List tables in a schema. Defaults to DAMENG_SCHEMA (or the connected user's schema if unset).",
77
- inputSchema: {
78
- schema: z
79
- .string()
80
- .optional()
81
- .describe("Schema/owner name. Identifier characters only."),
82
- },
83
- annotations: { readOnlyHint: true, destructiveHint: false },
84
- }, async ({ schema }) => {
85
- try {
86
- const owner = schema ?? config.schema;
87
- const sql = owner
88
- ? `SELECT OWNER, TABLE_NAME FROM ALL_TABLES WHERE OWNER = '${quoteIdent(owner).slice(1, -1)}' ORDER BY TABLE_NAME`
89
- : `SELECT TABLE_NAME FROM USER_TABLES ORDER BY TABLE_NAME`;
90
- const result = await db.runRaw(sql);
91
- return toolText(formatResult(result));
92
- }
93
- catch (e) {
94
- return toolError(formatToolError(e));
95
- }
96
- });
97
- server.registerTool("describe_table", {
98
- description: "Show columns and data types for a table.",
99
- inputSchema: {
100
- table: z.string().describe("Table name."),
101
- schema: z.string().optional().describe("Schema/owner name (optional)."),
102
- },
103
- annotations: { readOnlyHint: true, destructiveHint: false },
104
- }, async ({ table, schema }) => {
105
- try {
106
- const tableQ = quoteIdent(table).slice(1, -1);
107
- const owner = schema ?? config.schema;
108
- const sql = owner
109
- ? `SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT
82
+ // --- DB tools (only when connected) ---
83
+ if (db) {
84
+ server.registerTool("query", {
85
+ description: "Execute a read-only SQL statement against Dameng. Only SELECT/WITH/EXPLAIN are accepted; multi-statement input is rejected. Results are capped by DAMENG_MAX_ROWS.",
86
+ inputSchema: {
87
+ sql: z.string().describe("Single SELECT, WITH, or EXPLAIN statement."),
88
+ },
89
+ annotations: { readOnlyHint: true, destructiveHint: false },
90
+ }, async ({ sql }) => {
91
+ try {
92
+ const result = await db.runReadOnly(sql);
93
+ return toolText(formatResult(result));
94
+ }
95
+ catch (e) {
96
+ return toolError(formatToolError(e));
97
+ }
98
+ });
99
+ server.registerTool("list_tables", {
100
+ description: "List tables in a schema. Defaults to DAMENG_SCHEMA (or the connected user's schema if unset).",
101
+ inputSchema: {
102
+ schema: z
103
+ .string()
104
+ .optional()
105
+ .describe("Schema/owner name. Identifier characters only."),
106
+ },
107
+ annotations: { readOnlyHint: true, destructiveHint: false },
108
+ }, async ({ schema }) => {
109
+ try {
110
+ const owner = schema ?? config.schema;
111
+ const sql = owner
112
+ ? `SELECT OWNER, TABLE_NAME FROM ALL_TABLES WHERE OWNER = '${quoteIdent(owner).slice(1, -1)}' ORDER BY TABLE_NAME`
113
+ : `SELECT TABLE_NAME FROM USER_TABLES ORDER BY TABLE_NAME`;
114
+ const result = await db.runRaw(sql);
115
+ return toolText(formatResult(result));
116
+ }
117
+ catch (e) {
118
+ return toolError(formatToolError(e));
119
+ }
120
+ });
121
+ server.registerTool("describe_table", {
122
+ description: "Show columns and data types for a table.",
123
+ inputSchema: {
124
+ table: z.string().describe("Table name."),
125
+ schema: z.string().optional().describe("Schema/owner name (optional)."),
126
+ },
127
+ annotations: { readOnlyHint: true, destructiveHint: false },
128
+ }, async ({ table, schema }) => {
129
+ try {
130
+ const tableQ = quoteIdent(table).slice(1, -1);
131
+ const owner = schema ?? config.schema;
132
+ const sql = owner
133
+ ? `SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT
110
134
  FROM ALL_TAB_COLUMNS
111
135
  WHERE OWNER = '${quoteIdent(owner).slice(1, -1)}' AND TABLE_NAME = '${tableQ}'
112
136
  ORDER BY COLUMN_ID`
113
- : `SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT
137
+ : `SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT
114
138
  FROM USER_TAB_COLUMNS
115
139
  WHERE TABLE_NAME = '${tableQ}'
116
140
  ORDER BY COLUMN_ID`;
117
- const result = await db.runRaw(sql);
118
- return toolText(formatResult(result));
119
- }
120
- catch (e) {
121
- return toolError(formatToolError(e));
122
- }
123
- });
124
- server.registerTool("lookup_docs", {
125
- description: "Search the local Dameng knowledge base (Markdown manuals) for a phrase or pattern. Returns matches grouped by file with the nearest preceding heading. Requires DAMENG_DOCS_ROOT to be set.",
126
- inputSchema: {
127
- query: z.string().describe("Phrase to search for (literal, case-insensitive by default)."),
128
- manual: z
129
- .string()
130
- .optional()
131
- .describe("Optional top-level subdirectory under DAMENG_DOCS_ROOT to restrict the search (e.g. DM8-SQL语言使用手册)."),
132
- regex: z
133
- .boolean()
134
- .optional()
135
- .describe("Treat query as a JavaScript regex (case-insensitive). Default false."),
136
- maxMatches: z
137
- .number()
138
- .int()
139
- .positive()
140
- .optional()
141
- .describe("Cap on returned matches. Default 30."),
142
- },
143
- annotations: { readOnlyHint: true, destructiveHint: false },
144
- }, async ({ query, manual, regex, maxMatches }) => {
145
- if (!config.docsRoot)
146
- return docsRootMissingError();
147
- try {
148
- const sections = await searchDocs({
149
- root: config.docsRoot,
150
- query,
151
- manual,
152
- regex,
153
- maxMatches,
154
- include: config.docsInclude,
155
- exclude: config.docsExclude,
156
- });
157
- return toolText(formatSections(sections, maxMatches ?? 30));
158
- }
159
- catch (e) {
160
- return toolError(formatToolError(e));
161
- }
162
- });
163
- server.registerTool("list_manuals", {
164
- description: "List the Dameng manuals available under DAMENG_DOCS_ROOT, with file counts and a short index summary per manual. Use this to discover what to pass to list_sections / lookup_docs(manual=...).",
165
- inputSchema: {},
166
- annotations: { readOnlyHint: true, destructiveHint: false },
167
- }, async () => {
168
- if (!config.docsRoot)
169
- return docsRootMissingError();
170
- try {
171
- const manuals = await listManuals({
172
- root: config.docsRoot,
173
- include: config.docsInclude,
174
- exclude: config.docsExclude,
175
- });
176
- return toolText(formatManuals(manuals));
177
- }
178
- catch (e) {
179
- return toolError(formatToolError(e));
180
- }
181
- });
182
- server.registerTool("list_sections", {
183
- description: "List the .md files (chapters) inside one manual along with their H1/H2 headings. Use the (file, heading) pair to call read_section.",
184
- inputSchema: {
185
- manual: z.string().describe("Manual name (top-level dir under DAMENG_DOCS_ROOT)."),
186
- },
187
- annotations: { readOnlyHint: true, destructiveHint: false },
188
- }, async ({ manual }) => {
189
- if (!config.docsRoot)
190
- return docsRootMissingError();
191
- try {
192
- const files = await listSections({ root: config.docsRoot, manual });
193
- return toolText(formatSectionList(files));
194
- }
195
- catch (e) {
196
- return toolError(formatToolError(e));
197
- }
198
- });
199
- server.registerTool("read_section", {
200
- description: "Read a Markdown chapter under DAMENG_DOCS_ROOT. With heading omitted, returns the whole file. With heading set, returns text from that heading until the next same-or-higher heading. Use after lookup_docs / list_sections to pull full context.",
201
- inputSchema: {
202
- file: z
203
- .string()
204
- .describe("Relative path under DAMENG_DOCS_ROOT, e.g. DM8-数据守护与读写分离集群/data-watch-version-upgrade.md"),
205
- heading: z
206
- .string()
207
- .optional()
208
- .describe("Heading text (without # markers) to extract a single section."),
209
- maxBytes: z
210
- .number()
211
- .int()
212
- .positive()
213
- .optional()
214
- .describe("Cap on returned content size. Default 64000."),
215
- },
216
- annotations: { readOnlyHint: true, destructiveHint: false },
217
- }, async ({ file, heading, maxBytes }) => {
218
- if (!config.docsRoot)
219
- return docsRootMissingError();
220
- try {
221
- const r = await readSection({ root: config.docsRoot, file, heading, maxBytes });
222
- const header = r.heading
223
- ? `# ${r.file} — ${r.heading}${r.truncated ? " (truncated)" : ""}\n\n`
224
- : `# ${r.file}${r.truncated ? " (truncated)" : ""}\n\n`;
225
- return toolText(header + r.content);
226
- }
227
- catch (e) {
228
- return toolError(formatToolError(e));
229
- }
230
- });
231
- server.registerTool("instance_status", {
232
- description: "Report Dameng instance and database status from V$INSTANCE / V$DATABASE.",
233
- inputSchema: {},
234
- annotations: { readOnlyHint: true, destructiveHint: false },
235
- }, async () => {
236
- try {
237
- const inst = await db.runRaw(`SELECT NAME, INSTANCE_NAME, HOST_NAME, SVR_VERSION, STATUS$, MODE$, START_TIME FROM V$INSTANCE`);
238
- const dbi = await db.runRaw(`SELECT NAME, STATUS$, ARCH_MODE, DSC_ROLE FROM V$DATABASE`);
239
- return toolText(`# V$INSTANCE\n${formatResult(inst)}\n\n# V$DATABASE\n${formatResult(dbi)}`);
240
- }
241
- catch (e) {
242
- return toolError(formatToolError(e));
243
- }
244
- });
141
+ const result = await db.runRaw(sql);
142
+ return toolText(formatResult(result));
143
+ }
144
+ catch (e) {
145
+ return toolError(formatToolError(e));
146
+ }
147
+ });
148
+ server.registerTool("lookup_docs", {
149
+ description: "Search the local Dameng knowledge base (Markdown manuals) for a phrase or pattern. Returns matches grouped by file with the nearest preceding heading. Requires DAMENG_DOCS_ROOT to be set.",
150
+ inputSchema: {
151
+ query: z.string().describe("Phrase to search for (literal, case-insensitive by default)."),
152
+ manual: z
153
+ .string()
154
+ .optional()
155
+ .describe("Optional top-level subdirectory under DAMENG_DOCS_ROOT to restrict the search (e.g. DM8-SQL语言使用手册)."),
156
+ regex: z
157
+ .boolean()
158
+ .optional()
159
+ .describe("Treat query as a JavaScript regex (case-insensitive). Default false."),
160
+ maxMatches: z
161
+ .number()
162
+ .int()
163
+ .positive()
164
+ .optional()
165
+ .describe("Cap on returned matches. Default 30."),
166
+ },
167
+ annotations: { readOnlyHint: true, destructiveHint: false },
168
+ }, async ({ query, manual, regex, maxMatches }) => {
169
+ if (!config.docsRoot)
170
+ return docsRootMissingError();
171
+ try {
172
+ const sections = await searchDocs({
173
+ root: config.docsRoot,
174
+ query,
175
+ manual,
176
+ regex,
177
+ maxMatches,
178
+ include: config.docsInclude,
179
+ exclude: config.docsExclude,
180
+ });
181
+ return toolText(formatSections(sections, maxMatches ?? 30));
182
+ }
183
+ catch (e) {
184
+ return toolError(formatToolError(e));
185
+ }
186
+ });
187
+ server.registerTool("list_manuals", {
188
+ description: "List the Dameng manuals available under DAMENG_DOCS_ROOT, with file counts and a short index summary per manual. Use this to discover what to pass to list_sections / lookup_docs(manual=...).",
189
+ inputSchema: {},
190
+ annotations: { readOnlyHint: true, destructiveHint: false },
191
+ }, async () => {
192
+ if (!config.docsRoot)
193
+ return docsRootMissingError();
194
+ try {
195
+ const manuals = await listManuals({
196
+ root: config.docsRoot,
197
+ include: config.docsInclude,
198
+ exclude: config.docsExclude,
199
+ });
200
+ return toolText(formatManuals(manuals));
201
+ }
202
+ catch (e) {
203
+ return toolError(formatToolError(e));
204
+ }
205
+ });
206
+ server.registerTool("list_sections", {
207
+ description: "List the .md files (chapters) inside one manual along with their H1/H2 headings. Use the (file, heading) pair to call read_section.",
208
+ inputSchema: {
209
+ manual: z.string().describe("Manual name (top-level dir under DAMENG_DOCS_ROOT)."),
210
+ },
211
+ annotations: { readOnlyHint: true, destructiveHint: false },
212
+ }, async ({ manual }) => {
213
+ if (!config.docsRoot)
214
+ return docsRootMissingError();
215
+ try {
216
+ const files = await listSections({ root: config.docsRoot, manual });
217
+ return toolText(formatSectionList(files));
218
+ }
219
+ catch (e) {
220
+ return toolError(formatToolError(e));
221
+ }
222
+ });
223
+ server.registerTool("read_section", {
224
+ description: "Read a Markdown chapter under DAMENG_DOCS_ROOT. With heading omitted, returns the whole file. With heading set, returns text from that heading until the next same-or-higher heading. Use after lookup_docs / list_sections to pull full context.",
225
+ inputSchema: {
226
+ file: z
227
+ .string()
228
+ .describe("Relative path under DAMENG_DOCS_ROOT, e.g. DM8-数据守护与读写分离集群/data-watch-version-upgrade.md"),
229
+ heading: z
230
+ .string()
231
+ .optional()
232
+ .describe("Heading text (without # markers) to extract a single section."),
233
+ maxBytes: z
234
+ .number()
235
+ .int()
236
+ .positive()
237
+ .optional()
238
+ .describe("Cap on returned content size. Default 64000."),
239
+ },
240
+ annotations: { readOnlyHint: true, destructiveHint: false },
241
+ }, async ({ file, heading, maxBytes }) => {
242
+ if (!config.docsRoot)
243
+ return docsRootMissingError();
244
+ try {
245
+ const r = await readSection({ root: config.docsRoot, file, heading, maxBytes });
246
+ const header = r.heading
247
+ ? `# ${r.file} — ${r.heading}${r.truncated ? " (truncated)" : ""}\n\n`
248
+ : `# ${r.file}${r.truncated ? " (truncated)" : ""}\n\n`;
249
+ return toolText(header + r.content);
250
+ }
251
+ catch (e) {
252
+ return toolError(formatToolError(e));
253
+ }
254
+ });
255
+ server.registerTool("instance_status", {
256
+ description: "Report Dameng instance and database status from V$INSTANCE / V$DATABASE.",
257
+ inputSchema: {},
258
+ annotations: { readOnlyHint: true, destructiveHint: false },
259
+ }, async () => {
260
+ try {
261
+ const inst = await db.runRaw(`SELECT NAME, INSTANCE_NAME, HOST_NAME, SVR_VERSION, STATUS$, MODE$, START_TIME FROM V$INSTANCE`);
262
+ const dbi = await db.runRaw(`SELECT NAME, STATUS$, ARCH_MODE, DSC_ROLE FROM V$DATABASE`);
263
+ return toolText(`# V$INSTANCE\n${formatResult(inst)}\n\n# V$DATABASE\n${formatResult(dbi)}`);
264
+ }
265
+ catch (e) {
266
+ return toolError(formatToolError(e));
267
+ }
268
+ });
269
+ } // end if (db) block for DB tools
270
+ // --- Docs tools (always available when DOCS_ROOT is set) ---
245
271
  const shutdown = async (signal) => {
246
272
  console.error(`[dameng-mcp] received ${signal}, shutting down`);
247
273
  try {
@@ -249,7 +275,8 @@ async function main() {
249
275
  }
250
276
  catch { }
251
277
  try {
252
- await db.close();
278
+ if (db)
279
+ await db.close();
253
280
  }
254
281
  catch { }
255
282
  process.exit(0);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "basedoc-dameng-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Read-only MCP server for Dameng (DM8): SQL whitelist + local Markdown manual search (list_manuals / list_sections / read_section / lookup_docs).",
5
5
  "type": "module",
6
6
  "license": "MIT",