Releases: Byggarepop/dotnet-mcp-orchestrator
Releases · Byggarepop/dotnet-mcp-orchestrator
v0.2.3
Added
- Pack the registry manifest at
.mcp/server.jsoninside the NuGet package. nuget.org reads this
embedded file to render the "MCP Server" tab and the one-click VS Code configuration; without it
nuget.org reported "this package does not include a server.json file". Also added
registryBaseUrlto the package entry for parity with the canonical MCP-server package shape.
v0.2.2
Added
McpServerNuGet package type (alongside the existingDotnetTooltype), so the package is
discoverable under nuget.org's "MCP Server" package-type filter. The tool install path is
unaffected — both package types ship in the same.nupkg.
v0.2.1
Fixed
- Corrected the Official MCP Registry ownership marker to the case-sensitive namespace casing
io.github.Byggarepop/dotnet-mcp-orchestrator(wasbyggarepop). The registry matches the
mcp-name:marker in the packed README against the server name exactly, and GitHub OIDC grants
the namespace under the login's real casing (Byggarepop), so the lowercase 0.2.0 marker could
not be verified. No functional changes.
v0.2.0
Added
profilesubcommand that measures the token economics of progressive tool discovery — the delta
between the naive "load every manifest every turn" baseline and the orchestrator's actual
progressive cost. Two modes:profile --config <path>(static: resting floor, naive baseline, and
a best/worst envelope where worst is honestly higher than naive) and
profile --trace <session.jsonl> --config <path>(replays a real session into the per-turn curve —
active vs. naive, load events, never-loaded savings, and break-even, including the honest
"overhead never repaid" case).--format jsonemits a snake_case superset for tooling, and
--assert-favorableexits non-zero so CI can gate on the orchestrator staying favorable for a
canonical session.profile --host-config <path>: a read-only "try before you keep it" path. Points the profiler at
an existing MCP host config (.mcp.json/.vscode/mcp.json/ Cursor / Claude Desktop) instead of
an orchestrator config — its stdio servers are imported in memory and measured, writing
nothing (remote http/sse servers are listed and skipped). Run it as a one-shot with
dotnet tool execute McpOrchestrator profile --host-config <path>(ordnx …) to see the savings
with no global install and nothing to uninstall. The host-config parser is shared withinit.- Optional session-trace side-channel: run with
--trace-out <path>(or
MCP_ORCHESTRATOR_TRACE_OUT) to append one JSONL line per discover/route interaction for later
replay. Off by default; the server hot path is unaffected. - Local, deterministic token counting via
Microsoft.ML.Tokenizers(cl100k_base, embedded vocab —
offline and CI-friendly), behind anITokenCounterseam so a live-usage backend can replace it.
Every report discloses the tokenizer and a ±10% cross-model tolerance. initsubcommand that adopts an existing MCP host config in one step:mcp-orchestrator init <host-config>lifts every stdio server out of.mcp.json/.vscode/mcp.json(or any
mcpServers/serversmap — Cursor, Claude Desktop) into a generatedorchestrator.config.json
(one capability each, with aTODOsummaryplaceholder and noinstructions— the summary
drives routing), backs up the host config, then rewrites it to launch only the orchestrator
pointed at the new catalog viaMCP_ORCHESTRATOR_CONFIG. Remote (http/sse) servers are left in
place; the user only fills in the one-linesummaryper capability.--dry-runpreviews both
files,--forceoverwrites an existing catalog,--command <path>targets the AOT binary, and
--dev-feed <path>wires the orchestrator to run from a local folder feed (latest local build).pack-local.ps1: packs the project as the pinned9.9.9-devversion intonupkg/local-feedand
evicts the cached copy, so a host launching the tool withdotnet tool execute McpOrchestrator --version 9.9.9-dev --source <feed> --yesalways runs the latest local code.
Changed
instructionsis now an optional (nullable) capability field, omitted from output and from
list_capabilitieswhen absent, rather than always emitted as an empty string.
v0.1.1
Changed
- Renamed the default log folder from
~/.dotnet-orchestrator-mcpto~/.mcpOrchestrator, aligning
it with theMcpOrchestratorname. Existing~/.dotnet-orchestrator-mcpfolders are left in place
and can be deleted; override withMCP_ORCHESTRATOR_LOG_DIRas before.
v0.1.0
First release.
Added
- Pure three-tool MCP relay —
list_capabilities→discover_tools→route— that forwards the
agent's calls to downstream MCP servers without interpreting them. - Config-driven capability catalog (
orchestrator.config.json) with${SOLUTION_DIR},
${CONFIG_DIR}, and environment-variable placeholders, plus a shipped template. - Lazy downstream MCP connections over stdio, with per-capability connect/call timeouts and
eviction of failed connections. - File logging: the stderr log is mirrored to
~/.dotnet-orchestrator-mcp/orchestrator.log
(folder auto-created, ~10 MB rotation). Override the directory withMCP_ORCHESTRATOR_LOG_DIR,
or disable withMCP_ORCHESTRATOR_LOG_DIR=off. - Native-AOT support: a ~10 MB self-contained binary (no .NET runtime), via source-generated JSON
and the generic tool registration;IsAotCompatiblekeeps the analyzer on. - Opt-in self-update for the Native-AOT binary (
MCP_ORCHESTRATOR_AUTOUPDATE=1): on startup it
checks the latest GitHub Release, verifies the download againstSHA256SUMS, and stages the new
binary so the next launch runs it — without ever restarting the live MCP session. - Packaging: portable .NET tool package (with the root README as its nuget.org landing page),
self-contained per-RID tool packages, and self-contained zips (pack-all.ps1). - CI: per-OS Native-AOT build + smoke test (
native-aot.yml); tag-triggered release workflow
(release.yml) that builds the native binaries (+SHA256SUMS), creates a GitHub Release, and
publishes the tool package to NuGet via Trusted Publishing (OIDC). - READMEs link to GitHub Releases for downloading the prebuilt Native-AOT binaries.