minqual
Verifies C++ source files: compiles them with g++/c++ (or a configured toolchain) and optionally runs focused tests, returning static findings as part of a code-quality gate.
Verifies JavaScript source files using Node.js, compiling/running the provided files and optional focused tests and returning static findings.
Verifies C# source files via the .NET SDK (dotnet, .NET 8+), compiling and running optional focused tests and returning static findings.
Verifies PHP source files using the php toolchain, with optional focused tests and static findings.
Verifies Python source files, compiling and running optional focused tests and returning static findings.
Verifies Rust source files by compiling with rustc (and a working linker) and running optional focused tests, returning static findings.
Verifies TypeScript source files using Node.js and tsc, running an optional focused test suite and returning static findings.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@minqualcheck my edited Python files and run the focused tests"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
PATHfor 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 -vInstall the skill
Copy the skill folder into the location your client scans. The folder is skills/minqual.
Client | User scope | Project scope |
OpenCode |
|
|
Claude Code |
|
|
Codex |
|
|
Antigravity CLI |
|
|
Antigravity IDE |
|
|
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 listClaude Code
Add a user-scoped stdio server:
claude mcp add --scope user minqual -- minqual-mcp
claude mcp listFor 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 listCodex 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 |
|
JavaScript |
|
TypeScript |
|
Java |
|
C# |
|
C |
|
C++ |
|
Go |
|
Rust |
|
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 theminqualserver 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 theminqualserver 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 aspy,js,ts, orcpp.files: an object mapping relative paths to complete file contents.tests: optional files for a self-contained runner andcases.tsv. The skill knows the convention and can create focused cases.mode:fullcompiles and runs the supplied tests;staticonly 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 toolcheckA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | full | |
| files | Yes | ||
| tests | No | ||
| language | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.1.0- First observed
check
TDQS
Scored across 1 tool
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.
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.
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.
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
Related MCP Connectors
- mcp-serverOAuthai.cdbx
Build Apps and run code in 30 languages — sandboxed, with persistent sessions for agent loops.
QA platform for agents: coverage signals, in-repo test plans, verified tests and release governance.
Change-aware CI validation and affected-test guidance for coding agents.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to scan code for security and quality issues and receive machine-readable reports with suggested fixes and verification criteria.53 npm2MIT
- AlicenseAqualityBmaintenanceEnables 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.103 npmMIT
- AlicenseAqualityBmaintenanceProvides 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.427 PyPIApache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables 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