fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: support MCP JSON Schema dialects - #1547

Merged
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832
Aug 6, 2026
Merged

fix: support MCP JSON Schema dialects#1547
jsourcebot merged 2 commits into
mainfrom
jack/linear-mcp-diagnostics-SOU-1832

Conversation

@jsourcebot

@jsourcebotjsourcebot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Compile MCP tool schemas using their declared JSON Schema dialect: draft-07, 2019-09, or 2020-12.
  • Default schemas without $schema to 2020-12, as required by the MCP specification.
  • Register each server’s tools atomically so a schema failure cannot leave that server partially loaded.

Note

Medium Risk
Changes runtime MCP tool schema compilation and which tools load in Ask EE; behavior shifts for connectors that relied on the old draft-07-only path or forced additionalProperties, though failures are isolated per server.

Overview
Fixes Ask MCP connectors failing to load when tool inputSchema declares JSON Schema 2019-09 or 2020-12 (MCP’s default when $schema is omitted).

Validation no longer uses a single draft-07 Ajv instance or forces additionalProperties: false on every tool. Schemas are compiled with the matching Ajv dialect (draft-07, 2019-09, 2020-12), with guards for unsupported dialects, $async, and shared $id collisions (addUsedSchema: false).

Tool loading is per-server atomic: if any tool schema is unsupported or fails to compile, that server is marked failed and no partial tools from that server are exposed. Error logging avoids echoing sensitive schema URIs or tokens.

Reviewed by Cursor Bugbot for commit 434fb04. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added JSON Schema validation support for drafts 07, 2019-09, and 2020-12, with automatic draft selection and 2020-12 as the default.
    • Added clearer validation errors, including parameter-name hints.
    • Added support for schema composition keywords and local references.
  • Bug Fixes

    • Unsupported, malformed, or asynchronous schemas are now rejected safely.
    • Failed MCP servers no longer expose partially created tools.
    • Sensitive schema URLs, tokens, and remote references are excluded from logs.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change adds shared MCP JSON Schema validation for three dialects, preserves schema declarations in tool validation, formats validation errors, and stages per-server tools before atomic registration.

Changes

MCP schema validation and tool assembly

Layer / File(s)Summary
Dialect-aware schema compilation
packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.ts, packages/web/src/ee/features/chat/mcp/mcpJsonSchemaValidator.test.ts
Adds draft-07, 2019-09, and 2020-12 support, defaults to 2020-12, rejects unsupported dialects and asynchronous schemas, and formats validation errors.
MCP tool validation and staged registration
packages/web/src/ee/features/chat/mcp/mcpToolSets.ts, packages/web/src/ee/features/chat/mcp/mcpToolSets.test.ts, CHANGELOG.md
Uses the shared compiler for tool schemas, adds parameter-name hints to errors, commits server tools only after all schemas succeed, and documents the fix. Tests cover dialects, composition keywords, malformed schemas, isolation, and log sanitization.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
participant MCPServer
participant mcpToolSets
participant compileMcpJsonSchemaValidator
participant ToolRegistry
MCPServer->>mcpToolSets: provide tool schemas
mcpToolSets->>compileMcpJsonSchemaValidator: compile each schema
compileMcpJsonSchemaValidator-->>mcpToolSets: return validator or schema error
mcpToolSets->>ToolRegistry: merge tools after server processing succeeds
Loading

Possibly related PRs

Suggested reviewers:brendan-kellam

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the main change: support for MCP JSON Schema dialects.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jack/linear-mcp-diagnostics-SOU-1832

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

This comment has been minimized.

@jsourcebot
jsourcebotforce-pushed the jack/linear-mcp-diagnostics-SOU-1832 branch from 21d0b1b to 434fb04CompareAugust 6, 2026 00:02
@coderabbitai

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@jsourcebot
jsourcebot merged commit 9e2e32d into mainAug 6, 2026
13 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Aug 6, 2026
Sign up for freeto 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.

1 participant

@jsourcebot