Feature release — the headline: every domain pack is now callable as an MCP tool.
Added
- MCP server (#92) — opt-in streamable-HTTP endpoint at
/mcp(MCP_SERVER_ENABLED=true,uv sync --extra mcp). One MCP tool is auto-generated per registered pack from its Pydantic schemas — Claude Desktop, Cursor, or any MCP client can callmeeting_prep,summariser,support_triage, … directly. Every call flows through the same kernel as the REST routes: auth, rate limiting, per-run USD budgets, compliance gating. Regulated packs stay out of the tool list while gated off.
Fixed
- Consistent
cost_usdin mock mode (#88) — typed pack routes returnednullwhile the legacy pipeline returned0.0. The mock provider now emits deterministic token usage through the realCostTracker, so every route reports0.0— and budget enforcement (HTTP402) is now testable end-to-end without an API key via a cost-table override. - Vector store hardening (#90) — every RAG backend now receives an explicit embeddings instance from the new
core/embeddings.pyfactory (EMBEDDING_PROVIDER, deterministic and keyless in mock). PGVector migrated to the maintainedlangchain_postgres.PGVector.
CI
- Full-stub type checking (#96) — pyright now runs with all extras installed, so provider-specific code is checked against real types.
- Eval regression gate (#102) — mock-mode pack evals run on every PR against per-pack
pass_ratethresholds (evals/thresholds.yaml). Structural regressions can no longer reachmain.
Full Changelog: v0.6.2...v0.7.0