Skip to main content
Glama

Server Details

Your team's shipping standards, org map and delivery metrics, inside your coding agent.

Ownership verified
Status
Healthy
Uptime
72.6% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.8/5.0

Scored across 38 tools

Disambiguation3/5

Each tool is individually well-described, but several clusters overlap: get-team-overview, get-pull-request-metrics, and get-dora-metrics all surface similar team/PR health data, and update-prospect, record-prospect-outreach, and save-prospect-draft all mutate prospect state. The descriptions help, but an agent must read carefully to pick the right tool.

Naming Consistency5/5

All 38 tools follow a consistent lowercase-hyphenated verb_noun pattern with a uniform -tool suffix, and parallel resources use parallel names (get-open-pull-requests, get-created-pull-requests, get-merged-pull-requests, get-undeployed-pull-requests). There are no mixed conventions or vague generic verbs.

Tool Count2/5

38 tools is well above the 25+ threshold, and the server bundles several loosely related domains: engineering analytics, PR workflow, repo/agent readiness, and an internal prospect CRM. The breadth creates unnecessary selection overhead and would be better split into separate focused servers.

Completeness4/5

Core workflows are covered end-to-end: PR observation, review requests, change-fit checks, deployment, prospect sourcing through outreach, team metrics, insights, and AI usage reporting. Minor gaps exist, such as no direct PR creation/merge or single-PR detail endpoint, but these appear to be outside Coderbuds' intended role and are workable through other means.

Available Tools

38 tools
add-prospect-toolAdd Prospect ToolAInspect

Internal Coderbuds staff only. Add a company or adviser to the outbound pipeline.

The buyer to look for: a CTO, head of engineering or hands-on engineering manager at a product company with 10–30 engineers on GitHub or Bitbucket. Coderbuds does not support GitLab — a GitLab-only team is not a prospect, however good the fit otherwise looks.

Give the signal that made them worth writing down and the source_url it came from, and put what you could not verify in qualification_needed rather than guessing. A row whose signal is "looked like a fit" is a row nobody can act on later.

Everything starts at Sourced regardless of what you pass. Duplicates are worth checking for first with get-prospect-worklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNocompany or partner. An adviser — fractional CTO, consultancy — is a partner.company
nameYesCompany or adviser name.
signalNoWhat makes them worth approaching now.
websiteNoTheir website.
locationNoWhere they are based.
priorityNoA, B or C.
source_urlNoWhere the signal came from, so it can be rechecked.
contact_urlNoProfile URL for that person.
next_actionNoThe first thing to do about them.
contact_nameNoWho to approach.
contact_roleNoTheir role as published, not as inferred.
qualification_neededNoWhat you could not verify.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden, and it does disclose real behavior: the staff-only restriction and that every row starts at 'Sourced' regardless of passed values. It stops short of saying what happens on a duplicate (rejected, merged, or created anyway) or what is returned, so a small but meaningful gap remains.

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 access restriction is front-loaded and the ICP, exclusion, and data-quality guidance are all actionable. It is slightly verbose with stylistic asides ('a row nobody can act on later'), but every paragraph carries information the agent needs.

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 12-parameter mutation with no annotations and no output schema, the description supplies the domain rules (ICP, GitLab exclusion, dedupe prerequisite, default status behavior) that schemas cannot express. It is close to complete; only duplicate-handling outcome and return behavior are left unstated.

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% on all 12 parameters, so the schema already defines kind, signal, source_url, qualification_needed and the rest. The description adds emphasis on signal quality and the significance of qualification_needed, but no syntax, format, or enum detail beyond what the schema provides. Baseline 3 is appropriate.

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?

States a specific verb and resource ('Add a company or adviser to the outbound pipeline') and the next line disambiguates the sibling space by describing the buyer and the GitLab exclusion. An agent can distinguish this from save-prospect-draft-tool and update-prospect-tool 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 Guidelines5/5

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

Gives an explicit audience restriction ('Internal Coderbuds staff only'), an explicit exclusion (GitLab-only teams are not prospects), and a named alternative with a condition ('Duplicates are worth checking for first with get-prospect-worklist'). That is when-to-use, when-not-to-use, and the alternative all in one.

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

assess-change-fit-toolAssess Change Fit ToolAInspect

Pre-flight fit check for a change you are about to open as a pull request. Pass the additions, deletions, and changed-file counts of your working diff and Coderbuds answers whether the change fits how this team ships: a verdict with reasons, the team's own merged-PR size norms (median/p75) and merge time by size category, and the current review-queue pressure. Pass repository and that queue is scoped to it — human-authored open pull requests on the repo you are working in, not every repo the team owns, because "review one of these first" is only actionable if you are near them.

Four verdicts, and only two of them ask anything of you. fits — go. fits_at_edge — over the standard but inside its tolerance, which is stated for the record and needs no action, because changes this close to the line merge like changes under it. caution — meaningfully over; weigh the guidance. split_required — effectively unreviewable; split it.

Coderbuds applies its own opinionated standard (on by default, teams can opt out): changes well above the standard size get at least a caution regardless of what the team's historical norms would allow — reported as team_norms.target_total_changes.

Also pass review_goals: the distinct outcomes a reviewer must approve in this change. Describe outcomes, not implementation layers — an API, UI, migration, tests, and docs that deliver one behavior are one review goal. One goal fits. Two prompt a caution to confirm they really must ship atomically. Three or more require a split. This is the scope-coherence standard: a small diff can still be hard to review when it bundles unrelated decisions. If multiple goals truly cannot ship separately, use scope_rationale to preserve that context and record the decision after the check.

Best results: pass numstat, the raw output of git diff --numstat <base>.... Coderbuds then works out the split from the file paths itself — tests, documentation, generated files (lockfiles, snapshots, minified bundles) and binary assets are identified and discounted, so the verdict judges the CODE a reviewer actually has to read. 400 lines of blog post and 400 lines of business logic are not the same review, and without the paths there is no way to tell them apart.

Failing that, declare the split yourself: test_lines (changed lines living in test files, e.g. from git diff --shortstat -- tests/) and moved_lines (code relocated without behavioral change, e.g. an extraction refactor) are subtracted from the verdict, because a raw count punishes test coverage and double-counts refactors. Report these honestly; they are recorded with the check and visible to the team.

Do the same for files with test_files and moved_files. A rename sweep, codemod, or file-move refactor touches a lot of files with almost nothing to read in each, and the file count is judged separately from the line count — so without these a mechanical change is called oversized on file count alone. git diff --shortstat -M and git diff --summary will tell you how many of the changed files were renames.

When the verdict is not "fits", say what you did about it with record-change-fit-decision — including when you proceed anyway. Overriding is allowed; overriding silently is what leaves the standard unable to learn it is in the wrong place.

ParametersJSON Schema
NameRequiredDescriptionDefault
numstatNoStrongly recommended: raw `git diff --numstat <base>...` output (tab-separated "added deleted path" rows, `-` for binary). Coderbuds classifies the paths itself and discounts tests, docs, generated files and binary assets, so the verdict judges the code a reviewer must read. Supersedes test_lines/test_files when given.
additionsYesLines added in the proposed change (e.g. from `git diff --shortstat`).
deletionsYesLines deleted in the proposed change.
repositoryNoOptional "owner/name" repository slug the change targets (e.g. patchstack/hub).
test_filesNoOptional: how many of the changed files are test files. Discounted from the file count the same way test_lines is discounted from the line count.
test_linesNoOptional: changed lines that live in test files (e.g. from `git diff --shortstat -- tests/`). Discounted from the verdict — test coverage is not review burden. Ignored when numstat is given.
moved_filesNoOptional: how many of the changed files were renamed or moved rather than edited (see `git diff --summary`). Discounted from the file count — without this a rename sweep is judged oversized on file count alone.
moved_linesNoOptional: lines that are relocated code, not new logic (e.g. an extraction refactor). Discounted from the verdict — a raw diff double-counts moves. Estimate honestly; recorded with the check.
review_goalsNoStrongly recommended: the distinct outcomes a reviewer must approve. Describe user or system outcomes, not implementation layers; supporting code, tests, docs, and migrations for one behavior are one goal. One fits, two get a caution, and three or more require a split.
changed_filesNoNumber of files changed. Optional but improves the size categorization.
scope_rationaleNoOptional: why multiple review goals must ship atomically. This preserves the reasoning for the team but does not silently waive the scope standard.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
reasonsYesWhy the verdict is what it is, in plain language.
verdictYesThe strongest result across active standards: fits | fits_at_edge (over the size standard but inside tolerance — stated, no action expected) | caution | split_required.
check_idYesId of the recorded check — pass it to record-change-fit-decision to say what you did about this verdict.
guidanceYesConcrete next steps when the change does not cleanly fit.
proposedYesThe proposed change: additions, deletions, changed_files, total_changes, the discounted surfaces (test_lines, moved_lines, docs_lines, generated_lines, test_files, moved_files, docs_files, generated_files, binary_files), reviewable_changes and reviewable_files (what the verdict judges), size_category (tiny|small|medium|large|oversized, of the reviewable surface).
standardsYesPer-standard results. `size` reports its own verdict and threshold; `scope_coherence` reports assessed|not_assessed|disabled, the normalized review goals, rationale, reason, and guidance.
repositoryNoMatched team repository slug, or null if none given/matched.
team_normsYesThe box: merged PRs analyzed, median/p75 total changes, the Coderbuds standard size ceiling when active (target_total_changes), and average merge-time hours by size category.
review_queueYesCurrent open PR count, how many are awaiting a reviewer, and how many have waited past the Coderbuds review-turnaround standard. Scoped to the repository when one was given. PRs left unreviewed for over a month are reported separately as `abandoned` and excluded from the awaiting/stale pressure counts — they call for closing, not reviewing.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so richly: it enumerates all four verdicts and their thresholds, discloses that an opinionated default-on standard overrides team norms (team_norms.target_total_changes), explains how test/docs/generated/binary content is discounted, and warns that reported values are recorded and visible to the team.

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 well front-loaded, leading with the purpose, verdicts, and the numstat recommendation. However it runs six paragraphs and repeats the discounting rationale for numstat, test_lines, and moved_lines in several places, so not every sentence earns its place.

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?

An output schema exists so return values need not be explained, and the description still covers the verdict taxonomy, the scoping behavior of repository, the discounting model, and the recording workflow. An agent has everything needed to call this correctly and interpret the result.

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 100%, so the baseline is 3, but the description adds genuine meaning: it establishes the precedence rule that numstat supersedes test_lines/test_files, explains the review_goals semantics (outcomes not layers, 1/2/3+ thresholds) and the purpose of scope_rationale as preserving context without waiving the standard. This augments rather than repeats the schema.

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?

The opening sentence states a specific verb and resource: a 'pre-flight fit check' for a change about to be opened as a pull request, with the exact inputs (additions, deletions, changed-file counts). It clearly distinguishes itself from siblings by naming record-change-fit-decision-tool as the follow-up tool for recording the outcome.

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

Usage Guidelines5/5

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

Explicit when-to-use framing ('change you are about to open as a pull request'), a concrete recommended path (pass numstat and review_goals), and explicit routing to record-change-fit-decision-tool when the verdict is not 'fits'. It also states the alternative input modes (numstat vs manually declaring test_lines/moved_lines) and when each applies.

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

deploy-repository-toolDeploy Repository ToolAInspect

Trigger a production deploy for one of your team's connected repositories. The repository must have a deploy trigger configured — either a deploy hook URL or a GitHub Actions workflow — in its Coderbuds settings. Identify the repository by name (e.g. "saas") or by full name (e.g. "patchstack/saas"). This ships whatever is currently merged; it is not a dry run. Use GetUndeployedPullRequestsTool first if you want to see what will go out.

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoryYesThe repository to deploy, by name (e.g. "saas") or full name (e.g. "patchstack/saas"). Must be connected to your team and have a deploy trigger configured.

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYesHow the deploy was triggered: "hook" or "workflow".
messageYesA human-readable summary of the outcome.
successYesWhether the deploy was triggered.
repositoryYesThe repository that was deployed.

TDQS

A4.9/5.0
Behavior5/5

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

With empty annotations, the description carries the full burden and it does: this 'ships whatever is currently merged', is 'not a dry run', and requires a preconfigured deploy trigger. Those are exactly the mutation-effect and precondition facts an agent needs before invoking a 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?

Four sentences, each earning its place: action, precondition, identifier format, destructive nature, alternative tool. The most consequential fact ('not a dry run') is present and front-loaded enough to catch the eye.

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?

For a one-parameter mutation tool with an output schema already defining return values, the description covers action, precondition, identifier forms, irreversibility, and the read-first alternative. Nothing an agent needs 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.

Parameters4/5

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 adds practical identification guidance — a short name like "saas" versus full name like "patchstack/saas" — plus the team-connection and deploy-trigger requirement. It goes slightly beyond the schema text without adding format details the schema already supplies.

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 ('Trigger a production deploy') and resource ('one of your team's connected repositories'), with the scope narrowed to production. An agent can distinguish it from read-only siblings like get-deployments-by-person-tool or get-undeployed-pull-requests-tool at a glance.

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

Usage Guidelines5/5

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

Explicitly states a precondition (must have a deploy hook URL or GitHub Actions workflow configured), names the sibling to use first (GetUndeployedPullRequestsTool) and gives the condition that selects it ('if you want to see what will go out'). Nothing 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.

explain-pull-request-score-toolExplain Pull Request Score ToolA
Read-onlyIdempotent
Inspect

Explain why one specific pull request got the quality score and label Coderbuds gave it. Returns the receipts rather than a summary: the recorded score, its label, the size counts, every penalty that was applied with its point cost, the AI adjustment, and the stored breakdown. Use this when someone asks "why is #1186 marked poor" or wants to understand a low score on a PR they opened.

The score is structural: it starts at 100 and subtracts penalties for diff size, lines changed, files changed, change complexity, focus, title/description quality and changes spanning unrelated areas, then applies a bounded AI adjustment (at most ±20) for readability, test coverage and security. It does not read CI results and does not run a linter — never claim otherwise. Report only the factors this tool returns.

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoryYesThe repository the pull request lives in, as "owner/name" (e.g. patchstack/saas) or a bare repository name.
pull_request_numberYesThe pull request number, e.g. 1186.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoLink to the pull request.
sizeNoadditions, deletions, total_changes, changed_files, lines_category, diff_characters.
foundYesWhether Coderbuds is tracking this pull request.
labelNoThe label for that score: Elite, Excellent, Good, Average, Below Average, Needs Improvement, Poor.
scoreNoThe recorded quality score out of 100.
titleNoPull request title.
authorNoWho opened it.
numberYesPull request number.
scoredYesWhether a quality score was recorded.
statusNoPull request status.
factorsYesHuman-readable receipts: each penalty applied and its point cost.
messageNoWhy the lookup failed, when found is false.
categoryNoHow Coderbuds categorised the change (feature, bug-fix, dependency-update, …).
repositoryNoFull repository name.
ai_adjustmentNoPoints the AI review added or removed on top of the structural score.
scoring_basisYesWhat the score does and does not measure. Quote this rather than inventing criteria.
recommendationNoWhat would raise the score next time.
objective_scoreNoThe structural score before any AI adjustment.
not_scored_reasonNoWhy there is no score, when scored is false — usually the PR was past the size limit for review.
recorded_breakdownNoThe breakdown stored when the review ran.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover read-only and idempotent behavior, but the description adds substantial context beyond that: the scoring model (start at 100, subtract size/lines/files/complexity/focus/title-description/cross-area penalties), a bounded AI adjustment of at most ±20, and explicit exclusions (no CI results, no linter). It also constrains reporting to the returned `factors`, preventing fabricated explanations.

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?

Front-loaded with purpose and a concrete example use case, then a second paragraph on methodology and caveats. Every sentence carries information, though the methodology paragraph is slightly dense and could be trimmed without losing meaning.

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?

Output schema exists, so return values need no explanation, yet the description still clarifies the shape of the response and the scoring rationale. The exclusions (CI, linter) and the instruction to report only returned factors close the remaining ambiguity for an explain-style tool.

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 100% and both parameters are documented in the schema with format examples ('owner/name', PR number 1186). The description adds no additional parameter-level detail, so the baseline of 3 for a fully-documented schema is appropriate.

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?

States a specific verb and resource: explain why one specific PR received its score and label. The description also enumerates exactly what it returns (score, label, size counts, penalties with point cost, AI adjustment, breakdown), which clearly separates it from sibling metrics tools like get-pull-request-metrics-tool.

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?

Gives explicit trigger scenarios such as someone asking 'why is #1186 marked poor' or wanting to understand a low score on their own PR, and it defines the scope as one specific pull request. It does not, however, name an alternative sibling (e.g. get-pull-request-metrics-tool) for aggregate or cross-PR comparisons.

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

find-delivery-bottleneck-toolFind Delivery Bottleneck ToolA
Read-onlyIdempotent
Inspect

Where does a change spend its waiting time — in the backlog, being written, before review, in review, or after merge? Splits the path from "somebody asked for this" to "shipped to production" into six stages — sitting in the backlog, being written on a branch, waiting for a first review, in review, merged and waiting for a deploy, and the deploy itself running — times each one across recently merged pull requests, and names the single slowest stage with the pull requests that prove it and one intervention to try.

Use this to answer "why is our delivery slow" with one stage instead of five dashboards. The interventions differ completely by stage: chasing reviewers does nothing when the wait is after merge.

A stage is only named as the bottleneck when it was measurable on enough of the window's work. A stage that could barely be seen is still reported, with the reason it is ineligible — so missing deployment tracking reads as missing deployment tracking rather than as a fast deploy. Bot pull requests are excluded. Review history is pruned after 90 days, so the window is clamped there.

The backlog stage is measured and reported but never named as the bottleneck: it is the gap before anybody started rather than a change waiting to move, it dwarfs the delivery stages wherever a tracker is connected, and it answers to prioritisation instead. It is timed from the linked Jira or Linear issue.

The two deploy stages are scored only against repositories that have ever recorded a production deployment, because a package or a docs site never deploys and counting its merged work as untracked buries the repositories that do. Each stage carries its own analysed count for that reason; the repositories left out are named in the blind spots.

A stage that is blank because nothing is connected to time it carries an unlock string — a tracker for the backlog, a named production environment or deploy reporting for the two deploy stages — with the full ask in its note. Relay that as something to connect and what it would reveal, never as a stage with no wait in it: the changes did reach production, and how long that took is the part nothing can see.

ParametersJSON Schema
NameRequiredDescriptionDefault
window_daysNoHow many days of merged pull requests to time. Defaults to 30, clamped to 1–90 because review history is pruned after 90 days.
repositoriesNoOptional "owner/name" repository slugs to scope to. Leave empty for every active repository the team ships to. Scoping to one representative repository makes the result easier to interpret with a team.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
periodYesThe window actually measured: ISO start, ISO end, and its span in days.
stagesYesAll six stages — waiting_to_start, writing_the_change, waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, the count it was scored against (`analysed`, which for the two deploy stages counts only repositories that deploy), coverage, whether it is eligible to be ranked, whether it competes for the bottleneck at all (`ranked`, false for waiting_to_start), what would have to be connected to see it (`unlock`), and a note saying why it cannot or will not be ranked.
headlineYesOne-line answer to lead with when relaying this result.
bottleneckNoThe single slowest eligible stage: median and p75 hours, sample size, coverage, one intervention to try, and the three slowest pull requests as evidence. Null when no stage was measurable on enough of the window — read the stage notes for what is missing.
blind_spotsYesWhat these numbers cannot see. Relay these alongside the finding; the failure mode of this diagnostic is a confident reading of a gap in the data.
repositoriesYesRepository slugs included in the result.
contributing_factorsYesPatterns that make the slowest stage slower — review concentration, oversized changes, current queue pressure, work merging without a recorded review. Reported, never ranked.
pull_requests_analysedYesHuman-authored pull requests merged in the window.
unmatched_repositoriesYesRequested slugs that did not match an active team repository — either not tracked, or archived.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare readOnly/idempotent; the description adds substantial behavior beyond them: bot PRs excluded, review history pruned at 90 days, backlog measured but never named, deploy stages scored only against repos with recorded production deployments, per-stage analysed counts, and unlock strings for unmeasurable stages.

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?

Front-loads the core question and the six-stage framing, then orders caveats logically. It is unusually long for two parameters, and some caveat prose could be tightened, but nearly every paragraph carries an operational rule an agent needs.

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 an output schema present, the description need not explain return values, and it instead covers the interpretive edge cases an agent would otherwise get wrong: excluded bots, clamped window, never-bottleneck backlog stage, deploy-stage eligibility, and how to relay unlock notes.

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 are already documented, including the 1-90 clamp rationale. The description restates the pruning-driven clamp and the blind-spot logic but adds no new syntax or format meaning beyond the schema, so the baseline of 3 applies.

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?

Names a specific analytical verb sequence (split into six stages, time each, name the slowest) over a specific resource (recently merged pull requests). An agent can distinguish this from get-dora-metrics-tool or get-pull-request-metrics-tool because the description pins the output to a single named bottleneck stage.

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?

Clearly states when to reach for it ('why is our delivery slow' with one stage instead of five dashboards) and when an intervention is stage-dependent. It does not name a sibling tool as the alternative, so it falls short of an explicit routing rule, but the context is unambiguous.

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

get-agent-activity-toolGet Agent Activity ToolA
Read-onlyIdempotent
Inspect

Get a summary of autonomous agent activity for the authenticated user's team. Returns which agents are enabled, recent actions, per-agent stats, and pending approval counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
postureYesHow loudly the agent speaks: off, preview, quiet, public or direct. The single control over whether it acts.
agent_summaryYesPer-agent statistics.
enabled_agentsYesList of agent types currently active for the team.
recent_actionsYesMost recent agent actions (up to 10).
pending_approvalsYesCount of actions awaiting approval.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already signal readOnlyHint=true and idempotentHint=true, so the safe, non-mutating nature is covered. The description adds value by disclosing the team scope and the specific categories of information returned, which is exactly the behavioral context an agent needs beyond the 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?

Two sentences with no filler: the first states what the tool does and its scope, and the second lists the return content. Every sentence earns its place and the key action is front-loaded.

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?

Given zero parameters, read-only and idempotent annotations, and the existence of an output schema, the description is complete. It covers scope, expected output, and the non-mutating nature, leaving no ambiguity about how or why the tool should be called.

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 has zero parameters, so there are no parameter semantics to document. The description correctly avoids inventing parameters and focuses on behavior; the schema coverage baseline of 4 applies.

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?

The description opens with the specific verb 'Get' and identifies a clear resource: a summary of autonomous agent activity for the authenticated user's team. It further clarifies purpose by enumerating the summary's contents (enabled agents, recent actions, per-agent stats, pending approval counts), which distinguishes it from sibling tools like get-person-activity-tool.

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?

The description provides clear context by scoping to the authenticated user's team and stating the tool returns a summary plus exact output categories. It does not explicitly state when not to use it or name a sibling alternative, but for a zero-parameter read-only summary tool, the context is sufficient.

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

get-ai-adoption-toolGet Ai Adoption ToolA
Read-onlyIdempotent
Inspect

How much of this team's shipped work is AI-assisted, and what that work did once it shipped. Returns adoption rate (share of active contributors using AI), contribution intensity (share of lines changed), the AI-assisted PR rate, which AI tools were detected, detection confidence, and a delivery outcome split comparing AI-assisted merged PRs against the rest on lead time and size. Use it to answer "is AI actually in our SDLC yet" and "is it paying off" with the same call. Adoption alone is a pilot metric — the outcome split is what turns it into a KPI, and the result says plainly when the samples are too small to compare or when detection has not covered the period. Bot and dependabot PRs are excluded from the outcome comparison. The attribution block separates what agents reported about themselves (first-party, via report-ai-usage) from what Coderbuds inferred from diffs, and grades the inference against the reports — so you can see how much error the inferred numbers carry before acting on them.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoReporting period. Defaults to rolling_30d.rolling_30d
repositoryNoOptional "owner/name" repository slug used to resolve which of your teams this call is about. It does not filter the metrics — they always cover the whole team.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
toolsYesDetected AI tools with counts and shares.
periodYesHuman-readable period label.
caveatsYesWhat these numbers do and do not prove.
adoptionYesShare of active contributors who shipped AI-assisted PRs.
headlineYesOne-line read of adoption, intensity, and the outcome split together.
outcomesYesAI-assisted versus other merged PRs on lead time and size, with a comparable flag.
detectionYesDetection threshold and how much of the period has actually been analysed.
intensityYesShare of lines changed that came from AI-assisted PRs.
confidenceYesDetection confidence distribution across AI-assisted PRs.
attributionYesWhat coding agents reported about their own usage, and how often the inferred detector agreed with them.
assisted_pull_requestsYesShare of PRs that were AI-assisted.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover read-only/idempotent, and the description adds substantial behavioral detail beyond that: bot and dependabot PRs are excluded from the outcome comparison, the result explicitly states when samples are too small to compare, and the attribution block separates first-party reports from inferred diffs and grades the inference. This pre-warns the agent about data-quality caveats and error margins before it acts on numbers.

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 front-loaded with the core question and keeps every sentence substantive, with no filler. It runs long (~180 words) and the attribution paragraph could be tightened, but each statement carries operational meaning.

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?

Given an output schema exists and annotations cover the safety profile, the description supplies everything else an agent needs: what the metric means, caveats about sample size and detection coverage, exclusion rules, and how to interpret attribution confidence. Nothing material to correct invocation is missing.

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 the period enum and the repository slug (including the important note that it resolves the team but does not filter metrics) are already documented in the schema. The description adds no parameter syntax, defaults, or format guidance beyond that. Baseline 3 is appropriate when the schema does all the work.

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?

The description names a precise question the tool answers ('how much of this team's shipped work is AI-assisted') and enumerates the specific outputs: adoption rate, contribution intensity, AI-assisted PR rate, detected tools, detection confidence, and an outcome split on lead time and size. It also gestures at differentiation from siblings by naming report-ai-usage-tool as the source of first-party attribution data. An agent can distinguish this from get-mcp-adoption-tool and get-dora-metrics-tool from the description alone.

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

Usage Guidelines4/5

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

It gives explicit use cases ('is AI actually in our SDLC yet' and 'is it paying off') and frames the outcome split as the KPI vs adoption as a pilot metric, which tells the agent when this call is warranted. It also warns that results flag small samples and uncovered detection periods. However, it never states when NOT to use this tool or routes the agent to a specific alternative sibling for partial needs.

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

get-created-pull-requests-toolGet Created Pull Requests ToolA
Read-onlyIdempotent
Inspect

Count pull requests OPENED over a recent window (default 1 day), broken down per repository and per author, with a human-vs-bot/dependabot split. Use this whenever the question is how many pull requests were created, opened or raised — today, this week, on a repo, or across the team — and especially when someone asks to see it "per repo" or "by repository".

Prefer this over a per-person activity breakdown for any total. It counts from the team's repositories rather than its member list, so it includes authors who have no Coderbuds account (reported as authors_without_member and created_by_non_members) and excludes a member's work in repositories this team does not ship. A member-first count gets both of those wrong.

The result carries its own denominator: repositories is exactly the list the numbers came from, so you can answer "which repos is this based on" from the same call. Slugs that match no team repository come back in unmatched_repositories instead of quietly counting zero.

Opened is counted by the time the provider recorded the pull request being opened. That is a different set from merged in the window — use get-merged-pull-requests for merges, and never present the two as reconciling.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days, trailing from now. Defaults to 1 — note that is the last 24 hours, not today's calendar day.
include_botsNoWhether to include bot/dependabot PRs in the totals. Defaults to true; the result always reports the human-vs-bot split regardless.
repositoriesNoOptional list of "owner/name" repository slugs to scope to (e.g. ["patchstack/saas"]). A bare repo name like "saas" also matches. Omit to include every repository on the team.

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYesLook-back window used, in days.
teamYesTeam name.
sinceYesISO-8601 start of the window.
untilYesISO-8601 end of the window.
authorsYesPer-author counts with is_bot and is_member flags.
counted_asYesWhat "created" means in this result, to quote when reporting it.
bot_createdYesPRs opened by bots (any "[bot]" login).
not_capturedYesLimits of this result, to repeat when reporting the numbers.
repositoriesYesRepository slugs the numbers came from — the denominator for the whole result.
human_createdYesPRs opened by humans.
total_createdYesTotal PRs opened in the window (respects include_bots).
dependabot_createdYesPRs opened by dependabot specifically.
authors_without_memberYesHuman authors with no Coderbuds membership on this team — people a per-person breakdown would have omitted entirely.
created_by_non_membersYesPRs those non-member humans opened.
repositories_breakdownYesPer-repository totals with human/bot split, highest first.
unmatched_repositoriesYesRequested slugs that did not match a team repository.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already signal read-only and idempotent behavior, and the description adds substantial context: it counts from team repositories rather than the member list, includes non-members, reports unmatched_repositories instead of silently counting zero, and counts opened by provider-recorded time. It also discloses that the human-vs-bot split is always reported even when include_bots is false.

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?

Although longer than typical, the description is well-structured and front-loaded: a one-sentence summary, then when-to-use guidance, then counting semantics, then the merged-PR caveat. Every paragraph earns its place and helps the agent avoid real mistakes.

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 all parameters documented in the schema and an output schema available, the description supplies the missing context: which authors are counted, how scoping works, what happens with unmatched repository slugs, and how opened differs from merged. An agent has everything needed to select and invoke this tool correctly.

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?

The input schema covers all three parameters with full descriptions, including defaults and repository slug matching, so the schema is doing the heavy lifting. The description reinforces that repositories is the exact source list and mentions unmatched_repositories, but it does not add substantial parameter-level meaning beyond the schema.

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?

The description opens with a specific action: Count pull requests OPENED over a recent window, then adds the key breakdown dimensions: per repository, per author, and human-vs-bot/dependabot split. It also distinguishes itself from get-merged-pull-requests by explicitly saying opened is a different set from merged, and from per-person activity tools by explaining what each approach counts.

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

Usage Guidelines5/5

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

The description gives explicit trigger questions such as how many pull requests were created, opened or raised, and contexts like today, this week, on a repo, or across the team. It tells the agent when to prefer this over a per-person activity breakdown and names get-merged-pull-requests as the alternative for merges, adding that the two should never be presented as reconciling.

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

get-deployments-by-person-toolGet Deployments By Person ToolA
Read-onlyIdempotent
Inspect

List who triggered production deployments over a recent window (default 7 days) and how many each shipped, with failed deploys surfaced per person — e.g. "Bob Marley: 5 deploys (3 failed)". Use this to answer "who has deployed to production this week and how much". Returns each person's deploy count, failed count, and the repositories they shipped to, sorted by deploy count, plus team totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow many days back to count production deploys. Defaults to 7 (this week), clamped to 1–90.

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYesLookback window in days.
teamYesTeam name.
sinceYesISO-8601 start of the window.
peopleYesPer-person breakdown: deploy_count, failed_count, and repositories, sorted by deploy_count.
environmentYesDeployment environment counted (production).
total_failedYesTotal failed production deploys in the window.
total_deploysYesTotal production deploys across the team in the window.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, covering the safety profile. The description adds the default window (7 days) and that failed deploys are surfaced per person plus sorting, but doesn't discuss rate limits or return format details. Adequate 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.

Conciseness4/5

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

Front-loads the core purpose and then gives an example and usage question. Slightly verbose with the example and last sentence, but every sentence adds value.

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 there is an output schema, the description doesn't need to detail return values, but it still summarizes what is returned (deploy count, failed count, repositories, team totals). For a single-parameter read-only tool with annotations and output schema, this is nearly 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 description coverage is 100%, so the schema already documents the 'days' parameter including its default and clamping. The description repeats the default (7 days) but adds no new syntax or format details beyond the schema.

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?

States a specific verb (list), resource (production deployments by person), and scope (recent window). It distinguishes itself from siblings like get-dora-metrics-tool and get-person-activity-tool by focusing on who triggered deploys and failure counts, with a concrete example output.

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 provides the question it answers ('who has deployed to production this week and how much'), giving clear usage context. No explicit when-not-to-use guidance or named alternatives, so it falls 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-dora-metrics-toolGet Dora Metrics ToolB
Read-onlyIdempotent
Inspect

Get DORA (DevOps Research and Assessment) metrics for the authenticated user's team. Returns deployment frequency, lead time for changes, change failure rate, and mean time to recovery with period-over-period comparison and performance categories (Elite/High/Medium/Low).

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoReporting period. Defaults to rolling_30d.rolling_30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
periodYesHuman-readable period label.
metricsYesDORA metrics keyed by metric name.
overall_performanceYesOverall DORA performance rating (Elite/High/Medium/Low).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that results include period-over-period comparison and Elite/High/Medium/Low categorizations, which is useful context, but it discloses nothing about auth requirements, rate limits, or data freshness beyond the output content.

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

Conciseness4/5

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

Two tight sentences that front-load the purpose and then enumerate the returned metrics; nothing is padded. Slightly dense in the second sentence but well organized.

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 an output schema present, the description needn't explain return values, and annotations cover read-only/idempotent behavior. Scope and metric coverage are stated; only cross-tool routing guidance is absent.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'period' parameter already documents its enum and default. The description contributes no additional meaning about period selection or how it affects the comparison windows, 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 (Get) and a well-defined resource (DORA metrics) scoped to the authenticated user's team, and enumerates the four metrics returned. The purpose is unmistakable, but the description makes no explicit contrast against siblings like get-pull-request-metrics-tool or get-team-overview-tool, so an agent gets no routing signal beyond the name.

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 and no mention of alternatives; the only scope hint is 'authenticated user's team'. Given several sibling metrics tools, the description leaves all selection reasoning to the agent.

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

get-guidance-drift-toolGet Guidance Drift ToolA
Read-onlyIdempotent
Inspect

Has this repo's agent guidance file drifted from the repo it describes? A CLAUDE.md or AGENTS.md that lists the directories under app/Domain (or any other path) is making a claim that decays silently — the list was right when written, the code kept moving, and nothing fails when the two diverge. Agents read the stale list as truth, so a rotted guidance file is worse than none: it teaches the wrong shape of the codebase with full confidence.

For each connected repository this returns the guidance file found, when it last changed, and every directory whose listing has gone stale — how many entries the file documents, how many are actually there now, and examples of what is missing. Call it before trusting a guidance file, when onboarding an agent onto an unfamiliar repo, or when deciding whether a hand-maintained inventory should be replaced by a get-team-context call.

Only ENUMERATIONS are flagged. A file that mentions a path in passing is referencing it, not claiming an inventory, and is never reported. A directory is flagged only when the file already names several of its children (so it is holding a list) and is missing several more. Repos with no guidance file, BitBucket repos, and unreadable repos report insufficient_data — never a false drift. Archived repositories are skipped. Use get-repo-readiness for whether a guidance file exists at all; this tool judges whether the one that exists is still true.

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoryNoOptional "owner/name" (or bare repo name) to assess a single repository instead of every repository on the team.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
rollupYesTeam rollup: repositories_assessed, repositories_drifted, and undocumented_entries (the total number of directory entries no guidance file mentions).
repositoriesYesPer-repository drift: repository slug, guidance_file (CLAUDE.md/AGENTS.md), last_updated date and days_since_update, status (drifted|current|insufficient_data), drifted_directories (path, documented, present, undocumented, examples), and a recommendation. Most-drifted repositories first.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds substantial behavioral context: only enumerations are flagged (passing mentions never reported), insufficient_data is returned for missing/BitBucket/unreadable repos, archived repos are skipped, and false drift is avoided. It stops short of disclosing return format or performance characteristics, but the safety and edge-case behavior is rich.

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 lead sentence is a direct question that front-loads purpose, and each subsequent paragraph adds distinct value (rationale, return shape, scope rules, sibling differentiation). It is longer than strictly necessary, with some reinforcement of the 'rotted guidance is worse than none' point, but no genuinely wasted sentences.

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?

An output schema exists, so return values need no explanation. Given the high compleixity of a drift-analysis tool, the description still covers scope exclusions, the enumeration-only rule, and the empty-file result, leaving nothing an agent needs in order to invoke it correctly.

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 100% and the single optional 'repository' parameter is fully documented there, so the baseline applies. The description adds only the default scope ('for each connected repository'), which mildly reinforces the all-repos default but does not extend syntax or meaning beyond the schema.

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?

States a precise verb+resource: judging whether a repo's agent guidance file has drifted from the code it describes, with a concrete example (directories under app/Domain). It explicitly distinguishes itself from the nearest sibling, get-repo-readiness, so an agent can route between the two without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit trigger conditions — before trusting a guidance file, when onboarding an agent, or when deciding to replace a hand-maintained inventory — and names both the alternative (get-repo-readiness) and the alternative call (get-team-context) with the condition that selects each.

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

get-icp-toolGet Icp ToolA
Read-onlyIdempotent
Inspect

Internal Coderbuds staff only. Who Coderbuds sells to and what an opener is allowed to say — the rules behind the Who it is for tab of /admin/prospects, as they stand today.

Call this before writing anything to a prospect, alongside get-prospect-worklist. The worklist says who to write to; this says what the message has to be. Rules change as outbound teaches us something, so read them rather than working from a version you saw in a document — that gap is exactly how outbound came to be sent on a wedge that had already been measured and dropped.

Seven groups come back: who it is for, what the opener does, what makes a row worth sourcing, what closes a row, what we can say, how it may be sent, and what to do when somebody writes back.

Three things to read carefully:

  • retired carries wedges that were tried and abandoned, each with the reason. Do not re-propose one of these in different words. The reason is the finding.

  • evidence: null marks a rule nobody has grounded in anything. Follow it, but weigh it as somebody's opinion rather than a measurement.

  • proposed are suggestions waiting on a person. They are not binding — do not draft against them, and do not propose the same thing twice.

Use propose-icp-rule when outbound teaches you something this list does not say.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so safety is known; the description adds real depth beyond that — an access restriction ('Internal Coderbuds staff only'), a warning that rules drift and must be re-read rather than trusted from old documents, and semantics for the returned groups (retired = abandoned wedges, evidence:null = ungrounded, proposed = non-binding). It doesn't specify output shape beyond the seven groups, but for a no-param read tool that is a minor gap.

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

Conciseness4/5

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

Front-loaded with access scope and purpose, then the primary usage directive, then a bulleted reading guide for the three tricky fields. It is on the longer side and carries a bit of narrative color about past outbound mistakes, but nearly every line maps to a decision the agent must make when calling.

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 carries the return-value burden and does so: it enumerates the seven returned groups and explains the meaning of retired, evidence:null, and proposed. Combined with the access restriction and the before-writing directive, an agent has everything needed to call it correctly.

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 no parameters (0 params, empty schema), so there is no parameter semantics to describe and the baseline is 4. Nothing in the description is needed to compensate for a schema gap.

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?

States a specific resource (the ICP / 'who it is for' rules behind /admin/prospects) and what it governs ('what an opener is allowed to say'), with a clear verb of retrieval ('as they stand today'). It also differentiates itself from siblings by naming get-prospect-worklist and propose-icp-rule, so an agent can place it without opening the schema.

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

Usage Guidelines5/5

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

Explicit guidance: 'Call this before writing anything to a prospect, alongside get-prospect-worklist', clarifying the worklist says who to write to while this says what the message must be. It names the alternative for the complementary case ('Use propose-icp-rule when outbound teaches you something this list does not say'), so both when-to-use and when-not are covered.

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

get-mcp-adoption-toolGet Mcp Adoption ToolA
Read-onlyIdempotent
Inspect

Who on the team is actually using the Coderbuds MCP. Every MCP tool call is recorded per member, so this reports adoption over a recent window (default 30 days): total invocations, per-member usage with last-used time and favourite tool, per-tool call counts, and — the nudge list — login members who have never connected the MCP at all. The denominator is who could plausibly connect one today — a login member (only they can mint API tokens) who is still shipping code. Tracked contributors cannot connect, deactivated or long-inactive members have left, and someone with several linked identities counts once. Use when asked "who is using the MCP", "is the team on the MCP yet", or to find who still needs the setup instructions.

A call is attributed to the team it was about — the repository slug on it, or the ?team= binding on the connection — not to whichever team the web switcher last landed on, so a member working across several teams shows up under the one they were working in.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow many days back to summarize usage. Defaults to 30, clamped between 1 and 90.
repositoryNoOptional "owner/name" slug (from `git remote get-url origin`) of the repository you are working in — binds the session to the owning team when you belong to several.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
totalsYesinvocations, members_using (distinct people in window), connectable_members (login members still shipping code, one per person — the denominator), tools_used.
by_toolYesPer tool: tool, invocations, last_used_at. Sorted by usage.
by_memberYesPer person: user_id, name, invocations, last_used_at, top_tool. Sorted by usage.
lookback_daysYesUsage window in days.
never_connected_membersYesCurrently active login members with no MCP call on record ever — who still needs the setup instructions.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent), and the description adds genuinely non-obvious behavior: the denominator rules (only login members still shipping code), how linked identities are deduplicated, and that calls are attributed by repository slug or ?team= binding rather than the web switcher's last team. That attribution note materially affects result interpretation and is not derivable from schema or annotations.

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?

Front-loaded with the purpose and the report contents, then usage triggers, then edge-case semantics. Slightly long and the closing paragraph on call attribution is dense, but every sentence carries substantive information rather than filler.

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?

An output schema exists so return shape needn't be described, yet the description still enumerates what is reported, sets the default window, defines the population counted, and explains attribution — everything an agent needs to call and interpret this correctly.

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 100%, so both params are already documented, and the description restates the 30-day default and 1–90 clamp. It adds value by explaining what the repository param actually does semantically — binding the session to the owning team — which is more than the schema's mechanical wording.

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?

States a specific verb and resource — reporting MCP adoption per team member — and is clearly differentiable from the adjacent get-ai-adoption-tool by its explicit MCP focus. The opening sentence 'Who on the team is actually using the Coderbuds MCP' plus the enumerated contents (invocations, per-member usage, per-tool counts, nudge list) make the output scope 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?

Gives explicit trigger phrasings ('who is using the MCP', 'is the team on the MCP yet', finding who needs setup instructions) plus eligibility rules for who counts. It does not explicitly name a sibling alternative such as get-ai-adoption-tool, so the agent must infer the boundary, but the when-to-use guidance is clear and concrete.

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

get-merged-pull-requests-toolGet Merged Pull Requests ToolA
Read-onlyIdempotent
Inspect

Count merged pull requests over a recent window (default 30 days), with a human-vs-bot split so you can answer "including dependabot" and "excluding dependabot" from the same result. Returns the total plus per-repository and per-author breakdowns. Optionally scope to specific "owner/name" repositories (e.g. patchstack/saas). Use this when the user asks how many PRs were merged, shipped, or closed on a repo or across the team — including bot/dependabot PRs.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days. Defaults to 30.
include_botsNoWhether to include bot/dependabot PRs in the totals. Defaults to true; the result always reports the human-vs-bot split regardless.
repositoriesNoOptional list of "owner/name" repository slugs to scope to (e.g. ["patchstack/saas"]). A bare repo name like "saas" also matches. Omit to include every repository on the team.

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYesLook-back window used, in days.
teamYesTeam name.
sinceYesISO-8601 start of the window.
untilYesISO-8601 end of the window.
authorsYesPer-author merged counts with an is_bot flag.
bot_mergedYesMerged PRs authored by bots (any "[bot]" login).
human_mergedYesMerged PRs authored by humans.
repositoriesYesRepository slugs included in the result.
total_mergedYesTotal merged PRs in the window (respects include_bots).
dependabot_mergedYesMerged PRs authored by dependabot specifically.
repositories_breakdownYesPer-repository totals with human/bot split.
unmatched_repositoriesYesRequested slugs that did not match a team repository.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds real behavioral context beyond them: the result always carries a human-vs-bot split regardless of include_bots, and it returns total plus per-repository and per-author breakdowns. It doesn't mention pagination or window caps, but with annotations carrying the safety profile this is a strong addition.

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?

Front-loads the core purpose and the key output guarantee in the first sentence, then the trigger condition last. It is somewhat long for three optional parameters and the example slug is slightly redundant with the schema, but no sentence is wasted.

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?

An output schema exists, so return values needn't be explained, yet the description usefully summarizes the shape (total, per-repo, per-author). Combined with annotations covering read-only/idempotent behavior, an agent has enough to call it correctly; only alternative-tool routing is missing.

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 three parameters are already documented. The description largely restates structured facts ('default 30 days', the include_bots split behavior, 'owner/name' scoping) rather than adding new syntax or edge-case detail, so the baseline 3 applies.

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?

States a specific verb and resource ('Count merged pull requests over a recent window') plus the two key dimensions it reports (human-vs-bot split, per-repo/per-author breakdowns). An agent can distinguish this from siblings like get-open-pull-requests-tool without opening either schema.

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 supplies the trigger phrasing: 'Use this when the user asks how many PRs were merged, shipped, or closed on a repo or across the team — including bot/dependabot PRs.' That is clear context for invocation, but it never names an alternative sibling (e.g. get-pull-request-metrics-tool) or states when-not to use it, so it falls 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-my-insights-toolGet My Insights ToolA
Read-onlyIdempotent
Inspect

Get active insights for the authenticated user across all their teams. Optionally filter by tab (activity, performance, collaboration, satisfaction) or only show unseen insights.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoFilter insights by tab category.
limitNoMaximum number of insights to return (1-25).
unseen_onlyNoOnly return insights the user has not yet seen.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that insights are 'active' and span all teams, but does not clarify what 'active' means (unseen? unresolved?), the return shape, or ordering/pagination.

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

Conciseness4/5

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

Two compact sentences with the core purpose front-loaded and the filters following. No wasted filler, though there is no structural signposting beyond the single optional clause.

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 read-only, zero-required-parameter list tool with a fully documented schema and no output schema, the description covers scope and filtering adequately. The main residual gap is the meaning of 'active' insights and any ordering/limit interaction guidance.

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 three parameters (tab with enum, limit 1-25, unseen_only) are already documented in the schema. The description merely restates the enum values and the unseen filter, adding no syntax or default details beyond the structured fields.

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'), resource ('active insights'), and scope ('for the authenticated user across all their teams'). The 'my/user-scoped' framing implicitly separates it from team-level siblings like get-team-insight-summary-tool, but 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 Guidelines3/5

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

The description notes two optional filters (tab category and unseen_only), which implies when those knobs are useful, but it gives no guidance on when to prefer this tool over alternatives such as get-team-insight-summary-tool or get-my-status-tool, and no exclusions.

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

get-my-status-toolGet My Status ToolA
Read-onlyIdempotent
Inspect

Your personal cross-repo status: your open PRs and what blocks each (awaiting review, changes requested, failing checks, draft, or ready to merge), reviews you could unblock (other people's oldest PRs waiting on a reviewer, bots excluded), your merged-but-undeployed work with hours waiting, and what you shipped recently — standup prep and morning brief in one call. Lead with the headline when relaying this result.

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoryNoOptional "owner/name" slug (from `git remote get-url origin`) or bare repo name of the repository you are working in — binds the session to the owning team when you belong to several.
window_daysNoHow many days back to look for your recently merged PRs (default 2 — since the last standup). Clamped to 1-30.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
userYesThe user this status belongs to.
headlineYesOne-line personal summary to lead with when relaying this result.
my_open_prsYesYour open PRs, oldest first: repository, number, title, url, blocker (awaiting_review, changes_requested, failing_checks, draft, or ready_to_merge), days_open.
window_daysYesRecently-merged lookback window in days.
my_undeployedYesYour merged PRs not yet shipped to production, longest-waiting first: repository, number, title, merged_at, hours_waiting.
recently_mergedYesYour PRs merged within the window, newest first: repository, number, title, merged_at — the "what did I do" standup line.
reviews_to_giveYesOther people's open PRs waiting on a reviewer, oldest first (capped at 5, bots excluded): repository, number, title, url, author, days_open — the queue you can unblock.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover readOnly and idempotent, so safety is already handled, but the description adds real behavioral detail beyond them: bots are excluded from the reviewer queue, recent merges default to a 2-day window, and the result should be relayed starting from the `headline` field. That is useful, non-obvious context for interpreting and presenting the output.

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 core noun phrase is front-loaded and the long parenthetical enumerates exactly what counts as each blocker state, which is high-value rather than filler. The final directive sentence is terse and actionable. It is dense but nearly every clause earns its place.

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?

An output schema exists, so return shape need not be re-explained, and annotations cover the safety profile. The description still supplies the section breakdown and the 'lead with headline' presentation rule, leaving nothing an agent needs in order to call and relay this tool correctly.

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 are fully documented in structured data, including the 1-30 clamp and the default. The description does not add any parameter-level meaning (no mention of repository binding or window sizing), so this sits at the baseline 3.

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?

States a specific resource and scope ('Your personal cross-repo status') and then enumerates the exact sections returned: your open PRs and blockers, reviews you could unblock, merged-but-undeployed work, and recent ships. It is clearly distinguishable from siblings like get-open-pull-requests-tool or get-merged-pull-requests-tool because it is the aggregated personal composite rather than a single-list query.

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?

Gives an explicit use context — 'standup prep and morning brief in one call' — which tells the agent when this tool is the right pick over narrower siblings. It stops short of naming alternatives or stating when not to use it, so it earns a 4 rather than a 5.

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

get-open-pull-requests-toolGet Open Pull Requests ToolA
Read-onlyIdempotent
Inspect

List the team's open pull requests grouped by author, with the signal that shows what is blocking each one: whether it is awaiting a reviewer, has changes requested, is approved and ready to merge, is still a draft, is failing CI checks, or is simply too large for anyone to review. Optionally scope to specific "owner/name" repositories (e.g. patchstack/hub). Use this to nudge people to merge — lead with the headline. Human authors include their oldest open PRs with age; bot authors (dependabot etc.) are collapsed into count-only summaries so a dependency backlog cannot drown out the PRs a person should act on.

total_oversized and the per-PR oversized flag mark pull requests past the hard review limits — over 100 files, over 5,000 added or deleted lines, or over 8,000 changed in total. These are the ones a reviewer cannot pick up at all, so they are named in the headline and sorted to the front of their author's list. Report them as blocked on being split, not as blocked on a reviewer. The threshold is deliberately the hard limit rather than the team's line target: an open PR gives no file list, so the test/docs discount assess-change-fit applies to a numstat cannot be applied here, and judging against the target would flag changes that check would have passed. size.category is unknown when the counts were never recorded — that is missing data, not a small pull request; do not describe it as small.

Set include_bot_details when you are working the dependency queue itself — merging dependabot PRs, chasing failing bumps — and each bot author gains the PR numbers, repositories, titles and URLs you need to act, ordered by what can be closed out first: ready to merge, then failing checks, then oldest.

Check status_freshness before quoting counts: it flags open PRs whose local status may be stale, and repositories that have not synced pull requests recently — whose PRs may be missing from these counts altogether. Archived (decommissioned) repositories are excluded — this is a review queue, and their PRs are nobody's to review.

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoriesNoOptional list of "owner/name" repository slugs to scope to (e.g. ["patchstack/hub", "patchstack/saas"]). Omit to include every active repository on the team.
include_bot_detailsNoInclude the individual PRs for bot authors (dependabot etc.) instead of counts alone — numbers, repositories, titles and URLs, ordered ready-to-merge first, then failing checks, then oldest. Set this when you are working the dependency queue itself; leave it off when summarising a review queue for people.

Output Schema

ParametersJSON Schema
NameRequiredDescription
botsYesPer bot author: total, awaiting_review, ready_to_merge, failing_checks — plus pull_requests (capped, actionable first) and more_not_shown when include_bot_details was set.
teamYesTeam name.
authorsYesPer human author: totals plus awaiting_review, changes_requested, ready_to_merge, draft, failing_checks, oversized, their open PRs (capped, oversized first then oldest, each with opened_at/days_open, an oversized flag and a size block of additions/deletions/changed_files/category), and more_not_shown.
bot_openYesOpen PRs authored by bots (dependabot etc.).
headlineYesOne-line human/bot summary to lead with when relaying this result.
human_openYesOpen PRs authored by people.
total_openYesTotal open PRs across the included repositories, bots included.
repositoriesYesRepository slugs included in the result.
total_oversizedYesHuman-authored open PRs past the hard review limits (over 100 files, over 5,000 added or deleted lines, or over 8,000 changed). Blocked on being split, not on a reviewer.
status_freshnessYesHow wrong these counts could be, in both directions. possibly_stale counts open PRs with no status sync or activity in over 30 days (some may already be closed, so counts are an upper bound); repositories_awaiting_sync names active repositories whose PRs have not synced in that time (PRs there may be missing, so counts are a lower bound). note spells out whichever applies, and is null only when neither does.
total_awaiting_reviewYesTotal open PRs blocking on a reviewer, bots included.
unmatched_repositoriesYesRequested slugs that did not match an active team repository — either not tracked, or archived.

TDQS

A4.6/5.0
Behavior5/5

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

Goes far beyond the readOnlyHint/idempotentHint annotations: bot authors are collapsed to counts while humans keep oldest PRs with age, archived repos are excluded, oversized PRs are sorted to front and framed as 'blocked on being split', size.category=unknown means missing data not small, and status_freshness flags stale/missing PRs. These are non-obvious behaviors an agent could not infer from 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?

Purpose and the headline guidance are front-loaded, and the paragraphs are organized by concern (oversized rules, bot details, freshness). It is dense and somewhat long for a two-parameter read tool, but nearly every sentence carries actionable detail rather than filler.

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?

An output schema exists, so return-shape explanation is unnecessary, and the description still ties its guidance to specific output fields (headline, total_oversized, size.category, status_freshness). Nothing an agent needs 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.

Parameters4/5

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 adds real value: it explains the rationale for repositories scoping (with owner/name example) and the ordering semantics behind include_bot_details (ready-to-merge, then failing checks, then oldest). This exceeds what the schema text alone conveys.

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?

States a specific verb+resource (list open pull requests grouped by author) plus the blocking signal it surfaces, and distinguishes itself from get-merged-pull-requests-tool by scope. An agent can route on this without opening the schema.

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 scopes the tool's purpose ('use this to nudge people to merge — lead with the headline') and gives a clear condition for the include_bot_details switch (working the dependency queue vs summarising a review queue). It stops short of naming a sibling alternative for other query shapes, so it is strong but not textbook when/when-not.

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

get-person-activity-toolGet Person Activity ToolA
Read-onlyIdempotent
Inspect

What one person on the team has actually been doing, over a recent window (default 8 weeks). Answers "is Dave still shipping?" or "what has Sam been working on?" with three counts read together rather than one in isolation: pull requests opened and merged, reviews given to other people, and production deploys triggered — plus a week-by-week rollup, the busiest days, and the longest quiet run.

Lead with the headline. A pull request count on its own supports the wrong conclusion: someone who opened 5 pull requests and gave 70 reviews is carrying the team's review load, not coasting. The headline says which of those it is.

Identify the person by name or provider login ("dave", "Dave Smith", "@dsmith"). When the reference is ambiguous or unknown the tool returns the team's member names in candidates instead of guessing — ask which one rather than reporting activity for the wrong person.

not_captured lists what this data cannot see (commits, review comment volume, ticket assignment, anything outside git). Repeat those limits when the answer is "this person looks quiet" — never present an absence of pull requests as an absence of work.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow many days back to summarize. Defaults to 56 (8 weeks), clamped to 7–84. The 84-day ceiling is where review history stops being complete.
personYesWho to look up, by name or provider login — "dave", "Dave Smith" or "@dsmith". Ambiguous references return candidates rather than a guess.
repositoryNoOptional "owner/name" slug (from `git remote get-url origin`) of the repository you are working in — binds the session to the owning team when you belong to several.

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYesWindow length in days.
personYesResolved person name.
totalsYespull_requests_opened, pull_requests_merged, reviews_given, deploys, active_days.
weeklyYesPer-week rollup: week_starting, pull_requests_opened, reviews_given, deploys.
end_dateYesLast day of the window (YYYY-MM-DD, UTC).
headlineYesThe sentence to lead with — the three counts and what they mean read together.
start_dateYesFirst day of the window (YYYY-MM-DD, UTC).
busiest_daysYesUp to five highest-activity days with their per-row counts.
not_capturedYesWhat this data cannot see. Repeat these limits when reporting that someone looks quiet.
identities_collapsedYesHow many linked provider identities were merged into this person.
longest_quiet_run_daysYesLongest unbroken run of days with no recorded activity.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover only readOnly/idempotent, but the description adds substantial behavioral context: the default 8-week window, the ambiguity-to-candidates fallback, the interpretation warning that a lone PR count misleads, and the not_captured limitations. This is exactly the kind of disclosure annotations cannot carry.

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?

It is longer than average but front-loaded and nearly every sentence carries decision-relevant content (lead with headline, candidate handling, not_captured caveats). The parenthetical examples add some length without new routing value, keeping it just under maximum.

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 an output schema present, the description need not document return fields, yet it still orients the agent to key fields (headline, candidates, not_captured). For a read-only analytics tool this is complete enough to call and interpret correctly.

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

Parameters4/5

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

Schema coverage is already 100%, so baseline is 3, but the description reinforces identifier semantics ('dave', 'Dave Smith', '@dsmith') and explains why repository binds a session to the owning team. The days window rationale is left to the schema, so it does not fully exceed the baseline.

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?

The description states a specific verb and resource ('what one person on the team has actually been doing, over a recent window') and even gives the concrete questions it answers. It distinguishes itself from siblings like get-agent-activity-tool and get-my-insights-tool by scoping to one named teammate over a recent window with three read-together counts.

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

Usage Guidelines4/5

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

It gives clear triggering questions ('is Dave still shipping?'), the accepted identifier formats, and explicitly tells the agent what to do on ambiguity (ask about candidates rather than guessing). It stops short of naming a sibling alternative or a when-not-to-use condition, so it is strong context without explicit exclusion routing.

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

get-prospect-worklist-toolGet Prospect Worklist ToolA
Read-onlyIdempotent
Inspect

Internal Coderbuds staff only. What to do next about the companies and advisers Coderbuds is approaching — the outbound pipeline behind /admin/prospects.

Five lists, in the order they should be worked:

  • answered — questions you parked that a person has since answered. Work these first: each one carries needs_action_reason (what was asked) and answer (what you were told). Do what the answer says, then clear the pair with update-prospect and answer: null, or the row comes back next run.

  • needs_you — rows parked with a question and still waiting on somebody, oldest first. Do not re-ask a question that is already sitting here.

  • replied — somebody answered and has not been answered back.

  • gone_quiet — written to, no reply, past the quiet threshold. Check times_contacted before drafting: one follow-up on a different angle is the rule, so a row already at max_touches is a row to close, not to write to again.

  • never_contacted — researched and untouched, priority first.

Start every session working this pipeline by calling this. It is the only way to know what is already in flight; without it the obvious move is to write to somebody who was written to on Tuesday.

gate is the one number that can say stop. The first run of outbound is a test: at eight prospects written to, two replies means the pitch works and the list can widen, and fewer means the pitch is wrong rather than the volume. When the verdict is fail, say so and stop drafting — the next move is a different message, not thirty more of the same one.

stage_tests is the definition of done for each stage. Do not move a row to a stage whose test it does not pass.

Read the caveats it returns. Nothing in this list is a qualified lead: each row exists because a dated public signal made it worth a look, and a contact name was read off a profile on that date.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many rows per list. Defaults to 10, capped at 50 — this is a worklist for one session, not an export.
quiet_daysNoHow many days of silence after a send before a prospect counts as gone quiet. Defaults to 5.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds substantial behavior the annotations cannot: the ordering of the five lists, the definition of done via stage_tests, the 'gate' fail verdict that says to stop, the max_touches follow-up rule, and the caveat that no row is a qualified lead. This is exactly the extra context annotations cannot carry.

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?

Front-loaded with staff-only scope and the core action, then structured as a list of five states with their rules. It is somewhat long, but nearly every sentence earns its place by describing a distinct list or rule; a couple of the caveat sentences could be tightened.

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?

For a no-required-parameter read tool with a single primary caller, the description covers the return structure (five named lists), the ordering, the key fields (needs_action_reason, answer, times_contacted, gate, stage_tests), and the caveats. Nothing an agent needs to use it correctly 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 coverage is 100%, so the schema documents both parameters with meaning, but the description reinforces the cap rationale ('a worklist for one session, not an export') and the quiet_days concept ties to the gone_quiet list. It adds conceptual context without full syntax detail, so a 4 rather than the 5 that extra syntax would merit.

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?

States a specific verb and resource: returning the outbound prospect worklist behind /admin/prospects, structured as five named lists in working order. It is clearly distinguished from siblings like update-prospect or record-prospect-outreach, which mutate individual rows rather than read the whole pipeline.

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

Usage Guidelines5/5

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

Explicit when-to-use: 'Start every session working this pipeline by calling this,' and it names a failure mode ('without it the obvious move is to write to somebody who was written to on Tuesday'). It also routes to a specific alternative action ('clear the pair with update-prospect'), giving direct next-step guidance.

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

get-pull-request-metrics-toolGet Pull Request Metrics ToolB
Read-onlyIdempotent
Inspect

Get pull request activity metrics for the authenticated user's team. Returns PR count, code review count, average quality score, active contributors, and PR size distribution with period-over-period comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoReporting period. Defaults to rolling_30d.rolling_30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
periodYesHuman-readable period label.
qualityYesCode quality score metrics with deltas.
activityYesPR and review activity metrics with deltas.
size_distributionYesPR size distribution counts (Tiny, Small, Medium, etc.).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that results include period-over-period comparison, which is genuine behavioral context, but says nothing about which team is resolved, freshness of the data, or any rate/permission constraints.

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

Conciseness4/5

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

Two tight sentences with the scope front-loaded and no filler. The return-value enumeration slightly duplicates what the existing output schema already conveys, so it is not maximally economical, but nothing is wasted.

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?

An output schema exists, so return values needn't be spelled out, and the sole parameter is fully documented. What remains missing is disambiguation from sibling PR tools and any statement of whose data ('team') is actually resolved, which keeps it short of a 5.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'period' parameter is fully documented with its enum and default. The description adds only the indirect hint of 'period-over-period comparison'; it does not explain period semantics (e.g., current vs previous windows), 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 pull request activity metrics') and scopes it to the authenticated user's team, then enumerates the metric categories returned. It does not distinguish itself from closely related siblings such as get-merged-pull-requests-tool, get-open-pull-requests-tool, or get-dora-metrics-tool, so an agent cannot cleanly separate it from them by description 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?

There is no when-to-use guidance and no named alternative. With ~28 siblings in this family, including several other pull-request metric tools, the agent is left to infer that this is the aggregate-metrics option rather than the list-based ones.

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

get-repo-readiness-toolGet Repo Readiness ToolA
Read-onlyIdempotent
Inspect

Is this repo ready for agents? Coderbuds Standards opinion #3 judges the repository a coding agent is dropped into — not the change it makes. For each connected repository it returns pass / fail / insufficient_data on: deploy automation configured, deployed recently, PR size discipline (share of merged PRs inside the Coderbuds line standard), review coverage, agent guidance present (CLAUDE.md / AGENTS.md), CI config present, a tests directory present, and whether the fit check is actually wired in. Each failing check comes with a plain-language gap and recommendation, plus a team rollup of how many repos are ready and the most common gaps.

Insufficient-data checks are always EXCLUDED, never counted against a repo — a repo is only "not ready" when a check genuinely fails. When the team has opted out of Coderbuds Standards the opinionated checks report insufficient_data. BitBucket repos report the content checks as insufficient_data (the API path is GitHub-only). Archived repositories are skipped, and dormant ones (nothing merged in the window, flagged dormant) never fail the wiring/deploy-recency checks and are excluded from the rollup's top_gaps — the headline reflects the repos actually shipping. Call this to find what is holding a repo back before pointing an agent at it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
rollupYesTeam rollup: repositories_assessed, repositories_ready, dormant_repositories, and top_gaps (the checks failing across the most ACTIVE repositories — dormant repos are excluded so idle test repos cannot bury the gaps that matter).
window_daysYesLook-back window (days) for the deploy and PR checks.
repositoriesYesPer-repository readiness: repository slug, provider, ready flag, dormant flag (nothing merged in the window), each check as pass|fail|insufficient_data, and ranked gaps with recommendations. Active not-ready repos are listed first; archived repos are omitted.
standards_enabledYesWhether Coderbuds Standards is on for this team; when off, the opinionated checks report insufficient_data.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, it discloses rich behavior: insufficient_data is always excluded and never counted against a repo, opt-out turns opinionated checks to insufficient_data, BitBucket repos get insufficient_data on content checks, archived repos are skipped, and dormant repos are exempted from wiring/deploy-recency checks and the rollup top_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?

It front-loads the core question and the key differentiator before the detail, and the edge-case sentences each carry distinct behavioral rules. It is dense and somewhat long, but for a tool with this many exceptions every sentence is doing work.

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?

For a complex zero-param tool with an output schema, the description covers what is judged, how results are classified (pass/fail/insufficient_data), what accompanies failures (plain-language gap and recommendation), the team rollup, and all the edge-case handling — leaving no significant gap for an agent to call it correctly.

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 no parameters, so the 4 baseline applies. The description adds contextual scope (per connected repository, plus a team rollup) but there are no parameter semantics to elaborate.

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?

The description states a specific question it answers ('Is this repo ready for agents?') and enumerates exactly what it judges: deploy automation, deploy recency, PR size discipline, review coverage, agent guidance, CI config, tests directory, and fit-check wiring. It explicitly distinguishes itself from the change-level sibling by noting it judges 'the repository a coding agent is dropped into — not the change it makes.'

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

Usage Guidelines4/5

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

It gives a clear use context ('Call this to find what is holding a repo back before pointing an agent at it') and implicitly contrasts with change-fit assessment, but it never names the sibling tool (assess-change-fit-tool) or states explicit exclusions for when not to call it.

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

get-signup-funnel-toolGet Signup Funnel ToolA
Read-onlyIdempotent
Inspect

Internal Coderbuds staff only. The whole signup and conversion funnel across every account, matching the /admin/activity/conversion dashboard.

Two funnels joined at "an account exists":

  • Front door — visitors sent to GitHub or BitBucket to authorize, how many came back, how many became an account, and how many were lost on the provider's own authorize screen. Broken down by provider and by campaign source. This is the only stage the account funnel structurally cannot see.

  • Activation — for accounts created in the window: what share reached each milestone (repository, GitHub App, first PR, first review, deploy tracking, deploy observed, Slack, MCP, paid) and the median days to get there; where open trials are stuck, counted by next step; the trial-state split; trials lapsing within a week; and per-account journeys with owner, milestone dates, next step and trial state.

Use it to ask why signups stall, which step loses the most people, whether a change to onboarding moved anything, or who is worth an email this week. Read the caveats it returns: rates over a tiny sample are flagged unreliable, three milestones are reported without a median because nothing records when they happened, and the per-account list is capped while every rate beside it is over the whole cohort.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow far back the cohort reaches. 0 means every account since launch. Defaults to 365 — shorter windows are two or three signups and every rate reads 0%, 50% or 100%.
journey_limitNoHow many individual account journeys to list, newest first. Defaults to 50, capped at 200, and 0 omits the list entirely. Bounds only that list: every rate, blocker and median is over the whole cohort regardless.

Output Schema

ParametersJSON Schema
NameRequiredDescription
windowYesThe window in words.
front_doorYesProvider authorize step: attempts (sent to the provider), returned, registered (became an account), authenticated (came back as an existing user), abandoned (never returned — the authorize screen was declined or closed), failed; return_rate and new_account_rate; rates_are_reliable, false when there are too few attempts to divide by; by_provider; by_source with campaign source, direct traffic named.
window_daysYesThe window applied, in days. 0 means since launch.
signup_conversionYesActivation funnel: cohort_size and cohort_definition; stages, each with count, rate, not_reached and median_days (null where nothing records when the milestone happened — deploy tracking, GitHub App, Slack); blockers, open accounts grouped by next step and split on-trial versus trial-expired; trial_states; expiring_soon, trials lapsing within a week, soonest first; recent_teams, per-account journeys with owner, milestone timestamps, next step, trial state and where an owner went if they now work in another team.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, yet the description adds substantial behavior beyond them: the staff-only access constraint, three milestones reported without medians, unreliable rates flagged on tiny samples, and a capped per-account list whose surrounding rates still span the whole cohort. These are exactly the caveats an agent needs.

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 access restriction is front-loaded and the two funnels are cleanly segmented with bullets. It is a dense paragraph of its length but nearly every clause earns its place by describing a distinct output or caveat; still, some prose could be trimmed without loss.

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?

An output schema already exists, so return values need not be explained; the description instead supplies the interpretive context (funnel stages, cohort window semantics, unreliable-rate caveats) an agent needs to use the results correctly. Nothing material is missing for a two-parameter read-only analytics tool.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters carry good inline docs, so the baseline is 3. The description reinforces the journey_limit cap ('the per-account list is capped while every rate beside it is over the whole cohort') but adds no syntax or format detail beyond the schema.

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?

The description states a specific verb and resource (signup and conversion funnel across every account) and differentiates itself from all siblings, which cover DORA, PRs, adoption, deployments, etc. It even distinguishes itself internally from the account funnel it builds on ('This is the only stage the account funnel structurally cannot see').

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

Usage Guidelines4/5

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

It gives explicit intended questions ('why signups stall, which step loses the most people, whether a change to onboarding moved anything, who is worth an email') and an access restriction (staff only), so the agent knows when to reach for it. However, it names no alternative sibling to use instead in adjacent cases, so it stops short of full when-not guidance.

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

get-team-context-toolGet Team Context ToolA
Read-onlyIdempotent
Inspect

The team's org map: every repository the team ships to, how alive each one is (merged/open PR activity, top contributors, last merge), how each deploys to production, whether each is ready for a coding agent (a compact readiness flag with failing check keys — call get-repo-readiness for the full checks and recommendations), how repos relate (taught links plus shared-contributor signals), and the team's confirmed working conventions. Everything is derived from live shipping data, so it never goes stale like a hand-maintained repo list in an agent rules file.

Pass repository (the repo you are working in) to get a FOCUSED map: that repository's details, the repositories most relevant to it with the reasons they matter, and the rest as names only — the right call at session start in a multi-repo org, instead of pulling the whole atlas. When the map is wrong or incomplete, teach it with link-repositories. For size/review norms, use assess-change-fit.

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoryNoThe repository you are working in, as owner/name (from `git remote get-url origin`) or a bare repo name. Binds the session to the owning team AND focuses the map: you get this repo, the repos most relevant to it (with reasons), and the rest as names only.
window_daysNoActivity window in days for PR/contributor signals. Defaults to 90, clamped to 7–180.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
focusNoPresent in focused mode: the repository the map is scoped to.
linksYesTaught repository relationships (from, to, relation, note) — recorded via link-repositories.
conventionsYesConfirmed team/repo working conventions the team has taught its Coderbuds agents. Focused mode returns only team-wide and focus-repo conventions.
window_daysYesActivity window in days.
repositoriesYesActive repositories with activity level, top contributors, production deploy setup, and a compact agent-readiness verdict (ready flag + failing check keys; use get-repo-readiness for detail). Full map: most active first. Focused map: the focus repository first, then the most relevant repositories, each with `relevance.reasons`.
relationshipsYesRepository pairs the same people ship to, with shared-contributor counts and co_changes (how often one author merged into both within 48h — "ships together in practice", which ranks a pair higher). Pairs taught as unrelated are suppressed.
other_repositoriesNoPresent in focused mode: the remaining active repositories, names only.
archived_repositoriesYesDecommissioned repositories, by name — they exist but no work should land there.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds genuinely useful behavioral context: all data is derived from live shipping data and never goes stale, and the focused-map mode degrades non-relevant repos to names only. It does not describe volume/latency or pagination, but the value-add beyond annotations is real.

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?

Front-loaded with the resource and its contents, then the parameter-driven mode, then alternatives. Dense and mostly earned, though the first paragraph's compound enumeration is long enough to border on overload for a read-only lookup tool.

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?

An output schema exists so return values need not be explained, and annotations cover the safety profile. Given the tool's complexity, the description still covers scope, focused vs. full modes, data freshness, and escalation paths to three sibling tools — nothing an agent needs 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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description goes further by explaining the semantic effect of `repository` — binding the session to the owning team and focusing the map — which is more than a restatement of the schema's type/format note.

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?

The description names a specific artifact (the team's org map) and enumerates its contents: repositories shipped to, liveness signals, deploy paths, readiness flags, repo relationships, and confirmed conventions. It is clearly distinguishable from siblings like get-team-overview or get-repo-readiness, which it explicitly delegates detailed checks to.

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

Usage Guidelines5/5

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

It states the exact selection rule: pass `repository` to get a focused map, described as 'the right call at session start in a multi-repo org, instead of pulling the whole atlas.' It also routes to alternatives by condition — get-repo-readiness for full checks, link-repositories when the map is wrong, and assess-change-fit for size/review norms.

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

get-team-insight-summary-toolGet Team Insight Summary ToolB
Read-onlyIdempotent
Inspect

Get an aggregate summary of active insights for the authenticated user's team, including counts per tab, unseen count, and personal insight count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, so the safety profile is already conveyed. The description adds scope ('authenticated user's team', 'active insights') which tells the agent the data is implicitly scoped with no parameters. Beyond that it doesn't disclose return format, freshness, or how 'active' is defined, so it's adequate 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.

Conciseness4/5

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

A single well-formed sentence that front-loads the resource ('aggregate summary of active insights') and then lists the components of the summary. No wasted words, no redundancy. Slightly dense with the final enumeration, but appropriate for the scope.

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 parameterless read tool with annotations covering safety, the description covers the essentials. However, with no output schema the description must at least gesture at the return shape, and it does ('counts per tab', 'unseen count', 'personal insight count') which is reasonable. What's missing is any differentiation from sibling insight/team summary tools, which matters given the crowded namespace.

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?

There are zero parameters, so there is nothing for the description to document or for the schema to under-cover. Baseline is 4 for a no-param tool. The description correctly indicates the implicit scoping (authenticated user's team) which is the only relevant semantic here.

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+resource: aggregate summary of active insights scoped to the authenticated user's team, and enumerates what it returns (counts per tab, unseen count, personal insight count). It's clear what the tool does, but it never distinguishes itself from close siblings like get-my-insights-tool or get-team-overview-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?

There is no when-to-use guidance, no exclusions, and no reference to alternatives. With siblings such as get-my-insights-tool and get-team-overview-tool that plausibly overlap, the agent is left to guess which tool to invoke. The description only implies context ('team', 'insights') without routing.

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

get-team-overview-toolGet Team Overview ToolA
Read-onlyIdempotent
Inspect

Get a comprehensive team health overview using the SPACE framework. Returns activity metrics (PRs, deployments, contributors), DORA performance ratings, collaboration metrics (code reviews, participation rate), and efficiency metrics (cycle time, PR size). Use this for a single-call snapshot of team engineering health.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoReporting period. Defaults to rolling_30d.rolling_30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
periodYesHuman-readable period label.
activityYesPR, deployment, and contributor counts.
efficiencyYesCycle time and PR size metrics.
performanceYesDORA metrics and overall rating.
collaborationYesCode review and participation metrics.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds the aggregate nature of the call and the metric categories it returns, but no behavioral detail beyond that (e.g. cost, latency, freshness of data). An output schema exists, so return-value disclosure is not needed 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?

Two sentences, no filler, and the core purpose is front-loaded before the usage hint. The middle metric enumeration is dense but earns its place by conveying scope.

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 annotations covering safety, a fully documented single parameter, and an existing output schema, the description supplies enough for an agent to call it correctly. The only shortfall is the absence of explicit sibling disambiguation in a crowded toolset.

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?

There is a single parameter (period) and schema description coverage is 100%, with the enum values and the rolling_30d default fully documented in the schema. The description adds nothing about period semantics, 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 (Get) and resource (team health overview) and enumerates the metric families it aggregates (activity, DORA, collaboration, efficiency) under an explicit SPACE framework. This gives strong cross-domain scope, but it does not explicitly distinguish itself from adjacent siblings such as get-dora-metrics-tool or get-team-insight-summary-tool.

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 'Use this for a single-call snapshot of team engineering health' gives an implied usage context (aggregate view). However, it names no alternative sibling and provides no when-not guidance, so with many overlapping team/insight tools 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.

get-undeployed-pull-requests-toolGet Undeployed Pull Requests ToolA
Read-onlyIdempotent
Inspect

List merged pull requests that have not yet shipped to production, grouped by repository. Returns how long each PR has been waiting and when each repository last deployed — the signal behind deploy-lag and lead-time risk. Use this to spot work that is merged but stuck before deployment. Merged PRs that predate their repository's most recent successful production deploy are assumed shipped (deploys ship the default branch) and reported via assumed_deployed instead of being false-positive "undeployed" entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookback_daysNoHow many days back to consider merged PRs. Defaults to 14, clamped to 1–90.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
headlineYesOne-line summary to lead with when relaying this result.
repositoriesYesPer-repository breakdown: undeployed count, oldest wait, last deploy, and the PRs.
lookback_daysYesLookback window in days.
assumed_deployedYesMerged PRs without an explicit deployment link that predate their repository's most recent successful deploy — counted as shipped, not undeployed.
total_undeployedYesTotal merged-but-undeployed PRs across the team.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description goes well beyond that, disclosing the key behavioral rule that PRs predating the latest successful production deploy are assumed shipped and surfaced via `assumed_deployed` rather than as false-positive undeployed entries, and that deploys ship the default branch. This kind of edge-case handling is exactly the context an agent 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?

Front-loads the core definition and the deploy-lag signal, then closes with the important false-positive caveat. Every sentence earns its place with no filler.

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?

An output schema exists, so return-value explanation is unnecessary. Given the tool's moderate complexity, the description covers purpose, usage context, and the non-obvious deploy-assumption behavior, leaving no meaningful 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 lookback_days is fully documented in the schema (default 14, clamped 1-90). The description adds no parameter detail, so the baseline of 3 applies since the schema does the heavy lifting.

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?

States a specific verb and resource ('List merged pull requests that have not yet shipped to production') plus scope ('grouped by repository'). By filtering on 'not yet shipped to production', it implicitly distinguishes itself from the sibling get-merged-pull-requests-tool and get-open-pull-requests-tool.

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 the use case: 'Use this to spot work that is merged but stuck before deployment.' That gives clear context for when to reach for it. However, it never names an alternative (e.g., use get-merged-pull-requests-tool for all merged PRs), so there is no explicit when-not guidance.

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

get-weekly-summary-toolGet Weekly Summary ToolB
Read-onlyIdempotent
Inspect

Get the latest weekly changelog summary for the authenticated user's team. Includes a TL;DR, executive summary, feature highlights, notable fixes, and team highlights. Use weeks_ago to retrieve older summaries.

ParametersJSON Schema
NameRequiredDescriptionDefault
weeks_agoNoHow many periods back to retrieve (0 = most recent, max 4).

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
tldrYesBrief one-line summary.
periodYesHuman-readable date range.
notable_fixesNoImportant bug fixes.
team_highlightsNoTeam member accomplishments.
executive_summaryNoDetailed executive summary.
period_comparisonNoComparison with previous period.
feature_highlightsNoNotable features shipped.

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 and idempotentHint=true, so the safety profile is covered. The description adds that output covers the user's team specifically and enumerates the summary sections, which is useful context, but says nothing about auth requirements, caching, or freshness beyond 'latest'.

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?

Front-loaded with the core action in the first sentence, followed by content enumeration and a short paging hint. Every sentence carries information, though the content list is somewhat verbose given an output schema already exists.

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 zero-required-param, read-only retrieval tool with a full output schema, the description covers purpose, scope, and the paging parameter adequately. The only shortfall is the absence of sibling differentiation among the several summary/insight tools.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter already documents the 0 = most recent / max 4 semantics. The description only restates that weeks_ago fetches older summaries, adding no syntax or constraint detail beyond the schema, so 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 the latest weekly changelog summary') scoped to the authenticated user's team, which tells an agent exactly what it returns. It does not distinguish itself from similarly named siblings such as get-team-insight-summary-tool or get-my-insights-tool, leaving potential overlap ambiguous.

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

Usage Guidelines2/5

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

The only usage sentence ('Use weeks_ago to retrieve older summaries') describes how to page backwards, not when this tool is the right choice versus alternatives. No when-not conditions or sibling routing are provided.

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

mark-insight-seen-toolMark Insight Seen ToolB
Idempotent
Inspect

Mark a specific insight as seen by the authenticated user. This helps track which insights have been reviewed and reduces noise in future queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
insight_idYesThe ID of the insight to mark as seen.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations only declare idempotentHint=true; the description adds that the mark is per-authenticated-user and that it suppresses noise in future queries, which is useful side-effect context beyond the annotations. It does not disclose permission requirements, whether the mark is reversible, or the response shape.

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 tightly written sentences with the action front-loaded and the rationale second. No wasted words, though the second sentence is soft justification rather than operational detail.

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 one-parameter, idempotent marker with no output schema, the description covers what the tool does and why it exists. The only real gap is the absence of guidance on when to invoke it versus the read-side insight siblings.

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 100% (the single insight_id is fully documented), so the schema already carries the parameter meaning. The description adds nothing beyond restating which insight is targeted, 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.

Purpose4/5

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

States a specific verb (mark), a specific resource (insight), and the resulting state (seen) scoped to the authenticated user. It is clearly distinct from sibling readers like get-my-insights-tool, but it never names or differentiates against 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 prerequisite for what a valid insight might be, and no mention of how this relates to get-my-insights-tool. The clause about reducing noise vaguely implies intent but gives the agent no routing condition.

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

propose-icp-rule-toolPropose Icp Rule ToolAInspect

Internal Coderbuds staff only. Propose a rule about who Coderbuds is for or what an opener may say. It lands on the Who it is for tab of /admin/prospects as a proposal and does not govern anything until a person adopts it — the same division as drafting an opener you cannot send.

Propose when outbound has taught you something the current rules do not say: a reply that contradicts a wedge, a disqualifier that keeps recurring, a signal that keeps producing rows nobody writes to. Do not propose a tidier wording of a rule that already exists, and do not re-propose something in retired — the reason it was retired is a finding, not an oversight.

Write the statement as an instruction the next draft can follow, not an observation. "A job advert naming a coding agent is the signal that reaches a private company" is usable; "AI tooling seems relevant" is not.

evidence is what makes it true — the reply you read, the measurement, the count of rows. Leave it out if you genuinely have none, and it will be shown as ungrounded rather than quietly passing as fact.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich group it belongs to: buyer, wedge, signal, disqualifier, claim or reply.
evidenceNoWhat makes it true — the reply, the measurement, the count. Omit rather than invent.
statementYesThe rule, written as an instruction the next draft can follow.
source_urlNoWhere the evidence can be read back.

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are present, so the description carries the burden, and it does disclose real behavior: the proposal 'does not govern anything until a person adopts it', omission of evidence is surfaced as 'ungrounded', and the tool is internal-staff-only. It stops short of describing return shape or idempotency, so not a 5.

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?

Purpose and the non-governing caveat are front-loaded, and the when/when-not guidance follows. It is on the long side with some prose flourish ('the same division as drafting an opener you cannot send'), but nearly every sentence carries routing or constraint value.

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 and no annotations, the description supplies what an agent needs: the write is a proposal not a live rule, where it appears, who it is for, and how ungrounded evidence is represented. Nothing essential is missing for correct invocation.

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 100%, so the baseline is 3, but the description adds genuine meaning: it explains what evidence is ('the reply you read, the measurement, the count of rows'), the consequence of leaving it out, and gives usable vs. unusable examples for statement. It does not elaborate on the 'kind' enum-like values beyond the schema.

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?

States a specific verb (propose) and resource (a rule about who Coderbuds is for / what an opener may say), plus exactly where it lands ('Who it is for tab of /admin/prospects'). This cleanly separates it from read-side siblings like get-icp-tool and from record-prospect-outreach-tool.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Propose when outbound has taught you something the current rules do not say') with concrete examples, and explicit exclusions ('Do not propose a tidier wording of a rule that already exists', 'do not re-propose something in retired'). It also states the staff-only restriction, so the agent knows who may call it.

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

record-change-fit-decision-toolRecord Change Fit Decision ToolA
Idempotent
Inspect

Say what you did about a assess-change-fit verdict. Call this right after you act on one — especially when you override it.

decision is one of: proceeded (opened it anyway), split (broke it into smaller PRs), trimmed (cut it down to fit), abandoned (dropped the change). Give a reason whenever you proceed: "the severable piece is dead code the change deletes — splitting would make review harder" is the kind of thing the team should be able to read back.

Overriding is a legitimate move and this is how you make it one. An unrecorded override is indistinguishable from never having got round to it, so the standard can only ever be obeyed, never argued with. Recorded overrides are what let Coderbuds notice a threshold that fires too often on changes that turn out fine, and move it. When that happens this response carries a standard_adjustment — say that once to the person, because the standard they are held to just changed, then let it drop.

Once you have recorded it, stop telling the person about it. The record is the report — it is what the team reads back — and repeating the verdict, the line count and the standard in your summary is the same argument made twice to someone who already agreed. A standard that has to be re-explained on every change it fires on is not being upheld, it is being nagged about, and people turn those off.

Defaults to the team's most recent undecided check, so you can usually call it with just decision and reason. Pass check_id (returned by assess-change-fit) to be explicit.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoWhy — required in spirit when proceeding. Max 500 characters, visible to the team.
check_idNoThe check this answers (from assess-change-fit). Defaults to your most recent undecided check.
decisionYesWhat you did: proceeded (opened it anyway), split, trimmed, or abandoned.
repositoryNoOptional "owner/name" repository slug, used only to bind the session to the owning team.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
messageYesHuman-readable confirmation.
verdictYesThe verdict being decided on.
check_idYesThe fit check the decision was recorded against.
decisionYesThe decision recorded.
assessed_atYesWhen that check ran, ISO 8601.
decision_reasonNoThe reason recorded, or null.
standard_adjustmentNoPresent, once, when this override moved the team size standard: adjustment_id, previous_target_lines, target_lines, evidence, message.
proposed_total_changesYesRaw total changed lines that were assessed.
replaced_earlier_decisionYesTrue when this overwrote a decision already on the check.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations carry only idempotentHint, so the description does the heavy lifting: it discloses the default check binding, that the response may carry a `standard_adjustment`, that `reason` is visible to the team, and that the record is permanent and read back by the team. It also sets expectations about what the agent should and should not do after recording.

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?

Front-loaded with the purpose and the key instruction, but the description runs to six paragraphs with repeated persuasion (the "nagging" argument is made twice). The behavioral coaching earns some of its space, but the same points are restated rather than compressed.

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?

An output schema exists, so return values need not be enumerated, yet the description still flags the one non-obvious response field (`standard_adjustment`). Combined with defaults, override rationale, and post-call behavior, an agent has everything needed to invoke and follow through correctly.

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 100%, so the baseline is 3, but the description adds real meaning: plain-language glosses for each enum value in context, guidance that `reason` is "required in spirit" when proceeding, and how `check_id` defaults. It does not add format or length guidance beyond the schema's 500-char note.

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?

States a specific verb+resource: recording what you did about an `assess-change-fit` verdict. It explicitly names the sibling tool that produces the verdict it answers, so an agent can immediately place it in the workflow.

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

Usage Guidelines5/5

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

Gives explicit timing ("call this right after you act on one — especially when you override it"), names the upstream alternative (assess-change-fit), and explains that overrides are a legitimate, expected case. The default behavior (most recent undecided check, so only `decision` and `reason` needed) is spelled out.

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

record-prospect-outreach-toolRecord Prospect Outreach ToolAInspect

Internal Coderbuds staff only. Record that a message was sent to a prospect — after it has actually been sent.

Only call this when you have been told it went out. Recording a send is what moves a prospect from Sourced to Contacted, and a row that says "contacted" with nothing behind it is worse than one that says nothing: the next session skips it.

Sending is not something you can do. If you have written an opener, save it with save-prospect-draft and wait to be told it was sent.

A draft waiting on the row is folded into the record and cleared, so the same opener cannot go out twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoThe message body or a summary. Defaults to the draft saved on the row.
channelNoemail, linkedin, slack or call. Defaults to email.email
subjectNoThe subject line or opening line, so the next session can see what was already said.
prospect_idYesThe prospect who was written to.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so: it discloses the state transition (Sourced → Contacted), the side effect on the pending draft ('folded into the record and cleared'), the duplicate-send protection, and the downstream consequence of a false record ('the next session skips it'). It also states the audience restriction ('Internal Coderbuds staff only'). Only return format and failure behavior are unaddressed.

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?

Front-loads the critical constraint in bold, then the justification, then the prohibition and the alternative. Four short paragraphs, each earning its place, with no restatement of the name or title.

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, and the description doesn't say what a successful record returns or how it behaves on an invalid prospect_id. Everything an agent needs to decide whether to call the tool is present, so the gap is minor rather than disqualifying.

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 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that a draft waiting on the row is folded into the record and cleared, which is why `note` can be omitted. That interaction between the default and the row state is not visible from the schema alone.

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?

States a specific verb and resource — 'Record that a message was sent to a prospect' — with a temporal qualifier ('after it has actually been sent'). It is immediately distinguishable from save-prospect-draft, which it explicitly contrasts. An agent can select this without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Only call this when you have been told it went out') and an explicit negative case ('Sending is not something you can do'). It names the alternative sibling (save-prospect-draft) and the exact workflow that routes there instead. Nothing 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.

report-ai-usage-toolReport Ai Usage ToolA
Idempotent
Inspect

Report that you — the coding agent — wrote or helped write this change, and how much of it. Coderbuds otherwise has to infer AI authorship from the shape of the diff, and a heuristic that decides who counts as an AI adopter is a heuristic that decides where a CTO spends budget. You already know the answer. Say it, and the team's AI numbers stop being a guess.

Call this once per change, after the work is done — ideally with pull_request_number once the PR exists, or branch before it does. Re-reporting the same change refreshes the record rather than double-counting it, so it is safe to call again as the work evolves.

Set authorship honestly: agent_authored (you wrote essentially all of it), agent_assisted (you wrote a meaningful part, a person wrote the rest), or human_authored (a person wrote it and you only looked things up or reviewed). Set human_reviewed to whether a person actually read the diff before it went up — that is the governance number a board asks for, and guessing it helps nobody.

Reports are team-visible and attributed to you. The response tells you whether Coderbuds' own detector agreed with your report; where it did not, yours is the one that counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYesThe coding agent that did the work, as a stable slug — e.g. claude-code, cursor, copilot, codex. Free text is normalised, so "Claude Code" and "claude-code" are the same tool.
modelNoOptional model that did the work, e.g. claude-opus-5.
notesNoOptional short context, e.g. "agent wrote the migration, human rewrote the query". Max 500 characters.
branchNoThe source branch, for when you report before the pull request exists. Matched to the pull request when it appears.
authorshipYesHow much of the change you wrote: agent_authored (essentially all), agent_assisted (a meaningful part), or human_authored (a person wrote it, you only assisted).
repositoryYesThe repository the change is in, as owner/name or a bare repo name. Also binds the session to the owning team.
human_reviewedNoWhether a person actually read the diff before it went up. Defaults to false — report it honestly rather than flatteringly.
pull_request_numberNoThe pull request this change became, if it exists yet. The strongest anchor — it lets Coderbuds compare your report against what its detector inferred from the same diff.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
toolYesNormalised tool slug recorded.
modelNoModel recorded, if given.
branchNoBranch the report is anchored to, if given.
createdYesFalse when this refreshed an existing report for the same change.
messageYesHuman-readable confirmation.
authorshipYesAuthorship level recorded.
repositoryYesRepository the report was recorded against.
human_reviewedYesWhether a person read the diff.
inferred_scoreNoWhat Coderbuds' own detector scored this pull request, or null when there is nothing to compare yet.
detector_agreedNoWhether the inferred score agreed with your report. Null when there is nothing to compare.
pull_request_numberNoPull request number the report is anchored to, if given.

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the idempotentHint annotation, it discloses that reports are team-visible and attributed to the caller, that re-reporting refreshes rather than double-counts, and that the response compares the caller's report against the service's own detector with the caller's value winning. It stops short of stating permission requirements or error behavior.

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?

Front-loaded with the core action and organized into purpose, timing, field guidance, and behavior. Some of the motivational framing ('a heuristic that decides where a CTO spends budget') and the restatement of the authorship enum definitions duplicate schema text rather than earning their space.

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?

An output schema exists, so return-value documentation is not required, and the description still explains the salient part of the response. Combined with timing, anchor choice, and enum semantics, it covers what an agent needs; only auth/error detail is absent.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds decision guidance the schema does not: which of pull_request_number vs branch to supply and when, and why human_reviewed should be answered honestly. That is real interpretive value on top of the field definitions.

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?

The description states a specific verb and resource: report AI authorship of a change, with explicit scope ('wrote or helped write this change, and how much of it'). It is immediately distinguishable from read-side siblings like get-ai-adoption-tool, which surface the aggregate numbers this tool feeds.

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

Usage Guidelines5/5

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

Gives explicit timing ('once per change, after the work is done'), an anchor-selection rule (pull_request_number once the PR exists, branch before it does), and a re-call policy ('safe to call again as the work evolves'). It also distinguishes the three authorship values with concrete conditions for choosing each.

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

request-pull-request-review-toolRequest Pull Request Review ToolAInspect

Ask the team for a review on an open pull request. Coderbuds posts the request to the team's Slack channel — picking the next reviewer from the team's rotation, or the one you name — and leaves a comment on the pull request itself so the ask is visible to anyone reading it. Coderbuds speaks in its own voice; it does not comment as you. Use this after opening a pull request, or when a PR has been sitting unreviewed. Identify the repository by name (e.g. "saas") or full name (e.g. "patchstack/saas").

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional one-line context for the reviewer, e.g. "touches billing — needs a careful look at the proration maths".
reviewerNoOptional teammate to ask, by full name, email, or GitHub username. Leave this out to use the team's review rotation.
repositoryYesThe repository the pull request lives in, by name (e.g. "saas") or full name (e.g. "patchstack/saas").
pull_request_numberYesThe pull request number, e.g. 3258.

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYesA human-readable summary of the outcome.
successYesWhether the review request went out.
reviewerNoThe teammate who was asked, if one was assigned.
repositoryNoThe repository the pull request belongs to.
slack_notifiedYesWhether the request was posted to the team Slack channel.
pull_request_urlNoLink to the pull request.
pull_request_numberYesThe pull request the review was requested on.
commented_on_pull_requestYesWhether Coderbuds commented on the pull request.

TDQS

A4.1/5.0
Behavior4/5

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

With annotations empty, the description carries the full burden and does well: it discloses the Slack post, the reviewer-rotation vs. named-reviewer selection logic, the PR comment, and the important persona detail ('Coderbuds speaks in its own voice; it does not comment as you'). It omits failure modes (e.g. what happens if the rotation is empty or Slack is unlinked), so not a full 5.

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?

Front-loaded with the core action, then mechanism, then timing, then a naming hint. Every sentence contributes, though the mechanism sentence is somewhat long and could be tightened slightly.

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 mutation-style side-effecting tool with an output schema (so return values need no explanation), the description covers action, side effects, persona, and timing well. The main remaining gap is what happens on failure (no rotation, unlinked Slack).

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 are already documented in the schema. The description only restates the repository naming format, adding nothing beyond what the schema provides, so baseline 3 applies.

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?

The description states a specific verb and resource ('Ask the team for a review on an open pull request') and immediately details the mechanism (Slack post + PR comment). No sibling tool does anything similar, so it is unambiguously distinguishable from the surrounding read-only get-* / assess-* tools.

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

Usage Guidelines4/5

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

It gives clear triggering conditions: 'Use this after opening a pull request, or when a PR has been sitting unreviewed.' There is no explicit when-not guidance, but since no sibling performs this action there is no real alternative to disambiguate against.

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

save-prospect-draft-toolSave Prospect Draft ToolAInspect

Internal Coderbuds staff only. Save an opener against a prospect for Elliot to read and send, and flag the row as waiting on him.

You cannot send anything. Every message goes out under Elliot's name, from his own inbox or LinkedIn account, so the division is: you research, prioritise and write; he sends. This is where the writing goes.

Write the message itself, not a description of one — no placeholders, no "[insert metric]". Ground every claim in what the worklist gave you and say plainly what is not verified. If you cannot write an honest opener because something is unconfirmed, do not invent it: use update-prospect to park the row with the question instead.

Saving a draft flags the row, because a draft nobody is told about is a draft nobody sends. Recording the send later clears both.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftYesThe message as it should go out, signed off and ready to paste. Not a summary of one.
prospect_idYesThe prospect this opener is for, from get-prospect-worklist.
needs_action_reasonNoWhat you are asking the person to do, in their words. Defaults to "Draft ready to read and send".

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden well: it discloses the staff-only restriction, the side effect of flagging the row, and that a later send record clears the flag. It stops short of saying whether re-saving overwrites an existing draft or what the tool returns, so it is strong but not exhaustive.

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?

Front-loads the staff-only constraint and the core action, then layers guidance. The bolded 'You cannot send anything' and the closing rationale are slightly repetitive, but nearly every sentence adds operative detail rather than 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 mutation tool with no annotations and no output schema, this covers the essential context: who may call it, what it changes, and which sibling to use instead. Only the return value/confirmation shape is left unstated.

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 100%, so the baseline is 3, but the description adds real semantics for `draft` beyond the schema ('write the message itself, not a description of one — no placeholders'). It adds nothing extra for `needs_action_reason`, which the schema already documents including its default.

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?

States a specific verb and resource ('Save an opener against a prospect'), names the consumer (Elliot) and the side effect (flags the row as waiting on him). An agent can separate this from record-prospect-outreach-tool because the description explicitly says 'Recording the send later clears both.'

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not-to-use: write here if you can produce an honest opener, otherwise use `update-prospect` to park the row with the question. It also states the division of labour (you research/write, he sends) so the agent knows this tool never sends.

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

set-agent-posture-toolSet Agent Posture ToolA
Idempotent
Inspect

Set how loudly the Coderbuds agent speaks to this team — the single control over whether it acts at all. "off" = silent, Coderbuds still measures but never posts. "preview" = record recommendations in Coderbuds without performing or sending them. "quiet" = weekly pulse only, no nudges. "public" = acts in the open, nudges go to the team channel and never to DMs. "direct" = may message engineers directly. There are no per-capability settings: an individual act that needs a human still asks for approval in Slack regardless of posture. Requires team admin permissions; use get-agent-activity-tool to see the current posture and activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
postureYesoff = silent; preview = recommendations in Coderbuds only; quiet = weekly pulse only; public = nudges in the team channel; direct = may DM engineers.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
messageYesHuman-readable confirmation.
postureYesThe posture now in effect.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the idempotentHint annotation, the description details exact behavioral outcomes for every enum value: 'off' still measures but never posts, 'preview' records without sending, 'public' never DMs, and human-required actions still ask for approval. It also discloses the team-admin permission requirement, all of which is valuable context not present in 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 front-loaded with the core purpose, followed by a structured enumeration of the five values, then caveats and prerequisites. Every sentence contributes distinct information, and the organization makes it easy for an agent to scan, even with the density of content.

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?

Given a single enum parameter, an output schema (presumably returning result/status), and idempotence annotation, the description covers everything needed to invoke correctly: permission level, per-value behavior, cross-tool guidance, and the absence of finer-grained controls. No significant context 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 coverage is 100% and the enum values are documented, so the baseline is 3. The description enriches the semantics by clarifying ambiguous terms: 'preview' means 'without performing or sending them', 'public' means 'never to DMs', and 'off' still includes measurement. This adds tangible meaning beyond the schema.

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?

The description opens with 'Set how loudly the Coderbuds agent speaks to this team', a specific verb and resource, and immediately states it is 'the single control over whether it acts at all.' This clearly distinguishes it from the sibling get-agent-activity-tool and any per-capability setters, so an agent can identify its unique role.

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

Usage Guidelines5/5

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

The description gives explicit usage context: requires team admin permissions, directs the agent to get-agent-activity-tool for viewing current posture, and warns that there are no per-capability settings. This is effectively a when-to-use, when-not-to-use, and alternative-tool instruction set.

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

set-change-fit-standard-toolSet Change Fit Standard ToolA
Idempotent
Inspect

Set this team's pull request size standard, when a person on the team says the number is wrong. Pass target_lines for their number — tighter or looser — or omit it to go back to Coderbuds' default.

You usually will not need this to make room. Coderbuds loosens the standard on its own: when the team's recorded overrides show a caution threshold firing on changes that keep turning out fine, it moves the line and reports the move in the record-change-fit-decision response. Recording overrides is the better path, because it moves the line on evidence the team can read back. Use this when someone already knows the number and does not want to wait for the record to prove it.

Only call it when a person has actually asked, and pass the number they said. A standard is how a team works; it is not yours to set or to talk them out of. Setting it pins the number: Coderbuds stops adjusting this team's standard from then on, including the automatic loosening.

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoryNoOptional "owner/name" repository slug, used only to bind the session to the owning team.
target_linesNoThe number the team asked for, in reviewable lines. Omit it to revert to Coderbuds' default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYesTeam name.
pinnedYesTrue once the team owns the number and Coderbuds will not adjust it.
sourceYesWho set it: always "team" from this tool.
messageYesHuman-readable confirmation.
target_linesYesThe standard now in force for this team.
previous_target_linesYesThe standard before this change.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare idempotentHint=true, so the description carries the behavioral burden and does so richly: setting the number pins it, Coderbuds 'stops adjusting this team's standard from then on, including the automatic loosening,' and omitting target_lines reverts to the default. These are non-obvious consequences an agent could not infer from the schema or annotations.

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?

Front-loaded with the action and its parameter before the rationale and alternatives. Some sentences verge on repetition and moralizing ('it is not yours to set or to talk them out of'), but each still carries actionable routing or precondition information.

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?

All parameters are optional and fully documented in the schema, an output schema exists so return values need no explanation, and the description supplies the missing piece — the side effects and when-not-to-use. Nothing an agent needs to call this correctly is absent.

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 100% so the baseline is 3, but the description adds meaning beyond the schema: target_lines is 'their number — tighter or looser,' conveying directional semantics, and it restates the omit-to-revert behavior as an intentional action. The repository parameter's binding purpose is left to the schema, keeping this just above baseline.

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?

States a specific verb and resource with scope: 'Set this team's pull request size standard.' The team-scoped framing and the contrast with recording overrides clearly separate it from siblings like record-change-fit-decision-tool and assess-change-fit-tool.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'You usually will not need this to make room,' explains the automatic loosening path, names recording overrides as 'the better path,' and gives the exact condition for using this tool ('when someone already knows the number and does not want to wait'). It also states the precondition 'Only call it when a person has actually asked.'

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

update-prospect-toolUpdate Prospect ToolAInspect

Internal Coderbuds staff only. Update one prospect: what research found, what stage it is at, what happens next, and whether a person is needed.

needs_action_reason is how you hand a row back without stopping. Several rows in any pass will have a contact who has changed job, a headcount nobody can verify, or a question only Elliot can answer. Park those with the question written in his words, then carry on to the next row.

If the question ends in a choice, send the choices as answer_options. Most of them do — "write to the CEO, wait for the new lead, or skip?" is three options you have already worked out. Passed as options they become buttons; left in the prose they are a blank textarea, and a question that needs composing is a question that waits a day.

When a question comes back answered, the row appears in the answered list with both what you asked and what you were told. Act on it, then pass answer: null to clear the pair — that is what takes it off the queue, and a row nobody clears is read again every run.

Stages: sourced, contacted, replied, trialling, won, closed. Two rules matter — never set contacted yourself (recording a send does that, so the stage always has something behind it), and closed needs a closed_reason a person can read back.

Corrections to research are welcome and expected: a confirmed role, a corrected headcount, a better signal. Say what you verified in signal, and leave qualification_needed describing what is still unconfirmed rather than deleting it.

When you re-check the signal, set checked_on to today. The ICP requires the trigger to be verified on the day the message is written, not the day the row was sourced, and the queue marks a row whose signal was not checked today so that nobody sends on a job advert that came down last week.

ParametersJSON Schema
NameRequiredDescriptionDefault
stageNosourced, replied, trialling, won or closed. Not contacted — record the send instead.
answerNoPass null once you have acted on an answered question, to take the row off the queue. You should not be writing answers yourself.
signalNoWhat makes this company worth approaching, as you now understand it.
checked_onNoThe date you re-checked the signal, as YYYY-MM-DD. Set it to today whenever you have actually looked — an unchecked row is flagged before anybody sends to it.
contact_urlNoProfile URL for the contact.
next_actionNoThe next concrete thing to do about this row.
prospect_idYesThe prospect to update.
contact_nameNoA confirmed contact name.
contact_roleNoTheir role, as you verified it.
closed_reasonNoRequired when closing. Why this is not going anywhere.
answer_optionsNoThe answers that question is offering, up to four, each a complete instruction you could act on as written ("Write to Anh-Tho now", "Close it as unverifiable"). Send these whenever your question ends in a choice — they become buttons, and a question answered with a click is answered the same day. Free text stays available, so never narrow a genuinely open question into options to make it clickable.
needs_action_reasonNoThe question a person has to answer, in their words.
qualification_neededNoWhat is still unconfirmed. Leave it describing the gap rather than emptying it.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations are empty, so the description carries the full burden and largely meets it: it discloses the audience restriction ('Internal Coderbuds staff only'), the side effect of clearing an answer pair (takes the row off the queue), that unchecked signals get flagged before sending, that `closed` requires a readable reason, and that corrections should preserve qualification_needed rather than delete it. These are exactly the mutation semantics an agent needs and cannot get from the schema alone.

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?

Front-loaded purpose sentence, then bolded lead-ins that make each rule scannable, and every paragraph encodes an operational rule rather than filler. It is long, however, and a few points restate the schema docstrings (e.g. the checked_on rationale appears in both places), so it is not maximally tight.

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 13-parameter mutation tool with no annotations and no output schema, the description covers stages, transition rules, and queue mechanics well. It never states whether omitted fields are left unchanged (the key behavior for a partial-update endpoint) and says nothing about failure/response shape, 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.

Parameters5/5

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

Schema description coverage is 100%, so the baseline would be 3, but the description adds genuine semantics beyond the schema: needs_action_reason is framed as the escalation channel, answer_options are explained as buttons versus a prose question that stalls, and `answer: null` is explained as the queue-clearing action rather than a free string. That is real added meaning over the field docstrings.

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?

Opens with a specific verb+resource ('Update one prospect') and immediately enumerates the kinds of fields it touches (research findings, stage, next action, human escalation). It also distinguishes itself from a sibling mechanism with the rule 'never set `contacted` yourself (recording a send does that)', which routes the agent to record-prospect-outreach-tool rather than this one for that transition.

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

Usage Guidelines5/5

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

Gives explicit when-to-use conditions for each non-obvious parameter: park blocked rows via needs_action_reason, send answer_options when a question ends in a choice, clear an answered question with `answer: null`, set checked_on when the signal is actually re-verified today. It also states when-not ('never set contact') and the prerequisite for `closed`.

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. 2 tool updates
    • Changedget-agent-activity-tool1 field changed
      • changedOutput schema / properties / posture / description
        Previous value: -"How loudly the agent speaks: off, quiet, public or direct. The single control over whether it acts."New value: +"How loudly the agent speaks: off, preview, quiet, public or direct. The single control over whether it acts."
    • Changedset-agent-posture-tool2 fields changed
      • changedInput schema / properties / posture / description
        Previous value: -"off = silent; quiet = weekly pulse only; public = nudges in the team channel; direct = may DM engineers."New value: +"off = silent; preview = recommendations in Coderbuds only; quiet = weekly pulse only; public = nudges in the team channel; direct = may DM engineers."
      • changedInput schema / properties / posture / enum
        Previous value: -[
        -  "off",
        -  "quiet",
        -  "public",
        -  "direct"
        -]New value: +[
        +  "off",
        +  "preview",
        +  "quiet",
        +  "public",
        +  "direct"
        +]
  2. 1 tool update
    • Addedget-created-pull-requests-tool
  3. 1 tool update
    • Changedupdate-prospect-tool1 field changed
      • addedInput schema / properties / checked_on
        Added value: +{
        +  "description": "The date you re-checked the signal, as YYYY-MM-DD. Set it to today whenever you have actually looked — an unchecked row is flagged before anybody sends to it.",
        +  "type": "string"
        +}
  4. 2 tool updates
    • Addedget-icp-tool
    • Addedpropose-icp-rule-tool
  5. 1 tool update
    • Changedupdate-prospect-tool1 field changed
      • addedInput schema / properties / answer_options
        Added value: +{
        +  "description": "The answers that question is offering, up to four, each a complete instruction you could act on as written (\"Write to Anh-Tho now\", \"Close it as unverifiable\"). Send these whenever your question ends in a choice — they become buttons, and a question answered with a click is answered the same day. Free text stays available, so never narrow a genuinely open question into options to make it clickable.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  6. 1 tool update
    • Changedupdate-prospect-tool2 fields changed
      • addedInput schema / properties / answer
        Added value: +{
        +  "description": "Pass null once you have acted on an answered question, to take the row off the queue. You should not be writing answers yourself.",
        +  "type": "string"
        +}
      • changedInput schema / properties / needs_action_reason / description
        Previous value: -"The question a person has to answer, in their words. Pass null to clear one that has been answered."New value: +"The question a person has to answer, in their words."
  7. 6 tool updates
    • Addedadd-prospect-tool
    • Changedfind-delivery-bottleneck-tool1 field changed
      • changedOutput schema / properties / stages / description
        Previous value: -"All four stages — waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, the count it was scored against (`analysed`, which for the two deploy stages counts only repositories that deploy), coverage, whether it is eligible to be ranked, and a note saying why not when it is not."New value: +"All six stages — waiting_to_start, writing_the_change, waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, the count it was scored against (`analysed`, which for the two deploy stages counts only repositories that deploy), coverage, whether it is eligible to be ranked, whether it competes for the bottleneck at all (`ranked`, false for waiting_to_start), what would have to be connected to see it (`unlock`), and a note saying why it cannot or will not be ranked."
    • Addedget-prospect-worklist-tool
    • Addedrecord-prospect-outreach-tool
    • Addedsave-prospect-draft-tool
    • Addedupdate-prospect-tool
  8. 1 tool update
    • Changedfind-delivery-bottleneck-tool1 field changed
      • changedOutput schema / properties / stages / description
        Previous value: -"All four stages — waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, coverage, whether it is eligible to be ranked, and a note saying why not when it is not."New value: +"All four stages — waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, the count it was scored against (`analysed`, which for the two deploy stages counts only repositories that deploy), coverage, whether it is eligible to be ranked, and a note saying why not when it is not."
  9. 1 tool update
    • Addedfind-delivery-bottleneck-tool
  10. 29 tool updates
    • First observedassess-change-fit-tool
    • First observeddeploy-repository-tool
    • First observedexplain-pull-request-score-tool
    • First observedget-agent-activity-tool
    • First observedget-ai-adoption-tool
    • First observedget-deployments-by-person-tool
    • First observedget-dora-metrics-tool
    • First observedget-guidance-drift-tool
    • First observedget-mcp-adoption-tool
    • First observedget-merged-pull-requests-tool
    • First observedget-my-insights-tool
    • First observedget-my-status-tool
    • First observedget-open-pull-requests-tool
    • First observedget-person-activity-tool
    • First observedget-pull-request-metrics-tool
    • First observedget-repo-readiness-tool
    • First observedget-signup-funnel-tool
    • First observedget-team-context-tool
    • First observedget-team-insight-summary-tool
    • First observedget-team-overview-tool
    • First observedget-undeployed-pull-requests-tool
    • First observedget-weekly-summary-tool
    • First observedlink-repositories-tool
    • First observedmark-insight-seen-tool
    • First observedrecord-change-fit-decision-tool
    • First observedreport-ai-usage-tool
    • First observedrequest-pull-request-review-tool
    • First observedset-agent-posture-tool
    • First observedset-change-fit-standard-tool

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources