symbols-mcp
OfficialThis MCP server enables AI coding assistants to work with Symbols.app/DOMQL projects end-to-end: load rules and project context, generate/convert code, audit and auto-fix frankability, and manage/publish/deploy projects.
Resolve project context, environment, and auth state with
get_project_context(and legacydetect_environment).Fetch mandatory Symbols rules and search bundled documentation with
get_project_rulesandsearch_symbols_docs.Get complete Symbols CLI and SDK references.
Get generation context for DOMQL components and pages from natural-language descriptions.
Convert React/JSX or HTML/CSS into Symbols DOMQL, and convert DOMQL JS into platform JSON.
Validate a single component inline or retrieve a multi-phase project audit playbook.
Run frankability audits/fixes in report, safe-fix, or LLM-assisted full mode; prescribe/apply edit ops with verify-or-rollback; verify, rollback, list snapshots, tail logs, and explain FA rules.
Manage Symbols projects: log in, list/create/get/save projects, publish versions, and push/deploy to environments.
Documentation tools need no API key; project management tools require a Symbols account or API key.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@symbols-mcp generate a button component with primary styling"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
symbols-mcp
mcp-name: io.github.symbo-ls/symbols-mcp
MCP server for Symbols.app — provides documentation search, code generation, conversion, auditing, project management, publishing/deployment, and CLI/SDK reference tools for AI coding assistants (Cursor, Claude Code, Windsurf, claude.ai, etc.).
Targets the modern smbls stack — flat element API, signal-based reactivity, declarative fetch: (@symbo.ls/fetch), polyglot translations (@symbo.ls/polyglot), helmet metadata (@symbo.ls/helmet), SPA routing via el.router(...), theme via @symbo.ls/scratch, and SSR via @symbo.ls/brender.
No API keys required for documentation tools. Project management tools require a Symbols account (login or API key).
Tools
Context — start here
Tool | Description |
| CALL FIRST. Walks up from cwd to find |
| Mandatory ruleset. The CORE comes in 2 parts — read both: no arguments → part 1 (the list of every STRICT rule + reuse directive + frankability checklist + RULES preamble + the first STRICT rules in full), |
| Complete Symbols CLI ( |
| Complete Symbols SDK ( |
| Keyword search across all bundled Symbols documentation files. |
| [Legacy] Caller-supplied flags variant of env classification. Prefer |
Generation & conversion
Tool | Description |
| Generate a DOMQL component from a natural language description. Returns the task frame + the |
| Generate a full page with routing, helmet metadata, and declarative |
| Convert React/JSX code to Symbols DOMQL (modern smbls stack). Returns the conversion frame + the |
| Convert raw HTML/CSS to Symbols DOMQL components. Returns the conversion frame + the |
| Convert DOMQL JS source to platform JSON (mirrors frank's toJSON pipeline). Use after |
Audit
Tool | Description |
| Inline VALIDATOR for a single file's code (component, page, function, …). Returns violations + warnings (≈1K chars). Use during generation. Pass |
| Returns the multi-phase project audit PLAYBOOK (instructions for the agent — Phase 0 setup → Phase 5 report). Pair with |
For filesystem-wide audits the package ships a CLI: npx -y -p @symbo.ls/mcp symbols-audit <symbols-dir> (strict by default, exit 1 on findings). -p names the package and runs its symbols-audit bin; every release supports it. The short form npx -y @symbo.ls/mcp symbols-audit <symbols-dir> (and npx -y @symbo.ls/mcp init-rules) needs a release with the package's mcp bin — on an older one npx answers "could not determine executable to run"; use npx -y -p @symbo.ls/mcp symbols-audit / npx -y -p @symbo.ls/mcp symbols-mcp-init-rules there. Under the hood it runs frank-audit audit --strict — the audit core is now @symbo.ls/frank-audit, the AST-based engine that owns the canonical 59-rule registry, prescription generation, and verify-or-rollback fixers.
lib/audit.js is preserved as a backward-compat shim that delegates to frank-audit (subprocess CLI, or the /audit-content HTTP endpoint when FRANK_AUDIT_URL is set). The legacy programmatic API stays callable for non-CLI consumers (the @symbo.ls/cli, the MCP HTTP worker, web/edge clients):
const {
auditContent, // audit one component string (delegates to frank-audit)
auditFiles, // audit a list of {path, content}
auditDirectory, // walk a symbols/ dir via `frank-audit audit <dir>`
mergeFindings, // preserve status across runs
summarize, // breakdown by severity / category / origin
} = require('@symbo.ls/mcp/lib/audit')Findings drift vs the old regex output is expected and correct — frank-audit detects more issues with higher accuracy. Field names stay the same (file, line, rule, severity, category, snippet, suggested_fix). To inspect the rule registry, query frank-audit directly: npx frank-audit explain <id>.
Project Management & Publishing
Tool | Description |
| Log in to Symbols platform — returns a JWT token. |
| List the user's projects (names, keys, IDs) to choose from. |
| Create a new Symbols project on the platform. |
| Get a project's current data (components, pages, design system, state). |
| Save components/pages/data to a project — creates a new version with change tuples, granular changes, orders, and auto-generated schema entries. |
| Publish a version (make it live). |
| Deploy a project to an environment (production, staging, dev). |
End-to-End Flow (from any MCP client)
1. get_project_context → resolve owner/key/env/auth state from cwd's symbols.json
2. generate_component → JS source code
3. audit_component → inline check (saves a roundtrip if violations exist)
4. convert_to_json → platform JSON
5. login → only if token_present was false in step 1
6. create_project → (if new project needed)
list_projects → (or pick existing)
7. save_to_project → push JSON to platform (creates version)
8. publish → make version live
7. push → deploy to environmentRelated MCP server: symbols-mcp-server
Resources
Skills (documentation)
URI | Description |
| Authoritative framework reference — project structure, plugins, theming, SSR, publish pipeline (mirrors |
| 62 strict rules for AI agents working in Symbols/DOMQL projects |
| Complete DOMQL syntax language reference (flat API, signal reactivity) |
| Modern smbls stack — fetch, polyglot, helmet (full metadata catalog), router, scratch theme runtime, brender SSR |
| DOMQL component reference (flat props on element, flat onX events) |
| Project folder structure and file conventions |
| sharedLibraries pattern — config, runtime merge, precedence |
| Design system contract + token catalog (colors, theme, typography, spacing, etc.) |
| UI/UX direction + design-to-code translator + 7 specialist personas (consolidated) |
| UI patterns, accessibility, AI optimization |
| Migration guide for legacy projects + React/Angular/Vue → Symbols |
| Full audit playbook (Phase 0–5, executable end-to-end) |
| Wrong vs correct DOMQL patterns with zero-tolerance enforcement |
| Patterns that survive |
| Framework internals, technical gotchas, deep runtime knowledge |
| Cookbook of small reactive recipes (toggle, fetch, modal, tabs, etc.) |
| Production-ready component snippets (nav, hero, pricing card, footer, etc.) |
| Default starter — library catalog (127+ components) + pre-configured design system tokens |
| Complete source code of 130+ default template components (heavy reference, on demand) |
| 4 ways to run Symbols apps (local, CDN, JSON, remote) |
| Symbols CLI ( |
| Symbols SDK ( |
Reference (inline)
URI | Description |
| Spacing token table (golden-ratio scale) |
| Built-in atom/primitive components |
| Event handler signatures and patterns |
Prompts
Prompt | Description |
| Generate a component from a description |
| Migrate code from React/Angular/Vue |
| Scaffold a complete project |
| Review code for compliance |
| Convert HTML/CSS to DOMQL |
| Visual/design audit against the design system |
Quickstart
Two commands and a one-line config — works for every major MCP client.
1. Install
Pick whichever runtime you have:
uvx symbols-mcp # uv — recommended, zero install
pip install symbols-mcp # pip — global binary
npx -y @symbo.ls/mcp # npm — Node-friendly wrapper2. Configure your editor
The standard MCP config snippet (works for Claude Code, Claude Desktop, Cursor, Windsurf, Cline, Continue, Zed, Goose, Gemini CLI — wrap it in whatever shape that editor expects):
{
"mcpServers": {
"symbols-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["--refresh", "symbols-mcp"]
}
}
}--refresh pulls the latest from PyPI on every launch (~1–2s startup tax — drop it for pinned/offline runs).
3. Verify
In your editor's chat, ask the assistant:
Use
symbols-mcpto callget_project_rules, then summarize the modern stack rules.
If that returns a long ruleset, you're set. Try audit_component on a deliberately broken snippet to confirm Rule 62 (the banned inline-SVG-for-icon rule) fires.
Auto-bootstrapping a Symbols project — no more "use symbols-mcp" reminders
Once symbols-mcp is configured in your editor, drop project-level rule files so every editor auto-loads the framework rules on every chat:
# from your Symbols project root
npx -y @symbo.ls/mcp init-rulesWrites CLAUDE.md, .cursor/rules/symbols.md, .windsurfrules, .clinerules, and AGENTS.md — each tailored to its editor, all pointing at the symbols-mcp tools (get_project_context, get_project_rules, generate_component, audit_component, etc.). Idempotent; pass --force to overwrite or --only=cursor,claude to scope.
Agent skills — one-shot install for every agent on your machine
The wrangler-style path: detect which AI coding agents are installed (Claude Code, Cursor, Codex, GitHub Copilot, Gemini CLI, Windsurf, Cline, Goose, Warp, Antigravity, Zed, Aider) and install the Symbols rules + skills for exactly those:
npx -y @symbo.ls/mcp skills # detect agents → install rules + skills for them
# equivalent: npx -y @symbo.ls/mcp init-rules --detect
# from the Symbols CLI: smbls skillsFor Claude Code this also installs a proper agent skill at .claude/skills/symbols/SKILL.md — it auto-loads whenever the agent works on Symbols/DOMQL (its description triggers on symbols.json projects, DOMQL components, design tokens, the smbls CLI), carrying the must-do tool sequence and the hard-rules digest. --global installs it once at ~/.claude/skills/ for every project; --no-skills opts out.
Combined with the MCP server's instructions field (auto-loaded on connect by every MCP-aware editor — Claude Code, Cursor, GitHub Copilot, Windsurf, Cline, Continue, Roo, Zed, Goose, Gemini CLI, Codex, Antigravity, Cody), this means you never have to remind the agent to "use symbols-mcp" — the workflow is bootstrapped on first interaction.
Claude Code: enforcement hooks (installed by default)
Project-level rule files (CLAUDE.md, AGENTS.md, etc.) are best-effort — long contexts dilute them and the agent can drift. For Claude Code, init-rules also installs a hooks layer that the harness enforces directly:
Hook | Trigger | What it does |
| PreToolUse | BLOCKS Edit/Write on |
| UserPromptSubmit | Injects the MUST-DO sequence + frankability FA-rule cheatsheet on every turn when cwd is inside a Symbols project. Per-turn injection isn't diluted by long contexts the way CLAUDE.md is. |
| PostToolUse | After every JS edit inside a Symbols project, runs |
Files installed:
.claude/settings.json # wires the three hooks
.claude/hooks/symbols-mcp-require.sh # PreToolUse — block edit until rules loaded
.claude/hooks/symbols-mcp-reminder.sh # UserPromptSubmit — inject directive
.claude/hooks/symbols-mcp-audit.sh # PostToolUse — frank-audit + FA-rule checkSkip hooks: npx -y @symbo.ls/mcp init-rules --no-hooks.
Disable a single hook at runtime: SYMBOLS_MCP_REQUIRE_RULES=0, SYMBOLS_MCP_REMINDER=0, SYMBOLS_MCP_POST_AUDIT=0.
Hooks require bash and jq on PATH (already standard on macOS / most Linux distros). frank-audit is invoked via npx -y --no-install @symbo.ls/frank-audit — if not installed, the inline pattern check still runs.
See SETUP.md → Bootstrapping for the layered model and verification steps.
What about /symbols-audit?
The /symbols-audit slash command is Claude Code-only, but the underlying capability works in every MCP-aware editor — Cursor, GitHub Copilot, Windsurf, Cline, Continue, Roo, Zed, Goose, Gemini CLI, Codex, Antigravity (Google), Cody, Claude.ai web, and any custom MCP client.
Three patterns:
Natural language (zero setup) — just say "Run a full Symbols audit on this project using symbols-mcp." The agent calls
get_project_context→audit_project(playbook) →bin/symbols-audit.cjsCLI → iterates fixes withaudit_component.Custom command — register a Cursor rule, Continue customCommand, Windsurf workflow, etc. for one-keystroke parity. Templates in SETUP.md.
Pure shell —
npx -y -p @symbo.ls/mcp symbols-audit ./symbolsworks from any terminal, no editor needed. Strict by default, exit 1 on findings.
Full setup guide
See SETUP.md for:
Per-editor configs: Claude Code · Claude Desktop · Claude.ai (web) · Cursor · GitHub Copilot (VS Code / CLI) · Windsurf · Zed · Cline · Continue · Roo · Cody · Gemini CLI · OpenAI Codex · Goose · Antigravity · generic clients
Per-tool quick-starts with workspace connection (s1m0ne Bridge + MCP + rules): docs.symbols.app/simone
Local development: clone the repo, run from source,
.mcp.jsontemplateUsing
/symbols-audit& other tools in non-Claude-Code editors: natural language, custom commands per editor, shell fallback, sourcing the bundled venv directlyTransport modes: stdio (default) and SSE (for claude.ai web / remote clients)
Audit CLI: standalone
bin/symbols-audit.cjsfor CI / pre-commitUpdating and Troubleshooting (PATH issues, stale versions, missing tools)
Available Tools
28 toolsapply_frankability_edit_opsA
Apply LLM-generated edit ops to a Symbols project with verify-or-rollback.
Pass ops_json as a JSON string of either:
{ "ops": [...] }
or just an array of op objects.
Each op must be one of the 8 strict kinds (see prescribe_frankability_fixes). The applier validates every op, snapshots affected files, applies, runs frank.toJSON to verify, and rolls back if the result regresses against the pre-apply state.
Args: symbols_dir: Absolute path to the symbols/ directory. ops_json: JSON string containing the edit ops.
Returns: JSON with applied/skipped/rolledBack/baseline/finalState.
Inputs: ops_json (required), symbols_dir (required). Returns: result
audit_and_fix_frankabilityA
Run frank-audit and optionally apply fixes — supports a sampling-driven LLM loop that resolves findings the mechanical fixer can't safely handle.
Modes: 'report' — run audit, list findings, do not modify files 'safe-fix' — apply mechanical fixes with verify-or-rollback safety (every applied fix is verified against frank.toJSON; regressions roll back) 'full' — run safe-fix first, THEN drive an LLM loop via MCP sampling over the remaining prescriptions: 1. prescribe_frankability_fixes(dir) → JSON prescriptions 2. for each prescription (capped by max_iterations): a. ctx.session.create_message() with the strict edit-op contract prompt b. parse the LLM's JSON response c. apply_frankability_edit_ops with verify-or-rollback d. one retry on malformed JSON 3. report aggregate (mechanical + LLM fixes) Requires the host to support MCP sampling (Claude Code does; some hosts don't — falls back gracefully to safe-fix mode with a warning when ctx.session is unavailable).
Args: symbols_dir: Absolute path to the symbols/ directory. mode: 'report' | 'safe-fix' | 'full' aggressive: With safe-fix or full, also apply medium-confidence fixes. max_iterations: Cap on LLM-driven prescriptions in 'full' mode (default 20).
Returns: JSON-stringified result with schema, opId, findings, applied/skipped, rolledBack, baseline, finalState, and (in 'full' mode) llmRounds[].
Inputs: symbols_dir (required), mode, aggressive, max_iterations. Returns: result
audit_componentA
Inline VALIDATOR for a single Symbols/DOMQL component string.
Runs the deterministic ruleset (flat element API, signal reactivity, design system tokens, declarative fetch/polyglot/helmet/router, no DOM manipulation, Rule 62 icon ban) against an in-memory string of code. Returns a tight report with violations + warnings.
Use this:
During generation, to verify a freshly-generated component before saving
In any client without shell access (claude.ai web, hosted MCP) where the CLI is unreachable
On a single file's contents, not a whole project
Adjacent tools — call these for different scopes:
audit_project()— returns the MULTI-PHASE PROJECT AUDIT PLAYBOOK (instructions for the agent to follow). Use when the user asks for a full project audit.bin/symbols-audit <symbols-dir>(CLI, ships with this package) — filesystem regex sweep across an entire project. Use during the playbook's static-audit phase.
By default returns ONLY the findings (≈1–2K chars). Pass include_playbook=True
to also dump the AUDIT.md playbook in the same response when you don't already have it.
Args:
component_code: The JavaScript/DOMQL source string to validate.
include_playbook: Append the full audit playbook to the response. Default False
to keep responses small. Default agents should NOT set this —
call audit_project() separately if the playbook is needed.
Inputs: component_code (required), include_playbook. Returns: result
audit_projectA
Returns the multi-phase PROJECT AUDIT PLAYBOOK (instructions for the agent).
Strict mode is the default. Strict means EXHAUSTIVE — the agent does not stop
until every finding is resolved, framework_bug (in framework_audit_results.md),
or an active 🟢 ASK USER block awaiting user input. No finding stays open.
Two CLI flags (default ON in strict mode, both opt-out via --no-...):
--deep-fix: agent does NOT stop at first blocker (missing project key, auth-protected route, missing CLI subcommand). Surfaces ASK-USER blocks or runs documented fallbacks (e.g. publish blocked → local frank+brender preview).--deep-framework-audit: every framework_bug entry includes a Read+Grep trace into smbls/ source identifying the suspected function, plus a suggested patch.
Two report files the CLI emits + the agent appends to:
audit/symbols_audit_results.md— PROJECT findings + resolutionsaudit/framework_audit_results.md— FRAMEWORK bugs + repro + smbls/ trace + suggested patch (each entry must be debuggable by someone who's never seen the code; vague "doesn't work" entries are not acceptable in strict mode)
Findings have an origin field (project | framework | shared) classified by
bin/symbols-audit heuristically, then refined by the agent during Phase 2.
This tool is a playbook getter, not an executor. The agent runs the playbook itself using:
get_project_context— call FIRST to resolve owner/key/env. Missing values surface as🟢 ASK USERblocks (NEVER hardcoded).bin/symbols-audit <symbols-dir>— deterministic regex sweep + dual-report template emission. Strict + deep modes default ON.audit_component(code)— inline single-component validator (no filesystem).chrome-mcp tools — for the Phase 3c local-vs-remote UI testing protocol.
Phase summary:
Phase 0: setup + baseline metrics + project-context resolution. Missing owner/key resolved here via ASK-USER (not deferred).
Phase 1: static audit via
bin/symbols-audit(creates findings.json + symbols_audit_results.md + framework_audit_results.md templates).Phase 2: fix loop with self-test. 3 failed fix attempts → finding becomes framework_bug with deep-audit trace. Continue, never stop on first bug.
Phase 3a: build gates with fallbacks for missing CLI subcommands.
Phase 3b: publish to staging WITH FALLBACK LADDER. If publish is blocked (missing key, AUTH_REQUIRED, env doesn't exist), agent surfaces ASK-USER AND/OR falls back to local
frank to-json+brender+ http.server preview so Phase 3c still has a viewable artifact. NEVER silently skip publish.Phase 3c: STRICT UI testing — local-vs-(remote OR localfallback) side-by-side, click every clickable, icon rendering verification per Rule 62, theme/lang/ active-nav/forms/responsive.
Phase 4: iterate until two consecutive runs converge — zero open findings, zero pending ASK-USER, viewable artifact exists. Deep-fix loop re-visits framework_bug entries to strengthen them and retries blockers.
Phase 5: report = record of resolutions, NOT a TODO list. Strict mode forbids "Recommended follow-up tasks" as a terminal state.
Transport awareness: this playbook assumes stdio MCP transport (filesystem
access). For SSE/HTTPS/CDN, the agent surfaces filesystem-dependent steps as
shell commands the user runs locally, then resumes Phase 2/3 with pasted
output. audit_component and audit_project are stateless and work over
any transport; get_project_context and bin/symbols-audit are stdio-only.
Output artifacts created in /audit/: findings.json, symbols_audit_results.md (framework bugs), runs/, report.md.
Use this when the user asks to audit, validate, refactor for compliance, or 'make my project publish-ready in one shot'. Returns the entire playbook so the agent has the full context. Pair with the bundled bin/symbols-audit CLI for the deterministic regex pass.
Args: phase: 'all' (full playbook — default) | '0' | '1' | '2' | '3' | '4' | '5' (just one phase's section)
Inputs: phase. Returns: result
convert_htmlA
Convert raw HTML/CSS to Symbols.app DOMQL components.
Provide HTML code and receive the conversion context including component catalog, syntax reference, and design system tokens.
Args: source_code: The HTML/CSS source code to convert.
Inputs: source_code (required). Returns: result
convert_reactA
Convert React/JSX code to Symbols.app DOMQL.
Provide React component code and receive the conversion context including migration rules, syntax reference, and examples.
Args: source_code: The React/JSX source code to convert.
Inputs: source_code (required). Returns: result
convert_to_jsonA
Convert DOMQL JavaScript source code to platform JSON format.
Parses export statements from generated component/page code and converts them into the structured JSON the Symbols platform expects. Functions are automatically stringified (as the platform stores them as strings).
Use this after generate_component or generate_page to get JSON that can be passed directly to save_to_project.
Mirrors the @symbo.ls/frank toJSON + stringifyFunctions pipeline that the
CLI uses when running smbls push.
Args: source_code: JavaScript source code with export const/default statements. section: Target section — "components", "pages", "functions", "snippets", "designSystem", "state". Determines how exports are categorized.
Inputs: source_code (required), section. Returns: result
create_projectA
Create a new Symbols project on the platform.
Use this when the user wants to save generated components to a new project. Returns the project ID and key for use with save_to_project and publish.
Args: name: Project display name. key: Project key (pr_xxxx format). Auto-generated from name if empty. token: JWT access token from login. api_key: API key (sk_live_...) from project integration settings. visibility: Project visibility — "private", "public", or "password-protected". language: Project language (default: "javascript").
Inputs: name (required), key, token, api_key, +2 more. Returns: result
detect_environmentA
[Legacy] Detect Symbols environment from caller-supplied file flags.
Prefer get_project_context — it does the same classification by inspecting
the filesystem directly (no caller-supplied flags needed) AND returns project
owner/key/auth state in the same call.
Kept for backward compatibility with older agent prompts. New code should call
get_project_context(cwd) instead — its response includes env_type,
env_evidence, and env_guidance fields equivalent to this tool's output,
plus owner, key, token_present, and next_step guidance.
Args: has_symbols_json: Whether symbols.json exists in the project root. has_symbols_dir: Whether a symbols/ directory exists with components/, pages/, etc. has_package_json: Whether package.json exists with smbls dependency. has_cdn_import: Whether HTML files contain CDN imports (esm.sh/smbls, etc.). has_iife_script: Whether HTML files use script src smbls (IIFE global). has_json_data: Whether the project uses frank-generated JSON data files. has_mermaid_config: Whether mermaid/wrangler config or GATEWAY_URL/JSON_PATH env vars are present. file_list: Comma-separated list of key files in the project root.
Inputs: file_list, has_json_data, has_cdn_import, has_iife_script, +4 more. Returns: result
explain_frankability_ruleA
Return the documentation block for a specific frank-audit rule.
Each rule (FA001 through FA902) has an explain() method that returns a
human-readable description, examples of the bad/good patterns, and the
rationale. Use this when an agent encounters an unfamiliar finding and
needs context before deciding on a fix.
Args: rule_id: The rule ID (e.g. 'FA301', 'FA806').
Returns: JSON with { ok, ruleId, name, severity, description, explanation }.
Inputs: rule_id (required). Returns: result
frankability_logA
Tail the audit log for a Symbols project.
Returns the most recent NDJSON entries from <symbols_dir>/.frank-audit/log.
Each entry records audit/fix/apply-edits/rollback events with opId,
timestamp, and outcome — useful for understanding history without
re-running ops.
Args: symbols_dir: Absolute path to the symbols/ directory. limit: Maximum number of entries to return (default 50).
Returns: JSON with { ok, entries: [...] }.
Inputs: symbols_dir (required), limit. Returns: result
generate_componentA
Generate a Symbols.app DOMQL component from a description.
Returns the rules, syntax reference, component catalog, cookbook examples, and default library reference as context. The calling LLM uses this context to generate a correct, compliant component.
Args: description: What the component should do and look like. component_name: PascalCase name for the component.
Inputs: description (required), component_name. Returns: result
generate_pageA
Generate a Symbols.app DOMQL page with routing + helmet metadata + fetch integration.
Returns rules, project structure, patterns, snippets, and default library reference as context for page generation.
Args: description: What the page should contain and do. page_name: camelCase name for the page (used in route map).
Inputs: description (required), page_name. Returns: result
get_cli_referenceA
Returns the complete smbls CLI reference (@symbo.ls/cli).
Mirrors smbls/CLI_FOR_MCP.md. Covers: configuration files (symbols.json, .symbols_local/),
API URL resolution order + env-var overrides, common flag conventions, full command map
(project lifecycle, auth, sync, project mgmt, workspace ops, files & assets, integrations,
GitHub, Frank JSON↔FS, dev/build/deploy, code transformation, SDK proxy, ask),
publish flow (one-shot + granular), MCP/agent usage rules (--non-interactive + --yes
NODE_ENV + SYMBOLS_AUTH_TOKEN), error-handling contracts (AUTH_REQUIRED, ECONNREFUSED, missing app key), source-file map, and CLI-specific anti-patterns.
Inputs: no named parameters. Returns: result
get_projectA
Get a Symbols project's current data (components, pages, designSystem, state).
Use this to inspect what's already in a project before saving changes.
Args: project: Project key (pr_xxxx) or project ID. token: JWT access token from login. api_key: API key (sk_live_...) from project integration settings. branch: Branch to read from (default: "main").
Inputs: project (required), token, branch, api_key. Returns: result
get_project_contextA
Read the current Symbols project context — START HERE for any Symbols task.
Walks up from cwd (or the MCP process's working directory) looking for symbols.json,
parses it, classifies the environment from filesystem signals, and returns a single
JSON payload with everything an agent needs to begin work.
Returns:
owner, key, dir, bundler, sharedLibraries, brender — from symbols.json
project_root — absolute path of the project root
symbols_dir — absolute path of the symbols/ source dir (or null)
env_type —
local | cdn | json_runtime | remote_server | unknownenv_evidence — the filesystem signals that produced the classification
env_guidance — one-line guidance for that env type
token_present — whether
SYMBOLS_TOKENenv var or~/.smblsrctoken existsapi_base — the Symbols API base URL (defaults to https://api.symbols.app)
next_step — what the agent should do next (ask user / log in / proceed)
ALWAYS call this first for any Symbols-project task. It replaces the older
detect_environment tool (which required the caller to pre-compute file flags).
Use this BEFORE calling any auth-required tool (save_to_project, publish, push,
get_project) — combine with token_present to know whether to prompt for login.
Never hardcode owner/key/credentials. If next_step says "ask the user", ASK.
Args: cwd: Directory to start searching from. Defaults to the MCP server's process cwd. Pass an absolute path when the agent's cwd differs from the project root.
Inputs: cwd. Returns: result
get_project_rulesA
ALWAYS call this first before any generate_* tool.
Returns the mandatory Symbols.app rules that MUST be followed:
FRAMEWORK.md (authoritative — project structure, plugins, theming, SSR, publish)
DESIGN_SYSTEM.md (authoritative — design-system contract + token catalog)
RULES.md (62 strict rules — flat API, signal reactivity, design tokens, polyglot, fetch, helmet, theme, reusability, icons)
COMPONENTS.md (built-in component catalog from @symbo.ls/default-config — REUSE these via bare PascalCase keys; do NOT redefine)
DEFAULT_COMPONENTS.md (full source/structure of every built-in — what they look like, what props they expose, how to compose them)
SYNTAX.md (DOMQL v3.14 syntax reference — flat element API, signal reactivity, factory patterns)
PATTERNS.md (canonical compositional patterns)
SNIPPETS.md (project-level snippet patterns)
SHARED_LIBRARIES.md (when to read/never edit cross-package code)
WORKSPACE.md (multi-app monorepo topology — two project shapes, two-file contract, no-transitive-resolution, onboarding checklist)
FRANKABILITY.md (every
@symbo.ls/frank-auditrule with wrong vs canonical examples — patterns that survive frank.toJSON serialization, so generated code is provably frankable from the start)FRANK_FIX_WORKFLOW.md (LLM reference card for the prescription → edit-op flow — the strict 8-kind contract for
apply_frankability_edit_ops)COMMON_MISTAKES.md + LEARNINGS.md (hard-won failure cases — read these to avoid replaying them)
DEFAULT_PROJECT.md (recommended baseline design-system values + the default-library catalog)
Violations cause silent failures — black page, nothing renders, or a working app with degraded UX you'll later have to rebuild.
Call this before: generate_component, generate_page, convert_react, convert_html, or any code generation task.
READ ALL SECTIONS — do NOT skim past COMPONENTS.md / DEFAULT_COMPONENTS.md / PATTERNS.md.
The single most-violated rule is reusing built-in components. Skipping the catalog
leads to redefining Avatar, Button, Dialog, etc. from scratch when a bare
Avatar: {} would have rendered the canonical built-in.
Inputs: no named parameters. Returns: result
get_sdk_referenceA
Returns the complete @symbo.ls/sdk API reference (3.14.0).
Mirrors sdk/SDK_FOR_MCP.md. Covers all 24 services with full method lists:
auth, collab, project, plan, subscription, file, payment, dns, branch, pullRequest,
admin, screenshot, tracking, waitlist, metrics, integration, featureFlag, organization,
workspace, workspaceData (typed wrapper for /workspace/*), kv, allocationRule,
sharedAsset, credits. Plus: SDK class lifecycle, BaseService contract, TokenManager
(singleton, auto-refresh), environment matrix (channel URLs), root event bus
(sdk.rootBus with last-payload replay), validation surface, federation primitive
(multi-Supabase registry), permissions reference (ROLE_PERMISSIONS,
PROJECT_ROLE_PERMISSIONS, TIER_FEATURES), error handling contract, and MCP integration notes.
Inputs: no named parameters. Returns: result
list_projectsA
List the user's Symbols projects.
Returns project names, keys, and IDs so the user can choose which project to save to or publish. Requires authentication.
Args: token: JWT access token from login. api_key: API key (sk_live_...) from project integration settings.
Inputs: token, api_key. Returns: result
loginA
Log in to the Symbols platform and get an access token.
Use this when the user needs to authenticate before any project operation. Returns a JWT token that can be used with all project tools.
Args: email: Symbols account email address. password: Symbols account password.
Inputs: email (required), password (required). Returns: result
prescribe_frankability_fixesA
Generate LLM-ready prescriptions for frank-audit findings that can't be auto-fixed.
Each prescription contains:
finding (rule, file, line, refusal reason)
sourceContext (~30 lines around the finding)
relatedFiles (other places that mention the same symbol)
proposedOps — array of edit ops the rule's helper logic produced (e.g. FA304 already mapped 36px → 'C2' from the project's spacing scale; FA301 already matched the closest palette token). The agent can submit these verbatim to apply_frankability_edit_ops, or modify before submitting.
explanation (the rule's docs)
safetyCheck (verify command run after apply)
Workflow for the agent:
Call this tool to get prescriptions.
Inspect each
proposedOpsarray. Either submit verbatim or modify. For findings with no proposedOps (structural refactors like FA2xx multifile-helpers, FA5xx DOM bans), construct your own ops from the 12 strict op kinds: removeImport | moveFile | addToIndexFile | addToGlobalScope | removeTopLevelDecl | addElementScope | replaceTokenValue | renameObjectKey | removeObjectKey | setObjectProperty | addDesignToken | skipCall apply_frankability_edit_ops(symbols_dir, ops) — frank-audit validates every op, snapshots, applies, runs verify, rolls back on regression. Failed ops return structured details (E_OLDVALUE_NOT_FOUND with actualLine, E_KEY_NOT_FOUND with availableKeys, etc.) so you can retry intelligently.
Repeat until prescriptions are exhausted or no progress.
Args: symbols_dir: Absolute path to the symbols/ directory.
Returns: JSON with schema version, opId, list of prescriptions.
Inputs: symbols_dir (required). Returns: result
publishA
Publish a version of a Symbols project to the platform.
Makes the specified version (or latest) the published/live version. Call save_to_project first to save your changes, then publish to make them live.
Requires authentication — provide either token or api_key.
Args: project: Project ID (MongoDB ObjectId) or project key (pr_xxxx). token: JWT access token from login or ~/.smblsrc. api_key: API key (sk_live_...) from project integration settings. Alternative to token. version: Version string or version ID to publish. Leave empty for latest. branch: Branch to publish from (default: "main").
Inputs: project (required), token, branch, api_key, +1 more. Returns: result
pushA
Push/deploy a Symbols project to a specific environment.
Deploys the project to a target environment (production, staging, dev). Call publish first to set the live version, then push to deploy.
Requires authentication — provide either token or api_key.
Args: project: Project ID (MongoDB ObjectId) or project key (pr_xxxx). token: JWT access token from login or ~/.smblsrc. api_key: API key (sk_live_...) from project integration settings. Alternative to token. environment: Target environment key (e.g. "production", "staging", "dev"). mode: Deploy mode — "latest" (newest from branch), "published" (current published version), "version" (specific version), or "branch" (track a branch). version: Required when mode is "version" — the version string or ID to deploy. branch: Branch to deploy from when mode is "latest" or "branch" (default: "main").
Inputs: project (required), mode, token, branch, +3 more. Returns: result
rollback_frankabilityA
Restore a Symbols project to its state before a specific op ran.
Every apply-edits run snapshots affected files under
<symbols_dir>/.frank-audit/snapshots/<opId>/ before mutating. Use this
to undo a specific op (or a chain by walking backwards through opIds
listed by snapshots_frankability).
Args: symbols_dir: Absolute path to the symbols/ directory. op_id: The opId to roll back to (from a prior apply-edits result).
Returns: JSON with { ok, restored: [...filePaths], opId }.
Inputs: op_id (required), symbols_dir (required). Returns: result
save_to_projectA
Save components, pages, or design system data to a Symbols project.
This applies changes to the project and creates a new version. Use after generate_component/generate_page to persist the output.
The changes parameter is a JSON string with the data to merge into the project. Structure mirrors the project data format:
{
"components": {
"Header": {
"extends": "Flex",
"props": { "flow": "x", "gap": "B", "padding": "A B" },
"Logo": { "extends": "Icon", "props": { "name": "logo" } },
"Nav": { "extends": "Flex", "gap": "A" }
}
},
"pages": {
"home": {
"extends": "Page",
"Header": {},
"Hero": { "extends": "Flex" }
}
},
"designSystem": { ... },
"state": { ... },
"functions": { ... }
}Only include the sections you want to update — omitted sections are left unchanged.
Args: project: Project key (pr_xxxx) or project ID. changes: JSON string with project data to save (components, pages, designSystem, state, functions). token: JWT access token from login. api_key: API key (sk_live_...) from project integration settings. message: Version commit message describing the changes. branch: Branch to save to (default: "main").
Inputs: changes (required), project (required), token, branch, +2 more. Returns: result
search_symbols_docsA
Search the Symbols documentation knowledge base for relevant information.
Args: query: Natural language search query about Symbols/DOMQL. max_results: Maximum number of results to return (1-5).
Inputs: query (required), max_results. Returns: result
snapshots_frankabilityA
List recent snapshotted opIds for a Symbols project.
Each entry corresponds to a frank-audit op that wrote files. Pass an
opId to rollback_frankability to restore that op's pre-state.
Returns: JSON with { ok, opIds: [{ opId, timestamp, files }] }.
Inputs: symbols_dir (required). Returns: result
verify_frankabilityA
Verify a Symbols project bundles cleanly via frank.toJSON.
Independent of audit/fix — runs the same round-trip that apply-edits uses after every mutation, but as a standalone check. Useful for the agent to confirm a project is in a known-good state before starting a fix loop, or after a series of manual edits.
Returns: JSON with { ok, bundleable, scanIssues, ... }.
Inputs: symbols_dir (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Most tools have clearly distinct scopes—generation, conversion, audit, fix, and project operations are well-separated. However, a few pairs could confuse an agent: `detect_environment` is explicitly superseded by `get_project_context`, and `get_project` vs `get_project_context` have nearly identical names despite pointing to different data.
Snake_case is used throughout, but the pattern is inconsistent: most tools are verb_noun (`generate_component`, `list_projects`), yet some are noun-first (`snapshots_frankability`, `frankability_log`) or bare verbs (`publish`, `push`). The `_frankability` suffix creates a recognizable family, but word order varies, making the convention less predictable.
At 28 tools, the server exceeds the 25+ threshold that starts to feel like too many. The count is inflated by combining several distinct subdomains—generation, conversion, audit/fix, and platform project management—into one surface. Several reference/context tools (get_project_rules, search_symbols_docs, get_cli_reference, get_sdk_reference) could be consolidated or split into separate servers.
The server covers the full lifecycle: generate/convert, audit/fix with comprehensive rollback and verification, then save/publish/push to the platform. Minor gaps exist—there is no update/delete project endpoint or direct component deletion, and `detect_environment` duplicates `get_project_context`—but agents can work around these, and the audit-fix loop is exceptionally thorough.
Maintenance
Related MCP Connectors
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
Hosted MCP server for live public-data APIs and Skills for AI agents.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseAqualityDmaintenanceA comprehensive MCP server providing tools for AI agents to interact with code, including reading symbols, importing modules, replacing text, and sending OS notifications.356 npm10MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes the Symbols/DOMQL v3 AI assistant capabilities to any MCP-compatible platform. Enables generating components, pages, projects, and more from natural language, as well as searching documentation and reviewing code.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for semantic codebase navigation that builds an AST index of symbols, imports, and exports, providing AI agents with tools to search, explore, and understand code.MIT
- AlicenseBqualityBmaintenanceMCP server for syntx.ai AI platform that enables chat, image generation, model catalog, and account management through any MCP-compatible assistant.5811MIT