sitemd
Build websites from Markdown with MCP tools. Works as an OpenClaw skill or plugin — your agent can create, manage, and deploy websites through conversation.
First Steps
- If no binary (
sitemd/sitemddoes not exist) — run./sitemd/installto download it - Call
sitemd_statusto understand the project state - If fresh project — read files in
pages/, then create pages withsitemd_pages_create - Call
sitemd_site_contextwith a content type to get site identity, conventions, and existing pages - Validate with
sitemd_content_validate - Deploy with
sitemd_deploy
Authentication
sitemd uses email magic links. When your owner needs to log in:
- Call
sitemd_auth_login— returns a browser URL - Send the URL to your owner as a message (WhatsApp, Telegram, Discord, etc.)
- They tap the link and complete login in their browser
- Call
sitemd_auth_pollevery few seconds until it returnsapproved
For automated deploys, use sitemd_auth_api_key to create a long-lived key, then set SITEMD_TOKEN in your environment.
Project Structure
sitemd— Compiled binary (run./sitemd/sitemd launch)install— Bootstrap script (run./sitemd/installto download binary)pages/— Markdown content files with YAML frontmattersettings/— Site configuration (YAML frontmatter in.mdfiles)theme/— CSS and HTML templatesmedia/— Images and assetssite/— Built output
MCP Tools
| Tool | Purpose |
|---|---|
sitemd_status |
Project state overview |
sitemd_pages_create |
Create new pages (writes file + nav + groups) |
sitemd_pages_create_batch |
Create multiple pages in one call |
sitemd_pages_delete |
Delete a page (cleans up nav + groups) |
sitemd_groups_add_pages |
Add pages to group sidebar |
sitemd_site_context |
Site identity, pages, conventions |
sitemd_content_validate |
Validate content quality |
sitemd_seo_audit |
SEO health check with scored report |
sitemd_init |
Initialize project from template |
sitemd_build |
Build without deploying |
sitemd_deploy |
Build and deploy site |
sitemd_activate |
Activate site (permanent) |
sitemd_clone |
Clone an existing website |
sitemd_config_set |
Set backend config (routes secrets vs non-secrets) |
sitemd_auth_login |
Start login flow |
sitemd_auth_poll |
Poll for login completion |
sitemd_auth_status |
Check auth state and license info |
sitemd_auth_api_key |
Create API key for automation |
sitemd_auth_setup |
Enable user authentication |
sitemd_update_check |
Check for updates |
sitemd_update_apply |
Apply updates |
Read pages, settings, and groups files directly — no MCP tool needed for reads.
Settings Files
All configuration is in settings/*.md frontmatter:
| File | Controls |
|---|---|
| meta.md | Site title, brand name, description, URL |
| header.md | Navigation items, brand display, search |
| footer.md | Footer links, copyright, social |
| groups.md | Page groups for sidebars and dropdowns |
| theme.md | Colors, fonts, layout, light/dark/paper modes |
| build.md | Dev server port, output directory |
| deploy.md | Domain, deploy target |
| seo.md | OG images, sitemaps, structured data |
Content Types
sitemd supports structured content generation. Call sitemd_site_context with a type to get conventions and existing pages. The syntax reference is below.
- page — General pages. Second person, present tense, lead with reader value.
- docs — Documentation. Imperative mood, show what to type, code blocks, tables.
- blog — Blog posts. Opinionated, date line, 400-1200 words.
- changelog — Release notes. Terse, Added/Changed/Fixed/Removed sections.
- roadmap — Product roadmap. Shipped/In Progress/Planned sections.
Markdown Extensions
Beyond standard markdown, sitemd supports rich components. The syntax reference is below.
button: Label: /slug— styled buttons. Modifiers:+outline,+big,+newtab,+color:redcard: Title/card-text:/card-image:/card-link:— responsive card gridsembed: URL— auto-detects YouTube, Vimeo, Spotify, X, CodePen, etc.gallery:with indented— image grid with lightboximage-row:with indented— equal-height image row— image modifiers[text]{tooltip content}— inline tooltipsmodal: idwith indented content, trigger via[link](#modal:id)— modal dialogs{#custom-id}— inline anchors[text](url+newtab)— link modifiersform:with indented YAML — formsgated: type1, type2.../gated— gated sectionsdata: source/data-display: cards|list|table— dynamic data
