This commit is contained in:
Ryan Kophs 2025-05-15 12:01:12 -04:00 committed by GitHub
commit 9f7c8a681b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 55 additions and 3 deletions

View file

@ -34,7 +34,9 @@ All the most popular MCP clients (Claude Desktop, Cursor & Windsurf) use the fol
### Custom Headers
To bypass authentication, or to emit custom headers on all requests to your remote server, pass `--header` CLI arguments:
To bypass authentication, or to emit custom headers on all requests to your remote server, there are two options:
#### Option 1: Using `--header` CLI arguments
```json
{
@ -72,6 +74,33 @@ To bypass authentication, or to emit custom headers on all requests to your remo
},
```
#### Option 2: Using `--headerFile` to read headers from a file
You can also provide headers from a file using the `--headerFile` argument. The file should contain one header per line in the format `Name:Value`. Lines starting with `#` are treated as comments and ignored.
```json
{
"mcpServers": {
"remote-example": {
"command": "npx",
"args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--headerFile",
"/path/to/headers.txt"
]
},
}
}
```
Example headers file:
```
# Headers for MCP Remote
Authorization:Bearer my-token
X-Custom-Header:custom-value
```
### Flags
* If `npx` is producing errors, consider adding `-y` as the first argument to auto-accept the installation of the `mcp-remote` package.

View file

@ -314,8 +314,8 @@ export function setupOAuthCallbackServerWithLongPoll(options: OAuthCallbackServe
Authorization successful!
You may close this window and return to the CLI.
<script>
// If this is a non-interactive session (no manual approval step was required) then
// this should automatically close the window. If not, this will have no effect and
// If this is a non-interactive session (no manual approval step was required) then
// this should automatically close the window. If not, this will have no effect and
// the user will see the message above.
window.close();
</script>
@ -428,6 +428,29 @@ export async function parseCommandLineArgs(args: string[], usage: string) {
args.splice(i, 2)
// Do not increment i, as the array has shifted
continue
} else if (args[i] === '--headerFile' && i < args.length - 1) {
const filePath = args[i + 1]
try {
const fileContent = await fs.readFile(filePath, 'utf8')
const lines = fileContent.split('\n')
for (const line of lines) {
const trimmedLine = line.trim()
if (trimmedLine && !trimmedLine.startsWith('#')) {
const match = trimmedLine.match(/^([A-Za-z0-9_-]+):(.*)$/)
if (match) {
headers[match[1]] = match[2]
} else {
log(`Warning: ignoring invalid header in file: ${trimmedLine}`)
}
}
}
log(`Loaded headers from file: ${filePath}`)
} catch (error) {
log(`Error reading header file ${filePath}: ${error}`)
}
args.splice(i, 2)
// Do not increment i, as the array has shifted
continue
}
i++
}