Skip to content

bidlint v0.4.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 03:52
a7d4033

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-mcp

The synchronous MCP tool surface includes:

  • extract
  • compare
  • explain

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_extract
  • submit_compare

and inspected through:

  • job_status
  • job_result
  • cancel_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.