VX Agents

OpenAPI Marketplace · Productivity & Project Management

GitHub Issues

v1.0.0 · 11 endpoints · 0 connections · shared by vx.ai

Lets an agent triage GitHub issues: search and list issues, read them with their comments, open new issues, comment, add labels and assignees, and update title, body, state or milestone. Curated from GitHub's official OpenAPI specification.

Connect this API to an AI agent Browse all specs

What you can do with GitHub Issues via MCP

Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.

MethodPathOperationDescription
GET /search/issues searchIssues Search issues and pull requests with GitHub search syntax
GET /repos/{owner}/{repo}/issues listRepoIssues List a repository's issues (filter by state, labels, assignee, date)
POST /repos/{owner}/{repo}/issues createIssue Open a new issue
GET /repos/{owner}/{repo}/issues/{issue_number} getIssue Get one issue
PATCH /repos/{owner}/{repo}/issues/{issue_number} updateIssue Edit an issue: title, body, state (close/reopen), labels, assignees, milestone
GET /repos/{owner}/{repo}/issues/{issue_number}/comments listIssueComments Read the comments on an issue
POST /repos/{owner}/{repo}/issues/{issue_number}/comments createIssueComment Post a comment on an issue
GET /repos/{owner}/{repo}/labels listLabels List the labels available in a repository
GET /repos/{owner}/{repo}/milestones listMilestones List a repository's milestones
POST /repos/{owner}/{repo}/issues/{issue_number}/labels addIssueLabels Add labels to an issue (keeps existing ones)
POST /repos/{owner}/{repo}/issues/{issue_number}/assignees addIssueAssignees Assign people to an issue

Authentication

githubToken

Bearer token — sent as Authorization: Bearer <token>

Bearer token: a GitHub fine-grained personal access token (or a GitHub App installation token).

How to get a credential

  1. On GitHub open Settings > Developer settings > Personal access tokens > Fine-grained tokens > Generate new token.
  2. Pick the resource owner (your user or the organization; org owners may need to approve the token) and an expiration.
  3. Under Repository access, choose Only select repositories and pick the repos the agent may triage.
  4. Under Repository permissions, set Issues: Read and write (Metadata: Read-only is added automatically).
  5. Generate and copy the token (github_pat_...).

Permissions used

Permission Operations
Metadata: read listLabels, listMilestones
Issues: read listRepoIssues, getIssue, listIssueComments, searchIssues
Issues: write createIssue, updateIssue, createIssueComment, addIssueLabels, addIssueAssignees

Common errors

  • 401 Unauthorized: token expired, revoked or mistyped.
  • 403 Forbidden: the token lacks Issues write, the org has not approved the fine-grained token, or a secondary rate limit was hit (check the message).
  • 404 Not Found: the repo is not in the token's selected repositories (GitHub hides private repos as 404).
  • 422 Unprocessable Entity: invalid label, assignee without push access, or bad milestone number.
  • 429 / 403 rate limit: wait until x-ratelimit-reset (5,000 requests/hour; search is 30/minute).

Store the token as a VX Agents Bearer credential.

Usage guide

Setup

  • Credential: a fine-grained personal access token with Issues: Read and write on the repositories to triage, stored as a Bearer credential.
  • Worth pinning as presets: owner and repo when the agent works on one repository.
  • X-GitHub-Api-Version is pinned to 2022-11-28 on every operation; leave it as is.

Triage issues

  1. Find issues: searchIssues with q, e.g. repo:acme/app is:issue is:open no:label, repo:acme/app is:issue is:open label:bug sort:updated-desc, org:acme is:issue assignee:@me. Always add is:issue (search also returns pull requests). Or listRepoIssues with state, labels (comma-separated), assignee, since.
  2. Read: getIssue, then listIssueComments for the discussion.
  3. Classify: listLabels once to see valid label names, then addIssueLabels with {"labels": ["bug", "p1"]} (adds, keeps existing). addIssueAssignees with {"assignees": ["octocat"]}. Use listMilestones + updateIssue milestone (the milestone number) to schedule.
  4. Respond: createIssueComment with a markdown body. Show the comment to the user first when it speaks for the team.
  5. Close or reopen with updateIssue {"state": "closed", "state_reason": "completed" | "not_planned"} only after the user confirms.
  6. New issue: createIssue with title, body, optional labels, assignees.

Good to know

  • listRepoIssues also returns pull requests; skip items that have a pull_request field.
  • issue_number is the number shown in the UI (#123), not the internal id.
  • updateIssue with labels or assignees replaces the whole list; use the add operations to append.
  • Paging: per_page up to 100 and page; search returns at most 1,000 results and allows 30 requests/minute.
  • Times are ISO 8601 UTC (since=2026-10-01T00:00:00Z; search created:>=2026-10-01).
  • Assignees must have access to the repository, or GitHub silently ignores them.
  • No delete operations by design.

How to use this spec

  1. Create a free VX Agents account (sandbox tools included).
  2. Open the marketplace and connect “GitHub Issues” to an agent.
  3. Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.

Related APIs