Skip to main content
Glama
kunwarVivek

mcp-github-project-manager

by kunwarVivek

MCP GitHub Project Manager

npm version License: MIT

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, action-routed

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_manage give 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_usage covers the agent's own runtime spend.

  • AI plans are worthless if they never become issues. ai_generate runs 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_tools expands 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-manager

Register 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 --build

Install 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

manage_project

core

38

Projects v2: CRUD, close/reopen, fields, views, items, templates, repo/team linking, collaborators

manage_issues

core

22

Issue CRUD, comments, drafts, advanced search, sub-issues, native blockers, issue types

manage_prs

core

7

Create, list, update, merge, reviews

manage_milestones

core

7

CRUD, metrics, overdue and upcoming

manage_sprints

core

9

Create, update, delete (needs confirm: true), plan, add/remove issues, metrics

manage_labels

core

2

Create and list repository labels

manage_automation

core

3

Project workflows: list, get, delete

manage_iterations

core

5

Iteration config, current iteration, items, by-date, assign

manage_status_updates

core

3

Project status updates: create, list, get

manage_branches

core

4

Branch protection rules and branch listing

manage_releases

core

6

Releases: create, list, get, update, delete, latest

manage_workflows

core

6

GitHub Actions: list, dispatch, run status/logs, cancel

manage_events

events

3

Subscribe, recent events, replay

ai_generate

ai

9

PRD generate/enhance/parse, features, next task, complexity, expand, traceability, materialize

ai_analyze

ai

8

Issue enrichment, triage, label suggestion, duplicate and related detection

ai_plan

ai

6

Capacity, backlog priority, risk, sprint composition, roadmap, visualization

agent_work

agents

12

Register, checkout, release, complete, heartbeat, review, task context

agent_manage

agents

18

Registry, activity, work products, budgets, usage, PM coordination, convergence

system

system

2

Health check (live GitHub rate-limit probe), project field setup

analytics

core

5

Read-only sprint velocity and burndown, cycle time, throughput, project summary

discover_tools

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

registry.json on the agent-registry branch (Contents API, sha compare-and-swap)

Task claims

Project custom fields (agent_claimed_by, agent_status, agent_pr_number, …)

Work products

Structured issue comments

Budgets and heartbeats

Agent records in the registry

Configuration

Variable

Required

Purpose

GITHUB_TOKEN

yes*

GitHub PAT with repo, project, write:org

GITHUB_OWNER

yes

Owner (user or org) of the target repository

GITHUB_REPO

yes

Target repository name

GITHUB_APP_ID, GITHUB_APP_PRIVATE_KEY, GITHUB_APP_INSTALLATION_ID

no

GitHub App installation auth; outranks the PAT when all three are set (a partial set falls back to the PAT)

ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY, PERPLEXITY_API_KEY

no

Unlocks the ai_* tools

AI_{MAIN,PRD,RESEARCH,FALLBACK}_{PROVIDER,MODEL,API_KEY,BASE_URL}

no

Per-role provider, model, key, endpoint

MCP_TOOL_GROUPS

no

Expose only some groups: core, ai, agents, events, system (default all)

SECRETS_DIR

no

Read secrets from files named after the variable (Docker/k8s convention)

WEBHOOK_SECRET, WEBHOOK_PORT, SSE_ENABLED

no

Webhook/SSE transport; signature validation fails closed

WEBHOOK_HOST, EVENTS_AUTH_TOKEN, WEBHOOK_TRUSTED_PROXIES

no

HTTP hardening: binds 127.0.0.1 by default; /events/* needs the bearer token; X-Forwarded-For trusted only from listed proxies

SYNC_ENABLED, CACHE_DIRECTORY, MAX_CACHE_ENTRIES

no

Bidirectional sync and cache tuning

RATE_LIMIT_FLOOR

no

Remaining GraphQL points below which requests back off proactively (default 100)

AUDIT_LOG_ENABLED, AUDIT_LOG_PATH

no

Append-only, redacted JSONL record of every state-changing tool call (.mcp-audit/mutations.jsonl)

OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME

no

Opt-in OpenTelemetry tracing (tool.<name> spans)

AI_SESSION_TOKEN_LIMIT

no

Per-operation token budget for AI task generation (distinct from per-agent budgets)

LOG_LEVEL, LOG_FORMAT

no

debug|info|warn|error, text or json

* 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 — everything

AI 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 → fix-imports.js → chmod)

npm run build

Typecheck (src + examples, src + tests)

npm run typecheck

Lint

npm run lint

Format

npm run format

Unit tests

npm test

Dev (watch)

npm run dev

Coverage

npm run test:coverage

E2E, mocked GitHub/AI

npm run test:e2e:tools

E2E, live API (uses rate limit)

E2E_REAL_API=true npm run test:e2e:tools:real

AI suites

npm run test:ai

Inspect the server

npm run inspect

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:

  1. 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.

  2. Services (src/services/) — business logic; ProjectManagementService orchestrates per-feature services, src/services/ai/ holds the AI SDK providers.

  3. Infrastructure (src/infrastructure/) — github/ (Octokit GraphQL/REST), tools/ (tool definitions, registry, validators, compound/), plus cache, persistence, resilience, events, secrets, logger, MCP resources and prompts.

  4. MCP (src/index.ts) — boots McpServer (MCP v2) over stdio; every tool is registered with registerTool and shares one dispatchTool carrying 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. The postbuild step adds the extension. Never ship raw tsc output — always run the full build.

  • isolatedModules is on. A type re-exported as a value is a compile error; use export type / import type, including for decorated constructor parameters.

  • Vitest rejects foreign test-runner CLI flags. --testPathPattern fails with CACError: Unknown option; filter with a positional pattern and exclude with --exclude='**/e2e/**'.

  • Mocks must use function, not an arrow, wherever the code under test calls new. A beforeEach with 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

Tool Reference

21 compound tools, 175 actions, per-action parameters

Configuration

Every environment variable and per-role AI setup

Deployment

Install paths, Docker, MCP client configuration

Architecture

Layers, patterns, data flow, agent orchestration

User Guide

Day-to-day usage

Tutorials

Step-by-step walkthroughs

Troubleshooting

Common failures and fixes

Contributing

Development workflow and standards

Available Tools

21 tools
agent_manageAgent ManagementC
Destructive

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.

NameRequiredDescriptionDefault
roleNo
actionYes
branchNo
statusNo
taskIdNo
agentIdNo
summaryNo
agentIdsNo
hardStopNo
prNumberNo
subtasksNoSubtasks for decompose_task — PM splits a rejected task into smaller pieces
iterationNo
projectIdNo
commitShasNo
reviewerIdNoReviewer agent to attribute approve/reject lifecycle actions to, when available
roleFilterNo
testsTotalNo
tokensUsedNo
issueNumberNo
resetPeriodNo
testsFailedNo
testsPassedNo
totalTokensNo
filesChangedNo
maxIterationsNo
includeOfflineNo
maxAssignmentsNo
timeoutMinutesNo
warningFractionNoWarning threshold as a 0-1 fraction
staleAfterMinutesNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
nameNo
roleNoengineer
viewNo
actionYes
labelsNo
reasonNo
statusNo
taskIdNo
agentIdNo
runtimeNoclaude-code
summaryNo
feedbackNo
metadataNo
prNumberNo
progressNo
strategyNohighest_priority
milestoneNo
projectIdNo
closeIssueNo
reviewerIdNo
issueNumberNo
reviewQueueNo
skipBlockedNo
budgetTokensNo
capabilitiesNo
currentBranchNo
parentAgentIdNo
progressSummaryNo
autoCheckoutNextNo
blockerDescriptionNo
estimatedCompletionMinutesNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
actionYesThe AI analysis operation to perform
configNo
agentIdNo
issueIdNo
issueIdsNo
autoApplyNo
projectIdNo
issueTitleNo
maxResultsNo
thresholdsNo
issueLabelsNo
issueNumberNo
issueHistoryNo
onlyUntriagedNo
existingIssuesNo
existingLabelsNo
projectContextNo
relationConfigNo
issueDescriptionNo
repositoryIssuesNo
repositoryLabelsNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
limitNo
tasksNo
actionYesThe AI generation operation to perform
authorNo
agentIdNo
assigneeNo
featuresNo
maxDepthNo
maxTasksNo
timelineNo
featureIdNo
projectIdNo
taskTitleNo
complexityNo
focusAreasNo
prdContentNo
teamSkillsNo
autoApproveNo
descriptionNo
featureIdeaNo
labelPrefixNoLabel prefix for materialized issues (e.g. "ai-generated")
maxSubtasksNo
projectIdeaNo
projectNameNo
projectTypeNo
requestedByNo
targetUsersNo
addToProjectNoWhether to add created issues to the specified projectId
autoEstimateNo
contextLevelNo
currentPhaseNo
includeRisksNo
stakeholdersNo
expandToTasksNo
maxComplexityNo
targetProjectNo
autoPrioritizeNo
excludeBlockedNo
projectContextNo
sprintCapacityNo
targetAudienceNo
teamExperienceNo
createLifecycleNo
currentEstimateNo
enhancementTypeNo
improveExistingNo
includeAnalysisNo
includeResearchNo
includeSubtasksNo
includeUseCasesNo
industryContextNo
taskDescriptionNo
validateQualityNo
includeBreakdownNo
includeEstimatesNo
targetComplexityNo
currentComplexityNo
addMissingElementsNo
enhancedGenerationNo
includeDependenciesNo
validateCompletenessNo
businessJustificationNo
autoDetectDependenciesNo
includeBusinessContextNo
includeRecommendationsNo
includeCoverageAnalysisNo
includeTechnicalContextNo
createTraceabilityMatrixNo
includeTraceabilityLinksNo
includeAcceptanceCriteriaNo
includeImplementationGuidanceNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
actionYesThe AI planning operation to perform
agentIdNo
roadmapNo
capacityNo
velocityNo
projectIdNo
autoCreateNogenerate_roadmap only: create the milestones in GitHub and assign them to the project's issues. Requires projectId.
constraintsNo
sprintItemsNo
teamMembersNo
backlogItemsNo
dependenciesNo
projectTitleNo
requirementsNo
businessGoalsNo
riskToleranceNo
sprintCapacityNo
businessContextNo
targetMilestonesNo
historicalSprintsNo
projectDescriptionNo
sprintDurationDaysNo
sprintDurationWeeksNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

analyticsAnalyticsB
Read-onlyIdempotent

Read-only project analytics: sprint velocity and burndown, cycle time, throughput, and a project summary. Use the action field to select the report.

NameRequiredDescriptionDefault
lastNNosprint_velocity: how many recent iterations to report (default 6)
actionYesThe analytics report to produce
bucketNothroughput: bucket size (default week)
sprintIdNosprint_burndown: iteration ID (default: the current iteration)
projectIdNoProject node ID (required)
sinceDaysNocycle_time / throughput: look-back window in days (default 30)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ToolsA
Read-onlyIdempotent

Discover available compound tools, their actions, and parameters. Always available regardless of group filter.

NameRequiredDescriptionDefault
queryNoFree-text search across tool names and descriptions
domainNoFilter tools by domain

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 AutomationB
Destructive

Manage Project Automations: list, get and delete the automation workflows of a GitHub project. Use the action field to select the operation.

NameRequiredDescriptionDefault
actionYesThe project automation workflow operation to perform
projectIdNo
workflowIdNo

TDQS

B3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 BranchesC
Destructive

Manage GitHub Branch Protection: get, update, and delete a branch's protection rules; list repository branches. Use the action field to select the operation.

NameRequiredDescriptionDefault
pageNoPage number (list_branches)
repoNoRepository name (defaults to the configured GITHUB_REPO)
ownerNoRepository owner (defaults to the configured GITHUB_OWNER)
actionYesThe branch protection operation to perform
branchNoBranch name — required for get_protection, update_protection, and delete_protection
perPageNoResults per page (list_branches)
protectedNoFilter to only protected branches (list_branches)
lock_branchNo
restrictionsNoRestrict who can push to the branch — pass null to disable restrictions (update_protection)
enforce_adminsNoWhether the restrictions also apply to repository admins (update_protection)
allow_deletionsNo
block_creationsNo
allow_force_pushesNo
allow_fork_syncingNo
required_status_checksNoRequired status checks — pass null to disable the requirement (update_protection)
required_linear_historyNo
required_pull_request_reviewsNoRequired pull request review rules — pass null to disable the requirement (update_protection)
required_conversation_resolutionNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
limitNo
actionYesThe event operation to perform
filtersNo
clientIdNo
endpointNo
eventTypeNo
expiresAtNo
transportNo
resourceIdNo
toTimestampNo
resourceTypeNo
fromTimestampNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 IssuesB
Destructive

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.

NameRequiredDescriptionDefault
bodyNo
repoNo
sortNo
typeNoThe issue type: a native organization issue type (its name or `IT_…` id) or one of bug/feature/enhancement/documentation for the label emulation
afterNo
firstNo
limitNo
ownerNo
queryNo
titleNo
actionYesThe issue operation to perform
cursorNoCursor from a previous page's `nextCursor`; omit for the first page
itemIdNo
labelsNo
statusNo
issueIdNo
perPageNo
assigneeNo
priorityNo
assigneesNo
commentIdNo
directionNo
milestoneNo
projectIdNo
assigneeIdsNo
descriptionNo
issueNumberNo
milestoneIdNo
draftIssueIdNo
replaceParentNo
idempotencyKeyNoIdempotency 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.
subIssueNumberNo
blockingIssueIdNoThe issue that blocks the given issue (native `blocked by` edge)
afterIssueNumberNo
parentIssueNumberNo
dependencyDirectionNo`blocked_by` lists the issues that block this one, `blocking` the ones it blocks

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
dateNo
limitNo
actionYesThe iteration operation to perform
itemIdsNo
fieldNameNo
projectIdNo
iterationIdNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
nameNo
colorNo
limitNo
actionYesThe label operation to perform
descriptionNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 MilestonesC
Destructive

Manage Milestones: create, list, update, delete milestones; get metrics; find overdue and upcoming milestones. Use the action field to select the operation.

NameRequiredDescriptionDefault
sortNo
limitNo
stateNo
titleNo
actionYesThe milestone operation to perform
statusNo
dueDateNo
daysAheadNo
directionNo
descriptionNo
milestoneIdNo
includeIssuesNo
idempotencyKeyNoIdempotency 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

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ProjectsC
Destructive

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.

NameRequiredDescriptionDefault
orgNo
nameNo
repoNo
typeNoType of the field to create — exactly the types GitHub's ProjectV2CustomFieldType accepts
afterNo
firstNo
limitNo
ownerNo
titleNo
valueNo
actionYesThe project operation to perform
closedNoupdate: true closes the project, false reopens it
cursorNoCursor from a previous page's `nextCursor`; omit for the first page
filterNo
itemIdNo
layoutNoLayout of the view — exactly the layouts GitHub's ProjectV2ViewLayout accepts
readmeNo
statusNo
viewIdNo
afterIdNo
fieldIdNo
optionsNo
requiredNo
teamSlugNo
contentIdNo
projectIdNo
visibilityNo
contentTypeNo
descriptionNo
targetOwnerNo
collaboratorsNoThe collaborators to grant a role to, one entry per user or team
idempotencyKeyNoIdempotency 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.
shortDescriptionNo
includeDraftIssuesNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
baseNo
bodyNo
headNo
draftNo
eventNo
stateNo
titleNo
actionYesThe pull request operation to perform
perPageNo
commentsNo
pullNumberNo
commitTitleNo
mergeMethodNo
commitMessageNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ReleasesB
Destructive

Manage GitHub Releases: create, list, get, update, delete releases; get the latest release. Use the action field to select the operation.

NameRequiredDescriptionDefault
bodyNoText describing the release (release notes)
nameNoThe release title
repoNoRepository name
draftNoWhether to save the release as a draft (unpublished)
ownerNoRepository owner (org or user login)
actionYesThe release operation to perform
tag_nameNoThe git tag the release is based on (required for create)
releaseIdNoThe release ID (required for get, update, delete)
prereleaseNoWhether to identify the release as a prerelease
target_commitishNoThe 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_notesNoWhether GitHub should automatically generate release notes for this release (create only)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 SprintsB
Destructive

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.

NameRequiredDescriptionDefault
titleNo
actionYesThe sprint operation to perform
sprintNo
statusNo
confirmNodelete: must be true. Deleting a sprint removes the iteration from its project and clears it from every assigned item; it cannot be undone
endDateNo
issueIdsNo
sprintIdNo
projectIdNoProject ID (required for create — sprints are iteration fields on a specific project)
startDateNo
descriptionNo
includeIssuesNo
idempotencyKeyNoIdempotency 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

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyNo
afterNo
firstNo
actionYesThe status update operation to perform
cursorNoCursor from a previous page's `nextCursor`; omit for the first page
statusNo
projectIdNo
startDateNo
targetDateNo
statusUpdateIdNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 WorkflowsA
Destructive

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.

NameRequiredDescriptionDefault
refNoGit branch or tag ref — required for trigger_dispatch
pageNoPage number for pagination (list_workflows, list_runs)
repoNoRepository name (defaults to the configured GITHUB_REPO)
limitNoResults per page (list_workflows, list_runs) — maps to per_page
ownerNoRepository owner (defaults to the configured GITHUB_OWNER)
runIdNoWorkflow run ID — required for get_run, get_run_logs, cancel_run
actionYesThe GitHub Actions workflow operation to perform
branchNoFilter runs by branch name (list_runs)
inputsNoInput values for the workflow's `workflow_dispatch` trigger (trigger_dispatch)
statusNoFilter runs by status (list_runs)
workflowIdNoWorkflow ID or filename (e.g. 'ci.yml') — required for trigger_dispatch and list_runs

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

systemSystemC
Idempotent

System operations: health check and project field setup. Use the action field to select the operation.

NameRequiredDescriptionDefault
actionYesThe system operation to perform
projectIdNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 9 tool updatesv4.0.0
    • Changedagent_manage2 fields changed
      • changedInput schema / oneOf
        Previous 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"
        +  }
        +]
      • removedInput schema / properties / warningThreshold
        Removed value: -{
        -  "description": "Compatibility alias for warningFraction (0-1 warning threshold)",
        -  "maximum": 1,
        -  "minimum": 0,
        -  "type": "number"
        -}
    • Changedai_generate1 field changed
      • removedInput schema / properties / targetPRD
        Removed value: -{
        -  "type": "string"
        -}
    • Addedanalytics
    • Changeddiscover_tools1 field changed
      • changedInput schema / properties / domain / enum
        Previous 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"
        +]
    • Changedmanage_issues2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Cursor from a previous page's `nextCursor`; omit for the first page",
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added 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"
        +}
    • Changedmanage_milestones1 field changed
      • addedInput schema / properties / idempotencyKey
        Added 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"
        +}
    • Changedmanage_project3 fields changed
      • addedInput schema / properties / closed
        Added value: +{
        +  "description": "update: true closes the project, false reopens it",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Cursor from a previous page's `nextCursor`; omit for the first page",
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added 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"
        +}
    • Changedmanage_sprints3 fields changed
      • changedInput schema / properties / action / enum
        Previous 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"
        +]
      • addedInput schema / properties / confirm
        Added 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"
        +}
      • addedInput schema / properties / idempotencyKey
        Added 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"
        +}
    • Changedmanage_status_updates1 field changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Cursor from a previous page's `nextCursor`; omit for the first page",
        +  "type": "string"
        +}
  2. 104 tool updatesv3.0.0
    • Removedadd_feature
    • Removedadd_issues_to_sprint
    • Removedadd_project_item
    • Addedagent_manage
    • Addedagent_work
    • Addedai_analyze
    • Addedai_generate
    • Addedai_plan
    • Removedanalyze_task_complexity
    • Removedarchive_project_item
    • Removedassign_items_to_iteration
    • Removedclear_field_value
    • Removedcreate_automation_rule
    • Removedcreate_draft_issue
    • Removedcreate_issue
    • Removedcreate_issue_comment
    • Removedcreate_label
    • Removedcreate_milestone
    • Removedcreate_project
    • Removedcreate_project_field
    • Removedcreate_project_view
    • Removedcreate_pull_request
    • Removedcreate_pull_request_review
    • Removedcreate_roadmap
    • Removedcreate_sprint
    • Removedcreate_traceability_matrix
    • Removeddelete_automation_rule
    • Removeddelete_draft_issue
    • Removeddelete_issue_comment
    • Removeddelete_milestone
    • Removeddelete_project
    • Removeddelete_project_view
    • Removeddisable_automation_rule
    • Addeddiscover_tools
    • Removedenable_automation_rule
    • Removedenhance_prd
    • Removedenrich_issue
    • Removedenrich_issues_bulk
    • Removedexpand_task
    • Removedgenerate_prd
    • Removedgenerate_roadmap
    • Removedget_automation_rule
    • Removedget_current_iteration
    • Removedget_current_sprint
    • Removedget_field_value
    • Removedget_issue
    • Removedget_iteration_by_date
    • Removedget_iteration_configuration
    • Removedget_iteration_items
    • Removedget_milestone_metrics
    • Removedget_next_task
    • Removedget_overdue_milestones
    • Removedget_project
    • Removedget_project_readme
    • Removedget_pull_request
    • Removedget_sprint_metrics
    • Removedget_upcoming_milestones
    • Removedlist_automation_rules
    • Removedlist_issue_comments
    • Removedlist_issues
    • Removedlist_labels
    • Removedlist_milestones
    • Removedlist_project_fields
    • Removedlist_project_items
    • Removedlist_project_views
    • Removedlist_projects
    • Removedlist_pull_request_reviews
    • Removedlist_pull_requests
    • Removedlist_sprints
    • Addedmanage_automation
    • Addedmanage_branches
    • Addedmanage_events
    • Addedmanage_issues
    • Addedmanage_iterations
    • Addedmanage_labels
    • Addedmanage_milestones
    • Addedmanage_project
    • Addedmanage_prs
    • Addedmanage_releases
    • Addedmanage_sprints
    • Addedmanage_status_updates
    • Addedmanage_workflows
    • Removedmerge_pull_request
    • Removedparse_prd
    • Removedplan_sprint
    • Removedremove_issues_from_sprint
    • Removedremove_project_item
    • Removedschedule_triaging
    • Removedset_field_value
    • Addedsystem
    • Removedtriage_all_issues
    • Removedtriage_issue
    • Removedunarchive_project_item
    • Removedupdate_automation_rule
    • Removedupdate_draft_issue
    • Removedupdate_issue
    • Removedupdate_issue_comment
    • Removedupdate_milestone
    • Removedupdate_project
    • Removedupdate_project_field
    • Removedupdate_project_readme
    • Removedupdate_project_view
    • Removedupdate_pull_request
    • Removedupdate_sprint
  3. 38 tool updatesv1.0.0
    • Addedarchive_project_item
    • Addedassign_items_to_iteration
    • Addedclear_field_value
    • Addedcreate_automation_rule
    • Addedcreate_draft_issue
    • Addedcreate_issue_comment
    • Addedcreate_pull_request
    • Addedcreate_pull_request_review
    • Addeddelete_automation_rule
    • Addeddelete_draft_issue
    • Addeddelete_issue_comment
    • Addeddelete_project_view
    • Addeddisable_automation_rule
    • Addedenable_automation_rule
    • Addedenrich_issue
    • Addedenrich_issues_bulk
    • Addedgenerate_roadmap
    • Addedget_automation_rule
    • Addedget_current_iteration
    • Addedget_iteration_by_date
    • Addedget_iteration_configuration
    • Addedget_iteration_items
    • Addedget_project_readme
    • Addedget_pull_request
    • Addedlist_automation_rules
    • Addedlist_issue_comments
    • Addedlist_pull_request_reviews
    • Addedlist_pull_requests
    • Addedmerge_pull_request
    • Addedschedule_triaging
    • Addedtriage_all_issues
    • Addedtriage_issue
    • Addedunarchive_project_item
    • Addedupdate_automation_rule
    • Addedupdate_draft_issue
    • Addedupdate_issue_comment
    • Addedupdate_project_readme
    • Addedupdate_pull_request
  4. 46 tool updates
    • First observedadd_feature
    • First observedadd_issues_to_sprint
    • First observedadd_project_item
    • First observedanalyze_task_complexity
    • First observedcreate_issue
    • First observedcreate_label
    • First observedcreate_milestone
    • First observedcreate_project
    • First observedcreate_project_field
    • First observedcreate_project_view
    • First observedcreate_roadmap
    • First observedcreate_sprint
    • First observedcreate_traceability_matrix
    • First observeddelete_milestone
    • First observeddelete_project
    • First observedenhance_prd
    • First observedexpand_task
    • First observedgenerate_prd
    • First observedget_current_sprint
    • First observedget_field_value
    • First observedget_issue
    • First observedget_milestone_metrics
    • First observedget_next_task
    • First observedget_overdue_milestones
    • First observedget_project
    • First observedget_sprint_metrics
    • First observedget_upcoming_milestones
    • First observedlist_issues
    • First observedlist_labels
    • First observedlist_milestones
    • First observedlist_project_fields
    • First observedlist_project_items
    • First observedlist_project_views
    • First observedlist_projects
    • First observedlist_sprints
    • First observedparse_prd
    • First observedplan_sprint
    • First observedremove_issues_from_sprint
    • First observedremove_project_item
    • First observedset_field_value
    • First observedupdate_issue
    • First observedupdate_milestone
    • First observedupdate_project
    • First observedupdate_project_field
    • First observedupdate_project_view
    • First observedupdate_sprint

TDQS

B3/5.0

Scored across 21 tools

Disambiguation4/5

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.

Naming Consistency4/5

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).

Tool Count3/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Turns 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 npm
    MIT