Repository navigation
Project Tango v3.0.0 — modular restructure, scoped tools, quality gates
What's new in v3.0.0
A full restructure of the server plus two long-requested tool capabilities — every change verified by the suite and by an end-to-end run against the built server.
Tools
- Real category scoping —
get_low_stock_alerts,analyze_sales_metricsandsmart_restock_predictoraccept an optionalcategoryand echo the filter they actually applied. Theweekly_inventory_reviewprompt now scopes every step it sequences (the old "only step 1 is scoped" disclaimer is gone with the gap it covered). find_ordersbounding — new optionallimitreturns the newest N matches whiletotalMatchesalways reports the full match count. The default stays deliberately uncapped: no pagination, nothing dropped.- Honest responses throughout: blank arguments echo back as
null, zero matches are successes, and tool descriptions interpolate their policy values and tool names so prose cannot drift from code.
Architecture
createServer(dataProvider)— the whole MCP surface (8 tools, 1 prompt, 1 resource) takes itsDataProvideras an argument;index.tsis a thin stdio bootstrap. The seam is exercised in-process against stub providers.- Split into focused modules:
server.ts,reviewPrompt.ts(pure prompt renderer),responses.ts,toolNames.ts, alongside the existing analytics split.
Correctness
- Cross-process safe state writes: per-write temp files so two writers can never publish a torn
state.json, with cleanup on failed rename; a two-writer race is pinned by test. - The README's dataset figures (130 matches / 142 orders / 46 KB) are asserted against live data by
docs.test.ts.
Quality gates
- 204 tests / 42 suites / 0 fail, coverage 99.96% lines / 96.16% branches / 98.17% functions enforced by floors (98/94/96).
- Type-aware ESLint with zero suppressions; GitHub Actions CI runs typecheck → lint → coverage floors → README test-count drift check → build (all green on this commit's pipeline).
- TypeScript 6.0.3 (typescript-eslint does not support the TS 7 API yet; typecheck remains clean).
Upgrade notes
No breaking changes. All new input parameters are optional and response fields (filters, totalMatches, limit) are additive — existing clients keep working unchanged.
Full changelog: v2.0.0...v3.0.0