Requirements
- Node.js 22 or newer.
- A Lannzo account belonging to at least one organization.
- An MCP-capable client: the ChatGPT desktop app, the Codex extension or CLI, Claude Desktop, or any other client that speaks MCP over STDIO.
Sign in once
npx lannzo loginThe MCP server has no login of its own. It reuses the credential the Lannzo CLI writes to ~/.config/lannzo/config.json, saved with owner-only permissions and refused if those permissions are ever loosened.
Your browser opens, you approve the device code, and the token is stored. In automated environments you can skip the file entirely and set LANNZO_TOKEN, which takes precedence over it.
Connect a client
Pick the client you use and register the MCP server.
ChatGPT desktop app or Codex extension
- Open Settings.
- Go to MCP servers.
- Click Add server.
- Use these values:
| Field | Value |
|---|---|
| Name | lannzo |
| Type | STDIO |
| Command | npx |
| Arguments | -y @lannzo/mcp |
- Save, and restart the client if it was already open.
Codex CLI
If you already have the codex command installed:
codex mcp add lannzo -- npx -y @lannzo/mcp
codex mcp listIf you do not have it installed, run it through npx instead:
npx -y @openai/codex@latest mcp add lannzo -- npx -y @lannzo/mcp
npx -y @openai/codex@latest mcp listBoth routes register the same server. codex mcp list should show lannzo once it is connected.
How to use it
Once the server is connected, you can ask your assistant things like:
- List my Lannzo organizations and their projects.
- Show the latest deployments for
web-panel. - Show me the error logs for deployment
dpl_.... - Deploy this directory to preview.
- Set
DATABASE_URLin production as a secret. - Add the domain
app.example.comand show me the DNS records.
The assistant resolves the organization, project and deployment identifiers itself by listing them first, so you can refer to a project by name.
Reading is free, writing is not
Tools that only read run as soon as the assistant asks for them. Tools that change something require confirm: true in the call, and the reference below marks every one of them.
Two tools gate conditionally: set_environment_variable asks for confirmation only when the value is secret, and batch_environment_variables only when it replaces the existing set or writes a secret. Without it the call returns CONFIRMATION_REQUIRED and nothing changes.
Secret values are never returned. A secret variable is reported as configured, never with its contents, so a transcript or a model's context can never end up holding one.
Deploying from the assistant
deploy_upload deploys the authorized local directory by running the fixed npx lannzo deploy command. It only ever reads inside the workspace the server was authorized for, which defaults to the directory the server started in and can be set explicitly:
LANNZO_MCP_WORKSPACE=/path/to/your/projectnpx lannzo deploy --organization <id> --project <id> --json
npx lannzo deploy --organization <id> --project <id> --prod --jsonThe MCP passes the explicit organization and project, adds --prod for production, and waits for the CLI's JSON result. The CLI uploads only missing files and applies .gitignore, .lannzoignore and its mandatory exclusions, including .env files, .git, dependencies, build output and .DS_Store. The MCP rejects symbolic links and paths outside the authorized workspace before the command starts; it never provides arbitrary command execution.
Tool reference
Grouped by what they touch. The last column says whether the tool needs a confirmation before it will run.
Platform and organizations
| Tool | What it does | Confirmation |
|---|---|---|
get_platform_status | Public platform status. | Not required |
list_organizations | Organizations authorized by your credential. | Not required |
Projects
| Tool | What it does | Confirmation |
|---|---|---|
list_projects | Projects in an organization. | Not required |
get_project | Detail for one project. | Not required |
create_project | Create a project. The slug is generated from the name if omitted. | Not required |
update_project | Change the project's root directory, or reset it to the source root. | Not required |
Deployments and logs
| Tool | What it does | Confirmation |
|---|---|---|
list_environments | Production and preview environments for a project. | Not required |
list_deployments | Deployments for a project, newest first. | Not required |
get_deployment | Detail for one deployment. | Not required |
get_deployment_logs | Deployment logs, up to 200 entries, filterable by source and level. | Not required |
deploy_repository | Deploy the head commit of the connected repository to production. | Required |
create_github_deployment | Deploy an already synchronized GitHub commit to production. | Required |
deploy_upload | Deploy the authorized local workspace through `npx lannzo deploy`. | Required |
retry_deployment | Retry a deployment, which creates a new one. | Required |
cancel_deployment | Cancel a deployment that is still running. | Required |
Environment variables
| Tool | What it does | Confirmation |
|---|---|---|
list_environment_variables | List an environment's variables. Secret values are never returned. | Not required |
set_environment_variable | Create or replace one variable, for build, runtime, or both. | For secret values |
delete_environment_variable | Delete a variable. | Required |
batch_environment_variables | Create or update up to 250 variables atomically. | To replace or write secrets |
copy_environment_variables | Copy variables from one environment to another. | Required |
GitHub repositories
| Tool | What it does | Confirmation |
|---|---|---|
list_repositories | GitHub repositories the organization's installations can reach. | Not required |
list_repository_branches | Branches of a repository, with the head commit of each one. | Not required |
get_repository_connection | The repository currently connected to a project, if any. | Not required |
connect_repository | Connect a repository and branch, optionally deploying on each push. | Required |
update_repository_connection | Enable or disable auto-deploy without replacing the connection. | To enable auto-deploy |
disconnect_repository | Disconnect the repository. Deployment history is preserved. | Required |
Runtime
| Tool | What it does | Confirmation |
|---|---|---|
start_runtime | Start the runtime of an environment whose release is stopped. | Required |
restart_runtime | Restart the runtime, keeping the same artifact. | Required |
stop_runtime | Stop the runtime and withdraw its traffic. | Required |
Domains
| Tool | What it does | Confirmation |
|---|---|---|
list_domains | Platform and custom domains for a project. | Not required |
add_domain | Add a custom domain and return the DNS records to create. | Not required |
verify_domain | Check DNS ownership and queue the certificate. | Not required |
check_domain_routing | Check that a verified domain's DNS points to Lannzo. | Not required |
remove_domain | Remove a custom domain. The platform domain cannot be removed. | Required |
Log queries return at most 200 entries. Batch variable writes are capped at 250 variables and applied atomically: either all of them land or none do.
Credentials and scope
The server runs locally and talks to api.lannzo.com over HTTPS. Your credential never leaves your machine, and it is never passed to the model — the assistant sees tool results, not the token.
The scope of what the assistant can do is the scope of the credential you signed in with. It can never exceed your own permissions, and every call is attributed to you in the organization's audit record.
For local development against another environment, three variables change where the server points and which credential it uses:
LANNZO_API_URL=https://api.example.test
LANNZO_CONFIG_PATH=/path/to/config.json
LANNZO_TOKEN=lnz_...Common issues
“Not authenticated” or “Authentication is required”
Sign in again, then restart the MCP client so it picks up the credential:
npx lannzo login“codex” isn't recognized as a command
Use the npx form above instead of installing the client, or install it globally first.
The server doesn't show up or won't start
Check that Node.js 22 or newer is on the PATH the client uses, and that the command is npx with -y @lannzo/mcp as its arguments. Restart the client after any change.
“Path is outside the authorized MCP workspace”
deploy_upload refuses any directory outside the workspace the server was started in. Set LANNZO_MCP_WORKSPACE to the project you want to deploy and restart the client.
Updates
npx -y @lannzo/mcp resolves the latest version on every start. Pin the arguments to a specific version if you would rather control when it changes:
-y @lannzo/mcp@0.4.0