Skip to main content
Glama
commit-check

commit-check-mcp

Official
by commit-check

commit-check-mcp

PyPI version Python versions Build Coverage MCP server MCP Registry Glama

Model Context Protocol (MCP) server for commit-check.

commit-check-mcp exposes commit-check as local MCP tools so an MCP client can validate commit messages, branch names, author info, push safety, and repository state.

Features

This MCP server exposes commit-check validations as MCP tools:

  • server_health — returns server/sdk versions

  • validate_commit_message — validates a commit message

  • validate_branch_name — validates a branch name or the current repo branch

  • validate_push_safety — validates that a push is not a force push (force pushes are always rejected by this tool)

  • validate_author_info — validates author name/email or the repo's git author config

  • validate_commit_context — runs combined checks in one call

  • validate_repository_state — validates latest commit, current branch, author state, and optional push safety for a repo

  • describe_validation_rules — returns the effective config and enabled rules after merging defaults and repo config

All validation tools return the same structured commit-check result shape:

{
  "status": "pass|fail|skip",
  "warnings": 0,
  "checks": [
    {
      "rule_id": "CC001",
      "check": "message",
      "status": "pass|fail|warn|skip",
      "value": "...",
      "error": "...",
      "suggest": "...",
      "fix": "...",
      "docs_url": "https://commit-check.com/rules/#cc001"
    }
  ]
}

rule_id is the stable id of the rule that produced the check and docs_url links to its documentation.

Only fail is a rejection. A check reports skip when it did not run — the author matched ignore_authors, or there was nothing to check — and the top-level status is skip only when every check skipped, so a run that validated nothing is never reported as a pass. A check reports warn when the config lists it under warn: the finding is complete, but it does not fail the run, the top-level status stays pass, and warnings counts them.

suggest is the advice a person reads. fix is the corrected value itself, present only when the correction is unambiguous — Fix: add x comes back with "fix": "fix: add x" — and an empty string otherwise, so an agent can apply a non-empty fix as it stands and fall back to suggest when it is empty.

A call that cannot run at all — an empty message, a repo_path that does not exist, a repo_path that is not a git repository when the tool has to read git state (see the repo_path note under Tool Usage), a malformed or rejected commit-check config, a push_refs SHA that is not a commit in repo_path even after the force-push check tried to fetch it — is returned as an MCP tool error (is_error) whose text names the problem, for example repo_path is not a git repository: /path/to/dir, invalid commit-check config: ... or push_refs: <sha> is not a commit in the repository; fetch it first, the force-push check cannot be judged, rather than as a pass/fail result. In particular a push whose SHAs cannot be judged is never reported as a pass.

Related MCP server: mcp-commits

Installation

pip install commit-check-mcp

This installs the commit-check-mcp CLI entrypoint.

For local development from this repository:

pip install -e .

Use With An MCP Client

This server runs over stdio, so it is meant to be launched by an MCP client rather than used as a long-running HTTP service.

With uvx (recommended — no install needed):

# Run once, no pip install required
uvx commit-check-mcp

Tip: If uv is not installed, get it via curl -LsSf https://astral.sh/uv/install.sh | sh.

Configure your client

Every client below launches the same command; only the config file and, for a few clients, the wrapper key differ. This is the object to register:

{
  "mcpServers": {
    "commit-check": {
      "command": "uvx",
      "args": ["commit-check-mcp"]
    }
  }
}

Client

Where it goes

Notes

Claude Code

claude mcp add commit-check -- uvx commit-check-mcp

Add --scope project to write a shareable .mcp.json at the repo root (--scope user makes it available in all your projects). You can also commit a .mcp.json containing the block above; "type": "stdio" may be added inside the server object. MCP servers are not configured in ~/.claude/settings.json.

Claude Desktop

macOS ~/Library/Application Support/Claude/claude_desktop_config.json; Windows %APPDATA%\Claude\claude_desktop_config.json

Block above as-is; restart Claude Desktop.

Cursor

project .cursor/mcp.json or global ~/.cursor/mcp.json

Block above as-is (or Settings → Cursor Settings → MCP → Add new MCP server with command uvx commit-check-mcp).

VS Code (Copilot agent mode)

.vscode/mcp.json

Different key: {"servers": {"commit-check": {"type": "stdio", "command": "uvx", "args": ["commit-check-mcp"]}}}

Cline

MCP Servers panel → Configure → cline_mcp_settings.json (check your client's docs)

Block above as-is.

Roo Code

project .roo/mcp.json or global mcp_settings.json (Edit Global MCP)

Block above as-is; optional "alwaysAllow": [...].

Windsurf

~/.codeium/windsurf/mcp_config.json (check your client's docs)

Block above as-is.

Continue

config.yaml (or a file in .continue/mcpServers/)

YAML list under mcpServers:, see below. Continue also picks up the JSON block above when dropped into .continue/mcpServers/.

Zed

~/.config/zed/settings.json

Different key: {"context_servers": {"commit-check": {"command": "uvx", "args": ["commit-check-mcp"]}}}

Anything else

your client's MCP config

If the client cannot run uvx: pip install commit-check-mcp, then set "command" to the absolute path of the installed binary and drop args. Find it with which commit-check-mcp (macOS/Linux), where commit-check-mcp (Windows cmd) or Get-Command commit-check-mcp | Select-Object -ExpandProperty Source (PowerShell).

Continue's config.yaml entry in full (name, version and schema are required by Continue; drop them if you are adding only the mcpServers fragment to an existing file, or save this as a standalone file in .continue/mcpServers/):

name: commit-check
version: 0.0.1
schema: v1
mcpServers:
  - name: commit-check
    command: uvx
    args: ["commit-check-mcp"]

Run Manually

# If installed via pip
commit-check-mcp

# Or via uvx (no install needed)
uvx commit-check-mcp

The server uses stdio transport, which is the recommended MCP default for local tool integrations.

Tool Usage

After the client starts the server, it will expose these tools:

  • server_health: returns server, SDK, and dependency versions

  • validate_commit_message(message, config?, repo_path?, config_path?)

  • validate_branch_name(branch?, config?, repo_path?, config_path?)

  • validate_push_safety(push_refs?, config?, repo_path?, config_path?)

  • validate_author_info(author_name?, author_email?, config?, repo_path?, config_path?)

  • validate_commit_context(message?, branch?, author_name?, author_email?, config?, repo_path?, config_path?)

  • validate_repository_state(repo_path?, config?, config_path?, include_message?, include_branch?, include_author?, include_push?)

  • describe_validation_rules(config?, repo_path?, config_path?)

Every parameter carries a description in the tool's JSON input schema, so an MCP client (and the model behind it) can see what each one expects without reading this file: for example push_refs documents the git pre-push line format <local_ref> <local_sha> <remote_ref> <remote_sha>. Each tool also has a display title and MCP tool annotations: destructiveHint: false and idempotentHint: true everywhere, readOnlyHint: true on the six tools that only read, and readOnlyHint: false with openWorldHint: true on validate_push_safety and validate_repository_state, because the force-push check may run git fetch to resolve a SHA, which updates FETCH_HEAD and remote-tracking refs (the working tree and commits are never touched). Clients that gate tool calls on those hints can auto-approve the read-only six. The server's instructions describe the intended loop: validate first, read status (only fail rejects, skip is not approval), apply a non-empty fix verbatim or follow suggest, then validate again.

The common optional arguments are:

  • repo_path: repository directory to validate against; it must be a git repository when the tool reads git state (branch, author, or push refs omitted, validate_repository_state, or push_refs given, whose SHAs must resolve there), and may be a plain directory holding a config file when every other value is supplied

  • config_path: explicit TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; relative paths resolve from repo_path

  • config: ad-hoc config overrides merged on top of defaults and repo config

Common Examples

Validate a commit message using repo-local rules:

{
  "message": "feat(api): add MCP validation tool",
  "repo_path": "/path/to/repo"
}

Validate the current repository branch using an explicit config file:

{
  "repo_path": "/path/to/repo",
  "config_path": ".github/commit-check.toml"
}

Validate the full repository state:

{
  "repo_path": "/path/to/repo",
  "include_message": true,
  "include_branch": true,
  "include_author": true
}

Validate push safety from git pre-push hook ref metadata (push_refs must be non-empty when given; omit it to check the current branch against its upstream):

{
  "repo_path": "/path/to/repo",
  "push_refs": "refs/heads/main abc123 refs/heads/main def456"
}

Inspect the final merged rules that will be applied:

{
  "repo_path": "/path/to/repo",
  "config": {
    "commit": {
      "require_body": true
    }
  }
}

Repository-Aware Validation

commit-check is most useful when it runs against a real git repository and its cchk.toml or commit-check.toml file. This MCP server now supports that directly:

  • repo_path — run git-based validations against a specific repository

  • config_path — point to an explicit TOML config file; relative paths are resolved from repo_path

  • config — apply ad-hoc overrides on top of defaults and repo config

Typical patterns:

  • Validate an explicit message with a repository's rules

  • Validate the current repository state — the latest commit's message and author, and the current branch — without passing message/branch/author values manually

  • Validate push safety using pre-push ref metadata, or check the current branch against its upstream

  • Inspect which rules are actually enabled after config merging

Example payload for a repository-wide validation:

{
  "repo_path": "/path/to/repo",
  "include_message": true,
  "include_branch": true,
  "include_author": true,
  "include_push": true
}

Config precedence is:

  1. commit-check built-in defaults

  2. repository config loaded from repo_path, or the file named by config_path when it is provided (it replaces the repository's own config file)

  3. inline config overrides passed to the tool

Published On


mcp-name: io.github.commit-check/commit-check-mcp

Available Tools

8 tools
describe_validation_rulesDescribe validation rulesA
Read-onlyIdempotent

Return the commit-check rules that are in effect after merging the built-in defaults, the repository's config file (or config_path) and the inline config overrides. Read-only, no side effects.

Returns {commit_check_version, config (the merged config), supported_checks (every check name commit-check knows), enabled_rules[]} where each enabled rule carries its check name, config and pattern details.

Use this before writing a commit message or branch name to learn the expected format instead of guessing, and to debug why a validation failed or was skipped.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNoInline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {"warn": ["message"]} or {"commit": {"require_body": true}}.
repo_pathNoPath to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory.
config_pathNoPath to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's 'Read-only, no side effects' is redundant but harmless. The description adds meaningful behavioral context beyond annotations: it explains the merge order of defaults, config file, and inline overrides, and describes the return structure (commit_check_version, merged config, supported_checks, enabled_rules). This is useful context that annotations do not provide.

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

Conciseness4/5

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

The description is three sentences long, with the purpose front-loaded in the first sentence, the return structure in the second, and usage guidance in the third. It is concise and every sentence adds value. It could be slightly tighter by merging the first two, but it is well-structured and not verbose.

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

Completeness4/5

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

Given the tool's moderate complexity (3 optional parameters, an output schema, and several siblings), the description is complete. It explains what the tool returns, when to use it, and the merging semantics. The output schema covers return details, so the description doesn't need to repeat them exhaustively. It covers the key contextual points an agent needs 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 description coverage is 100%, so each parameter is already well-documented in the input schema. The description does not add syntax or format details for the parameters, but it does reference config_path and 'inline config overrides' in the context of merging, which reinforces their role. This meets the baseline of 3 for high schema coverage; no additional compensation is needed.

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 ('Return') and a precise resource ('commit-check rules that are in effect after merging...'). It clearly distinguishes this describe tool from the sibling validate_* tools, which perform validation actions rather than describing rules. The merging behavior is explicitly articulated, leaving no ambiguity about what is returned.

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 final sentence gives explicit when-to-use guidance: 'Use this before writing a commit message or branch name to learn the expected format instead of guessing, and to debug why a validation failed or was skipped.' This tells the agent exactly the scenario for this tool versus the validation siblings, and even mentions the alternative of guessing. It effectively routes the agent to the right tool.

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

server_healthServer healthA
Read-onlyIdempotent

Return server and dependency versions. Read-only, no side effects.

Returns {server, server_version, commit_check_version, mcp_sdk_version}. Useful as a first call to verify the server is running and to check version compatibility.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this with 'Read-only, no side effects' and adds the return shape, which is useful. It doesn't contradict annotations and provides the exact returned fields, going beyond the annotation set.

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 concise sentences. The first states the core action, the second describes the return and the primary use case. No filler, perfectly 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?

For a zero-parameter health-check tool with a comprehensive annotation set and an output schema, the description fully covers what an agent needs: what it returns, when to call it, and that it's safe. Nothing essential 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?

The tool has zero parameters, so the description does not need to explain parameter semantics. The baseline of 4 is appropriate because there is nothing to clarify; the schema is empty and the description correctly focuses on output.

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 clearly states the tool's function: 'Return server and dependency versions.' It specifies a concrete verb and resource, and the 'Useful as a first call to verify the server is running' clarifies its purpose. The sibling tools are all validation-focused, so this stands apart as a health check.

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 gives explicit use context: 'Useful as a first call to verify the server is running and to check version compatibility.' It doesn't explicitly say when not to use it or name alternatives, but given the sibling set is entirely validation tools, the intended use is clear. A slight gap is the lack of explicit exclusions.

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

validate_author_infoValidate author infoA
Read-onlyIdempotent

Validate a commit author's name and/or email against the configured rules (e.g. allowed email domains, name patterns). Read-only.

Returns {status, warnings, checks[]}. status is 'pass', 'fail' or 'skip': only 'fail' is a rejection; 'skip' means every check skipped, so nothing was validated and the result is not approval. warnings is the number of checks with status 'warn'. Each check has: rule_id (stable rule id, e.g. 'CC001'); check (rule name, e.g. 'message'); status 'pass' | 'fail' | 'warn' | 'skip' ('warn' = the config lists the check under warn, so the finding is reported without failing the run; 'skip' = the rule did not run, e.g. the author is in ignore_authors or there was nothing to check); value (what was checked); error (why it failed); suggest (advice for a person); fix (the corrected value when the correction is unambiguous, else ''); docs_url (documentation for the rule). On 'fail', apply a non-empty fix verbatim; when fix is '', rewrite following suggest; then validate again.

Use this to check author metadata before committing. Only the values you pass are checked; if neither is given, both are read from repo_path's git config (falling back to the latest commit) and repo_path must be a git repository. For combined validation use validate_commit_context.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNoInline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {"warn": ["message"]} or {"commit": {"require_body": true}}.
repo_pathNoPath to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory.
author_nameNoAuthor name to validate, e.g. 'Alice Example'. Omit to read it from repo_path (git config user.name, falling back to the latest commit's author). Must be non-empty when provided.
config_pathNoPath to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path.
author_emailNoAuthor email to validate, e.g. 'alice@example.com'. Omit to read it from repo_path (git config user.email, falling back to the latest commit's author). Must be non-empty when provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description's 'Read-only' matches those. Beyond that, it discloses substantial behavioral detail: the full {status, warnings, checks[]} return contract, precise semantics of 'fail' (the only rejection) vs 'skip' (not approval), per-check field meanings, and the exact remediation protocol ('On fail, apply a non-empty fix verbatim; when fix is '', rewrite following suggest; then validate again'). This goes well beyond what annotations provide.

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

Conciseness4/5

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

The description is long, but every block earns its place: core purpose first, then the return contract, then usage/omission behavior, then the sibling pointer. The status/check-field detail is dense but essential for correct result interpretation. It could trim some redundancy (e.g. the 'skip' semantics are restated in both the status line and the check field description), but it remains front-loaded and logically ordered.

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?

Despite an output schema existing, the description explains the return contract anyway, which adds agent value by interpreting status meanings and the warn/skip/ignore semantics. For a zero-required-param tool with 5 optional params and complex fallback behavior, the description covers purpose, return format, remediation, parameter omission, repo requirements, and routing. 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. The description adds real interaction semantics beyond the schema: it explains that only passed values are checked, that omitting both author_name and author_email causes reads from repo_path's git config with fallback to the latest commit, and that repo_path must be a git repository. This cross-parameter behavior is exactly what an agent needs and is not in the individual parameter descriptions.

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 verb+resource pair ('Validate a commit author's name and/or email against the configured rules'), names concrete rule types (allowed email domains, name patterns), and explicitly differentiates from validate_commit_context ('For combined validation use validate_commit_context'). An agent can immediately tell this tool apart from its seven siblings 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 Guidelines4/5

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

It states when to use the tool ('Use this to check author metadata before committing'), clarifies the crucial parameter-omission behavior (values read from repo_path's git config, falling back to the latest commit), and names the one alternative for combined validation. It could more explicitly enumerate exclusions for the other siblings (validate_commit_message, validate_branch_name), but the names plus the combined-validation pointer give adequate routing guidance.

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

validate_branch_nameValidate branch nameA
Read-onlyIdempotent

Validate a branch name against the configured naming convention (e.g. feature/, bugfix/) and, when configured, that the branch is based on the required merge base. Read-only.

Returns {status, warnings, checks[]}. status is 'pass', 'fail' or 'skip': only 'fail' is a rejection; 'skip' means every check skipped, so nothing was validated and the result is not approval. warnings is the number of checks with status 'warn'. Each check has: rule_id (stable rule id, e.g. 'CC001'); check (rule name, e.g. 'message'); status 'pass' | 'fail' | 'warn' | 'skip' ('warn' = the config lists the check under warn, so the finding is reported without failing the run; 'skip' = the rule did not run, e.g. the author is in ignore_authors or there was nothing to check); value (what was checked); error (why it failed); suggest (advice for a person); fix (the corrected value when the correction is unambiguous, else ''); docs_url (documentation for the rule). On 'fail', apply a non-empty fix verbatim; when fix is '', rewrite following suggest; then validate again.

Use this before creating or pushing a branch. Omit branch to check the branch currently checked out in repo_path. For combined message+branch+author validation use validate_commit_context.

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNoBranch name to validate, e.g. 'feature/login'. Omit to validate the branch currently checked out in repo_path, which must then be a git repository. Must be non-empty when provided.
configNoInline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {"warn": ["message"]} or {"commit": {"require_body": true}}.
repo_pathNoPath to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory.
config_pathNoPath to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses the exact return semantics (pass/fail/skip), explains that 'skip' is not approval, and details the required action on failure (apply fix verbatim or rewrite per suggest and revalidate). This goes well beyond the annotations to fully inform the agent of 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?

The description is somewhat lengthy and repeats the status/check field definitions, but it is well organized into purpose, return format, and usage guidance. Every section carries necessary information, so the length is justified, though it could be tightened without losing clarity.

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?

It provides a complete picture: what the tool does, how the result is structured, how to interpret statuses and check fields, and what action to take upon failure. It also tells the agent when to use it and when to use the alternative, leaving no critical gaps 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?

The schema already provides detailed descriptions for all four parameters, covering the branch omission behavior and config merging. The description adds useful context about the naming convention and merge-base check, but does not substantially extend the schema. Given the high schema coverage, this is above the baseline but not exceptional.

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 clearly states the specific action: validate a branch name against a configured naming convention and optionally a merge-base requirement. It also explicitly differentiates from the sibling validate_commit_context, which handles combined message+branch+author validation, so an agent can immediately understand the tool's scope.

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 gives explicit timing guidance: 'Use this before creating or pushing a branch.' It also clarifies when to omit the branch parameter (current checked-out branch) and points to validate_commit_context for combined validation, making the choice between tools unambiguous.

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

validate_commit_contextValidate commit contextA
Read-onlyIdempotent

Run the commit message, branch name and author checks together in one call, for whichever of message, branch, author_name and author_email you pass. Read-only.

Returns {status, warnings, checks[]}. status is 'pass', 'fail' or 'skip': only 'fail' is a rejection; 'skip' means every check skipped, so nothing was validated and the result is not approval. warnings is the number of checks with status 'warn'. Each check has: rule_id (stable rule id, e.g. 'CC001'); check (rule name, e.g. 'message'); status 'pass' | 'fail' | 'warn' | 'skip' ('warn' = the config lists the check under warn, so the finding is reported without failing the run; 'skip' = the rule did not run, e.g. the author is in ignore_authors or there was nothing to check); value (what was checked); error (why it failed); suggest (advice for a person); fix (the corrected value when the correction is unambiguous, else ''); docs_url (documentation for the rule). On 'fail', apply a non-empty fix verbatim; when fix is '', rewrite following suggest; then validate again.

Use this to validate several aspects of a commit you are about to make with a single call. At least one of message, branch, author_name or author_email is required; omitted aspects are not checked. For one aspect use validate_commit_message, validate_branch_name or validate_author_info; for the commit already at HEAD use validate_repository_state.

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNoBranch name to validate, e.g. 'feature/login'. Omit to validate the branch currently checked out in repo_path, which must then be a git repository. Must be non-empty when provided.
configNoInline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {"warn": ["message"]} or {"commit": {"require_body": true}}.
messageNoCommit message text to validate: subject line, optional blank line, body. Omit to skip the message checks. Must be non-empty when provided.
repo_pathNoPath to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory.
author_nameNoAuthor name to validate, e.g. 'Alice Example'. Omit to read it from repo_path (git config user.name, falling back to the latest commit's author). Must be non-empty when provided.
config_pathNoPath to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path.
author_emailNoAuthor email to validate, e.g. 'alice@example.com'. Omit to read it from repo_path (git config user.email, falling back to the latest commit's author). Must be non-empty when provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

The description explains the return structure, the meaning of statuses (pass/fail/warn/skip), and the required action on 'fail' (apply fix verbatim or rewrite based on suggest). It also mentions config merging and read-only behavior, adding depth beyond the readOnlyHint annotation. 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.

Conciseness5/5

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

The description is detailed but tightly organized; it front-loads the core purpose, then explains the output structure, then provides usage guidance and sibling alternatives. Every sentence adds essential information without redundancy.

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?

The tool is complex (multiple parameter combinations, output schema, config handling, and follow-up instructions), and the description covers all necessary aspects: what it validates, how to use it, what the output means, and what to do next. It is self-sufficient for an agent to invoke correctly.

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?

Each of the 7 parameters is described with examples, defaults, and fallback behavior (e.g., author_name falls back to git config or latest commit). The schema coverage is 100%, and the description clarifies how omitting parameters affects validation.

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 clearly states it runs commit message, branch name, and author checks together in a single call, distinguishing it from single-aspect siblings and the repository-state validator. The scope is precise and action-oriented.

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 indicates when to use this tool (multiple aspects) and when to use alternatives (validate_commit_message, validate_branch_name, validate_author_info, validate_repository_state). Also states that at least one parameter is required and omitted aspects are not checked.

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

validate_commit_messageValidate commit messageA
Read-onlyIdempotent

Validate a commit message against commit-check rules (Conventional Commits type and format, subject length and case, body, sign-off, WIP/fixup markers, AI attribution: whatever the effective config enables). Read-only; touches no git state.

Returns {status, warnings, checks[]}. status is 'pass', 'fail' or 'skip': only 'fail' is a rejection; 'skip' means every check skipped, so nothing was validated and the result is not approval. warnings is the number of checks with status 'warn'. Each check has: rule_id (stable rule id, e.g. 'CC001'); check (rule name, e.g. 'message'); status 'pass' | 'fail' | 'warn' | 'skip' ('warn' = the config lists the check under warn, so the finding is reported without failing the run; 'skip' = the rule did not run, e.g. the author is in ignore_authors or there was nothing to check); value (what was checked); error (why it failed); suggest (advice for a person); fix (the corrected value when the correction is unambiguous, else ''); docs_url (documentation for the rule). On 'fail', apply a non-empty fix verbatim; when fix is '', rewrite following suggest; then validate again.

Use this when you have one commit message string to check before committing. To check message, branch and author in one call use validate_commit_context; to check the latest commit already in a repository use validate_repository_state.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNoInline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {"warn": ["message"]} or {"commit": {"require_body": true}}.
messageYesFull commit message text to validate: subject line, optional blank line, body (and trailers such as Signed-off-by). Must be non-empty.
repo_pathNoPath to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory.
config_pathNoPath to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations carry readOnlyHint/idempotentHint/destructiveHint, and the description reinforces them ('Read-only; touches no git state'). It goes far beyond annotations by explaining the full return semantics: status values with the critical 'skip ≠ approval' distinction, warn-vs-skip meanings, every check field, and the actionable workflow (apply fix verbatim, else follow suggest, then re-validate). Rich and non-redundant.

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?

Well-structured and front-loaded with purpose, then rules list, then result semantics, then routing. The return-format explanation is long and somewhat redundant given an output schema exists, though the semantic interpretation (skip is not approval, warn vs skip) adds value the schema structure alone may not convey. Each section earns its place but the whole is dense.

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?

Complete for a validation tool with 4 params and an output schema. It explains when to call it, what it returns, how to interpret results, and how to act on failures. An output schema covers the return structure, so the description's job is routing + semantics, both fully handled. 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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description relates the config parameter to effective behavior ('whatever the effective config enables') but adds little parameter-specific syntax beyond the schema. The schema already documents config overrides, repo_path and config_path lookup, so the description rightly leaves this to 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+resource ('Validate a commit message against commit-check rules') and enumerates the rule families checked (Conventional Commits type/format, subject length/case, body, sign-off, WIP/fixup, AI attribution). It distinguishes itself from siblings by explicitly scoping to a single message string, which separates it from validate_commit_context and validate_repository_state.

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 when-to-use directive ('Use this when you have one commit message string to check before committing') and names the two alternatives with their exact conditions: validate_commit_context for message+branch+author in one call, validate_repository_state for a latest commit already in a repo. No inference required.

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

validate_push_safetyValidate push safetyA
Idempotent

Check that a pending push is not a force push (rule CC301, no_force_push): fails when a remote_sha is not an ancestor of its local_sha, i.e. the push would rewrite remote history. Leaves your working tree and commits untouched, but may run git fetch <remote> <ref> to resolve SHAs, which updates FETCH_HEAD and remote-tracking refs. A SHA that cannot be resolved even then is a tool error, never a pass. Force pushes are always rejected by this tool; push.allow_force_push in config cannot re-enable them here.

Returns {status, warnings, checks[]}. status is 'pass', 'fail' or 'skip': only 'fail' is a rejection; 'skip' means every check skipped, so nothing was validated and the result is not approval. warnings is the number of checks with status 'warn'. Each check has: rule_id (stable rule id, e.g. 'CC001'); check (rule name, e.g. 'message'); status 'pass' | 'fail' | 'warn' | 'skip' ('warn' = the config lists the check under warn, so the finding is reported without failing the run; 'skip' = the rule did not run, e.g. the author is in ignore_authors or there was nothing to check); value (what was checked); error (why it failed); suggest (advice for a person); fix (the corrected value when the correction is unambiguous, else ''); docs_url (documentation for the rule). On 'fail', apply a non-empty fix verbatim; when fix is '', rewrite following suggest; then validate again.

Call this before git push. Only the no_force_push rule runs. When it fails there is no automatic fix (fix is ''): follow suggest, i.e. push without --force/--force-with-lease or rebase onto the remote first, then validate again.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNoInline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {"warn": ["message"]} or {"commit": {"require_body": true}}.
push_refsNoRefs about to be pushed, in git pre-push hook stdin format, one ref per line: '<local_ref> <local_sha> <remote_ref> <remote_sha>', e.g. 'refs/heads/main 1a2b3c... refs/heads/main 9f8e7d...'. A remote_sha of 40 zeros means a new branch (never a force push). Every other SHA must resolve to a commit in repo_path (the check runs git merge-base and may fetch the remote ref first); a SHA that still cannot be resolved is a tool error, not a pass, so fetch it first. Omit to check the current branch of repo_path against its upstream instead. Must be non-empty when provided.
repo_pathNoPath to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory.
config_pathNoPath to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses a side effect not captured by annotations: 'may run `git fetch <remote> <ref>` to resolve SHAs, which updates FETCH_HEAD and remote-tracking refs.' It also states that force pushes are always rejected regardless of config, and that a SHA that cannot be resolved is a tool error, never a pass. These details go well beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) and give the agent accurate expectations of side effects and failure semantics.

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 long but every sentence adds necessary information. It is front-loaded with the core purpose, then covers side effects, return schema, and usage notes in a logical order. It avoids fluff and repetition, making the length justified by the complexity of the tool (non-trivial statuses, warn/skip semantics, and fix handling).

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 goes beyond it to explain the meaning of status values ('only fail is a rejection', 'skip means nothing was validated'), warn vs skip semantics, and the fix/suggest handling. It also covers edge cases (unresolvable SHAs, force push always rejected, config cannot re-enable). Together with the schema, an agent has everything needed to call the tool correctly and interpret results.

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 has 100% description coverage with detailed explanations for every parameter (config, push_refs, repo_path, config_path), including formats, defaults, and behaviors. The tool description itself does not add parameter-specific meaning beyond referencing the rule logic; it focuses on behavior and return format. Since the schema already carries the parameter documentation, a baseline score of 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?

The description states a specific verb and resource: 'Check that a pending push is not a force push' with the exact rule ID (CC301, no_force_push). It clearly distinguishes this tool from the sibling validators (validate_commit_message, validate_branch_name, etc.) by focusing exclusively on push safety, and even notes 'Only the no_force_push rule runs.' This leaves no ambiguity about what the tool does.

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 explicitly instructs 'Call this before `git push`.' It also clarifies when the tool is not a pass: 'skip' means nothing was validated and the result is not approval. It explains the failure path (no automatic fix, follow suggest) and the requirement to fetch unresolvable SHAs first. This provides clear when-to-use and edge-case handling beyond the schema.

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

validate_repository_stateValidate repository stateA
Idempotent

Validate what is already in a local git repository: the latest commit's message and author, the checked-out branch name and, optionally, whether pushing that branch to its upstream would be a force push. Leaves the working tree and commits untouched; the push check may run git fetch, which updates FETCH_HEAD and remote-tracking refs.

Returns {status, warnings, checks[]}. status is 'pass', 'fail' or 'skip': only 'fail' is a rejection; 'skip' means every check skipped, so nothing was validated and the result is not approval. warnings is the number of checks with status 'warn'. Each check has: rule_id (stable rule id, e.g. 'CC001'); check (rule name, e.g. 'message'); status 'pass' | 'fail' | 'warn' | 'skip' ('warn' = the config lists the check under warn, so the finding is reported without failing the run; 'skip' = the rule did not run, e.g. the author is in ignore_authors or there was nothing to check); value (what was checked); error (why it failed); suggest (advice for a person); fix (the corrected value when the correction is unambiguous, else ''); docs_url (documentation for the rule). On 'fail', apply a non-empty fix verbatim; when fix is '', rewrite following suggest; then validate again.

Use this to check a repository's current state in one call, e.g. after committing and before pushing, or in a hook. The include_* flags select the checks; at least one must be true. To validate values that are not yet committed use validate_commit_context or the single-aspect tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNoInline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {"warn": ["message"]} or {"commit": {"require_body": true}}.
repo_pathNoPath to the git repository to inspect; its cchk.toml or commit-check.toml is loaded and a relative config_path is resolved from it. Omit to use the server's working directory, which must then be a git repository.
config_pathNoPath to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path.
include_pushNoAlso check that pushing the current branch to its upstream would not be a force push; may run git fetch (updating FETCH_HEAD), and passes when the branch has no upstream. Default false.
include_authorNoValidate the author name and email of the latest commit (falling back to git config user.name/user.email). Default true.
include_branchNoValidate the name of the currently checked-out branch. Default true.
include_messageNoValidate the message of the latest commit (HEAD). Default true.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the tool is not purely read-only. The description clarifies the exact side effect: the push check 'may run git fetch, which updates FETCH_HEAD and remote-tracking refs', while 'leaves the working tree and commits untouched'. It also explains the nuanced status semantics ('skip' is not approval) that annotations cannot convey.

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

Conciseness4/5

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

The description is organized into three logical paragraphs (scope/side effects, return format, usage guidance), and every sentence contributes substantive information. It is somewhat long but not bloated, and the key operational facts (side effects, skip semantics, alternative tools) are 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?

Even though an output schema exists, the description adds critical operational context: the meaning of 'fail' vs 'skip', the advice to 'apply a non-empty fix verbatim', the note about FETCH_HEAD side effects, and the requirement that at least one include_* flag be true. Together these make the tool safely callable without ambiguity.

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 all seven parameters. The tool description adds no parameter-specific meaning beyond what the schema provides, only a high-level note that include_* flags select checks. Per the rubric, baseline 3 applies when the schema carries 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?

The description states a specific verb ('validate') with a clear resource ('local git repository') and enumerates the exact aspects validated (latest commit message/author, checked-out branch, optional push safety). It explicitly differentiates itself from single-aspect siblings by noting it checks 'current state in one call' and later tells the agent to use validate_commit_context or single-aspect tools for uncommitted values.

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?

Provides explicit when-to-use guidance: 'after committing and before pushing, or in a hook', and names the alternatives when not to use it ('To validate values that are not yet committed use validate_commit_context or the single-aspect tools'). It also states the constraint that at least one include_* flag must be true, which is not in the schema.

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. 7 tool updatesv0.1.10
    • Changeddescribe_validation_rules3 fields changed
      • addedInput schema / properties / config / description
        Added value: +"Inline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {\"warn\": [\"message\"]} or {\"commit\": {\"require_body\": true}}."
      • addedInput schema / properties / config_path / description
        Added value: +"Path to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path."
      • addedInput schema / properties / repo_path / description
        Added value: +"Path to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory."
    • Changedvalidate_author_info5 fields changed
      • addedInput schema / properties / author_email / description
        Added value: +"Author email to validate, e.g. 'alice@example.com'. Omit to read it from repo_path (git config user.email, falling back to the latest commit's author). Must be non-empty when provided."
      • addedInput schema / properties / author_name / description
        Added value: +"Author name to validate, e.g. 'Alice Example'. Omit to read it from repo_path (git config user.name, falling back to the latest commit's author). Must be non-empty when provided."
      • addedInput schema / properties / config / description
        Added value: +"Inline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {\"warn\": [\"message\"]} or {\"commit\": {\"require_body\": true}}."
      • addedInput schema / properties / config_path / description
        Added value: +"Path to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path."
      • addedInput schema / properties / repo_path / description
        Added value: +"Path to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory."
    • Changedvalidate_branch_name4 fields changed
      • addedInput schema / properties / branch / description
        Added value: +"Branch name to validate, e.g. 'feature/login'. Omit to validate the branch currently checked out in repo_path, which must then be a git repository. Must be non-empty when provided."
      • addedInput schema / properties / config / description
        Added value: +"Inline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {\"warn\": [\"message\"]} or {\"commit\": {\"require_body\": true}}."
      • addedInput schema / properties / config_path / description
        Added value: +"Path to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path."
      • addedInput schema / properties / repo_path / description
        Added value: +"Path to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory."
    • Changedvalidate_commit_context7 fields changed
      • addedInput schema / properties / author_email / description
        Added value: +"Author email to validate, e.g. 'alice@example.com'. Omit to read it from repo_path (git config user.email, falling back to the latest commit's author). Must be non-empty when provided."
      • addedInput schema / properties / author_name / description
        Added value: +"Author name to validate, e.g. 'Alice Example'. Omit to read it from repo_path (git config user.name, falling back to the latest commit's author). Must be non-empty when provided."
      • addedInput schema / properties / branch / description
        Added value: +"Branch name to validate, e.g. 'feature/login'. Omit to validate the branch currently checked out in repo_path, which must then be a git repository. Must be non-empty when provided."
      • addedInput schema / properties / config / description
        Added value: +"Inline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {\"warn\": [\"message\"]} or {\"commit\": {\"require_body\": true}}."
      • addedInput schema / properties / config_path / description
        Added value: +"Path to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path."
      • addedInput schema / properties / message / description
        Added value: +"Commit message text to validate: subject line, optional blank line, body. Omit to skip the message checks. Must be non-empty when provided."
      • addedInput schema / properties / repo_path / description
        Added value: +"Path to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory."
    • Changedvalidate_commit_message4 fields changed
      • addedInput schema / properties / config / description
        Added value: +"Inline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {\"warn\": [\"message\"]} or {\"commit\": {\"require_body\": true}}."
      • addedInput schema / properties / config_path / description
        Added value: +"Path to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path."
      • addedInput schema / properties / message / description
        Added value: +"Full commit message text to validate: subject line, optional blank line, body (and trailers such as Signed-off-by). Must be non-empty."
      • addedInput schema / properties / repo_path / description
        Added value: +"Path to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory."
    • Changedvalidate_push_safety4 fields changed
      • addedInput schema / properties / config / description
        Added value: +"Inline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {\"warn\": [\"message\"]} or {\"commit\": {\"require_body\": true}}."
      • addedInput schema / properties / config_path / description
        Added value: +"Path to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path."
      • addedInput schema / properties / push_refs / description
        Added value: +"Refs about to be pushed, in git pre-push hook stdin format, one ref per line: '<local_ref> <local_sha> <remote_ref> <remote_sha>', e.g. 'refs/heads/main 1a2b3c... refs/heads/main 9f8e7d...'. A remote_sha of 40 zeros means a new branch (never a force push). Every other SHA must resolve to a commit in repo_path (the check runs git merge-base and may fetch the remote ref first); a SHA that still cannot be resolved is a tool error, not a pass, so fetch it first. Omit to check the current branch of repo_path against its upstream instead. Must be non-empty when provided."
      • addedInput schema / properties / repo_path / description
        Added value: +"Path to the git repository to validate against. Its cchk.toml or commit-check.toml (also looked up under .github/) is loaded, and a relative config_path is resolved from it. Omit to use the server's working directory."
    • Changedvalidate_repository_state7 fields changed
      • addedInput schema / properties / config / description
        Added value: +"Inline commit-check config overrides as a JSON object, merged on top of the built-in defaults and any config file, e.g. {\"warn\": [\"message\"]} or {\"commit\": {\"require_body\": true}}."
      • addedInput schema / properties / config_path / description
        Added value: +"Path to a commit-check TOML config file, used instead of the repository's own cchk.toml/commit-check.toml; a relative path is resolved from repo_path."
      • addedInput schema / properties / include_author / description
        Added value: +"Validate the author name and email of the latest commit (falling back to git config user.name/user.email). Default true."
      • addedInput schema / properties / include_branch / description
        Added value: +"Validate the name of the currently checked-out branch. Default true."
      • addedInput schema / properties / include_message / description
        Added value: +"Validate the message of the latest commit (HEAD). Default true."
      • addedInput schema / properties / include_push / description
        Added value: +"Also check that pushing the current branch to its upstream would not be a force push; may run git fetch (updating FETCH_HEAD), and passes when the branch has no upstream. Default false."
      • addedInput schema / properties / repo_path / description
        Added value: +"Path to the git repository to inspect; its cchk.toml or commit-check.toml is loaded and a relative config_path is resolved from it. Omit to use the server's working directory, which must then be a git repository."
  2. 8 tool updatesv0.1.0
    • First observeddescribe_validation_rules
    • First observedserver_health
    • First observedvalidate_author_info
    • First observedvalidate_branch_name
    • First observedvalidate_commit_context
    • First observedvalidate_commit_message
    • First observedvalidate_push_safety
    • First observedvalidate_repository_state

TDQS

A4.4/5.0

Scored across 8 tools

Disambiguation4/5

Each tool targets a distinct validation target (message, branch, author, push) and the descriptions explicitly cross-reference each other with 'use this when...' guidance. There is genuine conceptual overlap among validate_commit_message, validate_commit_context, and validate_repository_state, but the descriptions clearly separate pre-commit values vs already-committed state, keeping misselection risk low.

Naming Consistency4/5

Six of eight tools share the predictable validate_* prefix in snake_case, forming a strong family pattern. server_health and describe_validation_rules break the pattern but represent distinct operation types (health and introspection), which is a minor and justifiable deviation.

Tool Count4/5

Eight tools for a commit-validation server is within the well-scoped range. The single-aspect validators (message, branch, author) are partially subsumed by validate_commit_context, creating slight redundancy, but each earns its place for targeted single-aspect checks, so the count is reasonable.

Completeness4/5

The surface covers the full validation workflow: rule discovery (describe_validation_rules), pre-commit validation (message, branch, author, combined), post-commit state checks, and push safety. Minor gaps exist such as no multi-commit or range validation and no fix-application tool, but no critical dead ends for the stated purpose.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers