bidlint v0.4.0
bidlint v0.4.0
Released: 2026-08-20
v0.4.0 exposes the deterministic bidlint core through an optional local MCP server and adds a persistent, pollable job lifecycle for larger document operations.
Highlights
Local MCP server
Install the optional MCP integration with:
pip install -e '.[mcp]'Run the stdio server with:
bidlint-mcpThe synchronous MCP tool surface includes:
extractcompareexplain
These tools call the same deterministic PDF parsers, terminology matcher, engineering-unit conversion and compliance evaluator used by the CLI.
Filesystem sandbox
MCP document and alias paths are constrained to BIDLINT_MCP_ROOT, or to the server working directory when the variable is not set.
The server rejects:
- parent traversal outside the configured root
- absolute paths outside the root
- symlinks that resolve outside the root
- unexpected document/alias file types
The MCP server does not fetch remote URLs.
Pollable long-running jobs
Large extraction/comparison work can be submitted through:
submit_extractsubmit_compare
and inspected through:
job_statusjob_resultcancel_job
Job records and terminal results are stored atomically under:
<BIDLINT_MCP_ROOT>/.bidlint/jobs
The in-process worker pool defaults to two workers and can be configured from 1 to 8 with BIDLINT_MCP_JOB_WORKERS.
Running jobs use cooperative cancellation. If the server process stops, previously queued/running jobs are not silently resumed; they are marked failed with an explicit restart error when the job manager starts again.
MCP Tasks-extension boundary
The job lifecycle is deliberately implemented as explicit bidlint tools rather than claiming native MCP Tasks support before the Python MCP SDK exposes a supported server API for that extension.
The internal job manager is kept separate from the MCP adapter so a future native Tasks integration can reuse the same deterministic lifecycle and persistence model.
No second decision engine
MCP does not add another compliance authority. Clients cannot supply a status and have bidlint trust it.
Both synchronous and queued MCP paths still produce PASS / DEVIATION / MISSING / REVIEW through the existing deterministic evaluation layer.
Safety boundary
v0.4.0 deliberately does not:
- expose a network/HTTP server by default
- fetch remote documents
- bypass
BIDLINT_MCP_ROOT - force-terminate a running parser thread
- silently resume interrupted work after restart
- claim native MCP Tasks-extension compatibility through a custom wire-protocol implementation
- change the deterministic compliance rules established by previous releases
See docs/MCP.md for setup, tool contracts and lifecycle details.