Fiddler MCP Setup
Configure the Fiddler Everywhere MCP server so that agent tools can call Fiddler's traffic inspection, status, and session APIs.
Operating rules
- Shell-first. MCP is not yet configured, so you cannot use MCP tools.
- Sequential execution only. Follow steps strictly in order — do not run steps or scripts in parallel. Each step may depend on values produced by the previous one.
- On Windows — detect opened terminal. Only if it is not PowerShell, wrap scripts with:
powershell.exe -Command 'script'. Use single quotes to wrap the script.
Step 1 — Verify Fiddler is installed
macOS:
if [ -d "/Applications/Fiddler Everywhere.app" ]; then echo "INSTALLED"; else echo "NOT_INSTALLED"; fi
Linux:
if command -v fiddler-everywhere &>/dev/null; then echo "INSTALLED"; else echo "NOT_INSTALLED"; fi
Windows (PowerShell):
$installed = Get-ItemProperty `
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" `
-ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -like "*Fiddler Everywhere*" }
if ($installed) { "INSTALLED" } else { "NOT_INSTALLED" }
If NOT_INSTALLED: stop and tell the user:
"Fiddler Everywhere is not installed. Please install it first."
Step 2 — Detect the provider
Identify which agent is being configured and set PROVIDER.
Parent process name
Inspect the parent process:
macOS / Linux:
ps -p $PPID -o comm= 2>/dev/null
Windows (PowerShell):
(Get-Process -Id (Get-CimInstance Win32_Process -Filter "ProcessId=$PID").ParentProcessId).Name
Match the output against known process names:
| Process name contains | Provider value |
|---|---|
code, code-helper |
vscode |
cursor |
cursor |
claude |
claude_code |
copilot |
copilot_cli |
codex |
codex_cli |
If matched unambiguously, set PROVIDER to Provider value from the table and proceed to Step 3.
If still unrecognised, ask the user:
"Which agent are you setting Fiddler MCP up for? (VS Code / GitHub Copilot, Cursor, Claude Code CLI, GitHub Copilot CLI, or OpenAI Codex CLI)"
Use the user's answer to set PROVIDER from the table above.
Step 3 — Discover the port
Fiddler Everywhere listens on port 8868 by default. Confirm it is reachable and set PORT for all subsequent steps.
macOS / Linux:
curl -s -o /dev/null -w "%{http_code}" "http://localhost:8868/api/McpManagement/Detect?provider=PROVIDER"
Windows (PowerShell):
curl.exe -s -o NUL -w "%{http_code}" "http://localhost:8868/api/McpManagement/Detect?provider=PROVIDER"
| Result | Action |
|---|---|
| Any HTTP response code | Port 8868 is reachable. Set PORT=8868 and proceed to Step 4. |
000 (connection refused) |
Port 8868 is not listening. Run the port discovery script below. |
Port discovery script:
macOS / Linux:
python3 -c "
import json, glob, os
ports = set()
for f in glob.glob(os.path.expanduser('~/.fiddler/*/Settings/appsettings.json')):
try:
p = json.load(open(f)).get('MCPServerSettings', {}).get('Port')
if p and p != 8868:
ports.add(p)
except: pass
print(' '.join(str(p) for p in ports) if ports else 'none')
"
Windows (PowerShell):
$ports = Get-ChildItem "$env:USERPROFILE\.fiddler\*\Settings\appsettings.json" -ErrorAction SilentlyContinue |
ForEach-Object { (Get-Content $_ | ConvertFrom-Json).MCPServerSettings.Port } |
Where-Object { $_ -and $_ -ne 8868 } | Select-Object -Unique
Write-Output $(if ($ports) { $ports -join ' ' } else { 'none' })
For each port returned, probe it:
macOS / Linux:
curl -s -o /dev/null -w "%{http_code}" "http://localhost:PORT/api/McpManagement/Detect?provider=PROVIDER"
Windows (PowerShell):
curl.exe -s -o NUL -w "%{http_code}" "http://localhost:PORT/api/McpManagement/Detect?provider=PROVIDER"
Set PORT to the first port that returns any HTTP response. If no port responds, Fiddler is not running — launch it and retry from the top of Step 3.
Launch Fiddler:
macOS:
open -a "Fiddler Everywhere" && sleep 15
Linux:
(nohup fiddler-everywhere &>/dev/null &); sleep 15
Windows: Important On windows if the current terminal used is bash, use the specific GitBash script.
PowerShell
$candidates = @(
"$env:LOCALAPPDATA\Programs\Fiddler Everywhere\Fiddler Everywhere.exe",
"C:\Program Files\Fiddler Everywhere\Fiddler Everywhere.exe",
"C:\Program Files (x86)\Fiddler Everywhere\Fiddler Everywhere.exe"
)
$fiddlerExe = $candidates | Where-Object { Test-Path $_ } | Select-Object -First 1
if ($fiddlerExe) {
$cmdLine = '"' + $fiddlerExe + '"'
Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{ CommandLine = $cmdLine } | Out-Null
Start-Sleep 15
}
Git Bash
FIDDLER_EXE=""
for dir in "$LOCALAPPDATA/Programs/Fiddler Everywhere" \
"/c/Program Files/Fiddler Everywhere" \
"/c/Program Files (x86)/Fiddler Everywhere"; do
if [ -f "$dir/Fiddler Everywhere.exe" ]; then
FIDDLER_EXE="$dir/Fiddler Everywhere.exe"
break
fi
done
if [ -n "$FIDDLER_EXE" ]; then
"$FIDDLER_EXE" &
sleep 15
fi
Important: Wait 15 seconds for Fiddler to launch, before continuing with the next steps!
If still unreachable after relaunch:
"Fiddler Everywhere is not reachable. Please verify it is running and try again."
PORTis used in all subsequent steps.
Step 4 — Check for existing configuration
Call the Detect endpoint to see if Fiddler MCP is already configured for this provider:
macOS / Linux:
curl -s "http://localhost:$PORT/api/McpManagement/Detect?provider=PROVIDER"
Windows (PowerShell):
curl.exe -s "http://localhost:$PORT/api/McpManagement/Detect?provider=PROVIDER"
Replace PROVIDER with the value from Step 2.
| Response | Action |
|---|---|
| Indicates config exists / already configured | Inform the user: "Fiddler MCP is already configured for PROVIDER." Ask if they want to re-run setup to refresh the configuration. Only continue if confirmed. |
| Indicates not configured | Proceed to Step 5. |
403 |
Stop: "Your Fiddler plan does not include MCP access. Please upgrade your subscription." |
| User not logged in | Follow the Login procedure below, then retry Step 4. |
Login (if Fiddler reports the user is not logged in)
Use the MCP protocol to trigger the login flow. Follow these sub-steps in order.
1. Open an MCP session and get the session ID:
macOS / Linux:
SESSION_ID=$(curl -si -X POST "http://localhost:$PORT/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"mcp-setup","version":"1.0"}}}' \
| grep -i "^mcp-session-id:" | awk '{print $2}' | tr -d '\r')
echo "Session ID: $SESSION_ID"
Windows (PowerShell):
$initResp = curl.exe -si -X POST "http://localhost:$PORT/mcp" `
-H "Content-Type: application/json" `
-H "Accept: application/json, text/event-stream" `
-d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"mcp-setup\",\"version\":\"1.0\"}}}'
$SESSION_ID = ($initResp | Select-String "(?i)mcp-session-id:\s*(\S+)").Matches.Groups[1].Value.Trim()
Write-Host "Session ID: $SESSION_ID"
If SESSION_ID is empty, Fiddler may not be fully started — wait a few seconds and retry.
2. Fetch the tools list to confirm initiate_login is available:
macOS / Linux:
curl -s -X POST "http://localhost:$PORT/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
Windows (PowerShell):
curl.exe -s -X POST "http://localhost:$PORT/mcp" `
-H "Content-Type: application/json" `
-H "Accept: application/json, text/event-stream" `
-H "Mcp-Session-Id: $SESSION_ID" `
-d '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/list\",\"params\":{}}'
Confirm initiate_login appears in the response before continuing.
3. Call initiate_login:
macOS / Linux:
curl -s -X POST "http://localhost:$PORT/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"initiate_login","arguments":{}}}'
Windows (PowerShell):
curl.exe -s -X POST "http://localhost:$PORT/mcp" `
-H "Content-Type: application/json" `
-H "Accept: application/json, text/event-stream" `
-H "Mcp-Session-Id: $SESSION_ID" `
-d '{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"initiate_login\",\"arguments\":{}}}'
Tell the user:
"A login window has been opened in your browser. Please complete sign-in, then let me know when done."
Wait for the user to confirm sign-in is complete, then retry the step that triggered this login flow.
Step 5 — Autoconfigure
Call the Configure endpoint. Fiddler will automatically generate or reuse the API key and write the correct config file for the provider:
macOS / Linux:
curl -s -X POST "http://localhost:$PORT/api/McpManagement/Configure" \
-H "Content-Type: application/json" \
-d '{"provider":"PROVIDER"}'
Windows (PowerShell):
curl.exe -s -X POST "http://localhost:$PORT/api/McpManagement/Configure" `
-H "Content-Type: application/json" `
-d '{\"provider\":\"PROVIDER\"}'
Replace PROVIDER with the value from Step 2.
| Response | Action |
|---|---|
| Success / 2xx | Configuration written. Proceed to Step 6. |
403 |
Stop: "Your Fiddler plan does not include MCP access. Please upgrade your subscription." |
| User not logged in | Follow the Login procedure in Step 4, then retry Step 5. |
| Any other failure | Note the response and ask the user to check Fiddler is running correctly. |
Step 6 — Confirm success
Tell the user:
"Fiddler MCP has been configured for
PROVIDER. Restart your agent (reload the VS Code window, restart Cursor, etc.) to pick up the new configuration, then try using a Fiddler tool."