Skip to main content
Glama
tasks.md14.3 kB
# Implementation Tasks ## Project Overview Lychee Redmine MCP Serverの実装タスクです。TypeScript + Node.js 20+で、MCP標準プロトコルに準拠したサーバーを構築し、Lychee Redmine REST APIと統合します。 ## Task Breakdown - [ ] 1. プロジェクト基盤とセットアップ - [x] 1.1 (P) プロジェクト初期化と依存関係のセットアップ - package.jsonを作成し、Node.js 22.18.0以上、TypeScript 5.x (strict mode) を指定 - MCP SDK (@modelcontextprotocol/sdk@1.25.1)、zod@3.25+、axios@1.x、vitest、ESLint、Prettierを依存関係に追加 - TypeScript strict mode設定(tsconfig.json)、ESLint/Prettier設定を構成 - _Requirements: 1.3, 1.4, 9.4, 9.6_ - [x] 1.2 (P) プロジェクト構造とディレクトリレイアウトの作成 - /src/server/(MCP Server Core)、/src/redmine/(Redmine Integration)、/src/config/(Configuration)、/src/utils/(Utilities)ディレクトリを作成 - エントリーポイント (src/index.ts) を用意 - ESモジュール形式(.js拡張子明記)のインポート規約を適用 - _Requirements: 1.3, 1.4_ - [ ] 2. ユーティリティ基盤の構築 - [x] 2.1 (P) ロガー機能の実装 - DEBUG/INFO/WARN/ERRORの4レベルログをサポート - JSON形式で構造化ログを出力(タイムスタンプ、レベル、メタデータ) - APIキー、passwordなどセンシティブフィールドの自動マスキング機能 - LOG_LEVEL環境変数による出力レベル制御 - レスポンスタイム計測機能(measureTime)の実装 - _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5_ - [x] 2.2 (P) エラーハンドラーの実装 - HTTPエラーコード(4xx/5xx)からApiError型への変換機能 - タイムスタンプ、エンドポイント、リクエストIDを含む標準化されたエラーレスポンス - エラーカテゴリの分類(validation、authentication、not_found、conflict、server、timeout、network、internal) - _Requirements: 7.2, 7.3, 7.4_ - [x] 2.3 (P) リトライハンドラーの実装 - 5xxエラー時の指数バックオフリトライ(初回1秒、2回目2秒、3回目4秒、最大3回) - 429 Rate Limitエラー時のRetry-Afterヘッダー対応 - リトライ対象エラーの判定ロジック(5xxはリトライ、4xxは即座返却) - リトライ回数とラストエラーを含むRetryExhaustedError - _Requirements: 7.1, 7.2, 7.5_ - [ ] 3. 設定管理とバリデーション - [x] 3.1 環境変数バリデーターの実装 - 必須設定項目(LYCHEE_REDMINE_URL、LYCHEE_REDMINE_API_KEY)の存在確認 - URLのHTTPSフォーマット検証(要件2.4) - APIキーの非空文字列チェック - Zodスキーマによるバリデーション実装 - _Requirements: 2.3, 10.3, 10.5_ - [ ] 3.2 設定ローダーの実装 - 環境変数からの設定読み込み(優先度高) - 設定ファイル(JSON/YAML)からの読み込み(オプション、フォールバック) - デフォルト値の提供(logLevel: 'INFO', timeout: 30000, retryMaxAttempts: 3) - Environment Validatorを呼び出して設定を検証 - 設定エラー時の適切なエラーメッセージとプロセス終了 - _Requirements: 10.1, 10.2, 10.3, 10.4, 10.5_ - [ ] 4. Redmine API統合とデータモデル - [ ] 4.1 (P) Redmine型定義の作成 - Project、Issue、User、Member、Milestone、Scheduleなどのエンティティ型定義 - PaginationParams、PaginatedResponse、Result<T, E>、ApiErrorなどの共通型定義 - Zodスキーマによるランタイムバリデーション用スキーマ定義 - すべてのAPI レスポンス型の包括的な定義(カスタムフィールド含む) - _Requirements: 9.1, 9.2, 9.4_ - [ ] 4.2 Redmine API Clientの実装 - axiosインスタンス作成とX-Redmine-API-Keyヘッダーの自動付与(インターセプター) - HTTPS通信の強制、タイムアウト設定(30秒) - getProjects、getProject、searchIssues、createIssue、updateIssue、getUsers、getProjectMembersメソッド実装 - getMilestones(Lychee固有API: /lychee/api/v1/projects/:id/milestones.json)の実装 - ページネーション対応(デフォルト25件/ページ、最大100件/ページ) - Result<T, E>型によるエラーハンドリング - RetryHandlerでAPI呼び出しをラップ - レスポンスのZodバリデーションと型安全な変換 - APIキーの平文ログ出力禁止の徹底 - _Requirements: 2.1, 2.2, 2.4, 2.5, 3.1, 3.2, 3.3, 3.4, 3.5, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 5.1, 5.2, 5.3_ - [ ] 4.3 getScheduleメソッドの実装 - プロジェクトのIssuesとMilestonesを集約してSchedule型を構築 - 最早開始日、最遅終了日、進捗率(加重平均)、依存関係情報の算出 - クリティカルパス分析(オプション機能) - _Requirements: 6.1, 6.2, 6.3, 6.4_ - [ ] 5. MCPツール実装 - [ ] 5.1 (P) プロジェクト関連ツール(get_projects、get_project)の実装 - Zodスキーマによるパラメータ定義(GetProjectsParamsSchema、GetProjectParamsSchema) - Redmine API ClientのgetProjectsとgetProjectを呼び出し - ページネーション対応、権限チェック、404エラーハンドリング - Result<T, E>型のMCPレスポンスへの変換 - _Requirements: 3.1, 3.2, 3.3, 3.4, 3.5, 9.2, 9.3_ - [ ] 5.2 (P) チケット関連ツール(search_issues、create_issue、update_issue)の実装 - SearchIssuesParamsSchema、CreateIssueParamsSchema、UpdateIssueParamsSchemaのZod定義 - フィルタ条件(プロジェクト、ステータス、担当者、キーワード)による検索機能 - チケット作成時の必須パラメータ(project_id、subject)バリデーション - カスタムフィールド対応、優先度・担当者・期日設定 - 部分更新機能(指定フィールドのみ更新) - 409 Conflictエラーハンドリング - _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 9.2, 9.3_ - [ ] 5.3 (P) リソース管理ツール(get_users、get_project_members)の実装 - GetUsersParamsSchema、GetProjectMembersParamsSchemaのZod定義 - ユーザー情報(ID、名前、メール、ロール、ステータス)の取得 - プロジェクトメンバーとロール情報の取得 - ページネーション対応 - _Requirements: 5.1, 5.2, 5.3, 9.2, 9.3_ - [ ] 5.4 (P) スケジュール情報ツール(get_schedule)の実装 - GetScheduleParamsSchemaのZod定義 - Redmine API ClientのgetScheduleメソッドを呼び出し - スケジュール情報(開始日、終了日、進捗率、マイルストーン、依存関係)をJSON形式で返却 - クリティカルパス情報の提供 - _Requirements: 6.1, 6.2, 6.3, 6.4, 9.2, 9.3_ - [ ] 6. MCP Server Coreの実装 - [ ] 6.1 ツールレジストリの実装 - Map<string, MCPToolDefinition>によるツール管理 - ツール登録機能(重複チェック含む) - listTools、getToolメソッドの実装 - ツール一覧取得(tools/list)とハンドラーマッピング - _Requirements: 12.1, 12.2, 12.3_ - [ ] 6.2 MCPサーバー起動とプロトコル実装 - @modelcontextprotocol/sdkのServerクラスとStdioServerTransportの使用 - stdio経由でのJSON-RPC 2.0プロトコル実装 - Config Loaderによる設定読み込みと起動時バリデーション - 設定エラー時の適切なエラーメッセージとプロセス終了 - 8つのMCPツール(get_projects、get_project、search_issues、create_issue、update_issue、get_users、get_project_members、get_schedule)の登録 - クライアント初期化リクエストの処理とサーバー機能(ツール、リソース、プロンプト)の返却 - シャットダウン処理の実装 - _Requirements: 1.1, 1.2, 1.5, 12.1, 12.2, 12.3, 12.4, 12.5_ - [ ] 7. テスト実装 - [ ] 7.1 (P) ユーティリティのユニットテスト - Logger: ログレベル制御、センシティブデータマスキング、JSON形式出力検証 - Error Handler: HTTPエラー変換、タイムスタンプ付与、エラーカテゴリ分類検証 - Retry Handler: 指数バックオフロジック、リトライ回数制限、429エラーRetry-After対応検証 - _Requirements: 11.1, 11.2_ - [ ] 7.2 (P) 設定管理のユニットテスト - Environment Validator: 必須項目チェック、URLフォーマット、HTTPS検証、APIキー検証 - Config Loader: 環境変数読み込み、デフォルト値適用、設定ファイルフォールバック、バリデーションエラー - _Requirements: 11.1, 11.2_ - [ ] 7.3 (P) MCPツールのユニットテスト - すべてのツールのZodバリデーション検証 - パラメータエラー時のToolError (type: 'validation') 変換 - Result<T, E>型の正しい生成 - モック化されたRedmine API Clientとの統合テスト - _Requirements: 11.1, 11.2, 11.4_ - [ ] 7.4 Redmine API Clientのインテグレーションテスト - モックサーバー(msw等)を使用したAPI呼び出しテスト - 認証ヘッダー(X-Redmine-API-Key)の検証 - ページネーション処理の検証 - エラーレスポンス(401、403、404、500等)のハンドリング検証 - リトライロジックの動作確認(5xxエラー、429エラー) - _Requirements: 11.2, 11.4_ - [ ] 7.5 MCP Server統合テスト - MCP Server起動、ツール登録、tools/listレスポンスの検証 - クライアント→MCP Server→API Client→モックRedmine APIのEnd-to-Endフロー - 設定エラー時のプロセス終了動作確認 - _Requirements: 11.2, 11.5_ - [ ] 7.6* テストカバレッジ80%以上の達成確認 - vitestカバレッジレポート生成 - 全モジュールのカバレッジ確認 - 未カバー箇所の追加テスト実装 - CI/CDパイプラインでの自動テスト実行設定 - _Requirements: 11.3, 11.5_ - [ ] 8. 統合とデプロイ準備 - [ ] 8.1 全コンポーネント統合とエンドツーエンド動作確認 - すべてのMCPツールがServer Core経由で呼び出し可能であることを確認 - 実際のLychee Redmineインスタンスとの接続テスト(環境変数設定) - エラーハンドリング、リトライ、ログ出力の統合動作確認 - パフォーマンス要件(p50 < 1s、p95 < 3s、p99 < 10s)の確認 - _Requirements: 1.1, 1.2, 1.5, 2.1, 2.2, 2.4, 2.5, 2.6, 12.1, 12.2_ - [ ] 8.2 ESLint/Prettier静的解析と型チェック - TypeScript strict modeコンパイルエラーゼロ確認 - ESLintルール違反ゼロ確認 - Prettierフォーマット適用 - `any`型使用の完全排除確認 - _Requirements: 9.4, 9.6_ ## Requirements Coverage ### 全要件のカバレッジマトリクス | Requirement | 要件概要 | 対応タスク | |-------------|---------|-----------| | 1.1, 1.2 | JSON-RPC 2.0 over stdio、クライアント初期化 | 6.2, 8.1 | | 1.3, 1.4 | Node.js 20+、TypeScript strict mode | 1.1, 1.2, 8.2 | | 1.5 | 起動時設定エラー検出と終了 | 3.2, 6.2, 8.1 | | 2.1, 2.2 | 環境変数読み込み、APIキー平文ログ禁止 | 4.2, 8.1 | | 2.3 | APIキー未設定時起動エラー | 3.1 | | 2.4 | HTTPS強制 | 3.1, 4.2 | | 2.5, 2.6 | API認証失敗エラー、複数インスタンス対応 | 4.2, 8.1 | | 3.1, 3.2, 3.3, 3.4, 3.5 | プロジェクト一覧・詳細取得、ページネーション、404エラー、権限チェック | 4.2, 5.1 | | 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7 | チケット作成・更新・検索、バリデーション、カスタムフィールド、409エラー | 4.2, 5.2 | | 5.1, 5.2, 5.3 | ユーザー・メンバー一覧取得、ロール情報 | 4.2, 5.3 | | 5.4 | ワークロードデータ(Lychee固有) | 4.2(Phase 2対応) | | 6.1, 6.2, 6.3, 6.4 | スケジュール情報、依存関係、クリティカルパス、ガントチャートJSON | 4.3, 5.4 | | 7.1, 7.2 | 5xxエラーリトライ、3回失敗後エラー返却 | 2.3, 7.1 | | 7.3, 7.4 | タイムアウト30秒、エラーログ詳細 | 2.2, 4.2 | | 7.5 | レート制限対応 | 2.3, 7.1 | | 8.1, 8.2, 8.3, 8.4, 8.5 | ログ4レベル、LOG_LEVEL環境変数、API呼び出しログ、レスポンスタイム、スタックトレース | 2.1, 7.1 | | 9.1, 9.2, 9.3, 9.4, 9.5, 9.6 | TypeScript型定義、JSON Schema、バリデーションエラー、`any`禁止、入力サニタイゼーション、ESLint | 4.1, 5.1, 5.2, 5.3, 5.4, 8.2 | | 10.1, 10.2, 10.3, 10.4, 10.5 | 環境変数・設定ファイル、環境変数優先、必須項目検証、デフォルト値、設定エラー | 3.1, 3.2, 7.2 | | 11.1, 11.2, 11.3, 11.4, 11.5 | モック化可能設計、ユニット・統合テスト、カバレッジ80%、外部APIモック、CI/CD自動テスト | 7.1, 7.2, 7.3, 7.4, 7.5, 7.6 | | 12.1, 12.2, 12.3, 12.4, 12.5 | 8ツール登録、tools/list、JSON Schema、リソース・プロンプト機能 | 5.1, 5.2, 5.3, 5.4, 6.1, 6.2, 8.1 | ## Task Summary - **合計**: 8メジャータスク、26サブタスク - **全12要件カバー済み** - **平均タスクサイズ**: 1-3時間/サブタスク - **並列実行可能タスク**: 12タスク((P)マーク付き) ## Implementation Notes ### フェーズ1スコープ - 標準Redmine API + Lychee固有マイルストーンAPI(/lychee/api/v1/projects/:id/milestones.json) - 8つのMCPツール実装 - テストカバレッジ80%以上 ### フェーズ2以降(本タスクリスト対象外) - EVM指標取得 (/levm/api/...) - コスト管理・経費情報 (/lychee_cost_expenses.json) - プロジェクトレポート履歴 (/project_reports/histories.json) - 実労働時間インポート (/lychee_time_management/api/...) - ベースライン管理 (/baselines) ### 技術スタック確認 - Node.js 22.18.0+(型ストリッピング機能) - TypeScript 5.x (strict mode) - @modelcontextprotocol/sdk@1.25.1 - zod@3.25+ - axios@1.x - vitest - ESLint + Prettier

Latest Blog Posts

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/ssoma-dev/mcp-server-lychee-redmine'

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