Skip to main content
Glama

Claude MCP Server Integration

by mokemoke0821
tool-handlers.ts9.7 kB
/** * 全ツール実行ハンドラー * 実装済み: Phase 1 (9ツール) + Phase 3 (21ツール) = 30ツール * 未実装: Phase 2 (19ツール) */ import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js'; // インスタンス型定義 interface ToolInstances { // Phase 1: セキュリティ機能 encryption: any; integrity: any; secureOps: any | null; // Phase 2: 実用機能(未実装) compression: any | null; duplicateDetector: any | null; fileWatcher: any | null; syncManager: any | null; // Phase 3: 高度機能 versionManager: any; classifier: any; searchEngine: any; permissionManager: any; } export class ToolHandlers { constructor(private instances: ToolInstances) { } /** * 全ツール実行処理 */ async handleToolCall(name: string, args: any): Promise<any> { // Phase 2 ツールのチェック(未実装) const phase2Tools = [ 'create_archive', 'extract_archive', 'list_archive_contents', 'analyze_compression_efficiency', 'scan_duplicates', 'clean_duplicates', 'analyze_storage_waste', 'generate_duplicate_report', 'start_file_watch', 'stop_file_watch', 'get_watch_status', 'get_file_changes', 'export_watch_log', 'analyze_file_activity', 'sync_directories', 'create_backup', 'restore_backup', 'verify_sync_integrity', 'generate_sync_report' ]; if (phase2Tools.includes(name)) { return { success: false, message: `ツール「${name}」はPhase 2機能で現在未実装です。Phase 1とPhase 3のツールのみ利用可能です。`, error: new Error('機能未実装'), timestamp: new Date() }; } switch (name) { // ================== Phase 1: セキュリティ機能(9ツール)- 実装済み ================== // 暗号化・復号化ツール(4ツール) case 'encrypt_file': { const { filePath, password, algorithm, keyDerivation } = args; const options = algorithm || keyDerivation ? { algorithm, keyDerivation } : {}; return await this.instances.encryption.encryptFile(filePath, password, options); } case 'decrypt_file': { const { encryptedFilePath, password, outputPath } = args; return await this.instances.encryption.decryptFile(encryptedFilePath, password, outputPath); } case 'encrypt_multiple_files': { const { filePaths, password, algorithm } = args; const options = algorithm ? { algorithm } : {}; return await this.instances.encryption.encryptFiles(filePaths, password, options); } case 'decrypt_multiple_files': { const { encryptedFilePaths, password } = args; return await this.instances.encryption.decryptFiles(encryptedFilePaths, password); } // 整合性検証ツール(5ツール) case 'generate_file_checksum': { const { filePath, algorithm } = args; return await this.instances.integrity.generateFileChecksum(filePath, algorithm); } case 'verify_file_integrity': { const { filePath, expectedChecksum, algorithm } = args; return await this.instances.integrity.verifyFileIntegrity(filePath, expectedChecksum, algorithm); } case 'generate_multiple_checksums': { const { filePaths, algorithm } = args; return await this.instances.integrity.generateMultipleChecksums(filePaths, algorithm); } case 'save_checksum_file': { const { filePaths, outputPath, algorithm } = args; const checksumResult = await this.instances.integrity.generateMultipleChecksums(filePaths, algorithm); if (!checksumResult.success || !checksumResult.data) { return checksumResult; } return await this.instances.integrity.saveChecksumFile(checksumResult.data, outputPath); } case 'verify_directory_integrity': { const { directoryPath, checksumFilePath } = args; return await this.instances.integrity.verifyDirectoryIntegrity(directoryPath, checksumFilePath); } // ================== Phase 3: 高度機能(21ツール)- 実装済み ================== // ファイルバージョン管理システム(6ツール) case 'initialize_repository': { const { basePath, repositoryPath, maxVersions, autoSnapshot } = args; const options = { maxVersions, autoSnapshot }; return await this.instances.versionManager.initializeRepository(basePath, repositoryPath, options); } case 'create_file_version': { const { filePath, repositoryPath, comment, author } = args; return await this.instances.versionManager.createFileVersion(filePath, repositoryPath, comment, author); } case 'create_snapshot': { const { basePath, repositoryPath, name, description, author } = args; return await this.instances.versionManager.createSnapshot(basePath, repositoryPath, name, description, author); } case 'restore_file_version': { const { filePath, repositoryPath, versionId } = args; return await this.instances.versionManager.restoreFileVersion(filePath, repositoryPath, versionId); } case 'compare_versions': { const { repositoryPath, versionId1, versionId2 } = args; return await this.instances.versionManager.compareVersions(repositoryPath, versionId1, versionId2); } case 'get_version_history': { const { filePath, repositoryPath } = args; return await this.instances.versionManager.getVersionHistory(filePath, repositoryPath); } // インテリジェント分類システム(5ツール) case 'classify_files': { const { searchPaths, useAI } = args; return await this.instances.classifier.classifyFiles(searchPaths, useAI); } case 'create_classification_rule': { const { name, description, conditions, actions, priority } = args; const rule = { name, description, conditions, actions, enabled: true, priority }; return await this.instances.classifier.createClassificationRule(rule); } case 'create_smart_folder': { const { name, query, autoUpdate } = args; return await this.instances.classifier.createSmartFolder(name, query, autoUpdate); } case 'manage_categories': { const { action, category } = args; return await this.instances.classifier.manageCategories(action, category); } case 'generate_classification_report': { const { searchPaths, outputPath } = args; return await this.instances.classifier.generateClassificationReport(searchPaths, outputPath); } // 高度ファイル検索システム(6ツール) case 'create_search_index': { const { basePath, indexPath, indexContent, maxFileSize } = args; const config = { indexContent, maxFileSize }; return await this.instances.searchEngine.createSearchIndex(basePath, indexPath, config); } case 'perform_advanced_search': { const { query, searchPaths } = args; return await this.instances.searchEngine.performAdvancedSearch(query, searchPaths); } case 'create_saved_search': { const { name, description, query } = args; return await this.instances.searchEngine.createSavedSearch(name, description, query); } case 'perform_fuzzy_search': { const { searchTerm, searchPaths, threshold } = args; return await this.instances.searchEngine.performFuzzySearch(searchTerm, searchPaths, threshold); } case 'perform_content_search': { const { searchTerm, searchPaths, caseSensitive } = args; return await this.instances.searchEngine.performContentSearch(searchTerm, searchPaths, caseSensitive); } case 'generate_search_report': { const { searchQueries, outputPath } = args; return await this.instances.searchEngine.generateSearchReport(searchQueries, outputPath); } // ファイルアクセス権限管理システム(6ツール) case 'set_file_permissions': { const { filePath, permissions, modifier } = args; return await this.instances.permissionManager.setFilePermissions(filePath, permissions, modifier); } case 'manage_directory_permissions': { const { directoryPath, permissions, recursive, modifier } = args; return await this.instances.permissionManager.manageDirectoryPermissions(directoryPath, permissions, recursive, modifier); } case 'check_access': { const { filePath, user, action, context } = args; return await this.instances.permissionManager.checkAccess(filePath, user, action, context); } case 'create_security_policy': { const { name, description, rules, scope } = args; return await this.instances.permissionManager.createSecurityPolicy(name, description, rules, scope); } case 'generate_audit_report': { const { startDate, endDate, outputPath } = args; const start = startDate ? new Date(startDate) : undefined; const end = endDate ? new Date(endDate) : undefined; return await this.instances.permissionManager.generateAuditReport(start, end, outputPath); } case 'generate_permission_report': { const { scope, outputPath } = args; return await this.instances.permissionManager.generatePermissionReport(scope, outputPath); } default: throw new McpError( ErrorCode.MethodNotFound, `未知のツール: ${name}` ); } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mokemoke0821/claude-mcp-integration'

If you have feedback or need assistance with the MCP directory API, please join our Discord server