mit-classics-mcp
by Awzy11
README.md
# mit-classics-mcp
An [MCP](https://modelcontextprotocol.io) server that gives an LLM direct read access to the [MIT Internet Classics Archive](https://classics.mit.edu) — 59 ancient authors (Plato, Aristotle, Marcus Aurelius, Sun Tzu, Homer, and more) and 400+ works, fetched live from the archive rather than bundled.
No API key, no rate-limited third-party wrapper — it talks to the archive directly.
## Tools
| Tool | Purpose |
| --- | --- |
| `list_authors` | List all 59 authors in the archive |
| `list_works(author)` | List every work by an author, with the slug needed to fetch it |
| `get_work_text(author, work_slug, start_word, word_count)` | Fetch a word-range slice of a work's full text |
`get_work_text` is paginated by word count (default 3,000 words, ~10-12 pages) rather than returning entire books at once, so an LLM can pull exactly the section it needs without blowing its context window.
## Why this exists
The archive is a genuinely old site — 1990s-era frameset HTML, served inside a `<NOFRAMES>` block. That turned out to matter more than expected: per the HTML5 spec, `<noframes>` content is *always* parsed as raw text, not markup, so no HTML parser — however permissive — can extract real `<a>` elements from it. This server parses the raw response directly instead of relying on a DOM parser, and is deliberately hardened against at least one malformed tag in the archive's own markup that would otherwise silently drop an author from the list.
Author display names don't always match their internal archive slug either (`Marcus Aurelius` → `Antoninus`, `Sun Tzu` → `Tzu`) — the slug is resolved from the real link on the archive's index page rather than guessed from the author string.
## Running it
```bash
docker build -t mit-classics-mcp-server .
```
Add to your MCP client config (e.g. Claude Desktop / Claude Code):
```json
{
"mcpServers": {
"mit-classics": {
"command": "docker",
"args": ["run", "-i", "--rm", "mit-classics-mcp-server"]
}
}
}
```
## License
MIT
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues