BrandKit MCP is an open-source MCP server whose goal is to expose a company's complete brand atomic system to AI tools. Through the Model Context Protocol (MCP), it enables Claude and other LLM tools to instantly obtain structured brand language and visual rules when helping build websites, apps, or marketing materials.
Purpose When AI participates in brand-related creation, it often lacks structured access to brand specifications. BrandKit MCP unifies the organization of brand verbal identity and visual identity for AI tools to read directly. Verbal identity includes positioning, audience, messaging, differentiation, concepts, and voice; visual identity includes colors, typography, components, tokens, motion, and assets.
Main capabilities The project provides 18 read-only tools, 1 local write tool, and 14 resources. Seven creative/language tools (get_brand_overview, get_positioning, get_audience, get_messaging, get_differentiation, get_concepts, get_voice) inject a _taste_primer field that carries the contents of magic_trick.md verbatim; get_magic_trick directly returns that primer document without wrapping. The get_tokens tool supports token output formats such as CSS custom properties, SCSS variables, Tailwind config, W3C Design Tokens, and flat JSON.
Brand file organization The brand atomic system resides under a single <brand-root>/ directory, by default ./brand_atomic_system. The human/ directory within it is intentionally ignored by the MCP server and may hold PDFs, print specifications, and other human-only materials; everything under agent/ is indexed and served. Verbal content resides in agent/verbal/ and has no context override, applying globally; visual content can be overridden by context via the artifacts/ layer. BrandKit v2 supports three contexts.
Configuration and writing The brandkit.config.yaml in the project root controls BrandKit MCP and must declare version: 2; a missing field or a declared version: 1 will throw BrandkitV1ConfigError at startup. init by default refuses to change an existing brandkit.config.yaml or brand_atomic_system/ unless --force is explicitly used; force mode performs a clean replacement only for regular single-link configurations and real directories, while symlinks, hard-linked configurations, and special file targets are rejected. The stdio transport also exposes sync_brand_docs, used to update brandkit.config.yaml, DESIGN.md, and PRODUCT.md; network transports hide and reject this write-capable tool by default. magic_trick.md is written by humans, only read by MCP, and sync_brand_docs never writes to it.
Transport and security The server supports stdio (recommended for Claude Desktop), SSE (legacy HTTP), and Streamable HTTP (current MCP specification). Network transports remain unauthenticated when bound to a loopback address for local development; before binding to any non-loopback host, BRANDKIT_AUTH_TOKEN must be set, and clients must send Authorization: Bearer <token> in every request. Network transports are read-only by default, including loopback, standalone, and Vercel deployments; to expose sync_brand_docs via SSE or Streamable HTTP, start with brandkit-mcp serve --transport http --allow-write-tools, or set allowWriteTools: true in the programmatic startServer options; this is a privileged mode, and non-loopback binding still enforces authentication. All network transports reject untrusted Host and Origin headers with HTTP 403. The preview UI is loopback-only and rejects any wildcard, LAN, or public binding host.
Ingestion limits Brand ingestion is limited before reading file contents: by default a maximum of 16 MiB per file, 128 MiB total across all unique inputs, at most 1,000 unique files, and at most 16 path segments under brand.root. Fixed documents, discovered components and tokens, manifests, fonts, and image assets share the same budget. Directory enumeration is capped at four times the configuration file limit. Large brands can apply these typedThe value is increased to the built-in safety limits (64 MiB per file, 512 MiB total, 10,000 files, 64 path segments), and maxTotalBytes must be at least equal to maxFileBytes.
Deployment The default Compose service runs a supported Streamable HTTP transport on http://127.0.0.1:3001/mcp , uses the built-in Acme example, and requires a bearer token to be set before startup; Compose refuses to start if it is missing. The repository contains a stateless Node.js Function at /api/mcp, requires BRANDKIT_AUTH_TOKEN to be set in each Vercel environment and sent as a Bearer token; the default deployment explicitly packages templates/starter/** and serves it read-only. The serve command accepts --transport <stdio|sse|http>, --host <host>, --port <number>, --config <path>, --watch, and the privileged network option --allow-write-tools.
Applicable Scenarios and Limitations It is suitable for teams that need AI tools to follow brand guidelines when creating websites, apps, or marketing materials. Limitations include: v2 is a breaking version, the directory layout, context vocabulary, and tool surface have all changed, there is no automatic migration, and path mapping must be done manually; brand files must remain within brand.root, and symlinks and manifest paths that escape the root directory are ignored with warnings; configuration files must be regular single-link files; network transport is read-only by default, and non-loopback binding must be authenticated. The project uses the MIT license, uses TypeScript strict mode, ESM imports with the .js extension, Vitest tests, and is built on Anthropic's Model Context Protocol.