# Quickstart

Connect an assistant over MCP, call the JSON API, or fetch Markdown. Each takes one step and no key.

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

Pick the way in that suits you. All three read the same library and return the same citations and credits.

## MCP

The MCP server speaks the Model Context Protocol over Streamable HTTP. It needs no sign-in and keeps no session. Its address:

```text
https://interlinea.aeterna-institute.org/mcp
```

### Add it to your client

Claude Code:

```sh
claude mcp add --transport http interlinea https://interlinea.aeterna-institute.org/mcp
```

Claude Desktop (claude_desktop_config.json):

```json
{
  "mcpServers": {
    "interlinea": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://interlinea.aeterna-institute.org/mcp"
      ]
    }
  }
}
```

Cursor (~/.cursor/mcp.json):

```json
{
  "mcpServers": {
    "interlinea": {
      "url": "https://interlinea.aeterna-institute.org/mcp"
    }
  }
}
```

VS Code (.vscode/mcp.json):

```json
{
  "servers": {
    "interlinea": {
      "type": "http",
      "url": "https://interlinea.aeterna-institute.org/mcp"
    }
  }
}
```

- Claude Code: run the command once. `/mcp` inside Claude Code then lists the server and its tools.
- Claude Desktop and Claude on the web: open Settings, then Connectors, choose Add custom connector and paste the server URL. On a plan without custom connectors, the config file above runs the server through `mcp-remote` instead.
- ChatGPT: turn on developer mode in the connector settings, then create a connector with the server URL and no authentication.
- Cursor: put the entry in `~/.cursor/mcp.json`, or in `.cursor/mcp.json` for one project.
- VS Code: put the entry in `.vscode/mcp.json`, or run MCP: Add Server from the command palette.

Then ask, for example, “Read me the opening of the Aeneid and parse the first line.” The assistant finds the work with `search_library`, reads it with `get_text` and parses it with `get_analysis`.

### One real call

Under the hood a client sends JSON-RPC. This is the `tools/call` for `get_text` that a client sends, as plain HTTP:

```sh
curl https://interlinea.aeterna-institute.org/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_text","arguments":{"ref":"Virgil, Aeneid 1.46"}}}'
```

Response:

```json
{
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"kind\":\"section\",\"lang\":\"la\",\"language\":\"Latin\",\"title\":\"Aeneid 1.46-86\",\"citation\":\"Virgil, Aeneid 1.46-86\",\"ref\":\"1.46\",\"level\":null,\"urn…"
      }
    ],
    "structuredContent": {
      "kind": "section",
      "lang": "la",
      "language": "Latin",
      "title": "Aeneid 1.46-86",
      "citation": "Virgil, Aeneid 1.46-86",
      "ref": "1.46",
      "level": null,
      "urn": "urn:cts:latinLit:phi0690.phi003.perseus-lat2:1.46-1.86",
      "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46",
      "api": "https://interlinea.aeterna-institute.org/api/v1/library/latin/virgil/aeneid/1.46",
      "markdown": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46.md",
      "author": {
        "name": "Virgil",
        "url": "https://interlinea.aeterna-institute.org/library/latin/virgil"
      },
      "work": {
        "title": "Aeneid",
        "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid",
        "urn": "urn:cts:latinLit:phi0690.phi003"
      },
      "verse": true,
      "words": 276,
      "text": "Ast ego, quae divom incedo regina, Iovisque\net soror et coniunx, una cum gente tot annos\nbella gero! Et quisquam numen Iunonis adoret\npraete…",
      "prev": {
        "citation": "Aeneid 1.1-45",
        "label": "Lines 1.1-1.45",
        "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.1",
        "api": "https://interlinea.aeterna-institute.org/api/v1/library/latin/virgil/aeneid/1.1"
      },
      "next": {
        "citation": "Aeneid 1.87-130",
        "label": "Lines 1.87-1.130",
        "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.87",
        "api": "https://interlinea.aeterna-institute.org/api/v1/library/latin/virgil/aeneid/1.87"
      },
      "credit": {
        "text": "Virgil, Aeneid, ed. J. B. Greenough. Text: the Perseus Digital Library, canonical-latinLit, CC BY-SA 4.0. Changes: apostrophes normalised an…",
        "license": "CC BY-SA 4.0",
        "licenseUrl": "https://creativecommons.org/licenses/by-sa/4.0/",
        "source": "https://github.com/PerseusDL/canonical-latinLit/blob/master/data/phi0690/phi003/phi0690.phi003.perseus-lat2.xml",
        "quality": "proofread"
      }
    }
  },
  "jsonrpc": "2.0",
  "id": 1
}
```

The answer arrives as one server-sent event whose data line is this message. `structuredContent` holds the result, and `content` repeats it as text for clients that only read text. The [MCP reference](https://interlinea.aeterna-institute.org/docs/mcp.md) has every tool.

## REST

The same data as JSON over GET at `https://interlinea.aeterna-institute.org/api/v1`. There is no key, and CORS is open, so a page on any site can call it from the browser.

curl:

```sh
curl -G "https://interlinea.aeterna-institute.org/api/v1/text" \
  --data-urlencode "ref=Virgil, Aeneid 1.46"
```

JavaScript:

```js
const params = new URLSearchParams({ ref: "Virgil, Aeneid 1.46" })
const res = await fetch(`https://interlinea.aeterna-institute.org/api/v1/text?${params}`)
const data = await res.json()
console.log(data)
```

Python:

```python
import json
from urllib.parse import urlencode
from urllib.request import urlopen

params = urlencode({"ref": "Virgil, Aeneid 1.46"})
with urlopen(f"https://interlinea.aeterna-institute.org/api/v1/text?{params}") as res:
    data = json.load(res)

print(data)
```

Response (200 OK):

```json
{
  "kind": "section",
  "lang": "la",
  "language": "Latin",
  "title": "Aeneid 1.46-86",
  "citation": "Virgil, Aeneid 1.46-86",
  "ref": "1.46",
  "level": null,
  "urn": "urn:cts:latinLit:phi0690.phi003.perseus-lat2:1.46-1.86",
  "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46",
  "api": "https://interlinea.aeterna-institute.org/api/v1/library/latin/virgil/aeneid/1.46",
  "markdown": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46.md",
  "author": {
    "name": "Virgil",
    "url": "https://interlinea.aeterna-institute.org/library/latin/virgil"
  },
  "work": {
    "title": "Aeneid",
    "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid",
    "urn": "urn:cts:latinLit:phi0690.phi003"
  },
  "verse": true,
  "words": 276,
  "text": "Ast ego, quae divom incedo regina, Iovisque\net soror et coniunx, una cum gente tot annos\nbella gero! Et quisquam numen Iunonis adoret\npraete…",
  "prev": {
    "citation": "Aeneid 1.1-45",
    "label": "Lines 1.1-1.45",
    "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.1",
    "api": "https://interlinea.aeterna-institute.org/api/v1/library/latin/virgil/aeneid/1.1"
  },
  "next": {
    "citation": "Aeneid 1.87-130",
    "label": "Lines 1.87-1.130",
    "url": "https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.87",
    "api": "https://interlinea.aeterna-institute.org/api/v1/library/latin/virgil/aeneid/1.87"
  },
  "credit": {
    "text": "Virgil, Aeneid, ed. J. B. Greenough. Text: the Perseus Digital Library, canonical-latinLit, CC BY-SA 4.0. Changes: apostrophes normalised an…",
    "license": "CC BY-SA 4.0",
    "licenseUrl": "https://creativecommons.org/licenses/by-sa/4.0/",
    "source": "https://github.com/PerseusDL/canonical-latinLit/blob/master/data/phi0690/phi003/phi0690.phi003.perseus-lat2.xml",
    "quality": "proofread"
  }
}
```

Follow `next.api` to read on. The [REST reference](https://interlinea.aeterna-institute.org/docs/api.md) has every endpoint with an example you can run, and the [OpenAPI document](https://interlinea.aeterna-institute.org/api/v1/openapi.json) describes them for code generators.

## Markdown

Every author, work and section page also answers as Markdown: add `.md` to its URL, or send `Accept: text/markdown`.

.md URL:

```sh
curl https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46.md
```

Accept header:

```sh
curl -H "Accept: text/markdown" https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46
```

Response (200 OK):

```markdown
# Aeneid 1.46-86

Virgil, Aeneid, Lines 1.46-1.86. Latin.

Canonical: https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46
JSON: https://interlinea.aeterna-institute.org/api/v1/library/latin/virgil/aeneid/1.46
CTS URN: urn:cts:latinLit:phi0690.phi003.perseus-lat2:1.46-1.86

Ast ego, quae divom incedo regina, Iovisque
et soror et coniunx, una cum gente tot annos
bella gero! Et quisquam numen Iunonis adoret
praeterea, aut supplex aris imponet honorem?
Talia flammato secum dea corde volutans
nimborum in patriam, loca feta furentibus austris,
Aeoliam venit. Hic vasto rex Aeolus antro
luctantes ventos tempestatesque sonoras
[…]

---

Virgil, Aeneid, ed. J. B. Greenough. Text: the Perseus Digital Library, canonical-latinLit, CC BY-SA 4.0. Changes: apostrophes normalised and the text divided into reading sections by Interlinea.
License: CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/). Source: https://github.com/PerseusDL/canonical-latinLit/blob/master/data/phi0690/phi003/phi0690.phi003.perseus-lat2.xml.
```

[llms.txt](https://interlinea.aeterna-institute.org/llms.txt) sums the site up for agents. These docs are Markdown too: add `.md` to any docs URL.

---

Previous: [Developer docs](https://interlinea.aeterna-institute.org/docs.md)
Next: [MCP server](https://interlinea.aeterna-institute.org/docs/mcp.md)
