#!/bin/bash
# Don't exit immediately so we can debug issues
# set -e
# Function to replace localhost in a string with the Docker host
replace_localhost() {
local input_str="$1"
local docker_host=""
# Try to determine Docker host address
if ping -c 1 -w 1 host.docker.internal >/dev/null 2>&1; then
docker_host="host.docker.internal"
echo "Docker Desktop detected: Using host.docker.internal for localhost" >&2
elif ping -c 1 -w 1 172.17.0.1 >/dev/null 2>&1; then
docker_host="172.17.0.1"
echo "Docker on Linux detected: Using 172.17.0.1 for localhost" >&2
else
echo "WARNING: Cannot determine Docker host IP. Using original address." >&2
return 1
fi
# Replace localhost with Docker host
if [[ -n "$docker_host" ]]; then
local new_str="${input_str/localhost/$docker_host}"
echo " Remapping: $input_str --> $new_str" >&2
echo "$new_str"
return 0
fi
# No replacement made
echo "$input_str"
return 1
}
# Create a new array for the processed arguments
processed_args=()
processed_args+=("$1")
shift 1
# Process remaining command-line arguments for postgres:// or postgresql:// URLs that contain localhost
for arg in "$@"; do
if [[ "$arg" == *"postgres"*"://"*"localhost"* ]]; then
echo "Found localhost in database connection: $arg" >&2
new_arg=$(replace_localhost "$arg")
if [[ $? -eq 0 ]]; then
processed_args+=("$new_arg")
else
processed_args+=("$arg")
fi
else
processed_args+=("$arg")
fi
done
# Check and replace localhost in DATABASE_URI if it exists
if [[ -n "$DATABASE_URI" && "$DATABASE_URI" == *"postgres"*"://"*"localhost"* ]]; then
echo "Found localhost in DATABASE_URI: $DATABASE_URI" >&2
new_uri=$(replace_localhost "$DATABASE_URI")
if [[ $? -eq 0 ]]; then
export DATABASE_URI="$new_uri"
fi
fi
# Check if SSE transport is specified and --sse-host is not already set
has_sse=false
has_sse_host=false
for arg in "${processed_args[@]}"; do
if [[ "$arg" == "--transport" ]]; then
# Check next argument for "sse"
for next_arg in "${processed_args[@]}"; do
if [[ "$next_arg" == "sse" ]]; then
has_sse=true
break
fi
done
elif [[ "$arg" == "--transport=sse" ]]; then
has_sse=true
elif [[ "$arg" == "--sse-host"* ]]; then
has_sse_host=true
fi
done
# Add --sse-host if needed
if [[ "$has_sse" == true ]] && [[ "$has_sse_host" == false ]]; then
echo "SSE transport detected, adding --sse-host=0.0.0.0" >&2
processed_args+=("--sse-host=0.0.0.0")
fi
echo "----------------" >&2
echo "Executing command:" >&2
echo "${processed_args[@]}" >&2
echo "----------------" >&2
# Execute the command with the processed arguments
"${processed_args[@]}"
# Capture exit code from the Python process
exit_code=$?
# If the Python process failed, print additional debug info
if [ $exit_code -ne 0 ]; then
echo "ERROR: Command failed with exit code $exit_code" >&2
echo "Command was: ${processed_args[@]}" >&2
fi
# Return the exit code from the Python process
exit $exit_code
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/crystaldba/postgres-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server