devflow-mcp について
devflow-mcpは、JiraとGitHub/GitLabを接続し、課題や開発ワークフローを扱うチーム向けのMCPサーバーです。プロジェクトごとの設定、YAMLフロー、重要な操作の確認やルールによる制御に対応します。
主な機能
- 01Jiraの課題とステータス管理
- 02ブランチ作成、プッシュ、PR/MR作成
- 03ディレクトリに応じた設定選択
- 04YAMLフローと安全ルールの定義
- 05認証情報と設定のローカル保存
活用シーン
- 01Jira課題からコードブランチを作成
- 02課題を確認して状態やコメントを更新
- 03変更をプッシュしてPRまたはMRを作成
- 04プロジェクト別の定型ワークフローを実行
MCP 対応
このMCPサーバーは、Jira、GitHub、GitLabの課題やコード作業を操作するツールをMCPクライアントに提供します。課題、ブランチ、コミット、PR/MRを管理できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
32掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | はい | プロジェクト名 |
| gitUrl | string | いいえ | セルフホスト型 GitLab のベース URL(例:https://gitlab.empresa.com)。指定されていない場合は、remote から取得します。 |
| jiraPat | string | いいえ | Jira Server 用のパーソナルアクセストークン |
| jiraUrl | string | はい | Jira の URL(例:https://myteam.atlassian.net) |
| gitToken | string | はい | GitHub または GitLab のトークン |
| jiraEmail | string | いいえ | Jira Cloud 用のメールアドレス |
| jiraToken | string | いいえ | Jira Cloud 用の API トークン |
| gitProject | string | いいえ | GitLab のプロジェクトの完全なパス(例:grupo/subgrupo/repo)。remote がフォークで、メインプロジェクトにリンクしたい場合に便利です。 |
| jiraProjectKey | string | はい | Jira のプロジェクトキー(例:PROJ、DEV、BACK) |
詳細
@cocaxcode/devflow-mcp
Jira と GitHub/GitLab のワークフローを、AI アシスタントに任せましょう。
1 つの MCP サーバー。32 個のツール。必要なことを伝えるだけで、実行されます。
概要 · 話しかけるだけ · インストール · プロジェクトスコープ · ツール · フロー · ルール · ストレージ · 互換性 · アーキテクチャ
概要
開発者のワークフローを自動化する、最も包括的な MCP サーバーです。32 個のツールで Jira(Cloud + Server)と GitHub/GitLab(クラウド + セルフホスト)を連携し、ブラウザーを開かずに AI アシスタントから課題、ブランチ、PR、デプロイを管理できます。
Jira のバージョンと Git プロバイダーを自動検出し、設定可能な安全ルールを適用します。また、繰り返し使えるワークフローのために、カスタム YAML フロープレイブックを定義できます。プロジェクトは一度設定すれば記憶されます。それぞれに独自の Jira インスタンス、Git プロバイダー、ブランチ規約、認証情報、ディレクトリスコープを設定できます。現在のディレクトリに一致するプロジェクトが自動で有効になります(デフォルト)。または、セッション中に別のプロジェクトへ切り替えることもできます(アクティブ)。認証情報はすべてローカルの ~/.devflow-mcp/ に保存されます。同期も、追跡もされず、マシンの外部に送信されることもありません。
話しかけるだけ
ツール名を覚える必要はありません。自然に話しかけると、アシスタントが適切なツールを選びます。
「Jira + GitHub 用のプロジェクトを設定して」
> df_project_setup with:
name: "my-backend"
jiraUrl: "https://myteam.atlassian.net"
jiraEmail: "[email protected]"
jiraToken: "ATATT3x..."
jiraProjectKey: "PROJ"
gitToken: "ghp_..."
Auto-detects:
- Jira Cloud (API v3)
- GitHub (org/my-backend)
- Base branch: main
- Scope: C:/repos/my-backend (your CWD, auto-added)
「プロジェクトの一覧を表示して」
Projects:
my-backend [default] [active] scopes: C:/repos/my-backend
my-frontend scopes: C:/repos/my-frontend
「このセッションでは my-frontend に切り替えて」
Active project switched to: my-frontend (session only)
Default remains: my-backend (based on your current directory)
「PROJ-123 に取り組もう」
> Reading PROJ-123...
Title: Add OAuth login
Status: To Do | Priority: High
> Branch feat/PROJ-123 not found. Creating...
branch: feat/PROJ-123-add-oauth-login
base: main
Confirm? (confirm: true to execute)
> Moved PROJ-123 → In Progress
> Assigned to you
「ACME プロジェクトのタスクを表示して」
ACME-45 Fix OAuth login In Progress High
ACME-52 Dashboard refactor To Do Medium
ACME-61 Update dependencies To Do Low
「変更をプッシュして」
Preview:
branch: feat/PROJ-123-add-oauth-login
pending commits:
- a1b2c3d feat: add login component
- d4e5f6g feat: add auth service
Confirm? (confirm: true to execute)
「現在のブランチに main をマージして」
Conflict detected:
- src/auth/login.ts
- src/config/routes.ts
Resolve the files and commit to complete the merge.
「'feat: add OAuth login' というタイトルで PR を作成して」
PR created:
url: https://github.com/org/repo/pull/42
title: feat: add OAuth login
provider: github
「PROJ-123 に、PR のレビュー準備ができたとコメントして」
Preview:
issue: PROJ-123
comment: "PR ready for review: https://github.com/org/repo/pull/42"
Confirm? (confirm: true to publish)
「説明を fix-oauth-redirect として、PROJ-456 用の修正ブランチを作成して」
Preview:
branch: fix/PROJ-456-fix-oauth-redirect
base: main
actions: checkout main → pull → create branch
Confirm? (confirm: true to execute)
インストール
Claude Code(推奨)
# Global — available across all your projects
claude mcp add --scope user devflow -- npx -y @cocaxcode/devflow-mcp@latest
# Per-project
claude mcp add devflow -- npx -y @cocaxcode/devflow-mcp@latest
Claude Desktop
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"devflow": {
"command": "npx",
"args": ["-y", "@cocaxcode/devflow-mcp@latest"]
}
}
}
Windows:%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"devflow": {
"command": "npx",
"args": ["-y", "@cocaxcode/devflow-mcp@latest"]
}
}
}
Cursor / Windsurf
// .cursor/mcp.json or .windsurf/mcp.json
{
"mcpServers": {
"devflow": {
"command": "npx",
"args": ["-y", "@cocaxcode/devflow-mcp@latest"]
}
}
}
VS Code / Codex / Gemini CLI
{
"mcpServers": {
"devflow": {
"command": "npx",
"args": ["-y", "@cocaxcode/devflow-mcp@latest"]
}
}
}
プロジェクトのスコープ
各プロジェクトにはパス(スコープ)があります。これは、そのプロジェクトに属するディレクトリです。1つのディレクトリを複数のプロジェクトのスコープにすることはできません。
これにより、次の2つの概念が生まれます。
-
デフォルトプロジェクト:現在の作業ディレクトリとスコープが一致するプロジェクトです。自動的に設定され、維持されます。
C:/repos/my-backend内にいて、そのディレクトリがmy-backendのスコープなら、my-backendがデフォルトプロジェクトです。操作は必要ありません。 -
アクティブプロジェクト:現在作業しているプロジェクトです。デフォルトではデフォルトプロジェクトと同じですが、現在のセッション中に
df_project_switchで手動で切り替えられます。再起動するとデフォルトプロジェクトに戻ります。
df_project_list ではデフォルトとアクティブの両方の表示を確認できるため、現在の状態をいつでも把握できます。
実用例
"Set up a project called my-backend"
→ CWD (C:/repos/my-backend) is auto-added as scope
"Set up another called my-frontend"
→ Run from C:/repos/my-frontend, that directory becomes its scope
"List projects"
→ my-backend [default] [active] scopes: C:/repos/my-backend
my-frontend scopes: C:/repos/my-frontend
"Switch to my-frontend"
→ Session switches. Now my-frontend is active for checking issues, etc.
"List projects"
→ my-backend [default] scopes: C:/repos/my-backend
my-frontend [active] scopes: C:/repos/my-frontend
Close and reopen → my-backend is active again (matches CWD = default)
つまり、異なる Jira インスタンスや Git プロバイダーを使う複数のプロジェクトをまたいで作業できます。現在の場所に基づいて適切な認証情報が常に選択され、必要な場合はセッション中にいつでも上書きできます。
ツール
5つのカテゴリに整理された32個のツールです。
プロジェクト(5)
| ツール | 説明 |
|---|---|
df_project_setup | 新しいプロジェクトを設定します(Jira + Git。すべてを自動検出します) |
df_project_update | プロジェクトの設定を変更します |
df_project_list | 設定済みのすべてのプロジェクトを一覧表示します(デフォルト + アクティブを表示) |
df_project_switch | 現在のセッションでアクティブプロジェクトを切り替えます |
df_project_delete | プロジェクトを削除します |
例:プロジェクトの設定
df_project_setup with:
name: "my-project"
jiraUrl: "https://myteam.atlassian.net"
jiraEmail: "[email protected]"
jiraToken: "ATATT3x..."
jiraProjectKey: "PROJ"
gitToken: "ghp_..."
Auto-detects:
- Jira Cloud (API v3)
- GitHub (org/my-project)
- Base branch: main
- Scope: your CWD (auto-added)
Jira(6)
| ツール | 説明 | 確認 |
|---|---|---|
df_issues | 自分に割り当てられた課題を一覧表示します(プロジェクトで絞り込み) | -- |
df_issue | 課題の詳細全体を表示します | -- |
df_statuses | 課題で利用可能なステータス遷移を表示します | -- |
df_transition | 課題を別のステータスに移動します | はい |
df_assign | 課題を現在のユーザーに割り当てます | -- |
df_comment | 課題にコメントします | はい |
Git(7)
| ツール | 説明 | 確認 |
|---|---|---|
df_branch | ベースからブランチ(feat/ または fix/)を作成します | はい |
df_find_branch | 課題キーでブランチを検索します | -- |
df_checkout | ブランチを切り替えます(安全チェック付き) | -- |
df_pull | 現在のブランチをリモートからプルします | -- |
df_push | 現在のブランチをリモートにプッシュします | はい |
df_merge | ブランチを現在のブランチにマージします | はい |
df_pr | PR(GitHub)またはMR(GitLab)を作成します | -- |
重要:
df_branch、df_checkout、df_pushは実行前に作業ディレクトリを確認します。未コミットのファイルや未プッシュのコミットがある場合は処理をブロックし、対応が必要な項目を正確に表示します。これにより、誤って作業を失うことを防ぎます。
フロー(5)
| ツール | 説明 |
|---|---|
df_flow_create | カスタムフローを作成します |
df_flow_list | すべてのフローを一覧表示します |
df_flow_get | フローの詳細を表示します |
df_flow_update | 既存のフローを変更します |
df_flow_delete | フローを削除します(start-task は保護されます) |
ルール(9)
| ツール | 説明 | レベル |
|---|---|---|
df_rule_create | グローバルルールを作成します | グローバル |
df_rule_list | すべてのルールを一覧表示します | グローバル |
df_rule_get | ルールの詳細を表示します | グローバル |
df_rule_update | ルールを変更します | グローバル |
df_rule_toggle | ルールを有効化/無効化します | グローバル |
df_rule_delete | ルールを削除します | グローバル |
df_rule_project_override | プロジェクトに対してグローバルルールを有効化/無効化します | プロジェクト |
df_rule_project_add | プロジェクト専用のルールを作成します | プロジェクト |
df_rule_project_remove | プロジェクトルールまたはオーバーライドを削除します | プロジェクト |
フロー
フローは、手順のシーケンスを定義する YAML プレイブックです。自動では実行されません。使用するタイミングはアシスタントに指示します。
デフォルト:start-task
「PROJ-123 に取り組みましょう」のように伝えると起動します。
name: start-task
trigger: "when the user says 'let's work on', 'start task', 'new task' + issue ID"
steps:
- tool: df_issue
note: "Read issue detail and summarize the task"
- tool: df_find_branch
note: "Check if a branch already exists for this issue"
- tool: df_branch
confirm: true
note: "Only if no existing branch was found"
- tool: df_statuses
note: "Get transitions to find the 'In Progress' transition ID"
- tool: df_transition
target: "In Progress"
confirm: true
- tool: df_assign
note: "Assign the issue if it has no assignee"
カスタムフロー
自然な言葉で依頼して、自分だけのフローを作成できます。
「
finish-taskというフローを作成して、プッシュし、PRを作成して、Jiraにコメントしてください」
name: finish-task
trigger: "when the user says 'finish task', 'wrap up' + issue ID"
steps:
- tool: df_push
confirm: true
note: "Push pending commits"
- tool: df_pr
note: "Create PR/MR to base branch"
- tool: df_comment
confirm: true
note: "Comment on the issue with the PR link"
start-taskフローは変更できますが、削除はできません。df_flow_updateを使用して、フローのステップ、トリガー、または名前を変更できます。
ルール
ルールは設定可能なガードで、アクションをブロックまたは警告します。グローバルとプロジェクトごとの2つのレベルがあります。
デフォルトルール
| ルール | スコープ | アクション | 機能 |
|---|---|---|---|
no-merge-to-base | git | block | main/masterへの直接のプッシュやマージを防止します |
no-merge-from-dev | git | block | dev/develop/intのブランチを他のブランチへマージすることを防止します |
no-close-issues | jira | block | 課題をクローズすること(Done、Closed、Resolvedなど)を防止します |
only-own-issues | jira | block | 他のユーザーに割り当てられた課題の変更を防止します |
プロジェクトごとのオーバーライド
各プロジェクトでは、グローバルルールをオーバーライドしたり、独自のルールを定義したりできます。
# Disable a global rule for one project
df_rule_project_override: name="no-close-issues", enabled=false
# Add a project-only rule
df_rule_project_add: name="no-push-friday", scope="git", action="warn"
# Remove an override or project rule
df_rule_project_remove: name="no-close-issues"
カスタムルール
df_rule_create:
name: "no-push-friday"
description: "Warn when pushing on Fridays"
scope: "git" # git | jira | all
action: "warn" # block | warn
注: **ルールの解決順序:**最初にグローバルルールが読み込まれ、次にプロジェクトのオーバーライドが適用されます(プロジェクト側が優先)。その後、プロジェクト固有のルールが追加されます。評価の前に、スコープと有効状態に基づいてルールが絞り込まれます。
ストレージ
すべてのデータは~/.devflow-mcp/(ホームディレクトリ)に保存され、gitリポジトリ内に置かれることはありません。Jiraトークン、GitHub PAT、GitLabトークンはすべて、600権限(所有者のみ読み書き可能)でローカルに保存されます。コミットもプッシュもされず、マシンの外部に送信されることもありません。
~/.devflow-mcp/
├── projects/ # Project configs (.json) — credentials included
│ ├── my-project.json # Jira URL, token, GitHub PAT, branch rules, scopes
│ └── other-project.json
├── flows/ # Flow definitions (.yaml)
│ └── start-task.yaml
├── rules/ # Global rules (.json)
│ ├── no-merge-to-base.json
│ ├── no-merge-from-dev.json
│ ├── no-close-issues.json
│ └── only-own-issues.json
├── active-project # Current active project (plain text)
└── config.json # Server configuration
プロジェクトの解決は自動で行われます。devflow-mcpは、現在の作業ディレクトリと各プロジェクトのpaths(スコープ)を照合します。一致したプロジェクトがデフォルトになります。df_project_switchを使用すれば、セッション中にアクティブなプロジェクトを切り替えられます。再起動すると、アクティブなプロジェクトはCWDに対するデフォルトのプロジェクトにリセットされます。一致するプロジェクトが見つからず、アクティブなプロジェクトも設定されていない場合は、df_project_setupで設定するよう求められます。
互換性
Jira
| タイプ | API | 認証 |
|---|---|---|
| Jira Cloud | REST API v3 | メールアドレス + API Token(Basic) |
| Jira Server / Data Center | REST API v2 | Personal Access Token(Bearer) |
/rest/api/2/serverInfoを使用して自動検出されるため、手動での設定は不要です。
Gitプロバイダー
| プロバイダー | API |
|---|---|
| GitHub(クラウド) | REST API v3 |
| GitHub Enterprise | REST API v3(カスタムURL) |
| GitLab(クラウド) | REST API v4 |
| GitLab self-hosted | REST API v4(カスタムURL) |
リポジトリのリモートURLを解析して自動検出します。
アーキテクチャ
src/
├── index.ts # Entry point (stdio transport)
├── server.ts # Factory: createServer() + instructions
├── lib/
│ ├── types.ts # Interfaces, defaults, valid tool names
│ ├── storage.ts # CRUD: projects, flows, rules, config
│ ├── git-exec.ts # Git CLI wrapper (execFile)
│ ├── jira/
│ │ ├── client.ts # JiraClient (Cloud v3 + Server v2)
│ │ └── types.ts # Raw Jira API response shapes
│ └── git/
│ ├── detect.ts # parseRemoteUrl (SSH/HTTPS, GitHub/GitLab)
│ ├── github.ts # GitHubClient (REST API v3)
│ ├── gitlab.ts # GitLabClient (REST API v4)
│ ├── factory.ts # createGitProviderClient()
│ └── types.ts # Git provider interfaces
└── tools/
├── project.ts # 5 tools: setup, update, list, switch, delete
├── jira.ts # 6 tools: issues, issue, statuses, transition, assign, comment
├── git.ts # 7 tools: branch, find_branch, checkout, pull, push, merge, pr
├── flow.ts # 5 tools: create, list, get, update, delete
└── rule.ts # 9 tools: CRUD global + 3 project-level
**スタック:**TypeScript · MCP SDK · Zod · YAML · tsup
**テスト:**4スイート · 51テスト(Vitest + InMemoryTransport)
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。