Preflight Checklist
What's Wrong?
Microsoft's hosted Business Central MCP server (https://mcp.businesscentral.dynamics.com) stopped resolving its Company HTTP header on ~27 July 2026, coinciding with the MCP 2026-07-28 stateless spec cutover. Every data-returning tool call (bc_actions_invoke) now fails with BC's Internal_CompanyNotFound. Metadata tools (bc_actions_search, bc_actions_describe) still work, so OAuth and environment resolution are fine — only the per-request company context is lost.
The server config is exactly per Microsoft's docs (https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/ai/use-mcp-server-non-microsoft): an HTTP server with static headers carrying TenantId / EnvironmentName / Company / ConfigurationName, plus an oauth block (Entra public client, PKCE). Config is byte-identical to a pre-failure backup; the company name is verified against BC's own companyInformation record.
Under the pre-2026-07-28 protocol, the BC server bound those headers to the session at initialize. The stateless spec removes sessions, so context must be re-established on every request — and evidently isn't. Also filing with Microsoft in parallel; posting here because (a) Claude Code ≤2.1.220 lists no 2026-07-28 spec support in the CHANGELOG, and (b) I need to know whether Claude Code re-sends configured custom headers on every Streamable HTTP POST or only at connection establishment — under a stateless server, initialize-only delivery would produce exactly this failure.
What Should Happen?
bc_actions_invoke should return records, scoped to the company named in the configured Company header — as it did continuously until 27 July 2026 ~09:00 UTC on this exact config, including on Claude Code 2.1.220.
Error Messages/Logs
{ "Error": {
"Code": "Internal_CompanyNotFound",
"Message": "Cannot process the request because the default company cannot be found. You can specify a default company in the service configuration file, or specify one for each tenant, or you can add a query string in the form of \"company=[name]\". ..." } }
Steps to Reproduce
- Configure the BC MCP server in ~/.claude.json (user scope):
"businesscentral": {
"type": "http",
"url": "https://mcp.businesscentral.dynamics.com",
"headers": {
"TenantId": "",
"EnvironmentName": "",
"Company": "<company display name, ASCII>",
"ConfigurationName": ""
},
"oauth": { "clientId": "", "callbackPort": 33418 }
}
- Authenticate via /mcp (Entra OAuth) — succeeds.
- Call bc_actions_search or bc_actions_describe — succeeds (environment-specific action catalogue returned).
- Call bc_actions_invoke with any List action, e.g. List_PostedSalesInvoices_PAG9970 with {"top": 1} — fails with Internal_CompanyNotFound.
Ruled out already:
- ?company=... query string appended to the server URL: re-auth succeeds, gateway strips the query, same error.
- Per-call company parameter: tool schema rejects it ("Unknown property company").
- Base64 header encoding: N/A, value is ASCII.
- Company existence/name: verified against BC's own data and the connection string generated by BC's MCP Server Configurations page.
Claude Model
Not sure / Multiple models
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.220 (worked and then broke on the same version — see regression note; break window 27 July 2026 09:00–16:00 UTC)
Claude Code Version
2.1.220 (also reproduced on 2.1.216 CLI and 2.1.219 desktop agent mode)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
Asks:
- Does Claude Code currently re-send configured custom
headers on every Streamable HTTP POST (tool calls included), or only at connection establishment? This determines whether the fix is client-side or purely Microsoft's.
- Timeline for MCP 2026-07-28 spec support (per-request _meta context, Mcp-Method/Mcp-Name headers)?
- This will affect every Claude + Business Central MCP user; if it reproduces on your side against any multi-company BC environment, a heads-up to Microsoft's BC MCP team would help.
Spec references: https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/ (session removal, per-request context), SEP-2243 (HTTP standardization — the same SEP Microsoft's BC docs cite for header encoding).
Preflight Checklist
What's Wrong?
Microsoft's hosted Business Central MCP server (https://mcp.businesscentral.dynamics.com) stopped resolving its
CompanyHTTP header on ~27 July 2026, coinciding with the MCP 2026-07-28 stateless spec cutover. Every data-returning tool call (bc_actions_invoke) now fails with BC'sInternal_CompanyNotFound. Metadata tools (bc_actions_search,bc_actions_describe) still work, so OAuth and environment resolution are fine — only the per-request company context is lost.The server config is exactly per Microsoft's docs (https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/ai/use-mcp-server-non-microsoft): an HTTP server with static
headerscarrying TenantId / EnvironmentName / Company / ConfigurationName, plus anoauthblock (Entra public client, PKCE). Config is byte-identical to a pre-failure backup; the company name is verified against BC's own companyInformation record.Under the pre-2026-07-28 protocol, the BC server bound those headers to the session at
initialize. The stateless spec removes sessions, so context must be re-established on every request — and evidently isn't. Also filing with Microsoft in parallel; posting here because (a) Claude Code ≤2.1.220 lists no 2026-07-28 spec support in the CHANGELOG, and (b) I need to know whether Claude Code re-sends configured customheaderson every Streamable HTTP POST or only at connection establishment — under a stateless server, initialize-only delivery would produce exactly this failure.What Should Happen?
bc_actions_invokeshould return records, scoped to the company named in the configuredCompanyheader — as it did continuously until 27 July 2026 ~09:00 UTC on this exact config, including on Claude Code 2.1.220.Error Messages/Logs
{ "Error": { "Code": "Internal_CompanyNotFound", "Message": "Cannot process the request because the default company cannot be found. You can specify a default company in the service configuration file, or specify one for each tenant, or you can add a query string in the form of \"company=[name]\". ..." } }Steps to Reproduce
"businesscentral": {
"type": "http",
"url": "https://mcp.businesscentral.dynamics.com",
"headers": {
"TenantId": "",
"EnvironmentName": "",
"Company": "<company display name, ASCII>",
"ConfigurationName": ""
},
"oauth": { "clientId": "", "callbackPort": 33418 }
}
Ruled out already:
Claude Model
Not sure / Multiple models
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.220 (worked and then broke on the same version — see regression note; break window 27 July 2026 09:00–16:00 UTC)
Claude Code Version
2.1.220 (also reproduced on 2.1.216 CLI and 2.1.219 desktop agent mode)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
Asks:
headerson every Streamable HTTP POST (tool calls included), or only at connection establishment? This determines whether the fix is client-side or purely Microsoft's.Spec references: https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/ (session removal, per-request context), SEP-2243 (HTTP standardization — the same SEP Microsoft's BC docs cite for header encoding).