Skip to main content

ucon-tools

tests codecov publish

Hostable interfaces for the ucon dimensional analysis engine.

Documentation · MCP Server Guide · Tool Reference


What is ucon-tools?

ucon is a unit-aware computation library for Python. ucon-tools packages it into interfaces that other systems can consume — MCP servers for AI agents, REST APIs for web services, CLIs for humans at a terminal.

Each interface lives under ucon.tools.<interface> and is installable as an optional extra:

Interface Package Extra Status
MCP server ucon.tools.mcp ucon-tools[mcp] Available
REST API ucon.tools.rest ucon-tools[rest] Planned
CLI ucon.tools.cli ucon-tools[cli] Planned

MCP Server

The MCP server gives AI agents (Claude, Cursor, and other MCP clients) dimensionally-verified unit conversion and computation.

Agent: "Convert 5 mcg/kg/min for an 80 kg patient to mL/h. Drug is 400 mg in 250 mL."

  decompose → constraint solver places quantities, auto-bridges mcg→mg and min→h
  compute   → 5 × 80 kg × (60 min/h) × (1 mg/1000 mcg) × (250 mL/400 mg) = 15 mL/h
  validate  → result dimension matches expected unit ✓

Installation

pip install ucon-tools[mcp]

Requires Python 3.10+.

Configuration

Claude Desktop / Claude Code — add to your MCP configuration:

{
  "mcpServers": {
    "ucon": {
      "command": "uvx",
      "args": ["--from", "ucon-tools[mcp]", "ucon-mcp"]
    }
  }
}

Standalone:

ucon-mcp                    # stdio transport (default)
ucon-mcp --transport sse    # SSE transport for remote clients

Tools

Core — conversion and computation:

Tool Description
convert Convert a value between compatible units
compute Multi-step factor-label calculation with dimensional tracking
decompose Build a factor chain from natural-language or structured input
check_dimensions Check if two units share the same dimension

Discovery — explore the unit system:

Tool Description
discover Unified discovery across topics: units, scales, dimensions, constants, formulas, quantity kinds, kind formulas, extended bases
list_units Deprecated — use discover(topic="units"). List available units, optionally filtered by dimension
list_scales Deprecated — use discover(topic="scales"). List SI decimal and binary prefixes
list_dimensions Deprecated — use discover(topic="dimensions"). List available physical dimensions
list_constants Deprecated — use discover(topic="constants"). List physical constants (CODATA 2022)
list_formulas Deprecated — use discover(topic="formulas"). List registered domain formulas

Runtime extension — add units and conversions per session:

Tool Description
define Unified session definition: units, conversion edges, constants, quantity kinds, extended bases (kind="unit" | "conversion" | "constant" | "quantity_kind" | "basis")
define_unit Deprecated — use define(kind="unit"). Register a custom unit for the session
define_conversion Deprecated — use define(kind="conversion"). Add a conversion edge (linear or affine)
define_constant Deprecated — use define(kind="constant"). Define a custom physical constant
call_formula Call a registered dimensionally-typed formula
reset_session Clear all session-defined units, conversions, and constants

Kind-of-Quantity (KOQ) — semantic disambiguation:

Tool Description
define_quantity_kind Deprecated — use define(kind="quantity_kind"). Register a quantity kind, optionally placed in the kind hierarchy
declare_computation Deprecated — use validate_result(declared_kind=...). Declare expected quantity kind before computing
validate_result Validate that a result matches the declared kind (dimension and kind)
list_quantity_kinds Deprecated — use discover(topic="quantity_kinds"). List built-in and session-defined quantity kinds
list_kind_formulas Deprecated — use discover(topic="kind_formulas"). List kind-arithmetic rules from the FormulaRegistry
extend_basis Deprecated — use define(kind="basis"). Create an extended dimensional basis
list_extended_bases Deprecated — use discover(topic="extended_bases"). List session-defined extended bases

Unit systems — inspect and scope the active system:

Tool Description
system Unified system operations: restrict, diff, compatibility check (action="restrict" | "diff" | "check_compatibility")
restrict_system Deprecated — use system(action="restrict"). Restrict the active system to named units/dimensions
diff_systems Deprecated — use system(action="diff"). Compare the session system against the process-base system
check_compatibility Deprecated — use system(action="check_compatibility"). Check if the session system composes with the process-base without conflict

All deprecated tools remain functional through v0.9.x and are scheduled for removal in v1.0.0, leaving a ten-tool surface: convert, compute, decompose, check_dimensions, discover, define, system, call_formula, validate_result, reset_session.


Architecture

ucon-tools is an interface layer. It does not reimplement dimensional analysis — it delegates to ucon for all unit resolution, conversion, and dimensional algebra. What it adds is interface-specific logic: session state, protocol handling, error suggestions, and agent-oriented features like the decompose constraint solver and KOQ disambiguation.

┌───────────────────────────────────────────────────────┐
│                     Clients                           │
│   MCP (Claude, Cursor)  ·  HTTP  ·  Terminal          │
└──────────┬──────────────────┬──────────────┬──────────┘
           │                  │              │
┌──────────▼───┐   ┌──────────▼───┐  ┌───────▼──────┐
│ ucon.tools   │   │ ucon.tools   │  │ ucon.tools   │
│     .mcp     │   │     .rest    │  │     .cli     │
│              │   │              │  │              │
│  sessions    │   │  (planned)   │  │  (planned)   │
│  decompose   │   │              │  │              │
│  KOQ         │   │              │  │              │
│  suggestions │   │              │  │              │
└──────┬───────┘   └──────┬───────┘  └──────┬───────┘
       │                  │                 │
       └──────────────────┼─────────────────┘
                          │ Python imports
               ┌──────────▼──────────┐
               │        ucon         │
               │                     │
               │  Units, Dimensions  │
               │  ConversionGraph    │
               │  Scales, Constants  │
               └─────────────────────┘

UnitSafe Benchmark

UnitSafe is a 500-problem metrological reasoning benchmark for evaluating how well AI models handle unit conversion, dimensional analysis, and kind-of-quantity discrimination. It ships with a runner that can evaluate any model with or without MCP tool augmentation.

pip install ucon-tools[benchmark]

# Bare evaluation (model solves from memory)
python benchmarks/unitsafe/run.py -m claude:claude-haiku-4-5-20251001

# Tool-augmented evaluation (model uses MCP tools)
python benchmarks/unitsafe/run.py -m claude:claude-haiku-4-5-20251001 \
  --tools --mcp-url https://mcp.ucon.dev/mcp/<instance>/mcp

See benchmarks/unitsafe/ for the full dataset, runner, and evaluation protocol.


Development

make venv                               # Create virtual environment
source .ucon-tools-3.12/bin/activate    # Activate
make test                               # Run tests
make test-all                           # Run across all supported Python versions

Running the MCP server locally

make mcp-server                         # Foreground (stdio)
make mcp-server-bg                      # Background
make mcp-server-stop                    # Stop background server

License

AGPL-3.0. See LICENSE.

Release files for ucon-tools 0.9.1

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

Source distribution (sdist)

Source distribution for ucon-tools 0.9.1
File Size Uploaded
ucon_tools-0.9.1.tar.gz 115.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ucon-tools 0.9.1
File Interpreter ABI Platform
ucon_tools-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 221.0 kB

Release files / ucon_tools-0.9.1.tar.gz

Download URL ucon_tools-0.9.1.tar.gz
Size 115.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2903bae9605f114f004b61cc3d78c37d5e2ec1ac87781336699adcc8c76eedcb
BLAKE2b-256 checksum
How to use checksums
15f822907c9b099c0db887148fd5fa35a11055eef54480ca75340175831b45a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / ucon_tools-0.9.1-py3-none-any.whl

Download URL ucon_tools-0.9.1-py3-none-any.whl
Size 105.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
42bee5a81e16f0333565da8c3d230366faed33a2a882acff2d96bb8f915266ec
BLAKE2b-256 checksum
How to use checksums
70063820adafe533d4a707e386d6dafaa8f581d13e3e0a27e02a0b2957eca846
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.1

2 release files

0.10.0

2 release files

This release

0.9.1 This release

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

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