CP Brand MCP
OfficialCP Brand MCP is a strict, brand-guided content generation server for Considerate Pouchers that turns LLM requests into on-brand one-pagers and social graphics, plus guidelines, QA and validation — it does not generate images or invent facts.
Read the brand guide — colors, typography, logo, photography, one-pager and social rules (
get_brand_guidelines).Check the server — version, transport, scope, asset health and local paths (
get_mcp_status).Audit assets — logo/reference hashes and exact font identities (Futura-Medium, ProximaNova-Semibold/Regular), with no silent font substitution.
Brief one-pagers — draft a generation brief from a request (
create_generation_prompt).Prepare image prompts — four contextual visuals: one central plus one per key point, with a compatibility helper for the central visual.
QA layout before writing — measure every slot against exact CP font metrics and reject overflow (
qa_one_pager_layout).Create one-pagers — editable SVG, outlined SVG and source JSON; final mode needs sources, four distinct images and verified facts.
Validate one-pagers — check palette, fonts, assets, embedded images and canonical layout by file path.
Discover social templates — seven 1080×1350 layouts (orbit, editorial, quotes, cutout, scenes) with canvas/language/photo requirements (
list_social_templates).Review spelling — English and Swedish suggestions, including accented characters, without rewriting quotations.
Brief real photos — topic-specific sourcing briefs for cutouts; the caller finds the actual photograph.
QA social layouts — font fit plus independent rendered contrast, visibility, collision and bounds checks.
Create social assets —
create_social_post,create_quote_post,create_cutout_post,create_photo_scene_postproducing editable SVG, outlined SVG, PNG and JSON (color/greyscale pairs for photos).Validate social assets — canonical exports, original photo hashes, contrast, collisions and frame bounds.
Deployment modes — 18-tool local stdio server for full rendering and file validation; public HTTP exposes only 7 read-only tools (no uploads, rendering, downloads or arbitrary paths).
Click on "Deploy 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., "@CP Brand MCP Draft a one-pager for the new pouch campaign and validate it."
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.
CP Brand MCP
Strict Model Context Protocol server for Considerate Pouchers brand-guided generation.
It exposes the CP brand guide as machine-readable resources and tools so an LLM can:
retrieve approved colors, fonts, logos and layout rules
create one-pagers, social posts and speaker quote graphics
prepare topic-specific briefs for real-photo cutouts and photo scenes
export editable SVGs, outlined SVGs, PNG previews and source JSON
review English and Swedish spelling without silently changing quotations
validate text fit, brand assets, image provenance fields and rendered readability
Brand Source
Brand rules come from assets/references/CP_Brand_Guidelines.pdf. The supplied one-pager PDF and social/quote SVGs provide composition references.
Palette: Coral
#EA5265, Teal#1D6379, Cream#EFEDE0, Off-white#F4F4F9Typography: Futura Medium, Proxima Nova Semibold and Proxima Nova Regular
Social size:
1080 × 1350(4:5)Social languages: English (
en) and Swedish (sv)Formats: one-pagers, social posts, quotes, real-photo cutouts and photo scenes
Official logos are included in assets/logos. Licensed font binaries are supplied privately. The CP guide governs branding; reference artwork supplies layout direction and is not a source of reusable policy claims.
Related MCP server: CoDesign
Install
Use Node.js 22 or 24 and the pinned pnpm version:
npm install --global pnpm@11.25.0
pnpm install --frozen-lockfile
cp data/fonts.example.json data/fonts.local.jsonConfigure the paths to your licensed fonts in data/fonts.local.json. The server checks the exact PostScript identities: Futura-Medium, ProximaNova-Semibold and ProximaNova-Regular. Futura can be supplied as a TTC collection. Relative font paths resolve against the configuration file's directory. Set CP_BRAND_FONT_CONFIG to use another configuration path.
Font files and local configuration stay outside Git, public packages and container images. There is no substitute-font fallback. See private font setup.
No build step is needed. After configuring fonts, verify the installation:
pnpm run audit:assets
pnpm run smokeRun
pnpm startThis starts the full stdio MCP server. Outputs go to deliverables/, or a writable directory selected by CP_BRAND_OUTPUT_DIR. Put new source photographs in inputs/. The MCP does not call an image model or require an image-generation API key.
MCP Client Configuration
Use this with Codex, Cursor or another MCP-capable client:
{
"mcpServers": {
"cp-brand": {
"command": "node",
"args": ["/absolute/path/to/cp-brand-mcp/src/server.mjs"],
"env": {
"CP_BRAND_FONT_CONFIG": "/absolute/path/to/cp-brand-mcp/data/fonts.local.json"
}
}
}
}Replace the paths for your machine. Register CP separately from CCC and WVA. Restart the connection after updates, then call get_mcp_status to confirm the running version and asset health.
Remote HTTP mode
Start the stateless, read-only Streamable HTTP service:
pnpm run start:httpLocal MCP URL: http://127.0.0.1:8083/mcp. Health checks use GET /healthz.
Proposed hosted connector URL, pending live deployment:
https://cp-mcp.consumerchoicecenter.org/mcpHTTP exposes 7 read-only tools and 3 resources: status, guidelines, asset audit, generation briefs, template discovery, spelling review and photo sourcing briefs. The 18-tool stdio server provides full rendering and local file validation. Public HTTP has no upload, rendering, download or arbitrary server-path tools.
Optional HTTP controls:
HOSTandPORT— default127.0.0.1:8083CP_MCP_ALLOWED_HOSTS— Host header allowlistCP_MCP_HTTP_BODY_LIMIT— default1mbCP_MCP_RATE_LIMIT_MAX— default 120 requests per IP per minuteCP_MCP_MAX_CONCURRENCY— default 8 simultaneous requestsCP_MCP_REQUEST_TIMEOUT_MS,CP_MCP_HEADERS_TIMEOUT_MS,CP_MCP_KEEP_ALIVE_TIMEOUT_MSCP_MCP_TRUST_PROXY_HOPS=1— only behind the trusted Caddy proxy, with no published host port
Public status omits local runtime and font paths. Without licensed fonts, the server can provide guidelines and discovery, but rendering and the full asset audit require them. The public service is unauthenticated; keep filesystem and rendering tools in the operator-controlled stdio transport.
Server Deployment
CP has its own checkout, container and port alongside CCC and WVA. GitHub publishing does not deploy the live service. See shared-server setup for DNS, Caddy, private mounts, health checks and rollback.
Deploy from the repository
git clone https://github.com/Consumer-Choice-Center/cp-brand-mcp.git
cd cp-brand-mcp
npm install --global pnpm@11.25.0
pnpm install --frozen-lockfile
cp data/fonts.example.json data/fonts.local.json
# Configure the licensed font paths before continuing.
pnpm run check
pnpm run audit:assets
pnpm test
pnpm run smokeFor full rendering on a remote host, an authorized operator can start node src/server.mjs over ssh -T, using that host's private font configuration and input/output directories.
Docker
Prepare the private mount directories from an existing font configuration, using a new output directory:
python3 scripts/prepare-private-fonts.py --config data/fonts.local.json --output runtime-private
docker compose -f deploy/docker-compose.yml build
docker compose -f deploy/docker-compose.yml up -d --waitThe Compose service runs HTTP on port 8083, joins the existing archivebox_default network, publishes no host port and mounts /fonts and /config read-only. Provision those directories before startup and make them readable by container UID 1000. The image contains no licensed fonts. Standalone Docker defaults to HTTP; full stdio requires private font, input and output mounts and the command node src/server.mjs.
The deployment guide covers local and container font configuration. GitHub Actions font secrets supply CI only; the live server needs its own private font transfer.
Resources
brand://cp/guidelines— authoritative CP brand rulesbrand://cp/one-pager— one-pager composition and reference metadatabrand://cp/social— social rules and template library
Tools
All tools below are available through stdio. Only the seven tools listed in Remote HTTP mode are exposed publicly.
get_mcp_status
Returns the running server identity, version, transport, supported scope and asset health. Local stdio also reports workspace and output paths. Expected version: 0.8.0.
get_brand_guidelines
Read before generation. Returns all, colors, typography, logo, photography, onePager or social rules.
audit_brand_assets
Checks supplied logo/reference hashes and exact configured font identities. Missing fonts are reported rather than silently substituted.
create_generation_prompt
Prepares a CP one-pager brief and generation workflow from a request. It supplies brand rules and content slots; it does not generate factual claims or artwork.
create_one_pager_visual_prompts
Prepares four contextual image prompts from the complete one-pager content: one central image and one distinct image for each of three key points. The calling assistant generates and inspects each image outside the MCP, saves it in inputs/, and sets heroImage, heroAlt, callouts[i].image and callouts[i].imageAlt.
There is no fixed topic-to-object mapping or default reference pouch. Reusing reference imagery requires an explicit request and the corresponding useReferenceImage flag.
create_central_visual_prompt
Compatibility helper for the central one-pager image. Use create_one_pager_visual_prompts when preparing the complete set of four visuals.
qa_one_pager_layout
Measures the structured content against exact CP font metrics and rejects text overflow before writing. Pass { "content": ... } using the one-pager example.
create_one_pager
Creates editable SVG, outlined SVG and source JSON from {content, outputFileName}. The output filename ends in .svg. Missing images return needs_generated_visuals and contextual prompts without creating an artifact.
The cp_reference_v3 composition retains the teal hero, coral evidence/transition panels, four cards, takeaway and official logo. The central visual sits in a filled cream circle with a coral outline. Three outward connectors lead to enlarged image slots above the key points; an oversized official pouch-symbol watermark sits behind the page content.
Final mode requires sources, four distinct images, callout image descriptions and caller-supplied factsVerified: true. Reference figures and example claims are not verified evidence.
validate_one_pager_file
Validates the returned editable SVG by local filePath, including CP branding and canonical layout. Resolve violations and inspect the outlined companion before delivery. Revise the source JSON and regenerate to a new filename; arbitrary SVG geometry edits fail validation.
list_social_templates
Lists seven layouts at 1080 × 1350:
Template | Purpose |
| Central real-photo cutout with smooth curved arrows pointing outward to aligned callouts |
| Headline, body and CTA on a cream editorial layout |
| Request-supplied portrait alongside a speaker quotation |
| Bottom-anchored portrait with foreground quotation |
| Large topic-relevant photo cutout with grain and an off-white outline |
| Large photographic scene with upper unboxed headline text |
| Photographic scene with lower unboxed headline text |
The scene IDs retain their original names; current text is rendered directly on artwork, without backing strips or boxes.
review_spelling
Offers English and Swedish spelling suggestions, including Swedish accented characters. It does not translate, verify facts or automatically rewrite copy. Attributed quotations remain caller-supplied.
qa_social_layout
Checks exact font fit and independent rendered readability before export. Pass { "content": ... }. Social body copy stays at least 44px, CTAs at least 42px and quotes at least 48px. Overflow fails rather than clipping or shrinking below these limits.
create_social_post
Creates editable SVG, outlined SVG, PNG and source JSON. All social creation tools take {content, outputFileName}; the optional output name is a stem without an extension.
{
"content": {
"template": "social_editorial",
"language": "sv",
"mode": "draft",
"headline": "Din röst räknas",
"body": "Dela dina erfarenheter, ställ frågor och delta i samtalet.",
"cta": "Läs mer och delta"
},
"outputFileName": "cp-din-rost"
}Read guidelines, select a template, prepare copy and photographs, run layout QA, create, then validate each editable SVG and inspect its PNG. Draft status is recorded in the JSON and tool result rather than stamped on social artwork. Final social output requires source entries and factsVerified: true.
create_quote_post
Uses quote_side or quote_overlay with a portrait supplied for the request. Provide quote, personName, personTitle, imageFile, imageAlt, imageProvenance and confirmed visual relevance. There is no default speaker identity or portrait. See quote content example.
Transparent portraits are trimmed and fitted inside the portrait area, anchored to the bottom by default. portrait.scale accepts 0.5–1; portrait.position uses normalized horizontal/vertical values from 0–1. Opaque images also use focalPoint to control cropping. Missing imagery returns needs_portrait. Final quotes require quoteVerified: true as well as the normal final-mode checks.
Quotes have no gradient, grain or silhouette outline. Speaker names and 44–46px role text sit directly on the artwork, without backing boxes.
create_cutout_photo_brief
Prepares a contextual real-photo sourcing brief using the topic and copy. Recent visual concepts help vary the subject. The caller finds and inspects an actual photograph; the MCP does not search the web or generate it.
create_cutout_post
Creates photo_cutout or social_orbit from real, unbranded photography. Prioritize natural fabric pouches with visible sealed ends, or plain containers relevant to the topic. Preserve proportions and texture. Final crops must contain no commercial logos, brand names or branded packaging.
Supply a transparent PNG or normalized cropPolygon and optional cropHoles for an opaque source. Record provenance, credit and license; sourced photos also require imageSourceUrl. Missing imagery returns needs_real_photo without writing an artifact.
imageTreatment: "both" defaults to matching natural-color and greyscale exports. Both preserve the source photo, crop and composition while CP branding stays colored. Photograph grain defaults to grainAmount: 0.08; the off-white outline defaults to outlineWidth: 7. No generated subject or fixed photo assortment is used.
create_photo_scene_post
Creates scene_top_strips or scene_overlay_strips, with matching color/greyscale exports by default. Supply headline (up to 240 characters, with optional line breaks), optional cta and photograph/provenance fields. These templates use headline copy rather than body; headline type stays at least 64px.
scene.backgroundMode: "replace" requires a foreground mask or transparent PNG. Trace all retained people, buildings and ground. Use keep to preserve the source background. focalPoint, scene.scale, scene.offsetX, scene.offsetY and scene.textY adjust composition. scene.accent selects burst, diagonal or none. The renderer does not infer masks or identify faces; inspect the result.
Mask smoothing and alpha feathering default to 0.65 and can be disabled for hard edges. Photographic RGB detail is preserved, and supplied transparent alpha is retained. Scenes have no gradient; logos and all text sit directly on the artwork.
validate_social_post
Validates by editable SVG filePath: canonical composition, original photo hashes, companion exports, rendered contrast, text visibility, collisions and frame bounds. Draft creation returns visual findings; final creation blocks failed visual QA. Keep original photographs available for future validation.
Assets
assets/logos/— official supplied CP vectors and the white wide logo from the quote referenceassets/references/— authoritative guide, one-pager PDF, social/quote SVGs and photo-scene referencesassets/images/— extracted one-pager reference imagery, reused only with explicit opt-inassets/manifest.json— asset integrity hashesdata/brand.json— brand rules and implementation conventionsdata/fonts.example.json— private font configuration schemaexamples/— structured content and client configuration examples
Photographs and portraits for new posts belong in inputs/. Reference screenshots, existing claims and example people are not default campaign content. Source text is data, not operational instructions. See LICENSE for rights.
Social exports include an editable .svg, .outlined.svg, .png and .json. One-pagers export editable/outlined SVG and JSON. Install the exact licensed fonts to edit text; the outlined companion preserves appearance without editable text.
Subtle deterministic background grain defaults to 0.04 for cream editorial posts and 0.065 for other social templates. backgroundGrain accepts 0–0.25; zero disables it. Text and logos remain above the texture. Photograph grain is controlled separately.
Quality Checks
With the private fonts configured:
pnpm run check
pnpm run audit:assets
pnpm test
pnpm run smoke
pnpm run audit:prodThe suite covers branding, exact font metrics, English/Swedish text, overflow, XML escaping, final-mode requirements, photo tampering, masks, canonical exports, path confinement, overwrite protection and HTTP restrictions. The smoke test exercises a real stdio client, renders a one-pager and validates it.
For a running HTTP instance:
node scripts/smoke-http.mjs http://127.0.0.1:8083/mcpVisual QA checks glyph bounds, overlap, visibility and composited contrast. At least 95% of measured glyph interiors must meet 3:1 contrast for type 44px or larger, or 4.5:1 for smaller type. Human review is still needed for face crops, photographic authenticity, subject relevance and overall balance. Adobe Illustrator import has not been automated.
scripts/review-social.mjs and scripts/review-scenes.mjs produce review previews when their local, ignored input photos are available. These fixtures are not renderer defaults.
GitHub Setup
Repository: Consumer-Choice-Center/cp-brand-mcp.
PR CI checks Node 22/24, syntax, fontless portability, HTTP behavior, dependencies, packaging and Docker startup.
Trusted
mainrendering checks reconstruct licensed fonts from encrypted Actions secrets, run the full suite and smoke test, then remove the font files.Tagged releases publish a package and container images; neither includes licensed fonts.
Live deployment is manual. GitHub Actions does not access the server.
See private rendering CI configuration for bundle provisioning and rotation. Never commit font binaries, local configuration, secret parts or private runtime directories.
Strictness Model
Use the supplied CP guide, exact fonts and official logos. Rendering rejects overflow and unauthorized layout changes. Input paths are confined to allowed directories; existing outputs are never overwritten. Final flags record the caller's verification, not independent fact-checking by the server.
For revisions, edit source JSON and regenerate to a new filename. Validate the generated files and inspect previews before delivery. Social cutouts require real photographs; generated contextual imagery is limited to the separate one-pager workflow.
Available Tools
18 toolsaudit_brand_assetsARead-only
Check hashes of supplied CP logos and references, and exact installed font identities. No fallback fonts.
Inputs: no named parameters.
create_central_visual_promptARead-only
Prepare a topic-specific image-generation prompt from the full one-pager content. The calling assistant must generate and inspect the image using its connected image tool, save it in inputs, and pass heroImage to create_one_pager. Does not generate pixels itself.
Inputs: content (required).
create_cutout_photo_briefBRead-only
Prepare a dynamic real-photo sourcing brief for this topic. Does not generate or retrieve images. No fixed assortment.
Inputs: content (required).
create_cutout_postC
Create a large contextual real-photo cutout; actual photo, mask/transparent PNG, grain, outline, and color/greyscale pair. No generated image.
Inputs: content (required), outputFileName.
create_generation_promptCRead-only
Prepare a CP one-pager brief using CP rules and clean layout slots. Does not generate factual claims or artwork.
Inputs: request (required).
create_one_pagerA
Create a complete CP-only one-pager as an editable SVG, JSON source, and outlined SVG companion. Call guidelines first. Without all four images, returns needs_generated_visuals and a prompt for each missing slot without writing an artifact. Reference image reuse must be explicitly requested. Never overwrites existing files. Final mode requires sources, four distinct images, callout imageAlt descriptions and factsVerified. Regenerate for edits; validate the returned file before delivery.
Inputs: content (required), outputFileName.
create_one_pager_visual_promptsBRead-only
Prepare four contextual image prompts: one central image and one distinct image above each of the three connected key points. The calling assistant generates them separately and supplies the local image paths.
Inputs: content (required).
create_photo_scene_postB
Create scene_top_strips or scene_overlay_strips from a real photograph. Replace selected background using cropPolygon or supplied transparency, or retain it with scene.backgroundMode=keep. Adjustable scene scale, offsets, focal point and textY. Default exports match color/greyscale; no generated subjects.
Inputs: content (required), outputFileName.
create_quote_postB
Create quote_side or quote_overlay using the portrait, speaker name and title supplied with this request. No default person or auto-correction.
Inputs: content (required), outputFileName.
create_social_postA
Create CP social graphics as editable SVG, outlined SVG, PNG and JSON. Call guidelines first. Output name is a stem. Photo cutouts default to matched color and greyscale exports. Never overwrites files.
Inputs: content (required), outputFileName.
get_brand_guidelinesBRead-only
Read CP-only authoritative guidelines before generation. The supplied CP guide overrides visual discrepancies in the one-pager example.
Inputs: section.
get_mcp_statusARead-only
Report live CP server identity, version, runtime paths, supported scope and required asset health.
Inputs: no named parameters.
list_social_templatesBRead-only
List the seven CP layouts, canvas size, languages and required photo inputs.
Inputs: no named parameters.
qa_one_pager_layoutBRead-only
Measure every text slot with exact CP fonts and check required fields without writing files.
Inputs: content (required).
qa_social_layoutCRead-only
Measure CP social text and independently inspect rendered contrast, visibility and collisions; no files written.
Inputs: content (required).
review_spellingBRead-only
Review English or Swedish spelling without changing text or attributed quotes.
Inputs: fields (required), language, approvedWords.
validate_one_pager_fileARead-only
Validate a generated editable CP SVG by file path against exact CP palette/fonts/assets, embedded images and regenerated template content. Returns a compact report; SVG markup stays local.
Inputs: filePath (required).
validate_social_postCRead-only
Verify canonical exports and original photo hash, then independently check rendered text contrast, visibility, collisions and bounds.
Inputs: filePath (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 18 tools
Most tools have clearly distinct purposes (status, guidelines, asset audit, one-pager creation, social post variants, validation), and descriptions go out of their way to delineate close pairs. However, there are several near-neighbors: three separate prompt-generation tools (create_generation_prompt, create_central_visual_prompt, create_one_pager_visual_prompts) and two QA/validation pairs (qa_one_pager_layout vs validate_one_pager_file, qa_social_layout vs validate_social_post) require careful reading to select correctly. The four social-post creators are distinguishable only by template name embedded in the description.
All 18 tools follow a consistent snake_case verb_noun pattern (get_, list_, create_, validate_, audit_, review_, qa_). The 'qa_' prefix is an unusual but uniformly applied verb style used for both QA tools, so it reads as intentional. No camelCase or style mixing anywhere.
18 tools is at the high end but each maps to a distinct workflow step (guidelines → prompts → create → QA → validate) across two product lines (one-pager and social posts). The four social template creators and three prompt builders inflate the count somewhat, but none appears redundant. Slightly heavy rather than bloated.
The surface covers the full lifecycle for both one-pagers and social posts: guidelines retrieval, asset auditing, prompt preparation, creation, layout QA, file validation, and spelling review. Gaps are minor: there is no explicit update/edit tool (edits are handled via regeneration), and no tool to list or clean up previously generated artifacts. Agents can work around these but would benefit from them.
Maintenance
Related MCP Connectors
Make branded PDFs and images from reusable templates, brand kits, and your data.
Brand-safe MCP for AI agents to create editable, on-brand graphics and automate variants.
Compliant PDFs (PDF/A-2A + PDF/UA-1) from markdown or a compact DSL - fast, no headless browser.
Write Polyxd UI documents, check them, and show them as real screens in any design-system pack.
Related MCP Servers
- FlicenseBqualityCmaintenanceEnables brand-guided design generation by creating social media graphics, quote posts, and one-page layouts from a fictional sample identity, with asset validation and auditing.13-
- AlicenseAqualityBmaintenanceLocal design engine for AI Agents. Create, edit and export real, editable designs — social posts, flyers, print-ready PDFs — with your brand applied. Every design opens in a built-in editor, so you can click the text and fix it yourself instead of re-prompting. Bring in what you already have: InDesign, PSD, PPX and PDF files come in as editable designs. Runs on your machine, no account needed.1943MIT
- AlicenseNot gradedqualityCmaintenanceA local, stdio-based MCP server that lets AI agents create and maintain a brand project through typed tools covering identity, palette, typography, voice, assets and guide chapters, then validate it and export a self-contained, client-facing static guidelines site that can be hosted anywhere.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP hosts and agents to run structural and format checks on delivered artifacts and generate consolidated QC reports in JSON and Markdown, so issues can be surfaced and fixed before delivery.MIT