Skip to content

Align MCP server with the 2026-07-28 specification - #2454

Open
ejsmith wants to merge 1 commit into
feature/exie-assistantfrom
issue/mcp-2026-07-28-conformance
Open

Align MCP server with the 2026-07-28 specification#2454
ejsmith wants to merge 1 commit into
feature/exie-assistantfrom
issue/mcp-2026-07-28-conformance

Conversation

@ejsmith

@ejsmith ejsmith commented Aug 10, 2026

Copy link
Copy Markdown
Member

Summary

  • validate the MCP Streamable HTTP Origin header site-wide against the configured public origin
  • tighten Client ID Metadata Document validation and HTTP cache handling
  • align OAuth metadata, challenges, scopes, and authorization responses with the 2026-07-28 MCP specification
  • preserve Exie's structured MCP tool errors and add wire-level coverage
  • update the OpenAPI snapshot and generated Svelte API types

Why

This aligns the MCP and OAuth implementation with the 2026-07-28 specification while preserving down-level protocol support and the MCP server work in #2430.

This PR is intentionally stacked on #2430 and should merge after it.

Impact

Invalid browser origins are rejected with HTTP 403 across the site, while requests without an Origin header and requests from the configured public origin continue normally. OAuth clients receive the required resource scope and issuer metadata. No public API or configuration keys are removed.

Verification

  • Release backend build: 0 warnings, 0 errors
  • Full backend suite: 2,821 passed, 3 skipped, 0 failed
  • OAuth/MCP integration suite: 71 passed
  • CIMD/cache tests: 8 passed
  • MCP metadata tests: 17 passed
  • OpenAPI snapshot tests: 4 passed
  • Svelte npm run check: 0 errors, 0 warnings
  • generated-file formatting and git diff --check: passed

Breaking changes

None.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6be7f66af1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

AuthorizationRoles.StacksWrite,
AuthorizationRoles.EventsRead,
AuthorizationRoles.OfflineAccess
AuthorizationRoles.EventsRead

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep offline_access discoverable for existing MCP clients

BLOCKER: Existing clients that construct authorization requests from the MCP protected-resource metadata will stop requesting offline_access after it disappears from scopes_supported; their newly issued tokens then lack refresh tokens and require reauthorization after the access token expires. This changes a published API response, so preserve the scope or obtain explicit approval and provide a compatible migration path.

AGENTS.md reference: AGENTS.md:L67-L67

Useful? React with 👍 / 👎.

return null;

TimeSpan responseAge = response.Headers.Age ?? TimeSpan.Zero;
TimeSpan? cacheLifetime = cacheControl?.MaxAge - responseAge;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Honor s-maxage in the shared metadata cache

When a metadata server returns a shared-cache directive such as Cache-Control: s-maxage=0, max-age=3600, this ICacheClient cache uses max-age and retains the document for an hour even though s-maxage forbids shared reuse; if only s-maxage is present, it instead falls back to the configured lifetime. Because production can back this cache with Redis, stale redirect URIs and scopes can be reused across requests and instances beyond the client's requested freshness window; prefer SharedMaxAge when it is present.

Useful? React with 👍 / 👎.

@github-actions

Copy link
Copy Markdown

Code Coverage

Package Line Rate Branch Rate Complexity Health
Exceptionless.Core 75% 67% 10117
Exceptionless.AppHost 38% 40% 143
Exceptionless.Insulation 37% 35% 286
Exceptionless.Web 84% 68% 7880
Summary 78% (24878 / 31921) 67% (11669 / 17467) 18426

@niemyjski niemyjski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, just missing act assert arrange on tests for consistency.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants