WebBase

Web hosting your AI assistant operates by itself over MCP: it creates the project, writes the files, deploys and reports the live address (<name>.webbase.dev or your own domain). Static HTML, Next.js static and SSR, Postgres, custom domains, env vars, visitor stats, team members. 30 tools, API-key auth, servers in Germany. Free plan available.

Hosted MCP Server

npx add-mcp 'https://mcp.webbase.dev/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

01Quick start Contents

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.
  2. Get your personal link

    Your dashboard shows your personal MCP link. It contains your API key wdp_… and looks like this: https://mcp.webbase.dev/mcp?token=wdp_•••••••••••• 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.

02Connect Contents

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 deploy Contents

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. AI create_project { "name": "portfolio", "type": "static-html" }
  3. AI write_files { "projectName": "portfolio", "files": [{ "path": "index.html", "content": "…" }] }
  4. AI deploy { "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.

04Tools Contents

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 0 Adds 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 false true 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 limits Contents

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 planFreeBasicPro
Price€0€5€10
Static HTML3 50 MB each10 200 MB each50 500 MB each
Next.js static exportnot included3 200 MB each20 500 MB each
Next.js SSRnot included1 200 MB each5 500 MB each
Postgres databasesnot included1 100 MB each5 500 MB each
Max. build time5 min10 min15 min
Custom domainsnot includedyesyes

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

06Database Contents

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_database Creates the database.
  2. db_query Creates tables and reads or writes data, in SQL.
  3. db_get_connection_info Returns the credentials and a ready DATABASE_URL.
  4. set_env Adds the DATABASE_URL to the project, encrypted.
  5. deploy Restarts 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 domains Contents

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.

08Git Contents

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 variables Contents

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.

10Team Contents

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.