Lexington MCP. Finished Astro + Tailwind sections from every Lexington theme, served to Cursor, Claude Code and Codex through the Model Context Protocol

What the MCP is

Lexington MCP is a server your coding agent connects to. It holds 762 sections cut from 45 Lexington themes, with each theme’s tokens, fonts, small components and a written design system. The agent asks it for what a page needs, receives the files, writes them into your project and fills them with your content. The design work is already done; the agent installs and fills.

It is a subscription (Solo, one key; Team, five keys), sold on Polar. Without a key the catalogue tools work and the Prima Persona theme is fully open, so you can try the whole flow before buying.

Setup

You need the server URL and, for paid themes, your licence key from the Polar receipt (it starts with LEXMCP-). The key travels as a bearer header.

Server: https://lexington-mcp.michaelandreuzzavega.workers.dev/mcp

Cursor

.cursor/mcp.json in the project (or ~/.cursor/mcp.json for every project):

json
{
  "mcpServers": {
    "lexington": {
      "url": "https://lexington-mcp.michaelandreuzzavega.workers.dev/mcp",
      "headers": { "Authorization": "Bearer LEXMCP-XXXX-XXXX" }
    }
  }
}

Claude Code

bash
claude mcp add --transport http lexington https://lexington-mcp.michaelandreuzzavega.workers.dev/mcp \
  --header "Authorization: Bearer LEXMCP-XXXX-XXXX"

Codex

~/.codex/config.toml:

toml
[mcp_servers.lexington]
url = "https://lexington-mcp.michaelandreuzzavega.workers.dev/mcp"
http_headers = { Authorization = "Bearer LEXMCP-XXXX-XXXX" }

Leave the header out to use the free tier. Any other MCP client that speaks streamable HTTP works the same way: URL plus an Authorization header.

The tools

Six tools, small on purpose so any agent learns them in one read.

  • get_guidelines: the rules. How to install, fill and fit a section, how to reskin, how to port, what never to change. Agents read it first on their own.
  • list_themes: every theme with who it is for, its personality, fonts, light or dark mode and section count.
  • search_sections: sections by theme, mode and keywords, with a one line description each. Plural insensitive: “hero” finds “heros”.
  • get_theme_setup: the theme’s tokens.css and Fonts.astro, plus the two setup steps. Once per project per theme.
  • get_design: the theme’s design system as prose (type recipes, colour roles, spacing, components, do and don’t) with a measured roles.json block at the end.
  • get_sections: the files for one or more sections, ready to write. format: "astro" (default) gives Astro components with their dependencies; format: "html" gives flat HTML with every class expanded.

What a session looks like

  1. The agent calls list_themes and picks one theme that fits the brief. One theme per page.
  2. search_sections for each role the page needs: hero, features, pricing, FAQ, closing call.
  3. get_theme_setup once. It writes tokens.css and adds one import to the global CSS, and puts the fonts in <head>.
  4. get_sections with all the picks. Files land under src/components/lexington/<theme>/, imports already namespaced so nothing clashes with your own Button or Wrapper.
  5. It composes the page by importing and stacking the sections, then replaces the demo copy, images and links with yours.

Prompts that work well:

  • “Build a landing page for a bookkeeping app with the Lexington MCP. Warm and serious, not dark.”
  • “Add a pricing section from the same theme under the features.”
  • “Swap the hero for a split layout with a screenshot on the right.”

Install layout

Everything lives under src/components/lexington/:

plaintext
src/components/lexington/<theme>/sections/<group>/<Name>.astro
src/components/lexington/<theme>/fundations/...
src/components/lexington/<theme>/tokens.css
src/components/lexington/shared/<placeholder>.svg

The host needs the @/ alias pointing at src/ (paths: { "@/*": ["src/*"] } in tsconfig.json) and Tailwind CSS 4.

If your project already has a palette, do not import tokens.css; alias the theme’s colour scales onto your own tokens by role instead. get_design says what each scale means (action, panel, ink, muted, rule). Keep the theme’s fonts unless you have an equivalent.

The rule

The section is right; the project adapts to it. Copy, images, links and data are yours to change. Spacing, type scale, radius and layout are the theme’s. If something looks off after install, the cause is almost always a missing font or the tokens file, not the section. The guidelines the agent reads say the same thing in more detail.

Reskin

“The hero from theme A in theme B’s look” is allowed. Ask for it and the agent keeps A’s layout, swaps A’s fundations for B’s and maps colours by role using both themes’ roles.json. Sections defined by their skin (a dashed frame, a bleeding mock UI) do not reskin well; the agent should say so and offer B’s own section.

Prompt: “Take brightlight’s hero-2 and reskin it into buio using get_design for both.”

Not using Astro

Ask for format: "html". You get the same section as flat HTML with every Tailwind class expanded, no fundations, and the placeholder images for public/images/lexington/. The host still needs Tailwind CSS 4 and the theme’s tokens.css.

Porting to React: class becomes className, void tags close (<img />), for becomes htmlFor, every class string stays exactly as it is. Inline <script type="module"> blocks are the section’s own behaviour (tabs, accordions, sliders); move them into an effect or keep them as is. Repeated blocks (cards, tiers) are unrolled; turn them back into a map if you want, without touching classes.

Prompt: “Pull brightlight/pricing/pricing-2 as html and port it to a React component.”

Parts (kind: "part", cards that take props) have no flat export; use the Astro version.

Keys, seats and fair use

  • Solo is one key. Team is five keys, each for one person; do not share a key.
  • Fair use is 1,000 section pulls per key per calendar month. It resets on the first. Hitting it is rare; if a team does, the server says so and points at the Team plan.
  • The server validates keys against Polar and caches the result for an hour. A cancelled subscription stops working within an hour of the period ending.
  • Sections the agent wrote into your projects stay yours under the Lexington licence after you cancel.

Support

Email michael[@]lexingtonthemes.com. Include the theme, the section id and what the agent was asked to do.