Layero
Deploy and operate sites on Layero — hosting with build servers in Russia: domains, env, Data API.
Connect it
Settings → Connectors → Add custom connector
URL: https://mcp.layero.ru/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://mcp.layero.ru/mcp{
"mcpServers": {
"layero": {
"url": "https://mcp.layero.ru/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}claude mcp add --transport http layero https://mcp.layero.ru/mcp --header "Authorization: <value>"{
"servers": {
"layero": {
"type": "http",
"url": "https://mcp.layero.ru/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}36 tools, verified live
search_docsread-onlySearch docs.layero.ru â no token needed. Use it before guessing how the platform works: build settings and `layero.json`, environments and preview URLs, custom domains, env vars, runtime apps, Data API, CLI flags and JSON events. Returns the page title, a direct URL (with anchor) and a snippet; open the URL with your own fetch tool when the snippet is not enough. `score` is
whoamiread-onlyWho is connected to Layero and how many projects they have. Call this first when you are unsure the token is configured: a clear error here is cheaper than one halfway through a deploy.
my_projectsread-onlyThe user's sites on Layero. Thirty most recent by default. The full list is rarely needed, while flooding half your context with it is easy: an active user has dozens of projects. `url` is the canonical (production) address. `repo`, `branch` and `root_directory` say where the project is built from: all three are null for a project without a repository (CLI or `publish_sit
list_sourcesread-onlyWhich git providers Layero supports and which of them the organization has connected (GitHub App installations and provider tokens). Call before `import_repo` when you are not sure the provider is connected. Connecting a provider token is done by the person in the dashboard â never ask them to paste the token into the chat.
import_repoCreate a Layero project from a repository â path (a) without the dashboard. From then on a push to the branch is a preview, a push to the production branch is production. After the link the tool finishes the setup wizard itself and starts the first build; `setup` in the result says whether that happened. Detected values are NOT written into the project settings: the builder
list_environmentsread-onlyThe project's environments â one per branch (or the single `cli` one), each with its address and the state of its latest build. Answers "where is the preview of my branch" and "what is on production now". `url` is the environment's own address (its host ends with `-<branch>`); the production branch is ALSO served at the project's canonical address from `site_status` / `my_pr
project_createCreate an empty project with no repository â an address reserved for a later `publish_site` or `npx layero@latest deploy`. For a project FROM a repository use `import_repo` instead. Nothing is built or served yet: the address answers only after the first publish.
site_statusread-onlyHow a site is doing: where it is built from, whether the address is answering, and how the latest build ended. One call instead of three (project, deploys, live check of the address). `source` / `repo` / `branch` / `root_directory` say where the project is built from â a connected repository means deploys go through git. `serving` is true when the SITE ITSELF answered â a
check_rulesread-onlyCheck the published site against Layero's anti-phishing rules (https://layero.ru/rules): collecting passwords, card details or wallet recovery phrases of another service, fake security warnings, vote and prize lures that send visitors to another domain. Checks what a visitor sees at the project address â the home page and its own scripts. `violations` is empty when nothing m
env_varscan modifyProject environment variables: list names, set them, remove them. VALUES ARE NEVER READ BACK â not by you, not by the platform in its response. Only names and lengths are returned. This is a deliberate rule rather than an implementation limit: anything that reaches your answer settles into the conversation history, and a secret that lands there cannot be taken back. If the u
project_settingscan modifyBuild settings of a project: read them, or change them without the dashboard â the way out when detection guessed wrong (wrong folder, wrong type, wrong command). `get` returns `settings` (what is saved on the project; null â not set, the platform decides), `resolved` (what the next build will actually use, per field: `value`, `source`, `policy`) and `last_build` (what the
connect_analyticsConnect Yandex Metrika to a site. IMPORTANT: authorisation happens IN A BROWSER, and neither you nor the platform can do that step for the user. The tool returns a link â show it and ask them to open it and grant access. Do not poll in a loop: the person may walk away for an hour. Check later through this same tool without the `branch` argument, or through `site_analytics`.
site_analyticsread-onlySite traffic: totals, direction and top sources. The time series is collapsed into a direction and breakdowns are cut to five: ninety chart points are useless in your context, and the conclusion is yours to draw anyway.
check_performanceread-onlyMeasure a site's speed and say whether it got worse after a deploy. The verdict comes FROM THE SCORE, not from timings: repeated runs of the same deploy vary by at most one point, while LCP and TTFB on identical code swing by 37-40%. A difference of 3 points or more is meaningful; anything smaller is measurement noise, and calling that a regression is inventing a problem.
connect_domainConnect a custom domain to a site. IMPORTANT: between this call and a working domain stands A PERSON. You get DNS records â show them to the user and explain they go in at their domain registrar. Do not wait for readiness: DNS propagates in minutes to an hour, the platform re-checks on its own, and you check later via `check_domain`. Spinning here burns time and context for
check_domainread-onlyCheck whether a connected domain has started working. Runs the DNS check immediately instead of waiting for the background re-check. If the records have not propagated yet, that is normal â say so and suggest coming back later.
list_domainsread-onlyThe project's own domains and their state.
read_siteread-onlyWhat is really published: headings, copy, forms, meta, links. Call it BEFORE changing anything on a live site and AFTER a publish, to make sure the expected version arrived. Without it you edit blind: what lies on the user's disk and what visitors are served are different things, and they drift apart silently. The result is a STRUCTURE, not raw HTML: a page with inline styles
site_screenshotread-onlyA screenshot of the latest built version of the site â how it looks. Complements `read_site` (what is on the page) and `site_issues` (what is wrong with it) with the third question: how it looks. Useful before and after a visual change. â ï¸ The screenshot is taken at BUILD time, not now. Right after a publish a fresh one does not appear instantly â do not present the p
site_issuesread-onlyConcrete problems of a page â each with its location and what to do. This is NOT a score. The score comes from `check_performance`, and a score gives nothing to fix: "73 out of 100" does not say what to change. Here is only what has a location and a clear action: blocked indexing, resources from foreign hosts, raster images without webp, missing meta and alt, forms with no r
refactor_siteread-onlyOne named markup transformation â with a predictable result. The tool PUBLISHES NOTHING. It returns the changed HTML; showing it to the person, getting consent and calling `publish_site` is your job. Never rewrite someone's site silently. Transformations are idempotent: a repeated call changes nothing and honestly answers `changed=false`. An empty list of changes is not an
check_copyread-onlyMechanical errors of Russian typography â with the exact place and a replacement. This is CODE, not a model's judgement: the same text gives the same list of findings. It catches what the eye misses and the reader feels: non-breaking spaces, dashes, straight quotes, a dot instead of a comma in decimals, spaces around punctuation, double spaces. Every finding carries a r
list_deploysread-onlyThe project's latest builds: how each one ended, how long it took and which one is live now. Use it to pick a target for `rollback` or `diagnose_deploy`. For "what is up with the site right now" `site_status` is enough and cheaper. Per build: `branch`, `source` (`git` â built on push, `cli` â an uploaded folder), short `commit`, `created_at` / `started_at` / `finished_at`
rollbackcan modifyPut the previous working build back on the live address. CHANGES WHAT VISITORS SEE â ask the person before calling unless they asked for a rollback explicitly. The action is reversible (you can roll forward again), but the time visitors spent on the wrong version cannot be taken back. â ï¸ For apps (`ssr_next`, `node_web`, `python_web`, `streamlit`, `gradio`, `flask`)
retry_deployRun a build again â a failed one as is, or the latest commit afresh. Default (`redeploy=false`): queue the SAME build again. Allowed only for builds in the `failed` or `cancelled` state. On a running build (`queued`, `building`) the platform refuses â that is not an error but protection against a second parallel build; on a `ready` build it refuses too â use `redeploy=tr
cancel_deployStop a build that is still running. The live address does not change â the previous version stays on it.
deploy_logsread-onlyRaw log lines â for when the `diagnose_deploy` analysis was not enough. Start with `diagnose_deploy`: it has already pulled out the cause and the neighbourhood of the fatal line. Come here when you need to look with your own eyes â the cause is vague, or you are interested in how the app behaves rather than in a failure. You get the TAIL. `truncated` says earlier lines we
diagnose_deployread-onlyWhy a deploy failed â with the cause parsed out, not a raw log. Without `deploy` the latest build is used; that is what reflects the current state. To examine a specific older one, pass its id. The response is not a log tail but the neighbourhood of the fatal line: the platform has already picked out what matters. Read `verdict` and the summary, fix the code, deploy again â
publish_sitePublish a static site to Layero â from here, with no terminal. Takes ANY ready static bundle, so it is the answer to "deploy my site" when the project has no connected repository. Requirements â `index.html` at the root, at most 200 files, 8 MB in total, 2 MB per file. Binary files (images, fonts) must come with `encoding="base64"`; sent as text they are silently corrupted
publish_landingDEPRECATED â use `publish_site`. Same behaviour, same arguments. Kept for one release (removed in the next) so that configs and prompts written before 17.09.2026 keep working; new instructions must call `publish_site`.
data_api_statusread-onlyWhether the database has the Data API enabled, its address, keys and the sites allowed to call it. Keys are shown as prefixes only: the platform never returns values and does not store secret ones. The API cannot be enabled with a tool: enabling gives the database a public address, and that is the person's decision in the dashboard.
data_api_methodsread-onlyThe database's REST and RPC methods with an access level per HTTP method. The level says who may call the method: closed, visitor (any site visitor), user (signed-in people), server (the server only). It is read from the role grants in force in the database itself â exactly as the gateway sees them.
data_api_grantcan modifyWho may call a method of a table or a function: shows the SQL and applies it after consent. OPENS DATA TO THE INTERNET. Call it without `apply` first: the platform returns the commands and warnings (for example "row-level security is off â a visitor will get every row"). Show them to the person. With apply=true a client with forms asks the person itself; without forms get
data_api_keyscan modifyThe database's Data API keys: list, issue, revoke. The list never contains key values. Issuing and revoking need the person's consent: a client with forms asks by itself; without forms ask in the chat and pass confirmed=true. The value of an issued key is returned once: the platform does not store secret keys. Hand it to the person for their server and do not repeat it afterwa
data_api_originscan modifySites allowed to call the database from a browser: list, add, remove. Addresses of the connected projects and their branches are allowed automatically â do not add them. An added site opens no data by itself: what can be read and written is decided by access levels. Adding and removing need the person's consent; a removed site is refused on every request. Needs a token with
data_api_probeA real request to a method through the gateway â as a visitor, a user or the server. The platform supplies the key and the token. Writes (POST, PATCH, DELETE, a function call) are rolled back: rows in the database do not change, but the rollback does not undo sequence numbers, calls from the database to the outside, session locks or the daily call quota. The answer is re
Alternatives in Developer Tools
Compare →RNRelease Notes IndexA
Release notes and changelogs from across the web, indexed for agents. Also via CLI and REST API.
CDclassifier.devA
Sort up to 1,000 texts into your own labels with a calibrated confidence per answer. No API key.
HOHonchoA
Memory that reasons: continual learning for stateful agents. Better context, fewer tokens.
MOMobilerunA
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
DMDocs MCPA
Remote MCP server for Tandem docs, install guides, SDKs, workflows, and agent setup help.
SHShipSwiftA
40+ production-ready SwiftUI recipes for building full-stack iOS apps via MCP.