MCP Server Setup
Connect the Alterspective Brand Guidelines to Claude, Gemini, OpenAI, and any MCP-compatible AI assistant.
Production Endpoint
https://brand.alterspective.com.au/mcp Transport: Streamable HTTP | Rate limit: 100 req/15min | Auth: Optional
Claude Setup
Works with Claude Desktop and Claude Code (CLI).
Option A: Remote Connection (Recommended)
Configure Claude Desktop
Edit your Claude Desktop configuration file:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - Mac:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Add this configuration:
{
"mcpServers": {
"alterspective-brand": {
"url": "https://brand.alterspective.com.au/mcp",
"transport": "http"
}
}
} Claude Code (CLI)
Add to your project's .mcp.json:
{
"mcpServers": {
"alterspective-brand": {
"url": "https://brand.alterspective.com.au/mcp",
"transport": "http"
}
}
} Option B: Local Connection (For Development)
Build and Configure Locally
# Build the MCP server
cd alterspective-ai-brand-guide
npm run build --workspace=packages/mcp-server Then add to Claude Desktop config:
{
"mcpServers": {
"alterspective-brand-local": {
"command": "node",
"args": ["<path-to-repo>/packages/mcp-server/dist/index.js"]
}
}
} Gemini CLI Setup
Gemini CLI connects directly to SSE endpoints.
Add to .mcp.json
Create or edit .mcp.json in your project root:
{
"mcpServers": {
"alterspective-brand": {
"url": "https://brand.alterspective.com.au/mcp",
"transport": "sse"
}
}
} API / OpenAI / Custom Integration
Use the MCP endpoint from any language or platform.
Using the MCP SDK (Node.js)
Connect with the official MCP SDK:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://brand.alterspective.com.au/mcp")
);
const client = new Client({ name: "my-app", version: "1.0.0" });
await client.connect(transport);
// List available tools
const tools = await client.listTools();
console.log(tools);
// Call a tool
const result = await client.callTool("validate_colors", {
foreground: "#FFFFFF",
background: "#ABDD65"
});
console.log(result); // { isValid: false, violations: [...] } Direct HTTP (Any Language)
The MCP endpoint accepts standard JSON-RPC over HTTP:
# Step 1: Initialize session
curl -X POST https://brand.alterspective.com.au/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"my-app","version":"1.0"}},"id":1}'
# Response includes Mcp-Session-Id header — use it for subsequent requests
# Step 2: List tools
curl -X POST https://brand.alterspective.com.au/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: <session-id>" \
-d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}'
# Step 3: Call a tool
curl -X POST https://brand.alterspective.com.au/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: <session-id>" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_critical_rules","arguments":{"category":"logo"}},"id":3}' OpenAI Function Calling Bridge
Convert MCP tools to OpenAI function-calling format:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import OpenAI from "openai";
// Connect to MCP
const transport = new StreamableHTTPClientTransport(
new URL("https://brand.alterspective.com.au/mcp")
);
const mcpClient = new Client({ name: "openai-bridge", version: "1.0.0" });
await mcpClient.connect(transport);
// Get tools and convert to OpenAI format
const { tools } = await mcpClient.listTools();
const openaiTools = tools.map(t => ({
type: "function",
function: {
name: t.name,
description: t.description,
parameters: t.inputSchema
}
}));
// Use with OpenAI
const openai = new OpenAI();
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "Check if white text on #ABDD65 is accessible" }],
tools: openaiTools
}); Rate Limiting
The MCP server has rate limits to prevent abuse:
- Unauthenticated: 100 requests per 15 minutes per IP
- Authenticated: 1,000 requests per 15 minutes (pass
Authorization: Bearer <key>)
For higher limits or API key access, contact the Alterspective team.
Available Tools (10)
Once connected, your AI assistant will have access to these brand guideline tools:
get_critical_rules
Returns non-negotiable brand rules that MUST be followed.
theme(optional): Theme name (default: 'alterspective')category(optional): Filter by logo, color, typography, icons, accessibility
get_design_tokens
Returns design tokens (colors, typography, spacing, motion).
theme(optional): Theme namecategory(optional): Filter by colors, typography, spacing, motionformat(optional): Output format (json, css, tailwind)
get_css_variables
Generates CSS custom properties from design tokens.
theme(optional): Theme namescope(optional): Filter by colors, typography, spacing
validate_colors
Validates color combinations for WCAG compliance.
foreground(required): Foreground color (hex)background(required): Background color (hex)fontSize(optional): Font size for context
get_asset_info
Returns information about brand assets (logos, icons, patterns, fonts).
theme(optional): Theme nameassetType(optional): Filter by logos, icons, patterns, fonts
get_rule_by_id
Retrieves a specific rule by its ID.
theme(optional): Theme nameruleId(required): Rule ID (e.g., 'LOGO-001', 'COLOR-001')
get_rules_summary
Returns a summary of all rules grouped by category.
theme(optional): Theme name
list_themes
Lists all available themes in the system.
get_component_status
Returns lifecycle status and metadata for components.
theme(optional): Theme namecomponentName(optional): Specific componentstatus(optional): Filter by experimental, beta, stable, legacy, deprecated
search_icons
Search for brand icons by name, tags, or category.
theme(optional): Theme namequery(optional): Search querycategory(optional): actions, navigation, status, objects, communication, conceptslimit(optional): Max results
Real-World Usage Examples
Example 1: Implementing a Button Component
- Use
get_design_tokensto get Marine color (#075156) - Use
get_critical_ruleswith typography filter - Recommend Montserrat for 16px text (TYPO-001)
- Provide CSS variables:
--as-marineand--as-font-body
Example 2: Validating a Design
- Use
validate_colorsto check contrast (returns 1.58:1) - Use
get_rule_by_idfor COLOR-001 - Reject the design - fails WCAG AA (needs 4.5:1)
- Suggest alternative: Navy text (#17232D) with 10.09:1 ratio
Example 3: Logo Placement
- Use
get_rule_by_idfor LOGO-001 - Enforce: LEFT or RIGHT alignment ONLY
- Prohibit: Center alignment
- Provide rationale: Brand identity consistency
Troubleshooting
Server won't start
# Rebuild the server
cd packages/mcp-server
npm run build
# Check for TypeScript errors
npm run typecheck Claude can't see the tools
- Verify config file path is correct
- Use absolute paths (not relative)
- Restart Claude Desktop completely
- Check Claude Desktop logs
Tools return errors
# Verify theme data exists
ls themes/alterspective/
# Test manually
node packages/mcp-server/dist/index.js