teta is a pluggable command-line toolbox written in Python.
At its core it is a tiny dispatcher (teta) that discovers commands exported by other
packages through the teta.cli_commands entry-point group.
This makes it trivial to extend teta with your own functionality while keeping
extra dependencies completely optional.
| Extra | Package | Command | Description |
|---|---|---|---|
| — | teta (core) |
version |
Show the installed version |
| — | teta (core) |
plugins |
List all installed plugins |
config |
teta-config |
config |
Display / update user configuration |
mcp |
teta-mcp |
mcp |
Run a JSON-RPC 2.0 Model Context Protocol server |
app |
teta-app |
app |
Launch a small Flask web UI |
diag |
teta-diag |
diag |
Print diagnostics and service health |
camera |
teta-camera |
camera |
Camera drivers and streaming utilities |
generate |
teta-generate |
generate |
Code and asset generation utilities |
Everything in this table is optional — install only what you need.
teta uses Python's standard entry-point mechanism for plugin discovery.
When teta <command> is run, the dispatcher queries the teta.cli_commands
entry-point group at runtime and loads the matching plugin on demand.
No central registry, no configuration file — just standard packaging metadata.
┌─────────────────────────────────────────────────────────────────┐
│ teta (core) │
│ │
│ teta <cmd> ──► entry_points("teta.cli_commands") │
│ │ │
│ ┌────────────┼────────────────┐ │
│ ▼ ▼ ▼ │
│ teta-config teta-mcp teta-camera … │
│ (config cmd) (mcp cmd) (camera cmd) │
└─────────────────────────────────────────────────────────────────┘
teta.cli_commands ── CLI sub-commands (teta <cmd>)
teta.mcp_commands ── MCP tools exposed via teta-mcp
Each plugin package advertises itself with a single line in its pyproject.toml
(see Writing your own plugin).
No changes to the core teta package are ever needed.
Core only (minimal footprint):
pip install tetaWith all official plugins:
pip install "teta[all]"Individual plugins:
pip install teta-config # configuration management
pip install teta-camera # camera streaming
pip install teta-mcp # Model Context Protocol server
pip install teta-diag # diagnostics
pip install teta-generate # code generation
pip install teta-app # Flask web UIFor development (editable install with all plugins):
git clone https://github.com/rios/teta
cd teta
pip install -e ".[all]"# Show the installed version
teta version
# List all installed plugins
teta plugins
# Show the active configuration file (requires teta-config)
teta config show
# Print diagnostics and verify environment (requires teta-diag)
teta diag
# Start the MCP server (requires teta-mcp)
teta mcp
# Stream frames from a camera (requires teta-camera)
teta camera capture
# Start the Flask web UI (requires teta-app)
teta app runIf a command is not installed, teta will print a clear error and exit.
Run teta plugins to see which plugins are currently available.
Usage: teta <command> [options]
Available commands:
version
plugins
config (if teta-config is installed)
mcp (if teta-mcp is installed)
...
Prints the version of the installed teta core package.
Lists every registered entry-point in both teta.cli_commands and
teta.mcp_commands, along with the package name and version that provides it.
Example output:
[teta.cli_commands]
config – teta-config 0.2.1
mcp – teta-mcp 0.2.0
version – teta 0.5.0
plugins – teta 0.5.0
[teta.mcp_commands]
(none)
teta-config stores user preferences in JSON. By default the file lives at
~/.teta.json; you can override the location with the TETA_CONFIG
environment variable.
{
"log_level": "INFO",
"log_format": "%(levelname)s: %(message)s"
}Programmatic usage:
from teta.config import get_config
cfg = get_config() # loads and merges defaults
cfg.log_level = "DEBUG" # mutate values
cfg.save(cfg.get_config_path())teta-mcp runs a JSON-RPC 2.0 server
that exposes teta plugins as MCP tools to AI assistants and agent frameworks.
Start the server:
teta mcpMCP tools are discovered via the teta.mcp_commands entry-point group.
Any package can register additional tools without modifying the core:
[project.entry-points."teta.mcp_commands"]
my_tool = "my_pkg.mcp:my_tool_handler"Each handler receives a JSONRPCRequest and returns a plain string.
See teta-mcp for a full walkthrough.
A teta plugin is a standard Python distribution that advertises one or more commands via an entry point. No changes to teta itself are required.
my-teta-plugin/
├── pyproject.toml
└── my_plugin/
├── __init__.py
└── cli.py
# my_plugin/cli.py
import click
@click.command()
@click.option("--name", default="world", help="Who to greet")
def main(name):
"""A friendly greeting plugin for teta."""
click.echo(f"Hello, {name}!")# pyproject.toml
[project.entry-points."teta.cli_commands"]
hello = "my_plugin.cli:main"pip install -e .
teta hello
# Hello, world!
teta hello --name Alice
# Hello, Alice!The new command appears automatically in teta — no configuration needed.
git clone https://github.com/rios/teta
cd teta
# Install in editable mode with all plugins
pip install -e ".[all]"
# Run the test suite
make test
# Run with coverage
make coverage
# Format code
make format
# Lint
make lintpython -m unittest discovermake build
# Output goes to dist/