Skip to content

[BUG] Microsoft Business Central MCP server: all tool invocations fail with Internal_CompanyNotFound since MCP 2026-07-28 stateless spec rollout — header-bound context lost per-request #81965

Description

@adammcsweeney-rgb

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

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

  1. 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 }
    }
  2. Authenticate via /mcp (Entra OAuth) — succeeds.
  3. Call bc_actions_search or bc_actions_describe — succeeds (environment-specific action catalogue returned).
  4. 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:

  1. 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.
  2. Timeline for MCP 2026-07-28 spec support (per-request _meta context, Mcp-Method/Mcp-Name headers)?
  3. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions