Skip to main content
Glama

forgejo-mcp

An MCP server for Gitea and Forgejo: manage repositories, files, branches, issues, pull requests, releases and CI from Claude, much like the GitHub MCP server does for GitHub. It speaks the /api/v1 REST API shared by Forgejo and Gitea (including Codeberg and self-hosted/private instances).

The default and recommended way to run it is locally over stdio. Your token stays on your machine and is passed only to your Forgejo instance. A Cloudflare Worker entry point also exists for hosted use (see the end), but you don't need it.

Quick start (local)

git clone https://github.com/jerdog/forgejo-mcp && cd forgejo-mcp
npm install        # also builds dist/ via the `prepare` script

Verify the connection and token permissions before wiring it into Claude:

export FORGEJO_URL=https://git.example.com
export FORGEJO_TOKEN=...            # see "Creating a Forgejo access token"
node dist/stdio.js --check --repo owner/name   # --repo is optional

--check is read-only. It reports PASS / FAIL / SKIP per probe (reachability, authentication, organizations, repository search, then repo, contents, branches, commits, issues, pull requests, labels, releases and Actions for the repo you name). A 403 names the scope that is probably missing. It never prints the token.

Claude Code

claude mcp add forgejo \
  -e FORGEJO_URL=https://git.example.com \
  -e FORGEJO_TOKEN=... \
  -e FORGEJO_READ_ONLY=true \
  -- node /absolute/path/to/forgejo-mcp/dist/stdio.js

Or commit a project .mcp.json (see .mcp.json.example; it reads FORGEJO_URL / FORGEJO_TOKEN from your shell so no secret is committed).

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "forgejo": {
      "command": "node",
      "args": ["/absolute/path/to/forgejo-mcp/dist/stdio.js"],
      "env": {
        "FORGEJO_URL": "https://git.example.com",
        "FORGEJO_TOKEN": "...",
        "FORGEJO_READ_ONLY": "true"
      }
    }
  }
}

Related MCP server: @maxronner/tea-mcp

Claude Code cloud environments

To have the tools in every session of a Claude Code cloud (web) environment, register the server from the environment's setup script. That covers every repository opened in the environment, so nothing is added to those repos.

  1. In the session title bar open the cloud environment menu, choose Edit, and paste this into Setup script:

    #!/bin/bash
    # Cloud environment "Setup script": installs forgejo-mcp and registers it with Claude Code.
    export FORGEJO_URL=https://git.ontheedgefarms.com
    REF=main                      # branch or tag of jerdog/forgejo-mcp to install
    REPO=jerdog/forgejo-mcp
    DIR=/opt/forgejo-mcp
    log() { echo "[forgejo-mcp] $*"; }
    
    fetch() {
      rm -rf "$DIR"
      log "try 1: git clone via github.com"
      git clone -q --depth 1 --branch "$REF" "https://github.com/$REPO" "$DIR" && { log "ok: git clone"; return 0; }
      rm -rf "$DIR"; mkdir -p "$DIR"
      log "try 2: tarball via api.github.com"
      curl -fsSL "https://api.github.com/repos/$REPO/tarball/$REF" | tar -xz --strip-components=1 -C "$DIR" \
        && [ -f "$DIR/package.json" ] && { log "ok: tarball"; return 0; }
      if [ -n "${FORGEJO_MCP_GH_TOKEN:-}" ]; then
        rm -rf "$DIR"
        log "try 3: git clone with FORGEJO_MCP_GH_TOKEN"
        git clone -q --depth 1 --branch "$REF" "https://x-access-token:${FORGEJO_MCP_GH_TOKEN}@github.com/$REPO" "$DIR" \
          && git -C "$DIR" remote set-url origin "https://github.com/$REPO" && { log "ok: token clone"; return 0; }
      fi
      return 1
    }
    
    fetch || { log "FAILED: could not fetch $REPO@$REF by any route"; exit 1; }
    bash "$DIR/scripts/cloud-setup.sh" || { log "FAILED: cloud-setup.sh exited $?"; exit 1; }
    log "done"

    Private repo: the setup phase has no session GitHub credentials. If you configured a network secret (Bearer) for GitHub, the proxy supplies auth and try 1 or 2 succeeds; list both github.com and *.github.com in its allowed domains, since a wildcard may not match the bare host. Otherwise add a fine-grained token (Contents: Read-only, this repo only) as environment variable FORGEJO_MCP_GH_TOKEN for try 3. Once the repo is public none of this is needed.

    scripts/cloud-setup.sh builds the server, runs claude mcp add forgejo --scope user, then runs --check as an informational self-test. A 401 there is expected when the environment injects credentials only inside sessions, so it only warns; confirm authentication from within a session.

  2. Make sure Network access allows github.com (to clone) and your Forgejo host.

  3. Start a new session. MCP servers are read at session start, so existing sessions don't pick it up.

Notes:

  • No token needed if the environment's proxy injects one. If the environment has a credential configured for your Forgejo host (shown as "inject FORGEJO_TOKEN" in the session's proxy notes), the proxy adds the Authorization header to requests it sees, and you can leave FORGEJO_TOKEN unset.

  • NODE_USE_ENV_PROXY=1 is required. Node's fetch ignores HTTPS_PROXY by default (needs Node 22.21+ or 24+), so without it requests bypass the proxy, no credential is injected, and you get 401. The script sets it on the server. Proxy CA trust (NODE_EXTRA_CA_CERTS) is already provided by the environment.

  • If the proxy does not inject a token, set FORGEJO_TOKEN as an environment secret and export it before the bash /opt/forgejo-mcp/scripts/cloud-setup.sh line, or create a token as described above.

  • Writes are off by default (FORGEJO_READ_ONLY=true). Export FORGEJO_READ_ONLY=false before that line to enable write tools; see Read-only mode.

  • Verify in a new session with /mcp, or run NODE_USE_ENV_PROXY=1 FORGEJO_URL=... node /opt/forgejo-mcp/dist/stdio.js --check --repo owner/name.

  • Alternatively commit a project .mcp.json to a repo (see .mcp.json.example, adding "NODE_USE_ENV_PROXY": "1" to env) if you only want the tools in that repo; you still need the setup script step to install the server.

Configuration

Variable

Description

FORGEJO_URL

Base URL of the instance, e.g. https://git.example.com (required)

FORGEJO_TOKEN

Personal access token. Required for private repos and any write

FORGEJO_READ_ONLY

true hides every write tool (see Read-only mode). Recommended until you trust your setup

Read-only mode

Set FORGEJO_READ_ONLY=true to hide every write tool: the server doesn't register them, so the model can't see or call them (no create_*, update_*, delete_*, merge_*, push_files, dispatch_workflow, and so on). Only the read tools remain. true, 1 or yes (case-insensitive) turn it on; anything else, or leaving it unset, exposes write tools. The stdio server defaults to writes enabled when the variable is unset, which is why every example here sets it explicitly.

  • It is a server-side switch, not a Forgejo permission. A token with write scopes is still able to write through anything else that uses it; read-only only limits what this MCP server offers. For a hard limit, also give the token read-only scopes (see below), or rely on a read-only credential.

  • Changes apply at the next session or restart. Tools are registered when the server starts, so restart the client (or start a new cloud session) after changing the variable.

  • Verify with a tool listing: in read-only mode there is no create_issue or merge_pull_request.

How to flip it per setup:

Setup

Read-only

Enable writes

claude mcp add

-e FORGEJO_READ_ONLY=true

drop the flag, or -e FORGEJO_READ_ONLY=false

.mcp.json / Claude Desktop

"FORGEJO_READ_ONLY": "true"

remove the key or set "false"

Cloud environment

leave the setup script as is (cloud-setup.sh defaults to true)

add export FORGEJO_READ_ONLY=false above the bash "$DIR/scripts/cloud-setup.sh" line, then start a new session

Cloudflare Worker

set FORGEJO_READ_ONLY = "true" in wrangler.toml [vars] (it ships as "false") and npm run deploy

set it to "false" and redeploy

In a cloud environment where the proxy injects the credential, that credential's permissions apply to writes, and it may be an account with broad rights. Consider enabling writes only in a separate environment, or only for the session that needs them.

Creating a Forgejo access token

In Forgejo/Gitea: Settings → Applications → Manage Access Tokens → Generate Token. Give it a name and select scopes (each category has No access / Read / Read and Write).

To use these tools

Scope

Read repos, files, branches, commits, tags, releases, pull requests, Actions runs, commit status

read:repository

Create/update/delete files, branches, releases, pull requests; merge; fork/create repos; dispatch workflows

write:repository

Read issues, comments, labels, milestones

read:issue

Create/edit issues, comments, labels

write:issue

get_me, search_users

read:user

list_organizations, listing an organization's repos

read:organization

Create repos under an organization

write:organization (plus write:repository)

Recommended first token: read:repository, read:issue, read:user, read:organization with FORGEJO_READ_ONLY=true. Add write:* scopes only when you want write tools, and drop FORGEJO_READ_ONLY at the same time.

Notes:

  • Scopes don't grant access on their own: the token only sees repositories its owner can see (membership, team or collaborator access).

  • Use --check to confirm the scopes are enough; a 403 result names the scope to add.

  • Treat the token like a password: don't commit it, and revoke it in the same settings page if it leaks.

Tools

  • Users/orgs: get_me, search_users, list_organizations

  • Repos: search_repositories, get_repository, list_repositories, create_repository, fork_repository

  • Files: get_file_contents, create_or_update_file, delete_file, push_files

  • Branches/commits: list_branches, create_branch, delete_branch, list_commits, get_commit, list_tags

  • Issues: list_issues, search_issues, get_issue, create_issue, update_issue, list_issue_comments, add_issue_comment, list_labels, create_label, add_issue_labels, remove_issue_label, list_milestones

  • Pull requests: list_pull_requests, get_pull_request, create_pull_request, update_pull_request, merge_pull_request, get_pull_request_diff, list_pull_request_files, list_pull_request_reviews, list_pull_request_review_comments, create_pull_request_review, request_pull_request_reviewers

  • Releases: list_releases, get_latest_release, get_release_by_tag, create_release

  • CI: list_action_tasks, get_commit_status, list_workflows, dispatch_workflow (Actions endpoints depend on the instance version)

Write tools carry readOnlyHint: false; deletes and merges set destructiveHint.

Development

npm run typecheck && npm test
npm run smoke -- owner/name     # read-only end-to-end run over real MCP stdio (needs FORGEJO_URL/TOKEN)
npx @modelcontextprotocol/inspector node dist/stdio.js

Optional: hosted on Cloudflare Workers

Only needed if you want a remote HTTP endpoint instead of a local process.

# edit FORGEJO_URL in wrangler.toml, then:
npx wrangler secret put FORGEJO_TOKEN
npx wrangler secret put MCP_AUTH_TOKEN   # protects the endpoint; required if FORGEJO_TOKEN is set
npm run deploy

Endpoint: https://<worker>.workers.dev/mcp. Clients send Authorization: Bearer <MCP_AUTH_TOKEN>, or bring their own Forgejo token in X-Forgejo-Token. The Worker must be able to reach your Forgejo URL over the public internet, so it is a poor fit for a private instance. Local dev: npm run dev:worker (vars in .dev.vars).

Available Tools

49 tools
add_issue_commentComment on issue or pull requestC

Add a comment to an issue or pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
repoYesRepository name
indexYesIssue number
ownerYesRepository owner (user or organization)

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 and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no auth/permission requirements, no rate-limit notes, and no mention of what posting entails. It merely restates the write action already implied by the name.

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?

A single front-loaded sentence with no wasted words. It is efficient, though its brevity borders on under-specification rather than optimal conciseness.

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 low-complexity 4-param write tool with no output schema and annotations covering safety, the minimum is met. Still missing is any note on the undocumented body field or return/behavioral expectations, leaving a small but real gap.

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 75% (owner, repo, and index are documented; body is not). The description offers no parameter detail beyond the schema, so the baseline of 3 applies, slightly undercut by the undocumented body field.

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 states a specific verb (add) and resource (comment on an issue or pull request), which is enough to distinguish it from list_issue_comments and create_issue. However, it does not differentiate from the nearby create_pull_request_review, which also produces reviewer commentary, so sibling discrimination is incomplete.

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?

There is no when-to-use guidance, no prerequisites, and no alternatives named. An agent cannot tell from the text whether this is the right tool versus create_pull_request_review or a review-comment path.

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

add_issue_labelsAdd labels to issueB

Add labels (by ID) to an issue or pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesIssue number
ownerYesRepository owner (user or organization)
labelsYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered externally. The description adds one useful behavioral detail — labels are supplied by ID rather than name — but says nothing about whether the change is additive (it is implied by 'add'), whether it needs write permissions, or how duplicates are handled.

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?

A single ten-word sentence that front-loads the action and target with zero filler. Nothing could be removed without losing information.

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 four-parameter, fully-required mutation tool with no output schema, the description covers the basic action but omits additivity semantics, permission requirements, and what the response contains. Annotations cover safety, so the gap is not severe, but the definition is only minimally complete.

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 coverage is 75%, with the required 'labels' array being the one property that carries no schema description. The parenthetical '(by ID)' partially compensates by telling the agent to pass label identifiers rather than names, which is genuine added meaning, but it gives no help on where those IDs come from. Baseline 3 is appropriate.

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 and resource ('Add labels') plus the target entity ('issue or pull request'), so the agent knows exactly what is operated on. It does not explicitly distinguish itself from the sibling 'remove_issue_label' or explain how it relates to 'create_label', 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 Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, no mention of prerequisites such as needing the label to already exist, and no reference to alternatives like 'list_labels' (to discover IDs) or 'remove_issue_label' (the inverse operation). The agent must infer all routing from the tool name alone.

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

create_branchCreate branchA

Create a branch from an existing branch (default: the repo's default branch).

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerYesRepository owner (user or organization)
branchYesNew branch name
from_branchNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false (a write), destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the default-branch behavior but omits whether the call fails if the branch already exists, required permissions, and what the response contains — useful context, but not rich.

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?

One sentence, front-loaded with the action and scope, and the default-branch caveat is compactly parenthesized. Nothing is wasted or buried.

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 straightforward creation tool with annotations covering the write/safety profile and no output schema, the description is nearly sufficient. The only real gap is error/duplicate-name behavior, which is minor at this complexity.

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

Parameters4/5

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

Schema coverage is 75% and from_branch is the one parameter with no schema description. The description supplies its meaning and default ('default: the repo's default branch'), so it adds real value beyond the schema for exactly the undocumented field.

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 and resource ('Create a branch') and names the source ('from an existing branch'), which cleanly separates it from list_branches, delete_branch, and create_repository in the sibling set. It stops short of any explicit sibling routing, so it is clear but not fully differentiating.

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 parenthetical explains the default source branch, which implies when the from_branch input is needed, but there is no explicit when-to-use/when-not guidance, no mention of alternatives, and no prerequisites (e.g., permission needed). Usage is inferable rather than stated.

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

create_issueCreate issueA

Create an issue. Labels are given as numeric IDs (see list_labels).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYesRepository name
ownerYesRepository owner (user or organization)
titleYes
labelsNo
due_dateNoRFC3339 timestamp
assigneesNo
milestoneNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds that labels must be numeric IDs, which is useful behavioral context beyond annotations, but it doesn't mention permissions required, side effects (notifications, webhooks), or error behavior for an openWorld write operation.

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, front-loaded with the action, and the label ID caveat is essential and brief. Every word earns its place.

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 an 8-parameter open-world write tool with no output schema and low schema description coverage, the description covers the label quirk but omits required permissions, what the response returns (probably the created issue), and semantics of other fields. Adequate but 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 coverage is only 38%, so the description must compensate for several undocumented parameters (body, title, labels items, assignees, milestone). It only clarifies labels as integer IDs, leaving title/body/assignees/milestone semantics entirely to the schema, which itself lacks descriptions for most of them. This partially compensates but not fully for the low coverage.

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 (Create) and resource (issue), clearly distinct from sibling tools like update_issue, get_issue, or create_pull_request. No ambiguity about what the tool does, though it doesn't differentiate when to use it over other creation flows.

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 note 'see list_labels' implies how to obtain valid label IDs, which is implicit usage guidance. However, there is no explicit when-to-use vs. alternatives, no prerequisites (e.g., auth scopes, repo access), and no exclusions. Adequate but thin.

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

create_labelCreate labelC

Create a label in a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
repoYesRepository name
colorYesHex color, e.g. #00aabb
ownerYesRepository owner (user or organization)
descriptionNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the write/safety profile is covered. The description adds nothing beyond that: it does not state whether duplicate label names error out, what permissions are required, or whether color format is validated. For a mutation tool this leaves meaningful behavioral gaps.

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?

A single, front-loaded sentence with no filler. It is efficient, though its brevity is part of the under-specification problem rather than a virtue here.

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 5 parameters, 4 required, no output schema, and incomplete schema descriptions, the definition needs to carry more weight. It omits required-parameter expectations, the hex color format constraint, and any note about conflicting label names, so an agent lacks what it needs to call this reliably.

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 60%: 'name' and 'description' have no schema descriptions, and 5 parameters with 4 required is a non-trivial surface. The description supplies no parameter detail at all, so it fails to compensate for the undocumented fields and adds nothing over 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 and resource ('Create a label') and scopes it with 'in a repository', which distinguishes it from the label-related siblings add_issue_labels/remove_issue_label that operate on issues. It does not name those siblings explicitly, but the repository scope is enough for an agent to route correctly.

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?

No guidance on when to use this versus alternatives such as list_labels (check for an existing label) or add_issue_labels (attach a label to an issue). The only usage signal is the implied 'create' semantics, leaving the agent to infer the context entirely.

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

create_or_update_fileCreate or update fileA

Create a file, or update an existing one (then sha of the current blob is required). Creates a commit.

ParametersJSON Schema
NameRequiredDescriptionDefault
shaNoBlob SHA of the file being replaced (omit to create)
pathYes
repoYesRepository name
ownerYesRepository owner (user or organization)
branchNo
contentYesNew file content as text
messageYesCommit message
new_branchNoCreate this new branch for the commit

TDQS

A3.7/5.0
Behavior4/5

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

The annotations already disclose that this is a non-read-only, open-world, non-destructive operation. The description adds useful behavior beyond that: it creates a commit and requires the current blob SHA for updates. It does not cover branch/new_branch interaction or commit identity details, but it meaningfully extends the safety profile from annotations.

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?

One compact sentence with a focused parenthetical. The create/update distinction is front-loaded and no words are wasted.

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 an 8-parameter write tool with no output schema, the definition covers the core create/update distinction and commit creation. However, it omits important context for branch and new_branch parameters, and does not explain how the commit relates to the target branch. Annotations carry the safety profile, but the tool remains underspecified for branch-related use cases.

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 75%, so most parameters are documented in the schema itself. The description reinforces the SHA requirement for updates, which the schema already explains, but it adds no meaning for the undocumented branch or path parameters. Baseline 3 is appropriate given the mostly covered 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?

The description states a clear verb and resource: create or update a file. It distinguishes the two modes by noting that updating requires the current blob SHA. It stops short of naming sibling alternatives like push_files or delete_file, but the operation itself is unambiguous.

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 provides the key condition for updating an existing file (SHA required) and implies creation when omitted. However, it gives no guidance on when to prefer this tool over siblings such as push_files, delete_file, or create_branch, leaving alternative selection implicit.

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

create_pull_requestCreate pull requestC

Open a pull request from head into base. For cross-repo forks use head as owner:branch.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseYes
bodyNo
headYes
repoYesRepository name
ownerYesRepository owner (user or organization)
titleYes
labelsNo
assigneesNo
milestoneNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral detail about cross-repo forks via `owner:branch`, but does not mention auth needs, rate limits, or downstream effects such as notifications or webhook triggers.

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 core action and no filler. The second sentence is a useful edge-case note, though the overall brevity is slightly aggressive for a 9-parameter write tool.

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 9-parameter mutation tool with 22% schema coverage and no output schema, the description omits required title, body usage, labels/assignees/milestone, return behavior, and permission considerations. It covers only the head/base relationship and leaves major gaps.

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 22%; only owner and repo have schema descriptions. The description clarifies head/base direction and cross-repo head format, but leaves required title, body, labels, assignees, and milestone semantics unexplained, so it fails to compensate for the low schema coverage.

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 and resource: 'Open a pull request from `head` into `base`.' This clearly separates it from read/update/merge sibling tools, but it does not explicitly name or differentiate from close alternatives like update_pull_request or create_pull_request_review.

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?

No when-to-use guidance, prerequisites, or alternatives are given. The description implies creation via 'Open' but does not say when to use this versus update_pull_request, merge_pull_request, or when a PR is inappropriate.

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

create_pull_request_reviewReview pull requestA

Submit a review on a pull request, optionally with inline comments. Omit event to leave the review pending.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYesRepository name
eventNo
indexYesPull request number
ownerYesRepository owner (user or organization)
commentsNo
commit_idNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly=false and destructive=false, so the safety profile is covered. The description adds a real behavioral trait beyond them: omitting `event` produces a pending review rather than a submitted one, which materially changes the outcome. It does not mention notifications or auth needs, but the pending-state disclosure is meaningful added value.

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 tight sentences, front-loaded with the core action and immediately followed by the key conditional. No filler or redundancy; every clause earns its place.

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 mutation tool with no output schema and 43% schema coverage, the definition is only partially complete. It omits the shape of inline comments, the effect of `commit_id`, and the consequences of each `event` value, so an agent still needs to infer how to construct a full review.

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 coverage is only 43%, so the description must compensate, and it partially does by explaining `event` semantics and the `comments` capability. But it never documents the inline-comment structure (path/body/new_position/old_position), `commit_id`, or the enum values' effects, leaving much of the parameter surface unexplained.

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 states a specific verb and resource ('Submit a review on a pull request') and clarifies the optional inline-comments capability. It is clearly distinct from siblings like list_pull_request_reviews or request_pull_request_reviewers, though it never names those alternatives explicitly, so it stops short of a top score.

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 genuine usage rule ('Omit `event` to leave the review pending'), which is actionable. However, it never says when to use this tool versus updating a PR or requesting reviewers, nor how to choose between APPROVED/REQUEST_CHANGES/COMMENT, leaving most routing to inference.

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

create_releaseCreate releaseC

Create a release (and its tag if it does not exist yet).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
nameNo
repoYesRepository name
draftNo
ownerYesRepository owner (user or organization)
tag_nameYes
prereleaseNo
target_commitishNoBranch or commit to tag if the tag is new

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds genuine behavioral value by disclosing that a missing tag will be created as a side effect, but says nothing about permissions, error conditions, or what existing tags/releases do.

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?

A single well-formed sentence with no filler, and the resource being created leads the statement. It is tight, though borderline thin for a tool with eight parameters.

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?

Eight parameters at 38% schema coverage, no output schema, and a mutation with only partial annotation coverage — the description does too little. It omits required-field expectations, draft/prerelease behavior, and target_commitish semantics that an agent needs to call it correctly.

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 38%, so the schema itself leaves body, name, tag_name, draft, and prerelease unexplained, and the description adds no parameter meaning at all. For an 8-parameter mutation tool this is a real gap; the description should have clarified at least draft/prerelease/body semantics.

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 (Create) and resource (release), plus a meaningful side effect: creating the tag if it does not exist. It is clearly distinct from read-oriented siblings like list_releases or get_release_by_tag, though it never explicitly names those alternatives.

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?

There is no explicit when-to-use or when-not-to-use guidance and no routing to alternatives such as get_latest_release or get_release_by_tag. The side-effect note about tag creation hints at behavior but is not usage guidance.

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

create_repositoryCreate repositoryB

Create a repository for the authenticated user, or for an organization if org is given.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoCreate under this organization instead of the user
nameYes
privateNo
auto_initNoInitialize with a README
descriptionNo
default_branchNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the write/non-destructive profile is covered. The description adds the authentication context ('for the authenticated user'), which is legitimately new information, but says nothing about permissions needed for org creation or side effects such as initial commit creation.

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?

A single front-loaded sentence with the default behavior stated before the conditional override. Zero filler, though it is arguably too terse given the surrounding schema gaps.

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-parameter mutation tool with no output schema and only one-third parameter documentation, the description leaves the agent without needed context: default visibility, what auto_init produces, default branch behavior, and what happens on name collision are all unaddressed.

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% (org and auto_init documented). The description only restates the `org` parameter's effect, which the schema already explains, and gives no meaning to `name`, `private`, `description`, or `default_branch` — so it fails to compensate for the low coverage.

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 (Create) and resource (repository) and even clarifies the owner resolution: authenticated user by default, organization when `org` is supplied. It does not explicitly distinguish itself from siblings like fork_repository or get_repository, but the creation semantics are unambiguous.

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 `org` clause implies the selection condition (personal vs organizational repo), which is useful routing context. However, there is no guidance on when not to use it (e.g., to copy an existing repo use fork_repository) and no prerequisites such as org membership or name-uniqueness requirements.

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

delete_branchDelete branchC
Destructive

Delete a branch.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerYesRepository owner (user or organization)
branchYes

TDQS

C2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond that: it does not state that deletion is permanent, whether the branch must be merged first, what permissions are required, or what happens to open PRs referencing it.

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

Conciseness2/5

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

The single sentence is front-loaded but is under-specification rather than conciseness — it earns its place only by existing. Nothing about the destructive consequence is surfaced despite that being the one thing a caller needs.

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 an irreversible mutation tool with no output schema, an undocumented required parameter, and only generic annotations. The description leaves the agent without any of the operational context (irreversibility, permission needs, branch-state requirements) required to invoke it safely.

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 67% and the required branch parameter has no description at all. The description text does not compensate by clarifying branch naming (short name vs refs/heads/...), whether owner/repo accept qualified forms, or case sensitivity.

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

Purpose2/5

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

"Delete a branch." is a near-verbatim restatement of the tool name and title, adding no scope, target system, or distinguishing detail. An agent learns nothing it did not already infer from the identifier delete_branch.

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?

No when-to-use, prerequisites, or alternatives are given. The description does not mention that this targets an existing remote branch, nor does it distinguish itself from sibling create_branch or delete_file.

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

delete_fileDelete fileC
Destructive

Delete a file in a repository via a commit.

ParametersJSON Schema
NameRequiredDescriptionDefault
shaYesBlob SHA of the file
pathYes
repoYesRepository name
ownerYesRepository owner (user or organization)
branchNo
messageYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered by structured data. The description's added value is the commit mechanism, which implies the operation is recorded in git history (recoverable in principle) and consumes a commit message, but it never says which branch is targeted 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?

One short sentence with no filler, and the resource and mechanism are front-loaded. It is appropriately sized for a tool whose safety details live in annotations, though the same brevity is what leaves parameters unexplained.

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 6-parameter mutation with no output schema and half its parameters undescribed, the description is too thin: it omits branch targeting, default-branch behavior, the blob-SHA requirement, and any indication of what happens on success or failure.

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 50% (path, branch and message are undocumented), and 'via a commit' only loosely implies that a commit message is needed. The critical gotcha — that 'sha' must be the existing blob SHA of the file being removed, not a commit SHA — is not clarified by the description, so the coverage gap is not compensated.

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 verb (delete) and resource (a file in a repository) and adds the mechanism ('via a commit'), so an agent understands this is a git-level commit operation, not a raw filesystem unlink. It does not, however, differentiate itself from siblings such as delete_branch or create_or_update_file, which is why 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 Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites (e.g. that you need an existing blob SHA from get_file_contents), and no named alternative such as create_or_update_file for update-vs-delete decisions. 'Via a commit' hints at context but stops well short of routing guidance.

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

dispatch_workflowDispatch workflowC

Trigger a workflow_dispatch run (Forgejo 11+/Gitea 1.24+).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
repoYesRepository name
ownerYesRepository owner (user or organization)
inputsNo
workflowYesWorkflow file name, e.g. ci.yml

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows this is a non-destructive write that reaches outside the local context. The description adds the platform-version requirement, which is genuinely useful context, but says nothing about what the trigger does to state, whether it is idempotent, or what it returns.

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?

A single front-loaded sentence with zero filler, and the key action leads. It is arguably too terse for a five-parameter mutation tool, but there is no waste to trim.

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 non-destructive write with a nested object parameter, no output schema, and 60% schema coverage, the description is materially incomplete. It omits what 'ref' should be (branch/tag/sha), how the freed-form 'inputs' map is interpreted, and what a successful dispatch returns or how to observe the resulting run.

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 60%: 'ref' and the nested 'inputs' object carry no schema descriptions, and 'inputs' is a complex propertyNames/additionalProperties:string map whose semantics are entirely unstated. The description adds no parameter meaning at all, so the most ambiguous inputs an agent must supply are left undocumented in both places.

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 ('Trigger') and resource ('workflow_dispatch run'), plus a platform/version qualifier. An agent can distinguish it from read-oriented siblings like list_workflows or list_action_tasks, though the description never names those siblings explicitly.

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?

There is no when-to-use guidance, no statement of prerequisites (e.g. the ref must exist, the workflow must declare workflow_dispatch), and no routing advice relative to nearby tools. The version note ('Forgejo 11+/Gitea 1.24+') is a compatibility constraint, not usage guidance.

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

fork_repositoryFork repositoryB

Fork a repository to the authenticated user or a given organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the fork
repoYesRepository name
ownerYesRepository owner (user or organization)
organizationNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the safety profile (non-read-only, non-destructive, open-world). The description usefully adds that the fork is created under the authenticated user or an organization, but omits conflict behavior (e.g., existing fork), permission requirements, and 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.

Conciseness4/5

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

A single front-loaded sentence with no waste; the destination clause is attached efficiently. It is slightly terse given the tool's write nature, but nothing is padded.

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 mutation tool with annotations but no output schema and 75% parameter coverage, the description is minimally adequate. It leaves out what the return looks like and how conflicts or permissions are handled, which an agent would want for a fork operation.

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 coverage is 75% and the bare 'organization' parameter has no schema description; the description partially compensates by tying it to the fork destination. It adds little beyond the schema for name/repo/owner, so the baseline 3 is appropriate.

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 (fork) and resource (repository), plus the destination scope (authenticated user or given organization). This distinguishes it from create_repository, though it does not name that 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 mention of 'authenticated user or a given organization' implies the two usage modes and which parameter drives the destination, but there is no explicit when-to-use guidance versus create_repository or prerequisites such as required permissions.

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

get_commitGet commitB
Read-only

Get a single commit by SHA, including changed files.

ParametersJSON Schema
NameRequiredDescriptionDefault
shaYes
repoYesRepository name
ownerYesRepository owner (user or organization)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds only that changed files are included in the result, which is modest added value beyond the structured fields.

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?

A single front-loaded sentence with no filler or redundancy. It is efficient, though extremely terse for a tool with three required identifiers.

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?

With no output schema, the description should carry more of the return-shape burden than just 'including changed files'; it does not say how file contents or patches are represented. The required owner/repo/sha contract and read-only nature are sufficiently implied, so the definition is adequate but thin.

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 coverage is 67%: owner and repo are described in the schema, while sha is not. The phrase 'by SHA' clarifies that sha is a commit identifier rather than a branch or tag, but adds no format detail (full vs. abbreviated hash), so baseline 3 is appropriate.

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 and resource ('Get a single commit') and adds scope detail ('by SHA, including changed files'), so the agent knows exactly what it retrieves. It does not distinguish itself from the sibling get_commit_status, which an agent could easily confuse it with.

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?

There is no when-to-use guidance, no mention of the alternative list_commits for enumerating commits, and no note about when get_commit_status would be more appropriate. The agent must infer usage entirely from the name.

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

get_commit_statusGet combined commit statusA
Read-only

Get the combined CI status (and individual statuses) for a ref/SHA.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesBranch, tag or commit SHA
repoYesRepository name
ownerYesRepository owner (user or organization)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered by structured data. The description adds that both aggregate and per-status results come back, but says nothing about authentication needs, rate limits, or how a 'combined' state is derived.

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?

A single front-loaded sentence with no filler; the primary purpose leads and the secondary detail (individual statuses) trails parenthetically.

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?

With no output schema, the description usefully flags that the response includes both combined and individual statuses, which is the main thing an agent needs to know. It stops short of noting possible state values (success/failure/pending) or the unauthenticated-vs-authenticated behavior implied by openWorldHint.

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% with all three parameters (owner/repo/ref) documented, so the baseline is 3. The phrase 'ref/SHA' adds only marginal color beyond the schema's 'Branch, tag or commit SHA' description.

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

Purpose5/5

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

Specific verb + resource ('Get the combined CI status ... for a ref/SHA') with the scope of the return ('combined' plus 'individual statuses') made explicit. This cleanly separates it from content-oriented siblings like get_commit or list_commits.

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?

Usage is only implied by the purpose: an agent can infer to call this when it needs CI results for a ref, but there is no explicit when-to-use statement or named alternative (e.g., get_commit for commit metadata). No exclusions or prerequisites are given.

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

get_file_contentsGet file or directory contentsA
Read-only

Read a file (decoded to text) or list a directory. Use path '' for the repository root. File results include the blob sha needed to update the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoBranch, tag or commit SHA (default: repo default branch)
pathNo
repoYesRepository name
ownerYesRepository owner (user or organization)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description still adds value beyond structured data: it discloses that file content is decoded to text and that file results carry the blob `sha` needed for a subsequent update — critical chaining information absent from annotations and schema (no output schema exists).

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?

Three short sentences, each earning its place: the core capability first, then the root-path edge case, then the return-value hook for updating files. Nothing is repeated from the title or annotations.

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

Completeness5/5

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

With no output schema, the description still communicates the shape of results (decoded text, directory listing, blob sha) and the path default, which is enough for an agent to call it correctly. Minor omissions (binary/non-text file handling, directory listing format) are not blocking for this read-only tool.

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

Parameters4/5

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

Schema coverage is 75%; the only undocumented parameter is `path`, and the description specifically explains its semantics (empty string = repository root). The other three parameters are already documented in the schema, so the description adds meaning precisely where the gap is.

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+resource pair ('Read a file... or list a directory') and even clarifies the dual-mode behavior, which tells an agent immediately what it returns. It does not explicitly distinguish itself from siblings like get_repository or list_branches, but the file-vs-directory scope is unambiguous.

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 note 'Use path \'\' for the repository root' is a real usage instruction for an edge case, and the mention of the blob `sha` implies a follow-up workflow (pairs with create_or_update_file). However, there is no explicit statement of when to prefer this tool over alternatives or what preconditions apply.

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

get_issueGet issueC
Read-only

Get an issue by number.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesIssue number
ownerYesRepository owner (user or organization)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond that: no note on behavior for a nonexistent issue number, no indication of what is returned, no rate-limit or auth context.

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?

A single short sentence with the key discriminator ('by number') front-loaded and zero filler. It is efficient, though arguably efficient to the point of under-specification.

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 simple three-parameter lookup tool whose schema is fully documented and whose annotations cover safety, the description is minimally sufficient to invoke correctly. It omits any routing guidance against the many sibling issue tools, which is the one thing an agent actually needs here.

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% (owner, repo, index are each documented), so the schema carries parameter meaning. The description's only contribution is the phrase 'by number', which loosely maps to 'index' but adds no format or constraint detail beyond the schema. 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?

States a specific verb and resource ('Get an issue') plus the lookup key ('by number'), which is enough to distinguish it from create_issue/update_issue. It does not, however, distinguish itself from list_issues or search_issues, which retrieve the same resource class.

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?

No when-to-use guidance and no alternatives named. An agent must infer on its own that this is for fetching a single issue when the number is known, versus list_issues or search_issues for browsing.

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

get_latest_releaseGet latest releaseC
Read-only

Get the latest published release.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerYesRepository owner (user or organization)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that — it does not clarify what 'latest' means (newest by date vs. highest semver), whether drafts/prereleases are excluded, or what the response contains.

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?

A single front-loaded sentence with no waste or filler. Its brevity is appropriate, though there was room to add one disambiguating clause without bloat.

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 simple two-parameter read with full annotations and no output schema, the definition is minimally adequate. It leaves open the meaning of 'latest' and its relationship to list_releases/get_release_by_tag, which is the main remaining gap.

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%, so both parameters (owner, repo) are already documented in the schema. The description contributes no additional parameter meaning, which is acceptable here but yields only the baseline score.

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?

Clear verb+resource: 'Get the latest published release' tells the agent exactly what is retrieved. It does not name its nearest siblings (list_releases, get_release_by_tag), so an agent must infer the difference from the name alone.

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?

No guidance on when to pick this over list_releases or get_release_by_tag, and no mention of required owner/repo context or prerequisites. The agent gets a purpose but no routing logic.

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

get_meGet authenticated userA
Read-only

Get the user the configured token authenticates as. Call this first to verify the connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the notion that results depend on a 'configured token' (an implicit auth dependency), with no detail on failure modes when the token is invalid.

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 identity resolution front-loaded and the usage cue 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 no-argument, no-output-schema identity check the description is essentially sufficient; the return value is implied by 'the user the token authenticates as'. Slightly more (e.g. what an auth failure looks like) would make it fully complete.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing extra for the description to explain and the baseline is 4. It correctly does not invent parameter guidance.

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

Purpose5/5

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

Specific verb ('Get') plus a precisely scoped resource ('the user the configured token authenticates as'), which cleanly separates it from siblings like search_users or list_organizations. An agent can tell exactly what identity it resolves.

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

Usage Guidelines4/5

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

Explicitly states when to call it ('Call this first to verify the connection'), which is actionable sequencing guidance. It does not name when-not to use it or point at an alternative, so it stops short of a 5.

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

get_pull_requestGet pull requestB
Read-only

Get a pull request, including mergeability.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesPull request number
ownerYesRepository owner (user or organization)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds one useful behavioral detail — that mergeability is computed and returned — but says nothing about what happens for nonexistent PRs or other runtime behavior.

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?

A single short sentence with zero padding, front-loading the verb and resource immediately.

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 read-only single-entity fetch with three fully documented required params, the essentials are present. With no output schema, however, the description could say more about the returned payload than just mergeability, leaving the response shape underspecified.

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%, so owner, repo and index are all documented in the schema. The description adds no additional meaning (e.g., that index is the PR number, not an internal ID), 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?

States a specific verb and resource ('Get a pull request') and adds a scope hint ('including mergeability') that separates it from the list-oriented siblings. It does not name list_pull_requests or other retrieval alternatives, so it stops short of full sibling differentiation.

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 gives no when-to-use conditions, no prerequisites, and does not point to list_pull_requests for enumerating PRs or to get_pull_request_diff for file-level data. Usage is only inferable from the name and the required pull request number.

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

get_pull_request_diffGet pull request diffB
Read-only

Get the unified diff (or patch) of a pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesPull request number
ownerYesRepository owner (user or organization)
formatNodiff

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the payload is a raw unified diff/patch rather than structured metadata, which is useful, but it says nothing about large-PR truncation, size limits, or error behavior for invalid PR numbers.

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?

One short sentence that front-loads the verb and the resource with zero filler. Nothing to trim and nothing buried.

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?

With no output schema, the description correctly tells the agent the return value is a diff/patch string, which covers the essentials for a simple read. It is still thin for a PR-diff tool: no note on truncation for large diffs, on whether the diff is against base or merge commit, or on format defaults beyond the schema default.

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

Parameters4/5

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

Schema coverage is 75% and the three required params (owner, repo, index) are already documented in the schema. The description usefully explains the otherwise undocumented 'format' enum by naming both 'diff' and 'patch' as accepted outputs, adding meaning 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 (get) and resource (pull request diff) and clarifies the return form as a unified diff or patch. However, it does not distinguish itself from the nearby sibling list_pull_request_files, which an agent could reasonably confuse with this tool.

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?

Provides no when-to-use guidance, prerequisites, or alternatives. An agent has to infer on its own whether to call this or list_pull_request_files/list_pull_request_reviews to inspect a PR's changes.

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

get_release_by_tagGet release by tagC
Read-only

Get the release for a tag name.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYes
repoYesRepository name
ownerYesRepository owner (user or organization)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that — no note on what happens if the tag has no release, error behavior, or return shape. It only restates the operation.

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?

A single front-loaded sentence with zero waste. It is efficient, though it leans toward being under-specified rather than optimally informative.

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 simple three-parameter read-only tool with no output schema, the description is adequate. But it omits any differentiation from get_latest_release/list_releases and gives no edge-case behavior, so it falls short of fully equipping the agent to choose and invoke it 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 67% (owner and repo documented; tag has no schema description). The description's phrase 'for a tag name' gives the tag parameter meaning, partially compensating for the gap. Baseline 3 is appropriate since the schema carries most of the load.

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 and resource ('Get the release for a tag name'), which is clear about what it retrieves. However, it does not distinguish itself from the sibling tools get_latest_release and list_releases, leaving the agent to infer the difference from the names alone.

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?

No when-to-use guidance is provided. The description does not say when to prefer this over get_latest_release or list_releases, nor any prerequisite/context for locating a release by tag rather than by latest or listing.

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

get_repositoryGet repositoryC
Read-only

Get details of a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerYesRepository owner (user or organization)

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no note on what is returned, no visibility/permission caveats, no behavior when the repo does not exist. With the lower bar set by annotations, this is still a missed opportunity.

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?

A single short sentence with no filler and the verb front-loaded, so it is efficient. But it is essentially a restatement of the tool name/title, so brevity here reflects under-specification rather than disciplined conciseness.

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 read-only getter with full schema coverage this could be adequate, but with no output schema the agent has no idea what the returned repository object contains, and the crowded sibling set demands at least a routing hint versus list_repositories/search_repositories. The definition leaves both gaps open.

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% for both parameters (repo name, owner user/org), so the schema carries the parameter semantics. The description adds no syntax, format, or resolution detail beyond that, which is the expected baseline when the schema does the work.

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 states a specific verb and resource (get / repository), which is clearer than a bare tautology. However, in a sibling set that includes search_repositories, list_repositories, and get_file_contents, it offers no scoping or differentiation, so an agent cannot tell why it would pick this over list_repositories without opening the schemas.

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?

There is no when-to-use guidance, no mention of prerequisites (e.g., a token or visibility scope), and no named alternatives. The agent must infer from the name alone that this retrieves a single repo by owner+name rather than enumerating repos.

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

list_action_tasksList Actions runsB
Read-only

List recent Actions (CI) task runs for a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description only adds vague scoping with 'recent' and does not disclose pagination behavior, sorting, or rate limits beyond what the annotations and schema imply.

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 a single front-loaded sentence with no wasted words. It clearly states the core operation and scope without redundancy.

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 simple read-only list tool with complete schema coverage and annotations covering safety, the description is nearly sufficient. It could mention return format or pagination behavior since no output schema exists, but the essential selection information is present.

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%, so owner, repo, page, and limit are already fully documented in the input schema. The description adds no parameter detail beyond what the schema provides, which matches the baseline 3 when the schema does the heavy lifting.

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 states a specific verb (List) and resource (Actions CI task runs) scoped to a repository. It is clear what the tool does, though it does not explicitly distinguish itself from sibling tools like list_workflows.

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?

It provides some context by saying 'for a repository' and 'recent,' but gives no guidance on when to use this tool versus alternatives such as list_workflows or get_commit_status. No prerequisites or exclusions are mentioned.

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

list_branchesList branchesC
Read-only

List branches of a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that — no pagination behavior, no note that results are scoped to a repository's default branch set, and no indication of auth requirements.

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?

A single short sentence with no filler and the resource front-loaded, which is appropriate for a simple list operation. It is arguably under-specified rather than over-long, but nothing wastes the agent's attention.

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 straightforward paginated list tool with full annotation coverage and a fully documented schema, the description is minimally adequate. It omits pagination expectations and the fact that results are page-limited, but the schema covers those details.

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%, with page, limit, owner, and repo all documented in the schema with defaults and bounds. The description adds no parameter detail, 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 states a specific verb (List) and resource (branches of a repository), so the agent knows exactly what the call retrieves. It does not differentiate from siblings like create_branch or delete_branch, but the read-vs-write distinction is clear from the verb.

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?

There is no when-to-use guidance, no prerequisites (e.g. that owner/repo must exist and be accessible), and no mention of alternatives such as list_tags or list_commits for adjacent listing needs. The agent must infer all usage context.

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

list_commitsList commitsB
Read-only

List commits on a branch/ref, optionally limited to a file path.

ParametersJSON Schema
NameRequiredDescriptionDefault
shaNoBranch, tag or SHA
pageNoPage number (default 1)
pathNo
repoYesRepository name
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds essentially no behavioral context beyond that — no note on pagination, ordering, or result volume, which is the main thing a caller of a list endpoint needs.

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?

A single front-loaded sentence with zero filler; the scope and the optional narrowing filter are both stated immediately.

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?

Adequate for a read-only list tool with 83% schema coverage and annotations covering safety, but there is no output schema and the description says nothing about what a commit entry contains or how results are paged/ordered. Minor but real gaps remain.

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 83%, so the schema already documents owner, repo, sha, page and limit. The description restates the sha ('branch/ref') and path semantics but adds no syntax or format detail beyond what the schema provides. 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?

States a specific verb and resource ('List commits') plus the scoping axis ('on a branch/ref, optionally limited to a file path'). This distinguishes it from the singular get_commit sibling by implication, though the sibling is never named 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 phrase 'optionally limited to a file path' hints at when to narrow the query, and the tool name implies listing versus the singular get_commit. However, there is no explicit when-to-use/when-not guidance or named alternative for retrieving a single commit.

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

list_issue_commentsList issue commentsB
Read-only

List comments on an issue or pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
indexYesIssue number
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety and open-world behavior are covered. The description adds only the scope (issue or PR) and nothing about pagination defaults, sorting, or response shape beyond what the schema provides. 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?

A single short sentence with no wasted words. It is front-loaded and appropriately sized, though it is so brief that it lacks any supporting context.

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 simple read-only list tool with annotations covering safety and a fully documented schema, the description is adequate but minimal. It omits anything about pagination behavior or the distinction from related comment-listing tools, which would help full completeness.

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%, so all five parameters (owner, repo, index, page, limit) are fully documented in the schema. The description adds no parameter meaning beyond what the schema already states. Baseline 3 is correct when the schema does the heavy lifting.

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?

Clear verb 'list' and resource 'comments on an issue or pull request', and it explicitly scopes to issue/PR comments, which distinguishes it from siblings like list_issues or add_issue_comment. However, it doesn't name the closest sibling list_pull_request_review_comments, so it's not fully differentiated.

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?

Usage is implied by the statement 'on an issue or pull request', but there is no explicit when-to-use, when-not-to-use, or alternative tool naming. An agent must infer that this is the read counterpart to add_issue_comment and distinct from review comment tools.

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

list_issuesList issuesB
Read-only

List or search issues in a repository (pull requests excluded).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch keyword
pageNoPage number (default 1)
repoYesRepository name
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)
stateNo
labelsNoComma-separated label names
assigneeNo
created_byNo
milestonesNoComma-separated milestone names or ids

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered by structured data. The description adds the useful scoping constraint that pull requests are excluded, but says nothing about pagination behavior, authentication requirements, or result volume for a 10-parameter search-style tool.

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?

A single tight sentence with zero waste; the scope constraint is front-loaded alongside the verb and resource. Nothing is repeated or padded.

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 no output schema, the description omits pagination expectations, return shape, and any mention of the available filters (state, labels, assignee, milestones) or how search behaves. With annotations covering only safety, the description leaves real gaps an agent would need to call this correctly.

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 70%, with state, assignee and created_by carrying no schema description, and the description adds no parameter meaning at all. Because coverage falls below the >80% threshold where the schema alone justifies a baseline 3, the description should have compensated for the undocumented filters but does not.

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 ('List or search') and resource ('issues in a repository'), and the parenthetical scope qualifier '(pull requests excluded)' usefully disambiguates it from PR-related siblings like list_pull_requests. However, it does not differentiate itself from the near-identical sibling search_issues, so the agent cannot tell the two apart without opening schemas.

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?

There is no explicit when-to-use guidance and no alternative is named. The only scope hint is the PR exclusion, which tells the agent what the tool does not cover but not when to prefer it over search_issues or get_issue. An agent is left to infer routing.

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

list_labelsList labelsB
Read-only

List labels of a repository (returns the IDs needed to label issues).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds a useful signal about what the call yields (label IDs), but says nothing about pagination, return shape, or permissions beyond what annotations provide.

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?

A single tight sentence with the resource named first and no filler. Appropriately sized for a simple read tool, though the parenthetical is slightly cryptic rather than maximally informative.

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?

With no output schema, the description does well to note that IDs are returned, but it stops short of describing the overall return structure or pagination behavior. For a read-only list tool with full schema coverage this is adequate but leaves gaps an agent might need.

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%, so owner, repo, page, and limit are all documented in the schema itself. The description contributes nothing param-specific, 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?

States a specific verb and resource ('List labels of a repository'), and the parenthetical clarifies the purpose of the result. It doesn't explicitly differentiate itself from sibling write tools like create_label or add_issue_labels, but the read-oriented intent is unambiguous.

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 parenthetical '(returns the IDs needed to label issues)' implies the follow-up use case and faintly points toward add_issue_labels, but there is no explicit when-to-use guidance or named alternative. Usage is left to inference.

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

list_milestonesList milestonesC
Read-only

List milestones of a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)
stateNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no note on pagination behavior, default result set, or whether closed milestones require the state parameter.

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?

A single efficient sentence with the action front-loaded and zero filler. It is appropriately sized, though the brevity shades into under-specification rather than true concision.

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 read-only list endpoint with no output schema, the description is minimally viable: annotations carry the safety profile and the schema carries the parameters. It omits any hint of return shape, pagination controls, or the fact that state defaults may hide closed milestones.

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 80%, with page, limit, repo, and owner documented inline; only state lacks a description, and its enum (open/closed/all) is self-explanatory. The description contributes no additional parameter meaning, so the baseline of 3 for high coverage 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?

States a specific verb and resource: 'List milestones of a repository.' An agent immediately knows this returns milestone records rather than issues, releases, or tags. It does not, however, differentiate itself from the many other list_* siblings beyond the resource noun, so it stays 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 Guidelines2/5

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

No when-to-use or when-not-to-use guidance is offered, and no alternative tool is named. The agent must infer on its own that this is the milestone-listing endpoint as opposed to, say, list_issues or list_releases.

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

list_organizationsList organizationsB
Read-only

List organizations the authenticated user belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
limitNoResults per page (default 30, max 100)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful constraint that results are limited to orgs the caller belongs to, but says nothing about ordering, pagination behavior, or result size beyond what the schema states.

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?

A single sentence with zero filler, and the scope constraint is front-loaded. It is well sized for a simple read tool, though it is terse enough that it earns no extra credit for structure.

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-parameter, read-only list tool with full schema coverage and annotations declaring the safety profile, the description plus structured fields give the agent enough to invoke it correctly. No output schema exists, so return values need not be described, though stating that results are paginated would close the last gap.

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 page and limit are fully documented with ranges and defaults, so the schema carries the burden. The description adds no format or syntax detail about pagination, making the baseline 3 appropriate.

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 (list) plus resource (organizations) and adds the scope qualifier 'the authenticated user belongs to,' so the agent knows exactly what set is returned. It does not name any sibling, but no other tool in the set lists organizations, so confusion risk is low.

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?

There is no when-to-use guidance: no statement of when this is preferred over e.g. get_me, no prerequisites, and no exclusions. The scope phrase implies usage but the agent must infer that this is the entry point for discovering org context.

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

list_pull_request_filesList pull request filesB
Read-only

List files changed by a pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
indexYesPull request number
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds no further behavioral context such as pagination behavior, rate limits, or what the result contains, so it does not go beyond the structured annotations.

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 a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple list tool.

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?

Given the simple read-only nature, full schema coverage, and annotations covering safety, the description is nearly complete. It could mention pagination or the return shape since no output schema exists, but the core purpose is sufficiently conveyed.

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 all five parameters are documented in the schema. The description adds no parameter-level meaning, so the baseline of 3 applies when the schema does the heavy lifting.

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 states a specific verb (list) and resource (files changed by a pull request). It is clear but does not distinguish this tool from siblings like get_pull_request_diff or list_pull_request_reviews, which likely cover overlapping pull-request data.

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?

There is no explicit when-to-use guidance or mention of alternatives. The purpose implies usage, but with many sibling tools covering pull requests, an agent receives no help choosing between this and get_pull_request_diff or similar.

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

list_pull_request_review_commentsList review commentsB
Read-only

List inline comments of a specific review.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesPull request number
ownerYesRepository owner (user or organization)
review_idYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that results are scoped to 'inline comments' of a single review, which is useful scoping context, but says nothing about pagination, ordering, or how inline comments differ from review summary comments.

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?

A single tight sentence with no filler, and the resource scope is front-loaded. It is efficient but so terse that it omits any operational detail, leaving it slightly under-specified rather than optimally concise.

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 four-parameter filtered-list tool with no output schema, the definition is minimally adequate: it identifies the target of the listing but omits pagination behavior, ordering, and any hint about return shape. It covers the essentials but leaves 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 coverage is 75% and the schema documents owner, repo, and index, leaving review_id undocumented. The description's 'of a specific review' loosely signals the review_id parameter but adds no format or sourcing detail. With the schema covering most parameters, 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?

States a specific verb (List) plus resource (inline comments of a specific review), so the agent knows it returns inline review comments rather than review bodies or issue comments. It is clear but never explicitly names the sibling it differs from, such as list_pull_request_reviews or list_issue_comments.

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 gives no when-to-use guidance, no prerequisites, and no alternatives. An agent must infer from the name that this is the tool for inline comments on an existing review rather than a general comment listing.

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

list_pull_request_reviewsList pull request reviewsC
Read-only

List reviews of a pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
indexYesPull request number
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no note on pagination behavior, result ordering, or what happens for a PR with no reviews. With annotations present, the bar is lower, but this adds zero behavioral context.

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?

A single efficient sentence with no filler, and the core purpose is front-loaded. It is arguably too terse, but it wastes nothing.

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 simple read-only list tool with full schema coverage and clear annotations, the minimum viable information is present. It is still thin: it does not clarify the reviews-vs-review-comments distinction or pagination expectations, which an agent would benefit from given the dense sibling set.

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% – page, limit, repo, index, and owner are all documented in the schema. The description contributes no additional parameter meaning, so the baseline of 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?

States a clear verb+resource ('List reviews of a pull request'), so an agent immediately knows the operation. However, it does not distinguish itself from close siblings like list_pull_request_review_comments or create_pull_request_review, leaving ambiguity between 'reviews' and 'review comments'.

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?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The agent gets no help deciding between this tool, list_pull_request_review_comments, and the PR-level tools such as get_pull_request.

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

list_pull_requestsList pull requestsC
Read-only

List pull requests in a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
sortNo
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)
stateNo
labelsNoLabel IDs

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond that—it does not disclose the default state filter (typically 'open'), pagination behavior, or any rate-limit/result-cap context.

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?

A single short sentence with no filler, and the core resource is front-loaded. It is efficient, though its brevity reflects under-specification rather than disciplined concision.

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 7-parameter listing tool with pagination and filtering options and no output schema, the description is far too thin. It omits what is returned, how results are paged (default 30, max 100), and how state/sort/labels affect the listing.

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 71%, and two enum parameters (sort, state) plus 'labels' carry no documentation at all. The description adds zero parameter meaning—it doesn't explain filtering by state, sorting options, or label-ID semantics—so it fails to compensate for the coverage gap.

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 states a specific verb ('List') and resource ('pull requests') scoped to a repository, so the agent knows exactly what operation is performed. However, it offers no differentiation from closely named siblings such as get_pull_request, list_pull_request_reviews, or list_pull_request_files.

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?

There is no guidance on when to use this tool versus alternatives like get_pull_request (single PR) or list_pull_request_files (PR contents), and no mention of prerequisite conditions. The agent must infer usage purely from the name.

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

list_releasesList releasesC
Read-only

List releases of a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
draftNo
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)
pre_releaseNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond the title—no pagination behavior, no rate limit details, no return format, and no mention of how filtering works. With annotations carrying the behavioral load, the description's lack of added context merits a low score.

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 a single, front-loaded sentence with no wasted words. It is appropriately sized on its face, though the extreme brevity contributes to under-specification rather than serving conciseness alone. A 4 reflects efficient structure while acknowledging that more detail could have been included without becoming verbose.

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 list tool with six parameters, including two filters (draft, pre_release) that lack schema descriptions, the description is incomplete. It does not mention pagination, default limits, or how to filter releases. Even with annotations covering safety and no output schema required, critical operational context is missing.

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 67%, with six parameters (owner, repo, page, limit, draft, pre_release). The description mentions no parameters at all, so it adds zero meaning beyond the schema. It does not explain the purpose of the draft or pre_release filters, which are undocumented in the schema, nor does it clarify pagination semantics.

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 states a specific verb and resource: 'List releases of a repository.' It is clear and unambiguous about the core operation. However, it does not distinguish this tool from siblings such as get_latest_release or get_release_by_tag, which also retrieve release data, so a 5 is not warranted.

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?

There is no guidance about when to use this tool versus alternatives like get_latest_release, get_release_by_tag, or create_release. No prerequisites or filtering context is provided. The description offers only the bare purpose, leaving the agent to infer usage from the name alone.

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

list_repositoriesList repositoriesA
Read-only

List repositories owned by a user or organization. Omit owner to list the authenticated user's repositories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
limitNoResults per page (default 30, max 100)
ownerNoRepository owner (user or organization)
is_orgNoOwner is an organization

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds the owner-omission default behavior, but says nothing about pagination behavior or result ordering. With annotations carrying the safety burden, 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.

Conciseness5/5

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

Two sentences, no filler, and the scope statement is front-loaded ahead of the conditional default. Every clause carries information.

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?

No output schema exists, but for a simple filtered-list tool with full parameter coverage and read-only annotations, the description covers the one real ambiguity (what happens without owner). It could mention pagination expectations, but nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so page, limit, owner and is_org are all documented in the schema (baseline 3). The description goes beyond that by explaining the non-obvious default semantics of omitting owner, which the schema's 'Repository owner' note does not convey.

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 and resource ('List repositories') plus the scope of ownership (user or organization). It does not differentiate from close siblings like search_repositories or get_repository, so an agent must infer the difference, but the core purpose is unambiguous.

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

Usage Guidelines4/5

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

'Omit owner to list the authenticated user's repositories' gives a concrete, actionable rule for selecting the parameterless form. It stops short of naming alternatives (e.g. search_repositories for keyword filtering) or stating when not to use it.

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

list_tagsList tagsB
Read-only

List tags of a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
repoYesRepository name
limitNoResults per page (default 30, max 100)
ownerYesRepository owner (user or organization)

TDQS

B3.1/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds essentially no behavioral context beyond restating that this is a list operation; it does not mention pagination, auth requirements, rate limits, or return behavior.

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 a single front-loaded sentence with no superfluous words. For a simple list tool, it is appropriately concise and structured.

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?

The tool is low-complexity and the annotations plus schema cover safety and parameters. However, with no output schema, the description does not explain return values or pagination behavior, leaving a moderate gap in contextual completeness.

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%, so all four parameters (owner, repo, page, limit) are fully documented in the schema itself. The description adds no parameter-level meaning beyond what the schema provides, making the baseline 3 appropriate.

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 states a specific verb and resource: 'List tags of a repository.' An agent can identify the operation as listing repository tags, but the description does not distinguish it from sibling tools such as list_branches, list_labels, or get_release_by_tag, so it falls 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 Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. The purpose is implied by the name, but no explicit context, prerequisites, or exclusions are provided.

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

list_workflowsList workflowsA
Read-only

List Actions workflows defined in a repository (Forgejo 11+/Gitea 1.24+).

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerYesRepository owner (user or organization)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered without the description. The description adds a genuine behavioral constraint (server version compatibility), but says nothing about pagination or result size for what is presumably a list endpoint.

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?

A single front-loaded sentence with the resource ahead of the version caveat. Every clause earns its place and there is no filler.

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-parameter read-only list tool with full schema coverage and annotations covering the safety profile, nothing essential is missing. The absence of an output schema leaves a small gap (return shape, pagination), but the tool name and description make the payload self-evident.

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 owner and repo are documented in the schema, so the baseline is 3. The phrase 'defined in a repository' reinforces the scoping but adds no syntax, format, or edge-case detail beyond what the schema provides.

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 and resource ('List Actions workflows defined in a repository'), so the agent knows exactly what comes back. It does not name or distinguish itself from related siblings such as dispatch_workflow or list_action_tasks, so it falls short of the top tier.

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 version note '(Forgejo 11+/Gitea 1.24+)' is a useful applicability condition, implying when the tool will work. However, there is no explicit when-to-use vs. when-not guidance and no routing to dispatch_workflow for triggering or list_action_tasks for runs.

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

merge_pull_requestMerge pull requestC
Destructive

Merge a pull request using the chosen strategy.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesPull request number
ownerYesRepository owner (user or organization)
titleNoMerge commit title
methodNomerge
messageNoMerge commit message
delete_branch_after_mergeNo

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=true, and openWorldHint=true, so the safety profile is covered. The description adds essentially nothing beyond that: it does not say the merge is irreversible, whether it deletes branches, 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?

A single front-loaded sentence with no padding, which is appropriately tight. It is efficient rather than wasteful, though "using the chosen strategy" is vague filler rather than information.

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 mutation with no output schema, the description should cover reversibility, merge prerequisites, and branch-deletion behavior. None of these are present, leaving the agent without the context needed to invoke a destructive operation safely.

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 coverage is 71%, close to the threshold where the schema carries most of the burden, so baseline 3 is appropriate. The phrase "chosen strategy" loosely points at the undocumented enum method parameter but explains none of its values (squash, rebase, fast-forward-only, etc.).

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 ("Merge") and resource ("a pull request"), so the core action is unambiguous. However, it offers no differentiation from siblings like update_pull_request, and "using the chosen strategy" gestures at the method param without clarifying purpose further.

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?

There is no when-to-use guidance, no prerequisites (e.g. required approvals or passing checks), and no mention of alternatives. An agent gets no help deciding whether merging is appropriate here versus updating or closing.

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

push_filesPush multiple filesC
Destructive

Create, update or delete several files in a single commit.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
filesYes
ownerYesRepository owner (user or organization)
branchNo
messageYes
new_branchNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the mutation and delete risk profile is covered structurally, and the description's mention of 'delete' is consistent with it. The 'single commit' phrasing adds useful atomicity context, but nothing is said about permissions, partial failure, or what deleting via sha entails.

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 sentence, correctly front-loaded with the verb set and resource, with zero filler. It is efficient, though its brevity shades into under-specification rather than genuine conciseness.

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 6-parameter destructive batch mutation with only 33% schema coverage and no output schema, one sentence is inadequate. Missing are the branch/new_branch semantics, whether deletes are recoverable, and any indication of how per-file success or failure is reported.

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 33%, yet the description adds no parameter meaning at all. It never mentions the sha requirement for update/delete, the operation enum, branch, message, or new_branch — precisely the fields whose semantics an agent needs before constructing a multi-file commit.

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 set (create, update, delete), the resource (files), and the scope (several files in a single commit). The 'several files in a single commit' phrasing implicitly separates it from the single-file siblings create_or_update_file and delete_file, though it never names 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?

There is no explicit when-to-use guidance and no named alternatives. The agent must infer from the title and siblings that this is the batch variant of create_or_update_file/delete_file; nothing tells it when to prefer one call over multiple single-file calls.

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

remove_issue_labelRemove label from issueB

Remove one label (by ID) from an issue or pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesIssue number
ownerYesRepository owner (user or organization)
label_idYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The description usefully adds that removal is single-label and applies to both issues and pull requests, but says nothing about what happens if the label is not attached, or about required permissions.

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?

One sentence, front-loaded with the verb and resource, containing no filler. Every clause adds scope information (one label, by ID, issue or PR).

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?

Adequate for a simple mutation: annotations carry the safety profile and there is no output schema to explain. However, for a tool whose only non-obvious parameter is label_id, it omits how to obtain that ID and the behavior on a label that is not present.

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 75%, with only label_id undocumented in the schema; the description adds 'by ID' for it, but the parameter name label_id already conveys that, so the added value is thin. It does not say where the ID comes from (e.g., list_labels), which is the real gap for this parameter.

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 (remove) and resource (label on an issue/pull request), plus the scoping detail that exactly one label is removed and it is identified by ID. This separates it from add_issue_labels and list_labels without needing to open a schema, though no sibling is named explicitly.

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?

No when-to-use guidance, no prerequisites, and no pointer to the alternatives (add_issue_labels to attach, list_labels to discover label IDs). The agent must infer from the name alone that this is the inverse of add_issue_labels.

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

request_pull_request_reviewersRequest reviewersC

Request reviews from users on a pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
indexYesPull request number
ownerYesRepository owner (user or organization)
reviewersYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-read-only, open-world, non-destructive operation, so the bar is lower. However, the description adds no behavioral context beyond the basic action—such as whether it replaces existing reviewers, adds to them, triggers notifications, or requires specific permissions.

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 a single, front-loaded sentence with no wasted words. It is appropriately sized for the tool's scope.

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 write tool with four required parameters and no output schema, the description is too sparse. It omits prerequisites (e.g., required permissions), the effect on existing reviewers, and any notification behavior, leaving the agent under-informed.

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 coverage is 75%, with three of four parameters documented in the schema. The description's phrase 'from users' loosely maps to the 'reviewers' array but does not specify the expected format (e.g., usernames vs. team slugs), leaving a gap for the one undocumented required parameter.

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 states a clear verb ('Request reviews') and resource ('users on a pull request'), making the action unambiguous. It does not explicitly differentiate from sibling tools like create_pull_request_review, but the core purpose is still easily understood.

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?

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The description only states what it does, leaving the agent to infer the appropriate context.

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

search_issuesSearch issues and pull requestsC
Read-only

Search issues/PRs across all repositories visible to the token.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYes
pageNoPage number (default 1)
typeNo
limitNoResults per page (default 30, max 100)
ownerNoLimit to repositories of this owner
stateNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description usefully adds the visibility scope constraint (token-visible repositories), but says nothing about pagination limits, rate-limit behavior, or the query syntax the search engine expects.

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?

It is a single front-loaded sentence with no filler, which is good, but it is under-specified rather than concise — the brevity comes at the cost of any query or filtering context an agent needs.

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 6 parameters, only 50% schema description coverage, no output schema, and no annotation detail beyond safety hints, a one-line description leaves major gaps: query syntax, how type/state/owner filter results, and result shape are all unaddressed.

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 50%: page and limit are described in the schema, but q, type, owner, and state are not. The description adds no parameter meaning at all, and critically omits any hint that q follows a search-query syntax rather than a plain keyword, which is essential for this tool.

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 states a specific verb (search) plus resource (issues/PRs) and scope (across all repositories visible to the token), which is more informative than the title alone. However, it does not differentiate itself from the sibling list_issues, which an agent could easily confuse it with.

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?

There is no guidance on when to use this versus list_issues (repo-scoped listing), get_issue (single fetch), or search_repositories. The scope phrase implies a cross-repo search, but no alternative or exclusion is named.

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

search_repositoriesSearch repositoriesB
Read-only

Search repositories on the Forgejo/Gitea instance by keyword.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
limitNoResults per page (default 30, max 100)
queryYes
topicNoMatch topics only

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds only 'by keyword', saying nothing about which repository fields are matched, matching semantics, or pagination behavior. With annotations carrying the safety burden, this is a modest contribution.

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?

A single, front-loaded sentence with no filler or redundancy. It is efficient, though arguably too terse to earn a top score given the routing and behavioral gaps it leaves open.

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 4-parameter search tool with no output schema, the description is minimal but functional: the agent knows what it searches and that it is a safe read. It omits the required query's semantics and any sense of result format, but pagination fields are schema-documented.

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 coverage is 75%; page, limit and topic are documented in the schema. The required 'query' parameter has no schema description, and the description's 'by keyword' only loosely implies its meaning. Baseline 3 is appropriate since the schema does most of the work.

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?

Clear verb+resource ('Search repositories') plus the target platform (Forgejo/Gitea) and the matching mode (by keyword). This distinguishes it from list_repositories, though the description never names that sibling to make the distinction explicit.

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?

Only implies that you call it with a keyword; there is no when-to-use vs when-not, and no pointer to alternatives like list_repositories (browse all) or get_repository (known name). The routing decision is left to inference.

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

search_usersSearch usersC
Read-only

Search users by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
limitNoResults per page (default 30, max 100)
queryYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that - no note on result caps, pagination behavior, or matching semantics (substring vs exact), which would be the useful additions here.

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?

A single front-loaded sentence with zero waste. It is appropriately sized for the little it says, though the brevity reflects under-specification rather than tight editing.

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?

No output schema exists, so the description should carry more of the return-shape and pagination burden, but it says nothing about result format, page/limit behavior, or how matches are ranked. For a 3-parameter search tool in a large GitHub-style toolset, this is materially incomplete.

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 coverage is 67%: page and limit are documented in the schema, but the required 'query' parameter has no description. The phrase 'by name' partially compensates by indicating what query matches, but it gives no format, matching rules, or ambiguity handling. This is the baseline-3 case where the schema does most of the work.

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 (search) and resource (users) with the matching field (name), so the agent knows exactly what the tool retrieves. It does not differentiate itself from siblings like search_repositories or search_issues, which share the same search pattern, so it lands at 4 rather than 5.

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?

There is no guidance on when to use this over get_me or search_repositories, no mention of pagination workflow, and no prerequisites. The agent must infer usage entirely from the name.

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

update_issueUpdate issueB

Edit an issue's title, body, state, assignees or milestone.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYesRepository name
indexYesIssue number
ownerYesRepository owner (user or organization)
stateNo
titleNo
assigneesNo
milestoneNo

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds nothing beyond that: it doesn't state whether this is a partial update (unset fields preserved), what permissions are required, or the error behavior if the issue is missing.

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?

A single efficient sentence with the primary verb and target front-loaded. Zero filler; every word carries meaning.

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 and annotations cover the safety profile, so the description only needs to cover behavior and params. It lists the mutable fields but omits partial-update semantics and auth needs, leaving a mutation tool minimally but not fully described.

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 coverage is only 38%, so the description partially compensates by naming five updatable fields (title, body, state, assignees, milestone). However, owner/repo/index and the semantics of a milestone integer are left unexplained, so the description helps but does not close the coverage gap.

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 (Edit) and resource (issue) and enumerates the mutable fields, so the agent knows exactly what it changes. It is clearly distinct from create_issue and get_issue, though it doesn't explicitly name those alternatives.

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?

No when-to-use, prerequisites, or alternative routing is provided. The description never says when to prefer update_issue over related tools like add_issue_labels or update_pull_request, leaving usage entirely to inference.

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

update_pull_requestUpdate pull requestC

Edit a pull request's title, body, base branch or state.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNo
bodyNo
repoYesRepository name
indexYesPull request number
ownerYesRepository owner (user or organization)
stateNo
titleNo
assigneesNo

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 and openWorldHint=true, so the mutation nature is covered structurally. The description adds nothing beyond that: it does not warn that state='closed' effectively closes the PR, does not mention assignee replacement behavior, nor any auth/permission requirement. It is essentially a restatement of the tool name.

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?

A single tight sentence with no padding and the action front-loaded. It is efficient, though the brevity comes at the cost of the guidance that is missing elsewhere.

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 8-parameter mutation tool with 38% schema coverage and no output schema, the description is too thin. It omits the assignees parameter entirely, does not explain the effect of changing state to 'closed', and gives no error or permission context an agent would need to invoke it safely.

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 only 38% across 8 params, so the schema does not fully document itself. The description names title, body, base and state, which maps to four parameters and signals intent, but omits assignees and gives no format or constraint detail (e.g. base branch naming). Partial compensation only.

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 ('Edit') and resource ('a pull request') plus the four fields that can be modified, which cleanly distinguishes it from siblings like create_pull_request and get_pull_request. It loses a point only because the field list is incomplete (assignees is omitted), making the scope statement slightly inaccurate.

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?

There is no guidance on when to use this versus alternatives such as merge_pull_request, request_pull_request_reviewers, or update_issue. No preconditions (e.g. needing the PR number, permissions) are stated. Only the bare purpose is given.

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. 49 tool updatesv0.1.0
    • First observedadd_issue_comment
    • First observedadd_issue_labels
    • First observedcreate_branch
    • First observedcreate_issue
    • First observedcreate_label
    • First observedcreate_or_update_file
    • First observedcreate_pull_request
    • First observedcreate_pull_request_review
    • First observedcreate_release
    • First observedcreate_repository
    • First observeddelete_branch
    • First observeddelete_file
    • First observeddispatch_workflow
    • First observedfork_repository
    • First observedget_commit
    • First observedget_commit_status
    • First observedget_file_contents
    • First observedget_issue
    • First observedget_latest_release
    • First observedget_me
    • First observedget_pull_request
    • First observedget_pull_request_diff
    • First observedget_release_by_tag
    • First observedget_repository
    • First observedlist_action_tasks
    • First observedlist_branches
    • First observedlist_commits
    • First observedlist_issue_comments
    • First observedlist_issues
    • First observedlist_labels
    • First observedlist_milestones
    • First observedlist_organizations
    • First observedlist_pull_request_files
    • First observedlist_pull_request_review_comments
    • First observedlist_pull_request_reviews
    • First observedlist_pull_requests
    • First observedlist_releases
    • First observedlist_repositories
    • First observedlist_tags
    • First observedlist_workflows
    • First observedmerge_pull_request
    • First observedpush_files
    • First observedremove_issue_label
    • First observedrequest_pull_request_reviewers
    • First observedsearch_issues
    • First observedsearch_repositories
    • First observedsearch_users
    • First observedupdate_issue
    • First observedupdate_pull_request

TDQS

C2.9/5.0

Scored across 49 tools

Disambiguation4/5

Most tools target a clear resource+action, but several list/search pairs overlap: search_issues vs list_issues, list_pull_requests vs search_issues (PRs are issues in Forgejo), and get_file_contents duplicating listing-directory semantics. Descriptions mostly disambiguate, though an agent could still misselect between list and search variants.

Naming Consistency4/5

Overwhelmingly consistent verb_noun pattern (list_*, get_*, create_*, update_*, merge_*, add_*, remove_*). Minor deviations like create_or_update_file and dispatch_workflow are still readable and purposeful. The 'list_pull_request_*' long forms are consistent within their family.

Tool Count2/5

49 tools is heavy for a single MCP server and exceeds the 25+ threshold. The surface spans repos, files, branches, commits, issues, PRs, reviews, labels, releases, milestones, and Actions CI—workable but burdened with granular tools that could be consolidated or grouped.

Completeness4/5

Broad, well-rounded coverage of the Forgejo/Gitea domain: full file CRUD, branches, commits, issues, PRs, reviews, labels, releases, and CI status/workflows. Some gaps remain (e.g., deleting/editing releases, managing milestones, listing PR reviewers/assignees, closing organizations), but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to interact with Gitea repositories through intelligent tools for issue/PR management, workflow analysis, compliance checking, and content generation, plus 200+ CLI commands for complete CRUD operations.
    22
    19 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to interact with a Forgejo instance as an authenticated user, supporting issues, pull requests, repositories, and notifications.
    56 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A local MCP server that connects Claude directly to your Gitea instance, enabling management of repositories, issues, pull requests, files, and commit history.
    MIT