Docs

The WebBase docs. One link, thirty tools.

WebBase is website hosting your AI runs by itself. Everything you need is on this page: how to connect Claude, ChatGPT, Cursor or Claude Code, what happens on the first deploy, and what each of the 30 tools does, with the parameters the server actually checks.

Endpoint
https://mcp.webbase.dev/mcp
Authentication
API key wdp_… in the link or as a Bearer header
Transport
MCP over Streamable HTTP
Servers
Hetzner, Germany

01Quick startContents

Quick start. Online in three steps.

You need a free account and an AI assistant that speaks MCP. MCP (Model Context Protocol) is the open standard AI assistants use to operate tools. With it, your AI does not just write code, it publishes it too.

  1. Sign up for free

    Create an account on app.webbase.dev. The Free plan costs nothing and covers three static websites.

    Start for free

  2. Get your personal link

    Your dashboard shows your personal MCP link. It contains your API key wdp_… and looks like this:

    Treat the link like a password: whoever has it can create and delete projects in your name. In the dashboard you can revoke keys and create new ones.

  3. Give the link to your AI

    Add the link to your AI assistant as an MCP server, as described in the next section. Then just say what you want: “Build me a portfolio page and put it online.”

Authentication

WebBase knows exactly one way to sign in: your API key wdp_…. Either it sits in the link (?token=wdp_…), or your client sends it as a header:

HTTP
Authorization: Bearer wdp_••••••••••••

There is no OAuth sign-in. The address without a key, https://mcp.webbase.dev/mcp, is therefore not enough on its own: always use your personal link or the header. We store your key only as a SHA-256 hash.

02ConnectContents

Connect. One link for every client.

It is the same everywhere: add WebBase as an MCP server, with your personal link as the address. In the examples, wdp_… stands for your key.

Claude Code

One command in the terminal, and Claude Code knows all 30 WebBase tools:

Terminal
claude mcp add --transport http webbase "https://mcp.webbase.dev/mcp?token=wdp_…"

Cursor

Add WebBase to Cursor’s MCP configuration, the file mcp.json:

mcp.json
{
  "mcpServers": {
    "webbase": {
      "url": "https://mcp.webbase.dev/mcp?token=wdp_…"
    }
  }
}

Claude (web and desktop)

Add WebBase as an MCP server or connector and enter your personal link as the server address.

ChatGPT

Add WebBase as a connector, that is, as an MCP server with your personal link as the address.

Codex

Add WebBase as a server in Codex’s MCP configuration, with your personal link as the address.

Other agents

OpenClaw, your own agents, any client that speaks MCP over Streamable HTTP: the address is your personal link. Or https://mcp.webbase.dev/mcp with the header Authorization: Bearer wdp_….

Does it work?

Ask your AI: “Which projects do I have on WebBase?” It will call list_projects. If a list comes back, even an empty one, you are connected.

03First deployContents

The first deploy. One sentence, three calls.

Deploy means publish: build the files and put them online under an address. You write one sentence, your AI calls the tools. This is what it looks like:

  1. You“Build me a portfolio page and put it online.”
  2. AIcreate_project { "name": "portfolio", "type": "static-html" }
  3. AIwrite_files { "projectName": "portfolio", "files": [{ "path": "index.html", "content": "…" }] }
  4. AIdeploy { "projectName": "portfolio" }
  5. Liveportfolio.webbase.devExample
Example. The project is made up, the calls are real.

How long it takes

Static HTML
in a few seconds
Next.js, static export
in 1–3 minutes
Next.js with server-side rendering (SSR)
in 2–5 minutes

That is what deploy itself reports. Your AI checks whether everything is done with get_status.

Keep changing it

“Make the header bigger.” Your AI reads the file with read_file, rewrites it with write_files and calls deploy again. If something goes wrong, it reads the logs with get_logs and fixes it.

The starter files

create_project sets up working starter files: index.html, style.css and script.js for static HTML, a ready configuration for Next.js, plus a Dockerfile for SSR. Your AI builds on top of them.

The register. Thirty tools, eight groups.

Everything your AI can do on WebBase. For each tool: what it is for, a sentence that triggers it, and the parameters exactly as the server validates them. You do not need to memorise anything. Your AI receives the same list when it connects.

IProjects

A project is a website with its own address and its own Git repository.

01create_project

Creates a new project, with a private Git repository and starter files. Your AI picks the project type.

Say Create a project for my portfolio page.

Parameters

name
string · requiredProject name: lowercase letters, digits and dashes, 3–50 characters.
type
"static-html" | "static-nextjs" | "nextjs-ssr" · optional · default "static-html"Project type.
description
string · optionalShort description, up to 200 characters.
subdomain
string · optionalPreferred address, 3–50 characters, e.g. portfolio for portfolio.webbase.dev. Generated if omitted.

Call create_project { "name": "portfolio", "type": "static-html" }

02list_projects

Lists all your projects with status and address, including the ones someone invited you to.

Say Which projects do I actually have?

Parameters

No parameters.

Call list_projects {}

03get_status

Tells you whether the last deploy is done and at which address the project is reachable.

Say Is the site online yet?

Parameters

projectName
string · requiredName of the project.

Call get_status { "projectName": "portfolio" }

04delete_project

Deletes a project for good, with its Git repository and all data. This cannot be undone.

Say Delete yesterday’s test project.

Parameters

projectName
string · requiredName of the project.
confirm
boolean · requiredMust be true, otherwise nothing is deleted.

Call delete_project { "projectName": "test-project", "confirm": true }

05set_subdomain

Gives the project a new address under webbase.dev. The old address stops answering immediately.

Say The site should run at ceramics.webbase.dev.

Parameters

projectName
string · requiredName of the project.
subdomain
string · requiredNew subdomain, 3–50 characters.

Call set_subdomain { "projectName": "portfolio", "subdomain": "ceramics" }

IIFiles

Everything on the site lives as a file in the repository.

06write_files

Writes one or more files to the project, new or changed, straight into the Git repository.

Say Make the header bigger.

Parameters

projectName
string · requiredName of the project.
files
{ path: string, content: string }[] · requiredList of path and content. Paths made of letters, digits, ., _, / and -, without ... Size limits apply per file, per call and per project.

Call write_files { "projectName": "portfolio", "files": [{"path": "index.html", "content": "…"}] }

07read_file

Reads a file from the project, so your AI knows what is already there before it changes anything.

Say What is on the home page right now?

Parameters

projectName
string · requiredName of the project.
path
string · requiredPath of the file, without ...

Call read_file { "projectName": "portfolio", "path": "index.html" }

08list_files

Lists the files and folders of a project.

Say Which pages exist already?

Parameters

projectName
string · requiredName of the project.
path
string · optional · default ""Folder; empty means the project root.

Call list_files { "projectName": "portfolio" }

09delete_files

Removes one or more files from the repository.

Say The old gallery page can go.

Parameters

projectName
string · requiredName of the project.
paths
string[] · requiredPaths of the files, without ...

Call delete_files { "projectName": "portfolio", "paths": ["gallery.html"] }

IIIOperations

Publish, read up, count.

10deploy

Builds the project and puts it online at its address, with a TLS certificate. That is all “deploy” means: publish.

Say Put it online.

Parameters

projectName
string · requiredName of the project.

Call deploy { "projectName": "portfolio" }

11get_logs

Returns build logs and, for Next.js with SSR, the logs of the running container. That is how your AI finds out on its own why something does not work.

Say The build failed, find out why.

Parameters

projectName
string · requiredName of the project.
logType
"build" | "container" · optional · default "build"container only for nextjs-ssr.

Call get_logs { "projectName": "portfolio", "logType": "build" }

12get_analytics

Visitor statistics per project: page views, visitors, countries, devices, browsers, top pages, referrers. Counted on the server from access logs, without cookies.

Say How many people visited the site this week?

Parameters

projectName
string · requiredName of the project.
range
"24h" | "7d" | "30d" | "12m" · optional · default "7d"Time range.
recentRequests
integer · optional · default 0Adds the 0–50 most recent requests, IP addresses truncated.

Call get_analytics { "projectName": "portfolio", "range": "7d" }

IVEnvironment

Settings and secrets, kept apart from the code.

13set_env

Stores environment variables for a Next.js project, such as an API key. Stored AES-256-GCM encrypted, applied on the next deploy.

Say Store the database address as DATABASE_URL.

Parameters

projectName
string · requiredName of the project.
variables
Record<string, string> · requiredName and value. Names match ^[A-Z][A-Z0-9_]*$, at most 50 at a time.

Call set_env { "projectName": "bakery-demo", "variables": {"DATABASE_URL": "…"} }

14get_env

Lists the variables of a project. Values stay hidden unless you explicitly need them.

Say Which variables are set?

Parameters

projectName
string · requiredName of the project.
includeValues
boolean · optional · default falsetrue shows the decrypted values.

Call get_env { "projectName": "bakery-demo" }

VGit

For everyone who prefers to work by hand.

15get_git_credentials

Returns the clone URL of the private Git repository on git.webbase.dev, with an embedded access token.

Say Give me Git access, I will continue locally.

Parameters

projectName
string · requiredName of the project.

Call get_git_credentials { "projectName": "portfolio" }

VIDomains

Your own address, with automatic TLS. On paid plans.

16add_custom_domain

Attaches your own domain to a project and tells you which DNS records to set.

Say The site should run on my own domain.

Parameters

projectName
string · requiredName of the project.
domain
string · requiredYour domain, up to 253 characters.

Call add_custom_domain { "projectName": "portfolio", "domain": "lena-maurer.example" }

17verify_domain

Checks the DNS records: TXT for ownership, CNAME or A for routing. Once both are right, the domain goes live.

Say I have set the DNS records, please check.

Parameters

projectName
string · requiredName of the project.
domain
string · requiredThe domain you added.

Call verify_domain { "projectName": "portfolio", "domain": "lena-maurer.example" }

18list_domains

Shows the subdomain and all custom domains of a project.

Say Under which addresses can people reach the site?

Parameters

projectName
string · requiredName of the project.

Call list_domains { "projectName": "portfolio" }

19remove_custom_domain

Removes a custom domain from the project.

Say Take the old domain off again.

Parameters

projectName
string · requiredName of the project.
domain
string · requiredThe domain to remove.

Call remove_custom_domain { "projectName": "portfolio", "domain": "old-name.example" }

VIIDatabase

Postgres for bookings, orders, lists. From Basic.

20db_create_database

Creates your own Postgres database with its own credentials. From Basic.

Say Create a database for me.

Parameters

name
string · requiredLowercase letters, digits, dashes and underscores, 3–50 characters.

Call db_create_database { "name": "bakery" }

21db_delete_database

Deletes a database for good, only with explicit confirmation.

Say We no longer need the test database.

Parameters

name
string · requiredName of the database.
confirm
boolean · requiredMust be true.

Call db_delete_database { "name": "test", "confirm": true }

22db_list_databases

Lists all your databases.

Say Which databases do I have?

Parameters

No parameters.

Call db_list_databases {}

23db_list_tables

Lists the tables of a database.

Say Which tables exist already?

Parameters

database
string · requiredName of the database.

Call db_list_tables { "database": "bakery" }

24db_describe_table

Shows the columns, types and constraints of a table.

Say How is the orders table structured?

Parameters

database
string · requiredName of the database.
table_name
string · requiredName of the table.

Call db_describe_table { "database": "bakery", "table_name": "orders" }

25db_get_schema

Returns the whole schema at once: every table with its columns.

Say Show me how the database is structured.

Parameters

database
string · requiredName of the database.

Call db_get_schema { "database": "bakery" }

26db_query

Runs SQL: read, insert, update, create tables.

Say Create a table for pre-orders.

Parameters

database
string · requiredName of the database.
query
string · requiredThe SQL statement.

Call db_query { "database": "bakery", "query": "CREATE TABLE orders (…)" }

27db_get_connection_info

Returns the credentials including DATABASE_URL, which your AI adds to the project with set_env.

Say Connect the site to the database.

Parameters

database
string · requiredName of the database.

Call db_get_connection_info { "database": "bakery" }

VIIITeam

Collaboration by invitation. For project owners only.

28invite_member

Invites someone to the project by email. Members may change files, push, deploy and read logs, but not touch variables, domains or deletion.

Say Invite Jonas to the project.

Parameters

projectName
string · requiredName of the project.
email
string (email) · requiredThe person’s email address.
language
"de" | "en" · optional · default "de"Language of the invitation email.

Call invite_member { "projectName": "portfolio", "email": "jonas@example.com", "language": "en" }

29list_members

Shows who works on a project, and the open invitations.

Say Who has access?

Parameters

projectName
string · requiredName of the project.

Call list_members { "projectName": "portfolio" }

30remove_member

Takes someone’s access away again, Git push included, or revokes an open invitation.

Say Jonas is done, remove him.

Parameters

projectName
string · requiredName of the project.
email
string (email) · requiredThe person’s email address.

Call remove_member { "projectName": "portfolio", "email": "jonas@example.com" }

05Project types and limitsContents

Project types and limits. What each plan includes.

Every project has one of three types. Your AI picks it when it calls create_project, depending on what you want to build.

Static HTML

static-html · from Free

Landing pages, portfolios, business-card sites. Plain files served directly. Online in a few seconds.

Next.js, static export

static-nextjs · from Basic

Next.js is a widely used web framework. A static export builds every page ahead of time as finished files: good for multi-page sites, blogs and documentation.

Next.js with server-side rendering (SSR)

nextjs-ssr · from Basic

Pages are rendered fresh on the server for every request, in a container of their own. You need this as soon as there are API routes, forms or a database.

Limits per plan

Limits per plan. Prices per month including VAT.
Limits per planFreeBasicPro
Price€0€5€10
Static HTML350 MB each10200 MB each50500 MB each
Next.js static exportnot included3200 MB each20500 MB each
Next.js SSRnot included1200 MB each5500 MB each
Postgres databasesnot included1100 MB each5500 MB each
Max. build time5 min10 min15 min
Custom domainsnot includedyesyes

The same plan list as on the pricing page. See pricing

06DatabaseContents

Database. Postgres, set up by your AI.

From Basic you get your own Postgres databases with their own credentials. Your AI creates them, builds the tables and connects them to your site. Five steps, all through tools:

  1. db_create_databaseCreates the database.
  2. db_queryCreates tables and reads or writes data, in SQL.
  3. db_get_connection_infoReturns the credentials and a ready DATABASE_URL.
  4. set_envAdds the DATABASE_URL to the project, encrypted.
  5. deployRestarts the project. Your code reads process.env.DATABASE_URL.

Good to know

Only code that runs on the server can connect, which means a Next.js project with SSR. The Free plan has no database; how many the other plans include and how large they can be is in the table above. To delete one, db_delete_database requires an explicit confirm: true.

07Custom domainsContents

Custom domains. Your address, with automatic TLS.

On paid plans your project also runs under your own domain. The certificate for HTTPS (TLS) is issued automatically. You only set two DNS records at your domain provider, your AI does the rest.

  1. add_custom_domain registers the domain with the project and returns a verification value.
  2. You set a TXT record: name _webbase-verify.your-domain.example, value is the verification value. It proves the domain is yours.
  3. verify_domain checks the TXT record.
  4. You set up routing: a CNAME from your domain to name.webbase.dev, or an A record pointing to the IP address the tool gives you.
  5. verify_domain checks the routing and switches the domain on. From then on your project answers at https://your-domain.example.

How many domains per project you get depends on the plan. A domain can only be attached to one project. DNS changes sometimes take a while to show up everywhere; just call verify_domain again later. To detach a domain: remove_custom_domain.

Git. For everyone who would rather push.

Every project has a private Git repository on git.webbase.dev. Everything your AI writes with write_files ends up there. You can clone it and keep working yourself at any time.

  1. get_git_credentials returns the clone URL with an embedded access token. Do not share it.
  2. Clone, change, commit, push, as usual:
    Terminal
    git clone <clone-url>
    cd portfolio
    git add . && git commit -m "New start page"
    git push
  3. A push to main or master starts the deploy automatically.

You can mix both: write files through tools and push through Git. Run git pull before you push so nothing collides.

09Environment variablesContents

Environment variables. Secrets kept apart from the code.

Environment variables are settings your code reads at start-up, such as an API key or the database address. They do not belong in the files, they belong in set_env.

Where
In Next.js projects, static export and SSR. Static HTML projects have no environment variables.
Names
Uppercase letters, digits and underscore, starting with a letter: ^[A-Z][A-Z0-9_]*$. At most 50 variables per call.
Reserved
PORT, NODE_ENV, HOME, PATH and HOSTNAME are set by the platform.
Storage
AES-256-GCM encrypted.
Applied
On the next deploy.
Reading
get_env lists the names. Values only with includeValues: true.

Team. Collaboration by invitation.

You can invite other people to a project. They get an email with a link, in German or English, and accept the invitation themselves. Anyone without an account signs up through the link. Shared projects show up in their list_projects.

Members may
Read and write files, git push, deploy, read logs and visitor statistics.
Members may not
See or set environment variables, manage domains, delete the project.
Owners only
Invite (invite_member), list (list_members) and remove (remove_member). Removing someone also ends their Git access immediately.
11QuestionsContents

Frequently asked. Short answers.

How does my AI sign in to WebBase?

With your personal API key wdp_…: either in the link https://mcp.webbase.dev/mcp?token=wdp_… or as the header Authorization: Bearer wdp_…. There is no OAuth sign-in.

Do I need to know the tools?

No. Your AI receives the list when it connects and chooses by itself. The register on this page is for looking things up, for the curious and for agents.

How long does a deploy take?

Static HTML is online in a few seconds, a Next.js static export in 1–3 minutes, Next.js with server-side rendering in 2–5 minutes.

What happens if a build fails?

Your AI reads the build logs with get_logs, fixes the files and deploys again. For Next.js with server-side rendering there are also the logs of the running container.

Can I use Git instead of the tools?

Yes. get_git_credentials returns the clone URL of the private repository on git.webbase.dev. A push to main or master starts the deploy automatically.

What is the difference between static export and SSR?

A static export builds every page ahead of time as finished files. With SSR (server-side rendering) your project runs in a container of its own and renders pages on every request. Only then do API routes and a database work.

Ready? Create an account, get your link, tell your AI one sentence.