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.
-
Sign up for free
Create an account on app.webbase.dev. The Free plan costs nothing and covers three static websites. -
Get your personal link
Your dashboard shows your personal MCP link. It contains your API keywdp_…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. -
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:
- You“Build me a portfolio page and put it online.”
- AI
create_project { "name": "portfolio", "type": "static-html" } - AI
write_files { "projectName": "portfolio", "files": [{ "path": "index.html", "content": "…" }] } - AI
deploy { "projectName": "portfolio" } - 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 plan | Free | Basic | Pro |
|---|---|---|---|
| Price | €0 | €5 | €10 |
| Static HTML | 3 50 MB each | 10 200 MB each | 50 500 MB each |
| Next.js static export | not included | 3 200 MB each | 20 500 MB each |
| Next.js SSR | not included | 1 200 MB each | 5 500 MB each |
| Postgres databases | not included | 1 100 MB each | 5 500 MB each |
| Max. build time | 5 min | 10 min | 15 min |
| Custom domains | not included | yes | yes |
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:
db_create_databaseCreates the database.db_queryCreates tables and reads or writes data, in SQL.db_get_connection_infoReturns the credentials and a readyDATABASE_URL.set_envAdds theDATABASE_URLto the project, encrypted.deployRestarts the project. Your code readsprocess.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.
add_custom_domainregisters the domain with the project and returns a verification value.- You set a TXT record: name
_webbase-verify.your-domain.example, value is the verification value. It proves the domain is yours. verify_domainchecks the TXT record.- 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. verify_domainchecks the routing and switches the domain on. From then on your project answers athttps://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.
get_git_credentialsreturns the clone URL with an embedded access token. Do not share it.- Clone, change, commit, push, as usual:
Terminal
git clone <clone-url> cd portfolio git add . && git commit -m "New start page" git push - A push to
mainormasterstarts 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.