{"serverId":"mcp-registry/ru.layero/layero","tools":[{"name":"cancel_deploy","fixed":{"name":"cancel_deploy","description":"Stop a build that is still running.\n\n    The live address does not change — the previous version stays on it.\n    ","inputSchema":{"type":"object","title":"cancel_deployArguments","required":["project"],"properties":{"deploy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deploy","default":null,"description":"Build id (a UUID from `list_deploys`). Without it the latest build is used."},"project":{"type":"string","title":"Project","description":"The project: its slug (`my-site`) or id, as listed by `my_projects`. The site address works too (`https://clear-garden-vypm.layero.app` or just `clear-garden-vypm`) — note that the address host is NOT always the slug."}}},"annotations":{"openWorldHint":true,"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Отменить идущую сборку"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"import_repo","fixed":{"name":"import_repo","description":"Create a Layero project from a repository — path (a) without the\n    dashboard. From then on a push to the branch is a preview, a push to the\n    production branch is production.\n\n    After the link the tool finishes the setup wizard itself and starts the\n    first build; `setup` in the result says whether that happened. Detected\n    values are NOT written into the project settings: the builder detects\n    the framework, build command and output folder from the repository on\n    every build, so ","inputSchema":{"type":"object","title":"import_repoArguments","required":["provider","repo"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":null,"description":"Project name; the slug and the address are derived from it. Defaults to the repository name — for a second app from the same monorepo give a distinct name."},"repo":{"type":"string","title":"Repo","description":"Repository path at the provider: `owner/repo`; GitLab paths may be nested (`group/sub/project`). The form `gitverse:owner/repo` is accepted too."},"branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch","default":null,"description":"Production branch. Defaults to the repository's default branch."},"deploy":{"type":"boolean","title":"Deploy","default":true,"description":"Finish the setup wizard and start the first build right away. The framework, build command and output folder are not pinned: the builder detects them from the repository on every build (`layero.json` overrides). `false` leaves the project in the setup wizard: no builds until the person completes the setup in the dashboard."},"provider":{"type":"string","title":"Provider","description":"Provider: github, gitverse, gitlab, gitflic or sourcecraft."},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization","default":null,"description":"Organization slug. Without it — the account's only organization, or the personal one; if there are several and none is personal, the tool lists the slugs."},"root_directory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Directory","default":null,"description":"Monorepo: the app folder inside the repository, relative to its root — `apps/web`, `frontend`. Omit it for an app in the repository root (if the root has no app and exactly one subfolder does, that folder is picked automatically). A repository already linked to a project can be imported again ONLY with a `root_directory` that no linked project uses."}}},"annotations":{"openWorldHint":true,"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Проект из репозитория"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":707,"tokensAfter":707},{"name":"publish_landing","fixed":{"name":"publish_landing","description":"DEPRECATED — use `publish_site`. Same behaviour, same arguments.\n\n    Kept for one release (removed in the next) so that configs and prompts\n    written before 17.09.2026 keep working; new instructions must call\n    `publish_site`.\n    ","inputSchema":{"type":"object","$defs":{"FilePayload":{"type":"object","title":"FilePayload","required":["path","content"],"properties":{"path":{"type":"string","title":"Path"},"content":{"type":"string","title":"Content"},"encoding":{"enum":["text","base64"],"type":"string","title":"Encoding","default":"text","description":"Use `base64` for binary files — images, fonts, favicons. Text files (html/css/js/svg) stay `text`. A binary sent as text is silently corrupted."}}}},"title":"publish_landingArguments","required":["files","project_name"],"properties":{"files":{"type":"array","items":{"$ref":"#/$defs/FilePayload"},"title":"Files","description":"Same as in `publish_site`: the site files with `index.html` in the root."},"project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project","default":null,"description":"Same as in `publish_site`: id of an existing project."},"project_name":{"type":"string","title":"Project Name","description":"Same as in `publish_site`: the project slug."}}},"annotations":{"openWorldHint":true,"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Опубликовать сайт (старое имя)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":359,"tokensAfter":359},{"name":"publish_site","fixed":{"name":"publish_site","description":"Publish a static site to Layero — from here, with no terminal.\n\n    Takes ANY ready static bundle, so it is the answer to \"deploy my site\" when\n    the project has no connected repository. Requirements — `index.html` at\n    the root, at most 200 files, 8 MB in total, 2 MB per file. Binary files\n    (images, fonts) must come with `encoding=\"base64\"`; sent as text they are\n    silently corrupted.\n\n    Do NOT use it for a project with a connected repository (`site_status`\n    shows one): the next g","inputSchema":{"type":"object","$defs":{"FilePayload":{"type":"object","title":"FilePayload","required":["path","content"],"properties":{"path":{"type":"string","title":"Path"},"content":{"type":"string","title":"Content"},"encoding":{"enum":["text","base64"],"type":"string","title":"Encoding","default":"text","description":"Use `base64` for binary files — images, fonts, favicons. Text files (html/css/js/svg) stay `text`. A binary sent as text is silently corrupted."}}}},"title":"publish_siteArguments","required":["files","project_name"],"properties":{"files":{"type":"array","items":{"$ref":"#/$defs/FilePayload"},"title":"Files","description":"The whole site, with `index.html` in the root. Paths are relative (`assets/app.css`). Binary files go with `encoding=\"base64\"`. At most 200 files, 8 MB in total, 2 MB per file."},"project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project","default":null,"description":"id of an existing project — to publish the same site again. Without it the platform looks the project up by name or creates a new one."},"project_name":{"type":"string","title":"Project Name","description":"Project slug — lowercase Latin letters, digits and hyphens. It becomes part of the site address. If the project already exists, pass `project` as well, otherwise the platform creates a new one."}}},"annotations":{"openWorldHint":true,"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Опубликовать сайт"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":527,"tokensAfter":527},{"name":"retry_deploy","fixed":{"name":"retry_deploy","description":"Run a build again — a failed one as is, or the latest commit afresh.\n\n    Default (`redeploy=false`): queue the SAME build again. Allowed only for\n    builds in the `failed` or `cancelled` state. On a running build\n    (`queued`, `building`) the platform refuses — that is not an error but\n    protection against a second parallel build; on a `ready` build it\n    refuses too — use `redeploy=true`.\n\n    `redeploy=true`: start a NEW build of the branch's latest commit without\n    a push. This is how","inputSchema":{"type":"object","title":"retry_deployArguments","required":["project"],"properties":{"branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch","default":null,"description":"Only with `redeploy=true`: the branch to build. Defaults to the production branch."},"deploy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deploy","default":null,"description":"Build id (a UUID from `list_deploys`). Without it the latest build is used. Ignored with `redeploy=true`."},"project":{"type":"string","title":"Project","description":"The project: its slug (`my-site`) or id, as listed by `my_projects`. The site address works too (`https://clear-garden-vypm.layero.app` or just `clear-garden-vypm`) — note that the address host is NOT always the slug."},"redeploy":{"type":"boolean","title":"Redeploy","default":false,"description":"`true` — build the latest commit of the branch again as a NEW build, whatever state the previous one is in (also `ready`). Same as the «Пересобрать» button in the dashboard. Use it after changing project settings or environment variables, when there is nothing to push. Repository projects only."}}},"annotations":{"openWorldHint":true,"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Перезапустить сборку"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":474,"tokensAfter":474}],"toolsChanged":5,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}