Devflow Mcp

io.github.cocaxcode由 GitHub 帳號 cocaxcode 發布v0.1.8更新於 Oct 24, 2026

MCP server connecting Jira (Cloud + Server) with GitHub/GitLab. Branches, issues, PRs, flows.

已驗證STDIO僅桌面效率與工作流開發者工具

概覽

AI 產生的概覽

一個在本機執行的 MCP 伺服器,把 AI 助理連接到 Jira 與 GitHub/GitLab,用來管理議題、分支、合併請求與可重複的工作流程。

可以做什麼
設定、列出、切換與刪除專案,每個專案有自己的 Jira 實例、Git 供應商、分支慣例與目錄範圍,會依目前目錄自動對應,或依工作階段切換。讀取並操作 Jira 議題:列出指派給自己的議題、查看詳細內容、查詢可用的狀態轉換、變更狀態、指派與留言。操作 Git 分支與遠端:建立 feat/fix 分支、依議題編號尋找分支、切換、拉取、推送、合併,並建立拉取請求或合併請求。建立、修改與刪除 YAML 流程腳本,把多個工具步驟串成開始任務、完成任務等可重複的操作。建立、啟停與刪除全域或專案層級規則,用來阻擋或警告高風險動作。
適用情境
當團隊用 Jira 追蹤工作、程式碼放在 GitHub 或 GitLab,並希望助理把任務從議題一路推進到分支、提交、拉取請求與狀態更新,而不必開瀏覽器時使用。也適合在多個儲存庫、不同 Jira 實例與憑證之間切換的開發者。
執行需求
以 stdio 方式在本機執行,通常透過 npx 啟動,因此需要 Node.js。清單未宣告憑證;設定每個專案時需提供 Jira 網址、電子郵件與 API 權杖(Cloud)或個人存取權杖(Server),以及 GitHub 或 GitLab 權杖。需要能連線到 Jira 與 Git 供應商的網路,分支與推送操作還需要本機安裝 git 命令列工具。
安裝前請注意
會把 Jira 權杖與 GitHub/GitLab 個人存取權杖以明文 JSON 存放在使用者家目錄下的設定資料夾,請保護該資料夾並使用最小權限權杖。它可以推送、合併、建立拉取請求、變更議題狀態與張貼留言;其中多項會要求明確確認,但仍應在核准前檢查預覽。預設規則會阻擋直接合併到 main、關閉議題與修改他人的議題,且可依專案關閉。憑證只會傳送給已設定的 Jira 與 Git API。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Devflow Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

@cocaxcode/devflow-mcp

Your Jira + GitHub/GitLab workflow, handled by your AI assistant.
One MCP server. 32 tools. Say what you need, it gets done.

[npm version] [downloads] [tools] [tests] [node] [license]

Overview · Just Talk to It · Installation · Project Scopes · Tools · Flows · Rules · Storage · Compatibility · Architecture


Overview

The most complete MCP server for developer workflow automation. 32 tools that connect Jira (Cloud + Server) with GitHub/GitLab (cloud + self-hosted) — so your AI assistant can manage issues, branches, PRs, and deployments without you ever opening a browser tab.

It auto-detects your Jira version and git provider, enforces configurable safety rules, and lets you define custom YAML flow playbooks for repeatable workflows. Projects are configured once and remembered — each with its own Jira instance, git provider, branch conventions, credentials, and directory scopes. The project that matches your current directory activates automatically (default), or you can switch to another for the session (active). All credentials stay local in ~/.devflow-mcp/ — nothing is synced, nothing is tracked, nothing leaves your machine.


Just Talk to It

You don't memorize tool names. You talk naturally and the assistant picks the right tools.

"Set up a project for my 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)

"List my projects"

Projects:  my-backend    [default] [active]   scopes: C:/repos/my-backend  my-frontend                        scopes: C:/repos/my-frontend

"Switch to my-frontend for this session"

Active project switched to: my-frontend (session only)Default remains: my-backend (based on your current directory)

"Let's work on 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

"Show me my tasks for the ACME project"

ACME-45  Fix OAuth login             In Progress  HighACME-52  Dashboard refactor          To Do        MediumACME-61  Update dependencies         To Do        Low

"Push my changes"

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)

"Merge main into my current branch"

Conflict detected:  - src/auth/login.ts  - src/config/routes.ts
Resolve the files and commit to complete the merge.

"Create a PR titled 'feat: add OAuth login'"

PR created:  url: https://github.com/org/repo/pull/42  title: feat: add OAuth login  provider: github

"Comment on PROJ-123 that the PR is ready for review"

Preview:  issue: PROJ-123  comment: "PR ready for review: https://github.com/org/repo/pull/42"
Confirm? (confirm: true to publish)

"Create a fix branch for PROJ-456 with description fix-oauth-redirect"

Preview:  branch: fix/PROJ-456-fix-oauth-redirect  base: main  actions: checkout main → pull → create branch
Confirm? (confirm: true to execute)

Installation

Claude Code (recommended)

bash
# Global — available across all your projectsclaude mcp add --scope user devflow -- npx -y @cocaxcode/devflow-mcp@latest
# Per-projectclaude mcp add devflow -- npx -y @cocaxcode/devflow-mcp@latest

Claude Desktop

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
json
{  "mcpServers": {    "devflow": {      "command": "npx",      "args": ["-y", "@cocaxcode/devflow-mcp@latest"]    }  }}
Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{  "mcpServers": {    "devflow": {      "command": "npx",      "args": ["-y", "@cocaxcode/devflow-mcp@latest"]    }  }}

Cursor / Windsurf

json
// .cursor/mcp.json or .windsurf/mcp.json{  "mcpServers": {    "devflow": {      "command": "npx",      "args": ["-y", "@cocaxcode/devflow-mcp@latest"]    }  }}

VS Code / Codex / Gemini CLI

json
{  "mcpServers": {    "devflow": {      "command": "npx",      "args": ["-y", "@cocaxcode/devflow-mcp@latest"]    }  }}

Project Scopes

Each project has paths (scopes) — the directories that belong to it. A directory can only be the scope of one project.

This gives you two concepts:

  • Default project: The project whose scope matches your current working directory. This is automatic and persistent — if you are inside C:/repos/my-backend and that directory is a scope of my-backend, then my-backend is the default. No action needed.

  • Active project: The project you are currently working with. By default it equals the default project, but you can switch it manually with df_project_switch for the current session. This resets to the default when you restart.

df_project_list shows both the default and active indicators so you always know where you stand.

Practical example

"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)

This means you can work across multiple projects with different Jira instances and git providers — the right credentials are always selected based on where you are, and you can always override for the session when needed.


Tools

32 tools organized in 5 categories.

Projects (5)

ToolDescription
df_project_setupConfigure a new project (Jira + Git, auto-detects everything)
df_project_updateModify project configuration
df_project_listList all configured projects (shows default + active)
df_project_switchSwitch the active project for the current session
df_project_deleteDelete a project
Example: setting up a project
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)

ToolDescriptionConfirmation
df_issuesList my assigned issues (filters by project)--
df_issueFull issue detail--
df_statusesAvailable transitions for an issue--
df_transitionMove issue to another statusYes
df_assignAssign issue to current user--
df_commentComment on an issueYes

Git (7)

ToolDescriptionConfirmation
df_branchCreate branch (feat/ or fix/) from baseYes
df_find_branchSearch branch by issue key--
df_checkoutSwitch branch (with safety guard)--
df_pullPull current branch from remote--
df_pushPush current branch to remoteYes
df_mergeMerge a branch into the current oneYes
df_prCreate PR (GitHub) or MR (GitLab)--

Important: df_branch, df_checkout, and df_push verify the working directory before executing. They block if there are uncommitted files or unpushed commits, listing exactly what needs attention. This prevents accidental work loss.

Flows (5)

ToolDescription
df_flow_createCreate a custom flow
df_flow_listList all flows
df_flow_getView flow details
df_flow_updateModify an existing flow
df_flow_deleteDelete a flow (protects start-task)

Rules (9)

ToolDescriptionLevel
df_rule_createCreate a global ruleGlobal
df_rule_listList all rulesGlobal
df_rule_getView rule detailsGlobal
df_rule_updateModify a ruleGlobal
df_rule_toggleEnable/disable a ruleGlobal
df_rule_deleteDelete a ruleGlobal
df_rule_project_overrideEnable/disable a global rule for a projectProject
df_rule_project_addCreate a project-only ruleProject
df_rule_project_removeRemove a project rule or overrideProject

Flows

Flows are YAML playbooks that define step sequences. They don't run automatically -- you tell the assistant when to use them.

Default: start-task

Triggered when you say something like "let's work on PROJ-123":

yaml
name: start-tasktrigger: "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"

Custom flows

Create your own by asking naturally:

"Create a flow called 'finish-task' that pushes, creates a PR, and comments on Jira"

yaml
name: finish-tasktrigger: "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"

The start-task flow can be modified but not deleted. Use df_flow_update to change any flow's steps, trigger, or name.


Rules

Rules are configurable guards that block or warn about actions. Two levels: global and per-project.

Default rules

RuleScopeActionWhat it does
no-merge-to-basegitblockPrevent direct push/merge to main/master
no-merge-from-devgitblockPrevent merging dev/develop/int branches out
no-close-issuesjirablockPrevent closing issues (Done, Closed, Resolved...)
only-own-issuesjirablockPrevent modifying issues assigned to others

Project overrides

Each project can override global rules or define its own:

# Disable a global rule for one projectdf_rule_project_override: name="no-close-issues", enabled=false
# Add a project-only ruledf_rule_project_add: name="no-push-friday", scope="git", action="warn"
# Remove an override or project ruledf_rule_project_remove: name="no-close-issues"

Custom rules

df_rule_create:  name: "no-push-friday"  description: "Warn when pushing on Fridays"  scope: "git"       # git | jira | all  action: "warn"     # block | warn

Note: Rule resolution order: Global rules load first, then project overrides are applied (project wins), then project-specific rules are added. Rules are filtered by scope and enabled state before evaluation.


Storage

Everything lives in ~/.devflow-mcp/ — your home directory, never inside any git repository. Jira tokens, GitHub PATs, GitLab tokens — all stored locally with 600 permissions (owner-only read/write). Nothing gets committed, nothing gets pushed, nothing leaves your machine.

~/.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

Project resolution works automatically: devflow-mcp matches your current working directory against each project's paths (scopes). The matching project becomes the default. You can override it for the session with df_project_switch, which sets the active project. On restart, the active project resets to whatever the default is for your CWD. If no match is found and no active project is set, it prompts you to configure with df_project_setup.


Compatibility

Jira

TypeAPIAuthentication
Jira CloudREST API v3Email + API Token (Basic)
Jira Server / Data CenterREST API v2Personal Access Token (Bearer)

Auto-detection via /rest/api/2/serverInfo -- no manual configuration needed.

Git providers

ProviderAPI
GitHub (cloud)REST API v3
GitHub EnterpriseREST API v3 (custom URL)
GitLab (cloud)REST API v4
GitLab self-hostedREST API v4 (custom URL)

Auto-detection by parsing the repository's remote URL.


Architecture

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

Stack: TypeScript · MCP SDK · Zod · YAML · tsup

Tests: 4 suites · 51 tests (Vitest + InMemoryTransport)


MIT · Built by cocaxcode

來源:README.md,提交 cf9e2b0

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.8最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分