StyleSpeak
StyleSpeak is a CSS analysis server that helps AI agents understand the CSS cascade before making style changes, using static analysis without needing a real DOM or browser.
resolve_styles— Determine which CSS properties apply to a given selector. Returns the winning property values, which rule wins for each property, overridden rules, and a confidence level (certain,likely, orpossible) for each result.trace_property— Trace a specific CSS property (e.g.color,background-color) across files. Returns every rule that sets it, groups competing rules targeting overlapping selectors, and shows the full cascade chain — useful for understanding the blast radius of a change before making it.Flexible file targeting: pass one or more absolute file paths via
files, or useprojectRootto recursively discover all CSS/SCSS files in a directory.
Both tools enable pre-edit consultation for AI agents, surfacing cascade conflicts, specificity winners, and conditional rules.
Provides tools to resolve CSS cascade and trace properties for any CSS selector, enabling AI agents to understand which styles apply and why before making changes.
Planned support for CSS Modules scope awareness, allowing accurate selector matching and cascade resolution within CSS Modules files.
Click on "Install 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., "@StyleSpeakWhat CSS applies to .btn.primary in buttons.css?"
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.
StyleSpeak - MCP and CLI
A companion MCP server and CLI to stylesafe that makes CSS legible to AI agents — resolving cascade, tracing properties, explaining what applies and why, and resolving CSS custom properties before an agent touches a single line of styles.
The problem
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.
Related MCP server: browser-inspector-mcp
What it does
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. Use this to understand the blast radius of a change before making it.
Quick start
As a CLI tool
npm install -g @patrizzos/stylespeakResolve what applies to a selector:
stylespeak resolve ".btn.primary" src/styles/main.css
stylespeak resolve "#header a" src/styles/base.css src/styles/header.css
stylespeak resolve ".card-title" --projectRoot src/stylesTrace a property across files:
stylespeak trace "color" src/styles/main.css
stylespeak trace "background-color" --projectRoot src/stylesAs an MCP server
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 })
Example output
stylespeak resolve ".btn" src/styles/buttons.css{
"query": { "selector": ".btn", "filesAnalyzed": ["buttons.css"] },
"properties": {
"background-color": {
"winner": {
"value": "var(--color-primary)",
"resolvedValue": "#2563eb",
"variableChain": ["--color-primary → #2563eb"],
"conditionalValues": [
{
"mediaContext": "@media (prefers-color-scheme: dark)",
"resolvedValue": "#93c5fd"
}
],
"selector": ".btn",
"specificity": "(0,0,1,0)",
"source": { "file": "buttons.css", "line": 4 }
},
"overridden": [],
"confidence": "certain"
}
},
"variables": {
"--color-primary": {
"value": "#2563eb",
"resolvedValue": "#2563eb",
"selector": ":root"
}
},
"summary": "Found 4 properties applying to \".btn\" from 2 matched rule(s).",
"agentNote": "2 properties are certain. 2 properties use CSS custom properties — resolved values shown alongside raw var() references."
}Confidence levels
Since stylespeak performs static analysis without a real DOM, every resolved property carries a confidence level:
Level | Meaning |
| Exact selector match — rule definitively applies |
| Rule tokens are a subset of the queried selector — applies in most cases |
| Combinator rule (e.g. |
An agent should treat certain and likely results as ground truth, and possible results as conditional — they may apply depending on where the element lives in the DOM.
CSS custom property resolution
As of v0.2, stylespeak fully resolves CSS custom properties (var()) in all output. For every value that references a variable, the response includes:
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 differently
A top-level variables map in every response shows all custom properties found across the analyzed files, their resolved values, and any scoped or media-context overrides.
Supported resolution features:
Simple:
var(--name)Fallback:
var(--name, fallback-value)Nested fallback:
var(--name, var(--other, default))Chained:
--a: var(--b)→ resolves--btransitivelyScoped: element-scoped variables override
:rootfor matching selectorsMedia-context:
@mediaoverrides surfaced asconditionalValuesCircular reference protection (max depth 10)
Use cases
Before editing styles — call
resolve_stylesto understand the full cascade context firstBefore changing a property — call
trace_propertyto see the blast radius across all filesDebugging "why isn't my CSS working" — trace the property to find the higher-specificity rule that's winning
Understanding CSS variables — see exactly what a
var()resolves to, including dark mode and responsive overridesStyle audits — run across a project directory to map what's actually applying where
CLI options
Both commands accept:
One or more file paths as positional arguments
--projectRoot <dir>to analyze all CSS/SCSS files in a directory recursively
stylespeak resolve ".btn" src/main.css src/components.css
stylespeak trace "padding" --projectRoot src/stylesHow it pairs with stylesafe
stylesafe catches problems in your CSS — conflicts, dead rules, Tailwind clashes — before they ship.
stylespeak explains your CSS — resolving cascade, tracing properties, resolving variables, mapping what applies and why — 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.
GitHub Actions
name: style check
on: [pull_request]
jobs:
stylespeak:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm install -g @patrizzos/stylespeak
- run: stylespeak trace "color" --projectRoot src/stylesArchitecture
src/
cssParser.js — dependency-free CSS tokenizer with SCSS nesting support (v0.3)
specificity.js — standard (id, class, type) specificity calculator
cssomBuilder.js — builds in-memory cascade model from multiple files
selectorMatcher.js — heuristic selector matching with confidence levels
variableResolver.js — CSS custom property resolution (v0.2)
cssModulesAnalyzer.js — CSS Modules local scope detection and tagging (v0.3)
scssNestingExpander.js — SCSS nesting pre-processor (v0.3)
astComponentGraph.js — AST component graph for graph-aware matching (v0.3)
resolveStyles.js — resolve_styles tool implementation
traceProperty.js — trace_property tool implementation
server.js — MCP server (stdio JSON-RPC) + CLI entry pointZero external dependencies. Requires Node.js 18+.
File format support
Format | Support level |
| Full |
| Full — nesting, |
| Full — locally scoped classes detected and tagged (v0.3) |
styled-components / Emotion | Not supported — dynamic runtime styles cannot be statically analyzed |
vanilla-extract / Linaria / StyleX | Fully supported via compiled CSS output — point stylespeak at the build output |
CSS-in-JS (object syntax) | Not supported (post v1.0 roadmap) |
Roadmap
v0.2 ✅ — CSS custom property resolution (simple, chained, fallback, scoped, media-context)
v0.3 ✅ — SCSS nesting support, CSS Modules local scope awareness, AST component graph analysis
v1.0 — Chrome DevTools Protocol integration for live cascade resolution against a running browser
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- AlicenseAqualityFmaintenanceThis server integrates with Mozilla Developer Network (MDN) documentation to suggest CSS properties, check browser support, and provide implementation guidance with user consent mechanisms.Last updated414MIT
- AlicenseAqualityCmaintenanceGives AI coding tools access to the CSS cascade the way DevTools does — which rules matched, which won, where each came from.Last updated1444MIT
- Alicense-qualityAmaintenanceMCP server that enables AI coding agents to read and write to a local-first HTML/CSS design canvas, bridging visual design and code generation.Last updatedMIT
- Alicense-qualityBmaintenanceA local-first MCP server that captures rendered web evidence including screenshots, motion, pixel diffs, and CSS animation metadata for coding agents.Last updated1MIT
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Patrizzos/StyleSpeak'
If you have feedback or need assistance with the MCP directory API, please join our Discord server