lindoai avatar

Lindo AI

lindoai/mcp-server

Connects Claude and other MCP clients directly to the Lindo AI platform for building and managing AI-generated websites. You get tools to create sites from prompts, add pages, publish blog posts with markdown, and handle client management including magic link generation and credit allocation. Scheduling support lets you queue website and content creation workflows for future execution via ISO 8601 timestamps. Requires a Business or Whitelabel Lindo plan and runs via npx or their hosted remote endpoint at mcp.lindo.ai. Useful if you're running a web agency or managing multiple client sites and want to automate site creation and content publishing without leaving your editor or chat interface.

tools
52
auth
Secret needed
transport
STDIO, HTTP
env var
1
last updated
Jun 29, 2026

Tools

52 tools

Public tool metadata for what this MCP can expose to an agent.

get_workspaceGet details about the current Lindo AI workspace (business name, plan, language, integrations).

Get details about the current Lindo AI workspace (business name, plan, language, integrations).

No parameter schema in public metadata yet.

update_workspaceUpdate workspace-level settings. Only provided fields are changed.3 params

Update workspace-level settings. Only provided fields are changed.

Parameters* required
business_namestring
New business / workspace name.
default_currencystring
ISO 4217 currency code, e.g. "USD", "EUR".
languagestring
ISO 639-1 language code, e.g. "en".
get_workspace_analyticsGet aggregated analytics across all websites in the workspace.

Get aggregated analytics across all websites in the workspace.

No parameter schema in public metadata yet.

get_workspace_teamList workspace team members (owners, team collaborators).

List workspace team members (owners, team collaborators).

No parameter schema in public metadata yet.

add_workspace_team_memberInvite a new team member to this Lindo workspace. Creates a team record and sends a transactional invitation email from Lindo to the provided address. The email contains a link to accept the invite and join the workspace. It is not a marketing or cold email; the tool should on...2 params

Invite a new team member to this Lindo workspace. Creates a team record and sends a transactional invitation email from Lindo to the provided address. The email contains a link to accept the invite and join the workspace. It is not a marketing or cold email; the tool should on...

Parameters* required
emailstring
Email address of the person to invite.
rolestring
Role for the new member. Only "Team" is supported for workspace-level team members.one of Team
remove_workspace_team_memberRemove a team member from the workspace. Revokes their access.1 params

Remove a team member from the workspace. Revokes their access.

Parameters* required
member_idstring
Team member record ID returned by get_workspace_team.
create_clientCreate a new client record in the workspace. Only "name" is strictly required; if "email" is omitted, a placeholder address is generated so the record can be created. This tool does not send any email — use generate_magic_link separately if you need to share login access with...3 params

Create a new client record in the workspace. Only "name" is strictly required; if "email" is omitted, a placeholder address is generated so the record can be created. This tool does not send any email — use generate_magic_link separately if you need to share login access with...

Parameters* required
emailstring
Client contact email. Optional — a placeholder is generated if not provided.
namestring
Client display name, e.g. "Acme Inc." or "John Smith".
phonestring
Client phone number (optional).
list_clientsList clients in the workspace, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages.2 params

List clients in the workspace, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages.

Parameters* required
pageinteger
1-indexed page number. Defaults to 1.
searchstring
Optional free-text filter applied to client name and email.
update_clientUpdate fields on an existing client. Only provided fields are changed.4 params

Update fields on an existing client. Only provided fields are changed.

Parameters* required
emailstring
New client email.
namestring
New client name.
phonestring
New client phone number.
record_idstring
Client record ID (returned by list_clients or create_client).
delete_clientDelete a client. This cannot be undone.1 params

Delete a client. This cannot be undone.

Parameters* required
record_idstring
Client record ID to delete.
assign_websiteAssign an existing website to a client (grants them access).2 params

Assign an existing website to a client (grants them access).

Parameters* required
client_idstring
Client ID that should own / manage the website.
website_idstring
Website ID to assign.
generate_magic_linkGenerate a short-lived magic login link for a client. The link authenticates the client into the Lindo app without a password and expires automatically.1 params

Generate a short-lived magic login link for a client. The link authenticates the client into the Lindo app without a password and expires automatically.

Parameters* required
client_idstring
Client ID to generate a login link for.
create_websiteStart an AI-generated website workflow. This is asynchronous — the tool returns a `record_id` immediately. Poll `check_website_status` with that `record_id` to track progress and get the final result. Optionally assigns the website to an existing or new client.5 params

Start an AI-generated website workflow. This is asynchronous — the tool returns a `record_id` immediately. Poll `check_website_status` with that `record_id` to track progress and get the final result. Optionally assigns the website to an existing or new client.

Parameters* required
client_emailstring
Client email. Looks up existing client or creates one (use with client_name).
client_idstring
Existing client ID to assign the website to.
client_namestring
Client name, used when creating a new client with client_email.
promptstring
Description of the website to create (business, audience, style, pages).
schedule_atstring
Optional ISO 8601 UTC timestamp to schedule generation for later, e.g. '2026-05-10T14:30:00Z'.
list_websitesList websites in the workspace, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages.2 params

List websites in the workspace, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages.

Parameters* required
pageinteger
1-indexed page number. Defaults to 1.
searchstring
Optional free-text filter applied to business name and preview URL.
get_websiteGet full details for a single website (business info, theme, domain, activation state).1 params

Get full details for a single website (business info, theme, domain, activation state).

Parameters* required
website_idstring
Website ID (e.g. 'webWD4bkJrgKERaOAvh').
update_websiteUpdate a website's business name and/or description.3 params

Update a website's business name and/or description.

Parameters* required
business_descriptionstring
New business description.
business_namestring
New business name.
record_idstring
Website record ID.
delete_websiteDelete a website. This cannot be undone.1 params

Delete a website. This cannot be undone.

Parameters* required
record_idstring
Website record ID to delete.
update_website_settingsUpdate structured website settings (business info, theme, robots.txt, socials, custom header/footer code).2 params

Update structured website settings (business info, theme, robots.txt, socials, custom header/footer code).

Parameters* required
settingsobject
Website settings. Only provided fields are updated.
website_idstring
Website ID.
add_custom_domainAttach a custom domain to a website (user is responsible for DNS configuration).2 params

Attach a custom domain to a website (user is responsible for DNS configuration).

Parameters* required
domainstring
Bare domain without protocol, e.g. 'example.com'.
website_idstring
Website ID.
remove_custom_domainRemove the custom domain from a website. The site reverts to its default Lindo subdomain.1 params

Remove the custom domain from a website. The site reverts to its default Lindo subdomain.

Parameters* required
website_idstring
Website ID.
get_website_teamList collaborators with access to a specific website.1 params

List collaborators with access to a specific website.

Parameters* required
website_idstring
Website ID.
get_website_analyticsGet analytics (visits, traffic sources, top pages) for a website.1 params

Get analytics (visits, traffic sources, top pages) for a website.

Parameters* required
website_idstring
Website ID.
create_pageStart an AI-generated page workflow for an existing website. This is asynchronous — the tool returns a `record_id` immediately. Poll `check_page_status` with that `record_id` to track progress and get the final result.3 params

Start an AI-generated page workflow for an existing website. This is asynchronous — the tool returns a `record_id` immediately. Poll `check_page_status` with that `record_id` to track progress and get the final result.

Parameters* required
promptstring
Description of the page to create (purpose, sections, tone).
schedule_atstring
Optional ISO 8601 UTC timestamp to schedule generation.
website_idstring
Website ID.
list_pagesList pages on a website, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages. Only pages created via the API/SDK are returned.3 params

List pages on a website, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages. Only pages created via the API/SDK are returned.

Parameters* required
pageinteger
1-indexed page number. Defaults to 1.
searchstring
Optional free-text filter applied to page name and URL path.
website_idstring
Website ID.
get_pageGet details for a single page.2 params

Get details for a single page.

Parameters* required
page_idstring
Page ID.
website_idstring
Website ID.
update_pageUpdate page metadata (display name, URL path, SEO). Only provided fields change.5 params

Update page metadata (display name, URL path, SEO). Only provided fields change.

Parameters* required
namestring
Display name of the page.
page_idstring
Page ID.
pathstring
URL path of the page, e.g. '/about'.
seoobject
SEO metadata for the page or blog post.
website_idstring
Website ID.
delete_pageDelete a page. This cannot be undone.2 params

Delete a page. This cannot be undone.

Parameters* required
page_idstring
Page ID.
website_idstring
Website ID.
publish_pagePublish a static HTML page at a given path. If a page already exists at that path it will be OVERWRITTEN — any existing content is replaced.4 params

Publish a static HTML page at a given path. If a page already exists at that path it will be OVERWRITTEN — any existing content is replaced.

Parameters* required
page_contentstring
HTML body for the page.
page_titlestring
Page title (title tag).
pathstring
URL path for the page, e.g. '/about'.
website_idstring
Website ID.
update_page_contentReplace the HTML content of an existing page. This overwrites the previous HTML entirely; the prior content is not preserved. Optionally updates SEO metadata.4 params

Replace the HTML content of an existing page. This overwrites the previous HTML entirely; the prior content is not preserved. Optionally updates SEO metadata.

Parameters* required
page_contentstring
New HTML body for the page.
page_idstring
Page ID.
seoobject
SEO metadata for the page or blog post.
website_idstring
Website ID.
unpublish_pageUnpublish a page so it is no longer publicly accessible.2 params

Unpublish a page so it is no longer publicly accessible.

Parameters* required
page_idstring
Page ID.
website_idstring
Website ID.
get_page_htmlReturn the raw HTML of a page.2 params

Return the raw HTML of a page.

Parameters* required
page_idstring
Page ID.
website_idstring
Website ID.
create_blogStart an AI-generated blog post workflow for an existing website. This is asynchronous — the tool returns a `record_id` immediately. Poll `check_blog_status` with that `record_id` to track progress and get the final result.3 params

Start an AI-generated blog post workflow for an existing website. This is asynchronous — the tool returns a `record_id` immediately. Poll `check_blog_status` with that `record_id` to track progress and get the final result.

Parameters* required
promptstring
Description of the blog post to generate.
schedule_atstring
Optional ISO 8601 UTC timestamp to schedule generation.
website_idstring
Website ID.
publish_blogPublish a new markdown blog post at a given path.8 params

Publish a new markdown blog post at a given path.

Parameters* required
authorstring
Author display name.
blog_contentstring
Markdown body of the blog post.
categorystring
Blog category label, e.g. "Product".
excerptstring
Short summary shown in blog listings.
page_titlestring
Title of the blog post (title tag).
pathstring
URL path for the blog post, e.g. '/blog/hello-world'.
publish_datestring
Publish date. Prefer ISO 8601 UTC ("2026-05-05T12:00:00Z") or human-readable ("May 5, 2026").
website_idstring
Website ID.
list_blogsList blog posts on a website, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages. Only blog posts created via the API/SDK are returned.3 params

List blog posts on a website, paginated. Returns a `{ list, total }` result where `list` holds up to 12 items. Use `total` (the true, filter-aware count) with the `page` argument to fetch additional pages. Only blog posts created via the API/SDK are returned.

Parameters* required
pageinteger
1-indexed page number. Defaults to 1.
searchstring
Optional free-text filter applied to blog post name and URL path.
website_idstring
Website ID.
get_blogGet details for a single blog post.2 params

Get details for a single blog post.

Parameters* required
blog_idstring
Blog post ID.
website_idstring
Website ID.
update_blogUpdate blog post metadata (name, path, SEO).5 params

Update blog post metadata (name, path, SEO).

Parameters* required
blog_idstring
Blog post ID.
namestring
Display name.
pathstring
URL path, e.g. '/blog/hello-world'.
seoobject
SEO metadata for the page or blog post.
website_idstring
Website ID.
delete_blogDelete a blog post. This cannot be undone.2 params

Delete a blog post. This cannot be undone.

Parameters* required
blog_idstring
Blog post ID.
website_idstring
Website ID.
update_blog_contentReplace the markdown content of an existing blog post. This overwrites the previous markdown entirely; the prior content is not preserved. Optionally updates SEO and blog settings.5 params

Replace the markdown content of an existing blog post. This overwrites the previous markdown entirely; the prior content is not preserved. Optionally updates SEO and blog settings.

Parameters* required
blog_contentstring
New markdown body.
blog_idstring
Blog post ID.
blog_settingsobject
Blog-post-specific display settings.
seoobject
SEO metadata for the page or blog post.
website_idstring
Website ID.
unpublish_blogUnpublish a blog post so it is no longer publicly accessible.2 params

Unpublish a blog post so it is no longer publicly accessible.

Parameters* required
blog_idstring
Blog post ID.
website_idstring
Website ID.
get_blog_htmlReturn the rendered HTML of a blog post.2 params

Return the rendered HTML of a blog post.

Parameters* required
blog_idstring
Blog post ID.
website_idstring
Website ID.
check_website_statusPoll the status of a website-creation workflow started by `create_website`. Pass the `record_id` you received from that tool. While the workflow is running, call this tool again after `poll_after_ms` milliseconds. Once `done` is true, `status` is `complete` (all pages generate...1 params

Poll the status of a website-creation workflow started by `create_website`. Pass the `record_id` you received from that tool. While the workflow is running, call this tool again after `poll_after_ms` milliseconds. Once `done` is true, `status` is `complete` (all pages generate...

Parameters* required
record_idstring
Workflow record_id returned by create_website.
check_page_statusPoll the status of a page-creation workflow started by `create_page`. Pass the `record_id` you received from that tool. While the workflow is running, call this tool again after `poll_after_ms` milliseconds. Once `done` is true, `status` is `complete` or `errored`; when comple...1 params

Poll the status of a page-creation workflow started by `create_page`. Pass the `record_id` you received from that tool. While the workflow is running, call this tool again after `poll_after_ms` milliseconds. Once `done` is true, `status` is `complete` or `errored`; when comple...

Parameters* required
record_idstring
Workflow record_id returned by create_page.
check_blog_statusPoll the status of a blog-creation workflow started by `create_blog`. Pass the `record_id` you received from that tool. While the workflow is running, call this tool again after `poll_after_ms` milliseconds. Once `done` is true, `status` is `complete` or `errored`; when comple...1 params

Poll the status of a blog-creation workflow started by `create_blog`. Pass the `record_id` you received from that tool. While the workflow is running, call this tool again after `poll_after_ms` milliseconds. Once `done` is true, `status` is `complete` or `errored`; when comple...

Parameters* required
record_idstring
Workflow record_id returned by create_blog.
batch_create_websitesStart up to 25 website-creation workflows in one request. Returns one `record_id` per item. Poll the combined status with `batch_check_website_status`, or the individual statuses with `check_website_status`.1 params

Start up to 25 website-creation workflows in one request. Returns one `record_id` per item. Poll the combined status with `batch_check_website_status`, or the individual statuses with `check_website_status`.

Parameters* required
itemsarray
Between 1 and 25 website creation requests.
batch_create_pagesStart up to 25 page-creation workflows on a single website in one request. Returns one `record_id` per item. Poll with `batch_check_page_status` or `check_page_status`.2 params

Start up to 25 page-creation workflows on a single website in one request. Returns one `record_id` per item. Poll with `batch_check_page_status` or `check_page_status`.

Parameters* required
itemsarray
Between 1 and 25 page creation requests.
website_idstring
Website the pages will be added to.
batch_create_blogsStart up to 25 blog-creation workflows on a single website in one request. Returns one `record_id` per item. Poll with `batch_check_blog_status` or `check_blog_status`.2 params

Start up to 25 blog-creation workflows on a single website in one request. Returns one `record_id` per item. Poll with `batch_check_blog_status` or `check_blog_status`.

Parameters* required
itemsarray
Between 1 and 25 blog post creation requests.
website_idstring
Website the blog posts will be added to.
batch_check_website_statusPoll up to 25 website-creation workflows at once. Returns a rollup `status` (scheduled/running/complete/partial/errored) plus a per-item array with the same shape as `check_website_status`.1 params

Poll up to 25 website-creation workflows at once. Returns a rollup `status` (scheduled/running/complete/partial/errored) plus a per-item array with the same shape as `check_website_status`.

Parameters* required
record_idsarray
Up to 25 website workflow record_ids to check.
batch_check_page_statusPoll up to 25 page-creation workflows at once. Returns a rollup `status` plus a per-item array with the same shape as `check_page_status`.1 params

Poll up to 25 page-creation workflows at once. Returns a rollup `status` plus a per-item array with the same shape as `check_page_status`.

Parameters* required
record_idsarray
Up to 25 page workflow record_ids to check.
batch_check_blog_statusPoll up to 25 blog-creation workflows at once. Returns a rollup `status` plus a per-item array with the same shape as `check_blog_status`.1 params

Poll up to 25 blog-creation workflows at once. Returns a rollup `status` plus a per-item array with the same shape as `check_blog_status`.

Parameters* required
record_idsarray
Up to 25 blog workflow record_ids to check.
get_creditsGet the workspace's current Lindo credit balance and utilization.

Get the workspace's current Lindo credit balance and utilization.

No parameter schema in public metadata yet.

get_client_creditsGet the credit balance allocated to a specific client.1 params

Get the credit balance allocated to a specific client.

Parameters* required
client_idstring
Client ID.
allocate_creditsRe-allocate existing workspace-owned Lindo credits to a client. This never purchases credits; it only moves balance you already own.5 params

Re-allocate existing workspace-owned Lindo credits to a client. This never purchases credits; it only moves balance you already own.

Parameters* required
amountinteger
Number of credits to allocate (positive integer).
client_idstring
Client ID to allocate credits to.
credit_typestring
Which bucket to allocate from.one of monthly · purchased · daily
notesstring
Optional notes for audit trail.
sourcestring
Optional free-form source tag for audit trail.

Sponsors

Configuration

LINDO_API_KEY*secret

Lindo AI API key. Create one at https://app.lindo.ai under Workspace Settings → API Keys. Requires a Business or Whitelabel plan.

Readme

@lindoai/mcp-server

MCP (Model Context Protocol) server for Lindo AI — create websites, pages, and blog posts with AI directly from Claude, Cursor, Kiro, Windsurf, and other MCP-compatible tools.

Listed in the official MCP Registry as io.github.lindoai/mcp-server.

mcp-server MCP server smithery badge

Setup

Add to your MCP client configuration:

{
  "mcpServers": {
    "lindo": {
      "command": "npx",
      "args": ["-y", "@lindoai/mcp-server"],
      "env": {
        "LINDO_API_KEY": "your_api_key_here"
      }
    }
  }
}

Where to add this config

ClientConfig file
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
Claude Code.claude/settings.json
Cursor.cursor/mcp.json
Kiro.kiro/settings/mcp.json
WindsurfMCP settings in IDE

View the full README on GitHub

Details

Repository
github.com/lindoai/mcp-server
Website
lindo.ai
Package
@lindoai/mcp-server
Transport
STDIO, HTTP
Auth
Required
Registry
MCP registry, active