Leantime MCP (Unofficial) について
Leantime MCP (Unofficial)は、AIエージェントをLeantimeインスタンスに接続するローカル実行のオープンソースMCPサーバーです。42のツールでプロジェクト作業を扱い、ドライラン検証、一括操作、バックアップと復元に対応します。
主な機能
- 01プロジェクト業務を扱う42のツール
- 021回の呼び出しでプロジェクト概要を取得
- 03変更操作のドライラン検証
- 04事前検証付き一括操作
- 05プロジェクトのバックアップと復元
- 06読み取り専用プロファイルと削除確認
活用シーン
- 01プロジェクトの進捗、健全性、スプリント状況の確認
- 02プレビュー付き一括チケット作成や更新
- 03変更前のプロジェクトバックアップ
- 04プロジェクトを新規プロジェクトへ復元
MCP 対応
ローカルで動作するstdio専用MCPサーバーで、ユーザー提供のLeantime APIキーを使い、プロジェクト、チケット、スプリント、マイルストーン、工数管理、バックアップ操作をMCPクライアントに公開します。変更はドライランに対応し、破壊的操作はデフォルトで確認が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
leantime-mcp
- MCP Registry 名:
mcp-name: io.github.4lador/leantime-mcp
Leantime 向けの非公式 Model Context Protocol サーバーです。エージェントファーストに設計されており、LLM ツール(opencode、Claude Code、Claude Desktop、Cursor、Codex、または任意の MCP クライアント)が、ドライラン検証、一括操作、バックアップ/復元、1 回の呼び出しで取得できるプロジェクトコンテキストを備えた 42 個のツールを通じて、Leantime のプロジェクトを操作できます。
これは独立したオープンソースの連携機能です。stdio のみを使用し、独自の API キーと独自のインスタンスを使ってローカルで実行します。Leantime の公式サービスに取って代わることを目的としていません。ベンダーがサポートする連携機能をお求めの場合は、そちらをご利用ください。
約 3 MB の自己完結型バイナリ(rustls — システム OpenSSL 不要)、起動時間の中央値は約 1.2 ms、アイドル時のメモリ使用量は約 5 MB(ハンドシェイク後の VmRSS — Linux x86_64 開発マシンで測定、起動回数 n=100)。
ドキュメント:クイックスタート · 設定 · 安全性 · ツール · トラブルシューティング · ハーネスの設定 · バックアップと復旧 · v1.x からの移行 · 変更履歴 · 貢献 · セキュリティ
デモ
セッションの例(抜粋):
あなた: Acme launch プロジェクトの状況はどうですか?
エージェント が
leantime_project_contextを呼び出します — 進捗、健全性、スプリント、マイルストーンを 1 回の呼び出しで取得します:{ "project": { "name": "Acme launch", "progress": { "percentDone": 64.5, "ticketsTotal": 279, "ticketsDone": 180 } }, "health": { "blocked": 0, "overdue": 7, "unassigned": 3, "openTotal": 99 }, "currentSprint": { "name": "Sprint 4", "status": "current", "daysRemaining": 6, "openTickets": 8 } }エージェント: Acme launch は 64.5%(279 件中 180 件のチケットが完了)です。未完了のチケットは 99 件で、期限超過が 7 件、未割り当てが 3 件、ブロック中のチケットはありません。Sprint 4 は 6 日後に終了し、未完了のチケットが 8 件あります。進行中のマイルストーン(PHASE 8)は 47.8%です。
特長
- 42 個のツール:プロジェクト、チケット、サブタスク、マイルストーン、スプリント、コメント、時間追跡、一括操作
leantime_project_context— 進捗、健全性、スプリント、マイルストーンを含むプロジェクト全体の概要を、4 KB 未満で 1 回の呼び出しで取得- すべての変更操作で
dryRun: trueを指定可能 — 同じ検証を実行し、更新時はfrom → toの差分を表示します。書き込みリクエストは送信しません - 作成ツールで
idempotencyKeyを指定可能 — すでに成功したキーで呼び出しを再試行すると、重複して書き込むのではなく、元の結果を再生します - 結果エンベロープ:上限に達したリストでは構造化された
truncatedを、更新ではchanged/unchangedの差分を返します — エージェントは呼び出しによって実際に行われた処理を確認できます LEANTIME_MCP_PROFILE=readonly— 書き込み機能をすべて無効にする、サーバー全体に適用される実行プロファイル- バックアップの保持期間(
LEANTIME_MCP_BACKUP_RETENTION_DAYS)、アトミックなバックアップ書き込み、すべての旧 ID と新 ID の対応を記録した復元マニフェスト - 最大 50 件の一括操作。事前に検証します(作成時は全件成功または全件失敗)
- バックアップと復元 — プロジェクトをローカルの JSON にスナップショットし、新しいプロジェクトに再構築します
- エージェントから透過的に処理される、適応型のレート制限リトライ
- ローカルのキーリング(モード 0600)に認証情報を保存 — ハーネスの設定にはコマンドのみを記述します
- 削除には確認が必要です。緊急停止には
LEANTIME_MCP_DESTRUCTIVE_POLICY=denyを設定します - インスタンスごとのツール管理 — 使用しないツールを無効にでき、2 つのコマンドで読み取り専用モードに切り替えられます
- Markdown → Leantime リッチ HTML への変換をサーバー側で決定論的に実行
インストール
Linux / macOS(x86_64、aarch64):
curl -fsSL https://raw.githubusercontent.com/4lador/leantime-mcp/main/install.sh | sh
Windows(PowerShell):
irm https://raw.githubusercontent.com/4lador/leantime-mcp/main/install.ps1 | iex
どちらのインストーラーも、公開されている SHA-256 チェックサムを検証してからインストールし、不一致がある場合は中止します。リリースバイナリは リリースページ で全 5 ターゲット(Linux(x86_64、aarch64)、Windows x86_64、macOS(Intel、ARM))を提供しています。
cargo 経由(Rust ツールチェーンが必要です):
cargo install leantime-mcp # installs the leantmcp binary to ~/.cargo/bin
ソースからビルド:
cargo build --release # → target/release/leantmcp
クイックスタート
leantmcp url set https://your-instance.leantime.io # once
leantmcp key set # once — hidden prompt
leantmcp setup <your-harness> # writes the config
leantmcp doctor # verify everything end-to-end
Leantime API キーは、お使いのインスタンスの My Account → API Keys → Generate から取得できます。
| ハーネス | デフォルトの適用範囲 | 設定ファイル |
|---|---|---|
| opencode | グローバル | ~/.opencode/opencode.json |
| Claude Code | プロジェクト | ./.mcp.json |
| Claude Desktop | グローバル | claude_desktop_config.json(パスは OS によって異なります) |
| Cursor | グローバル | ~/.cursor/mcp.json |
| Codex | グローバル | ~/.codex/config.toml |
生成される設定はすべて、認証情報を含まないコマンドのみです — バイナリは起動時にキーリングから認証情報を取得します。プロジェクト単位の設定、--scope/--instance/--name オプション、複数のインスタンスについては、ハーネスのセットアップを参照してください。
設定
認証情報は名前付きインスタンスプロファイル(~/.config/leantime/instances/<name>/)に保存されます(api-key、モード 0600、および instance-url)。デフォルトを指定する default ファイルもあります。キーはキーリングファイルまたは環境変数から読み取られ、コマンドライン引数としては受け付けられません(シェル履歴に残るため)。また、ログにも記録されません。キー関連のコマンドは CLI 専用であり、MCP ツールとして公開されません。
leantmcp url show # resolved URL + where it comes from
leantmcp key show # masked display (lt_h13…Fc3O)
leantmcp key test # live validation against the instance
leantmcp key rotate # mint a new key (same role), verify it live, replace the stored one
leantmcp instance add … # multiple Leantime instances (see Harness setup)
LEANTIME_URL/LEANTIME_API_KEY 環境変数は、引き続き実行ごとの上書きに使用できます。LEANTIME_INSTANCE でプロファイルを選択します。解決順序:環境変数(明示的な上書き)→ LEANTIME_INSTANCE プロファイル → default ファイル。
安全性
このソフトウェアは無保証(MIT)で提供されています。このソフトウェアは、ユーザーに代わって API キーを使って Leantime を操作します。エージェントに操作させる前に、Leantime のデータをバックアップしてください。
- 削除には確認が必要です(デフォルトでは
confirm: trueが必須です。LEANTIME_MCP_DESTRUCTIVE_POLICY=denyを指定すると削除を完全に拒否し、allowを指定すると CI で確認を省略します)。プロジェクトの非表示化と削除は、意図的に公開していません。 - ドライラン:すべての変更ツールで
dryRun: trueを指定できます。検証が実行され、更新ではfrom → toの値(ステータスラベルを含む)が解決され、一括ツールでは項目ごとのプレビューが返されますが、書き込みリクエストは送信されません。ツールの説明には、次の3段階のポリシーに基づくエージェント向けガイダンスが組み込まれています。明示された値は直接実行、エージェント自身が選んだ値はドライラン後に確認、一括操作ではドライランを必須とします。 - チケット/マイルストーンの作成時は担当者の指定が必須です(
editorIdを実際のユーザー一覧と照合して検証するか、unassigned: trueを明示します)。 - ツールの管理:無効化したツールは
tools/listから除外されるため(コンテキストウィンドウを消費しません)、呼び出しは実行可能な対処方法を示すエラーで拒否されます。読み取り専用モードにするには、leantmcp tools disable all && leantmcp tools enable readonlyを実行します。状態はインスタンスプロファイルごとに保存されます。 - まずバックアップ:
leantime_backup_project(MCP)またはleantmcp backup(CLI)を使うと、プロジェクトのスナップショットを低コストで作成できます。一括変更の前にこれを使うよう、エージェントに指示されています。バックアップと復旧を参照してください。
ツール
9つのドメインにわたる42個のツールがあります。プロジェクトとクライアント(8)、チケット(10)、コメント(4)、時間追跡(4)、マイルストーン(6)、スプリント(4)、ユーザー(1)、一括操作(3)、バックアップとコンテキスト(2)です。更新にはパッチ API を使用し、指定したフィールドだけが変更されます。説明では Markdown のサブセットを使用し、サーバー側で変換されます。入力内の生の HTML はエスケープされます。
サポート対象の Markdown サブセット(説明とコメント用)
| Markdown | 結果 |
|---|---|
# … #### | 見出し(レベル5以上は h4 に制限されます) |
| 空行で区切られたテキスト | 段落(単一の改行は改行として表示されます) |
- item / 1. item | 箇条書き/番号付きリスト(入れ子に対応) |
- [ ] x / - [x] x | インタラクティブなチェックリスト |
**bold**、*italic*、~~strike~~ | 強調 |
`code` とフェンス付きの ``` ブロック | インラインコードとコードブロック |
[label](https://…) | リンク(http/https/mailto のみ) |
> quote | 引用 |
--- | 水平線 |
説明内の生の HTML は、Leantime に送信される前にエスケープされ、文字列として表示されます。
42個すべてのツール(クリックして展開)
プロジェクトとクライアント
| ツール | 説明 |
|---|---|
leantime_list_projects | すべてのプロジェクトを一覧表示します |
leantime_get_project | プロジェクトの詳細を取得します |
leantime_get_project_progress | プロジェクトの進捗指標を取得します |
leantime_create_project | プロジェクトを作成します(Markdown の詳細情報、clientId が必須) |
leantime_update_project | プロジェクトを更新します(パッチ方式。指定したフィールドだけが変更されます) |
leantime_find_projects | 名前でプロジェクトを検索します |
leantime_list_project_users | プロジェクトに割り当てられたユーザーを一覧表示します(有効な editorId 候補) |
leantime_list_clients | クライアントを一覧表示します(プロジェクトの作成には clientId が必要です) |
チケット
| ツール | 説明 |
|---|---|
leantime_list_tickets | フィルター(ステータス、マイルストーン、スプリント、ユーザー、タイプ、検索)を指定してチケットを一覧表示します |
leantime_get_ticket | チケットの詳細を取得します |
leantime_create_ticket | チケットを作成します(Markdown の説明、担当者の指定が必須、dependingTicketId を使ったサブタスクの作成に対応。dryRun に対応) |
leantime_update_ticket | チケットを更新します(パッチ形式 — 指定したフィールドのみ変更。dryRun に対応) |
leantime_delete_ticket | チケットを削除します(確認が必要) |
leantime_list_subtasks | チケットのサブタスクを一覧表示します |
leantime_my_tasks | ユーザーに割り当てられた未完了のチケット(デフォルト:API キーの所有者) |
leantime_get_ticket_options | 優先度、作業量、カンバン列、チケットタイプを取得します |
leantime_get_statuses | プロジェクトのステータスラベルを取得します |
leantime_get_ticket_types | プロジェクトのチケットタイプを取得します |
コメント
| ツール | 説明 |
|---|---|
leantime_list_comments | チケットのディスカッションを一覧表示します |
leantime_add_comment | チケットにコメントします(Markdown をリッチ HTML に変換) |
leantime_update_comment | コメントを編集します(Markdown) |
leantime_delete_comment | コメントを削除します(確認が必要) |
時間記録
| ツール | 説明 |
|---|---|
leantime_log_time | チケットに作業時間を記録します(add は累積、set は冪等。dryRun に対応) |
leantime_get_ticket_time | チケットの合計記録時間と日別記録時間を取得します |
leantime_list_timesheets | 2 つの日付の間の時間記録を一覧表示します |
leantime_delete_timesheet_entry | 時間記録を削除します(確認が必要) |
マイルストーン
| ツール | 説明 |
|---|---|
leantime_list_milestones | プロジェクトのマイルストーンを一覧表示します |
leantime_get_milestone | マイルストーンの詳細を取得します |
leantime_create_milestone | マイルストーンを作成します(Markdown の説明、担当者の指定が必須。dryRun に対応) |
leantime_update_milestone | マイルストーンを更新します(パッチ形式。dryRun に対応) |
leantime_get_milestone_progress | 完了率(作業量 × 優先度で重み付け、Leantime の計算式) |
leantime_delete_milestone | マイルストーンを削除します(確認が必要。関連するチケットは保持されます) |
スプリント
| ツール | 説明 |
|---|---|
leantime_list_sprints | プロジェクトのスプリントを一覧表示します |
leantime_create_sprint | スプリントを作成します |
leantime_update_sprint | スプリントを更新します(名前/日付) |
leantime_get_current_sprint | 日付から判定した進行中(または次回開催予定)のスプリント |
ユーザー
| ツール | 説明 |
|---|---|
leantime_list_users | すべてのユーザー(ID、名前)を一覧表示します — 担当者の割り当てに使用 |
一括操作
| ツール | 説明 |
|---|---|
leantime_bulk_create_tickets | 最大 50 件のチケットを作成します — 事前に検証し、Markdown を変換して、項目ごとの結果を返します(dryRun に対応) |
leantime_bulk_update_tickets | パッチ形式で最大 50 件のチケットを更新します — 項目ごとの結果を返します(dryRun に対応) |
leantime_bulk_schedule_tickets | パッチ形式で最大 50 件のチケットをスケジュールします(スプリント、日付) |
バックアップとコンテキスト
| ツール | 説明 |
|---|---|
leantime_backup_project | プロジェクトをタイムスタンプ付きのローカル JSON ファイルに書き出します(マイルストーン、チケット、スプリント — 応答は概要のみで、データは含まれません) |
leantime_project_context | 1 回の呼び出しでプロジェクトの全体像を取得します(進捗、健全性、スプリント、マイルストーン、チケット概要、最近のアクティビティ) — 4 KB 未満で、エージェントが最初に呼び出すのに適しています |
バックアップと復元
leantmcp backup --project 3 --full # snapshot incl. comments (~/.config/leantime/backups/, 0600)
leantmcp restore backup.json # dry-run, then --confirm to execute
復元では新規作成されたプロジェクトにバックアップを書き込みます。既存のプロジェクトへのマージや書き込みは行いません。大規模なプロジェクトでは、日付範囲を指定したページネーションで処理します(ベストエフォートのスナップショットであり、アトミックではありません)。詳細、環境変数、レート制限の動作については、バックアップと復元をご覧ください。
トラブルシューティング
- まず
leantmcp doctorを実行してください — キーファイル、権限、設定、実際のインスタンスに対するキーを確認します。 - 一括操作に時間がかかる — 処理速度はインスタンスのレート制限によって決まります(Leantime のデフォルトは 10 req/min です)。再試行は透過的に行われますが、50 件のバッチには数分かかることがあります。レート制限の厳しいインスタンスでは、1 回の呼び出しにつき 10 件以下のまとまりに分けることをおすすめします。バッチの所要時間が一般的な MCP クライアントのタイムアウト(約 60 秒)を超えると推定される場合、ドライランと実行時の応答には、その旨を示す明示的な
warningsエントリが含まれます。進捗をリクエストする MCP クライアント(_meta.progressToken)には、すべての API 呼び出しとレート制限による待機のたびにnotifications/progressも送信されるため、タイムアウトを考慮するクライアントは呼び出しを継続できます。 - 変更後に「Ambiguous outcome」エラーが発生する — リクエスト送信後にインスタンスが一時的な 5xx を返しました。変更が適用されたかどうかは不明です。再試行する前に結果を確認してください(エンティティを再読み込みします)。確認せずに再試行すると、重複する可能性があります。
- キーが拒否される —
leantmcp key testで実際の環境に対して検証できます。leantmcp key rotateで新しいキーを生成し、差し替えられます。 - Windows — PowerShell インストーラーはバイナリを
%USERPROFILE%\.local\binに配置します。ここがPATHに含まれていることを確認してください。 - まだ解決しませんか? 問題を報告してください。
このツールが適さないケース
- ベンダーがサポートする公式の連携機能をお探しの場合 — Leantime の公式サービスをご利用ください。このプロジェクトは独立した非公式プロジェクトです。
- ホスト型/リモート(HTTP)の MCP サーバーが必要な場合 — leantmcp は stdio 専用で、MCP クライアントとともにローカルで動作します。
- プロジェクトの削除または非表示が必要な場合 — このサーバーでは意図的に公開していません。
開発
cargo build --release
cargo test # parallel works — env-mutating suites hold locks
cargo fmt --all --check && cargo clippy --all-targets -- -D warnings
固定バージョンの Docker Leantime と MySQL のインスタンスがリポジトリに含まれています(docker compose up -d を実行してから scripts/local-instance-bootstrap.sh を実行します)。テストスイート全体のガイドは CONTRIBUTING.md にあります。CI では Linux、Windows、macOS でユニットテストを実行するほか、Docker インスタンスに対する包括的な E2E テストスイートも実行します。
ライセンス
Leantime は各権利者の製品です。このプロジェクトは独立した非公式の連携機能であり、Leantime チームとは提携しておらず、同チームによる承認も受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。