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 分