Machine entrance
RUThis site talks to agents as well as people. The same brain behind the pages
is open over MCP: the CV, case studies, /now and a local-transcription
recipe, all readable with no keys. You can also propose a call or ask
Alexander a question.
Connect in a minute
Claude Code:
claude mcp add --transport http alex https://mcp.shirlineyn.ru/mcp
Any other MCP client (Claude Desktop, Cursor and so on), config:
{
"mcpServers": {
"alex": { "type": "http", "url": "https://mcp.shirlineyn.ru/mcp" }
}
}
The transport is Streamable HTTP, revision 2026-07-28, no auth: reading is anonymous, requests carry a name and e-mail.
A call or a question
book_call and ask_alex create a request: the sender’s name and e-mail are
required and not verified, and Alexander sees them as plain text. A slot must
be 1 hour to 60 days ahead. The answer comes only through status(id);
there are no callbacks. Check back no sooner than retryAfterHours in a
pending reply says (6 hours for now); the id lives 30 days, after which
the request with its name and e-mail is erased. At most 5 requests per
e-mail in 24 hours; repeating the same request returns the earlier id,
even if it has already been decided. The status reply is signed with the
same key as about. What is stored and who sees it: privacy.
A skill for Claude Code
meet-alex tells an agent what it can ask here and how to read the signature:
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
If your agent discovers peers over A2A, start at /.well-known/agent-card.json.
The public key for checking signatures is there too.
Signed responses
cv.json and the replies of about, cases, case, now and status are signed with
Ed25519: the object is canonicalized per RFC 8785 without its signature
field, and the signature is a detached JWS (EdDSA, header and signature
around ..) stored in that field. To verify it
(needs 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 ? "signature ok" : "SIGNATURE MISMATCH");'
The tool list below is built from the same registry the server uses.
Key rotation is a routine procedure: the new key goes to the agent card and DNS
TXT _shirlineyn-key, the old one is marked revoked with a date.
Without an agent
Everything here exists for people too: case studies, /now, CV as PDF.
Tools
about- Alexander Doronin’s CV as JSON Resume: experience, skills, education, projects.
cases- Published case studies with a metric and a link.
case- One case study by slug: task, solution, result, what I would do differently.
now- What I read, work on and train — from /now.
transcription_recipe- A ready local transcription pipeline (whisper.cpp, pyannote diarization) for a given duration, language, speakers and hardware.
book_call- Propose a 30-minute call with Alexander: 1–3 start times in ISO 8601 with an offset, your name and e-mail (not verified). Creates a request; the answer comes only via status(id), no callbacks.
ask_alex- Ask Alexander a question with your name and e-mail (not verified). Creates a request; the answer is asynchronous and comes only via status(id), no callbacks.
status- Request state by id: pending, approved (time and link), changed or answered (Alexander’s text), declined. Ids live 30 days.