Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Runs Foundry tests and builds; returns compact, structured failures to AI coding agents
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"forge-test": {
"command": "npx",
"args": [
"-y",
"forge-test-mcp"
]
}
}
}Run this in your terminal
claude mcp add forge-test -- npx -y forge-test-mcpPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"forge-test": {
"command": "npx",
"args": [
"-y",
"forge-test-mcp"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"forge-test": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"forge-test-mcp"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account vschernoff, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.0) reached the registry 11 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Toggl 2.0
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Toggl 2.0 MCP server for tasks, projects, time entries, and workspace operations.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
An MCP server that runs Foundry's forge test and forge build and returns compact, structured results an AI coding agent can act on: for every failing test, its kind, the decoded reason, the fuzz counterexample or invariant call sequence, console logs and a short decoded trace. It speaks standard MCP over stdio and is meant for any MCP client (Claude Code, Codex, Cursor, Claude Desktop, Windsurf, …). So far it has been tested with an MCP test client, not yet inside each of those clients.
When forge did not run the tests (a compile error, no matching tests, a timeout, a missing or unsupported forge, …) the tool says so as an error. It never reports "0 failed" for tests that did not run.
Status: 0.1.0, the first release. See CHANGELOG.md for what is in it
and what is not yet verified.
forge test executes the project's Solidity with your user's rights. Use this server only on projects you would test in a terminal yourself.--allow-ffi, even when foundry.toml enables it. forge runs with --offline, but tests can still reach the network themselves, for example through fork cheatcodes.Details in Security and trust.
forge 1.8.5 or a later 1.8.x. You install it; this server never installs or updates anything. Newer versions run but are flagged as untested.forge build in a terminal first. The server runs forge with --offline, so it cannot download solc itself.Start the server in your Foundry project (the directory with foundry.toml, or below it). Most clients accept this mcpServers entry:
{
"mcpServers": { "forge-test": { "command": "npx", "args": ["-y", "forge-test-mcp@0.1.0"] } } }
Pin an exact version, as above. Client shortcuts, from each vendor's documentation (checked 2026-10-23, not yet verified by running each client):
.mcp.json at the project root. In interactive sessions Claude Code asks you to approve project servers the first time..cursor/mcp.json, adding "type": "stdio" to the server entry..codex/config.toml (loaded for trusted projects only) or ~/.codex/config.toml: [mcp_servers.forge-test]
command = "npx" args = ["-y", "forge-test-mcp@0.1.0"]
The image contains the server and forge 1.8.6, the official static Alpine build. The build checks the download against pinned SHA-256 digests; those digests were taken from the release's provenance attestation and verified when they were pinned. Mount the project at /project and a cache volume at /cache, where forge keeps the compiler:
docker build -t forge-test-mcp .
docker run --rm -v "$PWD":/project -v forge-test-mcp-cache:/cache --entrypoint forge forge-test-mcp build
The second command installs the project's solc once, online. Then configure the client to run docker with ["run", "-i", "--rm", "-v", " :/project", "-v", "forge-test-mcp-cache:/cache", "forge-test-mcp"]. forge writes out/ and cache/ into the project, so on Linux add --user "$(id -u):$(id -g)" to both commands.
Options go after the package name in args. Only the user sets them; no tool argument can.
| Option | Meaning |
|---|---|
--root | Project directory (default: where the client starts the server). |
--forge | The forge executable (default: forge on PATH). |
--timeout | Stop a forge run after this long (default 300). |
--allow-ffi | Let tests use FFI cheatcodes when foundry.toml enables them. Off by default; see below. |
--strict-version | Refuse forge versions newer than the tested range instead of flagging them. |
| Tool | What it does |
|---|---|
run_tests | Runs forge test. Filters: match_test, match_contract, match_path; fuzz_runs; traces (default true); max_bytes (default 8192). |
explain_failure | Re-runs one test at high verbosity and returns only that test: reason, counterexample, logs, backtrace and the decoded trace. Pass the name as run_tests prints it, e.g. "BankTest.test_transfer()". |
build | Runs forge build and returns compiler errors and warnings with file, line, column and code. force: true recompiles everything. |
None of them sends transactions, deploys, signs or accepts keys.
A failing run_tests result looks like this:
{
"status": "failed", "forge": "1.8.6", "summary": { "suites": 1, "passed": 1, "failed": 1, "skipped": 0 }, "ffi": "disabled", "fuzzRuns": { "configured": 256, "used": 256 }, "notRun": [], "failures": [ { "test": "SupplyInvariantTest.invariant_supplyMatches()", "file": "test/Supply.t.sol", "kind": "invariant", "reason": "supply mismatch: 6683 != 6355", "sequence": { "calls": [ { "call": "Handler.mint(uint256)", "args": "6683", "sender": "0x…022f" }, { "call": "Handler.burnFrom(uint256)", "args": "328", "sender": "0x…054e" } ], "shrunkFrom": 4 }, "trace": [ "[21670] SupplyInvariantTest::invariant_supplyMatches()", " ├─ [0] VM::assertEq(6683, 6355, \"supply mismatch\") [staticcall]", " │ └─ ← [Revert] supply mismatch: 6683 != 6355", " └─ ← [Revert] supply mismatch: 6683 != 6355" ], "traceLinesOmitted": 16 } ], "truncated": null }
Responses stay within the size budget. When there is more than fits, traces and logs go first, then whole failures, and truncated says exactly how many were left out.
The result is an MCP error (isError: true) with a code, a message and a hint:
| Code | Cause |
|---|---|
COMPILE_FAILED | The project does not compile (the first compiler errors are included). |
NO_TESTS_RAN | No test matched the filters, or every matched test was skipped. |
NOT_A_FOUNDRY_PROJECT | No foundry.toml here or above it in the repository. |
FORGE_NOT_FOUND, UNSUPPORTED_FORGE_VERSION | forge is missing, or older than 1.8.5. |
SOLC_MISSING | Run forge build once in a terminal so forge can install the compiler. |
TIMEOUT | The run took longer than --timeout; forge reports nothing until it finishes. |
CONFIG_ERROR, INVALID_ARGUMENTS, FORGE_CRASHED, FORGE_FAILED, UNPARSEABLE_OUTPUT, INCONSISTENT_RESULT, OUTPUT_TOO_LARGE, FFI_OVERRIDE_FAILED | forge could not produce a trustworthy report; the message and stderr say why. |
.env contents, RPC URLs with API keys, or code you can't share.Running tests runs code. forge test executes the project's Solidity and cheatcodes with your user's rights, just as it does in a terminal. Only use this server on projects you would test in a terminal yourself. It cannot make an untrusted repository safe.
What the server does to reduce that risk:
FOUNDRY_FFI in the environment, so when foundry.toml sets ffi = true the server runs forge with a copy of the resolved configuration that has ffi = false, and checks through forge that it took effect before running anything. Start the server with --allow-ffi if you want FFI.--offline, so forge itself makes no network lookups. Tests can still reach the network on their own, for example fork tests through vm.createSelectFork and RPC endpoints.--flag=value arguments..env itself, so tests can read and print those values. The server replaces the exact values of variables named like *PRIVATE_KEY*, *MNEMONIC*, *SECRET*, *TOKEN*, *API_KEY* and *RPC_URL* (RPC URLs often embed an API key), from its environment and .env, with [redacted:NAME]. A hex value such as a private key is also caught without 0x, in either case, without leading zeros, and in decimal (as vm.envUint and console.log print it). It cannot catch a secret printed in any other form. Keep spendable keys out of projects you test with an agent.To report a vulnerability, see SECURITY.md.
Passing tests do not prove a contract is secure. They show the tests you wrote pass. Contracts that will hold value need an independent audit.
Tested in CI against forge 1.8.5 and 1.8.6 on Linux, macOS and Windows. Supported range: >=1.8.5 <1.9.0. Older versions are refused. Newer ones run with a forgeUntested
Only the beginning is shown; read the rest in the repo