Skip to main content
Glama

Create service

service_create
Destructive

Create a new empty Lizard service or deploy a GitHub or Lizard Git repository as a service; omit repoUrl to configure later, or provide it to deploy immediately.

Instructions

Use this when the user wants to create a new empty Lizard service, or deploy a repository as a new service: GitHub, or Lizard Git (lizard:owner/name, from repo_list). Omit repoUrl for an empty service you configure later; provide repoUrl to deploy that repo immediately; later pushes or commits to its branch deploy again. Calling this again creates another service, even with the same name — it does not update an existing one. A *.onlizard.com domain is assigned automatically, but not until the build finishes and the service boots — this response's domain field will be null right after creation, that is expected, not an error. Do not invent, guess, or predict a hostname to fill that gap. Tell the user the deploy is in progress and the domain isn't assigned yet; poll service_show or deploy_events and report the real domain value once it's non-null.

Input Schema

NameRequiredDescriptionDefault
nameYesService name
regionYesDeployment region code — call region_list first if unsure of valid values, do not guess
envVarsNo
projectYes
repoUrlNohttps URL, owner/name (GitHub) or lizard:owner/name (Lizard Git) — when provided, this becomes a deploy of that repo
containerPortNo
skipInitialDeployNoWith repoUrl: attach the repo but skip the initial build

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.1.3
    • changedInput schema / properties / repoUrl / description
      Previous value: -"GitHub repo URL — when provided, this becomes a deploy of that repo"New value: +"https URL, owner/name (GitHub) or lizard:owner/name (Lizard Git) — when provided, this becomes a deploy of that repo"
  2. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations by disclosing non-idempotency in concrete terms ('calling this again creates another service, even with the same name'), the deferred-domain behavior, and an explicit anti-hallucination instruction about the null `domain` field. The 'later pushes or commits deploy again' note explains ongoing side effects that readOnlyHint/destructiveHint cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the selection condition and every sentence carries operational weight, but the domain-null guidance is spread across three sentences ('that is expected', 'do not invent', 'tell the user...poll...') that restate the same instruction with some redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the return-value burden and does it: it explains the `domain` field's null-on-creation state, why it is null, and how to obtain the real value. For a mutation tool with nested envVars and a deferred build, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 57% schema coverage the description should compensate, and it does for repoUrl (the omit/provide fork and the deploy-on-push behavior are genuinely beyond the schema). But name, region, envVars, and containerPort get no treatment in the description, leaving a meaningful share of parameters carried by the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource and immediately splits the two operating modes (empty service vs. repo deploy) with concrete repo formats. It also explicitly carves out the boundary against the update path by saying a repeat call creates another service, so an agent can distinguish this from service_set or service_rename without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('use this when the user wants to create'), an explicit branch condition (omit repoUrl vs. provide repoUrl, with the consequence of each), and names the follow-up tools to use instead of guessing (service_show, deploy_events). The 'does not update an existing one' clause routes the update case away from this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.