BYOAI: Bring Your Own AI
Query an authoritative machine-readable corpus of 20,355 primary archaeological resources within 20,788 ARCHE records, together with 219 georeferenced findspots, 434 collections, and 9 curated GeoPackages — directly from your own AI client, local agent, or research script.
The BYOAI Philosophy
IUENNA separates the research data from the AI model. The project provides authoritative repository metadata, persistent identifiers, explicit relationships, and open machine-readable interfaces. Researchers can then use the AI environment of their choice without depending on a single commercial platform.
“We provide the archaeological data, provenance, persistent identifiers, and open interfaces. You bring the AI engine.”
ARCHE remains the authoritative long-term repository. The IUENNA web layer is a discovery and retrieval interface derived from ARCHE metadata and is designed to make archaeological research data easier to query reproducibly.
1. Model Context Protocol (MCP) v1.2
The IUENNA MCP server implements JSON-RPC 2.0 over stdio and runs with zero third-party runtime dependencies. Version 1.2.0 exposes seven research tools and now integrates semantic knowledge graph traversal alongside entity discovery and exhaustive primary-resource retrieval.
Setup for Claude Desktop / Cursor / compatible MCP clients
{
"mcpServers": {
"iuenna": {
"command": "python3",
"args": [
"-c",
"import urllib.request; exec(urllib.request.urlopen('https://raw.githubusercontent.com/IUENNA/IUENNA.github.io/main/mcp/server.py').read().decode())"
]
}
}
}
Alternative: Clone the repository and run python3 mcp/server.py or node mcp/index.mjs.
Available MCP Tools
| Tool | Purpose | Key arguments |
|---|---|---|
search_iuenna_corpus | Searches the authoritative arche_corpus.json across 20,355 primary files, including titles, filenames, descriptions, collection paths, places, subjects, and PIDs. | query, limit |
get_findspot_details | Returns findspot metadata and directly associated curated datasets. | name_or_id |
get_related_resources | Resolves a place, dataset, collection, or publication and traverses related datasets, collections, publications, and primary files. Recommended for questions such as “all data about Hemmaberg”. | name_or_id, optional query, limit |
get_graph_neighborhood | Explores the semantic knowledge graph (21,080 nodes, 38,696 edges) around any entity, place, person, dataset, or publication by 1–2 hop neighborhood with optional predicate filtering. | node_or_id, optional hops (1–2), predicate, limit |
get_geodata_catalog | Lists the 9 curated authoritative archaeological GeoPackages. | None |
get_corpus_statistics | Returns repository-level metrics together with separate metadata for the primary-resource corpus. | None |
get_project_bibliography | Queries the public IUENNA Zotero library for project publications, excavation literature, authors, DOIs, and bibliographic metadata. | optional query, limit |
arche_corpus.json contains 20,355 primary resources/files. MCP full-text retrieval operates on the latter rather than treating every repository entity as a file.2. Recommended AI Routing
Use arche_search_index.json for compact discovery of persons, organisations, collections, publications, places, and curated datasets.
Use arche_places.json, then resolve linked curated geodata via arche_datasets.json.
Use arche_corpus.json. This is the exhaustive primary-resource layer containing 20,355 files.
Use arche_graph.json or MCP get_graph_neighborhood to query multi-hop actor-place-publication networks.
Use arche_collections_tree.json and relationships such as parent_id, col, and spatial_ids.
Prefer MCP get_related_resources, which combines place, dataset, collection, publication, and file-level relationships.
Prefer the individual ARCHE Handle PID of the dataset or file actually used, not only the IUENNA web page.
3. Machine-Readable JSON & OpenAPI
IUENNA publishes static JSON snapshots over HTTPS. They require no project-specific API key. ARCHE remains authoritative for current repository metadata, access conditions, and rights information.
Complete Primary-Resource Corpus
20,355 primary archived resources with ARCHE IDs, PIDs, titles, filenames, collection context, hierarchical paths, spatial relationships, subjects, dates, types, coordinates, and descriptions.
Semantic Discovery Index
Compact entity-level discovery index. Use it to identify persons, institutions, collections, publications, places, and curated datasets — not as the exhaustive file corpus.
Archaeological Findspots
219 georeferenced sites with titles, coordinates/WKT, Geonames identifiers, periods, and spatial relationships.
Collection Hierarchy
434 collections and archival dossiers with parent-child relationships, PIDs, counts, and provenance context.
Curated GeoPackages
Metadata, spatial coverage, creators, layer descriptions, and PIDs for 9 primary GIS datasets.
Semantic Knowledge Graph
21,080 nodes and 38,696 directed edges connecting collections, resources, places, persons, institutions, and publications via formal ARCHE ontology predicates.
Corpus Statistics
Repository-level counts and storage metrics. Use together with arche_corpus.json when distinguishing repository entities from primary files.
4. llms.txt for LLM & Agent Discovery
The canonical llms.txt acts as a routing and provenance layer. It tells AI systems which endpoint to use for which type of question, establishes ARCHE as the authoritative repository, and specifies PID-first citation and rights handling.
https://iuenna.github.io/llms.txtFor exhaustive prompts such as “all files”, “all documentation”, or “all data concerning X”, an agent is explicitly instructed not to stop at the curated dataset catalogue or semantic discovery index, but to use arche_corpus.json and the collection hierarchy as well.
5. Minimal Research Recipes
Python: query places
import json
import urllib.request
url = "https://iuenna.github.io/data/arche_places.json"
with urllib.request.urlopen(url) as response:
places = list(json.loads(response.read().decode("utf-8")).values())
hemmaberg = [p for p in places if "hemmaberg" in p.get("title", "").lower()]
print(json.dumps(hemmaberg, ensure_ascii=False, indent=2))Python: explore semantic knowledge graph
import json
import urllib.request
url = "https://iuenna.github.io/data/arche_graph.json"
with urllib.request.urlopen(url) as response:
graph = json.loads(response.read().decode("utf-8"))
nodes = {n["data"]["id"]: n["data"] for n in graph["elements"]["nodes"]}
edges = graph["elements"]["edges"]
# Find all publications authored by Franz Glaser
glaser_id = next((nid for nid, d in nodes.items() if "glaser" in d.get("label", "").lower()), None)
authored = [e["data"]["target"] for e in edges if e["data"]["source"] == glaser_id and e["data"]["predicate"] == "hasAuthor"]
for pub_id in authored:
pub = nodes.get(pub_id, {})
print(f"- {pub.get('label')} (PID: {pub.get('pid')})")Python: exhaustive file-level search
import json
import urllib.request
url = "https://iuenna.github.io/data/arche_corpus.json"
with urllib.request.urlopen(url) as response:
corpus = json.loads(response.read().decode("utf-8"))["resources"]
hits = [r for r in corpus if "georadar" in (
f"{r.get('title','')} {r.get('filename','')} {r.get('description','')}".lower()
)]
print(json.dumps(hits[:20], ensure_ascii=False, indent=2))MCP: relational query
{
"name": "get_related_resources",
"arguments": {
"name_or_id": "Hemmaberg",
"query": "Georadar",
"limit": 50
}
}6. Provenance, Citation & Rights
ARCHE is the authoritative long-term repository. The top-level IUENNA collection is persistently identified by 21.11115/0000-0016-7B39-F.
Recommended project-level citation:
Hagmann, D., & Waldhart, F. (Eds.). (2025). IUENNA – openIng the soUthErn jauNtal as a micro-regioN for future Archaeology. ARCHE – Austrian Research Culture Heritage Extended. https://hdl.handle.net/21.11115/0000-0016-7B39-FWhen using a specific dataset, document, image, GeoPackage, or other archived resource, cite its individual ARCHE PID and metadata rather than only the project homepage.