daniel-lopez-puig avatar

Create Web Page

daniel-lopez-puig/landings

Connects your AI client to a hosted page builder over streamable HTTP. Exposes tools for guided onboarding, layout and palette selection, block-level content editing (links, social rows, WhatsApp actions, galleries, forms, product cards), and draft preview before publish. No auth needed for anonymous demo pages. OAuth kicks in only when you want to claim a page for long-term management. Useful when you need to spin up a contact page, link-in-bio, or single-purpose landing from a conversational brief without opening a visual editor. The workflow is import or intake, iterate the draft with structured block operations, preview, then explicitly publish. Includes source import for scraping public pages into structured briefs.

tools
27
transport
HTTP
last updated
May 27, 2026

Install

From registry metadata
$ npx add-mcp https://create-web-page.com/mcp --name create-web-page

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http create-web-page https://create-web-page.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 27 tools

Verified live against the running server on Nov 6, 2026.

account_whoamiReturn the current Create Web Page account context. Use this to check whether the user is authenticated or using an anonymous expiring demo.

Return the current Create Web Page account context. Use this to check whether the user is authenticated or using an anonymous expiring demo.

No parameters. Call it with no arguments.

page_intake_startOptional first step for a vague page request (e.g. 'make me a website for my barbershop'). Returns at most one round of questions to ask together: the name, the main visitor action AND where it goes (WhatsApp number with country code, booking/order link, phone or address), and...7 params

Optional first step for a vague page request (e.g. 'make me a website for my barbershop'). Returns at most one round of questions to ask together: the name, the main visitor action AND where it goes (WhatsApp number with country code, booking/order link, phone or address), and...

Parameters* required
businessNamestring
Only include if the user already provided the business or project name.
businessTypestring
Business category inferred from the user's words, such as hamburger restaurant or dental clinic.
localestring
Preferred content locale if obvious from the conversation.
originalRequeststring
The user's original page-creation request, copied verbatim when available.
primaryGoalstring
The main visitor action if known, such as book, call, WhatsApp, buy, or leave a lead.
sourceHandlestring
Public social handle provided by the user.
sourceUrlstring
Public HTTP/HTTPS source URL provided by the user, such as a business website or link-in-bio page. Protected platforms (social networks, maps, paywalls) require client-side browsing or pasted detai...
page_onboarding_startGuided visual setup (category, layout, palette, primary action) that does NOT create a page. Use it ONLY when the user explicitly wants to choose the style/layout step by step; for normal requests call page_create_from_brief (asking at most one round of questions first). IMPOR...3 params

Guided visual setup (category, layout, palette, primary action) that does NOT create a page. Use it ONLY when the user explicitly wants to choose the style/layout step by step; for normal requests call page_create_from_brief (asking at most one round of questions first). IMPOR...

Parameters* required
localestring
Preferred UI locale: en or es. If omitted, Spanish is used only when originalRequest is clearly Spanish; otherwise English. The result echoes the resolved locale — pass it on every page_onboarding_...
originalRequeststring
suggestedSelectionobject
page_onboarding_updateValidate onboarding selections and return the remaining checklist. STATELESS: it does not remember previous calls, so every call must include the FULL accumulated selection (mainCategory, subCategory, layout, palette, primaryAction) plus all knownFields (name, description, act...4 params

Validate onboarding selections and return the remaining checklist. STATELESS: it does not remember previous calls, so every call must include the FULL accumulated selection (mainCategory, subCategory, layout, palette, primaryAction) plus all knownFields (name, description, act...

Parameters* required
knownFieldsobject
localestring
en or es — resend the locale returned by page_onboarding_start (this tool is stateless). Defaults to English unless knownFields.description is clearly Spanish.
selectionobject
stepIdstring
one of category · layout · profile · primary-action · ready
source_importFetch a public website URL and extract a structured brief with business name, description, contact links, and suggested page blocks. Only works with public HTTP/HTTPS pages. Does not bypass login, CAPTCHA, or paywalls. Returns extracted fields and suggestedBlocks for use with...2 params

Fetch a public website URL and extract a structured brief with business name, description, contact links, and suggested page blocks. Only works with public HTTP/HTTPS pages. Does not bypass login, CAPTCHA, or paywalls. Returns extracted fields and suggestedBlocks for use with...

Parameters* required
localestring
Preferred output locale if obvious from the conversation, such as es or en.
sourceUrl*string
Public http/https source URL to import.
page_createLow-level/legacy: create a blank link-in-bio scaffold from a style preset (title, displayName, preset or 'auto'). Not for normal page requests — use page_create_from_brief, which builds the page from the user's details. The scaffold starts with empty placeholder blocks to fill...9 params

Low-level/legacy: create a blank link-in-bio scaffold from a style preset (title, displayName, preset or 'auto'). Not for normal page requests — use page_create_from_brief, which builds the page from the user's details. The scaffold starts with empty placeholder blocks to fill...

Parameters* required
biostring
Optional short bio for the header.
businessTypestring
Used by preset:auto inference. Examples: musician, restaurant, designer.
displayNamestring
Visible header display name. Defaults to title.
initialPromptstring
layoutstring
Layout id. Defaults to 'link_in_bio'.one of link_in_bio
preset*string
Style preset id, or 'auto' to infer deterministically from businessType/style.one of classic_dark · sunset_gradient · editorial_serif · minimalist_light · local_business · bold_pop
slugstring
Preferred public URL slug.
stylestring
Free-form style hint used by preset:auto inference.
title*string
Internal page title and default header display_name.
page_create_from_briefThe main tool for creating a page. Call it directly when the request already has the business/page name and the main visitor action with its real destination (WhatsApp number with country code, booking/order link, phone, address or email); if the request is vague, ask at most...29 params

The main tool for creating a page. Call it directly when the request already has the business/page name and the main visitor action with its real destination (WhatsApp number with country code, booking/order link, phone, address or email); if the request is vague, ask at most...

Parameters* required
audiencestring
Planning context only. Not rendered directly as public page copy.
biostring
Optional short bio for the header.
businessName*string
businessTypestring
Planning context only. Not rendered directly as public page copy.
fallbackLeadFormobject
Public fallback contact/interest form to use when the requested primary action lacks a real destination. All copy must be final-audience copy in the page's target language.
heroImageUrlstring
Explicit user-provided image URL for featured-photo or full-image styles.
initialPromptstring
layoutstring
Defaults to 'link_in_bio'.one of link_in_bio
localestring
locationstring
Public business address or service area intended for map/address actions, not direct body copy and not the user's private/current location.
mustIncludearray
Planning checklist only. Do not put section names, CTA labels, owner instructions, or private notes here; not rendered directly.
offerstring
Planning context only. Not rendered directly as public page copy; use bio and publicSections for final-audience copy.
onboardingLayoutstring
Layout style: background_color (minimalist), full (featured photo), or background_image (full image background).one of background_color · full · background_image
onboardingMainCategorystring
Validated category id from page_onboarding_*, for example physical-business or online-business.
onboardingPalettestring
Palette id returned by page_onboarding_* paletteChoices, for example atom_dark_plum.
onboardingSubCategorystring
Validated subcategory id from page_onboarding_*, for example health.
preferredSlugstring
Desired URL path. Ask the user for it near the end of onboarding. Use normal letters, numbers, and hyphens; the server normalizes and makes it unique.
presetstring
Style preset id, or 'auto' to infer deterministically. Defaults to 'auto'.one of classic_dark · sunset_gradient · editorial_serif · minimalist_light · local_business · bold_pop
primaryActionIdstring
one of appointment · whatsapp · phone · maps · buy · lead
primaryActionLabelstring
Public label for the primary action in the page's target language.

+9 more parameters. See the server's own documentation for the full schema.

block_addAppend a new content block to a link-in-bio page. The block must match one of the 14 allowed types (link, social_row, whatsapp, phone_call, email_contact, image, gallery, video_embed, text, map_embed, product_card, lead_form, reviews, save_contact) with that type's strict prop...3 params

Append a new content block to a link-in-bio page. The block must match one of the 14 allowed types (link, social_row, whatsapp, phone_call, email_contact, image, gallery, video_embed, text, map_embed, product_card, lead_form, reviews, save_contact) with that type's strict prop...

Parameters* required
block*object
The block to add. Must match one of the 14 allowed types with that type's strict props schema. The server generates the block id.
editTokenstring
pageId*string
layouts_listList supported page layouts. Currently ships link_in_bio only.

List supported page layouts. Currently ships link_in_bio only.

No parameters. Call it with no arguments.

presets_listList the 12 curated style presets (theme + starter blocks) for link-in-bio. Use to offer the user a choice or to confirm a preset:auto selection.

List the 12 curated style presets (theme + starter blocks) for link-in-bio. Use to offer the user a choice or to confirm a preset:auto selection.

No parameters. Call it with no arguments.

page_getRead a landing page draft, including its latest content JSON. For anonymous demo pages, include the editToken.2 params

Read a landing page draft, including its latest content JSON. For anonymous demo pages, include the editToken.

Parameters* required
editTokenstring
pageId*string
media_uploadAdd an image to a page. PREFERRED for any image already on the web: pass its imageUrl and the server fetches it directly (no size limit, no attachment needed in chat). imageBase64 is ONLY for very small inline images — large base64 payloads are rejected by request-size limits...8 params

Add an image to a page. PREFERRED for any image already on the web: pass its imageUrl and the server fetches it directly (no size limit, no attachment needed in chat). imageBase64 is ONLY for very small inline images — large base64 payloads are rejected by request-size limits...

Parameters* required
altTextstring
Meaningful alt text for the image.
contentTypestring
Declared MIME type, such as image/png. The server still verifies magic bytes.
editTokenstring
Required for anonymous demo pages. Use the editToken returned by page_create.
fileNamestring
Original file name when known.
imageBase64string
Base64 image bytes or a data:image/*;base64 data URI. Use only for small images.
imageUrlstring
Public direct image URL. The server validates redirects and blocks private network targets.
pageId*string
The pageId returned by page_create.
placementstring
Where the image should be used. header_photo = business-card top photo, avatar = profile header avatar, block_image = image inside a block (requires blockId), gallery_item = appended to a gallery b...one of avatar · header_photo · block_image · gallery_item · background · unassigned
media_upload_link_createGet an upload link for a photo on the user's own device (phone/computer) — the right tool whenever the image is not already at a public URL. Pass pageId (+ editToken for demo pages) and the placement (e.g. header_photo). Then show the returned uploadPageUrl to the user as a cl...4 params

Get an upload link for a photo on the user's own device (phone/computer) — the right tool whenever the image is not already at a public URL. Pass pageId (+ editToken for demo pages) and the placement (e.g. header_photo). Then show the returned uploadPageUrl to the user as a cl...

Parameters* required
altTextstring
Meaningful alt text for the image.
editTokenstring
Required for anonymous demo pages. Use the editToken returned by page_create.
pageId*string
The pageId returned by page_create.
placementstring
Where the image should be used. header_photo = business-card top photo, avatar = profile header avatar, block_image = image inside a block (requires blockId), gallery_item = appended to a gallery b...one of avatar · header_photo · block_image · gallery_item · background · unassigned
media_attachAttach a ready media asset to the page. placement determines where: avatar (header), block_image (image inside a specific block — requires blockId), gallery_item (appended to a gallery — optional blockId targets a specific gallery; otherwise the first one is used), background...6 params

Attach a ready media asset to the page. placement determines where: avatar (header), block_image (image inside a specific block — requires blockId), gallery_item (appended to a gallery — optional blockId targets a specific gallery; otherwise the first one is used), background...

Parameters* required
altTextstring
Meaningful alt text for the image.
blockIdstring
Required when placement is block_image; optional for gallery_item (targets a specific gallery block).
editTokenstring
Required for anonymous demo pages. Use the editToken returned by page_create.
mediaAssetId*string
The mediaAssetId returned by media_upload or media_upload_link_create.
pageId*string
The pageId returned by page_create.
placement*string
Where the image should be used. header_photo = business-card top photo, avatar = profile header avatar, block_image = image inside a block (requires blockId), gallery_item = appended to a gallery b...one of avatar · header_photo · block_image · gallery_item · background · unassigned
media_deleteSoft-delete a media asset and remove all references to it from the page content.3 params

Soft-delete a media asset and remove all references to it from the page content.

Parameters* required
editTokenstring
Required for anonymous demo pages. Use the editToken returned by page_create.
mediaAssetId*string
The mediaAssetId to delete.
pageId*string
The pageId returned by page_create.
page_claimClaim an anonymous demo page into an AUTHENTICATED account. This requires the signed-in user's OAuth — an anonymous chat/agent session cannot call it and will get an OAuth-required error. So in a normal agent conversation, do NOT call this to 'save' a demo page: instead share...2 params

Claim an anonymous demo page into an AUTHENTICATED account. This requires the signed-in user's OAuth — an anonymous chat/agent session cannot call it and will get an OAuth-required error. So in a normal agent conversation, do NOT call this to 'save' a demo page: instead share...

Parameters* required
editToken*string
The editToken returned by page_create for the anonymous demo page.
pageId*string
The pageId returned by page_create.
account_pages_listList landing pages saved to the signed-in account. Safe to call without sign-in: an anonymous chat gets ok=true, authenticated=false and an empty list (not an error) because it has no saved pages — then create the page directly with page_create_from_brief. Sign-in is only need...1 params

List landing pages saved to the signed-in account. Safe to call without sign-in: an anonymous chat gets ok=true, authenticated=false and an empty list (not an error) because it has no saved pages — then create the page directly with page_create_from_brief. Sign-in is only need...

Parameters* required
limitnumber
Maximum number of claimed pages to return.
account_page_manageRead a claimed account page without requiring an editToken. Use after OAuth when the user wants to manage a durable website.1 params

Read a claimed account page without requiring an editToken. Use after OAuth when the user wants to manage a durable website.

Parameters* required
pageId*string
The claimed pageId to manage.
page_header_updateUpdate the link-in-bio page header: displayName, bio, verified checkmark, business-card display style ("photo_hero" large top photo or "avatar"), a short role label (e.g. "Barber · Madrid"), labelPosition, and the header photo (photoUrl; null removes it). Use only the fields y...12 params

Update the link-in-bio page header: displayName, bio, verified checkmark, business-card display style ("photo_hero" large top photo or "avatar"), a short role label (e.g. "Barber · Madrid"), labelPosition, and the header photo (photoUrl; null removes it). Use only the fields y...

Parameters* required
biovalue
Short bio under the display name. Pass null to clear it.
displayvalue
Header style: photo_hero = large business-card top photo, avatar = small round profile photo. Pass null to clear it.
displayNamestring
Visible display name in the page header.
editTokenstring
labelvalue
Short role line near the name, e.g. "Brand Designer · Austin, TX". Pass null to clear it.
labelPositionvalue
pageId*string
photoAltstring
Alt text for the header photo.
photoObjectPositionstring
CSS focal point for the photo_hero crop, e.g. "50% 28%".
photoUrlvalue
Header photo URL. Pass null to remove the current photo.
showQrboolean
Reserved: stored but not rendered yet, so no QR appears on the page. Do not promise a page QR; a save_contact block shows a scannable QR of the contact card.
verifiedboolean
Show a verified checkmark next to the display name.
page_theme_updateApply a partial theme patch. Theme fields are enum-constrained (button variant/radius/shadow, font family/weight, density, icon_size). Use presets_list first if the user wants a complete restyle. For already-published pages, this saves an unpublished latest revision only. Do n...3 params

Apply a partial theme patch. Theme fields are enum-constrained (button variant/radius/shadow, font family/weight, density, icon_size). Use presets_list first if the user wants a complete restyle. For already-published pages, this saves an unpublished latest revision only. Do n...

Parameters* required
editTokenstring
pageId*string
theme*object
Partial theme patch. Provide only fields you want to change.
page_meta_updateUpdate internal page title, URL slug, and SEO title/description. For already-published pages, this saves an unpublished latest revision only. Do not call page_publish in the same assistant turn after this edit. Stop and tell the user the draft/preview was updated, then wait fo...6 params

Update internal page title, URL slug, and SEO title/description. For already-published pages, this saves an unpublished latest revision only. Do not call page_publish in the same assistant turn after this edit. Stop and tell the user the draft/preview was updated, then wait fo...

Parameters* required
editTokenstring
pageId*string
seoDescriptionstring
SEO meta description value.
seoTitlestring
SEO <title> tag value.
slugstring
Preferred public URL slug.
titlestring
Internal page title shown in editor results.
page_previewReturn the current preview URL for a page. You usually do not need this: page_create and page_create_from_brief already return a ready-to-open previewUrl. For an anonymous demo page you must pass the editToken from the create result; calling this with pageId alone fails.2 params

Return the current preview URL for a page. You usually do not need this: page_create and page_create_from_brief already return a ready-to-open previewUrl. For an anonymous demo page you must pass the editToken from the create result; calling this with pageId alone fails.

Parameters* required
editTokenstring
Required for anonymous demo pages. Use the editToken returned by page_create.
pageId*string
The pageId returned by page_create.
page_publishPublish the latest page revision. Call this only when the user's latest message explicitly asks to publish, make the page live, or get a public share link. Do not call this immediately after page_create or page_create_from_brief just because the draft is publish-ready. For ano...2 params

Publish the latest page revision. Call this only when the user's latest message explicitly asks to publish, make the page live, or get a public share link. Do not call this immediately after page_create or page_create_from_brief just because the draft is publish-ready. For ano...

Parameters* required
editTokenstring
Required for anonymous demo pages. Use the editToken returned by page_create.
pageId*string
The pageId returned by page_create.
page_unpublishRemove a published landing page from public availability while keeping its draft and revision history.2 params

Remove a published landing page from public availability while keeping its draft and revision history.

Parameters* required
editTokenstring
pageId*string
block_updatePatch one content block by stable blockId. Provide a props patch (merged into existing props) and/or a new type. Block types and props are validated against the strict per-type schema. For already-published pages, this saves an unpublished latest revision only. Do not call pag...

Patch one content block by stable blockId. Provide a props patch (merged into existing props) and/or a new type. Block types and props are validated against the strict per-type schema. For already-published pages, this saves an unpublished latest revision only. Do not call pag...

No parameters. Call it with no arguments.

block_deleteDelete one block by stable blockId. Use page_get first if unsure which id to remove. For already-published pages, this saves an unpublished latest revision only. Do not call page_publish in the same assistant turn after this edit. Stop and tell the user the draft/preview was u...3 params

Delete one block by stable blockId. Use page_get first if unsure which id to remove. For already-published pages, this saves an unpublished latest revision only. Do not call page_publish in the same assistant turn after this edit. Stop and tell the user the draft/preview was u...

Parameters* required
blockId*string
editTokenstring
pageId*string
block_reorderMove a block to a new zero-based index in the page main slot. For already-published pages, this saves an unpublished latest revision only. Do not call page_publish in the same assistant turn after this edit. Stop and tell the user the draft/preview was updated, then wait for a...4 params

Move a block to a new zero-based index in the page main slot. For already-published pages, this saves an unpublished latest revision only. Do not call page_publish in the same assistant turn after this edit. Stop and tell the user the draft/preview was updated, then wait for a...

Parameters* required
blockId*string
editTokenstring
pageId*string
toIndex*number

Sponsors

Readme

Details

Repository
github.com/daniel-lopez-puig/landings
Website
create-web-page.com/docs/mcp
Transport
HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026