Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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.
Expand Down
27 changes: 25 additions & 2 deletions src/lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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++
}
Expand Down
Loading