Connect Brand Kit OS to Claude, Cursor, and MCP clients so your brand context is available in every agent workflow
Claude caches the favicon from the server URL you originally pasted. Re-add the connector using the branded URL below to see the Brand Kit OS icon.
https://www.brandkitos.com/mcpbk_claude_connector_v1Brand Kit OS uses the Model Context Protocol (MCP) to give Claude direct access to your brand data. Once connected, Claude can pull your tone, voice, audience, messaging, and constraints in real time to produce on-brand content.
There are two connection methods. Both require a Base or Premium subscription and an active API key.
MCP access requires a Base or Premium plan. View plans
The Custom Connector uses OAuth (PKCE) and authenticates automatically the first time you approve it in Claude — no API key required. The Cowork Plugin generates an API key for you automatically when you download the ZIP. You can also create or revoke keys manually in Settings → API Keys.
Choose your preferred way to connect Brand Kit OS to Claude
Works on claude.ai (browser), Claude Desktop, and Claude Mobile. No files to download or install. Requires Claude Pro, Max, Team, or Enterprise.
In Claude, go to Settings → Connectors and click Add custom connector.
Enter Brand Kit OS as the connector name.
https://www.brandkitos.com/mcpbk_claude_connector_v1Leave OAuth Client Secret empty — PKCE handles verification.
You'll be redirected to Brand Kit OS to approve the connection. Once authorized, the Brand Kit OS tools appear in your Claude conversations.
Try asking Claude: "Load my brand kit" or "Write a blog post about [topic]" — Claude will automatically apply your brand voice and guidelines.
Mobile access: If you set up the connector on claude.ai (web), it's automatically available on Claude Mobile (iOS & Android). You cannot add new connectors from the mobile app.
These tools are available to AI assistants connected via MCP, grouped by purpose. The canonical runtime list is always available via the list_brand_kit_tools tool.
list_brand_kitsDeduped kits you own or share; includes membership_role, can_read, can_write_brand_kit, brand_kit_write_sections & can_write_knowledge_fileslist_brand_kit_toolsCanonical runtime list of every MCP tool the server exposes, with descriptions and required scopesget_brand_kit_summaryCompact brand overview (~500 tokens) — start hereget_brand_kitComplete brand kit with all sections (large payload)get_brand_kit_completenessAudit which fields are populated, partial, or empty + per-field schemaget_brand_context_for_agentTask-scoped brand context string ready to inject into agent promptsget_persona_system_promptFormatted system prompt for a specific AI personalist_library_archetypesList curated voice archetypes (e.g. The Sage, The Hero) for recommending and applying to a brand kitget_library_archetypeFetch one archetype by id, including the llm_instruction text for embodying itlist_governance_platformsCanonical platform values accepted on platform-scoped writing_constraints (linkedin, reddit, instagram, …)get_brand_kit_coreMission, vision, brand story, promises, taglines, storytelling elements, and industry_classificationget_brand_kit_personalityPersonality traits, values, principles, and moodsget_brand_kit_expressionTone of voice, verbal style, voice archetypes, and visual styleget_brand_kit_visualsVisual identity: colors, typography, imagery directionget_brand_kit_productsProducts, services, features, and differentiatorsget_brand_kit_audienceTarget audience personas with demographics and pain pointsget_brand_kit_governanceConstraints, compliance notes, and disclosure policyget_brand_kit_personasAI persona configurations for the brandget_brand_kit_competitorsCompetitor analysis including colors, taglines, and value propsget_brand_kit_seoSEO keywords, target queries, and on-brand SEO guidanceget_brand_kit_social_profilesSocial media profiles linked to a brand kitlist_expression_examplesStored "on-brand vs off-brand" expression exampleslist_compliance_standardsCompliance standards available to attach to a brand kitget_disclosure_diligence_questionsAI-disclosure diligence questionnaire for the governance sectionlist_logo_assetsLogo metadata only (no URLs) — use to decide which asset to fetchget_logo_assetFull metadata + URL for a specific logo asset by IDget_brand_kit_logo_assetsDEPRECATED — prefer list_logo_assets + get_logo_assetlist_knowledge_filesKnowledge file metadata + relevance_hint, with optional category filterget_knowledge_fileFull content of a specific knowledge file by IDpreview_brand_kit_core_updateShow the diff a core upsert would produce without writingpreview_brand_kit_personality_updateShow the diff a personality upsert would produce without writingpreview_brand_kit_expression_updateShow the diff an expression upsert would produce without writingpreview_brand_kit_governance_updateShow the diff a governance upsert would produce without writingupdate_brand_kitUpdate top-level brand kit fields (name, slug, etc.)upsert_brand_kit_coreUpdate mission, vision, brand story, brand promises, taglinesupsert_brand_kit_personalityUpdate personality traits, values, principles, moodsupsert_brand_kit_expressionUpdate tone, verbal style, archetypes, terminologyupsert_brand_kit_governanceUpdate behavioral constraints, negative directory, writing rules. Platform-scoped rules: set platformSpecificEnabled: true and pass platform on each constraint (use list_governance_platforms for valid values). Coming soon: dedicated list_platform_rules / upsert_platform_rule tools — until then, platform-scoped governance lives here and per-platform tone overrides live in verbal_style slots on upsert_brand_kit_expression.upsert_brand_kit_seoUpdate SEO keywords, target queries, and on-brand SEO guidanceupdate_brand_kit_visualsUpdate visual identity (colors, typography, imagery)generate_disclosure_statementGenerate a disclosure statement from the diligence questionnairecreate_brand_kit_productAdd a new product or serviceupdate_brand_kit_productUpdate an existing productdelete_brand_kit_productRemove a productcreate_audience_personaAdd a target audience personaupdate_audience_personaUpdate an existing target audience personadelete_audience_personaRemove an audience personacreate_brand_kit_personaAdd an AI persona configurationupdate_ai_personaUpdate an existing AI persona configurationdelete_brand_kit_personaRemove an AI personacreate_brand_kit_competitorAdd a competitor recordupdate_brand_kit_competitorUpdate an existing competitor recorddelete_brand_kit_competitorRemove a competitorcreate_expression_exampleAdd an on-brand / off-brand expression exampleupdate_expression_exampleUpdate an expression exampledelete_expression_exampleRemove an expression exampleupdate_logo_assetUpdate logo metadata (variant, theme, primary flag)delete_logo_assetRemove a logo assetupload_knowledge_fileUpload a new markdown / JSON / PDF document. Requires `original_file_name` (source filename incl. extension) plus optional `relevance_hint`.delete_knowledge_fileRemove a knowledge filegenerate_audience_personaDEPRECATED — prefer preview_generate_audience_persona (review) then create_audience_persona (save). AI-generates a complete target audience persona, writing immediatelygenerate_ai_personaDEPRECATED — prefer preview_generate_ai_persona (review) then create_brand_kit_persona (save). AI-generates a complete AI persona configuration, writing immediatelyReusable prompt templates that AI assistants can invoke for common brand tasks.
brand_voice_checkEvaluate text against the brand voice and governance constraintsgenerate_brand_copyOn-brand marketing copy for social, email, web, ad, or blogbrand_introElevator pitch, bio, about page, or tagline optionscompetitor_positioningDifferentiation analysis from stored competitor dataaudience_persona_briefConcise persona brief for campaign planningcreate_target_audienceGuided interview that calls generate_audience_persona after confirmationcreate_ai_persona_guidedGuided interview that calls generate_ai_persona after confirmationApplies to all tools equally. If you hit the limit, wait up to 60 seconds.
Scopes are set when you create an API key. OAuth tokens receive scopes from the authorization consent screen. Write tools also require owner or admin membership on the brand kit — scopes alone do not override team role.
read
Required baseline. Grants all read, list, and preview tools.
brand_kit:write
Full write access to all brand kit sections, products, personas, and generate tools.
knowledge_files:write
Opt-in scope for upload_knowledge_file only.
Instead of brand_kit:write, you can grant least-privilege keys with per-section scopes such as brand_kit:write:expression. Configure these in Settings → API Keys.
brand_kit:write:core
Mission, vision, story, taglines, promises
brand_kit:write:personality
Traits, values, principles, moods
brand_kit:write:expression
Voice, tone, archetypes, platform rules, examples
brand_kit:write:governance
Constraints, compliance, approval workflows
brand_kit:write:products
Product and service catalog
brand_kit:write:audience
Target audience personas
brand_kit:write:personas
AI persona configurations
brand_kit:write:competitors
Competitor profiles
brand_kit:write:visuals
Colors, fonts, logos, kit name and summary fields
brand_kit:write:seo
Keywords and SEO metadata
Shared brand kits: viewers and editors can read, but only owners or members with role admin may use write or generate tools via MCP, even when the credential lists write scopes. Check membership_role from list_brand_kits before calling write tools.
Streamable HTTP
Not legacy SSE — fully spec-compliant
The server supports both application/json and text/event-stream responses based on the client's Accept header.
The server issues an Mcp-Session-Id header on the initialize response. Clients should include this header on all subsequent requests for the same session.
Common integration pitfalls when the server is healthy but something still looks wrong.
Empty list_brand_kits: usually means this user has no brand kits and no memberships, or the API key is tied to a different account than the one you seeded. It is not proof that MCP is down.
Cursor “connected” only confirms transport. Run tools/call for list_brand_kits to verify auth and data.
UUIDs: resolve brand_kit_id from list_brand_kits. Placeholder strings and invalid hex forms are rejected.
Shell: quote JSON carefully for curl -d; stuck commands often come from unclosed quotes.
Shared kits: viewers and editors can read, but only owners or members with role admin may use write or generate tools via MCP, even with write scopes.
Tool failures and prompts/get application failures return a successful JSON-RPC response with isError: true in the result and a structured _meta.error_code. Agents should branch on the code, not parse the message string. JSON-RPC top-level error is reserved for protocol issues (e.g. unknown method or unknown prompt name).
Tool error response shape
{
"jsonrpc": "2.0",
"id": 42,
"result": {
"isError": true,
"content": [{ "type": "text", "text": "Access denied to this brand kit" }],
"_meta": {
"error_code": "access_denied",
"retryable": false,
"recovery_hint": "Confirm the brand_kit_id is correct, or ask the brand kit owner to share it..."
}
}
}
| Code | Retryable | What the agent should do |
|---|---|---|
scope_denied |
No | Surface the recovery hint verbatim. Do not retry — the user must mint a new key with the required scope. |
access_denied |
No | Verify the brand_kit_id by calling list_brand_kits. If correct, ask the user to share the kit. |
validation_error |
No | Read the recovery hint, fix the arguments, and retry. Never retry with the same arguments. |
not_found |
No | Re-list the parent collection (e.g. get_brand_kit_personas) to find a valid id, or report to the user. |
quota_exceeded |
No | Tell the user. Tokens are not deducted on failed generations — a refund is automatic. |
ai_gateway_failed |
Yes | Retry once after a short delay. If it fails again, surface the message and the request_id. |
db_error |
Yes | Retry once. If it fails again, treat as transient and surface the request_id for support. |
timeout |
Yes | Retry with a smaller scope (e.g. get_brand_kit_summary instead of get_brand_kit). The server cancels upstream calls automatically. |
internal_error |
Yes | Retry once. Surface the request_id to the user — this is unexpected and worth reporting. |
Every response carries an Mcp-Request-Id header (also exposed inside _meta.request_id on tool errors and inside JSON-RPC error.data.request_id on protocol errors). Paste it into Settings → API Keys → Analytics to find the row in request logs.
generate_*) have a 60-second sub-budget; the upstream fetch is cancelled on timeout.The MCP server connection may not have started. Check that your API key or OAuth connection is valid and restart Claude Desktop.
Your API key may have expired or been revoked. Generate a new one from Settings → API Keys.
MCP access requires a Base or Premium plan. Upgrade your plan.
Wait up to 60 seconds and try again. The limit is 100 requests per minute.
Make sure you've completely quit Claude Desktop and restarted it. For the Custom Connector, verify you entered the correct Server URL and Client ID.
Claude caches the favicon from the server URL you originally pasted. Remove the existing Brand Kit OS connector in Settings → Connectors and re-add it using the branded URL https://www.brandkitos.com/mcp to pick up the Brand Kit OS icon.
This is a Claude client behavior, not a Brand Kit OS issue. Our MCP server already sends the readOnlyHint annotation on every read and preview tool (list_*, get_*, preview_*), per the MCP spec. Claude's connector UI currently prompts for approval regardless of this hint. Cursor and Cline honor the annotation and auto-approve read/preview calls. You can safely approve repeated read calls in Claude — they do not modify any data.