Search and read romankryvolapov.com engineering articles; message the author.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Return the full text of one article by the id from search results (its canonical URL), as markdown with code listings preserved verbatim.
Article id from search: its canonical URL.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http blog https://mcp.romankryvolapov.com/
Return the full text of one article by the id from search results (its canonical URL), as markdown with code listings preserved verbatim.
| Argument | Type | Description |
|---|---|---|
| id* | string | Article id from search: its canonical URL. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Article id from search: its canonical URL."
}
}
}Return the full markdown of one article by its canonical URL (e.g. https://romankryvolapov.com/ru/ktor-manual/). Code listings are preserved verbatim. The same as fetch, as plain text.
| Argument | Type | Description |
|---|---|---|
| url* | string | Canonical page URL. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL."
}
}
}Search the romankryvolapov.com engineering blog: articles on Java, Kotlin, Android, Spring, microservices, gRPC, Kubernetes, databases, and running large language models locally (llama.cpp, LoRA fine-tuning, RAG, prompt engineering). Every article exists in English, Russian and Ukrainian, and results come in one language: set lang to the user’s language, otherwise it is guessed from the query. Returns matching articles with snippets and URLs; read one with fetch, passing its id.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the articles to return: en, ru or uk — normally the user’s language. Without it: English for a query in Latin script, Russian or Ukrainian for one in Cyrillic. |
| limit | integer | How many articles to return. |
| query* | string | Free-text search query, in any of the three languages. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"lang": {
"enum": [
"en",
"ru",
"uk"
],
"type": "string",
"description": "Language of the articles to return: en, ru or uk — normally the user’s language. Without it: English for a query in Latin script, Russian or Ukrainian for one in Cyrillic."
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 20,
"minimum": 1,
"description": "How many articles to return."
},
"query": {
"type": "string",
"description": "Free-text search query, in any of the three languages."
}
}
}Send a message to Roman Kryvolapov, the author of this blog: a question about one of the articles, a suggestion for a new article, or a job or project offer. It goes to his inbox, and he replies by email to the address given. Use it only when the user asked to contact the author, with the user’s own name and email address — never invent them — and show the user the text before sending. At most 20 messages a day are accepted from all agents together, and 3 from one email address.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the conversation: en, ru or uk. The reply comes in it. |
| name* | string | The sender’s name. |
| email* | string | The sender’s email address. The author replies to it. |
| message* | string | The message, in any language. |
{
"type": "object",
"required": [
"name",
"email",
"message"
],
"properties": {
"lang": {
"enum": [
"en",
"ru",
"uk"
],
"type": "string",
"default": "en",
"description": "Language of the conversation: en, ru or uk. The reply comes in it."
},
"name": {
"type": "string",
"maxLength": 100,
"description": "The sender’s name."
},
"email": {
"type": "string",
"format": "email",
"maxLength": 254,
"description": "The sender’s email address. The author replies to it."
},
"message": {
"type": "string",
"maxLength": 5000,
"description": "The message, in any language."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 11, 2026.