devflow MCP server
✓ 인증됨Jira를 GitHub 및 GitLab과 연결하여 AI 어시스턴트를 통해 이슈 관리, 브랜치 생성, pull request 및 개발자 워크플로우를 자동화합니다.
다른 이름 cocaxcode/devflow-mcp, @cocaxcode/devflow-mcp
- 스타
- 1
- Tools
- 32
- 다운로드, 30일
- 311
- 최신 버전
- 0.1.8
- 마지막 커밋
- 2026년 3월 29일
- 라이선스
- MIT
devflow MCP란?
devflow은(는) MCP server입니다. Jira를 GitHub 및 GitLab과 연결하여 AI 어시스턴트를 통해 이슈 관리, 브랜치 생성, pull request 및 개발자 워크플로우를 자동화합니다. 32개 도구를 제공합니다. 예: df_project_setup, df_project_update, df_project_list.
프로젝트 README에서 생성된 요약
devflow MCP server 정보
devflow-mcp는 AI 어시스턴트를 사용하는 개발자가 Jira와 GitHub 또는 GitLab 같은 Git 제공업체 간의 연결을 자동화할 수 있도록 지원합니다. 이 MCP server는 AI가 이슈 상세 정보 읽기, 상태 전환부터 브랜치 생성, 코드 푸시, pull request 생성에 이르기까지 작업의 전체 라이프사이클을 관리할 수 있는 32개의 도구를 제공합니다. Jira Cloud와 Server는 물론, 클라우드 또는 셀프 호스팅 Git 환경을 모두 지원합니다.
사용자는 특정 스코프를 정의하여 프로젝트를 설정할 수 있으며, 이 스코프는 올바른 자격 증명과 설정을 자동으로 트리거하는 로컬 디렉토리입니다. 이를 통해 서로 다른 코드 저장소를 이동할 때 수동 전환 없이도 어시스턴트가 적절한 Jira 인스턴스와 Git 토큰을 사용하도록 보장합니다. 모든 민감한 자격 증명은 개인정보 보호를 위해 로컬 홈 디렉토리에만 저장됩니다. 또한 flows라고 불리는 커스텀 YAML playbook을 지원하여 복잡한 워크플로우를 위한 반복 가능한 도구 호출 시퀀스를 정의할 수 있습니다.
활용 사례
- 1pull request 워크플로우 간소화변경 사항을 푸시하고, pull request를 생성하며, 해당 링크를 Jira 이슈에 댓글로 추가하여 코딩 작업을 마무리합니다.
- 2다중 프로젝트 환경 관리서로 다른 Jira 인스턴스와 Git 제공업체를 사용하는 다양한 백엔드 및 프론트엔드 저장소 간을 자동으로 전환합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
devflow MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 devflow MCP 설치
$ claude mcp add devflow-mcp -- npx -y @cocaxcode/devflow-mcpCursor에 devflow MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"devflow-mcp": {
"command": "npx",
"args": [
"-y",
"@cocaxcode/devflow-mcp"
]
}
}
}VS Code에 devflow MCP 설치
.vscode/mcp.json
{
"servers": {
"devflow-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cocaxcode/devflow-mcp"
]
}
}
}VS Code CLI에 devflow MCP 설치
$ code --add-mcp '{"name":"devflow-mcp","type":"stdio","command":"npx","args":["-y","@cocaxcode/devflow-mcp"]}'Claude Desktop에 devflow MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"devflow-mcp": {
"command": "npx",
"args": [
"-y",
"@cocaxcode/devflow-mcp"
]
}
}
}Codex에 devflow MCP 설치
$ codex mcp add devflow-mcp -- npx -y @cocaxcode/devflow-mcpCodex config.toml에 devflow MCP 설치
~/.codex/config.toml
[mcp_servers.devflow-mcp] command = "npx" args = ["-y", "@cocaxcode/devflow-mcp"]
Gemini CLI에 devflow MCP 설치
$ gemini mcp add -s user devflow-mcp npx -- -y @cocaxcode/devflow-mcpGemini settings.json에 devflow MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"devflow-mcp": {
"command": "npx",
"args": [
"-y",
"@cocaxcode/devflow-mcp"
]
}
}
}devflow MCP 도구 32
README에서 감지됨df_project_setupdf_project_updatedf_project_listdf_project_switchdf_project_deletedf_issuesdf_issuedf_statusesdf_transitiondf_assigndf_commentdf_branch
| df_project_setup | — | |
| df_project_update | — | |
| df_project_list | — | |
| df_project_switch | — | |
| df_project_delete | — | |
| df_issues | — | |
| df_issue | — | |
| df_statuses | — | |
| df_transition | — | |
| df_assign | — | |
| df_comment | — | |
| df_branch | — |
도구 32개 모두 보기도구 수 줄이기
df_find_branchdf_checkoutdf_pulldf_pushdf_mergedf_prdf_flow_createdf_flow_listdf_flow_getdf_flow_updatedf_flow_deletedf_rule_createdf_rule_listdf_rule_getdf_rule_updatedf_rule_toggledf_rule_deletedf_rule_project_overridedf_rule_project_adddf_rule_project_remove
| df_find_branch | — | |
| df_checkout | — | |
| df_pull | — | |
| df_push | — | |
| df_merge | — | |
| df_pr | — | |
| df_flow_create | — | |
| df_flow_list | — | |
| df_flow_get | — | |
| df_flow_update | — | |
| df_flow_delete | — | |
| 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 | — |
자동 검사
2026년 11월 15일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능cocaxcode/devflow-mcp is public and reachablegithub.com/cocaxcode/devflow-mcp ↗통과
- 패키지가 이 저장소를 소스로 명시@cocaxcode/devflow-mcp names cocaxcode/devflow-mcp as sourcenpmjs.com/package/@cocaxcode/devflow-mcp ↗통과
- 빌드 출처(Sigstore 증명)No build attestation published for this release검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-03-29github.com/cocaxcode/devflow-mcp ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음No popular package one edit away from @cocaxcode/devflow-mcp통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음100 resolved dependencies checked; no critical advisoryosv.dev ↗통과
- 모델에 대한 숨겨진 지침 없음32 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기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: "dev@myteam.com"
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 High
ACME-52 Dashboard refactor To Do Medium
ACME-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)
# 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
{
"mcpServers": {
"devflow": {
"command": "npx",
"args": ["-y", "@cocaxcode/devflow-mcp@latest"]
}
}
}
{
"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"]
}
}
}
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-backendand that directory is a scope ofmy-backend, thenmy-backendis 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_switchfor 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)
| Tool | Description |
|---|---|
df_project_setup |
Configure a new project (Jira + Git, auto-detects everything) |
df_project_update |
Modify project configuration |
df_project_list |
List all configured projects (shows default + active) |
df_project_switch |
Switch the active project for the current session |
df_project_delete |
Delete a project |
df_project_setup with:
name: "my-project"
jiraUrl: "https://myteam.atlassian.net"
jiraEmail: "dev@myteam.com"
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)
| Tool | Description | Confirmation |
|---|---|---|
df_issues |
List my assigned issues (filters by project) | -- |
df_issue |
Full issue detail | -- |
df_statuses |
Available transitions for an issue | -- |
df_transition |
Move issue to another status | Yes |
df_assign |
Assign issue to current user | -- |
df_comment |
Comment on an issue | Yes |
Git (7)
| Tool | Description | Confirmation |
|---|---|---|
df_branch |
Create branch (feat/ or fix/) from base |
Yes |
df_find_branch |
Search branch by issue key | -- |
df_checkout |
Switch branch (with safety guard) | -- |
df_pull |
Pull current branch from remote | -- |
df_push |
Push current branch to remote | Yes |
df_merge |
Merge a branch into the current one | Yes |
df_pr |
Create PR (GitHub) or MR (GitLab) | -- |
Important:
df_branch,df_checkout, anddf_pushverify 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)
| Tool | Description |
|---|---|
df_flow_create |
Create a custom flow |
df_flow_list |
List all flows |
df_flow_get |
View flow details |
df_flow_update |
Modify an existing flow |
df_flow_delete |
Delete a flow (protects start-task) |
Rules (9)
| Tool | Description | Level |
|---|---|---|
df_rule_create |
Create a global rule | Global |
df_rule_list |
List all rules | Global |
df_rule_get |
View rule details | Global |
df_rule_update |
Modify a rule | Global |
df_rule_toggle |
Enable/disable a rule | Global |
df_rule_delete |
Delete a rule | Global |
df_rule_project_override |
Enable/disable a global rule for a project | Project |
df_rule_project_add |
Create a project-only rule | Project |
df_rule_project_remove |
Remove a project rule or override | Project |
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":
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"
Custom flows
Create your own by asking naturally:
"Create a flow called 'finish-task' that pushes, creates a PR, and comments on 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"
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
| Rule | Scope | Action | What it does |
|---|---|---|---|
no-merge-to-base |
git | block | Prevent direct push/merge to main/master |
no-merge-from-dev |
git | block | Prevent merging dev/develop/int branches out |
no-close-issues |
jira | block | Prevent closing issues (Done, Closed, Resolved...) |
only-own-issues |
jira | block | Prevent modifying issues assigned to others |
Project overrides
Each project can override global rules or define its own:
# 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"
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
| Type | API | Authentication |
|---|---|---|
| Jira Cloud | REST API v3 | Email + API Token (Basic) |
| Jira Server / Data Center | REST API v2 | Personal Access Token (Bearer) |
Auto-detection via /rest/api/2/serverInfo -- no manual configuration needed.
Git providers
| Provider | API |
|---|---|
| GitHub (cloud) | REST API v3 |
| GitHub Enterprise | REST API v3 (custom URL) |
| GitLab (cloud) | REST API v4 |
| GitLab self-hosted | REST 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)
devflow MCP 질문
devflow MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add devflow-mcp -- npx -y @cocaxcode/devflow-mcp를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
devflow MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
devflow MCP는 어떤 도구를 제공하나요?
32개 도구를 제공합니다. 예: df_project_setup, df_project_update, df_project_list, df_project_switch, df_project_delete.
서버가 자격 증명을 어떻게 처리하나요?
모든 자격 증명은 로컬 홈 디렉토리에 저장되며 외부로 동기화하거나 추적하지 않습니다.
Jira Cloud와 Jira Server 모두 사용할 수 있나요?
네, 이 서버는 Jira Cloud와 Jira Server를 모두 지원하며 Jira 버전을 자동으로 감지합니다.
사용자 정의 자동화 워크플로우를 만들 수 있나요?
네, 커스텀 YAML flow playbook을 정의하여 반복 가능한 도구 시퀀스를 생성할 수 있습니다.