Tool tree
gradeNot graded
page: Every page
search_lettersAnswer
Semantic full-text search across 665 WW1 Danish letters using multilingual embeddings. Returns ranked matches with metadata and a representative text snippet. The search engine initialises on first call (downloads ~30 MB model + embeddings); subsequent calls are fast. Supports Danish and English queries.
View tool JSON
{
"name": "search_letters",
"kind": "answer",
"impl": "imperative",
"description": "Semantic full-text search across 665 WW1 Danish letters using multilingual embeddings. Returns ranked matches with metadata and a representative text snippet. The search engine initialises on first call (downloads ~30 MB model + embeddings); subsequent calls are fast. Supports Danish and English queries.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query. Supports Danish and English. Examples: 'soldater i skyttegraven', 'Christmas 1915', 'hjemve og familie'."
},
"top_k": {
"type": "integer",
"description": "Maximum number of results to return. Defaults to 10, max 50.",
"default": 10,
"minimum": 1,
"maximum": 50
}
},
"required": [
"query"
]
},
"page": "/"
}find_similar_lettersAnswer
Returns pre-computed nearest-neighbour letters for a given letter ID, ranked by embedding similarity. Useful for corpus exploration and finding thematic clusters. Similarity scores are cosine similarity in embedding space.
View tool JSON
{
"name": "find_similar_letters",
"kind": "answer",
"impl": "imperative",
"description": "Returns pre-computed nearest-neighbour letters for a given letter ID, ranked by embedding similarity. Useful for corpus exploration and finding thematic clusters. Similarity scores are cosine similarity in embedding space.",
"inputSchema": {
"type": "object",
"properties": {
"letter_id": {
"type": "integer",
"description": "Numeric ID of the source letter."
},
"top_k": {
"type": "integer",
"description": "Maximum number of similar letters to return. Defaults to 5, max 20.",
"default": 5,
"minimum": 1,
"maximum": 20
}
},
"required": [
"letter_id"
]
},
"page": "/"
}browse_lettersAnswer
Returns a paginated list of letter metadata filtered by date range, sender, recipient, or place. Does not include letter body text — use get_letter for full content. All text filters are case-insensitive substring matches.
View tool JSON
{
"name": "browse_letters",
"kind": "answer",
"impl": "imperative",
"description": "Returns a paginated list of letter metadata filtered by date range, sender, recipient, or place. Does not include letter body text — use get_letter for full content. All text filters are case-insensitive substring matches.",
"inputSchema": {
"type": "object",
"properties": {
"date_from": {
"type": "string",
"description": "ISO 8601 date string (YYYY-MM-DD). Only include letters on or after this date."
},
"date_to": {
"type": "string",
"description": "ISO 8601 date string (YYYY-MM-DD). Only include letters on or before this date."
},
"sender": {
"type": "string",
"description": "Case-insensitive substring filter on the sender field."
},
"recipient": {
"type": "string",
"description": "Case-insensitive substring filter on the recipient field."
},
"place": {
"type": "string",
"description": "Case-insensitive substring filter on the place field (writing location)."
},
"offset": {
"type": "integer",
"description": "Zero-based pagination offset. Defaults to 0.",
"default": 0,
"minimum": 0
},
"limit": {
"type": "integer",
"description": "Maximum number of letters to return per page. Defaults to 20, max 100.",
"default": 20,
"minimum": 1,
"maximum": 100
}
},
"required": []
},
"page": "/"
}get_letterAnswer
Fetch a specific WW1 Danish letter by ID (1-665). Returns full text in original archaic Danish and modernized Danish, plus metadata. Optionally includes sentiment, emotion, and narrative arc analysis.
View tool JSON
{
"name": "get_letter",
"kind": "answer",
"impl": "imperative",
"description": "Fetch a specific WW1 Danish letter by ID (1-665). Returns full text in original archaic Danish and modernized Danish, plus metadata. Optionally includes sentiment, emotion, and narrative arc analysis.",
"inputSchema": {
"type": "object",
"properties": {
"letter_id": {
"type": "integer",
"minimum": 1,
"maximum": 665,
"description": "The letter ID (1-665)"
},
"include_analysis": {
"type": "boolean",
"default": false,
"description": "If true, include sentiment scores, emotion vectors, and narrative arc type"
}
},
"required": [
"letter_id"
]
},
"page": "/"
}get_personAnswer
Fetch a specific person from the WW1 Danish letters social network by ID. Returns biographical data, letters they sent/received, and optionally their network connections (degree centrality, betweenness centrality, pagerank).
View tool JSON
{
"name": "get_person",
"kind": "answer",
"impl": "imperative",
"description": "Fetch a specific person from the WW1 Danish letters social network by ID. Returns biographical data, letters they sent/received, and optionally their network connections (degree centrality, betweenness centrality, pagerank).",
"inputSchema": {
"type": "object",
"properties": {
"person_id": {
"type": "string",
"description": "The person ID (canonical name)"
},
"include_letters": {
"type": "boolean",
"default": true,
"description": "If true, include list of letters sent/received by this person"
},
"include_network": {
"type": "boolean",
"default": false,
"description": "If true, include network metrics and connected persons from social-network.json"
}
},
"required": [
"person_id"
]
},
"page": "/"
}get_placeAnswer
Fetch a specific place (location) mentioned in the WW1 Danish letters. Returns geographical data (coordinates, Wikidata link), photos, and optionally the list of letters mentioning this place.
View tool JSON
{
"name": "get_place",
"kind": "answer",
"impl": "imperative",
"description": "Fetch a specific place (location) mentioned in the WW1 Danish letters. Returns geographical data (coordinates, Wikidata link), photos, and optionally the list of letters mentioning this place.",
"inputSchema": {
"type": "object",
"properties": {
"place_id": {
"type": "string",
"description": "The place ID (name)"
},
"include_letters": {
"type": "boolean",
"default": true,
"description": "If true, include list of letters mentioning this place"
}
},
"required": [
"place_id"
]
},
"page": "/"
}get_social_networkAnswer
Fetch the WW1 Danish letters social network. Returns nodes (persons) ranked by centrality/pagerank, and optionally edges (connections) between them. If person_id is provided, returns that person's subgraph; otherwise returns top 20 nodes by pagerank.
View tool JSON
{
"name": "get_social_network",
"kind": "answer",
"impl": "imperative",
"description": "Fetch the WW1 Danish letters social network. Returns nodes (persons) ranked by centrality/pagerank, and optionally edges (connections) between them. If person_id is provided, returns that person's subgraph; otherwise returns top 20 nodes by pagerank.",
"inputSchema": {
"type": "object",
"properties": {
"person_id": {
"type": "string",
"description": "Optional: if provided, return only this person's node and their immediate connections"
},
"include_edges": {
"type": "boolean",
"default": true,
"description": "If true, include edges (connections) in the result"
},
"include_temporal_slices": {
"type": "boolean",
"default": false,
"description": "If true, include yearly breakdown of network growth over the war period"
}
},
"required": []
},
"page": "/"
}get_sentimentAnswer
Retrieve sentiment analysis for a single letter, a date range, or a corpus summary. Returns emotional intensity (CVP), dominant emotions, and negative ratios.
View tool JSON
{
"name": "get_sentiment",
"kind": "answer",
"impl": "imperative",
"description": "Retrieve sentiment analysis for a single letter, a date range, or a corpus summary. Returns emotional intensity (CVP), dominant emotions, and negative ratios.",
"inputSchema": {
"type": "object",
"properties": {
"letter_id": {
"type": "integer",
"minimum": 1,
"maximum": 665,
"description": "Letter ID (1-665). If provided, returns sentiment for that letter."
},
"date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date (YYYY-MM-DD). If provided with date_to, returns range analysis."
},
"date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date (YYYY-MM-DD). If provided with date_from, returns range analysis."
}
},
"description": "Provide either letter_id, date_from/date_to, or neither (for corpus overview)."
},
"page": "/"
}get_narrative_arcAnswer
Retrieve narrative arc analysis for a single letter or a date range. Identifies arc types (rising, falling, flat, etc.) and emotional trajectories.
View tool JSON
{
"name": "get_narrative_arc",
"kind": "answer",
"impl": "imperative",
"description": "Retrieve narrative arc analysis for a single letter or a date range. Identifies arc types (rising, falling, flat, etc.) and emotional trajectories.",
"inputSchema": {
"type": "object",
"properties": {
"letter_id": {
"type": "integer",
"minimum": 1,
"maximum": 665,
"description": "Letter ID (1-665). If provided, returns arc for that letter."
},
"date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date (YYYY-MM-DD). If provided with date_to, returns range analysis."
},
"date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date (YYYY-MM-DD). If provided with date_from, returns range analysis."
}
},
"description": "Provide either letter_id or date_from/date_to."
},
"page": "/"
}navigate_toAction
Navigates to a specific letter, person, place, or application view within the jernkorsetbreve app
View tool JSON
{
"name": "navigate_to",
"kind": "act",
"impl": "imperative",
"description": "Navigates to a specific letter, person, place, or application view within the jernkorsetbreve app",
"inputSchema": {
"type": "object",
"properties": {
"target": {
"type": "string",
"enum": [
"letter",
"person",
"place",
"view"
],
"description": "What to navigate to: a letter, person, place, or application view"
},
"id": {
"oneOf": [
{
"type": "integer",
"description": "Letter ID (1-665)"
},
{
"type": "string",
"description": "Person/place slug or view name"
}
],
"description": "The ID or identifier for the target (letter ID, person slug, place slug, or view name)"
}
},
"required": [
"target",
"id"
]
},
"page": "/"
}