Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Extract a visual contract from a reference page and measure an implementation against it
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": {
"pixelpact": {
"command": "npx",
"args": [
"-y",
"pixelpact-mcp"
]
}
}
}Run this in your terminal
claude mcp add pixelpact -- npx -y pixelpact-mcpPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"pixelpact": {
"command": "npx",
"args": [
"-y",
"pixelpact-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": {
"pixelpact": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"pixelpact-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 7, 2026
The registry name was verified with the GitHub account jamalkamaladdin, 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.6) reached the registry 2 months 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, Detailing Manager
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.
Connect your auto detailing studio's tasks, cars, clients and revenue to Claude or ChatGPT.
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.
Your coding agent cannot see the page it just built. pixelpact measures it against the reference and hands back numbers.
A coding agent writes the CSS and says it is done. It never sees the result. Nothing hands it a number, so the loop cannot close: the agent guesses, you open the page, you send it back, it guesses again. Every round costs you the one thing the agent was supposed to save.
The same gap exists without an agent, when a teammate says a section is finished and nobody in the room has a measurement. The difference is that a person can at least look.
pixelpact reads the reference page and writes down what it actually renders: sizes, colors, spacing, typography, hover and focus states, animation keyframes, design tokens. That file is the contract. Point pixelpact at the implementation and it answers with one line per property that drifted, which is precisely what an agent can act on.
npx pixelpact extract https://reference.example.com -o contract.json
npx pixelpact check contract.json http://localhost:3000
| MCP clients | Playwright | GitHub Actions | Any framework | Figma |
|---|---|---|---|---|
| Claude Code, Cursor, anything that speaks stdio MCP | the engine it drives | one comment on the pull request | it reads the DOM, not your stack | a frame as the reference, when you want one |
*If a browser can render it, pixelpact can measure it.*
An agent that writes UI code cannot tell whether it succeeded. pixelpact-mcp gives it the measurement, so the loop closes without a person in the middle: extract the contract once, then let the agent check its own work, read the deviation list, fix, and check again.
// .mcp.json
{ "mcpServers": { "pixelpact": { "command": "npx", "args": ["-y", "pixelpact-mcp"] } } }
Tools exposed: extract_contract, check_implementation, diff_pixels, read_contract_summary.
Percy, Chromatic, Applitools, BackstopJS and Pixeleye all compare your page against a baseline that you approved earlier. That model works once the page already looks right and you want to keep it that way. While you are still building toward a design, there is no baseline to compare with, and the first run of a regression tool simply records whatever you produced.
| Visual regression tools | pixelpact | |
|---|---|---|
| Compares against | a snapshot you approved earlier | the reference design itself |
| Useful when | the UI is already correct | the UI is being built |
| First run on a new page | records, cannot judge | measures against the reference |
| Answer you get | an image diff to inspect by eye | a value per property, with a delta |
| Fits an autonomous agent | needs a human to approve the diff | the numbers close the loop |
The two models are complementary. Use a regression tool to keep a finished page finished, and pixelpact to get it finished in the first place.
| Without pixelpact | With pixelpact |
|---|---|
| ❌ A coding agent writes CSS, declares it done, and a person has to open the page to find out that it is not. | ✅ The agent calls the MCP server, reads the deviations, fixes them and checks again. No person in the middle. |
| ❌ Someone says the section is finished, you disagree, and neither of you has a number. The louder opinion wins. | ✅ Every value in the reference is asserted against your page. What failed is listed with expected, actual and the difference. |
| ❌ A regression tool has nothing to compare a brand new page against, so its first run records whatever you happened to build. | ✅ The reference is the baseline from the first minute. Nothing has to be approved before the tool is useful. |
| ❌ Hover, focus and animation values are almost never reviewed, because checking them by hand is slow and boring. | ✅ They are part of the contract, so they are measured on every run like any other value. |
| ❌ An image diff tells you that something changed and leaves you to hunt for what. | ✅ Deviations name the element, the property, the expected value and the measured one. |
| ❌ The design lives in a file nobody opens during code review. | ✅ The contract is committed JSON, so a pull request shows exactly which values moved. |
pnpm add -D pixelpact playwright
pnpm exec playwright install chromium
playwright is a peer dependency, so the browser download stays under your control and a project that already has Playwright installs nothing extra. Node 22.12 or newer is required.
1. Extract the contract from the reference.
npx pixelpact extract https://reference.example.com \
--selector "main" \ --viewport desktop,mobile \ --screenshots .pixelpact/shots \ -o contract.json
2. Measure your implementation.
npx pixelpact check contract.json http://localhost:3000 --viewport desktop
3. Fix what it reports, then run it again. The command exits 0 when everything is inside tolerance and 1 when it is not, so it drops straight into a script or a CI job.
A contract is plain JSON, readable and diffable, with no proprietary format and no service behind it.
{
"version": 1, "source": { "type": "url", "value": "https://reference.example.com" }, "root": "main", "extractedAt": "2026-09-06T01:20:44.812Z", "viewports": [{ "name": "desktop", "width": 1440, "height": 900 }], "tokens": { "--brand-600": "rgb(11, 114, 133)" }, "keyframes": { "fade-up": [{ "offset": "0%", "css": "opacity: 0" }] }, "byViewport": { "desktop": { "documentHeight": 4218, "elements": [ { "selector": "main > header > a.cta", "tag": "a", "text": "Get started", "box": { "x": 120, "y": 32, "w": 148, "h": 44 }, "styles": { "background-color": "rgb(11, 114, 133)", "font-size": "16px", "border-radius": "8px" }, "hover": { "background-color": "rgb(8, 90, 105)" }, "focus": { "outline": "2px solid rgb(11, 114, 133)" } } ] } } }
Because it is a file, you can commit it, review it in a pull request, hand it to another developer, or hand it to an agent.
pixelpact check FAILED
target http://localhost:4173/impl.html reference http://localhost:4173/ref.html viewport desktop 1440x900 elements 14 matched, 0 missing of 14 checks 1056 passed, 10 failed (99.1% of 1066)
deviations (10) SELECTOR PROPERTY EXPECTED ACTUAL DIFF body > main > h1 font-size 48px 44px 4px body > main > a box.width 117.75px 109.75px 8px body > main > a padding-right 24px 20px 4px body > main > a padding-left 24px 20px 4px body > main > a background-color rgb(11, 114, 133) rgb(37, 99, 235) 60.1 (color) body > main > a border-top-left-radius 8px 4px 4px body > main > a border-top-right-radius 8px 4px 4px body > main > a border-bottom-left-ra... 8px 4px 4px body > main > a border-bottom-right-r... 8px 4px 4px body > main > a focus.outline rgb(11, 114, 133) s... rgb(37, 99, 235) so... differs
That is a real run against two copies of one page with four declarations changed. Four edits produce ten measured deviations, because padding moves the box width and one border-radius shorthand sets four corners. Run the same check against the reference itself and all 1066 assertions pass, which is the property that matters: a passing check has to mean something.
Add --json to get the same report as a data structure, which is what CI jobs and agents read.
check says which values moved. diff says how many pixels moved. Neither tells a person where to look. side splits both pages into sections, puts them next to each other, and boxes what differs.
npx pixelpact side https://reference.example.com http://localhost:3000 --widths 1440,390
# SECTION WIDTH VERDICT DIFF
01 hero 1440px PASS 0.000% 02 features 1440px FAIL 0.675% .pixelpact/side/1440/02-features.png 03 pricing 1440px PASS 0.000% 04 foot 1440px FAIL 1.265% .pixelpact/side/1440/04-foot.png
That is a real run against the two files in examples/side, which are copies of one page where the card gap and the corner radius were changed. Reproduce it with:
npx pixelpact side "file://$PWD/examples/side/reference.html" \
"file://$PWD/examples/side/implementation.html" --widths 1440
This is the command to run before telling anyone that a page is finished.
Contract from the reference
Reads the page you are building toward and writes down every value it renders. Nothing to approve first. Numbers, not opinions
Each deviation carries the expected value, the measured value and the difference between them. States, not just layout
Interactive elements are hovered and focused, and only the properties that actually change are stored.
Tokens and keyframes
Custom properties on the root element and named animation keyframes travel inside the contract. Pixel comparison
When every value passes and it still looks wrong, compare the screenshots and get a percentage. Agent ready
An MCP server exposes the same measurements, so a coding agent can close its own loop.
Pull request checks
A composite Action runs the check and keeps one comment on the pull request up to date. Plain JSON
The contract is a file you can read, diff and review. No service, no account, nothing to log into. Framework agnostic
It measures the rendered DOM, so React, Vue, Svelte and hand written HTML are all the same to it.
| Command | What it does
Only the beginning is shown; read the rest in the repo