mcp-github-project-manager
Summary: This MCP server turns GitHub Projects v2 into an agentic project-management backbone, exposing 21 compound tools with 175 actions, 6 resources, and 6 prompts for AI coding agents.
Manage GitHub Projects v2: create/list/update/delete projects, fields, views, items, templates, repo/team links, collaborators, and agent fields.
Manage issues, comments, drafts, sub-issues, native blockers, labels, milestones, sprints, iterations, PRs, releases, branch protection, Actions workflows, automations, status updates, and events.
Run AI generation workflows: PRDs, features, task breakdowns, complexity analysis, traceability, and materializing tasks into GitHub issues.
Run AI analysis and planning: issue enrichment/triage, label suggestions, duplicate/related detection, sprint capacity, backlog prioritization, risk, roadmaps, and visualizations.
Coordinate agent swarms: register/checkout/release/complete tasks, heartbeat, submit and review work products, manage budgets/usage, reclaim stale agents, smart assignment, rebalancing, and project convergence.
Use read-only analytics for sprint velocity/burndown, cycle time, throughput, and project summaries.
Discover available tools/actions at runtime and filter exposed tool groups.
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., "@mcp-github-project-managergenerate a PRD for a new user authentication system"
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.
MCP GitHub Project Manager
The task substrate for AI coding agents. An MCP server that turns GitHub Projects v2 into an agentic project-management layer: agents register, self-assign work, heartbeat, submit work products for review, and spend against token budgets — through 21 compound tools exposing 175 actions, backed entirely by GitHub-native storage. No database, no Redis, no external infra.
You bring the agents (Claude Code, Codex, Cursor, Windsurf, Roo, OpenCode, any MCP client). This is the backbone that tells them what to work on and keeps them from colliding.
Surface | Detail |
Tools | 21 compound tools, 175 actions, |
Resources | 6 read-only GitHub-backed views |
Prompts | 6 reusable AI templates |
Transport | MCP v2 over stdio (webhook/SSE optional) |
Storage | GitHub issues, project fields, comments — no external infra |
Runtime | Node >= 22.12.0 · MIT license |
Why this exists
Agents need a work queue, not a chat window.
agent_work/agent_managegive agents atomic task checkout, heartbeats, and a review loop instead of "go figure it out."Budgets must be enforced somewhere the agent cannot skip. Each agent has a token budget with warning thresholds and a hard stop; the server debits itself, and
record_usagecovers the agent's own runtime spend.AI plans are worthless if they never become issues.
ai_generateruns idea → PRD → tasks → materialized GitHub issues, grouped into milestones and sprints.Tool lists are a context tax. 21 tools instead of 175 keeps the schema small;
discover_toolsexpands any domain or action on demand.State should live where the work already is. The agent registry is a file on a dedicated branch (compare-and-swap writes), task claims are project fields, work products are issue comments — no new infrastructure to operate.
Related MCP server: GitHub Analyzer Pro MCP Server
Quick start
Requires Node.js >= 22.12.0 (Node 24 recommended).
# 1. Install (global, or use npx / pnpm dlx / docker compose — see below)
npm install -g mcp-github-project-manager
# 2. Configure (a working `gh auth login` means you can skip GITHUB_TOKEN)
export GITHUB_TOKEN="ghp_..."
export GITHUB_OWNER="your-org-or-user"
export GITHUB_REPO="your-repo"
# 3. Run the MCP stdio server
mcp-github-project-managerRegister it with an MCP client:
{
"mcpServers": {
"github-project-manager": {
"command": "npx",
"args": ["-y", "mcp-github-project-manager"],
"env": {
"GITHUB_TOKEN": "ghp_...",
"GITHUB_OWNER": "your-org-or-user",
"GITHUB_REPO": "your-repo"
}
}
}
}# Claude Code CLI
claude mcp add github-project-manager -- npx -y mcp-github-project-manager
# Docker
docker compose up --buildInstall paths: npm install -g mcp-github-project-manager, npx -y mcp-github-project-manager, pnpm dlx mcp-github-project-manager, or docker compose up --build.
A GitHub token needs repo, project, and write:org scopes. Full setup options live in the Deployment Guide and the Getting Started tutorial.
Works with any stdio MCP client — Claude Desktop, Claude Code, Codex, Cursor, Windsurf, Roo Code, VS Code + Copilot, OpenCode, and custom harnesses.
The tool surface
Every tool takes an action string that routes to the underlying operation, so clients see 21 schemas instead of 175.
Tool | Group | Actions | Covers |
| core | 38 | Projects v2: CRUD, close/reopen, fields, views, items, templates, repo/team linking, collaborators |
| core | 22 | Issue CRUD, comments, drafts, advanced search, sub-issues, native blockers, issue types |
| core | 7 | Create, list, update, merge, reviews |
| core | 7 | CRUD, metrics, overdue and upcoming |
| core | 9 | Create, update, delete (needs |
| core | 2 | Create and list repository labels |
| core | 3 | Project workflows: list, get, delete |
| core | 5 | Iteration config, current iteration, items, by-date, assign |
| core | 3 | Project status updates: create, list, get |
| core | 4 | Branch protection rules and branch listing |
| core | 6 | Releases: create, list, get, update, delete, latest |
| core | 6 | GitHub Actions: list, dispatch, run status/logs, cancel |
| events | 3 | Subscribe, recent events, replay |
| ai | 9 | PRD generate/enhance/parse, features, next task, complexity, expand, traceability, materialize |
| ai | 8 | Issue enrichment, triage, label suggestion, duplicate and related detection |
| ai | 6 | Capacity, backlog priority, risk, sprint composition, roadmap, visualization |
| agents | 12 | Register, checkout, release, complete, heartbeat, review, task context |
| agents | 18 | Registry, activity, work products, budgets, usage, PM coordination, convergence |
| system | 2 | Health check (live GitHub rate-limit probe), project field setup |
| core | 5 | Read-only sprint velocity and burndown, cycle time, throughput, project summary |
| system | meta | Runtime discovery of tools, actions, and parameters |
Call shape — one discriminator, action-specific parameters:
{ "tool": "manage_project", "arguments": { "action": "create", "title": "Q3 Roadmap", "owner": "myorg" } }
{ "tool": "manage_issues", "arguments": { "action": "create", "title": "Add login form", "body": "..." } }
{ "tool": "agent_work", "arguments": { "action": "checkout_task", "agentId": "agent-abc123", "strategy": "highest_priority" } }
{ "tool": "discover_tools", "arguments": { "domain": "sprints" } }discover_tools takes an optional domain (projects, issues, pull_requests, milestones, sprints, labels, automation, iterations, events, status_updates, analytics, ai_generation, ai_analysis, ai_planning, agents, system) or a free-text query. It stays exposed even when tool groups are filtered.
Cross-cutting contract: create actions accept an optional idempotencyKey (a retry within 24 h replays the first result instead of duplicating it); list actions that page return an additive nextCursor to pass back as cursor; every tool advertises _meta.schemaVersion. See docs/TOOLS.md.
Alongside the tools the server exposes 6 read-only resources (github://config, github://projects, github://sprints/current, github://milestones, github://agents, github://tools) and 6 prompts (review-prd, explain-task-complexity, suggest-issue-labels, analyze-sprint-risk, generate-release-notes, triage-issue).
Full parameter reference: docs/TOOLS.md.
What it can do
AI generation (ai_generate) — generate a PRD from an idea, enhance an existing one, parse a PRD into tasks, add a feature with impact analysis, recommend the next task, analyze complexity and risk, expand a task into subtasks, build a traceability matrix, and materialize tasks into real GitHub issues.
AI analysis (ai_analyze) — enrich one or many issues, triage (single or bulk), suggest labels, detect duplicates, find related issues.
AI planning (ai_plan) — calculate sprint capacity, prioritize a backlog, assess risk, suggest sprint composition, generate a roadmap or visualization. Given a projectId the roadmap is planned from that project's own issues; with autoCreate the milestones are created and assigned to them.
Agent swarm (agent_work / agent_manage) — agents register with role, runtime, and capabilities; claim tasks by priority, age, skills, or deadline; heartbeat with progress and blockers; submit work products (branch, PR, files, test results) for review; approve, reject, or decompose. PM-side actions add budgets, usage accounting, stale-agent reclaim, workload rebalancing, smart assignment, and one-call project convergence.
Deterministic GitHub surface — projects, issues, pull requests, milestones, sprints, labels, branches, releases, workflows, project automations, events, status updates, and analytics, all with plain action routing and no model in the loop.
The AI tools are optional. Without a provider key, everything else works unchanged.
The agent loop, end to end
{ "tool": "agent_work", "arguments": { "action": "register", "name": "claude-eng-1", "role": "engineer", "runtime": "claude-code", "capabilities": ["typescript", "testing"] } }
{ "tool": "agent_work", "arguments": { "action": "checkout_task", "agentId": "agent-abc123", "strategy": "highest_priority" } }
{ "tool": "agent_work", "arguments": { "action": "get_task_context", "issueNumber": 42 } }
{ "tool": "agent_work", "arguments": { "action": "heartbeat", "agentId": "agent-abc123", "status": "working", "taskId": "issue-42", "progress": 60, "currentBranch": "feat/42-add-login-form" } }
{ "tool": "agent_manage", "arguments": { "action": "submit_work_product", "agentId": "agent-abc123", "taskId": "issue-42", "issueNumber": 42, "branch": "feat/42-add-login-form", "prNumber": 99, "summary": "Added login form with validation" } }
{ "tool": "agent_work", "arguments": { "action": "complete_task", "agentId": "agent-abc123", "taskId": "issue-42", "summary": "Implemented and tested" } }A runnable version of this loop (worker + reviewer, every id threaded from the previous response, non-zero exit on any failure) lives in examples/basic/agent-loop.ts; --plan prints the call sequence with symbolic references.
Checkout strategies: highest_priority, oldest_first, skills_match, milestone_deadline, ai. Budgets are set with agent_manage and action: "set_budget"; reset periods are daily, weekly, monthly, or never.
Where the state lives — no external database:
Data | GitHub-native storage |
Agent registry |
|
Task claims | Project custom fields ( |
Work products | Structured issue comments |
Budgets and heartbeats | Agent records in the registry |
Configuration
Variable | Required | Purpose |
| yes* | GitHub PAT with |
| yes | Owner (user or org) of the target repository |
| yes | Target repository name |
| no | GitHub App installation auth; outranks the PAT when all three are set (a partial set falls back to the PAT) |
| no | Unlocks the |
| no | Per-role provider, model, key, endpoint |
| no | Expose only some groups: |
| no | Read secrets from files named after the variable (Docker/k8s convention) |
| no | Webhook/SSE transport; signature validation fails closed |
| no | HTTP hardening: binds |
| no | Bidirectional sync and cache tuning |
| no | Remaining GraphQL points below which requests back off proactively (default 100) |
| no | Append-only, redacted JSONL record of every state-changing tool call ( |
| no | Opt-in OpenTelemetry tracing ( |
| no | Per-operation token budget for AI task generation (distinct from per-agent budgets) |
| no |
|
* Credential chain (first hit wins): --token CLI flag → $SECRETS_DIR/GITHUB_TOKEN file → GITHUB_TOKEN env var → gh auth token. If you are already logged in with gh, you need no token configuration at all. Disable the fallback with GH_CLI_TOKEN_FALLBACK=false. CLI flags override env vars everywhere.
Narrow the exposed surface with group filters (group names, not tool names):
MCP_TOOL_GROUPS=core # project management only
MCP_TOOL_GROUPS=core,ai # add the AI tools
MCP_TOOL_GROUPS=all # default — everythingAI providers: anthropic, openai, google, perplexity, and openai-compatible (OpenRouter, Together, Groq, Ollama, LM Studio, Azure OpenAI, …). There are no default models — you configure the models you use, per role, so you can run OpenRouter for cheap daily work and a frontier model for PRD generation. A partially configured GitHub App falls back to the PAT rather than locking you out.
Full list: docs/CONFIGURATION.md.
Running it
Every script is package-manager agnostic — npm run X and pnpm run X are identical, and both lockfiles are committed.
Task | Command |
Build (tsc → |
|
Typecheck (src + examples, src + tests) |
|
Lint |
|
Format |
|
Unit tests |
|
Dev (watch) |
|
Coverage |
|
E2E, mocked GitHub/AI |
|
E2E, live API (uses rate limit) |
|
AI suites |
|
Inspect the server |
|
Point an MCP client at a local build with {"command": "node", "args": ["build/index.js"]}.
Deployment and MCP-client setup: docs/deployment.md. When something misbehaves: docs/TROUBLESHOOTING.md.
Architecture at a glance
Four layers, dependencies pointing inward:
Domain (
src/domain/) — types, Zod schemas, errors, and rich entities (entities/) that carry their own invariants and state-transition logic. Orchestration and I/O live in services.Services (
src/services/) — business logic;ProjectManagementServiceorchestrates per-feature services,src/services/ai/holds the AI SDK providers.Infrastructure (
src/infrastructure/) —github/(Octokit GraphQL/REST),tools/(tool definitions, registry, validators,compound/), plus cache, persistence, resilience, events, secrets, logger, MCP resources and prompts.MCP (
src/index.ts) — bootsMcpServer(MCP v2) over stdio; every tool is registered withregisterTooland shares onedispatchToolcarrying the shutdown gate, in-flight tracking, and result formatting.
src/container.ts wires the components index.ts owns with tsyringe DI; src/env.ts and src/cli.ts resolve configuration (CLI flags beat env vars). Tool executors self-construct through one shared factory (createGitHubFactory()), a documented exception to container resolution. Authentication is resolved once by resolveGitHubAuth() (GitHub App outranks the PAT) and all GitHub traffic goes through one GitHubRequestExecutor with retry and proactive rate-limit budgeting. AI providers plug in behind AIServiceFactory: it returns a model per role, wraps it in usage-reporting middleware, and the shared dispatcher debits the calling agent's budget once per tool call (a hard-stop budget gates AI tools with BudgetExhausted).
A tool that runs and fails returns { content, isError: true } with a stable code in _meta.error so the model can recover; a JSON-RPC error is reserved for an unknown tool or protocol faults.
Design details: docs/architecture.md.
Contributing
Task tracking uses bd (beads) — bd ready, bd show <id>, bd update <id> --claim, bd close <id>. Code traversal and audits use GitNexus: run impact analysis before editing a symbol and change analysis before committing. Refresh the index with node .gitnexus/run.cjs analyze --index-only when that runner exists in your checkout; otherwise bootstrap the CLI with npx/bunx/pnpm dlx gitnexus@latest analyze. Per-task recipes live in .agents/skills/gitnexus-*/SKILL.md.
The quality gate, in order: npm run build → npm run typecheck → npm run lint → npm test.
Traps that bite contributors:
Source imports omit
.js. Thepostbuildstep adds the extension. Never ship rawtscoutput — always run the full build.isolatedModulesis on. A type re-exported as a value is a compile error; useexport type/import type, including for decorated constructor parameters.Vitest rejects foreign test-runner CLI flags.
--testPathPatternfails withCACError: Unknown option; filter with a positional pattern and exclude with--exclude='**/e2e/**'.Mocks must use
function, not an arrow, wherever the code under test callsnew. AbeforeEachwith an implicit return is treated as a teardown callback — use a block body.
Start with CONTRIBUTING.md and docs/contributing/index.md.
License
MIT — see CHANGELOG.md for the release history.
Documentation
Guide | What it covers |
21 compound tools, 175 actions, per-action parameters | |
Every environment variable and per-role AI setup | |
Install paths, Docker, MCP client configuration | |
Layers, patterns, data flow, agent orchestration | |
Day-to-day usage | |
Step-by-step walkthroughs | |
Common failures and fixes | |
Development workflow and standards |
Available Tools
21 toolsagent_manageAgent ManagementCDestructive
Agent management: list/deregister agents, activity, work products, budgets (warningFraction), stale reclaim, smart assignment, workload rebalancing, convergence, and registry cleanup. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| action | Yes | ||
| branch | No | ||
| status | No | ||
| taskId | No | ||
| agentId | No | ||
| summary | No | ||
| agentIds | No | ||
| hardStop | No | ||
| prNumber | No | ||
| subtasks | No | Subtasks for decompose_task — PM splits a rejected task into smaller pieces | |
| iteration | No | ||
| projectId | No | ||
| commitShas | No | ||
| reviewerId | No | Reviewer agent to attribute approve/reject lifecycle actions to, when available | |
| roleFilter | No | ||
| testsTotal | No | ||
| tokensUsed | No | ||
| issueNumber | No | ||
| resetPeriod | No | ||
| testsFailed | No | ||
| testsPassed | No | ||
| totalTokens | No | ||
| filesChanged | No | ||
| maxIterations | No | ||
| includeOffline | No | ||
| maxAssignments | No | ||
| timeoutMinutes | No | ||
| warningFraction | No | Warning threshold as a 0-1 fraction | |
| staleAfterMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false, so the description's burden is to say which of the 18 actions are actually destructive. It does not: `deregister`, `reclaim_stale`, and `cleanup_registry` delete or steal state, while `list`, `get_activity`, `get_budget`, and `get_metrics` are pure reads, and nothing signals that split. Side effects of `converge_until_done` (looping up to maxIterations, mutating issues) are also undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, so it is compact for an 18-action tool, and the routing instruction is placed last where it is easy to find. However, the comma-separated keyword dump is unstructured and mixes registers ('list/deregister agents') with vague abstractions ('convergence'), so density comes at the cost of parseability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-branch union with 30 parameters, 10% schema coverage, no output schema, and a destructive annotation, this description is far too thin to call correctly without trial and error. It lists the action families but supplies none of the per-action contract (required fields, side effects, return shape, iteration limits) that an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10% across 30 parameters, so the description must compensate, and it does not. The one parameter it names, `warningFraction`, is already documented in the schema, and there is no explanation of `staleAfterMinutes` vs `timeoutMinutes`, `maxAssignments`, `roleFilter`, `hardStop`, `reviewerId`, or the `subtasks` shape for `decompose_task`. At most it clarifies that `action` selects a union branch.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the domains covered (agents, activity, work products, budgets, reclaim, assignment, rebalancing, convergence, cleanup), so an agent can tell this is the agent-lifecycle/registry tool. But the enumeration is a bare noun list with verbs missing for most entries, and nothing distinguishes it from sibling `agent_work` (agent-side task operations) or `manage_project` (PM coordination). The scope is discernible but not sharply defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Use the `action` field to select the operation', which restates the schema's discriminator rather than telling the caller when to pick this tool over `agent_work` or `manage_project`. There is no indication of which actions are read-only inspection versus mutating cleanup, nor any prerequisite or ordering advice (e.g. list before deregister, set_budget before record_usage).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_workAgent WorkC
Agent work operations: register agents, checkout/release/complete tasks, send heartbeats, submit/check review state, validate work products, and get handoff context. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| role | No | engineer | |
| view | No | ||
| action | Yes | ||
| labels | No | ||
| reason | No | ||
| status | No | ||
| taskId | No | ||
| agentId | No | ||
| runtime | No | claude-code | |
| summary | No | ||
| feedback | No | ||
| metadata | No | ||
| prNumber | No | ||
| progress | No | ||
| strategy | No | highest_priority | |
| milestone | No | ||
| projectId | No | ||
| closeIssue | No | ||
| reviewerId | No | ||
| issueNumber | No | ||
| reviewQueue | No | ||
| skipBlocked | No | ||
| budgetTokens | No | ||
| capabilities | No | ||
| currentBranch | No | ||
| parentAgentId | No | ||
| progressSummary | No | ||
| autoCheckoutNext | No | ||
| blockerDescription | No | ||
| estimatedCompletionMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare that the tool is not read-only, is open-world, is non-idempotent, and is non-destructive. The description adds value by naming the state-changing operations it can perform, such as checkout, complete, heartbeat, and review submission, but it does not disclose permissions required, side effects, failure modes, or what completion/rejection actually changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the operation inventory before the invocation instruction. It is efficient and free of filler, though the dense operation list is not structured by action sequence or workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex mega-tool with 12 actions, 31 parameters, a discriminated-union schema, and no output schema. The description provides only a high-level inventory and one invocation instruction; it omits per-action requirements, when each action should be used, handoff/review sequencing, and what each operation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 31 parameters, so the description must compensate and largely fails to do so. It only clarifies that `action` selects the operation; it gives no meaning for required per-action fields such as `agentId`, `taskId`, `reviewerId`, `summary`, `feedback`, `strategy`, or `status`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this is an agent work lifecycle tool and enumerates the supported operations, including registration, task checkout/release/complete, heartbeat, review, validation, and handoff context. It does not differentiate this tool from the sibling `agent_manage` tool, which likely overlaps with the 'register agents' operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Use the `action` field to select the operation,' which explains invocation mechanics but not when to use this tool versus siblings like `agent_manage`, `manage_issues`, or `manage_prs`. There is no per-action guidance on prerequisites, sequencing, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_analyzeAI AnalysisC
AI-powered analysis: enrich issues (single/bulk), triage issues, schedule triaging, suggest labels, detect duplicates, find related issues. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The AI analysis operation to perform | |
| config | No | ||
| agentId | No | ||
| issueId | No | ||
| issueIds | No | ||
| autoApply | No | ||
| projectId | No | ||
| issueTitle | No | ||
| maxResults | No | ||
| thresholds | No | ||
| issueLabels | No | ||
| issueNumber | No | ||
| issueHistory | No | ||
| onlyUntriaged | No | ||
| existingIssues | No | ||
| existingLabels | No | ||
| projectContext | No | ||
| relationConfig | No | ||
| issueDescription | No | ||
| repositoryIssues | No | ||
| repositoryLabels | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing about which of the eight actions actually mutate state, what `autoApply` does, or that these are non-deterministic AI calls with latency/cost implications — a meaningful gap for a non-idempotent multi-operation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the capability list, no filler. The enumeration largely restates the action enum rather than adding meaning, but it is short enough that the cost is low.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter, nested-object, eight-action dispatcher with no output schema, the description should map parameters to actions and flag which operations write. Instead it gives a one-line capability list, leaving an agent unable to construct a valid call without reverse-engineering the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 5%: 20 of 21 parameters, including nested `config`, `thresholds`, `relationConfig` and several issue-array shapes, are undocumented anywhere. The description only points at the `action` field and loosely implies that enrich/triage/label operations exist, without saying which of `issueId`, `issueIds`, `projectId`, `existingLabels` or `autoApply` belongs to which action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb family and resource (AI analysis over issues) and enumerates the concrete capabilities: enrichment, triage, label suggestion, duplicate detection, related issues. That maps well onto the action enum, though 'schedule triaging' is ambiguous versus `triage_all`, `enrich_issue_sections` is never mentioned, and nothing distinguishes it from siblings like `ai_plan` or `ai_generate`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The capability list implies which `action` value to pick for a given task, and the final sentence makes the dispatch mechanism explicit. But there is no guidance on when to prefer this over `ai_plan`/`ai_generate`, no prerequisites, and no statement of which actions have side effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_generateAI GenerationC
AI-powered generation: generate/enhance/parse PRDs, add features, get next tasks, analyze complexity, expand tasks, create traceability matrices. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| tasks | No | ||
| action | Yes | The AI generation operation to perform | |
| author | No | ||
| agentId | No | ||
| assignee | No | ||
| features | No | ||
| maxDepth | No | ||
| maxTasks | No | ||
| timeline | No | ||
| featureId | No | ||
| projectId | No | ||
| taskTitle | No | ||
| complexity | No | ||
| focusAreas | No | ||
| prdContent | No | ||
| teamSkills | No | ||
| autoApprove | No | ||
| description | No | ||
| featureIdea | No | ||
| labelPrefix | No | Label prefix for materialized issues (e.g. "ai-generated") | |
| maxSubtasks | No | ||
| projectIdea | No | ||
| projectName | No | ||
| projectType | No | ||
| requestedBy | No | ||
| targetUsers | No | ||
| addToProject | No | Whether to add created issues to the specified projectId | |
| autoEstimate | No | ||
| contextLevel | No | ||
| currentPhase | No | ||
| includeRisks | No | ||
| stakeholders | No | ||
| expandToTasks | No | ||
| maxComplexity | No | ||
| targetProject | No | ||
| autoPrioritize | No | ||
| excludeBlocked | No | ||
| projectContext | No | ||
| sprintCapacity | No | ||
| targetAudience | No | ||
| teamExperience | No | ||
| createLifecycle | No | ||
| currentEstimate | No | ||
| enhancementType | No | ||
| improveExisting | No | ||
| includeAnalysis | No | ||
| includeResearch | No | ||
| includeSubtasks | No | ||
| includeUseCases | No | ||
| industryContext | No | ||
| taskDescription | No | ||
| validateQuality | No | ||
| includeBreakdown | No | ||
| includeEstimates | No | ||
| targetComplexity | No | ||
| currentComplexity | No | ||
| addMissingElements | No | ||
| enhancedGeneration | No | ||
| includeDependencies | No | ||
| validateCompleteness | No | ||
| businessJustification | No | ||
| autoDetectDependencies | No | ||
| includeBusinessContext | No | ||
| includeRecommendations | No | ||
| includeCoverageAnalysis | No | ||
| includeTechnicalContext | No | ||
| createTraceabilityMatrix | No | ||
| includeTraceabilityLinks | No | ||
| includeAcceptanceCriteria | No | ||
| includeImplementationGuidance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that the tool is not read-only, is open-world, is not idempotent, and is not destructive. The description adds no behavioral context beyond listing operation names; it does not explain which actions mutate data, what side effects occur, whether generated artifacts are persisted, or what authorization is required. For a nine-action mutation-capable tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, but the long comma-separated operation list is dense and provides no structure for routing between actions. It is concise to the point of being under-specified for a tool of this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 71 parameters, nine distinct actions, no output schema, and mutation-capable behavior, the description is far too sparse. It lacks per-action guidance, parameter-to-action mapping, return expectations, and safety context, leaving the agent with almost no information beyond the action names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 71 parameters with only 4% schema description coverage, so the description must compensate heavily but does not. It only points at the `action` field, whose enum is already fully documented in the schema, and says nothing about how the dozens of other parameters map to specific actions. An agent cannot infer parameter meaning from this description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific AI-generation resource and enumerates the supported operations (PRD generation/enhancement/parsing, feature addition, task selection, complexity analysis, task expansion, traceability matrices). This makes the tool's broad function clear. However, it does not differentiate this tool from siblings such as ai_plan or ai_analyze, which likely overlap in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage instruction is to use the `action` field to select the operation, which is already evident from the schema. It provides no guidance on when to choose this tool over sibling AI tools, no prerequisites for individual actions, and no indication of which action fits which scenario beyond the action names themselves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_planAI PlanningC
AI-powered planning: calculate capacity, prioritize backlog, assess risk, suggest sprint composition, generate roadmaps and visualizations. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The AI planning operation to perform | |
| agentId | No | ||
| roadmap | No | ||
| capacity | No | ||
| velocity | No | ||
| projectId | No | ||
| autoCreate | No | generate_roadmap only: create the milestones in GitHub and assign them to the project's issues. Requires projectId. | |
| constraints | No | ||
| sprintItems | No | ||
| teamMembers | No | ||
| backlogItems | No | ||
| dependencies | No | ||
| projectTitle | No | ||
| requirements | No | ||
| businessGoals | No | ||
| riskTolerance | No | ||
| sprintCapacity | No | ||
| businessContext | No | ||
| targetMilestones | No | ||
| historicalSprints | No | ||
| projectDescription | No | ||
| sprintDurationDays | No | ||
| sprintDurationWeeks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds little beyond the purpose: it does not disclose that generate_roadmap with autoCreate can create milestones in GitHub, nor does it clarify which actions are purely analytical versus side-effecting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the tool's scope before the action-selection note. It is efficient with no filler, though the operation list is a dense run-on and could be structured by action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-action tool with 23 parameters, no output schema, and very low schema description coverage, the description is insufficient. It enumerates the operations but omits per-action parameter requirements, side effects, and what each operation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 23 parameters with only 9% schema description coverage, and the description mentions only the `action` field, which is already documented by the schema enum. It does not explain the many nested objects, required fields per action, or how parameters like `velocity`, `constraints`, `historicalSprints`, and `autoCreate` affect each operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource, AI planning, and enumerates six concrete operations: capacity calculation, backlog prioritization, risk assessment, sprint composition, roadmap generation, and visualization. This lets an agent distinguish it from general-purpose siblings such as ai_generate and ai_analyze, though it does not explicitly compare itself to them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Use the `action` field to select the operation,' which explains invocation mechanics rather than when to choose this tool or a specific action. It does not state when to use ai_plan versus ai_generate/ai_analyze, nor which action fits which planning scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyticsAnalyticsBRead-onlyIdempotent
Read-only project analytics: sprint velocity and burndown, cycle time, throughput, and a project summary. Use the action field to select the report.
| Name | Required | Description | Default |
|---|---|---|---|
| lastN | No | sprint_velocity: how many recent iterations to report (default 6) | |
| action | Yes | The analytics report to produce | |
| bucket | No | throughput: bucket size (default week) | |
| sprintId | No | sprint_burndown: iteration ID (default: the current iteration) | |
| projectId | No | Project node ID (required) | |
| sinceDays | No | cycle_time / throughput: look-back window in days (default 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's "read-only" restates structured data rather than adding to it. Nothing is said about how expensive these queries are, whether results are cached, or what happens with a missing/invalid projectId; with annotations carrying the safety profile a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded and zero filler. The second sentence is mildly redundant with the action enum's own schema description, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-way report dispatcher with six parameters and no output schema, the description leaves the agent guessing at what each report actually returns (time series? scalar? table?) and at expected cost or latency. It is adequate to invoke the tool but not to predict or use the results confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents defaults and per-report applicability for lastN, bucket, sprintId, sinceDays, and projectId. The description adds only the action-selection hint, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ("Read-only project analytics") and enumerates the five report types (sprint velocity, burndown, cycle time, throughput, project summary), which is enough to distinguish it from management siblings like manage_sprints or manage_iterations. It never explicitly contrasts itself with the analysis-oriented sibling ai_analyze, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use the `action` field to select the report" tells the agent how to switch reports but not when this tool is the right choice versus ai_analyze or the manage_* tools. No conditions for choosing between sprint_velocity, cycle_time, or project_summary are given, leaving selection to inference from the enum names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_toolsDiscover ToolsARead-onlyIdempotent
Discover available compound tools, their actions, and parameters. Always available regardless of group filter.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Free-text search across tool names and descriptions | |
| domain | No | Filter tools by domain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact, that the tool remains callable regardless of group filters, but says nothing about result size, pagination, or how actions are grouped in the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose stated first and the availability caveat second. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter read-only discovery tool with no output schema, the definition covers purpose, scope of results, and availability. The main remaining gap is the shape and volume of the returned tool catalogue, which an agent building a plan would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters carry their own descriptions plus a 16-value domain enum, so the schema does all the parameter work. The description adds no syntax, matching behavior, or interaction detail (e.g., whether query and domain combine) beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (discover) and resource (available compound tools) plus what the results contain: actions and parameters. This clearly differentiates it from every manage_*/ai_* sibling, which perform actions rather than enumerate them, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is 'Always available regardless of group filter,' which tells the agent the tool is never gated but not when to reach for it (e.g., before invoking an unfamiliar compound tool) or when the query/domain filters should be preferred over listing everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_automationManage AutomationBDestructive
Manage Project Automations: list, get and delete the automation workflows of a GitHub project. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The project automation workflow operation to perform | |
| projectId | No | ||
| workflowId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds almost nothing beyond that: it doesn't say whether delete is permanent or reversible, what happens to runs/history of a deleted workflow, whether permissions beyond project access are needed, or that list/get are safe reads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource and the operation list front-loaded, and the dispatch hint immediately after. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mixed read/write tool containing a destructive operation, with no output schema and two undocumented parameters. The description should clarify per-action parameter requirements and deletion consequences; without that, an agent cannot confidently call get_workflow or delete_workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%: `action` is documented in the schema, but `projectId` and `workflowId` have no descriptions anywhere. The description mentions 'of a GitHub project' hinting at projectId, but never states which identifier each action requires (workflowId for get/delete). With two-thirds of parameters undocumented, it fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource ('Manage Project Automations') and enumerates the three operations (list, get, delete) with scope limited to a GitHub project's automation workflows. It doesn't differentiate this from the sibling manage_workflows, so an agent could plausibly confuse the two GitHub workflow concepts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent to use the `action` field to select the operation, which is implied dispatch guidance, but there is no when-to-use, when-not-to-use, or alternative routing versus manage_workflows or manage_project. The agent must infer all selection logic from the enum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_branchesManage BranchesCDestructive
Manage GitHub Branch Protection: get, update, and delete a branch's protection rules; list repository branches. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (list_branches) | |
| repo | No | Repository name (defaults to the configured GITHUB_REPO) | |
| owner | No | Repository owner (defaults to the configured GITHUB_OWNER) | |
| action | Yes | The branch protection operation to perform | |
| branch | No | Branch name — required for get_protection, update_protection, and delete_protection | |
| perPage | No | Results per page (list_branches) | |
| protected | No | Filter to only protected branches (list_branches) | |
| lock_branch | No | ||
| restrictions | No | Restrict who can push to the branch — pass null to disable restrictions (update_protection) | |
| enforce_admins | No | Whether the restrictions also apply to repository admins (update_protection) | |
| allow_deletions | No | ||
| block_creations | No | ||
| allow_force_pushes | No | ||
| allow_fork_syncing | No | ||
| required_status_checks | No | Required status checks — pass null to disable the requirement (update_protection) | |
| required_linear_history | No | ||
| required_pull_request_reviews | No | Required pull request review rules — pass null to disable the requirement (update_protection) | |
| required_conversation_resolution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, non-idempotent, open-world, but the description adds nothing about consequences: that delete_protection strips protections for all contributors, that update_protection overwrites unspecified settings, or that admin permissions are required. For a destructive multi-action tool, that is the exact context the description should carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no padding, and the operation list is front-loaded. But the second sentence spends space on a low-value pointer to the action field rather than on content an agent cannot already read from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter destructive dispatcher with no output schema, the description covers only the action names. It omits what a successful get returns, what an update requires or replaces, and the danger semantics of deletion — the gaps an agent would actually need filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 61%, leaving lock_branch, allow_deletions, block_creations, allow_force_pushes, allow_fork_syncing, required_linear_history and required_conversation_resolution undocumented anywhere. The description does not compensate with any explanation of the protection toggles or their defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb set and resource: get, update, delete branch protection rules plus listing repository branches. The four capabilities map to the four action enum values, so an agent can tell it is not manage_prs or manage_releases. It stops short of explicitly enumerating the action strings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use the `action` field to select the operation' only restates the schema's enum mechanism. There is no guidance on when to pick get vs update vs delete, no prerequisites (admin scope on the repo), and no warning that delete_protection removes safeguards rather than merely editing them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_eventsManage EventsC
Manage Events: subscribe to project events, get recent events, replay events. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| action | Yes | The event operation to perform | |
| filters | No | ||
| clientId | No | ||
| endpoint | No | ||
| eventType | No | ||
| expiresAt | No | ||
| transport | No | ||
| resourceId | No | ||
| toTimestamp | No | ||
| resourceType | No | ||
| fromTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the description does not need to restate the safety profile. But it adds no behavioral context: it does not explain which actions have side effects, what subscribing creates, whether replay is safe to repeat, or any auth/persistence/rate-limit implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences with the operation list front-loaded and no wasted wording. The brief title repetition is negligible and does not hinder clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, multi-operation tool with no output schema and very low schema description coverage, two sentences are far from complete. The description does not explain the parameters, operation-specific conditions, return behavior, or side effects, leaving an agent unable to invoke it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 8% across 12 parameters. The description only points to the `action` field and repeats the three operation names, leaving `limit`, `filters`, `clientId`, `endpoint`, `eventType`, `expiresAt`, `transport`, timestamps, and resource filters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates three concrete event operations (subscribe, get recent, replay) and identifies the resource as project events, so the purpose is clear. It does not explicitly distinguish this tool from the many sibling manage_* tools, which keeps it at a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that the `action` field selects the operation, and lists the three operations, which implies how to invoke it. However, it gives no guidance on when to use subscribe versus get_recent versus replay, and names no alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_issuesManage IssuesBDestructive
Manage GitHub Issues: create, list, get, update issues; manage comments and drafts; search with advanced filters; manage sub-issues. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| repo | No | ||
| sort | No | ||
| type | No | The issue type: a native organization issue type (its name or `IT_…` id) or one of bug/feature/enhancement/documentation for the label emulation | |
| after | No | ||
| first | No | ||
| limit | No | ||
| owner | No | ||
| query | No | ||
| title | No | ||
| action | Yes | The issue operation to perform | |
| cursor | No | Cursor from a previous page's `nextCursor`; omit for the first page | |
| itemId | No | ||
| labels | No | ||
| status | No | ||
| issueId | No | ||
| perPage | No | ||
| assignee | No | ||
| priority | No | ||
| assignees | No | ||
| commentId | No | ||
| direction | No | ||
| milestone | No | ||
| projectId | No | ||
| assigneeIds | No | ||
| description | No | ||
| issueNumber | No | ||
| milestoneId | No | ||
| draftIssueId | No | ||
| replaceParent | No | ||
| idempotencyKey | No | Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours. | |
| subIssueNumber | No | ||
| blockingIssueId | No | The issue that blocks the given issue (native `blocked by` edge) | |
| afterIssueNumber | No | ||
| parentIssueNumber | No | ||
| dependencyDirection | No | `blocked_by` lists the issues that block this one, `blocking` the ones it blocks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already tell the agent this is destructive, non-idempotent, and open-world, which sets a lower bar. However, the tool bundles 22 actions with very different risk profiles and the description discloses none of them — it never says that delete_comment, delete_draft, remove_sub_issue, or remove_blocker are irreversible, nor which actions honor idempotencyKey. For a destructive mega-tool, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the verb and capability list, ending with the dispatch instruction. No wasted words. The brevity is arguably over-aggressive for a 22-action tool, but nothing extraneous is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dispatcher spanning 22 actions, 36 parameters (17% described), no output schema, and destructive semantics, the description covers only a fraction of what an agent needs. It never maps parameters to actions, lists required per-action inputs, or explains pagination, so successful invocation depends almost entirely on guesswork from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 17%, so the description must compensate and it does not. Beyond naming the required `action` dispatcher, it gives no meaning to repo, owner, issueNumber, cursor, perPage, type, dependencyDirection, or the many action-specific fields — an agent must infer which of the 36 parameters apply to each action purely from the schema, where most have no description either. This warrants the lowest tier. (Corrected score: 2.)
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Manage GitHub Issues') and enumerates the main capability clusters: CRUD, comments, drafts, search, sub-issues. It is clearly distinguishable from siblings like manage_prs or manage_labels. It falls short of 5 because the enumeration is incomplete against the 22-action enum — dependencies/blockers, issue types, and reprioritization are never hinted at.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Use the `action` field to select the operation,' which is a mechanical instruction, not a when-to-use rule. There is no advice on choosing between 22 actions, no note on which actions require which parameters, and no differentiation from siblings such as manage_project (for project fields) or manage_labels (for label definitions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_iterationsManage IterationsC
Manage Project Iterations: get configuration, current iteration, items; find by date; assign items. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| limit | No | ||
| action | Yes | The iteration operation to perform | |
| itemIds | No | ||
| fieldName | No | ||
| projectId | No | ||
| iterationId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the tool is not read-only, not idempotent, and non-destructive, but the description does not clarify which actions are reads versus writes. In particular, `assign_items` is a mutation, yet the description does not explain what it changes, whether it replaces or adds assignments, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, listing the operations immediately and then explaining how to select one. It avoids waste, though it is arguably too terse given the tool's multi-action complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five actions, seven parameters, low schema description coverage, and no output schema, the description is missing critical details. It does not explain action-specific parameters, mutation behavior for `assign_items`, or what each operation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14%, so the description must compensate but largely does not. It implies `date` for `get_by_date` and `itemIds` for `assign_items`, but leaves `fieldName`, `projectId`, `iterationId`, and `limit` unexplained and does not map parameters to actions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (Project Iterations) and enumerates the operations: get configuration, current iteration, items, find by date, and assign items. This is clear enough to distinguish it from general project tools, though it does not explicitly differentiate it from similar siblings such as manage_sprints or manage_milestones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only says to use the `action` field to select the operation, which is structural guidance rather than usage guidance. It does not explain when to choose each action, which parameters are required for each action, or when to use an alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_labelsManage LabelsB
Manage repository Labels: create and list labels. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| color | No | ||
| limit | No | ||
| action | Yes | The label operation to perform | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=true and non-idempotent, so the safety profile is largely covered. The description adds the useful nuance that 'list' is a read operation while 'create' mutates, but says nothing about permissions, duplicate-label behavior, or whether create is safe to retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the capability and followed by the control-field hint. No wasted words, though the brevity comes partly at the cost of the missing parameter detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters at 20% schema coverage, no output schema, and a dual-action tool, the description should map parameters to actions and hint at results (e.g., what a list returns). It omits all of that, so an agent must infer which fields matter for which action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must carry the burden — but it only names the `action` field, which the schema already documents via enum and description. It never explains that `name`, `color`, and `description` apply to create, or that `limit` applies to list, leaving four of five parameters uninterpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb set and resource: 'create and list labels' for a repository, which is more specific than the generic name 'manage_labels'. It does not explicitly distinguish itself from the many sibling manage_* tools, but the label resource is distinct enough for selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to use the `action` field to pick the operation, and the enum limits that to create/list. However, it gives no guidance on when to choose this tool over siblings, no prerequisites, and no explanation of when create vs list is appropriate beyond the obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_milestonesManage MilestonesCDestructive
Manage Milestones: create, list, update, delete milestones; get metrics; find overdue and upcoming milestones. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| state | No | ||
| title | No | ||
| action | Yes | The milestone operation to perform | |
| status | No | ||
| dueDate | No | ||
| daysAhead | No | ||
| direction | No | ||
| description | No | ||
| milestoneId | No | ||
| includeIssues | No | ||
| idempotencyKey | No | Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows writes and deletions are possible. The description adds nothing beyond that: it does not say which of the seven actions mutate or destroy data, whether deletes cascade to linked issues, or what permissions are required. For a multi-action mutation tool this leaves the behavioral picture thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, operation list front-loaded, no filler or repetition of the title. It is arguably too terse for its complexity, but nothing present is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 13-parameter, seven-action dispatcher with no output schema and no per-action documentation, which puts a heavy burden on the description. The description does not tell the agent which parameters belong to which action, what each action returns, or how pagination via limit/sort/direction works. It is far from complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 15%, well under the 50% threshold, so the description must carry the load and does not. It identifies `action` as the selector but says nothing about the other 12 parameters — notably the redundant-looking `state` vs `status` enums, `daysAhead`, `includeIssues`, or which params are required per action. An agent must guess parameter applicability from enum names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (milestones) and enumerates the concrete operations: create, list, update, delete, get metrics, get overdue, get upcoming. An agent immediately knows the tool's scope. It does not explicitly differentiate from siblings such as manage_iterations or manage_sprints, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use the `action` field to select the operation" gives basic dispatcher guidance and the enumerated action list implies when each mode applies. However, there is no guidance on when to pick this tool over a sibling, no prerequisites, and no explanation of which parameters apply to which action (e.g., daysAhead only makes sense for get_upcoming).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_projectManage ProjectsCDestructive
Manage GitHub Projects (v2): create, list, get, update, delete projects; manage readme, fields, views, items; handle templates and link to repos/teams. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| org | No | ||
| name | No | ||
| repo | No | ||
| type | No | Type of the field to create — exactly the types GitHub's ProjectV2CustomFieldType accepts | |
| after | No | ||
| first | No | ||
| limit | No | ||
| owner | No | ||
| title | No | ||
| value | No | ||
| action | Yes | The project operation to perform | |
| closed | No | update: true closes the project, false reopens it | |
| cursor | No | Cursor from a previous page's `nextCursor`; omit for the first page | |
| filter | No | ||
| itemId | No | ||
| layout | No | Layout of the view — exactly the layouts GitHub's ProjectV2ViewLayout accepts | |
| readme | No | ||
| status | No | ||
| viewId | No | ||
| afterId | No | ||
| fieldId | No | ||
| options | No | ||
| required | No | ||
| teamSlug | No | ||
| contentId | No | ||
| projectId | No | ||
| visibility | No | ||
| contentType | No | ||
| description | No | ||
| targetOwner | No | ||
| collaborators | No | The collaborators to grant a role to, one entry per user or team | |
| idempotencyKey | No | Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours. | |
| shortDescription | No | ||
| includeDraftIssues | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false, and readOnlyHint=false, so the high-level safety profile is known. The description lists operation categories including delete and remove, but it does not disclose action-level behavior such as which actions are destructive versus read-only, what permissions are required, whether operations are reversible, or how partial failures behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the core purpose before listing operation categories. It is compact and avoids filler, though the long run-on operation list becomes hard to parse for a tool with 38 actions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity tool with 34 parameters, 38 enum actions, nested objects, and destructive behavior, but the description never explains action-specific requirements or side effects. The annotations cover general safety hints, yet the description remains too thin for an agent to invoke most actions correctly without studying the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 34 parameters, 21% schema description coverage, and only the `action` field mentioned in the description, the definition provides almost no parameter meaning beyond the schema. It does not map actions to required or optional parameters, explain nested objects like `filter` or `collaborators`, or clarify when fields such as `org`, `owner`, `projectId`, and `contentId` are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource, GitHub Projects v2, and lists the main operations: create, list, get, update, delete, plus readme, fields, views, items, templates, and repo/team links. This distinguishes it from issue-, PR-, and label-oriented siblings, but it does not explicitly name sibling tools or clarify edge cases where a project operation overlaps with those tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage guidance is 'Use the `action` field to select the operation,' which restates the required schema field rather than explaining when to choose this tool over alternatives. It gives no guidance on choosing among the 38 actions, no when-not-to-use conditions, and no prerequisites for destructive or permission-sensitive operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_prsManage Pull RequestsC
Manage Pull Requests: create, get, list, update, merge PRs; list and create reviews. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | ||
| body | No | ||
| head | No | ||
| draft | No | ||
| event | No | ||
| state | No | ||
| title | No | ||
| action | Yes | The pull request operation to perform | |
| perPage | No | ||
| comments | No | ||
| pullNumber | No | ||
| commitTitle | No | ||
| mergeMethod | No | ||
| commitMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true, so the safety profile is covered. The description adds no behavioral context of its own: nothing about merge irreversibility, review side effects, pagination via perPage, or rate limits. For a multi-operation mutation tool this is a real gap beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and operations. It is well-sized with no filler, though the second sentence largely restates what the action enum already shows.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 14 parameters, seven dispatchable operations, no output schema, and near-zero schema documentation, the description is far too thin. An agent cannot tell which parameters belong to which action, what a merge response looks like, or how pagination works without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 7% across 14 parameters, so the description must compensate and it does not. It only mentions `action` (already documented in the schema) and explains nothing about base/head, mergeMethod, commitTitle/commitMessage, event, comments[].path/position, or perPage — leaving most parameters semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (Pull Requests) and enumerates concrete operations (create, get, list, update, merge, list_reviews, create_review), which distinguishes it from sibling tools like manage_issues or manage_milestones. It stops short of 5 because the operation list is essentially a restatement of the action enum rather than a clarification of scope differences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use the `action` field to select the operation" tells the agent how to dispatch among the seven operations, which is useful implied usage. However there is no guidance on when to pick this over siblings, no prerequisites (repo/owner context, auth), and no indication of which parameters are required for which action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_releasesManage ReleasesBDestructive
Manage GitHub Releases: create, list, get, update, delete releases; get the latest release. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Text describing the release (release notes) | |
| name | No | The release title | |
| repo | No | Repository name | |
| draft | No | Whether to save the release as a draft (unpublished) | |
| owner | No | Repository owner (org or user login) | |
| action | Yes | The release operation to perform | |
| tag_name | No | The git tag the release is based on (required for create) | |
| releaseId | No | The release ID (required for get, update, delete) | |
| prerelease | No | Whether to identify the release as a prerelease | |
| target_commitish | No | The branch name or commit SHA the git tag is created from (create only; defaults to the repository's default branch when the tag doesn't already exist) | |
| generate_release_notes | No | Whether GitHub should automatically generate release notes for this release (create only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the description does not need to re-state that. It adds nothing beyond them: no statement that delete is irreversible, no note that create requires tag_name (only in schema), no auth or rate-limit context. For a destructive multi-action tool this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and operation list, no filler. Slightly wasteful because the verb list repeats the action enum already visible in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Eleven parameters across six action modes is non-trivial, but the schema carries the per-action parameter mapping well and there is no output schema to explain. What is missing is behavioral context a caller needs for a destructive dispatcher: which actions need write scope, whether delete can be undone. Adequate, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself documents per-action requirements (tag_name 'required for create', releaseId 'required for get, update, delete', target_commitish/generate_release_notes 'create only'). The description only mentions the action field, which the schema already explains. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (GitHub Releases) and enumerates the six operations, which line up exactly with the action enum. It is distinguishable from siblings by resource, though the 'manage_' prefix pattern shared with manage_issues, manage_prs, etc. means the only differentiator is the noun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent to use the action field to select the operation, which is minimal routing guidance, but gives no when-to-use or when-not-to-use context, no prerequisites (e.g. permissions to create/delete releases), and does not point to any alternative tool or mention that get_latest differs from list+filter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_sprintsManage SprintsBDestructive
Manage Sprints: create, list, update, delete sprints (delete requires confirm: true); get current sprint; add/remove issues; get metrics and plan. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| action | Yes | The sprint operation to perform | |
| sprint | No | ||
| status | No | ||
| confirm | No | delete: must be true. Deleting a sprint removes the iteration from its project and clears it from every assigned item; it cannot be undone | |
| endDate | No | ||
| issueIds | No | ||
| sprintId | No | ||
| projectId | No | Project ID (required for create — sprints are iteration fields on a specific project) | |
| startDate | No | ||
| description | No | ||
| includeIssues | No | ||
| idempotencyKey | No | Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is carried structurally. The description's main behavioral note, 'delete requires confirm: true', duplicates the schema's own confirm parameter description, and it says nothing about permissions, per-action side effects, or the effect of idempotencyKey on retries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight block that is front-loaded with the operation list and ends with the dispatch instruction; nothing is padding. It loses a little by restating the title verbatim ('Manage Sprints:') before saying anything new.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive multi-action dispatcher with no output schema and a nested object parameter, the description omits the most valuable information: which parameters are required for which action. A caller cannot tell from this text what `create` needs versus what `get_metrics` needs, and no return shape is hinted at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 13 parameters, a nested sprint object, and only 31% schema description coverage, the description must compensate and largely does not: sprint, status, startDate/endDate, issueIds, includeIssues, and description are given no meaning at all. It only mirrors the delete-confirm rule and the action enumeration, both already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb set plus resource ('create, list, update, delete sprints') and enumerates the operation surface (get current sprint, add/remove issues, get metrics and plan). An agent knows exactly what the tool covers, but it never distinguishes itself from plausible siblings such as manage_iterations or ai_plan, which likely overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one piece of routing guidance — 'Use the `action` field to select the operation' — which tells the agent how to drive the dispatcher. There is no guidance on when to pick this tool over manage_iterations/ai_plan, and no per-action preconditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_status_updatesManage Status UpdatesC
Manage project Status Updates: create, list, and get status updates. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| after | No | ||
| first | No | ||
| action | Yes | The status update operation to perform | |
| cursor | No | Cursor from a previous page's `nextCursor`; omit for the first page | |
| status | No | ||
| projectId | No | ||
| startDate | No | ||
| targetDate | No | ||
| statusUpdateId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare that this is mutating (readOnlyHint=false), open-world, non-idempotent, and non-destructive, but the description adds no behavioral context beyond that. It does not mention permissions, side effects of create, or how list pagination behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the operation list is front-loaded. The extreme brevity leaves gaps, but the wording itself is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with three distinct actions and no output schema, this definition is far too thin. An agent cannot infer required parameters per action or what a successful response will contain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, and the description explains only the already-documented `action` field. It does not clarify the roles of body, status, projectId, startDate, targetDate, statusUpdateId, first, or after, nor which parameters apply to which action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (project Status Updates) and enumerates create, list, and get, so an agent can tell what the tool does. It does not distinguish this tool from related siblings or clarify the scope of 'project'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only says to use the `action` field to select the operation, which is an invocation instruction rather than guidance on when to choose this tool over alternatives. No when-not conditions, prerequisites, or sibling comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_workflowsManage WorkflowsADestructive
Manage GitHub Actions Workflows: list workflows, trigger dispatch events, inspect run status and logs, list runs, and cancel runs. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git branch or tag ref — required for trigger_dispatch | |
| page | No | Page number for pagination (list_workflows, list_runs) | |
| repo | No | Repository name (defaults to the configured GITHUB_REPO) | |
| limit | No | Results per page (list_workflows, list_runs) — maps to per_page | |
| owner | No | Repository owner (defaults to the configured GITHUB_OWNER) | |
| runId | No | Workflow run ID — required for get_run, get_run_logs, cancel_run | |
| action | Yes | The GitHub Actions workflow operation to perform | |
| branch | No | Filter runs by branch name (list_runs) | |
| inputs | No | Input values for the workflow's `workflow_dispatch` trigger (trigger_dispatch) | |
| status | No | Filter runs by status (list_runs) | |
| workflowId | No | Workflow ID or filename (e.g. 'ci.yml') — required for trigger_dispatch and list_runs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is largely carried by structured data. The description could have added real value by disambiguating which of the six actions are destructive (cancel_run, trigger_dispatch) versus read-only (list_workflows, get_run) — a tool-wide destructiveHint is potentially misleading without that breakdown. No mention of auth/permission requirements or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, operation list front-loaded ahead of the control-field instruction. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should have said something about what each action returns (workflow list vs run object vs log text) — an agent cannot infer the response shape for six distinct operations. Eleven parameters across a conditional action dispatch also merit a sentence on combinations, though the schema covers those requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and per-parameter text already specifies which action each param applies to (e.g. runId for get_run/get_run_logs/cancel_run, ref for trigger_dispatch). The description adds nothing beyond pointing at the `action` enum, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (GitHub Actions Workflows) and enumerates all six supported operations: list, trigger dispatch, inspect run status/logs, list runs, cancel. An agent can tell exactly what the tool covers, though it does not contrast itself against any sibling (none of the siblings are workflow-related, so differentiation is implicit).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use the `action` field to select the operation' is a routing hint, not usage guidance. It never says when to prefer this tool over, say, manage_prs checks or direct API calls, nor does it explain prerequisites (auth scopes, which actions mutate state). Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
systemSystemCIdempotent
System operations: health check and project field setup. Use the action field to select the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The system operation to perform | |
| projectId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, but the mixed nature of the bundled operations is never clarified — health_check appears read-only while setup_project_fields mutates project configuration. The description says nothing about what setup_project_fields creates or overwrites, whether it is safe to re-run, or what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation list and followed by the dispatch instruction. Nothing is padded, though the second sentence carries almost no information beyond what the schema already shows.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation dispatcher with no output schema and only 50% parameter coverage, the description should describe what each action does and returns. Instead it only names them, leaving the agent unable to predict behavior or output for either operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: `action` has an enum, but `projectId` has no schema description at all. The description does not state that projectId is only relevant to setup_project_fields and can be omitted for health_check, which is the single most useful clarification it could have added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the two concrete operations (health check and project field setup) and states the dispatcher pattern via the `action` field. It is distinguishable from every sibling (all of which are manage_*/ai_*/agent_* tools), though the umbrella label 'System operations' is vague on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is mechanical: 'Use the `action` field to select the operation.' It never says when an agent should call health_check versus setup_project_fields, whether setup must precede other project work, or what prerequisites exist. The agent must infer the trigger for each action from the enum names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v4.0.0- Changed
agent_manage2 fields changed- changed
Input schema / oneOfPrevious value: -[ - { - "properties": { - "action": { - "const": "list", - "type": "string" - }, - "role": { - "enum": [ - "engineer", - "reviewer", - "pm", - "designer", - "qa", - "devops", - "general" - ], - "type": "string" - }, - "status": { - "enum": [ - "idle", - "working", - "blocked", - "needs_review", - "offline", - "budget_exhausted" - ], - "type": "string" - } - }, - "required": [ - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "deregister", - "type": "string" - }, - "agentId": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "agentId", - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "get_activity", - "type": "string" - }, - "includeOffline": { - "default": false, - "type": "boolean" - } - }, - "required": [ - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "submit_work_product", - "type": "string" - }, - "agentId": { - "minLength": 1, - "type": "string" - }, - "branch": { - "type": "string" - }, - "commitShas": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "filesChanged": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "issueNumber": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "prNumber": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "summary": { - "minLength": 1, - "type": "string" - }, - "taskId": { - "minLength": 1, - "type": "string" - }, - "testsFailed": { - "minimum": 0, - "type": "number" - }, - "testsPassed": { - "minimum": 0, - "type": "number" - }, - "testsTotal": { - "minimum": 0, - "type": "number" - } - }, - "required": [ - "agentId", - "taskId", - "issueNumber", - "summary", - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "get_budget", - "type": "string" - }, - "agentId": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "agentId", - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "set_budget", - "type": "string" - }, - "agentId": { - "minLength": 1, - "type": "string" - }, - "hardStop": { - "default": true, - "type": "boolean" - }, - "resetPeriod": { - "enum": [ - "daily", - "weekly", - "monthly", - "never" - ], - "type": "string" - }, - "totalTokens": { - "exclusiveMinimum": 0, - "type": "number" - }, - "warningFraction": { - "description": "Warning threshold as a 0-1 fraction", - "maximum": 1, - "minimum": 0, - "type": "number" - }, - "warningThreshold": { - "description": "Compatibility alias for warningFraction (0-1 warning threshold)", - "maximum": 1, - "minimum": 0, - "type": "number" - } - }, - "required": [ - "agentId", - "totalTokens", - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "reclaim_stale", - "type": "string" - }, - "timeoutMinutes": { - "exclusiveMinimum": 0, - "type": "number" - } - }, - "required": [ - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "record_usage", - "type": "string" - }, - "agentId": { - "minLength": 1, - "type": "string" - }, - "tokensUsed": { - "minimum": 0, - "type": "number" - } - }, - "required": [ - "agentId", - "tokensUsed", - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "get_metrics", - "type": "string" - }, - "staleAfterMinutes": { - "exclusiveMinimum": 0, - "type": "number" - } - }, - "required": [ - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "setup_fields", - "type": "string" - }, - "projectId": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "projectId", - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "assign_task", - "type": "string" - }, - "agentId": { - "minLength": 1, - "type": "string" - }, - "issueNumber": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "projectId": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "action", - "agentId", - "projectId", - "issueNumber" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "get_swarm_status", - "type": "string" - }, - "staleAfterMinutes": { - "default": 30, - "exclusiveMinimum": 0, - "type": "number" - } - }, - "required": [ - "action" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "rebalance_workload", - "type": "string" - }, - "agentIds": { - "description": "Filter reassignment to specific agent IDs", - "items": { - "type": "string" - }, - "type": "array" - }, - "maxAssignments": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "projectId": { - "minLength": 1, - "type": "string" - }, - "roleFilter": { - "description": "Filter reassignment to agents with this role", - "type": "string" - }, - "staleAfterMinutes": { - "default": 30, - "exclusiveMinimum": 0, - "type": "number" - } - }, - "required": [ - "action", - "projectId" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "decompose_task", - "type": "string" - }, - "issueNumber": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "projectId": { - "minLength": 1, - "type": "string" - }, - "subtasks": { - "description": "Subtasks for decompose_task — PM splits a rejected task into smaller pieces", - "items": { - "properties": { - "acceptanceCriteria": { - "type": "string" - }, - "description": { - "minLength": 1, - "type": "string" - }, - "title": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "title", - "description" - ], - "type": "object" - }, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "action", - "projectId", - "issueNumber", - "subtasks" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "smart_assign", - "type": "string" - }, - "agentIds": { - "description": "Filter smart_assign to specific agent IDs", - "items": { - "type": "string" - }, - "type": "array" - }, - "maxAssignments": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "projectId": { - "minLength": 1, - "type": "string" - }, - "roleFilter": { - "description": "Filter smart_assign to agents with this role", - "type": "string" - } - }, - "required": [ - "action", - "projectId" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "converge_project", - "type": "string" - }, - "projectId": { - "minLength": 1, - "type": "string" - }, - "reviewerId": { - "description": "Reviewer agent to attribute approve/reject lifecycle actions to, when available", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "action", - "projectId" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "converge_until_done", - "type": "string" - }, - "iteration": { - "default": 1, - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "maxIterations": { - "default": 10, - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "projectId": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "action", - "projectId" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "cleanup_registry", - "type": "string" - }, - "staleAfterMinutes": { - "default": 60, - "exclusiveMinimum": 0, - "type": "number" - } - }, - "required": [ - "action" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "action": { + "const": "list", + "type": "string" + }, + "role": { + "enum": [ + "engineer", + "reviewer", + "pm", + "designer", + "qa", + "devops", + "general" + ], + "type": "string" + }, + "status": { + "enum": [ + "idle", + "working", + "blocked", + "needs_review", + "offline", + "budget_exhausted" + ], + "type": "string" + } + }, + "required": [ + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "deregister", + "type": "string" + }, + "agentId": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "agentId", + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "get_activity", + "type": "string" + }, + "includeOffline": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "submit_work_product", + "type": "string" + }, + "agentId": { + "minLength": 1, + "type": "string" + }, + "branch": { + "type": "string" + }, + "commitShas": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "filesChanged": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "issueNumber": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "prNumber": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "summary": { + "minLength": 1, + "type": "string" + }, + "taskId": { + "minLength": 1, + "type": "string" + }, + "testsFailed": { + "minimum": 0, + "type": "number" + }, + "testsPassed": { + "minimum": 0, + "type": "number" + }, + "testsTotal": { + "minimum": 0, + "type": "number" + } + }, + "required": [ + "agentId", + "taskId", + "issueNumber", + "summary", + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "get_budget", + "type": "string" + }, + "agentId": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "agentId", + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "set_budget", + "type": "string" + }, + "agentId": { + "minLength": 1, + "type": "string" + }, + "hardStop": { + "default": true, + "type": "boolean" + }, + "resetPeriod": { + "enum": [ + "daily", + "weekly", + "monthly", + "never" + ], + "type": "string" + }, + "totalTokens": { + "exclusiveMinimum": 0, + "type": "number" + }, + "warningFraction": { + "description": "Warning threshold as a 0-1 fraction", + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "agentId", + "totalTokens", + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "reclaim_stale", + "type": "string" + }, + "timeoutMinutes": { + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "record_usage", + "type": "string" + }, + "agentId": { + "minLength": 1, + "type": "string" + }, + "tokensUsed": { + "minimum": 0, + "type": "number" + } + }, + "required": [ + "agentId", + "tokensUsed", + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "get_metrics", + "type": "string" + }, + "staleAfterMinutes": { + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "setup_fields", + "type": "string" + }, + "projectId": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "projectId", + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "assign_task", + "type": "string" + }, + "agentId": { + "minLength": 1, + "type": "string" + }, + "issueNumber": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "projectId": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "action", + "agentId", + "projectId", + "issueNumber" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "get_swarm_status", + "type": "string" + }, + "staleAfterMinutes": { + "default": 30, + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "action" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "rebalance_workload", + "type": "string" + }, + "agentIds": { + "description": "Filter reassignment to specific agent IDs", + "items": { + "type": "string" + }, + "type": "array" + }, + "maxAssignments": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "projectId": { + "minLength": 1, + "type": "string" + }, + "roleFilter": { + "description": "Filter reassignment to agents with this role", + "type": "string" + }, + "staleAfterMinutes": { + "default": 30, + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "action", + "projectId" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "decompose_task", + "type": "string" + }, + "issueNumber": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "projectId": { + "minLength": 1, + "type": "string" + }, + "subtasks": { + "description": "Subtasks for decompose_task — PM splits a rejected task into smaller pieces", + "items": { + "properties": { + "acceptanceCriteria": { + "type": "string" + }, + "description": { + "minLength": 1, + "type": "string" + }, + "title": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "title", + "description" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "action", + "projectId", + "issueNumber", + "subtasks" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "smart_assign", + "type": "string" + }, + "agentIds": { + "description": "Filter smart_assign to specific agent IDs", + "items": { + "type": "string" + }, + "type": "array" + }, + "maxAssignments": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "projectId": { + "minLength": 1, + "type": "string" + }, + "roleFilter": { + "description": "Filter smart_assign to agents with this role", + "type": "string" + } + }, + "required": [ + "action", + "projectId" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "converge_project", + "type": "string" + }, + "projectId": { + "minLength": 1, + "type": "string" + }, + "reviewerId": { + "description": "Reviewer agent to attribute approve/reject lifecycle actions to, when available", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "action", + "projectId" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "converge_until_done", + "type": "string" + }, + "iteration": { + "default": 1, + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "maxIterations": { + "default": 10, + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "projectId": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "action", + "projectId" + ], + "type": "object" + }, + { + "properties": { + "action": { + "const": "cleanup_registry", + "type": "string" + }, + "staleAfterMinutes": { + "default": 60, + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "action" + ], + "type": "object" + } +] - removed
Input schema / properties / warningThresholdRemoved value: -{ - "description": "Compatibility alias for warningFraction (0-1 warning threshold)", - "maximum": 1, - "minimum": 0, - "type": "number" -}
- Changed
ai_generate1 field changed- removed
Input schema / properties / targetPRDRemoved value: -{ - "type": "string" -}
- Added
analytics - Changed
discover_tools1 field changed- changed
Input schema / properties / domain / enumPrevious value: -[ - "projects", - "issues", - "pull_requests", - "milestones", - "sprints", - "labels", - "automation", - "iterations", - "events", - "status_updates", - "ai_generation", - "ai_analysis", - "ai_planning", - "agents", - "system" -]New value: +[ + "projects", + "issues", + "pull_requests", + "milestones", + "sprints", + "labels", + "automation", + "iterations", + "events", + "status_updates", + "analytics", + "ai_generation", + "ai_analysis", + "ai_planning", + "agents", + "system" +]
- Changed
manage_issues2 fields changed- added
Input schema / properties / cursorAdded value: +{ + "description": "Cursor from a previous page's `nextCursor`; omit for the first page", + "type": "string" +} - added
Input schema / properties / idempotencyKeyAdded value: +{ + "description": "Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours.", + "maxLength": 128, + "minLength": 1, + "type": "string" +}
- Changed
manage_milestones1 field changed- added
Input schema / properties / idempotencyKeyAdded value: +{ + "description": "Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours.", + "maxLength": 128, + "minLength": 1, + "type": "string" +}
- Changed
manage_project3 fields changed- added
Input schema / properties / closedAdded value: +{ + "description": "update: true closes the project, false reopens it", + "type": "boolean" +} - added
Input schema / properties / cursorAdded value: +{ + "description": "Cursor from a previous page's `nextCursor`; omit for the first page", + "type": "string" +} - added
Input schema / properties / idempotencyKeyAdded value: +{ + "description": "Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours.", + "maxLength": 128, + "minLength": 1, + "type": "string" +}
- Changed
manage_sprints3 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "list", - "get_current", - "update", - "add_issues", - "remove_issues", - "get_metrics", - "plan" -]New value: +[ + "create", + "list", + "get_current", + "update", + "add_issues", + "remove_issues", + "get_metrics", + "plan", + "delete" +] - added
Input schema / properties / confirmAdded value: +{ + "description": "delete: must be true. Deleting a sprint removes the iteration from its project and clears it from every assigned item; it cannot be undone", + "type": "boolean" +} - added
Input schema / properties / idempotencyKeyAdded value: +{ + "description": "Idempotency key (1-128 chars) for create actions: retrying with the same key and arguments returns the first result instead of creating a duplicate; reusing it with different arguments is an error. Kept for 24 hours.", + "maxLength": 128, + "minLength": 1, + "type": "string" +}
- Changed
manage_status_updates1 field changed- added
Input schema / properties / cursorAdded value: +{ + "description": "Cursor from a previous page's `nextCursor`; omit for the first page", + "type": "string" +}
104 tool updates
v3.0.0- Removed
add_feature - Removed
add_issues_to_sprint - Removed
add_project_item - Added
agent_manage - Added
agent_work - Added
ai_analyze - Added
ai_generate - Added
ai_plan - Removed
analyze_task_complexity - Removed
archive_project_item - Removed
assign_items_to_iteration - Removed
clear_field_value - Removed
create_automation_rule - Removed
create_draft_issue - Removed
create_issue - Removed
create_issue_comment - Removed
create_label - Removed
create_milestone - Removed
create_project - Removed
create_project_field - Removed
create_project_view - Removed
create_pull_request - Removed
create_pull_request_review - Removed
create_roadmap - Removed
create_sprint - Removed
create_traceability_matrix - Removed
delete_automation_rule - Removed
delete_draft_issue - Removed
delete_issue_comment - Removed
delete_milestone - Removed
delete_project - Removed
delete_project_view - Removed
disable_automation_rule - Added
discover_tools - Removed
enable_automation_rule - Removed
enhance_prd - Removed
enrich_issue - Removed
enrich_issues_bulk - Removed
expand_task - Removed
generate_prd - Removed
generate_roadmap - Removed
get_automation_rule - Removed
get_current_iteration - Removed
get_current_sprint - Removed
get_field_value - Removed
get_issue - Removed
get_iteration_by_date - Removed
get_iteration_configuration - Removed
get_iteration_items - Removed
get_milestone_metrics - Removed
get_next_task - Removed
get_overdue_milestones - Removed
get_project - Removed
get_project_readme - Removed
get_pull_request - Removed
get_sprint_metrics - Removed
get_upcoming_milestones - Removed
list_automation_rules - Removed
list_issue_comments - Removed
list_issues - Removed
list_labels - Removed
list_milestones - Removed
list_project_fields - Removed
list_project_items - Removed
list_project_views - Removed
list_projects - Removed
list_pull_request_reviews - Removed
list_pull_requests - Removed
list_sprints - Added
manage_automation - Added
manage_branches - Added
manage_events - Added
manage_issues - Added
manage_iterations - Added
manage_labels - Added
manage_milestones - Added
manage_project - Added
manage_prs - Added
manage_releases - Added
manage_sprints - Added
manage_status_updates - Added
manage_workflows - Removed
merge_pull_request - Removed
parse_prd - Removed
plan_sprint - Removed
remove_issues_from_sprint - Removed
remove_project_item - Removed
schedule_triaging - Removed
set_field_value - Added
system - Removed
triage_all_issues - Removed
triage_issue - Removed
unarchive_project_item - Removed
update_automation_rule - Removed
update_draft_issue - Removed
update_issue - Removed
update_issue_comment - Removed
update_milestone - Removed
update_project - Removed
update_project_field - Removed
update_project_readme - Removed
update_project_view - Removed
update_pull_request - Removed
update_sprint
38 tool updates
v1.0.0- Added
archive_project_item - Added
assign_items_to_iteration - Added
clear_field_value - Added
create_automation_rule - Added
create_draft_issue - Added
create_issue_comment - Added
create_pull_request - Added
create_pull_request_review - Added
delete_automation_rule - Added
delete_draft_issue - Added
delete_issue_comment - Added
delete_project_view - Added
disable_automation_rule - Added
enable_automation_rule - Added
enrich_issue - Added
enrich_issues_bulk - Added
generate_roadmap - Added
get_automation_rule - Added
get_current_iteration - Added
get_iteration_by_date - Added
get_iteration_configuration - Added
get_iteration_items - Added
get_project_readme - Added
get_pull_request - Added
list_automation_rules - Added
list_issue_comments - Added
list_pull_request_reviews - Added
list_pull_requests - Added
merge_pull_request - Added
schedule_triaging - Added
triage_all_issues - Added
triage_issue - Added
unarchive_project_item - Added
update_automation_rule - Added
update_draft_issue - Added
update_issue_comment - Added
update_project_readme - Added
update_pull_request
46 tool updates
- First observed
add_feature - First observed
add_issues_to_sprint - First observed
add_project_item - First observed
analyze_task_complexity - First observed
create_issue - First observed
create_label - First observed
create_milestone - First observed
create_project - First observed
create_project_field - First observed
create_project_view - First observed
create_roadmap - First observed
create_sprint - First observed
create_traceability_matrix - First observed
delete_milestone - First observed
delete_project - First observed
enhance_prd - First observed
expand_task - First observed
generate_prd - First observed
get_current_sprint - First observed
get_field_value - First observed
get_issue - First observed
get_milestone_metrics - First observed
get_next_task - First observed
get_overdue_milestones - First observed
get_project - First observed
get_sprint_metrics - First observed
get_upcoming_milestones - First observed
list_issues - First observed
list_labels - First observed
list_milestones - First observed
list_project_fields - First observed
list_project_items - First observed
list_project_views - First observed
list_projects - First observed
list_sprints - First observed
parse_prd - First observed
plan_sprint - First observed
remove_issues_from_sprint - First observed
remove_project_item - First observed
set_field_value - First observed
update_issue - First observed
update_milestone - First observed
update_project - First observed
update_project_field - First observed
update_project_view - First observed
update_sprint
TDQS
Scored across 21 tools
Most tools are cleanly separated by GitHub resource or domain: issues, PRs, releases, workflows, milestones, sprints, labels, and analytics each have a distinct target. However, there is meaningful overlap between agent_manage and agent_work, and between ai_plan, ai_generate, ai_analyze, and analytics, which could cause misselection for planning/analysis tasks.
The naming is consistently snake_case and mostly follows predictable prefixes such as manage_*, ai_*, and agent_*. Minor deviations exist: some names are noun-only (analytics, system), and singular/plural patterns vary (manage_project vs manage_issues, manage_prs abbreviation).
At 21 tools, the server is on the heavy side for an MCP surface, though the use of compound action-based tools mitigates some complexity. The broad project-management scope justifies many categories, but the count is still borderline and could overwhelm agents choosing among similar AI/agent tools.
The surface covers a broad GitHub project-management lifecycle: projects, issues, PRs, milestones, sprints, iterations, releases, workflows, branch protection, analytics, AI assistance, and agent coordination. Some minor gaps remain, such as limited label lifecycle operations and incomplete comment/review management, but core workflows are well covered.
Maintenance
Related MCP Connectors
Tasks, sprints, releases and docs for engineering teams with AI coding agents.
A MCP server built for developers enabling Git based project management with project and personal…
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Related MCP Servers
- PythonMIT
- FlicenseNot gradedqualityDmaintenanceA production-ready server featuring over 28 tools for comprehensive GitHub analysis, including repository metadata, issue tracking, and workflow monitoring. It enables users to search repositories, analyze contributor activity, and inspect codebase health through natural language.1-
- FlicenseNot gradedqualityCmaintenanceEnables managing GitHub Projects v2 boards through Claude Code and Codex, including project and item administration, field updates, sprint boards, epic rollups, and desired-state planning.-
- AlicenseNot gradedqualityAmaintenanceTurns GitHub Projects v2 into an agentic project-management platform where AI coding agents can register, claim and track tasks, coordinate via heartbeats, review work, and stay within token budgets. It also enables AI-powered PRD generation, sprint planning, issue triage, roadmap creation, and PRD-to-issue materialization using GitHub-native storage.453 npmMIT