@@ -152,19 +152,23 @@ const remoteStainlessHandler = async ({
152152
153153 const codeModeEndpoint = readEnv ( 'CODE_MODE_ENDPOINT_URL' ) ?? 'https://api.stainless.com/api/ai/code-tool' ;
154154
155+ const localClientEnvs = {
156+ SENT_DM_API_KEY : requireValue (
157+ readEnv ( 'SENT_DM_API_KEY' ) ?? client . apiKey ,
158+ 'set SENT_DM_API_KEY environment variable or provide apiKey client option' ,
159+ ) ,
160+ SENT_DM_BASE_URL : readEnv ( 'SENT_DM_BASE_URL' ) ?? client . baseURL ?? undefined ,
161+ } ;
162+ // Merge any upstream client envs from the request header, with upstream values taking precedence.
163+ const mergedClientEnvs = { ...localClientEnvs , ...reqContext . upstreamClientEnvs } ;
164+
155165 // Setting a Stainless API key authenticates requests to the code tool endpoint.
156166 const res = await fetch ( codeModeEndpoint , {
157167 method : 'POST' ,
158168 headers : {
159169 ...( reqContext . stainlessApiKey && { Authorization : reqContext . stainlessApiKey } ) ,
160170 'Content-Type' : 'application/json' ,
161- 'x-stainless-mcp-client-envs' : JSON . stringify ( {
162- SENT_DM_API_KEY : requireValue (
163- readEnv ( 'SENT_DM_API_KEY' ) ?? client . apiKey ,
164- 'set SENT_DM_API_KEY environment variable or provide apiKey client option' ,
165- ) ,
166- SENT_DM_BASE_URL : readEnv ( 'SENT_DM_BASE_URL' ) ?? client . baseURL ?? undefined ,
167- } ) ,
171+ 'x-stainless-mcp-client-envs' : JSON . stringify ( mergedClientEnvs ) ,
168172 } ,
169173 body : JSON . stringify ( {
170174 project_name : 'sent-dm' ,
@@ -275,6 +279,9 @@ const localDenoHandler = async ({
275279 printOutput : true ,
276280 spawnOptions : {
277281 cwd : path . dirname ( workerPath ) ,
282+ // Merge any upstream client envs into the Deno subprocess environment,
283+ // with the upstream env vars taking precedence.
284+ env : { ...process . env , ...reqContext . upstreamClientEnvs } ,
278285 } ,
279286 } ) ;
280287
@@ -284,13 +291,17 @@ const localDenoHandler = async ({
284291 reject ( new Error ( `Worker exited with code ${ exitCode } ` ) ) ;
285292 } ) ;
286293
287- const opts : ClientOptions = {
288- baseURL : client . baseURL ,
289- apiKey : client . apiKey ,
290- defaultHeaders : {
291- 'X-Stainless-MCP' : 'true' ,
292- } ,
293- } ;
294+ // Strip null/undefined values so that the worker SDK client can fall back to
295+ // reading from environment variables (including any upstreamClientEnvs).
296+ const opts : ClientOptions = Object . fromEntries (
297+ Object . entries ( {
298+ baseURL : client . baseURL ,
299+ apiKey : client . apiKey ,
300+ defaultHeaders : {
301+ 'X-Stainless-MCP' : 'true' ,
302+ } ,
303+ } ) . filter ( ( [ _ , v ] ) => v != null ) ,
304+ ) as ClientOptions ;
294305
295306 const req = worker . request (
296307 'http://localhost' ,
0 commit comments