Skip to content

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

@lucarlig@dawid-nowak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Clean up MCP sessions on delete by lucarlig · Pull Request #27 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

@lucarlig@dawid-nowak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Clean up MCP sessions on delete by lucarlig · Pull Request #27 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

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

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

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

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

@lucarlig@dawid-nowak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Clean up MCP sessions on delete by lucarlig · Pull Request #27 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

@lucarlig@dawid-nowak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Clean up MCP sessions on delete by lucarlig · Pull Request #27 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

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

Clean up MCP sessions on delete - #27

Merged
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup
Jun 4, 2026
Merged

Clean up MCP sessions on delete#27
dawid-nowak merged 3 commits into
mainfrom
user/luca/mcp-session-delete-cleanup

Conversation

@lucarlig

@lucarliglucarlig commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Splits MCP session DELETE cleanup out of the larger session/SSE work so this PR stays focused.

This PR:

  • replaces the custom tower-layer session-id layer with Axum middleware state so DELETE can run cleanup after RMCP handles the request
  • keeps Mcp-session-id optional; requests without the header pass through, including DELETE
  • inserts SessionId extensions when the header is present, then uses match request.method() to run DELETE cleanup only after a successful downstream response
  • scopes stored user sessions by authenticated principal plus downstream MCP session id
  • scopes backend transport keys and cleanup by authenticated principal plus downstream MCP session id, so one user cannot clean up another user
  • removes the session-store entry and in-memory backend transports after RMCP accepts DELETE
  • removes the now-unused tower-layer dependency

Verification:

  • cargo fmt --all --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace
  • CI: fmt, clippy, cargo-deny, cargo-shear, test, build, bench

@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from 8f7a9a7 to dba60c8CompareJune 2, 2026 13:01
@lucarlig
lucarlig requested a review from dawid-nowakJune 2, 2026 13:41
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from dba60c8 to 65ca993CompareJune 3, 2026 08:46
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 3 times, most recently from d53aa18 to eab6832CompareJune 3, 2026 13:58
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from eab6832 to 3e5387fCompareJune 3, 2026 14:17
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
Comment threadcrates/contextforge-gateway-rs-lib/src/layers/session_id.rs Outdated
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch 4 times, most recently from 1ad0d13 to a570c24CompareJune 3, 2026 16:05
@lucarlig
lucarlig requested a review from dawid-nowakJune 3, 2026 16:16
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from a570c24 to e5dbcb3CompareJune 4, 2026 08:09
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/mcp-session-delete-cleanup branch from e5dbcb3 to 7db1d3cCompareJune 4, 2026 08:11
@dawid-nowak
dawid-nowak merged commit b53258e into mainJun 4, 2026
7 checks passed
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.

2 participants

@lucarlig@dawid-nowak