bbaw-dse-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EDITIONS_AB_URL | No | URL for Praktiken der Monarchie eXist-db | https://actaborussica.bbaw.de |
| EDITIONS_SD_URL | No | URL for Schleiermacher Digital eXist-db | http://localhost:8080 |
| EDITIONS_CS_API_URL | No | URL for correspSearch API | https://correspsearch.net/api/v2.0 |
| EDITIONS_AB_PASSWORD | No | Password for Praktiken der Monarchie eXist-db | |
| EDITIONS_AB_USERNAME | No | Username for Praktiken der Monarchie eXist-db | |
| EDITIONS_SD_PASSWORD | No | Password for Schleiermacher Digital eXist-db | |
| EDITIONS_SD_USERNAME | No | Username for Schleiermacher Digital eXist-db | admin |
| EDITIONS_ANTHROPIC_API_KEY | No | Optional Anthropic API key for research agent | |
| EDITIONS_GEONAMES_USERNAME | No | Optional GeoNames API username |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| sd_list_collectionsA | List available sub-collections in the database. PURPOSE: Explore the database structure and find available collections. WHEN TO USE:
Args: parent: Parent collection path (relative to data_path). Empty = root. Returns: Collection object with path, collections list, and document_count |
| sd_list_collection_contentsA | List files and subcollections in a collection. PURPOSE: List files and subcollections without parsing document contents. WHEN TO USE:
WHEN NOT TO USE:
Args: collection: Collection name/path (relative to data_path). Empty = root. limit: Maximum number of files to return ctx: FastMCP Context for progress reporting Returns: Dict with 'collection_path', 'file_count', 'files', and 'subcollections' |
| sd_get_file_infoA | Get basic metadata for a single document file. PURPOSE: Extract basic TEI metadata from a document without full parsing. WHEN TO USE:
WHEN NOT TO USE:
Args: file_path: Full path to the file (relative to /db) or just filename ctx: FastMCP Context for progress reporting Returns: Dict with 'id', 'title', 'date', 'path', 'mime_type', 'size_bytes', 'modified' |
| sd_get_collection_statsA | Get statistics about documents in a collection. PURPOSE: Understand the size and content of a collection. WHEN TO USE:
Args: collection: Collection path (relative to data_path). Empty = root. Returns: CollectionStats object with document counts and metadata |
| sd_execute_xqueryA | Execute a raw XQuery against the database. PURPOSE: Run custom queries for advanced users or debugging. WHEN TO USE:
WHEN NOT TO USE:
Args: query: XQuery string to execute max_results: Maximum number of results to return Returns: Raw query result as string (usually XML) |
| sd_check_database_connectionA | Check if the database is reachable and responsive. PURPOSE: Verify database connectivity for troubleshooting. WHEN TO USE:
Returns: DatabaseStatus object with connection status, version, and paths |
| sd_get_raw_document_by_idA | Retrieve raw XML document by its xml:id. PURPOSE: Fetch raw XML for a document using its TEI xml:id attribute. WHEN TO USE:
WHEN NOT TO USE:
Args: document_id: The xml:id attribute of the TEI document collection: Optional collection filter (relative to data_path) ctx: FastMCP Context for progress reporting Returns: RawDocument with id and xml content |
| sd_get_raw_document_by_pathA | Retrieve raw XML document by its file path. PURPOSE: Fetch raw XML for a document using its database path. WHEN TO USE:
WHEN NOT TO USE:
Args: doc_path: Path to the document (relative to /db) ctx: FastMCP Context for progress reporting Returns: RawDocument with id, xml content, and path |
| sd_get_document_by_idA | Retrieve complete document. PURPOSE: Detailed view of a specific document as Markdown WHEN TO USE:
WHEN NOT TO USE:
Args: document_id: The xml:id of the document ctx: FastMCP Context Returns: Formatted markdown string with document content |
| sd_search_registerA | Search register using Lucene fulltext index. PURPOSE: Find persons, places, works, or organizations using indexed search WHEN TO USE:
WHEN NOT TO USE:
Args: query: Search term (name, title, etc.) register_type: Optional filter - 'person', 'place', 'work', 'org', or None for all max_results: Maximum results ctx: FastMCP Context Returns: List of register entry dicts with id, title, desc, type |
| sd_get_register_entryA | Get detailed information about a register entry. PURPOSE: Complete register entry details, optionally with mentions WHEN TO USE:
WHEN NOT TO USE:
Args: entry_id: xml:id of the register entry (e.g., "S0003676") include_mentions: If True, fetch mentions across letters, diaries, lectures max_mentions: Max mentions per category when include_mentions=True (default 20) ctx: FastMCP Context Returns: PersonEntry, PlaceEntry, WorkEntry, or dict based on entry type |
| sd_search_documentsA | Search documents in Schleiermacher Digital via eXist-db with facets. PURPOSE: Primary search tool for finding documents by text, type, year, etc. WHEN TO USE:
WHEN NOT TO USE:
⚠️ CITATION WARNING: Only cite documents returned by this tool. Each result includes:
Valid doc_types (from index):
Args: query: Search terms (space-separated for multiple terms) doc_types: Filter by document types (letter, letter fs, diary, diary fs, lecture, lecture fs, chronology, intro) years: Filter by years (e.g., ["1810", "1811"]) date_from: Earliest date (ISO 8601, e.g., "1810-01-01") date_to: Latest date (ISO 8601, e.g., "1815-12-31") include_commentary: If True, search in commentary too (default: True) use_or_logic: If True, use OR between terms (default); if False, use AND limit: Maximum results (default: 50) ctx: FastMCP Context Returns: List of SearchResult objects with document_id, title, type, date, kwic_snippets, and citation_url |
| sd_filter_lettersA | Filter letters by sender, receiver, place, and time period. PURPOSE: Filter letters by specific criteria (FAST - uses cache) WHEN TO USE:
WHEN NOT TO USE:
Args: sender: Person ID of sender (from register, e.g., "S0003676") receiver: Person ID of receiver (from register, e.g., "S0003677") send_place: Place ID or name of sending location (e.g., "S0000065" or "Berlin") not_before: Earliest date (ISO 8601, e.g., "1810-01-01") not_after: Latest date (ISO 8601, e.g., "1815-12-31") max_results: Maximum results ctx: FastMCP Context Returns: List of Letter objects |
| sd_get_correspondent_statsA | Statistics about correspondents (for network analysis). PURPOSE: Overview of most important correspondents WHEN TO USE:
Args: year: Optional year filter min_letters: Minimum number of letters ctx: FastMCP Context Returns: List of dicts with person_name, total, letters_sent, letters_received |
| sd_get_document_passagesA | Retrieve text passages from a specific document. PURPOSE: Get actual text content from a document found via search WHEN TO USE:
WHEN NOT TO USE:
Args: document_id: The xml:id of the document query: Optional search term to highlight/filter passages division: Filter to specific div by @n value page: Filter to specific page by pb/@n context_size: Characters of context around matches max_passages: Maximum passages to return ctx: FastMCP Context Returns: List of Passage objects with text and location info |
| sd_get_diary_entryA | Retrieve a specific diary entry by date. PURPOSE: Access a specific day's entry from Schleiermacher's diary Available years: 1808-1811, 1817, 1820-1834. Note: 1812-1816 and 1818-1819 are not extant. WHEN TO USE:
WHEN NOT TO USE:
Args: date: Date in ISO 8601 format (YYYY-MM-DD), e.g., "1808-01-01" ctx: FastMCP Context Returns: Dictionary with date, content from left side, content from right side, and raw XML of the entry |
| sd_get_diary_entriesA | Retrieve diary entries for a date range. PURPOSE: Access multiple diary entries across a time period Available years: 1808-1811, 1817, 1820-1834. Note: 1812-1816 and 1818-1819 are not extant. WHEN TO USE:
WHEN NOT TO USE:
Args: date_from: Start date in ISO 8601 format (YYYY-MM-DD) date_to: End date in ISO 8601 format (YYYY-MM-DD) ctx: FastMCP Context Returns: List of dictionaries, each with date, left_side, right_side content |
| sd_get_chronology_entryA | Retrieve chronology entries for a specific date. PURPOSE: Access events from Schleiermacher's life on a specific date WHEN TO USE:
WHEN NOT TO USE:
Args: date: Date in ISO 8601 format (YYYY-MM-DD), e.g., "1785-08-29" ctx: FastMCP Context Returns: List of dictionaries with date info and event descriptions. Multiple events may occur on the same date. |
| sd_get_chronology_entriesA | Retrieve chronology entries for a date range. PURPOSE: Access events from Schleiermacher's life across a time period WHEN TO USE:
WHEN NOT TO USE:
Args: date_from: Start date in ISO 8601 format (YYYY-MM-DD) date_to: End date in ISO 8601 format (YYYY-MM-DD) ctx: FastMCP Context Returns: List of dictionaries with date info and event descriptions, sorted chronologically. Includes both specific dates and date ranges that overlap with the query range. |
| sd_get_chronology_yearA | Retrieve all chronology entries for a specific year. PURPOSE: Access complete biographical timeline for a year in Schleiermacher's life WHEN TO USE:
WHEN NOT TO USE:
Args: year: Year (e.g., 1785) ctx: FastMCP Context Returns: Dictionary with year, heading, and list of chronology entries. Entries are sorted chronologically within the year. |
| mop_browse_documentsA | Browse files and subcollections in MoP. PURPOSE: Überblick über verfügbare Dateien in der MoP-Edition WHEN TO USE:
WHEN NOT TO USE:
Args: collection: Collection-Name (Texte, Register) limit: Maximale Anzahl Dateien ctx: FastMCP Context für Progress Returns: Dict mit 'files' und 'subcollections' Liste |
| mop_search_documentsA | Volltextsuche in MoP-Dokumenten. PURPOSE: Dokumente finden, die einen bestimmten Begriff enthalten WHEN TO USE:
WHEN NOT TO USE:
Args: keyword: Suchbegriff collection: Collection (Texte) max_results: Maximale Ergebnisse ctx: FastMCP Context Returns: Liste von SearchResult-Objekten |
| mop_get_documentA | Vollständiges Dokument abrufen. PURPOSE: Detaillierte Ansicht eines spezifischen Dokuments WHEN TO USE:
WHEN NOT TO USE:
Args: document_id: Die xml:id des Dokuments include_xml: Ob TEI-XML inkludiert werden soll ctx: FastMCP Context Returns: Document-Objekt mit Metadaten und Content |
| mop_search_registerA | Suche in MoP-Registern. PURPOSE: Strukturierte Registereinträge finden WHEN TO USE:
WHEN NOT TO USE:
Args: query: Suchbegriff register_type: Register (personen, orte, institutionen, hoefe, werke, aemter) max_results: Maximale Ergebnisse ctx: FastMCP Context Returns: Liste von Register-Einträgen mit id, name, type, gnd (optional) |
| mop_get_register_entryA | Detailansicht eines Registereintrags. PURPOSE: Vollständige Informationen zu Person, Ort, etc. WHEN TO USE:
Args: entry_id: ID des Registereintrags register_type: Register-Typ ctx: FastMCP Context Returns: Dict mit allen verfügbaren Informationen |
| mop_search_biogrammeA | Suche in MoP-Biogrammen (detaillierte Biografien). PURPOSE: Detaillierte biografische Einträge finden WHEN TO USE:
WHEN NOT TO USE:
Args: query: Suchbegriff (Name) birth_year: Filter nach Geburtsjahr death_year: Filter nach Sterbejahr max_results: Maximale Ergebnisse ctx: FastMCP Context Returns: Liste von Biogramm-Treffern mit id, name, birth, death, gnd |
| mop_get_biogramm_by_idA | Vollständiges Biogramm mit allen Details abrufen. PURPOSE: Detaillierte biografische Daten einer Person abrufen WHEN TO USE:
Args: biogramm_id: XML-ID des Biogramms (z.B. "P0005251") ctx: FastMCP Context Returns: Dict mit allen biografischen Daten strukturiert |
| mop_extract_family_networkA | Familiennetzwerk aus einem Biogramm extrahieren. PURPOSE: Verwandtschaftsbeziehungen analysieren WHEN TO USE:
Args: biogramm_id: XML-ID des Biogramms ctx: FastMCP Context Returns: Dict mit Familienrelationen strukturiert nach Typ |
| mop_get_residential_topographyA | Fetch complete residential topography dataset for a specific year. PURPOSE: Retrieve GeoJSON data with addresses and locations of court officials, royal family members, and other persons/institutions in Berlin and Prussia. WHEN TO USE:
WHEN NOT TO USE:
Args: year: Year for which to retrieve data (1800, 1845, 1872, 1891, or 1914) ctx: FastMCP Context for progress reporting Returns: Dict with: - year: The requested year - total_features: Total number of entries - features_with_coordinates: Number of entries with valid geographic coordinates - categories: Count of entries per category - cities: Count of entries per city - sample_features: First 10 features as examples - query_methods: Available search methods Raises: ToolError: If year is not available or API request fails |
| mop_search_residential_topographyA | Search residential topography data with multiple filters. PURPOSE: Find persons/institutions by various criteria in historical address data. WHEN TO USE:
WHEN NOT TO USE:
Args: year: Year for data (1800, 1845, 1872, 1891, or 1914) name: Last name (partial match, case-insensitive) vorname: First name (partial match, case-insensitive) kategorie: Category filter (e.g., "Königliche Familie", "Diplomatie") taetigkeit: Occupation/activity filter stadt: City filter (partial match) strasse: Street name filter (partial match) ediarum_id: Exact Ediarum-ID match only_with_coordinates: Return only entries with valid geographic coordinates max_results: Maximum number of results to return ctx: FastMCP Context Returns: Dict with: - year: The queried year - filters_applied: List of active filters - total_matches: Number of matching entries - returned_results: Number of results in response (limited by max_results) - results: List of matching features Raises: ToolError: If year is not available or no filters provided |
| mop_list_available_wohntopo_yearsA | List all available years for residential topography data. PURPOSE: Show which years have Wohntopographie datasets available. WHEN TO USE:
Returns: Dict with available years and description |
| mop_search_adjutanten_journalsA | Search in Adjutantenjournale (court adjutant journals). PURPOSE: Find daily court journal entries documenting royal activities, audiences, meetings, and events. Each entry shows who was on duty and what happened. WHEN TO USE:
WHEN NOT TO USE:
Args: query: Full-text search term (searches in journal text) monarch: Filter by monarch (Friedrich_Wilhelm_IV, Wilhelm_I, Wilhelm_II, Friedrich_III) date_from: Start date in ISO format (YYYY-MM-DD), e.g., "1861-01-01" date_to: End date in ISO format (YYYY-MM-DD), e.g., "1861-12-31" person_key: Filter by person mentioned (register key, e.g., "P0002157") place_key: Filter by place mentioned (register key, e.g., "P0003556") limit: Maximum number of results (default: 50) ctx: FastMCP Context for progress reporting Returns: List of journal entries with: - id: Document ID - monarch: Which monarch's reign - date_from/date_to: Time range covered - place: Where the court was located - authors: Adjutants who wrote the entry - snippet: Text excerpt showing matched content - url: Link to full entry on website Raises: ToolError: If monarch is invalid or query fails |
| mop_get_adjutanten_journal_entryA | Retrieve full text and metadata of a specific journal entry. PURPOSE: Get complete details of a daily court journal entry. WHEN TO USE:
WHEN NOT TO USE:
Args: document_id: Document ID from search results (e.g., "P0005285") ctx: FastMCP Context for progress reporting Returns: Dict with: - id: Document ID - monarch: Which monarch's reign - date_from/date_to: Time range covered - shelfmark: Archive reference - days: List of daily entries, each with: - date: ISO date - place: Location - authors: Adjutants on duty - text: Full journal text for that day - url: Link to online edition Raises: ToolError: If document not found or retrieval fails |
| mop_list_adjutanten_by_monarchA | List all adjutants who served under a specific monarch. PURPOSE: Identify who served as adjutant and when. WHEN TO USE:
WHEN NOT TO USE:
Args: monarch: Monarch name (Friedrich_Wilhelm_IV, Wilhelm_I, Wilhelm_II, Friedrich_III) ctx: FastMCP Context for progress reporting Returns: Dict with: - monarch: Monarch name - total_entries: Number of journal entries analyzed - adjutants: List of adjutants with: - name: Full name - person_key: Register ID - entries_count: How many times they wrote entries - date_range: First and last appearance Raises: ToolError: If monarch is invalid or query fails |
| mop_check_database_connectionA | Check if the database is reachable and responsive. PURPOSE: Verify database connectivity for troubleshooting. WHEN TO USE:
Returns: DatabaseStatus object with connection status, version, and paths |
| mop_execute_xqueryA | Execute a raw XQuery against the database. PURPOSE: Run custom queries for advanced users or debugging. WHEN TO USE:
WHEN NOT TO USE:
Args: query: XQuery string to execute max_results: Maximum number of results to return Returns: Raw query result as string (usually XML) |
| cs_search_for_gnd_idA | Search for GND IDs by name using Lobid GND API. PURPOSE: Find GND identifiers for persons, places, or corporate bodies. WHEN TO USE:
WHEN NOT TO USE:
Args: name_query: Name or term to search for (e.g., "Goethe", "Humboldt") limit: Maximum number of results to return Returns: List of dicts with 'id' (GND URI) and 'label' for matching entities Example: >>> results = await search_for_gnd_id("Wilhelm von Humboldt") >>> gnd_id = results[0]['id'].split('/')[-1] # Extract ID from URI >>> letters = await search_correspondences(person_gnd=gnd_id) |
| cs_search_for_geonames_idA | Search for GeoNames IDs by place name. PURPOSE: Find GeoNames identifiers for places to use as filters. WHEN TO USE:
WHEN NOT TO USE:
Args: place_query: Place name to search for (e.g., "Berlin", "Paris") country: Optional ISO-2 country code to restrict search (e.g., "DE", "FR") limit: Maximum number of results to return Returns: List of dicts with place information: - geonameId: The GeoNames ID (use this for correspSearch) - name: Place name - countryCode: ISO-2 country code - lat, lng: Coordinates - adminName1: First-level admin division (e.g., state) - population: Population count (if available) Example: >>> results = await search_for_geonames_id("Berlin", country="DE") >>> geonames_id = str(results[0]['geonameId']) >>> letters = await search_correspondences(place_geonames=geonames_id) |
| cs_get_place_geonames_idA | Get the GeoNames ID for a place (convenience function). PURPOSE: Quick lookup of a single GeoNames ID for a place. WHEN TO USE:
WHEN NOT TO USE:
Args: place_name: Name of the place (e.g., "Berlin", "Paris") country: Optional ISO-2 country code to restrict search (e.g., "DE") Returns: GeoNames ID as integer, or None if not found Example: >>> berlin_id = await get_place_geonames_id("Berlin", country="DE") >>> # Returns: 2950159 >>> letters = await search_correspondences(place_geonames=str(berlin_id)) |
| cs_search_for_wikidata_occupationA | Search for occupation entities in Wikidata. PURPOSE: Find Wikidata IDs for occupations to filter correspondence by profession. WHEN TO USE:
WHEN NOT TO USE:
Args: occupation_query: Occupation name to search for (e.g., "Dichter", "Philosoph", "Maler") limit: Maximum number of results to return Returns: List of dicts with occupation entities: - id: Wikidata ID (e.g., "Q36180") - label: Occupation name in German - description: Brief description - uri: Full Wikidata URI Example: >>> results = await search_for_wikidata_occupation("Schriftsteller") >>> occupation_id = results[0]['id'] # e.g., "Q36180" >>> letters = await search_correspondences(occupation_wikidata=occupation_id) |
| cs_search_wikidata_entityA | Search for any entity in Wikidata. PURPOSE: General-purpose Wikidata entity search for various use cases. WHEN TO USE:
WHEN NOT TO USE:
Args: query: Search term for any Wikidata entity limit: Maximum number of results to return language: Language code for labels (default: "de") Returns: List of dicts with entity information: - id: Wikidata ID (e.g., "Q36180") - label: Entity name - description: Brief description - uri: Full Wikidata URI Example: >>> results = await search_wikidata_entity("Aufklärung") >>> entity_id = results[0]['id'] |
| cs_search_correspondencesA | Cross-Edition Briefsuche über correspSearch API. PURPOSE: Briefe über Edition-Grenzen hinweg finden WHEN TO USE:
WHEN NOT TO USE:
Args: person_gnd: GND-ID(s) - einzelne ID oder Liste (z.B. "118540238" oder ["118540238", "118607626"]) person_viaf: VIAF-ID(s) - einzelne ID oder Liste (alternativ zu GND) start_date: Start-Datum (ISO 8601, z.B. "1810-01-01") end_date: End-Datum (ISO 8601, z.B. "1815-12-31") place_geonames: GeoNames-ID eines Ortes (z.B. "2879139" für Leipzig) occupation_wikidata: Wikidata-ID eines Berufs (z.B. "Q36180" für Schriftsteller) edition_id: UUID einer Edition zur Filterung cmif_url: URL einer CMIF-Datei (z.B. "https://gams.uni-graz.at/context:hsa/CMIF") availability: "online", "print" oder "hybrid" text_query: Volltextsuche in Briefinhalten (experimentell, undokumentiert) gender: "male" (männlich), "female" (weiblich), oder "unknown" (unbekannt) role: "sent" (nur als Absender), "received" (nur als Empfänger), oder "mentioned" (nur erwähnt) place_role: "sent" (Schreibort) oder "received" (Empfangsort) page: Seite der Ergebnisse (1-indiziert, je 100 Treffer) max_results: Maximale Ergebnisse (zur Anzeige-Begrenzung) ctx: FastMCP Context Returns: CorrespSearchResult mit Briefen und Paginierungs-Info Note: Mehrere Personen (Liste) werden mit AND kombiniert - findet nur Briefe, die ALLE angegebenen Personen enthalten. |
| cs_get_edition_infoA | Informationen über eine Edition in correspSearch abrufen. PURPOSE: Metadaten zu registrierten Editionen WHEN TO USE:
Args: edition_id: Edition-UUID in correspSearch ctx: FastMCP Context Returns: EditionInfo mit Metadaten zur Edition |
| cs_search_correspondent_networkA | Korrespondenz-Netzwerk einer Person analysieren. PURPOSE: Netzwerkanalyse von Korrespondenzen WHEN TO USE:
Args: person_gnd: GND-ID der fokalen Person start_date: Optional: Start-Datum für Zeitfilter end_date: Optional: End-Datum für Zeitfilter max_correspondents: Maximale Anzahl Korrespondenten im Ergebnis max_letters_to_analyze: Maximale Anzahl Briefe zu analysieren (pro Richtung) ctx: FastMCP Context Returns: Dict mit Netzwerk-Statistiken und Top-Korrespondenten |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| sd_get_project_info | Information about Schleiermacher Digital edition. Provides context about the project, data structure, and available content. Loads information from project_info.md file. |
| sd_get_citation_policy | Critical citation guidelines to prevent hallucinated references. READ THIS FIRST before citing any documents from the Schleiermacher edition. Explains how to properly cite documents and avoid inventing document IDs. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/telota/bbaw-dse-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server