GitHub
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
Description from the maker (original English)
MCP server and CLI that makes CSS legible to AI agents — explains what applies and why.
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": {
"stylespeak": {
"command": "npx",
"args": [
"-y",
"@patrizzos/stylespeak"
]
}
}
}Run this in your terminal
claude mcp add stylespeak -- npx -y @patrizzos/stylespeakPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"stylespeak": {
"command": "npx",
"args": [
"-y",
"@patrizzos/stylespeak"
]
}
}
}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": {
"stylespeak": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@patrizzos/stylespeak"
]
}
}
}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 patrizzos, 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 (1.2.0) reached the registry 3 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: GitHub, Desktop Commander, Cloudflare MCP
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
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
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.
A companion MCP server and CLI to stylesafe that makes CSS legible to AI agents — resolving cascade, tracing properties, predicting change impact, and explaining what applies and why before an agent touches a single line of styles.
AI coding agents write CSS without being able to see its effect. They modify a rule, assume it worked, and move on — unaware that a higher-specificity rule elsewhere already overrides it, a combinator rule in another file is silently winning, or a CSS variable resolves to something entirely different than expected. stylespeak gives agents a structured knowledge layer to consult *before* making changes.
`resolve_styles` — answers "what CSS actually applies to this selector?"
Given a selector and a set of files, returns every CSS property the selector would receive, which rule wins for each, and which rules were overridden — with confidence levels since no real DOM is available. CSS custom properties (var()) are resolved to their actual values, including chained variables, fallbacks, and media-context overrides.
`trace_property` — answers "everywhere this property is set, who wins?"
Given a property name and a set of files, returns every rule that sets it, groups competing rules that target overlapping selectors, and shows the full cascade chain for each group — with resolved variable values included.
`impact_preview` — answers "if I change this, what else breaks?"
Given a selector, property, and optional new value, predicts the full blast radius of the change before it's made — showing which selectors will see a different value, which are shielded by higher specificity, which cascade relationships are uncertain, and which downstream rules are affected through CSS variable chains or property inheritance. Works without a browser.
`style_manifest` — answers "what does this entire project's CSS look like at a glance?"
Builds a compressed, structured summary of a project's entire CSS knowledge — selectors, properties, variables, competition groups, and risk hotspots — that an agent can load once at the start of a session and keep in context instead of repeatedly querying individual files.
`live_resolve` — answers "what does the browser actually compute for this selector?"
Queries a running Chromium browser via CDP and returns exact computed styles and matched rules. No heuristics, no confidence levels — the browser resolved it. Requires Chrome running with --remote-debugging-port=9222.
Works on more than plain CSS. The four static tools above analyze .css, .scss, CSS Modules, and — as of v1.3 — styled-components and Emotion source files (.js / .jsx / .ts / .tsx), all through the same cascade engine.
npm install -g @patrizzos/stylespeak
stylespeak resolve ".btn.primary" src/styles/main.css
stylespeak trace "color" --projectRoot src/styles stylespeak impact ".btn" "background-color" src/styles/main.css --newValue "#ff0000" stylespeak manifest --projectRoot src/styles
-> .Button)stylespeak resolve ".Button" src/components/Button.jsx stylespeak manifest --projectRoot src
Add to your MCP client config (Cursor: .cursor/mcp.json, VS Code: .vscode/mcp.json):
{
"mcpServers": { "stylespeak": { "command": "node", "args": ["/absolute/path/to/stylespeak/src/server.js"] } } }
Once connected, agents can call:
resolve_styles({ selector, files, projectRoot, componentFiles? })trace_property({ property, files, projectRoot })impact_preview({ selector, property, newValue?, files, projectRoot })style_manifest({ files?, projectRoot?, maxSelectors? })live_resolve({ selector, port?, tabUrl? })stylespeak impact ".btn" "background-color" src/styles/buttons.css --newValue "#ff0000"
{
"change": { "selector": ".btn", "property": "background-color", "currentValue": "var(--color-primary)", "newValue": "#ff0000" }, "blastRadius": { "total": 3, "valueChanges": 1, "shielded": 1, "risks": 0, "variableDownstream": 0, "inheritanceDownstream": 1 }, "riskLevel": "low", "safeToChange": true, "impacts": [ { "type": "value-change", "affectedSelector": ".btn", "currentValue": "var(--color-primary)", "newValue": "#ff0000", "confidence": "certain" }, { "type": "shielded", "affectedSelector": ".btn.primary", "shieldingValue": "darkblue", "confidence": "certain", "reason": ".btn.primary has higher specificity — elements with both classes won't be affected" } ], "summary": "1 selector will see a different value, 1 selector is shielded by higher specificity.", "agentNote": "Change appears safe to make. Shielded selectors are safe — higher-specificity rules protect those elements." }
stylespeak resolve ".btn" src/styles/buttons.css
{
"properties": { "background-color": { "winner": { "value": "var(--color-primary)", "resolvedValue": "#2563eb", "variableChain": ["--color-primary → #2563eb"], "selector": ".btn", "specificity": "(0,0,1,0)" }, "confidence": "certain" } }, "variables": { "--color-primary": { "value": "#2563eb", "selector": ":root" } } }
| Level | Meaning |
|---|---|
certain | Exact selector match — rule definitively applies |
likely | Rule tokens are a subset of the queried selector — applies in most cases |
possible | Combinator rule — depends on DOM ancestry, unknown without rendering |
exact | Returned by live_resolve only — browser-resolved, no heuristics |
As of v0.2, stylespeak fully resolves CSS custom properties (var()) in all output:
value — the raw value as written (var(--color-primary))resolvedValue — the actual resolved value (#2563eb)variableChain — the full resolution path, including chained variablesconditionalValues — media-context overrides where the variable resolves differentlySupported: simple, fallback, nested fallback, chained, scoped, media-context, circular reference protection.
As of v1.3, stylespeak statically extracts styles from .js, .jsx, .ts, .tsx, .mjs and .cjs files that import styled-components, @emotion/styled, @emotion/react or @emotion/css, and runs them through the same cascade engine as plain CSS. resolve_styles, trace_property, impact_preview and style_manifest all work on them, and CSS-in-JS and regular CSS can be analyzed together.
Pass JS/TS files in files, or point projectRoot at a directory — files that import one of these libraries are discovered automatically and all other JS/TS files are ignored.
Generated class names are hashed at runtime, so each styled component is addressed by its variable name as a class selector:
const Button = styled.button`...`; // -> .Button
export default styled.section...; // -> .Card (named after the file, e.g. Card.jsx)
Rules are tagged cssInJs, library and component, and are treated as locally scoped (like CSS Modules): two components named Wrapper in different files are independent, never reported as conflicting, and never counted as a "declared in N locations" risk. Querying such a name is flagged as ambiguous, because results will mix both files.
| Syntax | Handling |
|---|---|
| Tagged templates | styled.div`…` , styled(Comp)`…` , styled.div.attrs(…)`…` , styled.div `…` (TypeScript generics), css`…` |
| Object syntax | styled.div({ … }), styled(Comp)({ … }), css({ … }), styled.div(props => ({ … })) |
| Global styles | createGlobalStyle / injectGlobal — real selectors, not locally scoped |
| Nesting | &, && (specificity bump), &:hover, bare :hover, nested selectors, @media / @supports / @container |
| Component selectors | ${Icon} { … } becomes .Icon, e.g. .Button .Icon |
| Constants | Same-file const strings, numbers and object paths: ${SPACING}, ${colors.primary}, @media ${bp.md} |
css helpers | Same-file const mixin = css`…` is inlined where interpolated (${mixin}, ...mixin) and is also queryable by its own name (tagged css-helper) — useful because Emotion's css={mixin} prop makes the helper the only visible record of those styles |
| Object notation | camelCase becomes kebab-case, vendor prefixes (WebkitX → -webkit-x, msX → -ms-x), unitless numbers get px (except unitless properties like opacity, z-index, line-height) |
Values that depend on props or theme can't be known statically. stylespeak keeps the original expression, marks it, and tells the agent:
"color": {
"winner": { "value": "${props => props.color}", "selector": ".Button", "cssInJs": true, "library": "styled-components", "component": "Button", "dynamic": true }, "confidence": "certain", "dynamic": true }
dynamic: true on a declaration, winner and property means the value depends on runtime props/theme — the winner may differ depending on props.${p => p.active && css…}) can't be evaluated. They are dropped and counted in dynamicInterpolations, and agentNote warns that additional styles may apply at runtime.cssInJs.skipped in style_manifest output instead of being silently ignored.styled(Base) records extends; agentNote tells the agent to also resolve the base component.This is static analysis, so there are boundaries:
styled(Base) does not merge the base component's styles into the child — resolve the base selector separately.ThemeProvider themes are not resolved.css prop on JSX elements and style blocks not assigned to a named variable are anonymous — there is no selector to target, so they are reported as skipped.keyframes are not modeled, and .attrs({ className }) is not considered.live_resolve against the real element.stylesafe catches problems in your CSS — conflicts, dead rules, Tailwind clashes — before they ship.
stylespeak explains your CSS — resolving cascade, tracing properties, predicting impact, resolving variables — so agents understand before they act.
Use stylesafe as a post-edit check. Use stylespeak as a pre-edit consultation. Together they give AI coding agents a complete feedback loop on styles.
live_resolve requires a Chromium browser running with remote debugging enabled:
# Windows
chrome.exe --remote-debugging-port=9222
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
google-chrome --remote-debugging-port=9222
Security note: Never run
--remote-debugging-porton a machine exposed to untrusted networks or in production. This flag opens a local API that any process on the machine can connect to.
| Format | Support level |
|---|---|
.css | Full |
.scss | Full — nesting, & references, @media passthrough |
| .module.css / `.
Only the beginning is shown; read the rest in the repo