sitemd
by @tyler-berggren
Build and manage websites from Markdown. Create pages, generate content, configure settings, and deploy — all through MCP tools.
clawhub install sitemd📖 About This Skill
name: sitemd description: Build and manage websites from Markdown. Create pages, generate content, configure settings, and deploy — all through MCP tools. homepage: https://sitemd.cc metadata: openclaw: primaryEnv: SITEMD_TOKEN
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
1. If no binary (sitemd/sitemd does not exist) — run ./sitemd/install to download it
2. Call sitemd_status to understand the project state
3. If fresh project — read files in pages/, then create pages with sitemd_pages_create
4. Call sitemd_site_context with a content type to get site identity, conventions, and existing pages
4. Validate with sitemd_content_validate
5. Deploy with sitemd_deploy
Authentication
sitemd uses email magic links. When your owner needs to log in:
1. Call sitemd_auth_login — returns a browser URL
2. Send the URL to your owner as a message (WhatsApp, Telegram, Discord, etc.)
3. They tap the link and complete login in their browser
4. Call sitemd_auth_poll every few seconds until it returns approved
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/install to download binary)pages/ — Markdown content files with YAML frontmattersettings/ — Site configuration (YAML frontmatter in .md files)theme/ — CSS and HTML templatesmedia/ — Images and assetssite/ — Built outputMCP 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.
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 !alt — image grid with lightboximage-row: with indented !alt — equal-height image row!alt — image modifiers[text]{tooltip content} — inline tooltipsmodal: id with indented content, trigger via link — modal dialogs{#custom-id} — inline anchorstext — link modifiersform: with indented YAML — formsgated: type1, type2 ... /gated — gated sectionsdata: source / data-display: cards|list|table — dynamic data