Skip to main content
Glama

github_issues

GitHub — a repository's issues, their comments and their labels.

⚠️ At GitHub, a pull request IS an issue: the API returns the two mixed together. op='search' therefore drops PRs by default — without which "how many open tickets?" gives a wrong number, often by a lot. include_pull_requests=true returns the API's raw response. This sorting happens after pagination: a page of 30 of which 12 are PRs returns 18, which is normal.

Conversely, and this is useful: these same operations work on a PR by passing its number — thread comments, labels, assignments and milestones are shared by both.

⚠️ op='update' with labels or assignees REPLACES the list. To add without overwriting: add_labels / assign.

⚠️ op='assign' silently ignores an account without write access to the repository: the response comes back as a success without having assigned it. Compare the returned list with the requested one.

⚠️ Creating an issue or a comment notifies the repository's watchers and anyone mentioned. There is no issue draft at GitHub.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "github_issues"
  }
}

Input Schema

NameRequiredDescriptionDefault
opNothe operation, see above.search
_orgNoOrg (id) de CET APPEL. `oto_list_orgs()`.
bodyNoop='comment'/'update_comment' — the comment text.
fullNolist ops only (search | comments | labels | milestones) — the page as GitHub sends it. Default: the index view (no API links; users, labels, milestones, repositories by name; a body by its `_length`).
pageNopage number.
repoNorepository name.
sortNoop='search' — created | updated | comments.
labelNoop='remove_label' — the label to remove. op='create_label' — its name.
ownerNorepository owner.
sinceNoop='search'/'comments' — modified since (ISO 8601).
stateNoop='search' — open | closed | all.
_groupNoÉquipe (id) de CET APPEL, sous son org parente.
fieldsNoop='create'/'update'/'create_label'/'create_milestone' — the body.
labelsNoop='search' (filter) or add_labels / set_labels (write).
numberNothe issue's (or PR's) number.
_run_idNoOBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas.
creatorNoop='search' — filter by author.
_accountNoCompte à OPÉRER parmi : `Julien` (org), `Tulina front` (org). `oto_identity(op='list')`.
_projectNoProjet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`.
assigneeNoop='search' — filter by assignee.
per_pageNorows per page (1-100, default 30).
_instanceNoInstance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`.
assigneesNoop='assign'/'unassign' — the targeted accounts.
milestoneNoop='search' — filter by milestone.
comment_idNothe targeted comment (update_comment, delete_comment).
lock_reasonNoop='lock' — off-topic | too heated | resolved | spam.
include_pull_requestsNoop='search' — include PRs (default false).

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that PRs are mixed into results and that filtering happens after pagination, so a page of 30 may yield 18, that labels/assignees are REPLACED by update, that assign silently succeeds for accounts without write access, and that creating issues or comments notifies watchers. Gaps remain on destructive operations (delete_comment, lock) and on required permissions/tokens.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The most consequential trap (PRs counted as issues) is front-loaded, and each warning block addresses a distinct failure mode rather than restating the name. The emoji-heavy bold formatting and repeated ⚠️ markers add visual noise, but the information density is high for a tool of this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 27-parameter, 19-operation tool with no annotations and no output schema, the description covers the major behavioral traps well but leaves several operations and their return shapes unexplained; the `full` flag hints at an index vs raw view without describing either. Complete enough to avoid the worst mistakes, not complete enough to invoke any given op confidently without reading the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning beyond field-level docs: it explains include_pull_requests in terms of the PR-mixing problem, clarifies that labels serve as both search filter and write payload, and warns that update's labels/assignees are replacement semantics. The fields parameter is still described only as 'the body', leaving that op-family underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a specific resource and scope: a repository's issues, their comments and their labels. The pull-request caveat further sharpens what the tool actually returns, distinguishing it from a pure issue tracker. It does not explicitly name siblings such as github_pulls or github_search, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete when-to guidance: use include_pull_requests=true for the raw API response, use add_labels/assign rather than update to avoid overwriting, and pass a PR number when the target is a pull request. It does not map the remaining operations (get, lock, milestones, delete_comment) to situations, so a good part of the 19-op surface still relies on the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources