MCP server connecting Claude Code to GitHub for an issue to branch to PR to close workflow.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Turn a conversation with Claude into GitHub issues, branches, and pull requests β without leaving Claude Code.
okffs is a Model Context Protocol server that gives Claude Code a clean issue β branch β PR β close workflow on GitHub. Talk through the work in plain language; okffs creates the issues, matching branches, and pull requests, keeps them linked, and (optionally) syncs a GitHub Projects board β all in one shot.
gh CLI inside your repo? You're ready.1. Run the setup wizard from your project root:
It walks you through auth, repo, and any optional features, writes a .env, then runs a quick GitHub sanity check. Re-run it any time (e.g. after upgrading okffs) β it only asks about options that are new since your last run. If you're happy relying on the GitHub CLI (gh auth login) and working inside the repo you want to manage, you can skip this step entirely β okffs works with no config at all.
Already in Claude Code? Once okffs is connected you can configure it conversationally instead β run the
/okffs:setupslash command and Claude will interview you and write the.envfor you (no terminal needed). okffs also nudges you to run it after an upgrade introduces new options.
2. Add a .mcp.json to your project root:
That's it β npx fetches okffs on first use, and Claude Code picks up the tools automatically. To use a token or a different repo instead of the gh/auto-detect defaults, run okffs setup (above) or edit .env by hand β see Configuration.
Now just ask Claude:
Claude infers labels (bug, enhancement, β¦) from the title and description and merges them with any you've set as defaults.
| Tool | What it does |
|---|---|
create_issue | Creates an issue and a matching branch. Infers labels, a board priority/effort, and a native Issue Type from the task (toggle with OKFFS_INFER_PRIORITY/OKFFS_INFER_EFFORT/OKFFS_INFER_TYPE). Optional assignees, labels, milestone, priority, effort, type. Opens a draft PR immediately when OKFFS_AUTO_PR=true. |
create_issues_from_list | Creates many issues + branches from a task list in one shot. Confirms first. Per-task labels, assignees, milestone, priority, effort, type. |
plan | Give it a free-text description plus the breakdown Claude generates (titles, descriptions, labels, priority/effort/type, relationships); it creates every issue + branch, wires up relationships, and opens draft PRs when OKFFS_AUTO_PR=true. Confirms first. |
list_issues | Lists open issues with branch, linked PR, board column, priority:/effort:, native type:, and relationships as a tree β ordered by priority so the most important work is on top. |
get_issue | Full details for one issue: title, body, labels, assignees, branch, status. |
comment_issue | Posts a comment β handy for logging what a branch did. |
link_issues | Links two issues (blocked_by, blocking, parent), stored under a ## Relationships section. |
close_issue | Closes an issue and tips you to /clear before the next one. |
create_pull_request | Opens a PR for an issue branch β generates the title/body, pushes the branch, always includes Closes #N, and comments back. Can write changelog fragments when OKFFS_UPDATE_DOCS=true. Pass allow_empty: true to backfill a draft tracking PR on a branch with no commits (pushes an empty init commit to diverge it). |
commit_and_update | Stages, commits (message from your hint or the diff), pushes, and posts a progress comment to the issue. |
merge_pull_request | The one okffs tool that merges: autonomously merges a green, review-resolved issue PR into the base branch (e.g. develop) using OKFFS_BASE_MERGE_METHOD, then closes the issue. Opt-in (OKFFS_AUTO_MERGE_BASE=true) and heavily gated β never touches OKFFS_PROTECTED_BRANCH, independently verifies checks/mergeability/threads. The develop β main promotion stays your manual merge. |
list_pr_review_comments | Fetches a PR's inline review threads and summaries. |
reply_to_review_comment | Replies to an inline review thread by id. |
resolve_review_thread | Resolves a review thread β only when OKFFS_RESOLVE_THREADS=true. |
prepare_release | Bumps the version, rolls the CHANGELOG, commits on a release branch, and opens a PR. Confirms first; does not tag or publish. |
update_project_status | Moves an issue between board columns (Backlog, Ready, In Progress, Review). Needs OKFFS_PROJECT_ENABLED. |
set_issue_fields | Sets board Priority/Effort and/or the native Issue Type on an existing issue. Priority/Effort handle project-native and org-level Issue Fields (needs OKFFS_PROJECT_ENABLED); type is org-native and works independently. create_issue only sets these at creation; use this afterwards. Status stays with update_project_status. |
update_issue | Edits an existing issue's core fields β title, assignees, labels, milestone, body β via one PATCH with the configured token. labels/assignees replace the whole set ([] clears). For Priority/Effort/Type use set_issue_fields; for Status use update_project_status. |
configure | Writes okffs config to .env β the backend for the /okffs:setup prompt. Reuses the okffs setup wizard's manifest/serializer: updates only okffs's marked block, preserving your own variables and comments. Usually driven by /okffs:setup, not called directly. |
delete_issue | Closes an issue and deletes its branch. Destructive β needs confirmed: true. |
delete_branch | Deletes a branch and closes its issue. Destructive β needs confirmed: true. |
Destructive tools (delete_issue, delete_branch) always warn on the first call and only act when re-called with confirmed: true, posting a comment to the issue before doing anything.
okffs has a built-in loop for review feedback β just ask ("address the review comments on PR #42"). Claude reads the threads, fixes the valid ones, commits and pushes, replies per thread, and posts a summary. Claude brings the judgment and the fixes; okffs handles the GitHub plumbing. There's also a slash command, /okffs:address_pr_review (takes a PR number), that runs the same loop.
By default review threads are left open for you to resolve; set OKFFS_RESOLVE_THREADS=true to have okffs resolve them once addressed.
For a hands-off session, ask Claude to "fully handle this" (or "minimum interference") β or set OKFFS_AUTOPILOT=true to make it the default. In autopilot, Claude stops asking you to choose between options for reversible decisions, takes the recommended option at each fork, and drives an issue all the way to a PR into the base branch (and a base merge when OKFFS_AUTO_MERGE_BASE=true) β then posts an "Autopilot decisions" report (one line per choice, with a one-line why) to the PR and the issue, so you can redirect anything in a single message.
It removes confirmation friction; it does not grant new powers. The hard stops always interrupt, even in autopilot: anything into OKFFS_PROTECTED_BRANCH (merge/tag/publish), destructive tools (delete_issue / delete_branch), anything billable (e.g. a Copilot review on a new promotion PR), and genuinely irreversible actions. And for a real missing-information call β where only you hold the context β Claude still asks one quick question rather than guess. Off by default.
The /okffs:update_guidance slash command reviews the changes on the current branch and maintains one okffs-owned section of your CLAUDE.md β ## Project Guidance (okffs usage), delimited by HTML markers β without ever touching your hand-written content. It's guidance curation (tools, env vars, conventions), not a changelog. Set OKFFS_UPDATE_GUIDANCE=true to have create_pull_request nudge Claude to run it at PR time; the command is always available.
With OKFFS_UPDATE_DOCS=true, create_pull_request writes doc updates onto the branch so they land in the PR diff:
.changes/unreleased/, assembled into CHANGELOG.md at release time by prepare_release. Uniquely-named fragments avoid merge conflicts across parallel branches.No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/okffs)<a href="https://allmcps.com/mcp/okffs"><img src="https://allmcps.com/api/badge/okffs?style=directory" alt="Okffs on AllMCPs" /></a>