TEDDI Tool
Search the ETSI TEDDI terminology database from the terminal or expose it to AI agents as an MCP server. One async client, one parser and one output layer serve both interfaces.
uv tool install teddi-tool
teddi search-term "QoS" --pattern exactmatch
Features
- CLI —
search-term(term, scope, pattern, technical-body filter) andlist-bodies, with table, JSON, ISON and TOON output. - MCP server —
search_teddi,get_term_infoandlist_technical_bodiestools over stdio; no extra service to deploy. - All TEDDI technical bodies — filters are matched case-insensitively and validated against the code list published by the TEDDI search form (fetched live, cached for 90 days, so new codes need no release).
- Local HTTP cache — hishel/SQLite store (2-hour search TTL, 90-day technical-body menu TTL), so repeated lookups do not hit ETSI; both TTLs are configurable.
- Typed core — dataclasses and
StrEnumenums with full annotations, plus aTeddiSourceprotocol that keeps the client mockable. - Async-first — an async
httpx2core shared by the CLI and MCP server.
Requirements
Python 3.13 or newer. TEDDI itself is a public ETSI web application; no account or API key is required.
Installation
# with uv (recommended)
uv tool install teddi-tool
# or with pipx
pipx install teddi-tool
From a checkout (requires mise):
git clone https://github.com/jr2804/teddi-tool.git
cd teddi-tool
mise install # pinned toolchain: ruff, ty, rumdl, pyreorder, ...
mise dev # uv sync -U --dev --all-extras --all-groups
Usage
teddi search-term "QoS" # rich table (default)
teddi search-term "QoS" --pattern exactmatch # exact match
teddi search-term "QoS" --scope definitions -o json # definitions only, JSON
teddi search-term "test" -t "3gpp,stq" # filter technical bodies
teddi list-bodies # valid TB codes from TEDDI
teddi-mcp # MCP server on stdio
Scope values: abbreviations, definitions, both (default). Pattern values:
alloccurrences (default), exactmatch, startingwith, endingwith. Output
formats: table, json, ison, toon. Cache lifetimes are tuned with
--cache-ttl/--menu-cache-ttl (seconds). Every option can also be set through
the TEDDI_TOOL_ environment variables of the same name — TEDDI_TOOL_SCOPE,
TEDDI_TOOL_PATTERN, TEDDI_TOOL_TECHNICAL_BODIES, TEDDI_TOOL_OUTPUT,
TEDDI_TOOL_CACHE_TTL and TEDDI_TOOL_MENU_CACHE_TTL.
teddi-tool and teddi are the same CLI; teddi-cli is an alias kept for
existing scripts, and teddi-mcp/teddi server start the MCP server directly.
MCP client configuration
{
"mcpServers": {
"teddi": {
"command": "teddi-mcp",
"env": {
"TEDDI_TOOL_CACHE_TTL": "3600",
"TEDDI_TOOL_MENU_CACHE_TTL": "604800"
}
}
}
}
The env block is optional; it tunes the search-response and technical-body
menu cache lifetimes in seconds.
Documentation
- Usage — CLI options, output formats, MCP tools
- API reference — models, client, parser
- Development — setup, project layout, tasks and release process
Contributing
Issues and pull requests are welcome; see
docs/contributing.md and the
Code of Conduct.
License
MIT — see LICENSE.
Metadata
Release files for teddi-tool 2026.11.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| teddi_tool-2026.11.5.tar.gz | 57.0 kB | With provenance | Details for teddi_tool-2026.11.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| teddi_tool-2026.11.5-py3-none-any.whl | Python 3 | none | any | Details for teddi_tool-2026.11.5-py3-none-any.whl |
Total release size: 77.8 kB
Release files / teddi_tool-2026.11.5.tar.gz
| Download URL | teddi_tool-2026.11.5.tar.gz |
|---|---|
| Size | 57.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1966b5a457a62f4100f3c3a3ddcccc7378f1b2710ea5e20ef56dc52794013975
|
|
BLAKE2b-256 checksum How to use checksums |
ee34ea445f8f959e345d6abeea9eb4a8f07ed5e477124cceb2f71c022a058510
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logRelease files / teddi_tool-2026.11.5-py3-none-any.whl
| Download URL | teddi_tool-2026.11.5-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f9e3db770870d3edb3c99c91459caf246e82438c294f9e7f6a2d09b50ca57014
|
|
BLAKE2b-256 checksum How to use checksums |
96b2803bae8079d5aaa54f5f3a72d96f2ba1bb5c093efa3c0a30bd129f904d28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logSecurity for teddi-tool 2026.11.5
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for teddi_tool-2026.11.5.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logA 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.