Resilience and diagnostics release. Builds on v0.5.5 (interactive auth + non-blocking discovery); no configuration changes required to upgrade.
Fixed
- Permanent BC rejections no longer crash-loop. When Business Central refuses the connection — a wrong MCP Configuration Name (typically
HTTP 400), or a wrong Environment (typicallyHTTP 404, which the MCP client library reports as a terminated session) — the proxy now logs one actionable line echoing your effectiveenvironment/company/configuration_name, and stays alive instead of exiting into a Claude Desktop respawn loop with a Python traceback. Sign-in vs. config is explicitly disambiguated in the message. Transient errors (timeouts, network,429,5xx) keep the existing exponential-backoff reconnect; mid-session token-expiry still triggers the silent one-shot reconnect. - Company / ConfigurationName are sent literally. Removed an inherited
urllib.parse.unquote()that silently corrupted any name containing%or+(e.g.R&D %1,A+B Ltd). Values are now used verbatim (stripped), consistent with TenantId/Environment. - ASCII-only diagnostics. Runtime log/print messages no longer use em-dashes/arrows/bullets that mojibaked to
?under the Windowscp1252console (and could raiseUnicodeEncodeErroron stderr). The headline diagnostic now renders cleanly everywhere.
Upgrade notes
Drop-in. No Azure or config changes. If you hit HTTP 400/404 (or Session terminated at connect), the log now tells you exactly what to check — Environment name (exact, case-sensitive), MCP Configuration Name (required when a named configuration exists; not shown in Claude Desktop's args log so easy to leave blank), Company, and account access — and the proxy keeps running so you can fix the field and restart without a crash-loop.