Releases: Neftedollar/FsLangMCP
Release list
FsLangMcp 0.18.0
FsLangMcp 0.18.0 hardens semantic search and project loading. It retains 35 MCP tools, but deliberately changes the find continuation contract. This is still a pre-1.0 release.
Highlights
- Consistent
findpagination: continuations are bound to the query and complete result/coverage stream. Changed requests or source results are rejected explicitly instead of mixing pages and silently skipping/repeating sites. Incomplete continuation validation delivers no sites and can request a retry with the same cursor. - Project reloads reclaim MSBuild threads: ProjInfo/MSBuild evaluation runs in short-lived helper processes, preventing those retained worker threads from accumulating in the long-lived MCP host. Cancellation drains the helper process tree; cache hits start no helper.
- Compiled backtick names resolve correctly: definition lookup finds source-spelled names, including unquoted queries, while retaining semantic identity and ambiguity rules.
- Explicit snippet placement:
checkacceptssnippetPosition="start"|"end"; the default remainsend, preserving final-source-file visibility and snippet-only diagnostics. - Test infrastructure hardening: nested outline workers are drained before fixture cleanup, fragile one-second regex assertions were replaced, and lifecycle tracing improves future diagnostics.
Upgrade and compatibility
dotnet tool update --global FsLangMcp --version 0.18.0
fslangmcp --bootstrap-toolsRestart the MCP connection/server process after updating, and call set_project again if you use active project context.
Discard old find cursors and repeat the original query without cursor; old offset-only tokens now return cursor_version_unsupported. A changed query returns cursor_query_mismatch, and a changed result stream returns cursor_stale. Follow retrySameCursor only when the response explicitly permits it. Other tools keep their cursor formats. Cursors do not provide an atomic filesystem snapshot or act as authorization tokens.
The supported SDK floor remains .NET 10.0.100; release/runtime validation uses 10.0.400. Bootstrap installs the exact external-tool versions embedded in this release, not the latest upstream releases, and can downgrade manually updated tools.
Known boundaries
- External runtime-tool pins are unchanged. The README dependency guidance documents their known advisory risk; this release does not patch those bundled dependencies.
- Issue #199 remains open. The included test hardening does not prove the historical intermittent testhost hang's root cause. Its separate unmerged fixture-stream candidate is not included.
Validation
- Strict Release builds and all 978 tests passed on both the primary and minimum SDKs; the primary CI run measured 81.3% line coverage.
- The tag-level publication workflow independently passed all 978 tests for the release bits and packaged-runtime checks on Linux, macOS, and Windows, including actual project-reload thread reclamation.
- The published GitHub package matches the workflow's verified SHA-256. NuGet.org adds a repository signature, so its archive checksum differs; that signature was verified, and all 149 extracted payload files match the GitHub package byte-for-byte.
- An isolated installation of the publicly downloaded NuGet package reports 0.18.0 in the CLI, MCP initialization, and
fslangmcp_version.
See the full changelog and changes since 0.17.1.
FsLangMcp 0.17.1
FsLangMcp 0.17.1 is a correctness-hardening patch. The 35-tool MCP surface remains compatible; this is not the 1.0 contract freeze.
Highlights
findandproject_healthretain missing declared solution members, so incomplete workspaces cannot silently become authoritativenot_foundresults.findshares one deadline across admission, position resolution, discovery, project loading, semantic work, fallback, and response construction. Shared workers follow all live callers and retain their actual admission lifetime.- Complete
findresponses are bounded to 60,000 UTF-16 code units in production JSON. Snippets and optional sections are capped; blocked pages never advance a cursor. - Evaluated external linked
Compileitems remain visible under the explicit project-inspection policy, without weakening ordinary workspace containment. - Pre-cancelled process requests are checked immediately before launch.
checkno longer starts fallback discovery after every caller has expired; deterministic tests cover surviving callers, retries, busy admission, and exact-worker cleanup.
Compatibility and validation
- .NET SDK 10.0.100 is the supported build floor; release/runtime validation remains pinned to 10.0.400.
- The complete patch passed 805 tests, strict Release builds, the minimum-SDK gate, and live Linux/macOS/Windows checks.
- Publication uses one tested and version-verified package artifact, with the same bytes uploaded to GitHub and NuGet. The attached checksum covers the GitHub asset; NuGet.org adds a repository signature, so its downloaded archive has a different checksum. After publication, the NuGet signature was verified, all extracted payload files matched the GitHub package, and an isolated installation confirmed 0.17.1 in the CLI and both MCP version responses.
- Query/snapshot-bound cursor runtime remains deferred to #259 for 0.18.0. Existing cursor compatibility is unchanged.
Update with dotnet tool update --global FsLangMcp --version 0.17.1, then restart existing MCP server processes so clients use the new runtime.
See the full changelog for details.
v0.17.0
What's Changed
- fix: address the outstanding inline review findings by @Neftedollar in #215
- fix: address bounded agent UX failures and runtime health by @Neftedollar in #232
- Release 0.17.0: harden semantic evidence and deadlines by @Neftedollar in #245
Full Changelog: v0.16.0...v0.17.0
v0.16.0
What's Changed
- fix: return a typed sdk_not_found error instead of a lost transport on unsatisfiable SDK pins by @Neftedollar in #200
- fix: honest not_warmed readiness state and tear-safe workspaceReadyAt by @Neftedollar in #201
- fix: resolve NuGet packageId to the assemblies it ships; self-explaining miss payloads by @Neftedollar in #203
- fix: explain check's totalDiagnostics with infoCount, belowSeverityFloorCount, and a note by @Neftedollar in #202
- fix: find reports sweep breadth honestly via scopeNote by @Neftedollar in #204
- fix: reconcile check workspace perProject entries with infoCount by @Neftedollar in #210
- feat: per-site inferred type context for record-field sweeps (find includeSiteTypes) by @Neftedollar in #211
- fix: budget public_api and file_outline pages by rendered size; hint the narrowing in-band by @Neftedollar in #212
- chore(release): 0.16.0 by @Neftedollar in #214
Full Changelog: v0.15.0...v0.16.0
v0.15.0
What's Changed
- fix: stabilize FsLangMCP 0.14.0 by @Neftedollar in #171
- docs: fix reference drift from Codex review threads (config TOML, arg names, quickstart numbers) by @Neftedollar in #162
- fix: normalize MSBuild backslash Include paths on Unix; honest partial coverage (#160) by @Neftedollar in #161
- chore(deps): bump actions/setup-dotnet from 5.4.0 to 6.0.0 by @dependabot[bot] in #173
- chore(deps): bump actions/checkout from 4.2.2 to 7.0.1 by @dependabot[bot] in #174
- chore(deps): bump actions/setup-node from 4.4.0 to 7.0.0 by @dependabot[bot] in #175
- Bump the analyzers group with 2 updates by @dependabot[bot] in #176
- Bump Microsoft.NET.StringTools from 18.4.0 to 18.9.6 by @dependabot[bot] in #180
- chore(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 by @dependabot[bot] in #172
- Bump FSharp.Compiler.Service from 43.12.203 to 43.12.400 by @dependabot[bot] in #177
- feat(deps): migrate to FsMcp.Server / FsMcp.TaskApi 2.0.0 by @Neftedollar in #182
- chore(deps): bump softprops/action-gh-release from 2.6.2 to 3.0.2 by @dependabot[bot] in #181
- chore(deps): sweep the packages Dependabot's PR cap hid by @Neftedollar in #183
- fix: make includeGeneratedFiles reachable; scope snippet diagnostics to the snippet by @Neftedollar in #188
- chore(release): 0.15.0 by @Neftedollar in #185
- docs: document the 0.15.0 behavior changes agents will hit by @Neftedollar in #189
New Contributors
- @dependabot[bot] made their first contribution in #173
Full Changelog: v0.13.2...v0.15.0
v0.13.2
What's Changed
- fix: stabilize project reloads and release v0.13.2 by @Neftedollar in #152
Full Changelog: v0.13.1...v0.13.2
v0.13.1
v0.13.0
v0.12.3
What's Changed
- fix(0.12.3): address Codex P2 review — find-timeout coverage + Directory.Build.props analyzers by @Neftedollar in #149
Full Changelog: v0.12.2...v0.12.3
v0.12.2
What's Changed
- docs: DX + discoverability overhaul (accurate README, user docs, examples, launch kit) by @Neftedollar in #143
- docs: terminal demo (SVG) in README — real grep-vs-find contrast by @Neftedollar in #145
- docs: animated agent-session GIF in README (agent calling our MCP) by @Neftedollar in #146
- fix(0.12.2): find-hang timeout + 10 confirmed correctness findings (#100) by @Neftedollar in #147
Full Changelog: v0.12.1...v0.12.2