We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/t3ta/memory-bank-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
{
"schema": "memory_document_v2",
"metadata": {
"id": "template-removal-plan",
"title": "テンプレート関連コード削除計画",
"documentType": "plan",
"path": "template-removal-plan.json",
"tags": [
"plan",
"cleanup",
"template",
"refactoring"
],
"lastModified": "2025-03-28T17:50:00.000Z",
"createdAt": "2025-03-28T17:50:00.000Z",
"version": 1
},
"content": {
"overview": {
"description": "テンプレート関連のコードが中途半端な状態で残っており、ビルドエラーの原因になっている。このため、テンプレート関連コードを完全に削除する計画を立てる",
"impact": "高(ビルドエラー継続と開発混乱の原因)",
"deadline": "モノレポ本格移行前"
},
"affectedComponents": [
{
"component": "GlobalController",
"file": "/packages/mcp/src/interface/controllers/GlobalController.ts",
"issue": "templateControllerの参照があるが、実際には使用していない"
},
{
"component": "providers.ts",
"file": "/packages/mcp/src/main/di/providers.ts",
"issue": "templateRepository, templateService, templateControllerの登録が残っており、不要なコードとなっている"
},
{
"component": "MarkdownMigrationService",
"file": "/packages/mcp/src/migration/MarkdownMigrationService.ts",
"issue": "テンプレートリポジトリに依存しているが、すでにモック対応済み"
},
{
"component": "DocumentPath",
"file": "/packages/mcp/src/domain/entities/DocumentPath.ts",
"issue": "マークダウン関連のメソッドが残っており、不要"
}
],
"filesToRemove": [
{
"path": "/packages/mcp/src/domain/templates/ITemplateRepository.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/domain/templates/Template.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/domain/templates/Section.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/infrastructure/templates/FileTemplateRepository.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/infrastructure/templates/JsonTemplateLoader.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/infrastructure/templates/TemplateRenderer.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/infrastructure/templates/interfaces/ITemplateLoader.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/application/templates/TemplateService.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/interface/controllers/TemplateController.ts",
"reason": "不要な機能"
},
{
"path": "/packages/mcp/src/interface/controllers/interfaces/ITemplateController.ts",
"reason": "不要な機能"
}
],
"codeToModify": [
{
"file": "/packages/mcp/src/interface/controllers/GlobalController.ts",
"changes": [
{
"type": "remove",
"description": "templateControllerフィールドを削除",
"code": "private readonly templateController?: any; // Template controller for accessing templates"
},
{
"type": "remove",
"description": "コンストラクタのtemplatControllerパラメータを削除",
"code": "templateController?: any; // Template controller for accessing templates"
},
{
"type": "remove",
"description": "templateControllerの代入を削除",
"code": "this.templateController = options?.templateController;"
},
{
"type": "modify",
"description": "readCoreFilesメソッドをJSON専用に改修",
"oldCode": "// Define core files to read using templates\n const coreFiles = [\n 'architecture-template.json',\n 'coding-standards-template.json',\n 'domain-models-template.json',\n 'glossary-template.json',\n 'tech-stack-template.json',\n 'user-guide-template.json',\n ];\n\n // Check if template controller is available\n if (!this.templateController) {\n throw new DomainError('UNEXPECTED_ERROR', 'Template controller not available');\n }",
"newCode": "// Define core files to read directly\n const coreFiles = [\n 'architecture.json',\n 'coding-standards.json',\n 'domain-models.json',\n 'glossary.json',\n 'tech-stack.json',\n 'user-guide.json',\n ];"
},
{
"type": "modify",
"description": "コアファイル読み込み部分を直接読み込みに変更",
"oldCode": "// Try to read each core file using template for convenience\n for (const fileId of coreFiles) {\n try {\n // Remove the -template suffix and extension\n const coreKey = fileId.replace('-template.json', '');\n \n // Get the template from the template controller\n const template = await this.templateController.getTemplate(fileId);\n \n if (template) {\n // If template exists, store it in the result\n result[coreKey] = template;\n } else {\n // If template doesn't exist, add empty object\n result[coreKey] = {};\n }\n } catch (error) {\n // Log error but continue with other files\n logger.error(`Error reading global core file ${fileId}:`, error);\n \n // Set empty object for missing files\n const coreKey = fileId.replace('-template.json', '');\n result[coreKey] = {};\n }\n }",
"newCode": "// Read each core file directly\n for (const documentPath of coreFiles) {\n try {\n // Try to read the document from the global memory bank\n const docResult = await this.readGlobalDocumentUseCase.execute({ path: documentPath });\n \n if (docResult && docResult.document) {\n result[documentPath.replace('.json', '')] = docResult.document;\n } else {\n // Add empty placeholder for missing file\n result[documentPath.replace('.json', '')] = {\n path: documentPath,\n content: '',\n tags: ['global', 'core', documentPath.replace('.json', '')],\n lastModified: new Date().toISOString(),\n };\n }\n } catch (error) {\n // Log error but continue with other files\n logger.error(`Error reading global core file ${documentPath}:`, error);\n\n // Add empty placeholder for missing file\n result[documentPath.replace('.json', '')] = {\n path: documentPath,\n content: '',\n tags: ['global', 'core', documentPath.replace('.json', '')],\n lastModified: new Date().toISOString(),\n };\n }\n }"
}
]
},
{
"file": "/packages/mcp/src/main/di/providers.ts",
"changes": [
{
"type": "remove",
"description": "templateRepositoryのインポート削除",
"code": "import { ITemplateRepository } from '@/domain/templates/ITemplateRepository.js';\nimport { TemplateService } from '@/application/templates/TemplateService.js';"
},
{
"type": "remove",
"description": "templateRepositoryの登録削除",
"code": "container.registerFactory('templateRepository', async () => {\n // 削除\n});"
},
{
"type": "remove",
"description": "templateServiceの登録削除",
"code": "container.registerFactory('templateService', async () => {\n const templateRepository = container.get('templateRepository') as ITemplateRepository;\n\n // Import and instantiate the TemplateService\n const { TemplateService } = await import('@/application/templates/TemplateService.js'); // Corrected path\n return new TemplateService(templateRepository);\n});"
},
{
"type": "remove",
"description": "templateControllerの登録削除",
"code": "container.registerFactory('templateController', async () => {\n const templateService = container.get('templateService') as TemplateService;\n\n // Import and instantiate the TemplateController\n const { TemplateController } = await import('../../interface/controllers/TemplateController.js');\n return new TemplateController(templateService);\n});"
},
{
"type": "modify",
"description": "GlobalControllerへのtemplatControllerの注入削除",
"oldCode": "const templateController = await container.get<any>('templateController');",
"newCode": "// Template controller has been removed"
},
{
"type": "modify",
"description": "GlobalControllerの生成部分から参照削除",
"oldCode": "return new GlobalController(\n readGlobalDocumentUseCase,\n writeGlobalDocumentUseCase,\n searchDocumentsByTagsUseCase,\n updateTagIndexUseCase, // Keep V1 for backwards compatibility\n presenter,\n {\n updateTagIndexUseCaseV2,\n readJsonDocumentUseCase,\n writeJsonDocumentUseCase,\n deleteJsonDocumentUseCase,\n searchJsonDocumentsUseCase,\n updateJsonIndexUseCase,\n templateController\n } // Pass optional dependencies",
"newCode": "return new GlobalController(\n readGlobalDocumentUseCase,\n writeGlobalDocumentUseCase,\n searchDocumentsByTagsUseCase,\n updateTagIndexUseCase, // Keep V1 for backwards compatibility\n presenter,\n {\n updateTagIndexUseCaseV2,\n readJsonDocumentUseCase,\n writeJsonDocumentUseCase,\n deleteJsonDocumentUseCase,\n searchJsonDocumentsUseCase,\n updateJsonIndexUseCase\n } // Pass optional dependencies"
}
]
},
{
"file": "/packages/mcp/src/domain/entities/DocumentPath.ts",
"changes": [
{
"type": "remove",
"description": "isMarkdownメソッドの削除",
"code": "/**\n * Check if this document is a markdown file\n * @deprecated Markdown support is deprecated in v2.1.0\n */\npublic get isMarkdown(): boolean {\n const ext = this.extension.toLowerCase();\n return ext === 'md';\n}"
},
{
"type": "remove",
"description": "toAlternateFormatメソッドの削除",
"code": "/**\n * Create a corresponding JSON path for a markdown path and vice versa\n * @deprecated Markdown support is deprecated in v2.1.0\n * @returns New DocumentPath with converted extension\n */\npublic toAlternateFormat(): DocumentPath {\n if (this.isJSON) {\n // Convert JSON to Markdown\n return this.withExtension('md');\n } else if (this.isMarkdown) {\n // Convert Markdown to JSON\n return this.withExtension('json');\n } else {\n // Return same path for other file types\n return this;\n }\n}"
}
]
},
{
"file": "/packages/mcp/src/application/usecases/branch/WriteBranchDocumentUseCase.ts",
"changes": [
{
"type": "remove",
"description": "マークダウン書き込みチェックコードの削除",
"code": "// Check if markdown writes are disabled\nif (this.disableMarkdownWrites && documentPath.isMarkdown) {\n const jsonPath = documentPath.value.replace(/\\.md$/, '.json');\n throw new ApplicationError(\n ApplicationErrorCodes.OPERATION_NOT_ALLOWED,\n `Writing to Markdown files is disabled. Please use JSON format instead: ${jsonPath}`\n );\n}"
}
]
}
],
"implementationSteps": [
{
"step": "1. domain/entities/DocumentPathの修正",
"description": "マークダウン関連メソッドを削除し、JSON専用に簡素化",
"priority": "高",
"estimatedTime": "15分"
},
{
"step": "2. application/usecases/branch/WriteBranchDocumentUseCaseの修正",
"description": "マークダウン拡張子チェックを削除",
"priority": "高",
"estimatedTime": "10分"
},
{
"step": "3. interface/controllers/GlobalControllerの修正",
"description": "templateController依存関係を削除し、コアファイル読み込みを直接読み込みに変更",
"priority": "高",
"estimatedTime": "30分"
},
{
"step": "4. main/di/providersの修正",
"description": "テンプレート関連の登録を削除",
"priority": "高",
"estimatedTime": "20分"
},
{
"step": "5. テンプレート関連ファイルの削除",
"description": "不要なファイルをすべて削除",
"priority": "中",
"estimatedTime": "15分"
}
],
"testingSteps": [
{
"id": "test-1",
"description": "修正後のビルドエラーがないことを確認",
"command": "cd /Users/t3ta/workspace/memory-bank-mcp-server && yarn build",
"expectedOutcome": "ビルドエラーなし"
},
{
"id": "test-2",
"description": "GlobalControllerのテストが正常に動作することを確認",
"command": "cd /Users/t3ta/workspace/memory-bank-mcp-server/packages/mcp && yarn test tests/unit/interface/controllers/GlobalController.test.ts",
"expectedOutcome": "テストがすべて成功"
}
],
"risks": [
{
"risk": "テンプレート関連のコード削除により、一部の機能が動作しなくなる可能性",
"severity": "低",
"mitigation": "テンプレート機能はすでに非推奨であり、実質的に使用されていないため影響は最小限"
},
{
"risk": "GlobalControllerの変更がサーバー全体に影響する",
"severity": "中",
"mitigation": "変更後に統合テストを実行し、正常に動作することを確認する"
}
],
"references": [
{
"document": "monorepo-critical-issues.json",
"description": "テンプレート関連コードの中途半端な状態が重大な課題として挙げられている"
}
],
"mockRequirements": {
"templateRepositoryMock": {
"description": "MarkdownMigrationServiceでは既にテンプレートリポジトリのモックを実装済み",
"implementation": "mockTemplateRepository = {\n getTemplate: async () => null,\n getTemplateAsMarkdown: async () => '',\n getTemplatesByType: async () => [],\n saveTemplate: async () => false,\n templateExists: async () => false,\n getAllTemplateIds: async () => [],\n getAllTemplateTypes: async () => []\n};"
}
},
"completionCriteria": [
"すべてのテンプレート関連コードが削除されている",
"GlobalControllerがテンプレートに依存せずに動作する",
"ビルドエラーが解消されている",
"関連するテストがすべて成功する"
],
"completedSteps": [
{
"step": "3. interface/controllers/GlobalControllerの修正",
"description": "templateController依存関係なしに、コアファイル読み込みを直接読み込みに変更",
"completedAt": "2025-03-28T19:10:00.000Z",
"status": "完了"
},
{
"step": "1. domain/entities/DocumentPathの修正",
"status": "完了",
"completedAt": "2025-03-28T19:15:00.000Z",
"description": "コードチェック完了。削除予定だったDocumentPathのisMarkdownとtoAlternateFormatメソッドがすでに削除済みだったことを確認"
},
{
"step": "2. application/usecases/branch/WriteBranchDocumentUseCaseの修正",
"status": "完了",
"completedAt": "2025-03-28T19:15:00.000Z",
"description": "コードチェック完了。削除予定だったマークダウン拡張子チェックはすでに削除済みだったことを確認"
},
{
"step": "5. テンプレート関連ファイルの削除",
"status": "完了",
"completedAt": "2025-03-28T19:20:00.000Z",
"description": "ITemplateRepository.tsとTemplateService.tsを削除し、ディレクトリも削除。providers.tsからの参照も削除した。"
},
{
"step": "4. main/di/providersの修正",
"status": "完了",
"completedAt": "2025-03-28T19:25:00.000Z",
"description": "テンプレートサービス関連のインポートを削除し、i18nServiceの実装も修正。残りの型エラーはモノレポ移行の別タスクで対応予定。"
}
],
"testResults": [
{
"id": "test-syntax-1",
"description": "GlobalControllerの構文エラーが発生していたため修正",
"command": "cd /Users/t3ta/workspace/memory-bank-mcp-server/packages/mcp && tsc --noEmit --pretty",
"status": "部分成功",
"details": "GlobalControllerの修正は成功したがまだ型関連のエラーが残っている。providers.tsからの参照でもまだエラーが発生しているが、もう少し改善した。"
},
{
"id": "test-syntax-2",
"description": "GlobalController.tsとproviders.tsの修正後のビルドテスト",
"command": "cd /Users/t3ta/workspace/memory-bank-mcp-server/packages/mcp && tsc --noEmit --pretty",
"status": "部分成功",
"details": "GlobalControllerとproviders.tsのエラーは解消されたが、他のコンポーネント(FileSystemBranchMemoryBankRepositoryなど)にまだエラーが残っている。これらはモノレポ移行作業の中で別途対応する予定。"
}
],
"conclusion": "テンプレート関連コードの削除作業は完了しました。GlobalControllerの依存を完全に削除し、readCoreFilesメソッドをJSONファイル専用に実装しました。providers.tsからもテンプレート関連のコードを削除し、DIコンテナの設定を修正しました。まだ一部のファイルに型エラーは残っていますが、これらはモノレポ移行の別タスクとして対応する予定です。基本的なテンプレート関連コードの削除は完了したと言えます。"
}
}