Skip to main content
Glama
riksarkivet-mcp
by bucklo

riksarkivet-mcp

An MCP server for Riksarkivet (the Swedish National Archives) open data. It lets an AI assistant do Swedish genealogy research from start to finish: work out which parish a village belongs to, find the digitised church books, and fetch and read the scanned pages, getting back a ready-made source citation.

It only uses Riksarkivet's public, keyless APIs:

API

Used for

Search API

archive catalogue, topography, indexed birth/marriage/title-deed registers

IIIF Presentation & Image API

browsing digitised volumes and fetching page images

Metadata is open data and the images are public domain (PDM 1.0).

Tools

Tool

What it does

search_records

Free text / name / place / year search, filterable by record type (birth, marriage, title_deed, volume, archive, place, parish, settlement, agent, …)

get_register_record

Full entry of an indexed register record: parents, occupations, residence, witnesses, volume and page

find_place

Village/farm/parish → parish and province, including historical parishes (e.g. Harstad, merged into Väderstad 1891)

parish_archive

A parish's digitised church-book volumes grouped by series (C births, A I household examinations, E I marriages, F deaths, …), with date ranges and volume ids

browse

Walk any archive in IIIF (fonds → series → volumes), including court records, military rolls and maps

volume_pages

A volume's date range, remarks, and image number → printed page number map

get_page

Returns a page image (whole page or a zoomed region) plus its Källhänvisning and viewer link

Typical flow

find_place("Kälstad")            → Källstad, Källstads församling, Östergötland
parish_archive("Heda", "C")      → C/5 (1870-1888) [volume: A0001234] …
volume_pages("A0001234")         → Bild:Sida map
get_page("A0001234", image=57)   → scan + "Heda kyrkoarkiv, Födelse- och dopböcker, SE/VALA/00128/C/5 (1870-1888), bildid: A0001234_00057, sida 108"
get_page("A0001234", image=57, region="pct:0,40,60,30", width=2000)   → zoom on one entry

Related MCP server: Riksarkivet MCP Server

Limitations

  • Coverage of images. Only volumes that Riksarkivet scanned itself are served over IIIF, and for most parishes that means roughly 1840–1900. Other periods may be available on sok.riksarkivet.se or through ArkivDigital.

  • Indexed registers are regional. The searchable birth and marriage registers mainly cover Skåne, Blekinge, Halland and parts of Norrland. An empty search result does not mean a record doesn't exist, so read the church books with get_page instead.

  • No census search. The census databases (folkräkningar) and other database searches on sok.riksarkivet.se have no public API and are not included.

Install

Requires uv.

git clone https://github.com/bucklo/riksarkivet-mcp
cd riksarkivet-mcp
uv sync

Claude Code

claude mcp add riksarkivet -- uv run --directory /path/to/riksarkivet-mcp riksarkivet-mcp

Claude Desktop / other clients

{
  "mcpServers": {
    "riksarkivet": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/riksarkivet-mcp", "riksarkivet-mcp"]
    }
  }
}

Development

uv run pytest            # unit tests
uv run pytest -m live    # smoke tests against the real APIs
uv run ruff check .

License

MIT. Not affiliated with Riksarkivet.

Available Tools

7 tools
browseA

List the children of any Riksarkivet archive unit in IIIF (fonds -> series -> volumes). Use for non-church archives too (courts, military rolls, maps). archive_id is the id from search_records or parish_archive.

Inputs: archive_id (required). Returns: result

find_placeB

Look up a place (village, farm, parish) in Riksarkivet's topographic register and show which parish/province it belongs to, including historical parishes (e.g. Harstad parish, merged into Väderstad 1891).

Inputs: name (required), limit. Returns: result

get_pageA

Fetch a scanned page so it can be read. Returns the image plus a ready-made source citation (Källhänvisning) and viewer link.

volume: volume id like 'A0006950', a manifest URL, or a full image id
  like 'A0006950_00010' (then image is taken from it).
image: image number (Bild). page: printed page number (Sida) instead of image.
width: output width in px (400-3000). Use ~1600 for an overview, then zoom with region.
region: 'full', 'pct:x,y,w,h' (percent of the page) or 'x,y,w,h' pixels - e.g.
  'pct:50,0,50,50' = top-right quarter, good for reading small handwriting.
rotation: 0/90/180/270.

Inputs: volume (required), page, image, width, +2 more. Returns: result

get_register_recordA

Full details of an indexed register entry (birth, marriage, title deed) by its id from search_records - parents, occupations, residence, witnesses, volume/page.

Inputs: record_id (required). Returns: result

parish_archiveA

List the digitised volumes of a parish's church archive (kyrkoarkiv), grouped by series, with date ranges and the volume id to pass to volume_pages/get_page.

parish: e.g. "Heda", "Väderstad", "Appuna".
series: optional filter on series code or name, e.g. "C" (födelse- och dopböcker),
  "A I" (husförhörslängder), "E I" (vigsel), "F" (död), "A II" (församlingsböcker),
  "B" (flyttningslängder).

Only volumes scanned by Riksarkivet itself are listed (mostly c. 1840-1900). Lines
starting "Se:" mean the records are bound into another listed volume.

Inputs: parish (required), series. Returns: result

search_recordsA

Search Riksarkivet's catalogue and indexed registers.

text: free text. name: person name. place: parish/place name.
year_min/year_max: restrict by year.
record_type: birth, marriage, title_deed, register, volume, record, archive (fonds),
  series, place, parish, settlement, agent. Omit for everything.
only_digitised: only material with scanned images.
limit (max 100) / offset for paging.

Note: indexed birth/marriage registers cover only some regions; use parish_archive +
get_page to read church books directly elsewhere (e.g. Östergötland).

Inputs: name, text, limit, place, +5 more. Returns: result

volume_pagesA

Show a volume's title, date range, remarks and the mapping image number -> printed page number (Bild:Sida). volume: id like 'A0006950' or a manifest URL.

Inputs: volume (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 7 tools

    Disambiguation4/5

    Most tools map to distinct steps of the archival workflow: search -> record detail -> place lookup -> archive browsing -> volume metadata -> page image. The only real overlap is parish_archive vs browse, since both list children of an archive unit, but the description explicitly scopes browse to non-church archives, which mitigates confusion.

    Naming Consistency3/5

    There is a partial verb_noun pattern (search_records, get_register_record, get_page, find_place, volume_pages) but it is broken by bare 'browse' and the noun-only 'parish_archive'. Readable, but conventions are mixed rather than predictable.

    Tool Count5/5

    Seven tools is a tight, well-scoped set that mirrors the research workflow without redundancy. Each tool earns its place, from search to image retrieval.

    Completeness4/5

    The surface covers the full chain of finding, inspecting and reading digitised material, plus citations. Minor gaps exist: no tool to resolve an archive/fonds-level description or to start browsing from a root archive id, and no structured export of a record's citation.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to create, edit, and query genealogical data from GEDCOM files. Supports complex genealogy searches, automatic data enrichment from web sources, relationship analysis, and biography generation for individuals and families.
      17
      MIT
    • A
      license
      A
      quality
      A
      maintenance
      Enables users to search and access digital collections from the Swedish National Archives (Riksarkivet) through multiple APIs. Supports searching records by keywords, exploring collections, and downloading historical images and documents.
      2
      27
      Apache 2.0
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to search and retrieve consolidated Swedish statutes (SFS) from the Riksdagen open data API, with verifiable citations and persistent identifiers.
      4
      95 PyPI
      Apache 2.0