A librarian for Marxist texts · served over MCP
A curated, provenance-tracked librarian over the Marxists Internet Archive. It answers with cited, bounded passages — and it tells you whose voice you are quoting, and whose translation.
What it is
Bernstein said socialism would arrive by reform. Luxemburg answered him in 1900. Kautsky said the dictatorship of the proletariat meant democratic majority rule; Lenin replied in a book that named Kautsky in its title. This archive holds every one of those texts, and the arguments between them are dated, named, and traceable.
So this is not a semantic search over a pile of documents. Questions route to a curated topic map that states who disagreed with whom, what the charge was, and which passage carries it. Where a reply exists, the server hands it to you unprompted — including when you are mid-quotation of the other side.
Retrieval only. The server returns the map, the files, the search hits and the cited passages. Your assistant composes the answer, and everything it claims can be checked against a passage this server will resolve or refuse.
Why a general-purpose model gets this wrong
“Marx said X”, where X is English, is a claim about a translator. This library’s Lenin was translated collectively by Soviet state publishers — so an argument about his wording is an argument about a state-produced translation. The translation record is never empty, and it distinguishes what the archive recorded from what this library supplied.
A page interleaves the author, later annotators — Engels writing inside Marx’s text forty years on — publisher apparatus, and the archive’s own transcribers, with nothing visual to separate them. Every citation carries a computed voice. Where the markup does not establish who wrote a note, it says so rather than guessing.
The archive keeps Stalin-era official history. This library holds it as an artifact: authoritative evidence of what that account asserted, and not evidence of what happened. It comes back in its own array, with different fields, so it cannot be read as one more side of the debate.
The shelves · eight topics, twenty-five sources
Each topic is a disagreement map with its gaps stated. A topic that holds only one side of an argument says so, in the response, before you read a word of it.
The reading desk · seven tools
| orient | The rules, the routes, the corpus counts — and which guarantees hold regardless of who is calling. |
| route_question | A question to its topic file, its sources, its artifacts, and the polemics between them. |
| sources | The annotated index: author, date, tier, tendency, topics. |
| search | Capped and explicitly non-exhaustive. A zero hit returns the coverage, not a void. |
| read | A whole topic map. Never a source text — those are reached only through citation. |
| cite | The verbatim passage, or an error. Returns a paste-ready citation with voice and translator attached. |
| check_answer | Resolves every quotation in a draft before it is sent. Deterministic, free, no model. |
A citation that will not resolve is an error, never an invented passage — and when a locator misses, the server hands back the nearest real text, because a wording that “isn’t there” is usually a different translation of something that is.
Connect your assistant
Claude Code, over stdio — add to .mcp.json:
{
"mcpServers": {
"marxist": {
"command": "python3",
"args": ["/path/to/marxist-mcp/server/mcp_server.py"]
}
}
}
Or run the HTTP transport and connect by URL:
just serve-http 8080
curl -s localhost:8080/healthz
Full instructions, including Claude Desktop, are in
docs/clients.md.
What it will not do