Skip to content
Eden Engine

Mapping Manuscript Migrations: SPARQL Query

ldfmmm/sparql-select

Runs a read-only SPARQL SELECT query against the Mapping Manuscript Migrations knowledge graph (https://ldf.fi/mmm/), which links medieval and Renaissance manuscripts to their production and ownership events, people, places and collections, merged from the Bodleian Library, the Schoenberg Database and Bibale. You write the SPARQL, for example SELECT ?s ?label WHERE { ?s <http://www.w3.org/2000/01/rdf-schema#label> ?label } LIMIT 5. The answer is the standard SPARQL JSON result: `head.vars` and `results.bindings`, one object per solution with each variable as {type, value}. The query must end with LIMIT n (1 to 100), optionally followed by OFFSET m; page with OFFSET. SELECT only (PREFIX lines allowed before it), at most 2000 characters, no SERVICE clause. Aggregates over the whole graph can take 25 seconds or more. A query that matches nothing returns empty bindings. Use manuscript-search to find a manuscript by shelfmark text.

activeper callv1

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

Mapping Manuscript Migrations (Linked Data Finland)

Data from Mapping Manuscript Migrations (MMM), published by Linked Data Finland (https://ldf.fi/mmm/), passed through unmodified. Served by Eden Engine; not an official Mapping Manuscript Migrations or Linked Data Finland 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.

agent
// 1. search: find the tool
omnial_search({ query: "what you need" })

// 2. inspect: price and input schema
omnial_inspect({ tool: "ldfmmm/sparql-select" })

// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "ldfmmm/sparql-select" })

// 4. run: price the exact call first, then run it
omnial_execute({ tool: "ldfmmm/sparql-select", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "ldfmmm/sparql-select", input: { /* ... */ } })

// 5. settle: the call is charged when it finishes, nothing to do

Not 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.

ChargePrice
Per call
$0.0026
Updated
Oct 25, 2026

Input and output schemas

Input schema
input_schema.json
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "pattern": "^(?![\\s\\S]*(?:(?:^|[^A-Za-z?$:])[Ss][Ee][Rr][Vv][Ii][Cc][Ee](?![A-Za-z0-9_.-]*:)|\\\\[uU]))(\\s*([Pp][Rr][Ee][Ff][Ii][Xx]\\s+[A-Za-z0-9_.-]*:\\s*<[^<>\\s]*>|[Bb][Aa][Ss][Ee]\\s*<[^<>\\s]*>))*\\s*[Ss][Ee][Ll][Ee][Cc][Tt]\\b[\\s\\S]*\\b[Ll][Ii][Mm][Ii][Tt]\\s+([1-9][0-9]?|100)(\\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 100), optionally followed by OFFSET m, for example SELECT ?s ?p ?o WHERE {?s ?p ?o} LIMIT 5. PREFIX or BASE lines may come first. A query without the LIMIT, one with a limit above 100, one that is not a SELECT, one containing a SERVICE clause, or one containing a Unicode escape sequence (a backslash followed by u or U) is refused before any call is made; a query the SPARQL parser rejects is refused as invalid."
    }
  },
  "additionalProperties": false
}
Output schema
output_schema.json
{
  "type": "object",
  "required": [
    "head",
    "results"
  ],
  "properties": {
    "head": {
      "type": "object",
      "properties": {
        "vars": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The selected variable names."
        }
      },
      "additionalProperties": true
    },
    "results": {
      "type": "object",
      "required": [
        "bindings"
      ],
      "properties": {
        "bindings": {
          "type": "array",
          "items": {
            "type": "object",
            "description": "One solution: each selected variable maps to {type, value}, plus xml:lang or datatype where the term has one.",
            "additionalProperties": true
          },
          "description": "One object per solution; empty when the query matches nothing."
        }
      },
      "additionalProperties": true
    }
  },
  "description": "The standard SPARQL 1.1 JSON result of the SELECT query.",
  "additionalProperties": true
}