codebahn
Server Details
Codebahn is the private GitHub alternative: fast Git and CI for developers and teams.
- Status
- Healthy
- Uptime
- 29.0% over 39 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- Repository
- codebahn/codebahn-cli
- GitHub Stars
- 0
TDQS
Scored across 15 tools
Tools are grouped by distinct resources (branches, commits, files, pull_requests, releases, etc.), giving each a clear primary purpose. The main overlap is between 'comments' and 'reviews' (both touch PR comments), but the descriptions distinguish general issue/PR comments from verdict-bearing review comments and review requests.
All 15 names are single lowercase snake_case resource nouns (branches, commits, pull_requests, ci_config, user_info), a highly predictable and consistent convention. No mixing of verbs, cases, or styles across the set.
15 tools is well-scoped for a broad GitHub-style surface; each resource group earns its place and no tool looks redundant. The resource-grouping with internal actions keeps the count manageable rather than exploding into dozens of per-action tools.
Core lifecycle coverage is strong: repos, branches, commits, files, issues, labels, comments, PRs, reviews, releases, webhooks, CI, and search are all present. Minor gaps remain around notifications, discussions/projects, and broader org/team management, but agents can work around these.
Available Tools
15 toolsbranchesBDestructiveInspect
Manage branches, compare refs, and configure branch protection rules. Use 'compare' to see commits reachable from head but not base. Protection actions manage merge requirements, status checks, and push restrictions.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Base ref. For compare | |
| head | No | Head ref. For compare | |
| name | No | Protection rule name (glob pattern). For get/update/delete_protection | |
| page | No | Page number. For list | |
| repo | Yes | Repository name | |
| limit | No | Page size. For list | |
| owner | Yes | Repository owner | |
| action | Yes | Operation to perform | |
| branch | No | Branch name. For create/delete | |
| rule_name | No | Glob pattern for the new rule. For create_protection | |
| old_branch | No | Source branch to create from. For create | |
| enable_push | No | Allow whitelisted users/teams to push. For create/update_protection | |
| required_approvals | No | Minimum approving reviews required. For create/update_protection | |
| enable_status_check | No | Require status checks before merging. For create/update_protection | |
| push_whitelist_teams | No | Comma-separated teams allowed to push. For create/update_protection | |
| enable_push_whitelist | No | Restrict direct pushes to whitelist. For create/update_protection | |
| merge_whitelist_teams | No | Comma-separated teams allowed to merge. For create/update_protection | |
| status_check_contexts | No | Comma-separated required status check contexts. For create/update_protection | |
| enable_merge_whitelist | No | Restrict merging to whitelist. For create/update_protection | |
| require_signed_commits | No | Require signed commits. For create/update_protection | |
| dismiss_stale_approvals | No | Dismiss approvals on new pushes. For create/update_protection | |
| protected_file_patterns | No | Semicolon-separated glob patterns of protected files. For create/update_protection | |
| block_on_outdated_branch | No | Block merge when branch is outdated. For create/update_protection | |
| push_whitelist_usernames | No | Comma-separated usernames allowed to push. For create/update_protection | |
| approvals_whitelist_teams | No | Comma-separated teams whose approvals count. For create/update_protection | |
| block_on_rejected_reviews | No | Block merge on rejected reviews. For create/update_protection | |
| merge_whitelist_usernames | No | Comma-separated usernames allowed to merge. For create/update_protection | |
| unprotected_file_patterns | No | Semicolon-separated glob patterns exempt from protection. For create/update_protection | |
| enable_approvals_whitelist | No | Restrict approvals to whitelist. For create/update_protection | |
| push_whitelist_deploy_keys | No | Allow deploy keys to push. For create/update_protection | |
| approvals_whitelist_username | No | Comma-separated usernames whose approvals count. For create/update_protection | |
| block_on_official_review_requests | No | Block merge on pending review requests. For create/update_protection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, and the description adds a genuinely useful behavioral nuance about compare direction. But for a mixed read/write tool it never splits safe reads (list/get/compare) from destructive ones (delete/delete_protection), and it says nothing about irreversibility or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the capability summary followed by compare semantics and protection scope. No filler, though the action-level mapping that would help most is omitted rather than the text being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-action, 32-parameter, destructive tool with no output schema, the description gives a reasonable capability map but no per-action guidance, no indication of which actions mutate state, and no sense of return shape. It is the minimum viable overview rather than a complete one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter already carries an 'For <action>' tag, so the schema does the heavy lifting. The description adds the head/base direction semantics that the schema wording ('Base ref. For compare') does not convey, but that covers only 2 of 32 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set and resource ('Manage branches, compare refs, configure branch protection rules'), which lets an agent distinguish branch operations from sibling tools like commits or repos. However, the nine concrete actions (list/create/delete/protection CRUD) are only implied by the schema enum, not named in the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description points at one action explicitly ('Use \'compare\' to see commits reachable from head but not base') and groups the protection actions, so usage is partly implied. It never states when-not to use this tool or routes between overlapping actions (e.g. list vs list_protections, create_protection vs update_protection).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ciADestructiveInspect
Trigger and monitor CI workflows. Use 'dispatch' to start a workflow run, 'cancel' to abort a running build, 'list_runs' for run history, 'get_run' for details, 'get_logs' for job output grouped by step.
| Name | Required | Description | Default |
|---|---|---|---|
| job | No | Filter logs to this job name. For get_logs | |
| ref | No | Branch or tag to run on. For dispatch | |
| page | No | Page number. For list_runs | |
| repo | Yes | Repository name | |
| event | No | Filter by trigger event (push, pull_request, etc.). For list_runs | |
| limit | No | Page size. For list_runs | |
| owner | Yes | Repository owner | |
| action | Yes | Operation to perform | |
| inputs | No | Workflow inputs as JSON object. For dispatch | |
| run_id | No | Workflow run ID. Required for cancel/get_run/get_logs | |
| status | No | Filter by status (waiting, running, success, failure). For list_runs | |
| head_sha | No | Filter by head commit SHA. For list_runs | |
| run_number | No | Filter by run number. For list_runs | |
| tail_lines | No | Return only the last N lines of output (max 500). For get_logs | |
| workflow_id | No | Workflow filename (e.g. ci.yml). Required for dispatch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description's 'cancel' to 'abort a running build' is consistent with that, so there is no contradiction. However the annotations apply uniformly to a mixed tool whose list_runs/get_run/get_logs actions are clearly read-only, and the description does not clarify that distinction, nor does it mention permissions, auth, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first front-loads the purpose, the second is a dense action-to-meaning map with zero filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 15 parameters fully documented in the schema, defined annotations, and no output schema, the description covers the essentials and even notes that get_logs output is grouped by step. It omits only secondary context like pagination behavior and auth requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already documents its action scoping ('For get_logs', 'For dispatch') and the required run_id/workflow_id relationships. The description adds the action vocabulary but no format or syntax detail beyond what the schema provides, making the baseline of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb+resource ('Trigger and monitor CI workflows') and then enumerates all five actions with their individual meanings, so an agent understands exactly what this tool covers. It is clearly distinguishable from siblings like ci_config, branches, or webhooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action is mapped to an intent ('dispatch' to start a run, 'cancel' to abort, 'list_runs' for history, 'get_run' for details, 'get_logs' for job output), which is strong when-to-use guidance within the tool. It stops short of naming when NOT to use this tool or pointing to alternatives such as ci_config for configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ci_configADestructiveInspect
Manage Actions variables and secrets at repository or organization scope. Variables store plaintext config; secrets store encrypted values (write-only, cannot be read back). The 'set' action creates or updates (upsert). The 'get' action is available for variables only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Variable or secret name. Required for get/set/delete | |
| page | No | Page number. For list | |
| repo | No | Repository name. Required when scope=repo | |
| type | Yes | Config type | |
| limit | No | Page size. For list | |
| owner | Yes | Repository owner or organization name | |
| scope | Yes | Scope level | |
| value | No | Value to store. For secrets, this is write-only. Required for set | |
| action | Yes | Operation to perform. Note: get is only available for variables (secrets are write-only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: secrets are encrypted and write-only and cannot be read back, and 'set' is an upsert. The annotations already flag destructiveHint=true and non-read-only, so the write-only secret behavior is the key value-add here. It stops short of describing delete behavior or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the resource and scope, then the variable-vs-secret distinction, then action semantics. No filler; every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter multi-action tool with no output schema, it covers the important conceptual distinctions (variable vs secret, scope, action semantics) adequately, and pagination params are documented in the schema. Minor gaps remain around delete semantics and permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter, including the write-only note on 'value' and the variables-only note on 'get'. The description reinforces the variable/secret and upsert distinctions but adds little that is not already in the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Manage') and resource ('Actions variables and secrets') and clearly distinguishes the two config subtypes and their scopes. It does not name any sibling tool, but the resource is specific enough to separate it from the generic neighbors like ci or repos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives operational context ('get' is variables-only, 'set' is an upsert) that helps select the right action, but never says when to reach for this tool over sibling tools or states prerequisites such as required permissions. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commentsADestructiveInspect
Manage comments on issues and pull requests. Comments are shared between issues and PRs; use the same index for either.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Comment ID. Required for get/edit/delete | |
| body | No | Comment body (markdown). Required for create/edit | |
| repo | Yes | Repository name | |
| index | No | Issue or PR index. Required for list/create | |
| owner | Yes | Repository owner | |
| since | No | ISO 8601 timestamp. Only list comments updated after this | |
| action | Yes | Operation to perform | |
| before | No | ISO 8601 timestamp. Only list comments updated before this |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, non-idempotent and non-readOnly, so the safety profile is partly covered. The description adds the cross-entity behavioral fact (comments shared between issues/PRs), but does not say which action (delete) is destructive or that edits overwrite existing body text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose followed by the key shared-index caveat. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage and no output schema, the structured fields carry most of the load, so the description is adequate. However, for a five-action tool it should at least map the actions at a high level or flag the destructive delete, which it omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all eight params documented, including per-action requirements and the action enum), so the baseline is 3. The description adds a little meaning by clarifying that index refers to an issue or PR interchangeably, but not enough to exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (comments) and its scope (on issues and pull requests), and the 'Manage' verb correctly signals a multi-action tool. It is distinguishable from siblings like issues and pull_requests, though the verb itself is generic rather than specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one useful usage hint โ that comments are shared between issues and PRs so the same index works for either โ but never states when to use this tool versus siblings or how to choose among its five actions. Usage is only implied via the action enum in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commitsARead-onlyIdempotentInspect
Browse commit history and view diffs. Use 'list' to list commits (optionally filtered to a file path). Use 'diff' to get the unified diff of a single commit.
| Name | Required | Description | Default |
|---|---|---|---|
| sha | No | Branch, tag, or commit SHA. Required for diff; optional start point for list | |
| page | No | Page number (1-based). For list | |
| path | No | File or directory path. For list: only commits touching this path. For diff: only this file's diff | |
| repo | Yes | Repository name | |
| limit | No | Page size. For list | |
| owner | Yes | Repository owner | |
| action | Yes | Operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only the action semantics already implied by the enum, saying nothing extra about pagination behavior, result size, or rate limits. With annotations doing the heavy lifting, this is adequate but not additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the overall purpose front-loaded and the two actions enumerated immediately after. Every clause earns its place by mapping an action to its behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only two-mode tool with a fully documented schema and annotations covering safety, the description is nearly sufficient: an agent knows both modes and the path filter. It would be complete with a brief note that 'diff' requires a sha and that results are paginated via page/limit, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter (sha, path, page, limit, owner, repo) is already documented in the schema with per-action applicability notes. The description only restates the path filter for 'list', adding no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Browse commit history and view diffs') and enumerates the two concrete actions, so an agent immediately knows the tool's scope. It does not compare itself to any sibling tool, but overlap with siblings like 'branches' or 'files' is low enough that differentiation is not a gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the selection rule between the two modes: 'list' for listing commits (optionally path-filtered) and 'diff' for a single commit's unified diff. No explicit exclusions or prerequisites are given (e.g., that a sha is needed for diff), but the action routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesADestructiveInspect
Read, list, or write files in a repository. Write actions (create, update, delete) each produce a commit. Use 'read' for file content (plain text by default; set with_metadata=true for the SHA needed by update/delete). Use 'list' for a single directory level, 'tree' for a recursive file listing.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Branch, tag, or commit SHA. Required for read/list/tree | |
| sha | No | File SHA from a prior read with with_metadata=true. Required for update/delete | |
| page | No | Page number (1-based). For tree | |
| path | No | File or directory path. Required for read, list (empty string for root), create, update, delete | |
| repo | Yes | Repository name | |
| limit | No | Page size. For tree | |
| owner | Yes | Repository owner | |
| action | Yes | Operation to perform | |
| content | No | File content (plain text, base64-encoded automatically). Required for create/update | |
| message | No | Commit message. Required for create/update/delete | |
| end_line | No | Last line to return (1-indexed). For read | |
| recursive | No | Return complete file tree. For tree | |
| start_line | No | First line to return (1-indexed). For read | |
| branch_name | No | Target branch. Required for create/update/delete | |
| with_metadata | No | Return full metadata (SHA, encoding, links) instead of plain text. For read | |
| new_branch_name | No | Create a new branch from branch_name and commit there |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds real value beyond them by disclosing the side effect that 'Write actions (create, update, delete) each produce a commit' and that with_metadata is required to obtain the SHA used by update/delete. It omits permissions/auth requirements and rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the overall capability, then the write side effect, then action-routing rules. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, no-output-schema tool, the description covers action routing and the key write side effect, and the schema fully documents parameters. It does not mention pagination (page/limit for tree), return shape for read/list, or auth needs, which would be needed for a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description goes beyond the schema by explaining the cross-parameter dependency chain: with_metadata=true on read yields the SHA that update/delete require, and it groups ref vs branch_name vs sha by action. This is useful semantics the schema only states piecemeal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (read/list/write) and resource (files in a repository), and enumerates the six actions so the agent knows the tool's full scope without opening the schema. It is clearly distinguishable from siblings like commits, branches, and repos, which handle different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit action-selection guidance: 'read' for content, 'list' for one directory level, 'tree' for a recursive listing, and notes with_metadata=true when the SHA is needed. It does not state when *not* to use this tool versus a sibling (e.g. commits for history), so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issuesCInspect
Manage issues and milestones. Use 'set_state' to open or close an issue. Use 'list_milestones' to see available milestones for filtering or assignment.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Issue content body | |
| page | No | Page number. For list/list_milestones | |
| repo | Yes | Repository name | |
| type | No | Filter: issues or pulls. For list | |
| index | No | Issue index. Required for get/update | |
| limit | No | Page size. For list/list_milestones | |
| owner | Yes | Repository owner | |
| state | No | Issue state. For list: filter (open/closed/all, default open). For set_state: required (open/closed). For update: omit to leave unchanged | |
| title | No | Issue title. Required for create | |
| action | Yes | Operation to perform | |
| labels | No | Comma-separated label names. For list | |
| assignee | No | Assignee username. For update | |
| assignees | No | Comma-separated assignee usernames. For update | |
| milestone | No | Milestone ID. For list/update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, so the bar is lower, yet the description adds almost no behavioral context. It never says which actions mutate, whether closing an issue is reversible, what permissions are needed, or that create/update/set_state have side effects while list/get do not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the domain stated first and the two action hints following, no filler or repetition. It is efficient and front-loaded, though the extreme brevity is part of what leaves the tool under-explained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-action, 14-parameter mutation tool with no output schema and only coarse annotations, the description covers two actions and omits the rest. An agent gets no sense of what list returns, what create requires, or how get/update differ, which is a substantial shortfall given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already documents its action scope (e.g., 'state ... For list: filter ... For set_state: required'), so the schema does the heavy lifting. The description adds no parameter detail beyond what the schema states, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The resource is clear ('issues and milestones') and it names two of the six available actions (set_state, list_milestones), which separates it from siblings like pull_requests or comments. However, the umbrella verb 'manage' is generic and the description never reveals that the tool can list, get, create, or update issues, leaving most of its actual capability hidden in the action enum.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use guidance for two actions ('set_state' to open/close, 'list_milestones' to see milestones for filtering or assignment), which is more than nothing. But there is no guidance for selecting among list/get/create/update, no prerequisites, and no comparison against sibling tools such as labels or comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
labelsADestructiveInspect
Manage labels at repository or organization scope, and add or remove labels from issues. Omit repo to operate on org-level labels.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Label ID. Required for edit/delete | |
| name | No | Label name. Required for create | |
| page | No | Page number. For list | |
| repo | No | Repository name. Omit for org-level labels | |
| color | No | Hex color code (e.g. #00aabb). Required for create | |
| index | No | Issue index. Required for add_to_issue/remove_from_issue | |
| limit | No | Page size. For list | |
| owner | Yes | Repository owner or organization name | |
| action | Yes | Operation to perform | |
| labels | No | Comma-separated labels to add (names) or remove (IDs). For add_to_issue/remove_from_issue | |
| exclusive | No | Whether label is exclusive within its scope | |
| description | No | Label description | |
| include_org_labels | No | Include org labels in list response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds org-level scope behavior but does not disclose what gets destroyed by delete, auth requirements, or other execution traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. The core resource and scope are front-loaded, and the scope-condition sentence follows directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of rich schema descriptions and destructive annotations means most invocation details are covered. The description handles the org-vs-repo scope distinction, though it could say more about the multi-action nature and return behavior for list operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 13 parameters are already documented in the schema. The description's scope note about repo duplicates the schema's own repo description and adds no meaning beyond it, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Manage labels') and covers both repository/organization scope and issue-label assignment. It clearly distinguishes the tool from siblings, which are other resources like issues, repos, and commits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit scope rule: omit repo to operate on org-level labels. It does not state when not to use the tool or name alternatives, but no direct sibling alternative exists for label management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pull_requestsAInspect
Manage pull requests: create, update, merge, and inspect changes. Use 'diff' for the unified diff, 'list_files' for changed file paths, 'list_commits' for individual commits in the PR.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Base branch. Required for create | |
| body | No | PR description body | |
| head | No | Head branch. Required for create | |
| page | No | Page number | |
| path | No | Return only this file's diff. For diff | |
| repo | Yes | Repository name | |
| sort | No | Sort order. For list | |
| index | No | PR index. Required for all actions except list/create | |
| limit | No | Page size | |
| owner | Yes | Repository owner | |
| state | No | Filter: open, closed, all. For list | open |
| style | No | Merge style: merge, rebase, rebase-merge, squash. Required for merge | |
| title | No | PR title. Required for create | |
| action | Yes | Operation to perform | |
| labels | No | Label IDs filter. For list | |
| message | No | Merge commit message. For merge | |
| assignee | No | Assignee username. For update | |
| milestone | No | Milestone ID. For list/update | |
| force_merge | No | Force merge even if checks have not passed | |
| delete_branch_after_merge | No | Delete head branch after merge | |
| merge_when_checks_succeed | No | Schedule merge for when all checks pass |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and idempotentHint=false, so the agent already knows this is a non-idempotent mutation surface. The description adds nothing about merge irreversibility, the effect of delete_branch_after_merge/force_merge, or auth/rate-limit constraints, so it goes only marginally 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The purpose statement is front-loaded and the action-routing hints follow, so a skimming agent gets the tool's identity first and the disambiguation second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter, eight-action dispatcher with no output schema, the description covers identity and partial action routing but omits how actions map to required inputs (index for everything but list/create), pagination behavior on list, and the difference between this tool and reviews/comments. The complete schema prevents this from being worse, but the description alone is thin for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 21 parameters, including per-action annotations ('Required for create', 'For merge', 'For list'), so the schema carries the parameter burden. The description adds no syntax, format, or default-value detail beyond it, making 3 the correct baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (pull requests) and enumerates the operation set (create, update, merge, inspect), and the second sentence disambiguates three of the eight actions. It does not distinguish this tool from siblings like reviews, comments, or commits, which an agent could reasonably confuse with PR-related operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent among internal actions ('diff' for unified diff, 'list_files' for changed paths, 'list_commits' for commits), which is genuine guidance, but it never says when to pick pull_requests over the sibling reviews/comments tools, nor does it surface prerequisites beyond what the schema already encodes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
releasesBDestructiveInspect
Manage releases, git tags, and release attachments. Use 'get_latest' for the most recent release or 'get_by_tag' to look up by tag name. Tag actions (list_tags, create_tag, delete_tag) manage git tags independent of releases.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Release ID. For get/update/delete/list_attachments | |
| tag | No | Tag name. For get_by_tag/delete_tag | |
| body | No | Release description (markdown) | |
| name | No | Release title | |
| page | No | Page number. For list/list_tags | |
| repo | Yes | Repository name | |
| draft | No | Whether release is a draft | |
| limit | No | Page size. For list/list_tags | |
| owner | Yes | Repository owner | |
| action | Yes | Operation to perform | |
| target | No | Branch or commit SHA for the tag | |
| message | No | Tag message. For create_tag | |
| tag_name | No | Tag name to create. For create/create_tag | |
| prerelease | No | Whether release is a pre-release | |
| attachment_id | No | Attachment ID. For delete_attachment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false, covering the safety profile. The description adds no behavioral context beyond that: it never says which specific actions (delete, delete_tag, delete_attachment) are destructive, nor mentions auth, permissions, or rate limits. With annotations doing the safety work, a bare description earns a low score for adding nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler, and the broad purpose is front-loaded ahead of the action-routing detail. Efficient for the amount of information conveyed, though it stops short of the most valuable per-action detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-action tool with 15 parameters and no output schema, the description covers the tag-vs-release distinction but leaves most actions and their required parameter combinations unexplained. An agent must fall back entirely on the schema and the coarse tool-level annotations to know which actions are destructive, so it is minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already carries a description, including action-scoping hints ('For get/update/delete/list_attachments'). The description's action-routing sentences add marginal cross-parameter context but no syntax or format detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resources ('Manage releases, git tags, and release attachments') and explicitly separates tag actions from release actions, which is genuinely useful for a 12-action tool. It does not differentiate itself from sibling tools like branches or commits, but the resource scope is clear enough for an agent to pick it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent for two actions ('get_latest' for most recent, 'get_by_tag' for lookup by tag) and clarifies that tag actions are independent of releases. However, 9 of the 12 actions (create, update, delete, list_attachments, delete_attachment, etc.) get no when-to-use guidance, and there is no when-not or alternative-tool guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reposAInspect
List, create, or update repositories. Use 'list' for your repositories, 'create' to make a new one (under your account or an org), 'update' to change settings like description, visibility, merge options, or enabled features.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New repository name. Required for create | |
| page | No | Page number (1-based). For list | |
| repo | No | Repository name. Required for update | |
| limit | No | Page size. For list | |
| owner | No | Repository owner or org name. Required for create (under org) and update | |
| action | Yes | Operation to perform | |
| readme | No | README content | |
| license | No | License template | |
| private | No | Whether repository is private | |
| website | No | Website URL. For update | |
| archived | No | Archive the repository. For update | |
| has_wiki | No | Enable wiki. For update | |
| template | No | Whether this is a template repository | |
| auto_init | No | Initialize with README | |
| gitignores | No | Gitignore template names | |
| has_issues | No | Enable issue tracker. For update | |
| description | No | Repository description | |
| has_actions | No | Enable Actions CI. For update | |
| allow_rebase | No | Allow rebase merging. For update | |
| has_packages | No | Enable package registry. For update | |
| has_projects | No | Enable projects. For update | |
| has_releases | No | Enable releases. For update | |
| issue_labels | No | Issue label set | |
| default_branch | No | Default branch name | |
| has_pull_requests | No | Enable pull requests. For update | |
| allow_squash_merge | No | Allow squash merging. For update | |
| allow_merge_commits | No | Allow merge commits. For update | |
| default_merge_style | No | Default merge style (merge, rebase, rebase-merge, squash, fast-forward-only). For update | |
| default_delete_branch_after_merge | No | Delete head branch by default after merge. For update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=false and idempotentHint=false; the description must carry the rest and does not. It never warns that 'update' can archive a repo or flip visibility (irreversible-ish, non-idempotent in effect), never mentions permission/owner requirements for org creation, and says nothing about rate limits. Naming visibility and merge options as updatable is the only behavioral signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource and the valid verbs, then the per-action routing. No filler, no restatement of the title, and each sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 29-parameter, mixed read/write tool with no output schema and thin annotations, the description is minimally viable: it routes the actions and names update categories, while the schema documents per-action parameter requirements. It omits return shape, pagination behavior, and any error/permission context, so an agent still infers a fair amount.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the semantics of the required action enum (poorly served by the schema's 'Operation to perform') and grouping which field families apply to update. Minor ding: it cites 'visibility', a parameter that does not exist in the schema (the actual property is 'private').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (repositories) and enumerates the three operations (list, create, update) with a one-clause gloss of each. It is trivially separable from siblings like branches, issues, or pull_requests, and internally the three actions are spelled out rather than lumped into 'manage'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit action routing: 'list' for your repositories, 'create' for a new one (account or org), 'update' for settings changes. It covers the main selection question (which action), but offers no guidance on list filtering, pagination, or when to reach for a search tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reviewsBDestructiveInspect
Manage PR reviews, review comments, and review requests. Create a review with inline comments and a verdict (APPROVED, REQUEST_CHANGES, COMMENT). Use 'request' to ask users or teams to review, 'cancel_request' to withdraw.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Review ID. Required for get/list_comments/submit/dismiss/delete | |
| body | No | Review body text | |
| page | No | Page number. For list | |
| repo | Yes | Repository name | |
| index | Yes | PR index | |
| limit | No | Page size. For list | |
| owner | Yes | Repository owner | |
| state | No | Review verdict: APPROVED, REQUEST_CHANGES, or COMMENT. For create/submit | |
| action | Yes | Operation to perform | |
| message | No | Dismissal message. Required for dismiss | |
| comments | No | Inline comments as JSON array. For create | |
| reviewers | No | Comma-separated reviewer usernames. For request/cancel_request | |
| team_reviewers | No | Comma-separated team reviewer names. For request/cancel_request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds verdict semantics and explains request/cancel_request, but is silent on the destructive 'delete' and 'dismiss' actions and whether those are reversible โ a gap the annotations flag but do not explain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource scope, no filler. Efficient and well-ordered, though it could consolidate the action list rather than covering only a subset.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, nine-action tool with no output schema, the description covers only a few actions and omits the behavior of get/list/submit/dismiss/delete. Given the complexity, an agent must rely on the schema alone for most operations, which is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 13 parameters are already documented in the schema, including the enum action. The description's mention of verdict values (APPROVED, REQUEST_CHANGES, COMMENT) merely restates what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific resources (PR reviews, review comments, review requests) with concrete operations, and names verdict values. It doesn't distinguish itself from the sibling 'comments' or 'pull_requests' tools, leaving some ambiguity about which handles which comment type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides action-level guidance for 'request' (ask users/teams to review) and 'cancel_request' (withdraw), which is useful. But it gives no guidance on when to use this tool versus the sibling 'comments' or 'pull_requests' tools, and six of the nine actions (get, list, submit, dismiss, delete, list_comments) get no guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotentInspect
Search across repositories, code, issues, users, and organizations. Action 'all' returns hit counts across types; 'code' and 'repos' return paginated results with type-specific filters.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode: exact, union, fuzzy. Only for action=code | exact |
| page | No | Page number (1-based). Ignored for action=all | |
| limit | No | Page size. Ignored for action=all | |
| action | Yes | Search scope to query | all |
| keyword | Yes | Search query | |
| filename | No | Filter by filename or path. Only for action=code | |
| language | No | Filter by programming language. Only for action=code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered. The description adds genuinely new behavioral detail: the return shape differs by action ('all' returns aggregate hit counts, the others return paginated result sets), which tells the agent what to expect. It omits any note of rate limiting, which is common for search endpoints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the general scope front-loaded and the action-dependent return behavior immediately after. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter read-only tool with full schema coverage, no output schema, and annotations covering safety, the description supplies the one thing the structured data does not: how results differ per action. The only shortfall is the mismatch between the advertised resource types and the available action values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including mode, filename, language, page, and limit is already documented with its applicable action. The description only alludes generically to 'type-specific filters' without adding syntax or constraint detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and enumerates the resources it spans, which is much more informative than the bare name 'search'. However, it claims coverage of issues, users, and organizations while the action enum only exposes 'all', 'code', and 'repos', so the stated scope over-promises relative to what can actually be requested.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides action selection by explaining that 'all' returns hit counts while 'code'/'repos' return paginated results, which implies 'all' is for discovery and the others for retrieval. It never mentions when to use this tool versus the sibling tools (repos, issues, files, commits), so the routing guidance stops short of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_infoARead-onlyIdempotentInspect
Get the authenticated user's profile: username, email, permissions, and account settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by disclosing the shape of the payload (profile fields including permissions and account settings), which matters because no output schema exists to reveal it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the operation front-loaded and the returned content listed compactly. No filler, no restatement of the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description supplies the essentials: who it operates on and what comes back. It stops short of noting auth prerequisites or whether the profile reflects the token's scopes, but nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly implies no inputs are needed by scoping to the authenticated user, and there are no parameters left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Get') plus resource ('authenticated user's profile') and an explicit enumeration of the fields returned (username, email, permissions, account settings). No sibling tool in the set covers the user profile, so the scope is unambiguous without needing an exclusion clause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'authenticated user's' implies it operates on the caller's own identity and needs no arguments, but the description never states when to reach for this tool versus the many resource-oriented siblings (repos, issues, commits). 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.
webhooksADestructiveInspect
Manage webhooks at repository or organization scope. Use scope 'repo' for repository webhooks, 'org' for organization-wide hooks. The 'test' action is only available for repository webhooks.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Webhook ID. Required for get/update/delete/test | |
| url | No | Target URL for payload delivery. Required for create | |
| page | No | Page number. For list | |
| repo | No | Repository name. Required when scope=repo | |
| type | No | Webhook type: gitea, slack, discord. Default: gitea. For create | gitea |
| limit | No | Page size. For list | |
| owner | Yes | Repository owner or organization name | |
| scope | Yes | Scope level | |
| action | Yes | Operation to perform. Note: test is only available for repo-scope webhooks | |
| active | No | Whether the webhook is active | |
| events | No | Comma-separated events (e.g. push,pull_request). Required for create | |
| secret | No | Secret used to sign payloads | |
| content_type | No | Payload format: json (default) or form | json |
| branch_filter | No | Glob pattern restricting which branches trigger delivery | |
| authorization_header | No | Authorization header sent with each delivery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds one genuine behavioral rule (test is repo-only), but never says which action is destructive, that delete is irreversible, or what permissions are needed. With annotations carrying the safety burden, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource and scope model before the exception rule. Nothing is redundant with the schema and every sentence carries a constraint the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, six-action mutation tool with no output schema, the description omits what each action returns, what create/update actually change, and that delete removes the hook permanently. The schema compensates for parameter detail, but the action-level behavior remains underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 15 parameters are already documented in the schema, including action/scope enums and per-action requirements. The description only reinforces the scope enum semantics and the test restriction, adding marginal value beyond the structured fields. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete resource ('webhooks') and scoping model ('repository or organization scope'), which no sibling tool covers. It doesn't spell out the full action set in the prose, but the title-less definition is still immediately distinguishable from repos, issues, or ci.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers real routing guidance between scope='repo' and scope='org', and explicitly warns that the 'test' action is unavailable for org webhooks. However, there is no sibling alternative to steer away from, so this is parameter-level guidance rather than true when-to-use guidance; an agent still infers that this is the only webhook tool.
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.
117 tool updates
- Removed
add_issue_labels - Added
branches - Removed
cancel_build - Added
ci - Added
ci_config - Added
comments - Added
commits - Removed
compare_refs - Removed
convert_repo - Removed
create_branch - Removed
create_branch_protection - Removed
create_file - Removed
create_hook - Removed
create_issue - Removed
create_issue_comment - Removed
create_label - Removed
create_org_hook - Removed
create_org_variable - Removed
create_pull_request - Removed
create_pull_review - Removed
create_release - Removed
create_repo - Removed
create_review_requests - Removed
create_tag - Removed
create_variable - Removed
delete_branch - Removed
delete_branch_protection - Removed
delete_file - Removed
delete_hook - Removed
delete_issue_comment - Removed
delete_label - Removed
delete_org_hook - Removed
delete_org_secret - Removed
delete_org_variable - Removed
delete_pull_review - Removed
delete_release - Removed
delete_release_attachment - Removed
delete_review_requests - Removed
delete_secret - Removed
delete_tag - Removed
delete_variable - Removed
dismiss_pull_review - Removed
dispatch_workflow - Removed
edit_issue_comment - Removed
edit_label - Added
files - Removed
get_branch_protection - Removed
get_commit_diff - Removed
get_file_content - Removed
get_hook - Removed
get_issue_by_index - Removed
get_issue_comment - Removed
get_job_logs - Removed
get_latest_release - Removed
get_my_user_info - Removed
get_org_hook - Removed
get_org_variable - Removed
get_pull_request_by_index - Removed
get_pull_request_diff - Removed
get_pull_review - Removed
get_release - Removed
get_release_by_tag - Removed
get_repo_tree - Removed
get_variable - Removed
get_workflow_run - Removed
issue_state_change - Added
issues - Added
labels - Removed
list_branch_protections - Removed
list_branches - Removed
list_hooks - Removed
list_issue_comments - Removed
list_my_repos - Removed
list_org_hooks - Removed
list_org_secrets - Removed
list_org_variables - Removed
list_pr_commits - Removed
list_pull_request_files - Removed
list_pull_review_comments - Removed
list_pull_reviews - Removed
list_release_attachments - Removed
list_releases - Removed
list_repo_commits - Removed
list_repo_contents - Removed
list_repo_issues - Removed
list_repo_labels - Removed
list_repo_milestones - Removed
list_repo_pull_requests - Removed
list_secrets - Removed
list_tags - Removed
list_variables - Removed
list_workflow_runs - Removed
merge_pull_request - Added
pull_requests - Added
releases - Removed
remove_issue_labels - Added
repos - Added
reviews - Changed
search8 fields changed- added
Input schema / properties / actionAdded value: +{ + "default": "all", + "description": "Search scope to query", + "enum": [ + "all", + "code", + "repos" + ], + "type": "string" +} - added
Input schema / properties / filenameAdded value: +{ + "description": "Filter by filename or path. Only for action=code", + "type": "string" +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"Search keyword"New value: +"Search query" - added
Input schema / properties / languageAdded value: +{ + "description": "Filter by programming language. Only for action=code", + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "default": 30, + "description": "Page size. Ignored for action=all", + "type": "number" +} - added
Input schema / properties / modeAdded value: +{ + "default": "exact", + "description": "Search mode: exact, union, fuzzy. Only for action=code", + "type": "string" +} - added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "Page number (1-based). Ignored for action=all", + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "keyword" -]New value: +[ + "action", + "keyword" +]
- Removed
search_code - Removed
search_repos - Removed
set_org_secret - Removed
set_secret - Removed
submit_pull_review - Removed
test_hook - Removed
update_branch_protection - Removed
update_file - Removed
update_hook - Removed
update_issue - Removed
update_org_hook - Removed
update_org_variable - Removed
update_pull_request - Removed
update_release - Removed
update_repo - Removed
update_variable - Added
user_info - Added
webhooks
103 tool updates
- First observed
add_issue_labels - First observed
cancel_build - First observed
compare_refs - First observed
convert_repo - First observed
create_branch - First observed
create_branch_protection - First observed
create_file - First observed
create_hook - First observed
create_issue - First observed
create_issue_comment - First observed
create_label - First observed
create_org_hook - First observed
create_org_variable - First observed
create_pull_request - First observed
create_pull_review - First observed
create_release - First observed
create_repo - First observed
create_review_requests - First observed
create_tag - First observed
create_variable - First observed
delete_branch - First observed
delete_branch_protection - First observed
delete_file - First observed
delete_hook - First observed
delete_issue_comment - First observed
delete_label - First observed
delete_org_hook - First observed
delete_org_secret - First observed
delete_org_variable - First observed
delete_pull_review - First observed
delete_release - First observed
delete_release_attachment - First observed
delete_review_requests - First observed
delete_secret - First observed
delete_tag - First observed
delete_variable - First observed
dismiss_pull_review - First observed
dispatch_workflow - First observed
edit_issue_comment - First observed
edit_label - First observed
get_branch_protection - First observed
get_commit_diff - First observed
get_file_content - First observed
get_hook - First observed
get_issue_by_index - First observed
get_issue_comment - First observed
get_job_logs - First observed
get_latest_release - First observed
get_my_user_info - First observed
get_org_hook - First observed
get_org_variable - First observed
get_pull_request_by_index - First observed
get_pull_request_diff - First observed
get_pull_review - First observed
get_release - First observed
get_release_by_tag - First observed
get_repo_tree - First observed
get_variable - First observed
get_workflow_run - First observed
issue_state_change - First observed
list_branch_protections - First observed
list_branches - First observed
list_hooks - First observed
list_issue_comments - First observed
list_my_repos - First observed
list_org_hooks - First observed
list_org_secrets - First observed
list_org_variables - First observed
list_pr_commits - First observed
list_pull_request_files - First observed
list_pull_review_comments - First observed
list_pull_reviews - First observed
list_release_attachments - First observed
list_releases - First observed
list_repo_commits - First observed
list_repo_contents - First observed
list_repo_issues - First observed
list_repo_labels - First observed
list_repo_milestones - First observed
list_repo_pull_requests - First observed
list_secrets - First observed
list_tags - First observed
list_variables - First observed
list_workflow_runs - First observed
merge_pull_request - First observed
remove_issue_labels - First observed
search - First observed
search_code - First observed
search_repos - First observed
set_org_secret - First observed
set_secret - First observed
submit_pull_review - First observed
test_hook - First observed
update_branch_protection - First observed
update_file - First observed
update_hook - First observed
update_issue - First observed
update_org_hook - First observed
update_org_variable - First observed
update_pull_request - First observed
update_release - First observed
update_repo - First observed
update_variable
Publisher details
- Operator
- Hackerman AB
- Operator website
- https://codebahn.net/
- Vendor relationship
- Not applicable
- Documentation
- https://codebahn.net/docs/mcp/
- Trust center
- Not applicable
- Restrictions
- Not applicable
Related MCP Connectors
Hosting for apps you build with AI. Tested with Claude Code and Codex. Private beta: ask for access.
AI-native git hosting โ repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
- xhostdOAuthcom.xhostd
Agent-first hosting: create apps, push code, and deploy to HTTPS URLs from your coding agent.
Create, build and deploy projects, roll back with checkpoints, connect custom domains, and searchโฆ
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAutomates CI/CD pipeline control, PR review, Git operations, and monitoring/alerting with role-based access control.-
- FlicenseNot gradedqualityCmaintenanceAI-native, zero-config CI/CD. Detects 33 languages + 40 frameworks, generates pipelines, runs locally at $0 cloud cost, diagnoses failures with AI, and deploys to 20 targets.-
- AlicenseAqualityAmaintenanceEnables AI coding assistants to recall past lessons, bugs, and conventions from local git history with sub-5ms latency and full privacy.711 npm1MIT
- FlicenseCqualityDmaintenanceEnterprise-grade code intelligence platform providing AI-powered code analysis, semantic search, security scanning, and automated refactoring capabilities. Integrates with local AI models for zero-cost operations while delivering comprehensive development workflow automation.28-
Glama MCP Gateway
Add one secure layer between your agents and this server.