Custom Units via MCP¶
Define domain-specific units at runtime through the MCP server.
Session Tools¶
Use define_unit and define_conversion for persistent custom units within a session:
# Define a custom unit
define_unit(name="slug", dimension="mass", aliases=["slug"])
# Add conversion to standard units
define_conversion(src="slug", dst="kg", factor=14.5939)
# Now use it
convert(value=1, from_unit="slug", to_unit="kg")
# → {"quantity": 14.5939, "unit": "kg", "dimension": "mass"}
Custom units persist until reset_session() is called.
Inline Definitions¶
For one-off conversions without session state, pass definitions directly:
convert(
value=1,
from_unit="slug",
to_unit="kg",
custom_units=[
{"name": "slug", "dimension": "mass", "aliases": ["slug"]}
],
custom_edges=[
{"src": "slug", "dst": "kg", "factor": 14.5939}
]
)
Inline definitions are ephemeral — they don't modify the session graph.
When to Use Each¶
| Approach | Use case |
|---|---|
| Session tools | Multiple conversions with same custom units |
| Inline definitions | One-off conversion, stateless recovery |
Unit Definition Schema¶
{
"name": "slug", # Required: canonical name
"dimension": "mass", # Required: dimension name (from list_dimensions)
"aliases": ["slug"] # Optional: alternative names
}
Edge Definition Schema¶
{
"src": "slug", # Source unit name
"dst": "kg", # Destination unit name
"factor": 14.5939 # Multiplier: dst = src * factor
}
Error Handling¶
Invalid definitions return structured errors:
define_unit(name="bad", dimension="nonexistent")
# → {
# "error": "Unknown dimension: 'nonexistent'",
# "error_type": "unknown_dimension",
# "hints": ["Use list_dimensions() to see available dimensions"]
# }
Python API¶
For programmatic unit definition without MCP, see Custom Units & Graphs.