CCC Brand MCP
Strict Model Context Protocol server for Consumer Choice Center brand-guided generation. It exposes the CCC 2026 brand guide as machine-readable resources and tools so an LLM can retrieve brand assets, validate designs, and generate on-brand prompts and SVG drafts.
README
CCC Brand MCP
Strict Model Context Protocol server for Consumer Choice Center brand-guided generation.
It exposes the CCC 2026 brand guide as machine-readable resources and tools so an LLM can:
- retrieve approved colors, fonts, logo rules, social/video/document constraints
- validate proposed designs before generation
- create strict brand-locked prompts for image/design models
- generate simple on-brand SVG drafts for social cards and video lower thirds
- generate strict reference contracts for CCC policy one-pagers with contextual object illustrations
Brand Source
The initial rules were extracted from CCC_Brand_Guide_2026_5.pdf:
- Palette: Autumn Orange
#E95C1F, Leila#22264E, Base White#FFFFFF, Warm White#FFF7EF, Cool Mist#E7ECF4, Slate Blue#6F789B, Brick Coral#B9473A, Marigold#F4B544, Sand Beige#CDB79F, Deep Teal#1E6F78, Bright Teal#00A6A6, Soft Mint#9BD8C7 - Typography: Montserrat, Anton, Hind, DM Mono
- Social default:
1080x1350, withconsumerchoicecenter.orgfooter - Video subtitles: Montserrat Bold, 55-60pt, bottom-third safe-area placement
- Policy outputs: primer, note, memo, coalition letter rules
Official CCC SVG logo variants are included in assets/logos. The approved Montserrat, Anton, Hind, and DM Mono binaries and their licenses are included in assets/fonts. Generated SVGs keep text editable and Illustrator-safe, so install the packaged fonts before editing; browser-style base64 web-font embedding is intentionally rejected.
Install
corepack enable
pnpm install
pnpm run build
Run
pnpm start
Install as a ChatGPT or Codex plugin
The project is plugin-ready. Its required entry points are:
.codex-plugin/plugin.json
.mcp.json
skills/ccc-brand-design/SKILL.md
dist/server.js
data/
assets/
Build the portable server before packaging:
pnpm install --frozen-lockfile
pnpm test
dist/server.js is a bundled runtime artifact, so the plugin ZIP does not need node_modules. The bundled MCP configuration launches it with Node.js 20 or newer from the plugin root.
Upload the prepared ccc-brand-plugin-0.8.0.zip archive from this release. The ZIP contains exactly one top-level ccc-brand/ plugin directory and is intended for the ChatGPT desktop plugin flow and workspace sharing.
This packaged connection uses local stdio. For a public plugin or a browser-only organization deployment, host the server at a public HTTPS Streamable HTTP endpoint and submit it through the With MCP flow; uploading a local stdio archive does not create a hosted endpoint.
MCP Client Configuration
Use this with Claude Desktop, Cursor, Codex, or any MCP-capable client:
{
"mcpServers": {
"ccc-brand": {
"command": "node",
"args": ["/absolute/path/to/CCC Branding/dist/server.js"]
}
}
}
For local development, rebuild after changes and point the client at dist/server.js:
pnpm run build
Resources
brand://ccc/guidelinesbrand://ccc/colorsbrand://ccc/social-templatesbrand://ccc/post-referencesbrand://ccc/quote-peoplebrand://ccc/one-pager-referencesbrand://ccc/one-pager-working-templates
Tools
get_brand_guidelines
Returns all or one section of the brand system.
Sections: all, colors, typography, logo, social, video, policyOutputs, strictGenerationRules
validate_design_spec
Checks colors, fonts, social dimensions, and logo asset availability. Final logo validation requires officialLogoHref to reference an approved file from assets/manifest.json that exists in the configured asset directory. The built-in social SVG generator auto-selects approved packaged SVG logos when no logo path is supplied.
Example:
{
"colors": ["#E95C1F", "#22264E"],
"fonts": ["Montserrat", "DM Mono"],
"assetType": "social",
"widthPx": 1080,
"heightPx": 1350,
"usesLogo": true,
"officialLogoHref": "logos/ccc-wide-orange.svg"
}
create_generation_prompt
Creates a strict prompt for another LLM, image model, or design agent.
Use outputType: "one_pager" to include the locked one-pager reference rules automatically.
create_one_pager
Creates the generation contract for a CCC policy one-pager and returns a directly readable MCP resource link to the selected clean working SVG. The clean shell is derived from the visual reference but has all original text and raster illustrations removed before composition, preventing new content from being layered over the old one-pager. The tool selects one of two packaged SVG templates:
material_cost_chain: tariffs, costs, product components, supply chains, and material flowsaccess_barriers: permits, approvals, restrictions, health, safety, and product-access barriers
Both templates use the exact 0 0 1186.51 1535.49 canvas. The selected clean SVG is the mandatory production shell: canvas, section heights, typography hierarchy, headline origin, navy/orange/warm-white color roles, brush shapes, normalized connectors, rules, cards, footer, and logo geometry remain fixed. New fitted wording and one embedded contextual object composite are added to the empty slots. Final SVGs must preserve data-ccc-clean-template="mutable-content-cleared-v1", declare the exact data-ccc-template-source returned by the tool, and retain at least 90% of the selected reference's measured vector geometry.
The central illustration must depict the physical object most directly connected to the topic. It should match the supplied photorealistic transparent-background cutout/cutaway style, remain inside the original illustration zone, avoid every text area, and be embedded as a base64 image through SVG 1.1 xlink:href in the final SVG.
{
"request": "Explain how repair restrictions raise the cost of fixing consumer electronics.",
"template": "auto",
"headline": "WHY REPAIR IS HARDER THAN IT SHOULD BE",
"centralObject": "a cutaway smartphone showing the battery, screen, and repairable internal modules",
"keyMessage": "Consumers should be able to repair the products they own.",
"sources": ["European Commission right-to-repair rules", "OECD consumer repair data"],
"mode": "final"
}
validate_one_pager_svg
Validates the completed one-pager before handoff. It first compares the SVG's paths, panels, dividers, brush shapes, and connector geometry to the declared packaged source template; metadata without retained geometry fails. It then rejects populated-source text or raster images, orphaned text, transformed/tspan text, hidden (0,0) compliance placeholders, text outside measured safe boxes, text-to-text overlap, and text-to-illustration overlap. It enforces one uncropped central illustration inside the selected template safe zone and exactly three clean double-ended connectors with one 3-unit shaft, a 6 7 dash rhythm, two compact tangent-aligned arrowheads, and no marker-only geometry.
brand://ccc/one-pager-references
Exposes both populated SVGs for visual comparison only. They must never be used as working artwork.
brand://ccc/one-pager-working-templates
Exposes the two mandatory clean production shells. Each removes every original <text> and <image> element, preserves locked vector geometry, and normalizes the three existing connector groups. create_one_pager links directly to the selected clean SVG.
create_social_svg
Returns an SVG draft for one of:
policy_alertstatisticquotectalower_third
The SVG uses approved colors, editable installed CCC fonts, inline official logo geometry, and the actual cropped nested-C CCC mark from the selected reference. Social layouts are reference-locked: text is fitted into the original type slots without SVG textLength, lengthAdjust, font-stretch, or non-uniform scale transforms. References 1, 2, 4, and 5 use Anton for their display slots; reference 3 preserves its Montserrat Bold headline system and real megaphone paths. create_social_svg is the only supported social renderer; older local code calling createLegacySocialSvg is safely routed back through the same reference-locked path. It supports styleVariant:
autonavy_posterpetition_pushorange_alertstatistic_cardcontrast_cardsquote_post
Use auto unless you need a specific reference composition. auto routes quotes to quote_post, comparisons to contrast_cards, petition/policymaker/lawmaker/mandate asks to petition_push, statistics to statistic_card, policy alerts to orange_alert, and general posts to navy_poster.
The reference mapping is fixed: navy_poster uses reference 1, statistic_card uses reference 2, petition_push and orange_alert use reference 3, contrast_cards uses reference 4, and quote_post uses the supplied reference-5 quote template. Quote posts preserve that SVG's exact 1080x1350 dimensions, #15192E background, visible #22274E cropped CCC watermark, logo geometry, Anton sizes, and 100/82/68px line rhythm. Copy stays in the left reference column while each portrait uses a verified person-specific bottom-right scale; portraits are contained in full with xMaxYMax meet, embedded as base64 data:image URIs, and paired with at least one Autumn Orange quote emphasis. Reference-locked outputs preserve variation 0 geometry; select another styleVariant for a genuinely different composition. leadIn supplies the two-line reference-3 prompt above the main headline, while comparisonLeft and comparisonRight supply the two positions in contrast_cards. For template: "quote", provide person and place the quote in headline.
For PNG previews, the rasterizer must explicitly load assets/fonts/Anton-Regular.ttf, the required Montserrat weights, and assets/fonts/DMMono-Regular.ttf. Do not use Quick Look or another system-fallback renderer as production output: a PNG is invalid if its headline silently falls back to a serif or generic system face. Keep the SVG as the Illustrator-editable master and validate it before rasterization.
create_quote_post
Creates a self-contained quote post directly from the supplied reference-5 template. The tool selects an approved CCC person, embeds the matching packaged portrait directly in the SVG, contains the entire portrait without cropping, keeps it outside the text safe zone, inserts the verified full name and current title, fits the quote into the protected Anton slots, and always applies one Autumn Orange emphasis.
Approved person ids: bill, david, emil, fabio, fred, stephen, yael, zoltan.
{
"quote": "Prohibition does not make products disappear. It makes them unregulated.",
"person": "yael",
"emphasis": "unregulated",
"mode": "final"
}
Use brand://ccc/quote-people to retrieve approved ids, full names, current titles, aliases, and portrait paths. The team metadata was verified against https://consumerchoicecenter.org/team/ on 2026-07-21.
brand://ccc/post-references
Exposes the packaged SVG post references from the brand guide as MCP resources. These are layout contracts: generated wording changes, but their density, type slots, hierarchy, watermark treatment, icons, CTA placement, and official logo geometry remain fixed.
audit_brand_assets
Checks whether required CCC logo and font assets are available. By default it checks ./assets; set CCC_BRAND_ASSET_DIR to point at a different official asset directory.
qa_social_layout
Checks headline, body, and CTA copy against CCC social layout limits before generation. In final mode, over-limit copy is a validation error; in draft mode, it is reported as a warning.
validate_svg_artifact
Validates generated SVG markup after another LLM or design agent produces it. Use this as the final gate before accepting CCC-branded SVG output.
It checks:
- approved CCC font families only, with no generic fallback families
- approved CCC palette colors only
- disciplined color count and tertiary accent usage
1080x1350social dimensions- reference-system and reference-exact layout metadata
- the cropped nested-C CCC mark geometry with an approved semi-transparent gradient; concentric circles fail validation
- variant-specific structure such as
petition_pushaction bands, stacked headline blocks, petition markers, large statistic markers, and compact contrast cards - large full-height diagonal split layouts that drift away from the post guide
- weak large social headlines set in thin or regular Montserrat
- official logo asset references
- placeholder logo text or improvised logo marks
- Illustrator-safe SVG 1.1 metadata,
xlink:hrefraster embedding, installed editable fonts, inline vector logos, and absence of live SVG filters
validate_illustrator_svg
Runs the Illustrator compatibility gate independently of the broader brand checks. It rejects CSS data:font web-font embedding, SVG 2 image href, nested data:image/svg+xml links, external raster links, and live filters—the constructs most likely to be treated as missing links or unsupported plug-ins when the downloaded SVG is opened in Illustrator.
Example:
{
"mode": "final",
"assetType": "social",
"requiresLogo": true,
"svg": "<svg ...>...</svg>"
}
Recommended loop for generated SVGs:
- Call
create_generation_prompt. - Generate the SVG in the model/design tool.
- Call
validate_svg_artifact. - Fix every violation before using the SVG.
Assets
Final outputs require official logo and font assets. This repo ships the official SVG logo variants, approved font binaries, font licenses, and an asset manifest.
Expected local structure:
assets/
fonts/
Montserrat-Regular.ttf
Montserrat-Italic.ttf
Montserrat-Medium.ttf
Montserrat-MediumItalic.ttf
Montserrat-SemiBold.ttf
Montserrat-Bold.ttf
Anton-Regular.ttf
Hind-Medium.ttf
DMMono-Regular.ttf
logos/
ccc-wide-orange.svg
ccc-wide-leila.svg
ccc-wide-slate.svg
ccc-wide-brick-coral.svg
ccc-wide-marigold.svg
ccc-wide-sand.svg
ccc-wide-deep-teal.svg
ccc-wide-bright-teal.svg
ccc-wide-soft-mint.svg
post-references/
ccc-post-reference-1.svg
ccc-post-reference-2.svg
ccc-post-reference-3.svg
ccc-post-reference-4.svg
ccc-quote-post-template.svg
quote-people/
bill-wirtz.svg
david-clement.svg
emil-panzaru.svg
fabio-fernandes.svg
fred-roeder.svg
stephen-kent.svg
yael-ossowski.svg
zoltan-kesz.svg
one-pager-references/
ccc-tariffs-american-home.svg
ccc-cooling-europe.svg
Run audit_brand_assets before using the MCP for final production output.
Quality Checks
pnpm run check
pnpm test
The test suite covers canonical social sizing, palette/font rejection, strict logo verification, prompt/SVG dimensions, generated SVG artifact linting, layout overflow, and asset manifest consistency.
GitHub Setup
- Create a new GitHub repo, for example
ccc-brand-mcp. - Add this folder as the remote:
git remote add origin git@github.com:YOUR_ORG/ccc-brand-mcp.git
git branch -M main
git push -u origin main
- GitHub Actions will run
pnpm install --frozen-lockfile,pnpm run check, andpnpm run buildon pushes and PRs.
Strictness Model
This server treats the brand guide as a contract:
- off-palette colors are violations
- unapproved fonts are violations
- missing official logo assets are violations in
finalmode and warnings indraftmode; packaged SVG logos are used by default for generated SVGs - SVG logo placeholders are forbidden in
finalmode - generated SVGs must pass
validate_svg_artifactbefore handoff - one-pager-sized or one-pager-labelled SVGs are automatically routed through
validate_one_pager_svg; generic artifact validation cannot bypass the template gate - all social SVGs must declare
data-ccc-layout-lock="reference-exact"; freeform and legacy-rendered social files are rejected - social dimensions outside
1080x1350are warnings unless explicitly intended - final social graphics should use no more than five unique brand colors and no more than one tertiary accent color
- social posts must follow the mapped reference system with its native display font, the actual cropped CCC mark silhouette, small label, footer URL, icons, and official logo
- petition, policymaker, lawmaker, mandate, and direct advocacy asks should use
petition_pushororange_alert, not a generic clean navy poster - social outputs should vary across
navy_poster,petition_push,orange_alert,statistic_card,contrast_cards, andquote_postinstead of repeatedly using the same clean navy layout - packaged SVG post references are available through
brand://ccc/post-referencesand are the locked geometry for generated social posts create_one_pagerreturns a directly readable clean working SVG with source copy/images removed; generated one-pagers must preserve the clean-template marker, retain at least 90% of the exact reference geometry, and pass collision-aware validation- quote posts must use reference 5 through
create_quote_post, an approved packaged portrait, and the verified name/title frombrand://ccc/quote-people - display copy must fit the native reference slots without
textLength,lengthAdjust,font-stretch, or non-uniform scale transforms; references 1, 2, 4, and 5 use Anton, while reference 3 uses Montserrat Bold - raster previews must load the packaged CCC font files explicitly; silent serif or system-font fallback renders are invalid
- large split-screen layouts are reserved for
contrast_cards; full-height diagonal divider wedges and serif display headlines are violations - social copy that exceeds layout limits is a violation in
finalmode and a warning indraftmode - policy memo illustrations are forbidden by the guide
Keep data/ccc-brand.json as the single source of truth when the brand guide changes.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.