Skip to content

NuGet

The NuGet package arcane-mcp is a .NET tool whose command is the release binary, not .NET code: a pointer package plus one package per runtime identifier, the layout the .NET 10 SDK uses for platform-specific tools. dnx and dotnet tool install pick the package for your system and run the binary directly; no .NET runtime runs while the server does. Nothing is published until the first release; see Installation.

The .NET 10 SDK (dnx and the platform-specific tool layout are new in .NET 10). On macOS, macOS 13 or later, which the darwin binaries need.

PackageBinary
arcane-mcp.linux-x64, arcane-mcp.linux-arm64arcane-mcp-linux-amd64, -arm64
arcane-mcp.osx-x64, arcane-mcp.osx-arm64arcane-mcp-darwin-amd64, -arm64
arcane-mcp.win-x64, arcane-mcp.win-arm64arcane-mcp-windows-amd64.exe, -arm64.exe

There are no linux-musl packages: the SDK falls back from linux-musl-x64 to linux-x64, and the static binary runs on Alpine.

Terminal window
ARCANE_URL=https://arcane.example.com ARCANE_API_KEY=… dnx arcane-mcp

or install it once, which puts an arcane-mcp command on your PATH (~/.dotnet/tools):

Terminal window
dotnet tool install -g arcane-mcp
arcane-mcp --version

dnx reads its own options anywhere on the command line, so arguments for the server go after --: dnx arcane-mcp -- --version.

{
"mcpServers": {
"arcane": {
"command": "dnx",
"args": ["arcane-mcp@X.Y.Z"],
"env": {
"ARCANE_URL": "https://arcane.example.com",
"ARCANE_API_KEY": "<your Arcane API key>"
}
}
}
}

When its standard input is not a terminal, as when an MCP client starts it, dnx installs the tool without asking, so the entry needs no extra flag. After a global install, the command can be arcane-mcp, by its absolute path (~/.dotnet/tools/arcane-mcp, %USERPROFILE%\.dotnet\tools\arcane-mcp.exe on Windows) if the client does not see your shell’s PATH. Every client’s entry is on Client setup.

Name the version, arcane-mcp@X.Y.Z, as the entry above does (dotnet tool install -g arcane-mcp --version X.Y.Z for an installed tool). NuGet has no dist-tags: the highest version is the default, and a backport never displaces the newest release.

The binary in each runtime package is the release asset listed in the signed checksums.txt, so GitHub’s build provenance verifies it. dnx runs it from the NuGet cache:

Terminal window
gh attestation verify ~/.nuget/packages/arcane-mcp.linux-x64/X.Y.Z/tools/any/linux-x64/arcane-mcp \
-R jmrplens/arcane-mcp --signer-workflow jmrplens/arcane-mcp/.github/workflows/release.yml

A dotnet tool install -g keeps its copy under ~/.dotnet/tools/.store/ instead (find ~/.dotnet/tools/.store -type f -name arcane-mcp finds it); verify that file the same way. The packages themselves are attested by the release workflow as packed (nuget.org adds its repository signature on top). The rest is under Verifying a release.

The server never updates itself.

Terminal window
dotnet tool update -g arcane-mcp
dotnet tool uninstall -g arcane-mcp

With dnx, change the version in the client’s entry; the packages stay in the NuGet cache (~/.nuget/packages) until you clear it (dotnet nuget locals global-packages --clear clears all of it).