# MCP server

6 read-only tools and the library as resources, over Streamable HTTP with no sign-in.

Canonical: https://interlinea.aeterna-institute.org/docs/mcp

`POST /mcp`

The server speaks the Model Context Protocol, so an assistant can search the library, read texts and use their analyses as tools. It is built on the official TypeScript SDK and reads the same data as the REST API.

## Connection

- Transport: Streamable HTTP at `https://interlinea.aeterna-institute.org/mcp`. POST carries every message; GET and DELETE answer `405`.
- No authentication and no session. Each request stands on its own, so any number of clients can connect.
- Protocol: the 2026-07-28 revision, and 2025-era clients through stateless serving. Today's Claude, ChatGPT and IDE clients connect as they are.
- CORS is open, so a client in the browser can connect too.

[Quickstart](https://interlinea.aeterna-institute.org/docs/quickstart.md#mcp) has the setup for each client.

## Instructions

The server sends these instructions when a client connects. Most clients pass them to the model.

```text
Interlinea is a free library of Latin and Ancient Greek texts with word-by-word analysis (https://interlinea.aeterna-institute.org).
Start with search_library or list_passages, read with get_text (follow next.url to keep reading), and use get_analysis, lookup_word and get_context for grammar, vocabulary and background.
Every result carries a citation, a canonical url, a CTS URN where the edition has one, and the edition's credit and licence. When you quote or reuse a text, give the citation and url and credit the edition as its credit.text says. CC BY-SA texts and all analyses stay under CC BY-SA 4.0; The Latin Library's texts are used with permission and are not CC BY-SA.
Analyses and notes are stored ones only: nothing here generates new ones, so some sections return words: null or section: null. Open the url in Interlinea to have them made.
The same data is available as JSON at https://interlinea.aeterna-institute.org/api/v1 (OpenAPI: https://interlinea.aeterna-institute.org/api/v1/openapi.json). Docs: https://interlinea.aeterna-institute.org/docs.
```

## Tools

| Tool | What it does |
|---|---|
| [`search_library`](https://interlinea.aeterna-institute.org/docs/mcp/search_library.md) | Search Interlinea's library of Latin and Ancient Greek texts by author, work title or topic (war, love, the gods, friendship, death, rhetoric, letters, comedy). |
| [`get_text`](https://interlinea.aeterna-institute.org/docs/mcp/get_text.md) | Read a section of a Latin or Greek work, or a graded passage, in the original. |
| [`get_analysis`](https://interlinea.aeterna-institute.org/docs/mcp/get_analysis.md) | The stored word-by-word analysis of a text: for every word its lemma, dictionary entry, part of speech, Universal Dependencies features, head and relation, and meaning in that sentence, plus an English translation of each sentence. |
| [`lookup_word`](https://interlinea.aeterna-institute.org/docs/mcp/lookup_word.md) | Look up a Latin or Greek headword (amo, arma, λόγος) in the stored analyses: its dictionary entries, the meanings it had in context, and example sentences with translations, citations, urls and licences. |
| [`get_context`](https://interlinea.aeterna-institute.org/docs/mcp/get_context.md) | Stored notes on where a text sits in its work: what happened before, what happens here (never a translation), the people, gods and places named, what comes next, and a few lines about the work. |
| [`list_passages`](https://interlinea.aeterna-institute.org/docs/mcp/list_passages.md) | The graded path: short Latin and Greek passages chosen for learners, from level 1 (Genesis, Aesop) to level 5 (Tacitus, Thucydides, Sappho), each analysed word by word ahead of time. |

Every tool is read only and says so: `readOnlyHint` is `true`, `destructiveHint` is `false`, `idempotentHint` is `true`, `openWorldHint` is `false`. A client can call them without asking for confirmation.

## Results

A tool answers twice over, as the protocol asks. `structuredContent` holds the result as JSON that matches the tool's output schema, and `content` holds the same JSON as one text item for clients that only read text.

## Errors

A reference that isn't in the library, or isn't a text, comes back as a normal result with `isError: true` and a message that says what to pass instead:

```json
{
  "ref": "/library/latin/virgil"
}
```

Response:

```json
{
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Virgil is an author, not a text. Pass one of their works, e.g. https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid, https:/…"
      }
    ],
    "isError": true
  },
  "jsonrpc": "2.0",
  "id": 1
}
```

## Resources

The graded passages and the best-known works are also listed as resources, and any work or section can be read as one. See [Resources](https://interlinea.aeterna-institute.org/docs/mcp/resources.md).

---

Previous: [Quickstart](https://interlinea.aeterna-institute.org/docs/quickstart.md)
Next: [Search the library](https://interlinea.aeterna-institute.org/docs/mcp/search_library.md)
