import type { FeiShuServices } from '@/services/index.js';
import type { Logger, ToolGroup, ToolsConfig } from '@/typings/index.js';
/**
* MCP Tools Registry
*
* This module organizes and exports all available MCP tools.
*/
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { registerBotTools } from './bot-tools.js';
import { registerChatTools } from './chat-tools.js';
import { registerDocumentTools } from './document-tools.js';
import { registerSheetTools } from './sheet-tools.js';
/**
* Tool registration parameters
*/
export interface ToolRegistryParams {
server: McpServer;
services: FeiShuServices;
logger: Logger;
toolsConfig?: ToolsConfig;
}
/**
* Check if a tool group is enabled
* @param group - Tool group to check
* @param config - Tools configuration
* @returns Whether the tool group is enabled
*/
function isToolGroupEnabled(group: ToolGroup, config?: ToolsConfig): boolean {
if (!config) return true;
// If enabled list is specified, only those groups are enabled
if (config.enabled && config.enabled.length > 0) {
return config.enabled.includes(group);
}
// If disabled list is specified, all except those are enabled
if (config.disabled && config.disabled.length > 0) {
return !config.disabled.includes(group);
}
// Default: all enabled
return true;
}
/**
* Register all tools with the MCP server
*
* @param params - Tool registration parameters
*/
export function registerAllTools(params: ToolRegistryParams): void {
const { toolsConfig, logger } = params;
// Register document-related tools
if (isToolGroupEnabled('document', toolsConfig)) {
registerDocumentTools(params);
logger.info('Document tools registered');
}
// Register bot-related tools
if (isToolGroupEnabled('bot', toolsConfig)) {
registerBotTools(params);
logger.info('Bot tools registered');
}
// Register chat-related tools
if (isToolGroupEnabled('chat', toolsConfig)) {
registerChatTools(params);
logger.info('Chat tools registered');
}
// Register sheet-related tools
if (isToolGroupEnabled('sheet', toolsConfig)) {
registerSheetTools(params);
logger.info('Sheet tools registered');
}
}