npm petal-components-mcpstreamable-httpupdated 3mo ago
An MCP server that exposes petalcomponents — the Shadcn-style component library for Phoenix LiveView — to AI coding assistants (Claude Code, Cursor, Windsurf, etc).
What can you do with petal components mcp?
petal-components-mcp
An MCP server that exposes petal_components — the Shadcn-style component library for Phoenix LiveView — to AI coding assistants (Claude Code, Cursor, Windsurf, etc).
Without this, AI agents writing HEEx invent raw Tailwind soup and never reach for pc_* components. With it, the AI gets the full schema for every component on demand — attrs, slots, defaults, allowed values, usage examples — and writes idiomatic petal_components markup by default.
Install (Claude Code)
claude mcp add petal --transport http https://mcp.petal.build
Then in any Phoenix project, ask the AI to build something. It'll call list_components and get_component to ground its output in real petal_components schemas.
Available tools
list_components— every component in the library with a one-line summaryget_component— full schema (attrs, slots, defaults, values, docs) + HEEx usage example
Coming soon: search_components (natural-language match) and generate_pattern (composed blocks like form-in-card, modal-with-form, dashboard skeletons).
How it works
The MCP server is a thin TypeScript service that bundles a JSON snapshot of every component in petal_components. The JSON is generated by a Mix task that introspects Phoenix.Component.__components__/0 on every loaded PetalComponents.* module — so the schemas are always in sync with the actual library, no manual duplication.
petal_components (Hex) petal-components-mcp (this repo)
│ │
│ mix run extract_schemas.exs │
│─────────────────────────────────────► src/schemas.json
│
│ tsc
▼
dist/server.js ◄── deployed to Fly
Running locally
# Regenerate schemas from the latest petal_components on Hex
npm run extract # cd scripts/extract && mix deps.get && mix run extract_schemas.exs
# Build and serve
npm install
npm run build
PORT=8765 npm start
# Health check
curl http://localhost:8765/healthz
The extraction is self-contained — scripts/extract/ is a tiny Mix project that pulls petal_components from Hex, introspects every Phoenix.Component.__components__/0, and writes src/schemas.json. No need for a local petal_components clone.
To use a local server with Claude Code:
claude mcp add petal-local --transport http http://localhost:8765/mcp
Deploy (Fly.io)
The MCP server is hosted at mcp.petal.build on Fly.io as a standalone app.
First-time setup
# 1. Create the app (one-time, requires Fly auth)
fly apps create petal-components-mcp
# 2. Deploy
fly deploy --remote-only
# 3. Add the custom domain
fly certs add mcp.petal.build
After step 3, Fly prints the DNS records you need. Add a CNAME at the petal.build DNS provider:
mcp.petal.build CNAME petal-components-mcp.fly.dev
Then fly certs check mcp.petal.build will go green once propagation hits.
Subsequent deploys
fly deploy --remote-only
Syncing after a new petal_components release on Hex
# 1. Regenerate schemas from the latest petal_components on Hex
npm run extract
# 2. Eyeball the diff (catches surprises before they ship to AI agents worldwide)
git diff src/schemas.json | head -50
# 3. Commit and deploy
git add src/schemas.json
git commit -m "chore: sync schemas with petal_components vX.Y.Z"
git push
fly deploy --remote-only
The /healthz endpoint reports the bundled version, so you can confirm a deploy went out:
curl https://mcp.petal.build/healthz
# {"ok":true,"petal_components_version":"3.2.0","components":79,...}
Background
This is the artifact for bet 002 — testing whether AI coding assistants become the dominant install/discovery channel for Phoenix UI tooling. See the bet for hypothesis, metrics, and kill criteria.
License
MIT.
Install
Add petal components mcp to your client. Pick the one you use.
{
"servers": {
"petal-components-mcp": {
"type": "http",
"url": "https://mcp.petal.build/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
claude mcp add petal-components-mcp -- npx -y petal-components-mcpcodex mcp add petal-components-mcp -- npx -y petal-components-mcpamp mcp add petal-components-mcp -- npx -y petal-components-mcp{
"mcpServers": {
"petal-components-mcp": {
"command": "npx",
"args": [
"-y",
"petal-components-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"petal-components-mcp": {
"command": "npx",
"args": [
"-y",
"petal-components-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"mcpServers": {
"petal-components-mcp": {
"command": "npx",
"args": [
"-y",
"petal-components-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"petal-components-mcp": {
"command": "npx",
"args": [
"-y",
"petal-components-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"petal-components-mcp": {
"command": "npx",
"args": [
"-y",
"petal-components-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"petal-components-mcp": {
"type": "local",
"command": "npx",
"args": [
"-y",
"petal-components-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"petal-components-mcp": {
"command": {
"path": "npx",
"args": [
"-y",
"petal-components-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y petal-components-mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
2 tools
petal components mcp exposes 2 tools to a connected agent.
- list_components
- every component in the library with a one-line summary
- get_component
- full schema (attrs, slots, defaults, values, docs) + HEEx usage example
Score
58 / 100
Adequate
- Documentation20/25
- Maintenance13/25
- Trust6/20
- Capability4/15
- Install experience15/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 110 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 2 tool(s) documented
- Provides prompt templates
- Provides resources
- 18 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.1.0Latest | May 14, 2026 |