An MCP server for dialogical, exploratory access to digital scholarly editions.
DHd2026 Poster: Agenten im Dienst der Edition
Instead of complex search forms and navigation structures, this MCP server enables natural-language conversation with digital scholarly editions. An AI agent translates questions like "Who was important for Schleiermacher in 1810?" into structured database queries — and maintains conversational context across follow-up questions.
The server aggregates three editions from BBAW/TELOTA into a single MCP endpoint using FastMCP composition:
| Edition | Prefix | Backend | Content |
|---|---|---|---|
| schleiermacher digital | sd_ |
eXist-db | Letters, diaries, lectures, chronology |
| Praktiken der Monarchie | mop_ |
eXist-db | Documents on Prussian monarchy and governance |
| correspSearch | cs_ |
REST API | Cross-edition correspondence network search |
| Tool | Description |
|---|---|
sd_search_documents |
Fulltext search with facets (document type, year, date range) |
sd_filter_letters |
Filter letters by sender, receiver, place, period |
sd_get_correspondent_stats |
Correspondent statistics for network analysis |
sd_get_document_by_id |
Retrieve a complete document as Markdown |
sd_get_document_passages |
Retrieve text passages from a document |
sd_search_register |
Lucene fulltext search in person/place/work registers |
sd_get_register_entry |
Detailed register entry with optional mention summary |
sd_get_diary_entry / sd_get_diary_entries |
Diary entries by date or date range |
sd_get_chronology_entry / sd_get_chronology_entries / sd_get_chronology_year |
Chronology lookup |
sd_list_collections / sd_list_collection_contents |
Browse collection structure |
sd_get_collection_stats / sd_get_file_info |
Collection and file metadata |
sd_execute_xquery |
Execute raw XQuery |
sd_check_database_connection |
Health check |
sd_get_raw_document_by_id / sd_get_raw_document_by_path |
Raw XML retrieval |
| Tool | Description |
|---|---|
mop_browse_documents |
Browse files and subcollections |
mop_search_documents |
Fulltext search in MoP documents |
mop_get_document |
Retrieve a complete document |
mop_search_register / mop_get_register_entry |
Search registers (persons, places, institutions, courts, works, offices) |
mop_search_biogramme / mop_get_biogramm_by_id |
Search and retrieve detailed biographies |
mop_extract_family_network |
Extract family network from a biography |
mop_get_residential_topography / mop_search_residential_topography / mop_list_available_wohntopo_years |
Residential topography data |
mop_search_adjutanten_journals / mop_get_adjutanten_journal_entry / mop_list_adjutanten_by_monarch |
Court adjutant journals |
mop_execute_xquery |
Execute raw XQuery |
mop_check_database_connection |
Health check |
| Tool | Description |
|---|---|
cs_search_correspondences |
Cross-edition correspondence search |
cs_get_edition_info |
Information about a correspSearch edition |
cs_search_correspondent_network |
Analyze correspondence network of a person |
cs_search_for_gnd_id |
Look up GND authority IDs by name |
cs_search_for_geonames_id / cs_get_place_geonames_id |
Look up GeoNames IDs |
cs_search_wikidata_entity / cs_search_for_wikidata_occupation |
Wikidata lookups |
# Clone the repository
git clone https://github.com/telota/bbaw-dse-mcp.git
cd bbaw-dse-mcp
# Install with uv (recommended)
uv syncRequires Python 3.11+.
Configuration uses environment variables (prefix EDITIONS_). Create a .env file:
# Schleiermacher Digital eXist-db
EDITIONS_SD_URL=http://localhost:8080
EDITIONS_SD_USERNAME=admin
EDITIONS_SD_PASSWORD=
# Praktiken der Monarchie eXist-db
EDITIONS_AB_URL=https://actaborussica.bbaw.de
EDITIONS_AB_USERNAME=
EDITIONS_AB_PASSWORD=
# correspSearch API (no auth required)
EDITIONS_CS_API_URL=https://correspsearch.net/api/v2.0
# Optional: GeoNames API
EDITIONS_GEONAMES_USERNAME=
# Optional: Anthropic API (for research agent)
EDITIONS_ANTHROPIC_API_KEY=uv run bbaw-dse-mcpAdd to your claude_desktop_config.json:
{
"mcpServers": {
"editions": {
"command": "uv",
"args": ["run", "bbaw-dse-mcp"],
"cwd": "/path/to/bbaw-dse-mcp"
}
}
}User: Search for letters mentioning Humboldt.
Agent: → sd_search_documents(query="Humboldt", doc_type="letters")
Found 23 letters mentioning Humboldt, mostly from 1810 —
the year of the Berlin university founding...
User: Who was important for Schleiermacher in 1810?
Agent: → sd_get_correspondent_stats(year=1810)
Based on letter frequency, the most important correspondents in 1810:
1. Charlotte Schleiermacher (15 letters) — his sister
2. Wilhelm von Humboldt (8 letters) — central figure in university reform
...
User: Can we trace Humboldt's correspondence network beyond this edition?
Agent: → cs_search_correspondent_network(name="Humboldt, Wilhelm von")
Cross-edition network across 12 editions: ...
- FastMCP 2.x — Python MCP server framework
- httpx — Async HTTP client for eXist-db REST API
- lxml — TEI-XML parsing
- Pydantic v2 — Data models and settings
- AGENT.md — Project overview and design decisions
- docs/TOOLS.md — Detailed tool specifications
- docs/ARCHITECTURE.md — Technical architecture
MIT
Tim Westphal, BBAW TELOTA