gavel
OfficialGavel
Bazel builds your monorepo. Gavel judges it. Order in the codebase!
The quality gate for Bazel monorepos — build-graph-native, local, agent-ready.
Your monorepo builds green. That's not the same as innocent. Gavel gathers the
evidence as Bazel aspects, holds every change to the law you set in gavel.yaml,
and returns a verdict: the regression you just introduced stands charged, while a
decade of existing debt is not on trial. One verdict, handed to your CI, your
terminal, and your coding agent alike.
gavel init # open the case
gavel judge # hear it
Install
# Homebrew — macOS & Linux
brew install gavelcode/tap/gavel
# or the install script — Linux, CI, Docker
curl -fsSL https://raw.githubusercontent.com/gavelcode/gavel/main/install.sh | shPrebuilt binaries for every platform are on the releases page.
Gavel needs a Bazel 8.0+ (bzlmod) workspace; verify with gavel --version.
bazel build //apps/cli/cmd/gavel
# binary at bazel-bin/apps/cli/cmd/gavel/gavel_/gavelRelated MCP server: bazel-mcp
How it works
Every change gets its day in court.
1. The evidence comes from the build graph
Analyzers — golangci-lint, PMD, CPD, SpotBugs, Error Prone, Ruff, Bandit,
ESLint, Clippy — run as Bazel aspects. They see the exact source tree,
dependency graph, and toolchains Bazel already resolves; no separate scanner, no
second config to drift. SonarQube re-scans the world; Gavel looks only at the
targets the graph says changed (--affected), so a run stays fast as the
monorepo grows. Every tool, every language, normalized to one format: SARIF.
2. You're only tried for what you changed
gavel.yaml is the quality gate — code, reviewed and versioned with the
repo, not clicked into a web UI. It evaluates only what you just added against a
committed baseline: new findings, coverage regressions, new architecture
violations. Adopt Gavel on ten years of debt and it blocks on today's diff,
never on the backlog.
projects:
- name: payments
pattern: "//payments/..."
tooling:
go: [golangci-lint, archtest]
quality_gate:
findings: { max_error: 0 }
coverage: { min: 80 }
architecture_violations: { max: 0 }Every run saves a fingerprint snapshot; the next shows the delta — new, fixed, existing — plus the coverage trend. No server required.
payments/api/handler.go:42 error null check missing golangci-lint:nilerr NEW
⚖ VERDICT: FAIL — code_quality
1 new · 8 fixed · 31 existing coverage 73.5% (↑5.0%) architecture PASS3. A verdict your coding agent can request
Coding agents write code they can't see the consequences of — a lint regression,
a coverage drop, a layering violation land three commits later in CI. gavel mcp
starts a Model Context Protocol server that
exposes judge, lint_file, findings, coverage, and arch as tools. Point
Claude Code, Cursor, or Zed at it and the agent checks its own work against the
same Bazel-aware gate as it writes — a quality conscience, inline.
For editors and dashboards, gavel watch re-analyzes on every save and emits a
JSONL event stream. Both run fully local — no server, no network.
Gavel vs SonarQube: the case
SonarQube | Gavel | |
Build-graph awareness | None | Bazel aspects understand target dependencies |
Monorepo model | One project, or a branch per project | Hierarchical: per-package, per-project, whole repo |
Analysis scope | Full scan or file diff | Bazel-aware: changed files + affected targets |
Local workflow | Server round-trip | Fully local, zero network |
Coding-agent / editor loop | — | MCP server + |
Quality gate | Web-UI config | Code ( |
Progress tracking | Server-backed | Local fingerprint snapshots, no infrastructure |
Footprint | Java server + database + scanner | One static Go binary, runs inside Bazel |
SonarQube is a mature platform with fifteen years of rules behind it, and Gavel isn't trying to replace it. Gavel answers a question SonarQube structurally can't: which packages of my Bazel monorepo are healthy, and did this change make one of them worse — where the build graph is the unit of analysis and the inner loop is where quality is actually won.
Already running aspect's rules_lint? Keep it. Gavel reads the SARIF it drops in
bazel-bin/(gavel judge --findings-source=rules_lint) and turns those reports into a gate — baseline delta, coverage, architecture, verdict — the layer rules_lint deliberately leaves to you.
Status
Alpha — v0.1.0. Under active development; APIs and config formats may change. Gavel gates its own repository on every commit — it is its own first user.
Working today:
gavel init— scaffold config + Bazel integrationgavel judge— analyze, evaluate the gate, show findings and the deltagavel judge --project <name>·--quick·--summary·--affected— scope and shape the rungavel judge --absolute— evaluate all findings (release gates, nightly)gavel judge --json·--output-sarif report.sarif— structured output for CI, IDEs, GitHub Code Scanninggavel judge --server URL --token TOKEN— shared team baseline: fetch and submitgavel watch— re-analyze on change, emitting a JSONL event streamgavel mcp— Model Context Protocol server for editor / agent integrationgavel validate— check Bazel integration healthBaseline mode (default): fingerprint-based new/fixed/existing classification, committed to git for the team
Analyzers: golangci-lint, PMD, CPD, SpotBugs, Error Prone, Ruff, Bandit, ESLint, Clippy
Server (optional): web dashboard, centralized history, team baselines, API-token auth
Documentation
Quickstart — from zero to a first verdict in five minutes
Configuration —
gavel.yamlandarchitecture.yml, field by fieldBaseline & delta — how new / fixed / existing is decided
Server deployment — running
gavel-server
Contributing
Issues and pull requests are welcome — see CONTRIBUTING.md and our Code of Conduct. Security reports go through SECURITY.md.
License
Available Tools
8 toolsgavel_archARead-only
Check architecture layer violations (DDD layer rules). Returns per-project violations with rule, source and target packages. Runs a full analysis (not --quick) because architecture checks are skipped in quick mode.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Analyze only this project (omit for all projects) | |
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description confirms a read operation. It adds behavioral context about running a full analysis rather than quick mode, which is valuable. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with purpose and return information, followed by key behavioral context. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a reasonable summary of returns (violations with rule, source, target packages). It does not mention limits or pagination, but for a simple tool with two optional parameters, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description does not add additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks architecture layer violations with a specific verb and resource, and mentions return fields. It does not explicitly differentiate from siblings, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that this runs a full analysis because architecture checks are skipped in quick mode, providing context for when to use it. It implies that for quick analysis a different tool might be appropriate, but does not name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gavel_coverageARead-only
Get code coverage for a project. Runs a full analysis and reports the overall percentage plus a per-file breakdown. Pass 'files' to focus on specific files and see their uncovered line ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| diff | No | Show per-file coverage change since the last green baseline (only files whose coverage moved, plus files with no baseline marked '(new)'). Reports 'No previous baseline' on the first run. | |
| files | No | Filter the per-file breakdown to these file paths (relative to workspace root). When set, uncovered line ranges are listed for each file. | |
| project | No | Project name (analyzes all projects if omitted) | |
| packages | No | Filter the per-file breakdown to whole package trees (relative to workspace root). A trailing '/...' matches the package and its subpackages; without it, only files directly in that package. Mutually exclusive with 'files'. Same output as 'files', with uncovered line ranges. | |
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds context about the output (overall percentage and per-file breakdown) and confirms it runs a full analysis, which is consistent with read-only behavior. No additional side effects are disclosed, but the description complements annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the main purpose and then adding one key usage hint. Every sentence is informative with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the main output but does not cover the 'diff', 'packages', or 'gavelspace' parameters' effects beyond the schema. Since there is no output schema, the return value format is vague. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%. The description adds value by explaining the outcome when 'files' is used (uncovered line ranges). This goes beyond the schema descriptions that list parameters but do not highlight the special behavior of 'files'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool gets code coverage and reports overall percentage plus per-file breakdown. However, it does not contrast with sibling tools like gavel_trends or gavel_findings, so differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a usage hint for the 'files' parameter but does not provide guidance on when to use this tool versus alternatives (e.g., gavel_trends for trends). No exclusions or when-not-to-use advice is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gavel_findingsARead-only
Discover every lint finding across a project in one call. Runs a quick analysis (findings only, no coverage), returns a by-rule summary plus a flat file:line list with gate-blocking NEW findings sorted first. Filter by project, rule, or severity.
| Name | Required | Description | Default |
|---|---|---|---|
| rule | No | Keep only findings whose rule id matches (omit for all rules) | |
| limit | No | Maximum findings to list in detail; the by-rule summary always counts all matches (default 100) | |
| project | No | Analyze only this project (omit for all projects) | |
| severity | No | Keep only findings of this severity, e.g. error or warning (omit for all) | |
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which aligns with the description. The description adds behavioral context: it runs a quick analysis, returns sorted output with gate-blocking NEW findings first, and excludes coverage data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured sentences that front-load the main action and efficiently convey the tool's purpose, behavior, and filtering options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with full schema coverage and no output schema, the description covers the main purpose and key behavior. It could mention the output format more explicitly but is adequate for a scanning tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value by explaining that limit applies only to the detailed list while the summary counts all matches, and by clarifying the gavelspace parameter defaults to the current directory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool discovers lint findings across a project, specifies it returns a by-rule summary and a sorted flat file:line list, and distinguishes from sibling tools by noting 'no coverage'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for quick analysis when you want all findings without coverage, but does not explicitly state when to use it versus alternatives like gavel_coverage or gavel_trends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gavel_initA
Initialize Gavel in the workspace from an existing gavel.yaml. Installs Bazel aspects, registers tool dependencies in MODULE.bazel, and sets up .bazelrc includes.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Path to an existing gavel.yaml to use as input | |
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It mentions installation and registration side effects, but omits important details like idempotency, error handling on invalid input, or potential overwriting of existing configurations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose. However, the list of effects could be formatted for easier scanning (e.g., bullets), but the single sentence structure is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should explain return values and error conditions. It does not mention what the tool returns (e.g., success message, configuration details) or what happens on failure. This is a gap for a tool that modifies workspace state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context like 'existing' for the 'from' parameter, but does not add significant meaning beyond the schema descriptions for either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool initializes Gavel from an existing gavel.yaml, listing specific actions (install Bazel aspects, register dependencies, set up .bazelrc). This distinguishes it from siblings which handle different phases like validation or trends.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: you need an existing gavel.yaml. But no explicit guidance on when to use this versus siblings like gavel_validate or gavel_arch, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gavel_judgeB
Run static analyzers and evaluate the quality gate for configured projects. Returns verdict (pass/fail), findings count, coverage, and rule-by-rule results.
| Name | Required | Description | Default |
|---|---|---|---|
| quick | No | Skip coverage and architecture checks (findings only) | |
| project | No | Analyze only this project (omit for all projects) | |
| affected | No | Analyze only targets affected by changed files. Implies --quick. | |
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool runs analyzers and returns results, implying non-destructive behavior but omitting details on side effects, prerequisites (e.g., project initialization), or performance impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with essential information: action and return values. Every word contributes, and it is front-loaded with the verb and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately lists return components (verdict, findings, coverage, rule-by-rule). However, it misses context about prerequisites (e.g., gavel_init requirement) and the concept of a quality gate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema's parameter descriptions; it does not elaborate on how parameters affect behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs static analyzers and evaluates a quality gate, returning a verdict and metrics. It distinguishes from siblings like gavel_findings and gavel_coverage by focusing on the combined verdict, but could explicitly contrast use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description only implies usage for running analyzers and checking quality, but does not mention when to prefer gavel_findings, gavel_coverage, or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gavel_lint_fileARead-only
Get lint findings for a specific file. Runs a quick analysis (findings only, no coverage) and returns findings filtered to the requested file path.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | File path relative to workspace root | |
| project | No | Project name (analyzes all projects if omitted) | |
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. Description adds valuable behavioral context: 'quick analysis' and 'no coverage', which goes beyond annotations and helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly focused sentences. First states core purpose, second adds constraints and efficiency insight. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and description does not hint at the structure or format of returned findings. For a tool with 3 parameters and no output schema, more detail on return values would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add any additional meaning to parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get' with specific resource 'lint findings for a specific file'. Includes distinguishing details ('quick analysis, findings only, no coverage') that differentiate from siblings like gavel_coverage and gavel_findings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use for per-file quick linting but does not explicitly state when to use this vs siblings or when not to use it. No mention of alternatives or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gavel_trendsARead-only
Show quality trends for a project — coverage, findings, and verdict history over recent analysis runs. Requires a Gavel server (GAVEL_SERVER_URL).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent runs to show (default 10) | |
| branch | No | Filter to a specific branch | |
| project | Yes | Project name (required) | |
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar for behavioral disclosure is lower. The description adds the requirement of a Gavel server and the scope (recent analysis runs), providing useful context beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences totaling 20 words. The first sentence explains the core functionality with specific detail, and the second adds a key requirement. Every word earns its place with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (4 parameters, no output schema, annotations present), the description effectively covers what the tool does, what it requires, and the scope of its output (trends over recent runs). It could potentially mention the return format, but the current level is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented with descriptions. The tool description does not add further meaning to the parameters beyond what the schema provides, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Show' and the resource 'quality trends for a project', listing specific aspects (coverage, findings, verdict history) over recent analysis runs. It distinguishes from siblings like gavel_findings and gavel_coverage by focusing on trends over time rather than current states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a prerequisite (requires a Gavel server) but does not explicitly differentiate when to use this tool versus alternatives like gavel_findings for current snapshots. Usage context is implied by the description of showing trends, but no when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gavel_validateARead-only
Validate Gavel structural setup — checks that required files exist, .bazelrc includes are in place, and MODULE.bazel has the expected entries.
| Name | Required | Description | Default |
|---|---|---|---|
| gavelspace | No | Absolute path to a gavelspace directory (omit to use the directory where Claude Code is running) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, consistent with the description. The description adds what exactly is validated, providing some behavioral context beyond the annotation, but no details on side effects, auth, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the purpose and concisely lists what is checked. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional param, read-only, no output schema), the description provides adequate context. It fully explains what the tool does without needing additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description is clear. The tool description does not add meaning beyond the schema, but the schema itself is sufficient. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates Gavel structural setup and lists specific checks (files, .bazelrc, MODULE.bazel). It distinguishes from siblings like gavel_init or gavel_judge by focusing on validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The description implies it's for post-setup checks, but does not state prerequisites or when to avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose: architecture checks, initialization, coverage, findings, quality gate, file-level lint, trends, and validation. No overlap in functionality.
All tools follow a consistent gavel_ prefix with descriptive snake_case names, making them predictable and easy to distinguish.
With 8 tools, the set is well-scoped for a code quality server, covering setup, analysis, and monitoring without being excessive or sparse.
The tool surface covers the full lifecycle: initialization, validation, architecture, coverage, linting (global and per-file), quality gate evaluation, and trends. No obvious missing operations for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
An MCP server that provides Javelin Standalone Guardrails
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceThin MCP server wrapping the Gemini CLI for AI assistants, supporting workspace-aware multi-repository analysis and forward-compatible flags.MIT
- AlicenseAqualityAmaintenanceA local MCP server that exposes Bazel build system capabilities to AI assistants.82MIT
- AlicenseNot gradedqualityAmaintenanceLocal-first MCP server that provides project context, verification gates, and structured tools for coding agents to discover knowledge, run diagnostics, and execute allowlisted commands within a repository.35MIT
- AlicenseNot gradedqualityBmaintenancePrivate, local-first code intelligence MCP server that builds a static graph of repositories and exposes search, architecture, impact analysis, and review tools via MCP.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gavelcode/gavel'
If you have feedback or need assistance with the MCP directory API, please join our Discord server