Skip to main content

MCP server for querying the TEI P5 ODD specification

Project description

tei-mcp

An MCP server that gives LLMs access to the TEI P5 specification. It parses the TEI ODD and exposes tools for element lookup, attribute resolution, content model expansion, nesting validation, document validation, and ODD customisation.

Features

  • Element, class, macro, and module lookup with case-insensitive matching and typo suggestions
  • Attribute resolution across the full TEI class hierarchy (local + inherited)
  • Content model expansion into structured trees with class and macro resolution
  • Nesting validation (direct parent-child and recursive reachability with path tracking)
  • Document validation against TEI P5: content models, attributes, closed value lists, reference integrity, deprecation warnings
  • Single-element validation for incremental editing workflows
  • ODD customisation support: load a project ODD to constrain the schema (moduleRef filtering, elementSpec delete/change, attDef modifications)
  • Regex search across all entity types (elements, classes, macros, modules)
  • Deprecation awareness with validUntil dates and replacement suggestions
  • Attribute suggestion by intent description (keyword matching against attribute descriptions)

Requirements

  • Python 3.10+
  • uv (recommended) or pip

Installation

# Clone and install
git clone https://github.com/Pantagrueliste/tei-mcp.git
cd tei-mcp
uv sync

On first run, the server downloads p5subset.xml from the TEI website (~5 MB) and caches it locally.

Usage

With Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

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

With Claude Code

Add to your project settings (.mcp.json):

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

Standalone

uv run tei-mcp

The server communicates over stdio using the MCP protocol.

Tools

Tool Description
lookup_element Look up an element by name (e.g., persName)
lookup_class Look up a class by name (e.g., att.global)
lookup_macro Look up a macro by name (e.g., macro.paraContent)
list_module_elements List all elements in a module (e.g., namesdates)
search Regex search across all TEI entities
list_attributes Resolve all attributes for an element (local + inherited)
class_membership_chain Show the full class hierarchy chain
expand_content_model Expand content model into a structured tree
valid_children List all valid direct children of an element
check_nesting Check if an element can appear inside another
check_nesting_batch Check multiple nesting pairs in one call
suggest_attribute Find relevant attributes by intent description
validate_document Validate a TEI XML file against the spec
validate_element Validate a single element in context
load_customisation Load an ODD customisation file
unload_customisation Clear the loaded customisation

Most tools accept use_odd=True to query the customised schema instead of the full TEI P5.

ODD Customisation

Load a project-specific ODD file to constrain the schema:

1. Call load_customisation("/path/to/my-project.odd")
2. Use use_odd=True on subsequent tool calls
3. Call unload_customisation() to revert to the full spec

Supported ODD features:

  • moduleRef with include / except filtering
  • elementSpec mode="delete" to remove elements
  • elementSpec mode="change" with attDef modifications (delete, change, add)
  • Closed/semi value list restrictions

Environment Variables

Variable Default Description
TEI_ODD_PATH Path to a local p5subset.xml (skips download)
TEI_ODD_URL TEI-C GitHub URL Custom URL for the ODD file

Development

# Install dev dependencies
uv sync

# Run tests
uv run pytest

# Run tests with coverage info
uv run pytest -v

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tei_mcp-0.1.0.tar.gz (136.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tei_mcp-0.1.0-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file tei_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: tei_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 136.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tei_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 282532083545d84084c334f254d73ba98958fba1cab4862f0669a1fd50e4c564
MD5 b420597c110f1cc870f06ef257320bbf
BLAKE2b-256 74a09b0f29e6ce5af47c0f977bbdb8047f1662baf4c007d89c782d8da8edaf85

See more details on using hashes here.

File details

Details for the file tei_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tei_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tei_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cd7d436256a7b866c86c2076937d09eda8a252e3f157e31a0f5a00e9d510ab99
MD5 ee9769e2ad76fc0953753ebc56728b07
BLAKE2b-256 be826907b56476d71dc980ba914b2636e5bca451ba1397f39af4bfdf4413a60c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page