import { ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js';
import { DatabaseManager } from '../database/manager.js';
import { isMultiDbMode } from '../config/index.js';
import { logger } from '../utils/logger.js';
import { z } from 'zod';
export async function handleListResources() {
try {
const db = DatabaseManager.getInstance();
const resources = [];
if (isMultiDbMode) {
// In multi-DB mode, list all databases
const databases = await db.getDatabases();
for (const database of databases) {
resources.push({
uri: `mysql://database/${database.name}`,
name: `Database: ${database.name}`,
description: `Schema information for database ${database.name} (${database.tables.length} tables)`,
mimeType: 'application/json'
});
// Add tables for each database
for (const tableName of database.tables) {
resources.push({
uri: `mysql://table/${database.name}/${tableName}`,
name: `Table: ${database.name}.${tableName}`,
description: `Schema information for table ${tableName} in database ${database.name}`,
mimeType: 'application/json'
});
}
}
} else {
// Single-DB mode, list tables only
const tables = await db.getTables();
for (const table of tables) {
resources.push({
uri: `mysql://table/${table.name}`,
name: `Table: ${table.name}`,
description: `Schema information for table ${table.name} (${table.columns.length} columns)`,
mimeType: 'application/json'
});
}
}
return { resources };
} catch (error) {
logger.error('Failed to list resources', { error });
return { resources: [] };
}
}