# Layero (remote · mcp.layero.ru)

Build a landing page from your IDE chat, publish it, then manage domains and analytics.

- Trust score: 58/100 (low)
- Change this week: +6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.layero.ru`: 58/100 (this document), [markdown](https://verifymcp.io/servers/ru-layero-layero/mcp.md), [page](https://verifymcp.io/servers/ru-layero-layero/mcp)

## Channel facts

- Endpoint: `https://mcp.layero.ru/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.29.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 16 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 61/100
  - 60% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2252 tokens (~125/item across 18 items; 16 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability check failed: schema churn in the 8 days we've observed: 1 tool removals, 0 breaking changes, 0 auth/transport breaks, 12 additions.
- **Tool Coverage**: 73/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 4% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### Claude

```bash
claude mcp add --transport http ru-layero-layero https://mcp.layero.ru/mcp
```

### Codex

```toml
[mcp_servers.ru-layero-layero]
url = "https://mcp.layero.ru/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ru-layero-layero": {
      "type": "remote",
      "url": "https://mcp.layero.ru/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ru-layero-layero --url https://mcp.layero.ru/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  ru-layero-layero:
    url: "https://mcp.layero.ru/mcp"
```

### Other

```json
{
  "mcpServers": {
    "ru-layero-layero": {
      "type": "http",
      "url": "https://mcp.layero.ru/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 58, +2)

- [functional regression] Schema quality: pass → fail
- [functional] Schema quality: fair → good

### 2026-07-31 (score 56, +3)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 53, +1)

- [security] Tool “diagnose_deploy” rewrote its description, which is the text the model reads
- [security] Tool “list_domains” rewrote its description, which is the text the model reads
- [security] Tool “my_projects” rewrote its description, which is the text the model reads
- [security] Tool “publish_landing” rewrote its description, which is the text the model reads
- [security] Tool “site_analytics” rewrote its description, which is the text the model reads
- [security] Tool “site_status” rewrote its description, which is the text the model reads
- [security] Tool “whoami” rewrote its description, which is the text the model reads
- [security] Tool “check_domain” rewrote its description, which is the text the model reads
- [security] Tool “check_performance” rewrote its description, which is the text the model reads
- [security] Tool “connect_analytics” rewrote its description, which is the text the model reads
- [security] Tool “connect_domain” rewrote its description, which is the text the model reads
- [security] Tool “env_vars” rewrote its description, which is the text the model reads
- [functional improvement] Schema quality: 103 → 92
- [functional] Schema quality: poor → fair

### 2026-07-27 (score 52, −3)

- [security regression] Stability: unverified → fail
- [functional regression] Tool coverage: 25% → 4%
- [functional regression] Schema quality: 67% → 60%
- [functional regression] Schema quality: 64 → 103
- [functional] Schema quality: fair → poor
- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 55)

First indexed and scored.

## MCP tools (16)

### `list_design_systems` (~21 tokens)

Return the catalogue of design systems Layero ships with.

Output parameters:

- `result` (array)

### `list_structures` (~20 tokens)

Return the catalogue of landing structures Layero ships with.

Output parameters:

- `result` (array)

### `compose_landing` (~208 tokens)

Drive the 3-step quiz flow and produce a complete landing.

    This is the **main entry point**. Don't ask the user questions in chat
    before calling this — the tool opens native quiz dialogs in the IDE
    itself. Call this immediately when the user describes what they want.

    The three quizzes are:

    1. **Motivation** — what's being built, for whom, the desired action.
    2. **Look & feel** — palette, tone, optional references.
    3. **Final picks** — design system (top 3 matched), where submissions go,
       project name slug.

    Returns a ``ComposeResult`` with the file bundle to write to disk. The
    agent then writes the files using the IDE's filesystem tool and proceeds
    to integration setup / deploy.

Input parameters:

- `user_message` (string, required): The user's full message verbatim — do not paraphrase. Used to pre-fill quiz defaults and inform matching.

Output parameters:

- `brief` (string)
- `category_guide` (string)
- `design_rules` (string)
- `design_system`
- `files` (array)
- `integration`
- `next_action` (string)
- `note` (string)
- `project_name`
- `status` (string)
- `structure`

### `add_integration` (~52 tokens)

Wire form submissions into a destination.

    Returns the integration recipe. The agent executes the steps itself —
    runs terminal commands, edits files, deploys a relay if needed.

Input parameters:

- `kind` (string, required)

Output parameters:

- `next_action` (string)
- `playbook` (string)

### `whoami` (~50 tokens)

Who 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.

Output parameters:

- `email`
- `next_action` (string)
- `projects` (integer)
- `username`

### `my_projects` (~59 tokens)

The 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.

Input parameters:

- `limit` (integer)

Output parameters:

- `result` (array)

### `site_status` (~79 tokens)

How a site is doing: whether it is being served and how its build ended.

    `project` is an id or a slug. One call instead of three (project,
    deploys, live check of the address): an agent needs the conclusion, not
    the raw material to assemble it from.

Input parameters:

- `project` (string, required)

Output parameters:

- `http_code`
- `last_deploy_stage`
- `last_deploy_status`
- `last_error`
- `next_action` (string)
- `project` (string)
- `serving` (boolean)
- `url` (string)

### `env_vars` (~202 tokens)

Project 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 user asks "what is my key", say plainly
    that you cannot show it and offer to set a new one.

    `set` does not require knowing the other variables — the platform keeps
    them. `unset` removes only the named ones.

    A change needs a new deploy: variables are picked up at build time, not
    on the fly. Say so, or the user will think nothing happened.

Input parameters:

- `action` (string)
- `keys`
- `project` (string, required)
- `values`

Output parameters:

- `changed` (array)
- `next_action` (string)
- `project` (string)
- `variables` (array)

### `connect_analytics` (~119 tokens)

Connect 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`.

Input parameters:

- `branch`
- `project` (string, required)

Output parameters:

- `connected` (boolean)
- `counter_id`
- `injection_mode`
- `next_action` (string)
- `oauth_url`
- `project` (string)
- `tracked_branch`

### `site_analytics` (~73 tokens)

Site 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.

Input parameters:

- `period` (string)
- `project` (string, required)

Output parameters:

- `bounce_rate`
- `devices` (array)
- `next_action` (string)
- `pageviews` (integer)
- `period` (string)
- `project` (string)
- `state` (string)
- `top_pages` (array)
- `top_sources` (array)
- `trend`
- `users` (integer)
- `visits` (integer)

### `check_performance` (~156 tokens)

Measure 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.

    A run takes tens of seconds. With `wait=true` the tool waits for you; do
    not start a second measurement in parallel — it will occupy the queue
    and add nothing.

Input parameters:

- `project` (string, required)
- `wait` (boolean)

Output parameters:

- `delta`
- `message` (string)
- `next_action` (string)
- `previous_score`
- `project` (string)
- `score`
- `timings` (object)
- `verdict` (string)

### `connect_domain` (~146 tokens)

Connect 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 nothing.

    The address can be passed as-is: the platform reduces
    `https://shop.example.com/page` to `shop.example.com` itself.

Input parameters:

- `domain` (string, required)
- `project` (string, required)

Output parameters:

- `checks`
- `domain` (string)
- `error`
- `next_action` (string)
- `next_check_hint`
- `records` (array)
- `state` (string)
- `working` (boolean)

### `check_domain` (~71 tokens)

Check 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.

Input parameters:

- `domain` (string, required)
- `project` (string, required)

Output parameters:

- `checks`
- `domain` (string)
- `error`
- `next_action` (string)
- `next_check_hint`
- `records` (array)
- `state` (string)
- `working` (boolean)

### `list_domains` (~23 tokens)

The project's own domains and their state.

Input parameters:

- `project` (string, required)

Output parameters:

- `result` (array)

### `diagnose_deploy` (~126 tokens)

Why 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 — you close this loop yourself,
    without involving the person.

Input parameters:

- `deploy`
- `project` (string, required)

Output parameters:

- `build_log_excerpt` (array)
- `deploy_id` (string)
- `next_action` (string)
- `next_actions` (array)
- `project` (string)
- `runtime_log_excerpt` (array)
- `runtime_state`
- `stage`
- `status`
- `verdict`

### `publish_landing` (~351 tokens)

Publish a site to Layero — from here, with no terminal.

    Not only generated landings: this takes ANY ready static bundle, so it is
    also the answer to "deploy my site". 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.

    A project that still needs a build step (Vite, Next, Astro — anything
    where the answer is `npm run build`) does NOT go here: publish its build
    output, or tell the user to run `npx layero@latest deploy`, which builds
    on our side.

    Send the ACTUAL file contents: the server does not remember the bundle
    between calls. If the user edited the text after generation, pass the
    current versions, or what gets published is what used to be there.

    Pass `project` (the id of an existing project) when republishing the
    same landing; without it the platform finds a project with that name or
    creates a new one.

    Returns as soon as the build finishes, or after ~40s with `status`
    `building` and the `deploy_id` — the build keeps going on its own. Never
    call this tool a second time to "retry" a build that is still running:
    that starts a SECOND build. Follow `next_action`.

Input parameters:

- `files` (array, required)
- `project`
- `project_name` (string, required)

Output parameters:

- `bytes` (integer)
- `created_project` (boolean)
- `deploy_id` (string)
- `error`
- `files` (integer)
- `next_action` (string)
- `project_id` (string)
- `project_slug` (string)
- `status` (string)
- `url` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/ru-layero-layero/mcp#diagnostics

## Score history

- 2026-08-03: 58
- 2026-08-02: 58
- 2026-08-01: 56
- 2026-07-31: 56
- 2026-07-30: 53
- 2026-07-29: 53
- 2026-07-28: 52
- 2026-07-27: 52
- 2026-07-26: 55

## Links

- Remote endpoint: https://mcp.layero.ru/mcp
- Repository: https://github.com/LayeroInfra/layero-claude
- Website: https://docs.layero.ru/en/plugin/intro/
- Changelog RSS feed: https://verifymcp.io/servers/ru-layero-layero/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/ru-layero-layero/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/ru-layero-layero/mcp
