Skip to content

Brand MCP server

The Pulumi Brand MCP Server is a remote Model Context Protocol server that exposes the Pulumi brand guidelines as structured resources, tools, and prompts. It’s designed to be consumed by AI agents and LLM-powered workflows that create, review, or audit brand content, and it’s deployed at brand.pulumi.com and compatible with any MCP client that supports streamable HTTP.

Point any MCP-compatible client at the public URL:

https://brand.pulumi.com/mcp

In the snippets below, we’ve named the connection pulumi-brand, but you can change that if you like.

You can use the MCP server with Claude Code, Claude Desktop, and in the browser at Claude.ai.

Add the MCP server with the CLI:

Terminal window
claude mcp add --transport http pulumi-brand https://brand.pulumi.com/mcp

By default, the server is scoped to the current project. Add --scope user to make it available across all of your projects:

Terminal window
claude mcp add --transport http --scope user pulumi-brand https://brand.pulumi.com/mcp

To confirm the connection succeeded, run claude mcp list. To inspect the server’s tools, run /mcp in an active Claude Code session.

You can configure Claude Desktop with the MCP server in one of two ways.

  1. In Claude Desktop, open Customize → Connectors.
  2. Click Add → Add custom connector.
  3. Enter a name (e.g., “Pulumi Brand”) and paste the URL: https://brand.pulumi.com/mcp.
  4. Save the connector and begin using the MCP server.

This approach uses the mcp-remote connector.

  1. In Claude Desktop, open Developer → Local MCP servers.

  2. Click Edit config and open the file in your text editor of choice.

  3. Add a pulumi-brand block to the mcpServers list (add that list if it doesn’t exist):

    {
    "mcpServers": {
    "pulumi-brand": {
    "command": "npx",
    "args": ["-y", "mcp-remote", "https://brand.pulumi.com/mcp"]
    }
    }
    }
  4. Save the file and begin using the MCP server.

  1. Visit https://claude.ai, sign in, and navigate to Customize → Connectors.
  2. Click Add → Add custom connector.
  3. Enter a name (e.g., “Pulumi Brand”) and paste the URL: https://brand.pulumi.com/mcp.
  4. Save the connector and begin using the MCP server.
  1. Add the following block to ~/.codex/config.toml for all projects, or to ./.codex/config.toml for the current one:

    [mcp_servers.pulumi-brand]
    url = "https://brand.pulumi.com/mcp"
  2. Save the file, restart Codex, and begin using the MCP server.

You can use the MCP server with Cursor in several ways.

  1. Open Settings → Cursor Settings → Tools & MCPs.

  2. Under Installed MCP Servers, click Add Custom MCP.

  3. Add the following block to ~/.cursor/mcp.json for all projects, or to ./.cursor/mcp.json for the current one:

    {
    "mcpServers": {
    "pulumi-brand": {
    "transport": "http",
    "url": "https://brand.pulumi.com/mcp"
    }
    }
    }
  4. Save the file and begin using the MCP server.

  1. Add the following block to ~/.cursor/mcp.json for all projects, or to ./.cursor/mcp.json for the current one:

    {
    "mcpServers": {
    "pulumi-brand": {
    "transport": "http",
    "url": "https://brand.pulumi.com/mcp"
    }
    }
    }
  2. Save the file, restart Cursor, and begin using the MCP server.

  1. Add the following block to ~/.config/opencode/opencode.json for all projects, or to ./opencode.json for the current one:

    {
    "$schema": "https://opencode.ai/config.json",
    "mcp": {
    "pulumi-brand": {
    "type": "remote",
    "url": "https://brand.pulumi.com/mcp",
    "enabled": true
    }
    }
    }
  2. Save the file, restart OpenCode, and begin using the MCP server.

Any MCP client that supports a remote Streamable HTTP server works. Give it the URL https://brand.pulumi.com/mcp directly if it accepts one, or bridge through stdio with npx -y mcp-remote https://brand.pulumi.com/mcp (the same pattern as the Claude Desktop config-file option above).

Static brand content served via resources/read. Each resource uses a brand:// URI scheme.

URINameContent
brand://colorsBrand ColorsFull color system — 8 palettes × 11 steps, semantic roles, utility colors, accessibility notes
brand://colors/{palette}Brand Color PaletteA single palette (e.g., brand://colors/violet)
brand://typographyBrand TypographyInter + Monaspace Neon typefaces, font stacks, usage rules, typographic scale
brand://voiceBrand Voice & ToneVoice principles, tone-by-context matrix, preferred/avoided words, inclusive language
brand://writing-styleWriting StyleGrammar, punctuation, style rules (Chicago Manual of Style)
brand://logoLogo GuidelinesLockups, sizing, approved backgrounds, clear space, dos/don’ts
brand://identityBrand IdentityBrand attributes, purpose, values, Phosphor iconography guidelines
brand://visualsVisual GuidelinesIllustration style, accent lines, photography, mascot (Pulumipus)
brand://guidelinesUsage GuidelinesGenerative AI usage rules, when to bend brand rules

The tools fall into two groups: brand lookup (colors, typography, search) and asset generation (logos).

Return the brand orientation — how to use this server and which get_guidelines section to pull for the task at hand. The same text MCP clients receive as server instructions at session start; call this when your client doesn’t surface those, or to re-orient mid-task. It routes you to the rules rather than restating them — use get_guidelines for the full guidance on a topic.

Takes no arguments.

Return the complete text of a brand guideline section — the full guidance, not a summary. Call it before producing or reviewing the matching kind of artifact (for example, voice and writing-style before writing copy). For color, use the color tools below; to search across sections, use search_guidelines.

ParameterTypeRequiredDescription
sectionstringYesOne of: voice, writing-style, typography, logo, identity, visuals, guidelines

Get a specific brand color palette with all 11 steps (50–950) and semantic roles.

ParameterTypeRequiredDescription
palettestringYesOne of: violet, gray, green, aqua, blue, red, orange, yellow, or utility (black, white, Service Black)
formatstringNoColor format hint: hex, hsl, rgb, oklch. Stored values are hex; other formats available via brand://colors.
response_formatstringNojson (default) for structured data or markdown for a human-readable table

Find the perceptually closest brand color to any CSS color value using OKLab Euclidean color difference.

ParameterTypeRequiredDescription
colorstringYesAny CSS color: #6366f1, rgb(99,102,241), hsl(239,84%,67%), oklch(...), or a named color
modestringNolight, dark, or both (default). Which mode’s palette to match against.

Returns the matched token name, palette, step, mode, and hex value with a replacement recommendation.

Get semantic color tokens (primary, accent, muted, background) for one or all palettes.

ParameterTypeRequiredDescription
palettestringNoA specific palette name. Omit to get tokens for all 8 palettes.

Check contrast between two colors using WCAG 3 APCA (Accessible Perceptual Contrast Algorithm). Returns the Lc value, polarity, pass/fail thresholds, and a font-size lookup per weight.

ParameterTypeRequiredDescription
foregroundstringYesHex value or brand token name (e.g., violet-700-light)
backgroundstringYesHex value or brand token name

APCA thresholds:

Lc (absolute)Use case
≥ 90Preferred body text
≥ 75Body text minimum
≥ 60Large / heading text
≥ 45Large non-text elements
≥ 30Non-text / spot elements
< 30Insufficient — do not use

Get the correct brand font stack and usage rules for a given typographic context.

ParameterTypeRequiredDescription
contextstringYesheading (Inter Semibold), body (Inter Regular), or mono (Monaspace Neon)

Full-text search across all brand guideline content. Returns excerpts with surrounding context.

ParameterTypeRequiredDescription
querystringYesSearch terms or natural language question about the brand

Return a URL for a Pulumi logo in any approved variant, format, background, and size. The URL is served by the brand site’s logo endpoint at brand.pulumi.com/api/logo (CDN-cached) — surface it directly to the user. Pass inline: true to embed the bytes (SVG markup or a base64 data URI) in the tool response instead, for runtimes that can’t fetch a URL at render time.

ParameterTypeRequiredDescription
usagestringNoPreset that sets sensible defaults: web, print, slide-deck, email-signature, favicon, social-avatar, custom. Explicit params override.
lockupstringNoauto (default), mark, horizontal, stacked, or icon-circle / icon-rounded / icon-square
treatmentstringNocolor (default) or monotone. Icons are always color.
themestringNolight or dark. Auto-derived from the background when omitted.
formatstringNosvg (default), png, jpg, or pdf
backgroundstringNotransparent (default), white, black, service-black, violet-50, violet-950
width / heightnumberNoSize in units. One alone → logo-only; both → centered on a padded canvas.
unitsstringNopx (default), cm, or in (with dpi, default 300)
inlinebooleanNotrue to embed the asset bytes in the response instead of returning a URL. Default false.

Pre-built prompt templates that inject brand context for LLM-powered workflows.

Prompts are user-invoked — the agent doesn’t call them automatically. You trigger one, fill in its arguments, and it expands into a ready-made message (pre-loaded with the relevant brand guidelines) that’s sent to the model. How you invoke them depends on your client:

  • Claude Code — they appear as slash commands. Type / and look for the pulumi-brand entries (e.g., /mcp__pulumi-brand__review_copy).
  • Claude Desktop / Claude.ai — open the + (connectors) menu in the composer, pick the pulumi-brand server, choose the prompt, and fill in the fields.
  • Other clients — wherever the client surfaces MCP prompts (a command palette or MCP panel). Under the hood it’s the standard prompts/listprompts/get flow.

Note that review_image takes no arguments — attach the image to your message first, then invoke it.

Review text content for compliance with brand voice, tone, and writing style. Returns an overall assessment, a list of specific issues with quotes and suggested rewrites, and a clean rewritten version if issues were found.

ArgumentRequiredDescription
copyYesThe text content to review
contextNoproduct, marketing (default), community, or enterprise

Evaluate an image against brand visual guidelines — color, typography, iconography, illustration, and photography. Attach the image to your message, then invoke the prompt.

Takes no arguments — the prompt reads the attached image directly.

Review a design in Figma for brand adherence — covers colors, typography, logo usage, spacing, and overall alignment. Works in combination with the Figma MCP, which retrieves the design from the URL.

ArgumentRequiredDescription
figma_urlYesFigma file or node URL (figma.com/design/…) to review