Машинный вход

EN

Сайт отвечает не только людям. Тот же мозг, что и у страниц, доступен агентам по MCP: CV, кейсы, /now и рецепт локальной транскрибации — это чтение, без ключей. Ещё можно предложить созвон или задать вопрос Александру.

Подключить за минуту

Claude Code:

claude mcp add --transport http alex https://mcp.shirlineyn.ru/mcp

Любой клиент MCP (Claude Desktop, Cursor и другие), конфиг:

{
  "mcpServers": {
    "alex": { "type": "http", "url": "https://mcp.shirlineyn.ru/mcp" }
  }
}

Протокол — Streamable HTTP, ревизия 2026-07-28, без авторизации: чтение анонимно, заявки — с именем и e-mail.

Созвон и вопрос

book_call и ask_alex создают заявку: имя и e-mail отправителя обязательны и не проверяются, Александр видит их как текст. Слот — не раньше чем через час и не позже чем через 60 дней. Ответ — только через status(id), обратных вызовов нет. Заглядывайте не чаще, чем просит поле retryAfterHours в ответе pending (сейчас 6 часов); id живёт 30 дней, потом заявка с именем и e-mail стирается. Не больше 5 заявок за сутки с одного e-mail; повтор той же заявки возвращает прежний id — даже если по ней уже есть решение. Ответ status подписан тем же ключом, что about. Что хранится и кто видит — приватность.

Скилл для Claude Code

meet-alex объясняет агенту, что здесь можно спросить и как читать подпись:

mkdir -p ~/.claude/skills/meet-alex && curl -fsSL https://shirlineyn.ru/skills/meet-alex/SKILL.md -o ~/.claude/skills/meet-alex/SKILL.md

Agent card

Для агентов, которые ищут по A2A: /.well-known/agent-card.json. Там же публичный ключ для проверки подписей.

Подпись ответов

cv.json и ответы about, cases, case, now, status подписаны Ed25519: объект канонизируется по RFC 8785 без поля signature, подпись — detached JWS (EdDSA, заголовок и подпись через ..) в этом поле. Проверить (нужен npm i canonicalize):

node --input-type=module -e '
import canonicalize from "canonicalize"; import { verify, createPublicKey } from "node:crypto";
const card = await (await fetch("https://shirlineyn.ru/.well-known/agent-card.json")).json();
const cv = await (await fetch("https://shirlineyn.ru/cv.json")).json();
const { signature, ...rest } = cv; const [h, , s] = signature.split(".");
const ok = verify(null, Buffer.from(h + "." + canonicalize(rest)), createPublicKey(card.publicKey.pem), Buffer.from(s, "base64url"));
console.log(ok ? "подпись верна" : "ПОДПИСЬ НЕ СХОДИТСЯ");'

Список инструментов — ниже на этой странице, он строится из того же реестра, что и сервер.

Ключ ротируется штатно: новый — в agent card и DNS TXT _shirlineyn-key, старый помечается отозванным с датой.

Без агента

Всё то же есть и для людей: кейсы, /now, CV в PDF.

Инструменты

about
CV Александра Доронина структурно (JSON Resume): опыт, навыки, образование, проекты.
cases
Список опубликованных кейсов с метрикой и ссылкой.
case
Кейс целиком по slug: задача, решение, результат, что иначе.
now
Что читаю, над чем работаю, как тренируюсь — со страницы /now.
transcription_recipe
Готовый пайплайн локальной транскрибации (whisper.cpp, диаризация pyannote) под длительность, язык, число говорящих и железо.
book_call
Предложить Александру созвон на 30 минут: 1–3 варианта времени в ISO 8601 со смещением, имя и e-mail (не проверяются). Создаёт заявку; ответ — только через status(id), обратных вызовов нет.
ask_alex
Задать Александру вопрос с именем и e-mail (не проверяются). Создаёт заявку; ответ приходит асинхронно и забирается только через status(id), обратных вызовов нет.
status
Состояние заявки по id: pending, approved (время и ссылка), changed или answered (текст Александра), declined. id живёт 30 дней.