Машинный вход
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, старый
помечается отозванным с датой.
Без агента
Инструменты
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 дней.