MCP server by Helianthusay7
GitHub Issue MCP Server
A small Model Context Protocol server for working with GitHub issues from MCP-compatible clients.
It exposes GitHub Issue operations as structured MCP tools over stdio. The server does not store data locally; every tool call goes through the GitHub REST API.
Features
- List repository issues
- Get one issue
- Search issues with GitHub search syntax
- Create issues
- Comment on issues
- Update title, body, labels, assignees, milestone, and state
- Add labels without replacing existing labels
- Remove a label
Requirements
- Node.js 20+
- A GitHub token in
GITHUB_TOKEN
For private repositories or write operations, create a fine-grained personal access token with the minimum repository permissions you need:
- Issues: read/write
- Metadata: read
Install
npm install
npm run build
Run Locally
$env:GITHUB_TOKEN = "github_pat_..."
npm run dev
The server speaks MCP over stdio, so it is usually launched by an MCP client instead of run by hand.
MCP Client Config
Example config:
{
"mcpServers": {
"github-issues": {
"command": "node",
"args": ["C:\\Users\\you\\github-issue-mcp-server\\dist\\index.js"],
"env": {
"GITHUB_TOKEN": "github_pat_..."
}
}
}
}
For GitHub Enterprise Server, set GITHUB_API_URL:
{
"mcpServers": {
"github-issues": {
"command": "node",
"args": ["C:\\Users\\you\\github-issue-mcp-server\\dist\\index.js"],
"env": {
"GITHUB_TOKEN": "github_pat_...",
"GITHUB_API_URL": "https://github.example.com/api/v3"
}
}
}
}
Tools
list_issues
Lists issues for a repository. GitHub's issues API also returns pull requests, so this tool filters pull requests out by default.
{
"owner": "modelcontextprotocol",
"repo": "typescript-sdk",
"state": "open",
"labels": ["bug"],
"per_page": 20
}
get_issue
Gets one issue by number.
{
"owner": "owner",
"repo": "repo",
"issue_number": 123
}
search_issues
Searches issues using GitHub's search query syntax.
{
"q": "repo:owner/repo is:issue is:open label:bug updated:>=2026-06-01",
"per_page": 10
}
create_issue
Creates a new issue.
{
"owner": "owner",
"repo": "repo",
"title": "Login fails on expired session",
"body": "Steps to reproduce...",
"labels": ["bug"]
}
comment_issue
Adds a comment.
{
"owner": "owner",
"repo": "repo",
"issue_number": 123,
"body": "Thanks for the report. I can reproduce this on main."
}
update_issue
Updates issue fields or state.
{
"owner": "owner",
"repo": "repo",
"issue_number": 123,
"state": "closed",
"state_reason": "completed"
}
add_labels
Adds labels without replacing existing labels.
{
"owner": "owner",
"repo": "repo",
"issue_number": 123,
"labels": ["triaged", "help wanted"]
}
remove_label
Removes one label.
{
"owner": "owner",
"repo": "repo",
"issue_number": 123,
"label": "needs reproduction"
}
Development
npm run typecheck
npm run build
Avoid logging to stdout because MCP stdio transport uses stdout for protocol messages. Use stderr for diagnostics.