-
Notifications
You must be signed in to change notification settings - Fork 199
Expand file tree
/
Copy pathListTableTool.ts
More file actions
43 lines (41 loc) · 1.32 KB
/
ListTableTool.ts
File metadata and controls
43 lines (41 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sql from "mssql";
import { Tool } from "@modelcontextprotocol/sdk/types.js";
export class ListTableTool implements Tool {
[key: string]: any;
name = "list_table";
description = "Lists tables in an MSSQL Database, or list tables in specific schemas";
inputSchema = {
type: "object",
properties: {
parameters: {
type: "array",
description: "Schemas to filter by (optional)",
items: {
type: "string"
},
minItems: 0
},
},
required: [],
} as any;
async run(params: any) {
try {
const { parameters } = params;
const request = new sql.Request();
const schemaFilter = parameters && parameters.length > 0 ? `AND TABLE_SCHEMA IN (${parameters.map((p: string) => `'${p}'`).join(", ")})` : "";
const query = `SELECT TABLE_SCHEMA + '.' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ${schemaFilter} ORDER BY TABLE_SCHEMA, TABLE_NAME`;
const result = await request.query(query);
return {
success: true,
message: `List tables executed successfully`,
items: result.recordset,
};
} catch (error) {
console.error("Error listing tables:", error);
return {
success: false,
message: `Failed to list tables: ${error}`,
};
}
}
}