About PHM Physics Check
PHM Physics Check is an offline library and local MCP server for checking physical plausibility in LLM outputs and robotics data. Its deterministic checks run with Python’s standard library and produce structured PASS, WARN or FAIL verdicts.
Key features
- 01Dimensional and unit consistency checks
- 02Physical limits and probability validation
- 03Kinematic and conservation checks
- 04Robotics quaternion and timestamp checks
- 05Structured PASS, WARN and FAIL results
- 06Offline operation with no dependencies
Use cases
- 01Check quantities in generated text
- 02Validate robotics dataset records
- 03Flag invalid units or physical values
MCP support
Runs locally over stdio and exposes `physics_text_check`, `physics_quantity_check` and `robotics_data_check` tools to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEphm-lite-check
Deterministic physics plausibility checking for LLM outputs and robotics / embodied-AI datasets. Zero dependencies, pure standard library, Python >= 3.8.
This package is an independent, community-provided library: it is the
offline subset of the PHM physical-judgment engine (proprietary core
methods are intentionally excluded). A companion plugin
(phm-physics-check) is listed on the Dify Marketplace.
Not affiliated with, endorsed by, or sponsored by LangChain, AutoGen, or Dify. Integration adapters are community-provided.
MCP server
This package doubles as a local MCP server (stdio transport). After
installing, point your MCP client at:
python3 -m phm_lite_check.mcp_server
Exposing three tools: physics_text_check, physics_quantity_check,
robotics_data_check.
What it checks
Text / quantities (check_text, full_check)
- Dimensional / unit consistency (SI + common units)
- Universal speed limit (c)
- Absolute temperature floor (0 K)
- Non-negativity of mass / length / energy
- Probability range [0, 1]
- Kinematic relations (free-fall family, tolerance-checked)
- Conservation checks (energy / momentum, tolerance-checked)
Robotics records (check_robotics_record)
- Quaternion normalization (|q| within tolerance of 1.0)
- Timestamp sanity: monotonicity, duplicates, NaN/Inf, outlier gaps (possible frame loss)
- NaN / Inf scan over numeric arrays
- Unit annotation presence for common motion fields
Design guarantees
- Deterministic: same input -> same output, always reproducible.
- Zero dependencies: pure standard library; framework adapters import their host lazily.
- Verdicts: PASS / WARN / FAIL with structured violation records.
- No network calls: everything runs offline in-process.
NOTE: this package contains only the deterministic offline subset of the PHM physical-judgment engine. Proprietary core methods are intentionally excluded. (Deployment-specific deep checks are available separately via a configurable remote engine endpoint, not included in this package.)
Install
Option A — from the GitHub repo (no package index needed):
pip install git+https://github.com/PHM-Audit/phm-lite-check
Option B — from a Release wheel (faster, no git clone):
pip install https://github.com/PHM-Audit/phm-lite-check/releases/download/v1.0.0/phm_lite_check-1.0.0-py3-none-any.whl
Optional extras (once installed):
pip install "phm-lite-check[langchain]" # + langchain-core (adapter tests)
pip install "phm-lite-check[autogen]" # + autogen-agentchat
PyPI listing is planned; both options above work today.
Quickstart — library
from phm_lite_check import check_text, check_robotics_record
check_text("The drone descends at 450 km/h and confidence is 1.8.")
# {"verdict": "FAIL", "violations": [...], ...}
check_robotics_record({
"quaternion": [1.395, 0.0, 0.0, 0.0], # |q| >> 1 -> FAIL
"timestamps": [0.0, 0.1, 0.05], # not monotonic -> FAIL
"position": [1.0, 2.0], # no unit annotated -> WARN
})
Quickstart — LangChain
from phm_lite_check.integrations import langchain_tool
tools = langchain_tool.get_langchain_tools() # 3 @tool callables
agent = create_react_agent(llm, tools) # your usual wiring
Quickstart — AutoGen (v0.4+)
from autogen_agentchat.agents import AssistantAgent
from phm_lite_check.integrations import autogen_tool
assistant = AssistantAgent(
name="checked_assistant",
model_client=..., # your model client
tools=autogen_tool.get_autogen_tools(),
)
Tools exposed by both adapters
| Tool | Input | Checks |
|---|---|---|
physics_text_check | free text with quantities | unit consistency, limits, probabilities |
physics_quantity_check | value + unit | one quantity against physical law |
robotics_data_check | JSON record | quaternions, timestamps, NaN/Inf, units |
Tests
pip install -e ".[dev]"
pytest tests/ -q
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.