zenhub-mcp
Provides tools to create and manage GitHub issues, repositories, workspaces, epics, and sprints through the ZenHub API, enabling full control over ZenHub's GitHub-integrated project management features.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zenhub-mcp create issue in repo 12345 titled 'Fix login bug'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ZenHub MCP Server
An MCP (Model Context Protocol) server that provides full access to the ZenHub GraphQL API.
Features
Full GraphQL Access: Execute any GraphQL query against the ZenHub API
Common Operations: Built-in tools for frequent tasks like creating issues, epics, workspaces, and sprints
Secure Authentication: API key-based authentication for all requests
Error Handling: Comprehensive error handling and validation
Related MCP server: Linear MCP Server
Installation
For Development
npm install
npm run buildSetup API Key
Get your ZenHub API key from ZenHub Settings
Set the environment variable:
export ZENHUB_API_KEY=your_api_key_hereOr create a .env file (copy from .env.example):
cp .env.example .env
# Edit .env and add your API keyFor Claude Desktop
Build the server:
npm install
npm run buildAdd to your Claude Desktop config (
~/Library/Application Support/Claude/claude_desktop_config.jsonon macOS):
{
"mcpServers": {
"zenhub": {
"command": "npx",
"args": ["zenhub-mcp-server"],
"env": {
"ZENHUB_API_KEY": "your_api_key_here"
}
}
}
}For Cursor
Build the server:
npm install
npm run buildIn Cursor, go to Settings > MCP Servers and add:
{
"name": "zenhub",
"command": "node",
"args": ["/path/to/zenhub-mcp/dist/index.js"],
"env": {
"ZENHUB_API_KEY": "zh_",
"GITHUB_PAT": "github_pat_"
}
}Or use the development server:
{
"name": "zenhub-dev",
"command": "npm",
"args": ["run", "dev"],
"cwd": "/path/to/zenhub-mcp",
"env": {
"ZENHUB_API_KEY": "your_api_key_here"
}
}Tools
The server provides 54 tools across 10 categories, implementing the most commonly used ZenHub operations:
No API key required in tool calls - Set ZENHUB_API_KEY environment variable once and use all tools!
Query Tools (7 tools)
zenhub_query
Execute any GraphQL query against the ZenHub API.
query(required): GraphQL query stringvariables(optional): Variables for the query
zenhub_search_issues
Search for issues in a pipeline.
pipeline_id(required): Pipeline ID to search inquery(optional): Search query for titlefilters(optional): Object with filters for labels and assignees
zenhub_search_issues_in_repository
Search and filter issues inside repository.
repository_id(required): Repository ID to search inquery(optional): Search queryfilters(optional): Filter options
zenhub_get_workspace_issues
Get all issues in a workspace (paginated).
workspace_id(required): Workspace IDafter(optional): Cursor for pagination
zenhub_get_viewer
Get current ZenHub user information.
zenhub_get_issue_by_info
Lookup an issue by repository and issue number.
repository_gh_id(required): GitHub repository IDissue_number(required): Issue number
zenhub_get_repositories
Lookup repositories by their GitHub IDs.
repository_gh_ids(required): Array of GitHub repository IDs
Issue Management (13 tools)
zenhub_create_issue
Create a new GitHub issue via ZenHub.
title(required): Issue titlerepository_id(required): Repository IDbody(optional): Issue descriptionlabels(optional): Array of label namesassignees(optional): Array of GitHub usernames
zenhub_close_issues
Close one or more issues.
issue_ids(required): Array of issue IDs
zenhub_reopen_issues
Reopen one or more closed issues.
issue_ids(required): Array of issue IDspipeline_id(required): Pipeline ID to move issues toposition(optional): Position in pipeline (START or END)
zenhub_move_issue
Move issues to a position in a pipeline.
issue_ids(required): Array of issue IDspipeline_id(required): Pipeline ID to move issues toposition(optional): Position in pipeline (0-based)
zenhub_add_assignees_to_issues
Add assignees to multiple issues.
issue_ids(required): Array of issue IDsassignees(required): Array of GitHub usernames
zenhub_add_labels_to_issues
Add labels to multiple issues.
issue_ids(required): Array of issue IDslabels(required): Array of label names
zenhub_set_estimate
Set an estimate for an issue.
issue_id(required): Issue IDvalue(required): Estimate value
zenhub_set_multiple_estimates
Set estimates on multiple issues.
estimates(required): Array of issue ID and estimate value pairs
zenhub_add_issues_to_epics
Add issues to epics.
issue_ids(required): Array of issue IDsepic_ids(required): Array of epic IDs
Epic Management (1 tool)
zenhub_create_epic
Create a new epic in ZenHub.
title(required): Epic titlerepository_id(required): Repository IDbody(optional): Epic description
Workspace Management (4 tools)
zenhub_get_user_workspaces
Get all workspaces accessible to the current user.
query(optional): Search query to filter workspacesfirst(optional): Number of workspaces to return (default: 20)
zenhub_get_user_organizations
Get all ZenHub organizations accessible to the current user.
query(optional): Search query to filter organizationsfirst(optional): Number of organizations to return (default: 10)
zenhub_get_organization_workspaces
Get all workspaces within a specific ZenHub organization.
organization_id(required): ZenHub organization IDquery(optional): Search query to filter workspacesfirst(optional): Number of workspaces to return (default: 20)
zenhub_create_workspace
Create a new workspace in ZenHub.
name(required): Workspace namedescription(optional): Workspace descriptionorganization_id(required): ZenHub organization IDrepository_ids(required): Array of GitHub repository IDsdefault_repository_id(optional): Default repository ID
Sprint Management (2 tools)
zenhub_create_sprint
Create a new sprint.
name(required): Sprint namestart_date(required): Start date (ISO format)end_date(required): End date (ISO format)workspace_id(required): Workspace IDtimezone(optional): Timezone identifiersettings(optional): Sprint settings object
zenhub_add_issues_to_sprints
Add issues to sprints.
issue_ids(required): Array of issue IDssprint_ids(required): Array of sprint IDs
Architecture
The server uses a modular architecture for easy expansion:
src/
├── index.ts # Main MCP server
├── types.ts # TypeScript interfaces
└── tools/
├── index.ts # Tool registry
├── base.ts # Base tool class
├── queries.ts # Query tools
├── issues.ts # Issue management tools
├── epics.ts # Epic management tools
├── workspaces.ts # Workspace management tools
└── sprints.ts # Sprint management toolsAdding New Tools
Create a new tool class extending
BaseToolin the appropriate category fileAdd it to the tool export array
The tool will automatically be registered with the MCP server
Available Operations Reference
All 176 available ZenHub GraphQL operations are documented in:
zenhub_api_operations.json- Complete operation list with descriptionsmutations.json- All 157 mutationsqueries.json- All 19 queries
Current implementation covers 54 of 176 operations (30.7%)
Development
npm run devEnvironment Variables
ZENHUB_API_KEY(required): Your ZenHub API key from ZenHub SettingsZENHUB_MCP_CUSTOM_INSTRUCTIONS(optional): Provide additional instructions for the MCP server. If set, this value will be appended to the default instructions that the server sends to the model. Use regular newlines or\nescape sequences to format multi-line prompts.
GraphQL Endpoint
This server connects to: https://api.zenhub.com/public/graphql
Available Tools
51 toolszenhub_add_assignees_to_issuesC
Add assignees to multiple issues
Inputs: issue_ids (required), assignees (required).
zenhub_add_issues_to_sprintsC
Add issues to sprints
Inputs: issue_ids (required), sprint_ids (required).
zenhub_add_labels_to_issuesB
Add labels to multiple issues
Inputs: issue_ids (required), labels (required).
zenhub_add_milestone_to_issuesC
Add milestone to multiple issues
Inputs: issue_ids (required), milestone_id (required).
zenhub_add_repository_to_workspaceB
Add a GitHub repository to a workspace
Inputs: workspace_id (required), repository_github_id (required).
zenhub_add_subissues_to_epicB
Add existing issues as sub-issues to an epic.
Inputs: child_issue_ids (required), parent_epic_id.
zenhub_close_issuesC
Close one or more issues
Inputs: issue_ids (required).
zenhub_create_epicA
Create a new epic in ZenHub. Optionally, you can also specify existing issue IDs that should be added as children of the new epic.
Inputs: title (required), repository_id (required), body, epic_child_ids.
zenhub_create_github_labelC
Create a GitHub label
Inputs: repository_id (required), name (required), color (required), description.
zenhub_create_issueC
Create a new GitHub issue via ZenHub
Inputs: title (required), repository_id (required), body, labels, +1 more.
zenhub_create_issue_dependencyB
Create a dependency between two issues (blocking → blocked)
Inputs: blocking_repository_gh_id (required), blocking_issue_number (required), blocked_repository_gh_id (required), blocked_issue_number (required).
zenhub_create_milestoneC
Create a milestone
Inputs: title (required), repository_id (required), description, due_date, +1 more.
zenhub_create_sprintC
Create a new sprint
Inputs: name (required), start_date (required), end_date (required), workspace_id (required), +2 more.
zenhub_create_workspaceB
Create a new workspace in ZenHub
Inputs: name (required), organization_id (required), repository_ids (required), description, +1 more.
zenhub_create_zenhub_labelC
Create a ZenHub label
Inputs: workspace_id (required), name (required), color (required), description.
zenhub_delete_issue_dependencyA
Delete a dependency between two issues (blocking → blocked)
Inputs: blocking_repository_gh_id (required), blocking_issue_number (required), blocked_repository_gh_id (required), blocked_issue_number (required).
zenhub_get_epicC
Get an epic
Inputs: epic_id (required).
zenhub_get_issue_by_infoA
Lookup an issue by repository and issue number
Inputs: repository_gh_id (required), issue_number (required).
zenhub_get_organization_workspacesC
Get all workspaces within a specific ZenHub organization
Inputs: query, first.
zenhub_get_owner_by_gh_idB
Lookup a GitHub user/organization by GitHub ID
Inputs: github_id (required).
zenhub_get_owner_by_loginA
Lookup a GitHub user/organization by login
Inputs: login (required).
zenhub_get_repositoriesC
Lookup repositories by their GitHub IDs
Inputs: repository_gh_ids (required).
zenhub_get_repositories_by_github_idsB
Lookup repositories by their GitHub IDs
Inputs: github_ids (required).
zenhub_get_repository_assignable_usersA
Get users who can be assigned to issues in a repository
Inputs: repository_id (required).
zenhub_get_repository_collaboratorsC
Get all collaborators for a repository who can be assigned to issues (Note: Repository collaborators not available in ZenHub API - use workspace users instead)
Inputs: repository_id (required).
zenhub_get_repository_detailsB
Get detailed information about a specific repository
Inputs: repository_id (required).
zenhub_get_repository_labelsB
Get all labels in a repository
Inputs: repository_id (required).
zenhub_get_user_organizationsA
Get all ZenHub organizations accessible to the current user
Inputs: query, first.
zenhub_get_user_workspacesB
Get all workspaces accessible to the current user
Inputs: query, first.
zenhub_get_viewerA
Get current authenticated user's ZenHub and GitHub profile information
Inputs: no named parameters.
zenhub_get_workspace_issuesC
Get all issues in a workspace (paginated)
Inputs: workspace_id (required), after.
zenhub_get_workspace_labelsB
Get all ZenHub labels in a workspace
Inputs: workspace_id (required).
zenhub_get_workspace_overviewA
Get workspace overview including basic metadata, pipelines with issue counts, repositories with issue counts, default repository and its issue types, epic summaries, and workspace users
Inputs: workspace_id (required).
zenhub_get_workspace_pipelinesB
Get all pipelines in a workspace
Inputs: workspace_id (required).
zenhub_get_workspace_repositoriesA
Get all repositories for a workspace
Inputs: workspace_id (required).
zenhub_get_workspace_sprintsB
Get all sprints in a workspace
Inputs: workspace_id (required).
zenhub_get_workspace_usersB
Get all users in a workspace who can be assigned to issues
Inputs: workspace_id (required).
zenhub_move_issueC
Move issues to a position in a pipeline
Inputs: issue_ids (required), pipeline_id (required), position.
zenhub_query_potentially_dangerousB
FALLBACK: Execute custom GraphQL queries when specific tools don't meet your needs. IMPORTANT: Mutations but have EXPLICT appoval from the user by repeating back a super minimal confirmation message.
Inputs: query (required), variables.
zenhub_remove_assignees_from_issuesB
Remove assignees from multiple issues
Inputs: issue_ids (required), assignees (required).
zenhub_remove_labels_from_issuesC
Remove labels from multiple issues
Inputs: issue_ids (required), labels (required).
zenhub_reopen_issuesB
Reopen one or more closed issues
Inputs: issue_ids (required), pipeline_id (required), position.
zenhub_search_issuesB
Search and filter issues within a specific pipeline by title, labels, or assignees
Inputs: pipeline_id (required), query, filters.
zenhub_search_issues_in_repositoryA
Search and filter issues in a workspace by user, repository, and pipeline. Use zenhub_get_workspace_overview to get repository IDs and pipeline IDs before using this tool.
Inputs: workspace_id (required), query (required), repo_ids (required), pipeline_ids (required).
zenhub_set_estimateC
Set an estimate for an issue
Inputs: issue_id (required), value (required).
zenhub_set_multiple_estimatesB
Set estimates on multiple issues
Inputs: estimates (required).
zenhub_update_epicC
Update an epic
Inputs: epic_id (required), title, description.
zenhub_update_epic_datesB
Update epic's start and end dates
Inputs: epic_id (required), start_date, end_date.
zenhub_update_issueC
Update an existing issue
Inputs: issue_id (required), title, body.
zenhub_update_milestoneD
Update a milestone
Inputs: milestone_id (required), title, description, due_date, +1 more.
zenhub_update_sprintC
Update an existing sprint
Inputs: sprint_id (required), name, start_date, end_date, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 51 tools
Most tools have distinct purposes, but the presence of 'zenhub_query_potentially_dangerous' allows arbitrary GraphQL queries, creating ambiguity and overlap with all other tools. Additionally, some tools like 'search_issues' and 'search_issues_in_repository' are similar but separate, adding slight confusion.
All tools follow a consistent 'zenhub_verb_noun' pattern, with verbs like add, create, get, update, delete, close, reopen, move, set, etc. This pattern is uniform across all 51 tools, making the naming highly predictable and systematic.
With 51 tools, the server is overly granular for its domain. Many operations could be consolidated (e.g., single vs. bulk variants of add/remove assignees, labels, and estimates). This count exceeds typical well-scoped MCP servers (3-15 tools) and feels bloated.
The tool set covers a comprehensive range of ZenHub operations: CRUD for issues, epics, milestones, sprints, workspaces, labels, dependencies, and estimates. Minor gaps exist (e.g., no pipeline create/update/delete), but the fallback query tool mitigates missing operations. Overall, core workflows are well-covered.
Maintenance
Related MCP Connectors
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Operate GitHub from your AI assistant: repos, PRs, issues, Actions. Previews and read-only mode.
Manage projects, tasks, time tracking, and team collaboration through natural language.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables users to interact with GitHub's Projects v2 API through natural language for Agile project management, supporting repository details, issue tracking, and project board management operations.35GPL 2.0
- AlicenseNot gradedqualityNot gradedmaintenanceEnables comprehensive issue tracking and project management through Linear's GraphQL API. Supports creating and managing issues, organizing projects and sprints, team collaboration, and roadmap planning for modern development workflows.-
- AlicenseNot gradedqualityDmaintenanceEnables management of GitHub projects and issues using GitHub's GraphQL API. Supports creating/updating issues with images, managing labels and assignees, organizing ProjectsV2 boards, and updating project item statuses.2MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables querying and exploring the GitHub GraphQL API schema and executing optimized GraphQL queries to retrieve precise GitHub data (repositories, issues, PRs, users) with reduced token consumption.-