Skip to main content

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

Metadata

Release files for tei-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tei-mcp 0.1.0
File Size Uploaded Provenance Actions
tei_mcp-0.1.0.tar.gz 136.7 kB Without provenance Details for tei_mcp-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tei-mcp 0.1.0
File Interpreter ABI Platform Actions
tei_mcp-0.1.0-py3-none-any.whl Python 3 none any Details for tei_mcp-0.1.0-py3-none-any.whl

Total release size: 163.2 kB

Release files / tei_mcp-0.1.0.tar.gz

Download URL tei_mcp-0.1.0.tar.gz
Size 136.7 kB
Tags Source
SHA-256 checksum
How to use checksums
282532083545d84084c334f254d73ba98958fba1cab4862f0669a1fd50e4c564
BLAKE2b-256 checksum
How to use checksums
74a09b0f29e6ce5af47c0f977bbdb8047f1662baf4c007d89c782d8da8edaf85
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / tei_mcp-0.1.0-py3-none-any.whl

Download URL tei_mcp-0.1.0-py3-none-any.whl
Size 26.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd7d436256a7b866c86c2076937d09eda8a252e3f157e31a0f5a00e9d510ab99
BLAKE2b-256 checksum
How to use checksums
be826907b56476d71dc980ba914b2636e5bca451ba1397f39af4bfdf4413a60c
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for tei-mcp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page