Get started
Quickstart
Connect an assistant over MCP, call the JSON API, or fetch Markdown. Each takes one step and no key.
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:
https://interlinea.aeterna-institute.org/mcpAdd it to your client
claude mcp add --transport http interlinea https://interlinea.aeterna-institute.org/mcp{
"mcpServers": {
"interlinea": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://interlinea.aeterna-institute.org/mcp"
]
}
}
}{
"mcpServers": {
"interlinea": {
"url": "https://interlinea.aeterna-institute.org/mcp"
}
}
}{
"servers": {
"interlinea": {
"type": "http",
"url": "https://interlinea.aeterna-institute.org/mcp"
}
}
}- Claude Code: run the command once.
/mcpinside 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-remoteinstead. - 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.jsonfor 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:
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"}}}'{
"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 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 -G "https://interlinea.aeterna-institute.org/api/v1/text" \
--data-urlencode "ref=Virgil, Aeneid 1.46"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)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){
"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 has every endpoint with an example you can run, and the OpenAPI document 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.
curl https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46.mdcurl -H "Accept: text/markdown" https://interlinea.aeterna-institute.org/library/latin/virgil/aeneid/1.46# 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 sums the site up for agents. These docs are Markdown too: add .md to any docs URL.