n nesly

For AI agents

The platform is built to be operated by an agent: MCP tools, a strict --json contract, and a diagnose loop that names the fix.

Claude Code plugin

One install brings the MCP tools and a skill that teaches Claude the deploy workflow — the contract, build detection, and the diagnose-first loop for failures.

/plugin marketplace add neslyhq/claude-plugin
/plugin install nesly@nesly

MCP server

The CLI binary is also the MCP server — no second install. It uses the credentials the CLI is signed in with, or NESLY_TOKEN for headless use.

# any MCP client, e.g. Claude Code without the plugin
claude mcp add nesly -- nesly mcp

# headless (CI, a server): no browser session needed
nesly token create agent   # shown once
NESLY_TOKEN=nesly_pat_... nesly mcp
deploy_project Pack a local directory, upload, build, wait, return the live URL.
diagnose_deployment Why a deployment failed: evidence lines, missing env vars, a fix per finding. Call first after a failure.
get_logs / get_deployment Raw logs and deployment detail when the diagnosis is not enough.
set_env / list_addons / add_addon Environment and managed backing services (postgres and mssql; both inject DATABASE_URL, mssql also ConnectionStrings__Default).
rollback Repoint traffic at a previous deployment, instantly.
add_domain / verify_domain Custom domains: returns the DNS records to create, then verifies them.
connect_repository / redeploy Push-to-deploy via the git integration, or rebuild without an upload.
get_usage Requests, egress and build time over the last 30 days.

The --json contract

Every CLI command accepts --json and then prints exactly one JSON object on stdout; progress and logs go to stderr. Exit codes are stable: 0 ok, 1 error, 2 usage, 3 auth, 4 not found, 5 conflict. An agent that shells out instead of using MCP gets the same guarantees.

The diagnose loop

When a deploy fails, do not start by reading raw logs. nesly diagnose (or the diagnose_deployment tool) reads them for you and reports: the probable cause, the exact log lines as evidence, env vars the app reads but the project does not define, and the command that fixes each finding. Failure reasons across the platform are written to be actionable by the agent fixing the code — never "check your configuration".

$ nesly diagnose --project shop --json
{
  "status": "FAILED",
  "missing_env": ["STRIPE_KEY"],
  "findings": [{
    "cause": "the application reads the environment variable STRIPE_KEY, but the project does not define it",
    "evidence": ["TypeError: ... (process.env.STRIPE_KEY)"],
    "fix": "nesly env set STRIPE_KEY=<value> --project shop, then redeploy"
  }]
}

llms.txt

nesly.net/llms.txt is the one-page briefing: the deploy quickstart, the command list and the application contract (listen on $PORT, bind 0.0.0.0). AI assistants fetching the home page receive it directly.