A Model Context Protocol (MCP) server that brings full GitHub Projects v2 (Kanban board) support to Claude Desktop — powered by the GitHub GraphQL API.
The official GitHub MCP connector only covers the REST API, which has no access to GitHub Projects v2. This server fills that gap by exposing five GraphQL-backed tools that let Claude manage your Kanban boards, create issues, and move cards — all without leaving the conversation.
- 📋 List board items — see all issues/PRs and their current column status
- 🔀 Move Kanban items — drag cards between columns (Todo → In Progress → Done) programmatically
- 🔍 Get project metadata — inspect fields, status options, and project structure
- ✍️ Create issues — open new issues directly from Claude
- ➕ Add issues to a project — link existing issues to any project board
- Node.js v18 or higher
- Claude Desktop
- A GitHub Personal Access Token (classic) with the following scopes:
repoproject
git clone https://github.com/johnmikepty/github-projects-mcp.git
cd github-projects-mcpnpm install
npm run buildGo to https://github.com/settings/tokens → Generate new token (classic)
Required scopes:
| Scope | Reason |
|---|---|
repo |
Read issues and repository data |
project |
Read and write Projects v2 boards |
Edit your Claude Desktop configuration file:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add the following entry inside mcpServers:
{
"mcpServers": {
"github-projects": {
"command": "node",
"args": ["C:\\path\\to\\github-projects-mcp\\dist\\index.js"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here"
}
}
}
}Note: On Windows use double backslashes (
\\) in the path.
Close and reopen Claude Desktop completely. You should see github-projects listed under connected MCP servers in Settings → Connectors.
Get project metadata including all fields and available status column options.
| Parameter | Type | Description |
|---|---|---|
owner |
string | GitHub username or organization |
projectNumber |
number | Project number (from the URL) |
List all issues and PRs on the board with their current status column.
| Parameter | Type | Description |
|---|---|---|
owner |
string | GitHub username or organization |
projectNumber |
number | Project number |
Move an issue or PR to a different status column on the Kanban board.
| Parameter | Type | Description |
|---|---|---|
owner |
string | GitHub username or organization |
projectNumber |
number | Project number |
issueNumber |
number | Issue or PR number |
targetStatus |
string | Target column name e.g. Todo, In Progress, Done |
Create a new GitHub issue in any repository.
| Parameter | Type | Description |
|---|---|---|
owner |
string | GitHub username or organization |
repo |
string | Repository name |
title |
string | Issue title |
body |
string (optional) | Issue body (Markdown supported) |
Add an existing issue to a project board by its GraphQL node ID.
| Parameter | Type | Description |
|---|---|---|
owner |
string | GitHub username or organization |
projectNumber |
number | Project number |
issueNodeId |
string | Issue node ID (starts with I_kw...) |
Once registered, you can ask Claude naturally:
List all items in project 9 of johnmikepty
Move issue #15 to Done in project 9 of johnmikepty
Create an issue titled "Fix login bug" in johnmikepty/my-app
What issues are still in Backlog in project 9?
Run without building (uses tsx for on-the-fly TypeScript execution):
GITHUB_TOKEN=ghp_your_token npm run devBuild for production:
npm run build
npm startgithub-projects-mcp/
├── src/
│ ├── index.ts → MCP server entry point, tool definitions
│ ├── graphql.ts → Reusable GitHub GraphQL client
│ └── tools/
│ ├── get-project.ts → Fetch project metadata
│ ├── list-items.ts → List board items with status
│ ├── move-item.ts → Move item to a status column
│ ├── create-issue.ts → Create a new issue
│ └── add-to-project.ts → Add issue to a project board
├── dist/ → Compiled output (generated by build)
├── package.json
├── tsconfig.json
└── README.md
The official GitHub MCP connector uses the REST API, which does not support GitHub Projects v2. Moving Kanban cards requires the GraphQL API (updateProjectV2ItemFieldValue mutation). This server bridges that gap so Claude can manage your entire project workflow — creating issues, tracking progress, and closing cards — without ever leaving the chat.
Pull requests are welcome. If you'd like to add new tools (e.g., filtering by assignee, milestone support, or org-level projects), feel free to open an issue or submit a PR.
MIT