Machine entrance

RU

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