WarSampo Finnish WWII Knowledge Graph: SPARQL Query (Persons, Units, Battles, Places)
ldfwarsa/sparql-query
Runs a read-only SPARQL SELECT query against the WarSampo Knowledge Graph, the Finnish Second World War linked-data publication of Aalto University: persons, military units, battles and other events, places, photographs, war diaries and casualty records (CC BY). You write the SPARQL; the answer is the standard SPARQL results document with the selected variables under `head.vars` and one object per solution under `results.bindings`. The query must end with LIMIT n (1 to 1000), optionally followed by OFFSET m; SELECT only, at most 2000 characters. An empty `bindings` list is a valid empty answer. WarSampo data as served by Eden Engine; not an official Aalto University product.
Price
$0.0026 per call
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.
Data source
WarSampo Knowledge Graph (Aalto University SeCo)
WarSampo Knowledge Graph, Semantic Computing Research Group (SeCo), Aalto University / Linked Data Finland (ldf.fi), published under CC BY (https://creativecommons.org/licenses/by/4.0/). Data fields are passed through as the endpoint sends them. Served by Eden Engine; not an official Aalto University or WarSampo product.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "ldfwarsa/sparql-query" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "ldfwarsa/sparql-query" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "ldfwarsa/sparql-query", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "ldfwarsa/sparql-query", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0026 |
- Updated
- Oct 21, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"pattern": "^(?=[\\s\\S]*\\b[Ss][Ee][Ll][Ee][Cc][Tt]\\b)(?:[^#<]|<(?![^<>\"{}|^\\x60\\\\\\s]*>)|<[^<>\"{}|^\\x60\\\\\\s]*>)*\\b[Ll][Ii][Mm][Ii][Tt]\\s+([1-9][0-9]{0,2}|1000)(\\s+[Oo][Ff][Ff][Ss][Ee][Tt]\\s+[0-9]{1,7})?\\s*$",
"maxLength": 2000,
"minLength": 20,
"description": "A SPARQL SELECT query of at most 2000 characters that ends with LIMIT n (n from 1 to 1000), optionally followed by OFFSET m, for example SELECT ?s ?l WHERE { ?s a <http://ldf.fi/schema/warsa/Battle> ; <http://www.w3.org/2004/02/skos/core#prefLabel> ?l } LIMIT 5. The LIMIT is required because the graph holds millions of statements; page with OFFSET. A query without it, one that is not a SELECT, or one with a # comment outside a <...> IRI is refused before any call is made; a query the engine cannot parse is refused as invalid."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"head",
"results"
],
"properties": {
"head": {
"type": "object",
"properties": {
"vars": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "`vars` lists the selected variable names.",
"additionalProperties": true
},
"meta": {
"type": "object",
"description": "Engine statistics where the endpoint adds them (query time, result size).",
"additionalProperties": true
},
"results": {
"type": "object",
"properties": {
"bindings": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "One object per solution, keyed by variable name. Each value is a term object: `type` (uri or literal), `value` (a string) and, for typed or language-tagged literals, `datatype` or `xml:lang`. A variable left unbound by an OPTIONAL is absent from its row. An empty list means no match."
}
},
"additionalProperties": true
}
},
"description": "The SPARQL 1.1 query results document (application/sparql-results+json), passed through as the endpoint sent it.",
"additionalProperties": true
}