From 12ce90fcaa8acd38a164655654295ec660aad52b Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 6 Aug 2026 13:24:26 +0000 Subject: [PATCH] Add the ContextStream MCP server alongside Render MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ContextStream is an HTTP MCP, so unlike a stdio server there is nothing to install and nothing to index per session. That matters here: every cloud session starts from a fresh container, and a server that needs a toolchain installed pays that cost on every single one. This one is a URL and a key. The vendor's own setup snippet inlines the API key and then says to keep the file out of version control. That advice does not survive contact with this setup: in a cloud session it is precisely the repo's .mcp.json that gets loaded, since ~/.claude/mcp.json does not outlive the container. Following the instructions literally would mean committing a live key to GitHub. So the key is referenced, not written. Claude Code expands ${VAR} inside both url and headers for http-type entries, which is the pattern the render entry already uses in this same file — this is the second server to follow it, not a new convention. Worth knowing about the failure mode: an unset variable does not stop the config from loading. Claude Code warns in `claude mcp list` and passes the literal ${CONTEXTSTREAM_API_KEY} through as the header value, so a forgotten variable surfaces as an auth rejection that reads like a bad key rather than a missing one. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01DDLdj814WHKMXD4sbS2rDr --- .mcp.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.mcp.json b/.mcp.json index b7f2433ac..7148e4cdf 100644 --- a/.mcp.json +++ b/.mcp.json @@ -6,6 +6,13 @@ "headers": { "Authorization": "Bearer ${RENDER_API_KEY}" } + }, + "contextstream": { + "type": "http", + "url": "https://mcp.contextstream.io/mcp?default_context_mode=fast", + "headers": { + "X-ContextStream-API-Key": "${CONTEXTSTREAM_API_KEY}" + } } } }