Skip to main content

MCP Server

Takeoff UI MCP Server

An MCP (Model Context Protocol) server that gives AI assistants structured access to Takeoff UI documentation, component data, and integration guides.

What is MCP?

Model Context Protocol is an open protocol and SDK that allows AI assistants to call external tools and data sources in a consistent, secure way. This server implements MCP tools and prompts so assistants can answer questions about Takeoff UI and generate code that follows its standards.

What is Takeoff UI?

Takeoff UI is a comprehensive design system of framework-agnostic web components built with Stencil.js, with official bindings for React, Vue, and Angular, plus a Tailwind CSS plugin. It is developed in a Turborepo monorepo and ships consistent APIs, styles, and documentation across frameworks.

Features

  • Component discovery and details: List all components and fetch in-depth docs and examples
  • Tailwind CSS integration: Guidance on setup, tokens, typography, spacing, and more
  • Framework integration: React, Vue, Angular, Next.js, Nuxt guides
  • Smart prompts: Figma-to-code and refactoring prompts tailored to Takeoff UI
  • Flexible transports: STDIO, Streamable HTTP, and legacy SSE

Transport options

  • STDIO (default): Best for local development with desktop assistants
  • Streamable HTTP: Single /mcp endpoint; recommended for HTTP usage
  • SSE (legacy): Backwards compatibility only; not recommended for new setups

Quick start

Use the hosted version without local installation:

# Using mcp-remote
npx -y mcp-remote https://takeoffui.turkishtechlab.com/mcp

Local install

git clone https://github.com/turkishtechnology/takeoff-ui-mcp.git
cd takeoff-ui-mcp
npm install
npm run build

Run

# STDIO (default)
npm start

# Streamable HTTP
npm run start:stream

# SSE (legacy)
npm run start:sse

Default addresses:

  • Main (Streamable HTTP): http://127.0.0.1:3845/mcp
  • SSE events: http://127.0.0.1:3845/sse
  • Health: http://127.0.0.1:3845/health
  • Info: http://127.0.0.1:3845/info

Test the HTTP server

curl -X POST http://127.0.0.1:3845/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","id":1}'

curl http://127.0.0.1:3845/health
curl http://127.0.0.1:3845/info

Configuration

Create .env in the project root (copy from .env.example):

NODE_ENV=development
HOST=127.0.0.1
PORT=3845
# 0=DEBUG, 1=INFO, 2=WARN, 3=ERROR
LOG_LEVEL=1

Client setup

Continue.dev

Remote (recommended):

mcpServers:
- name: takeoff-ui-mcp
command: npx
args:
- "-y"
- "mcp-remote"
- "https://takeoffui.turkishtechlab.com/mcp"

Local STDIO:

mcpServers:
- name: takeoff-ui-mcp
command: node
args:
- /absolute/path/to/takeoff-ui-mcp/dist/index.js

Local HTTP:

mcpServers:
- name: takeoff-ui-mcp
type: streamable-http
url: http://127.0.0.1:3845/mcp

VS Code (Copilot)

Remote (recommended):

"mcp": {
"servers": {
"takeoff-ui-mcp": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://takeoffui.turkishtechlab.com/mcp"]
}
}
}

Local STDIO:

"mcp": {
"servers": {
"takeoff-ui-mcp": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/takeoff-ui-mcp/dist/index.js"]
}
}
}

Local HTTP:

"mcp": {
"servers": {
"takeoff-ui-mcp": {
"type": "streamable-http",
"url": "http://127.0.0.1:3845/mcp"
}
}
}

Claude Desktop

STDIO:

{
"mcpServers": {
"takeoff-ui-mcp": {
"command": "node",
"args": ["/absolute/path/to/takeoff-ui-mcp/dist/index.js"]
}
}
}

HTTP:

{
"mcpServers": {
"takeoff-ui-mcp": {
"url": "http://127.0.0.1:3845/mcp"
}
}
}

Tip: To nudge assistants to use this server, add "use takeoff-ui-mcp" to your prompts (for example: "Show Tailwind setup for React — use takeoff-ui-mcp").

Tools

  • get_components_list: Returns the full list of Takeoff UI components
  • get_component_info: Detailed docs and examples for components
    • Parameters: component (string) or components (string[])
  • get_tailwind_integration: Tailwind integration guidance
    • Parameters: framework, topic
  • get_framework_integration: Framework-specific integration
    • Parameters: framework, topic, complexity, includeExamples

Prompts

  • refactor_takeoff_ui_code: Refactor code to align with Takeoff UI best practices

    • Parameters:
      • code (string, required)
      • framework? (react | vue | angular)
      • goals? (string[]; e.g., readability, performance, a11y)
      • enforceA11y? (boolean; default true)
      • preferComposition? (boolean; default true)
      • includeTests? (boolean; default false)
  • figma_to_code: Convert Figma designs to code using Takeoff UI with a tool-driven, verifiable process

    • Parameters:
      • figmaUrl (string, URL, required)
      • framework? (react | vue | angular | nextjs | nuxt; default react)
      • includeInteractivity? (boolean; default true)
      • useTypeScript? (boolean; default true)
      • styling? (tailwind | css-modules | styled-components | emotion; default tailwind)
      • accessibility? (boolean; default true)
      • responsiveness? (boolean; default true)
      • fileStructure? (single | multi; default single)

How it works (MCP flow)

  1. Assistant selects a tool (e.g., get_component_info)
  2. MCP client sends a JSON-RPC request to the server
  3. Server reads curated Takeoff UI docs and returns structured results
  4. Assistant formats and presents the answer

Example request payload:

{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_component_info",
"arguments": { "component": "button" }
}
}

Development

Prerequisites: Node.js >= 18

Setup:

npm install
npm run build

# Dev (STDIO)
npm run dev

# Dev (HTTP)
npm run dev:stream

MCP Inspector (browser-based testing):

# With streamable HTTP running
npm run start:stream
npm run inspector
# Inspector UI target: http://127.0.0.1:3845/mcp

Project structure:

src/
├── transports/ # stdio, stream, sse
├── tools/ # MCP tools
├── prompts/ # MCP prompts
├── data/ # Curated Takeoff UI docs and examples
├── utils/ # Logging and helpers
├── types/ # Type definitions
└── index.ts # Entry point

Scripts:

  • build, watch, dev, start, start:stream, start:sse, inspector, clean

HTTP API (when using Streamable HTTP)

  • GET /health: Basic status
  • GET /info: Server configuration and endpoints

Troubleshooting

  • Path issues: Verify absolute paths in client config
  • Node version: Use Node.js 18+
  • Port conflicts: Set PORT in .env
  • Debug logs: Set LOG_LEVEL=0
  • Model Context Protocol: https://modelcontextprotocol.io