Skip to main content
Glama

MinQual

MinQual is a verification-first code-quality skill and MCP server for coding agents. It makes the agent check its own work in ten languages before saying the task is done.

Русская версия

What is inside

  • Skill: a short quality gate, edge-case checklist, focused-test habit, and language references for Python, JavaScript, TypeScript, Java, C#, C, C++, Go, Rust, and PHP.

  • MCP server minqual: one tool, check. It compiles supplied files, runs optional focused tests, and returns static findings. It also checks input limits, path safety, build-control files, and timeouts.

  • Benchmark note: docs/BENCHMARK.md. In the 240-run benchmark, the skill reduced hidden-test failures by 65.6% and the MCP by 56.0%. The composite score was near its ceiling and grew 3.3% and 3.0%.

MinQual is not a full project build system. It is a small, deterministic feedback loop for the files the agent is about to return.

Related MCP server: Checkride

Requirements

  • Python 3.11 or newer.

  • uv or pipx for the MCP command.

  • At least one language toolchain on PATH for the languages you use. See docs/TOOLCHAINS.md.

Install

git clone https://github.com/akley-design/MinQual.git
cd MinQual
uv tool install .

Or install from GitHub directly:

uv tool install "git+https://github.com/akley-design/MinQual.git"

The command minqual-mcp must be on PATH in every client that launches the MCP server. Check it with where minqual-mcp on Windows or command -v minqual-mcp on macOS and Linux.

For development, use a checkout:

git clone https://github.com/akley-design/MinQual.git
cd MinQual
uv venv
uv pip install -e .
PYTHONPATH=src python -m unittest discover -s tests -v

Install the skill

Copy the skill folder into the location your client scans. The folder is skills/minqual.

Client

User scope

Project scope

OpenCode

~/.config/opencode/skills/minqual

.opencode/skills/minqual

Claude Code

~/.claude/skills/minqual

.claude/skills/minqual

Codex

~/.agents/skills/minqual

.agents/skills/minqual

Antigravity CLI

~/.gemini/antigravity-cli/skills/minqual

.agents/skills/minqual

Antigravity IDE

~/.gemini/config/skills/minqual

.agents/skills/minqual

On macOS or Linux:

mkdir -p ~/.config/opencode/skills ~/.claude/skills ~/.agents/skills ~/.gemini/antigravity-cli/skills
cp -r skills/minqual ~/.config/opencode/skills/
cp -r skills/minqual ~/.claude/skills/
cp -r skills/minqual ~/.agents/skills/
cp -r skills/minqual ~/.gemini/antigravity-cli/skills/

On Windows PowerShell:

$skill = ".\skills\minqual"
Copy-Item -Recurse -Force $skill "$HOME\.config\opencode\skills\minqual"
Copy-Item -Recurse -Force $skill "$HOME\.claude\skills\minqual"
Copy-Item -Recurse -Force $skill "$HOME\.agents\skills\minqual"
Copy-Item -Recurse -Force $skill "$HOME\.gemini\antigravity-cli\skills\minqual"

Restart the client, or open a new session, so it reloads the skill directory.

Connect the MCP

The server is a local stdio server. The command is minqual-mcp; it takes no arguments. All snippets below assume the command is on PATH.

OpenCode

Edit ~/.config/opencode/opencode.jsonc and add a local server under mcp:

{
  "mcp": {
    "minqual": {
      "type": "local",
      "command": ["minqual-mcp"],
      "enabled": true,
      "timeout": 120000
    }
  }
}

Verify:

opencode mcp list

Claude Code

Add a user-scoped stdio server:

claude mcp add --scope user minqual -- minqual-mcp
claude mcp list

For a project-scoped server, add .mcp.json at the repository root:

{
  "mcpServers": {
    "minqual": {
      "type": "stdio",
      "command": "minqual-mcp",
      "args": []
    }
  }
}

Approve the project server when Claude Code asks.

Codex

Add the server with the CLI:

codex mcp add minqual -- minqual-mcp
codex mcp list

Codex writes a mcp_servers table to ~/.codex/config.toml:

[mcp_servers.minqual]
command = "minqual-mcp"
args = []

Codex looks for skills in ~/.agents/skills and .agents/skills. After the skill is installed, invoke it with $minqual or select it in the skill picker, depending on your Codex version.

Google Antigravity CLI

Antigravity reads local servers from mcpServers. It does not use a type field.

Global config, ~/.gemini/config/mcp_config.json:

{
  "mcpServers": {
    "minqual": {
      "command": "minqual-mcp",
      "args": []
    }
  }
}

Workspace config, .agents/mcp_config.json:

{
  "mcpServers": {
    "minqual": {
      "command": "minqual-mcp",
      "args": []
    }
  }
}

Use the /mcp command in Antigravity CLI to open the MCP manager and reload the server.

Toolchains

MinQual auto-detects toolchains on PATH:

Language

Command

Python

python

JavaScript

node

TypeScript

node and tsc

Java

javac and java (JDK 17+)

C#

dotnet (.NET SDK 8+)

C

gcc or cc

C++

g++ or c++

Go

go

Rust

rustc with a working linker

PHP

php

If a toolchain lives outside PATH, create a toolchains JSON file and point MINQUAL_TOOLCHAINS at it:

{
  "python": { "python": "/opt/python/bin/python3" },
  "javascript": { "node": "/usr/bin/node" },
  "typescript": { "node": "/usr/bin/node", "tsc": "/usr/lib/node_modules/typescript/lib/tsc.js" }
}

Pass the variable through the client:

  • OpenCode: add "env": {"MINQUAL_TOOLCHAINS": "/absolute/path/toolchains.json"} inside the minqual server object.

  • Claude Code: claude mcp add --scope user -e MINQUAL_TOOLCHAINS=/absolute/path/toolchains.json minqual -- minqual-mcp.

  • Codex: codex mcp add --env MINQUAL_TOOLCHAINS=/absolute/path/toolchains.json minqual -- minqual-mcp.

  • Antigravity: add "env": {"MINQUAL_TOOLCHAINS": "/absolute/path/toolchains.json"} inside the minqual server object.

The full schema and Windows notes are in docs/TOOLCHAINS.md.

Use

Ask the agent to do a code task. The skill description triggers on writing, fixing, reviewing, or refactoring code. If the MCP is connected, the agent can call check with the complete solution files and focused tests before it answers.

Example prompt:

Use MinQual to implement the CSV parser in src/parser.py, then check the result with the minqual tool before finishing.

The check tool accepts:

  • language: one of the ten supported languages or an alias such as py, js, ts, or cpp.

  • files: an object mapping relative paths to complete file contents.

  • tests: optional files for a self-contained runner and cases.tsv. The skill knows the convention and can create focused cases.

  • mode: full compiles and runs the supplied tests; static only returns source heuristics.

Limits: 20 files, 200 KB total, build and test timeouts, and relative paths inside a temporary workspace. Build-control files such as *.csproj and go.mod are rejected because the runner generates its own.

For full repository test suites, use the agent's native test and build tools. MinQual is the final gate for the files the agent is about to return.

Safety

MinQual compiles and runs code on your machine. It uses a temporary directory, a minimal environment, timeouts, size limits, and path validation. It does not provide a network or filesystem sandbox. Run only code you trust.

Benchmark

The benchmark note documents 240 runs across ten languages and two tasks with Muse Spark 1.2 and 1.3 Contributor. The skill cut the hidden-test failure rate from 6.42% to 2.21%, a 65.6% reduction. The MCP cut it to 2.83%, a 56.0% reduction. Composite scores were near the ceiling: 94.21 baseline, 97.31 with the skill, and 96.86 with the MCP.

The benchmark also found a real MCP regression: one C# final answer was syntactically broken after tool use. The skill was more stable than the MCP. Use the MCP as an optional feedback loop, not as a guarantee.

License

MIT. See LICENSE.

Available Tools

1 tool
checkA

Check code before finishing.

language: python, javascript, typescript, java, csharp, c, cpp, go, rust or php. files: relative path -> complete file content for solution files. tests: relative path -> complete content for a self-contained test runner and cases.tsv. mode: full compiles and runs the supplied tests; static only reports source heuristics.

Limits: 20 files, 200 KB total, 15-90s timeouts. Paths must stay inside a temporary workspace. Any build error, failing case, or high-severity finding is returned as JSON. Fix it and call again. Code is compiled and executed locally in a temporary directory with a minimal environment. There is no network or filesystem sandbox; run only trusted code.

NameRequiredDescriptionDefault
modeNofull
filesYes
testsNo
languageYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description must carry everything, and it does: hard limits (20 files, 200 KB, 15-90s timeouts), path confinement to a temp workspace, execution locally in a minimal environment, JSON-formatted failures, and the critical warning that there is no network or filesystem sandbox so only trusted code should be run. This is exactly the context an agent needs before invoking an execution tool.

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

Conciseness4/5

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

Purpose is front-loaded, then parameter semantics, then limits, then safety — a sensible order. The telegraphic fragment style ('language: python, javascript, ... or php.') is dense and every line earns its place, though the list-of-languages line is slightly awkward as prose.

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 an output schema exists, the description needn't detail return values, and it still flags that errors/findings come back as JSON. Limits, safety posture, and the retry loop are all covered. The remaining gap is the cases.tsv format, which is required for test execution but never specified.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does so: language is enumerated, files and tests are described as relative-path-to-complete-content maps, and tests additionally must include a self-contained runner and cases.tsv. mode is explained by contrasting the two behaviors. This is meaning well beyond the bare schema.

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

Purpose4/5

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

The definition states a specific action plus the underlying mechanism: it compiles/runs supplied tests and reports static heuristics on source, rather than merely 'checking'. The opening line 'Check code before finishing' is terse, but the following sentences make the operation unambiguous. With no sibling tools there is nothing to differentiate against, which caps the upside slightly.

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

Usage Guidelines4/5

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

It gives a clear usage trigger ('before finishing') and, importantly, the selection rule between the two modes: full compiles and runs tests, static only reports source heuristics. It also describes the remediation loop ('Fix it and call again'). It does not say when not to use the tool or when static alone is sufficient, so it stops short of full when/when-not guidance.

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. 1 tool updatev0.1.0
    • First observedcheck

TDQS

A4.4/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no possibility of confusing it with another operation. Its purpose is clearly to validate code before finishing.

Naming Consistency5/5

With a single tool named check, there is no naming convention to violate and consistency is trivially perfect. The name is simple and predictable, though not highly descriptive on its own.

Tool Count3/5

A single all-in-one check tool is thin for a code-validation server, but it may be appropriate because it bundles compilation, test execution, and static analysis behind one operation. The surface is borderline rather than clearly wrong.

Completeness4/5

The tool covers core validation workflows: compiling, running supplied tests, and reporting static findings across multiple languages. Minor gaps exist around richer diagnostics or remediation, but agents can work around them by fixing issues and calling check again.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI coding agents to run fast, sandboxed pre-flight validation—tests, type-checking, linting, security audits, Git safety scans, and fix suggestions—before committing or pushing code, with instant caching and optional Docker isolation.
    10
    3 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides structured, sandboxed test and lint feedback for coding agents, returning compact typed verdicts with failure fingerprints instead of raw runner output. It enables impact-selected test execution in isolated containers, distinguishing pre-existing failures from regressions.
    4
    27 PyPI
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables coding agents to run deterministic completeness audits on code before declaring 'done'—catching unwired modules, placebo tests, swallowed errors, and stubs via AST analysis, entirely offline and free.
    MIT