Skip to main content
Glama

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

get_project_context

CALL FIRST. Walks up from cwd to find symbols.json, returns owner, key, dir, bundler, sharedLibraries, brender, env_type (local/cdn/json_runtime/remote_server), env_evidence, env_guidance, token_present, and a next_step hint telling the agent what to do (ask user, log in, or proceed). Replaces the older detect_environment for new code.

get_project_rules

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), part=2 → part 2 (the remaining STRICT rules, binding too + every rule heading + section index + next-step table). section="SYNTAX" (or COMPONENTS, FRANKABILITY, RULES + part=N, … 16 sections) fetches one section per call, one call per part. Every answer is at most 45,000 UTF-8 bytes (Claude Code saves a longer one to a file) and names the next call when more parts follow. full=true → legacy one-shot of all 16 sections (capless clients only). Call before any code generation task.

get_cli_reference

Complete Symbols CLI (@symbo.ls/cli) command reference, in parts: no arguments → part 1, part=N → part N (each at most 45,000 UTF-8 bytes, so it reaches the model inline; every part but the last names the next call).

get_sdk_reference

Complete Symbols SDK (@symbo.ls/sdk) API reference, in parts: no arguments → part 1, part=N → part N (each at most 45,000 UTF-8 bytes; every part but the last names the next call).

search_symbols_docs

Keyword search across all bundled Symbols documentation files.

detect_environment

[Legacy] Caller-supplied flags variant of env classification. Prefer get_project_context. Names the get_project_rules calls for the reference skills of the detected environment (PROJECT_STRUCTURE and SHARED_LIBRARIES for a local project, RUNNING_APPS otherwise); inlines none.

Generation & conversion

Tool

Description

generate_component

Generate a DOMQL component from a natural language description. Returns the task frame + the get_project_rules calls for its context in two groups: Before you write code (every call for the 2 core parts, SYNTAX, COMPONENTS, FRANKABILITY) and When the task needs it (one line per other skill: its parts and bytes, what it holds, its first call). Skip a call that you already made in this session. full=true inlines the whole context (several hundred KB, capless clients only).

generate_page

Generate a full page with routing, helmet metadata, and declarative fetch: integration. Returns the task frame + the get_project_rules calls for its context, in the same two groups; full=true inlines it.

convert_react

Convert React/JSX code to Symbols DOMQL (modern smbls stack). Returns the conversion frame + the get_project_rules calls for its context, in the same two groups (MIGRATION is in Before you write code); full=true inlines it.

convert_html

Convert raw HTML/CSS to Symbols DOMQL components. Returns the conversion frame + the get_project_rules calls for its context, in the same two groups; full=true inlines it.

convert_to_json

Convert DOMQL JS source to platform JSON (mirrors frank's toJSON pipeline). Use after generate_component / generate_page to feed save_to_project.

Audit

Tool

Description

audit_component

Inline VALIDATOR for a single file's code (component, page, function, …). Returns violations + warnings (≈1K chars). Use during generation. Pass file_path (e.g. 'functions/listQuerySet.js') so the rules that depend on the file's folder apply where it lives — without it the code is audited as a component. It also warns on four STRICT shape rules a default project audit does not run (frank-audit's opt-in FA810–FA813): one condition repeated across 3+ CSS props (Rule 19), an interactive element with :hover but no :active (Rule 65), a state-driven if: on an element in flow beside siblings (Rule 66), a built-in Button call site overriding padding/height (Rule 68). By default it returns only the findings. Pass include_playbook=True when you don't already have the AUDIT.md playbook: the answer then also names the get_project_rules calls that fetch it (every part, in order). It does not inline it.

audit_project

Returns the multi-phase project audit PLAYBOOK (instructions for the agent — Phase 0 setup → Phase 5 report). Pair with bin/symbols-audit.cjs CLI for the static-audit phase.

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

login

Log in to Symbols platform — returns a JWT token.

list_projects

List the user's projects (names, keys, IDs) to choose from.

create_project

Create a new Symbols project on the platform.

get_project

Get a project's current data (components, pages, design system, state).

save_to_project

Save components/pages/data to a project — creates a new version with change tuples, granular changes, orders, and auto-generated schema entries.

publish

Publish a version (make it live).

push

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 environment

Related MCP server: symbols-mcp-server

Resources

Skills (documentation)

URI

Description

symbols://skills/framework

Authoritative framework reference — project structure, plugins, theming, SSR, publish pipeline (mirrors smbls/FOR_MCP.md)

symbols://skills/rules

62 strict rules for AI agents working in Symbols/DOMQL projects

symbols://skills/syntax

Complete DOMQL syntax language reference (flat API, signal reactivity)

symbols://skills/modern-stack

Modern smbls stack — fetch, polyglot, helmet (full metadata catalog), router, scratch theme runtime, brender SSR

symbols://skills/components

DOMQL component reference (flat props on element, flat onX events)

symbols://skills/project-structure

Project folder structure and file conventions

symbols://skills/shared-libraries

sharedLibraries pattern — config, runtime merge, precedence

symbols://skills/design-system

Design system contract + token catalog (colors, theme, typography, spacing, etc.)

symbols://skills/design

UI/UX direction + design-to-code translator + 7 specialist personas (consolidated)

symbols://skills/patterns

UI patterns, accessibility, AI optimization

symbols://skills/migration

Migration guide for legacy projects + React/Angular/Vue → Symbols

symbols://skills/audit

Full audit playbook (Phase 0–5, executable end-to-end)

symbols://skills/common-mistakes

Wrong vs correct DOMQL patterns with zero-tolerance enforcement

symbols://skills/frankability

Patterns that survive frank.toJSON — every @symbo.ls/frank-audit rule with wrong vs canonical examples

symbols://skills/learnings

Framework internals, technical gotchas, deep runtime knowledge

symbols://skills/cookbook

Cookbook of small reactive recipes (toggle, fetch, modal, tabs, etc.)

symbols://skills/snippets

Production-ready component snippets (nav, hero, pricing card, footer, etc.)

symbols://skills/default-project

Default starter — library catalog (127+ components) + pre-configured design system tokens

symbols://skills/default-components

Complete source code of 130+ default template components (heavy reference, on demand)

symbols://skills/running-apps

4 ways to run Symbols apps (local, CDN, JSON, remote)

symbols://skills/cli

Symbols CLI (@symbo.ls/cli) complete command reference

symbols://skills/sdk

Symbols SDK (@symbo.ls/sdk) complete API reference

Reference (inline)

URI

Description

symbols://reference/spacing-tokens

Spacing token table (golden-ratio scale)

symbols://reference/atom-components

Built-in atom/primitive components

symbols://reference/event-handlers

Event handler signatures and patterns

Prompts

Prompt

Description

symbols_component_prompt

Generate a component from a description

symbols_migration_prompt

Migrate code from React/Angular/Vue

symbols_project_prompt

Scaffold a complete project

symbols_review_prompt

Review code for compliance

symbols_convert_html_prompt

Convert HTML/CSS to DOMQL

symbols_design_review_prompt

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 wrapper

2. 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-mcp to call get_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-rules

Writes 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 skills

For 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

symbols-mcp-require.sh

PreToolUse Edit|Write|MultiEdit

BLOCKS Edit/Write on *.js/*.ts/*.tsx inside any directory tree containing symbols.json, until the session has called mcp__symbols-mcp__get_project_rules (or get_project_context/generate_component/audit_component).

symbols-mcp-reminder.sh

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.

symbols-mcp-audit.sh

PostToolUse Edit|Write|MultiEdit

After every JS edit inside a Symbols project, runs frank-audit plus an inline FA-rule pattern check (FA101/102/103/105/106/206/207/513/514) and surfaces violations back to Claude.

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 check

Skip 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:

  1. 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.cjs CLI → iterates fixes with audit_component.

  2. Custom command — register a Cursor rule, Continue customCommand, Windsurf workflow, etc. for one-keystroke parity. Templates in SETUP.md.

  3. Pure shell — npx -y -p @symbo.ls/mcp symbols-audit ./symbols works 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.json template

  • Using /symbols-audit & other tools in non-Claude-Code editors: natural language, custom commands per editor, shell fallback, sourcing the bundled venv directly

  • Transport modes: stdio (default) and SSE (for claude.ai web / remote clients)

  • Audit CLI: standalone bin/symbols-audit.cjs for CI / pre-commit

  • Updating and Troubleshooting (PATH issues, stale versions, missing tools)

Available Tools

28 tools
apply_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 + resolutions

  • audit/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 USER blocks (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 | unknown

  • env_evidence — the filesystem signals that produced the classification

  • env_guidance — one-line guidance for that env type

  • token_present — whether SYMBOLS_TOKEN env var or ~/.smblsrc token exists

  • api_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-audit rule 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:

  1. Call this tool to get prescriptions.

  2. Inspect each proposedOps array. 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 | skip

  3. Call 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.

  4. 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

    A4/5.0

    Scored across 28 tools

    Disambiguation4/5

    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.

    Naming Consistency3/5

    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.

    Tool Count2/5

    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.

    Completeness4/5

    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

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      A comprehensive MCP server providing tools for AI agents to interact with code, including reading symbols, importing modules, replacing text, and sending OS notifications.
      3
      56 npm
      10
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An 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
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP 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
    • A
      license
      B
      quality
      B
      maintenance
      MCP server for syntx.ai AI platform that enables chat, image generation, model catalog, and account management through any MCP-compatible assistant.
      58
      11
      MIT