Repository navigation
Expand file tree
/
Copy pathstart_server.sh
More file actions
executable file
·143 lines (125 loc) · 5.5 KB
/
Copy pathstart_server.sh
File metadata and controls
executable file
·143 lines (125 loc) · 5.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# Doris MCP Server Start Script (Streamable HTTP Mode)
# Ensures the service runs in Streamable HTTP mode for web-based MCP clients
# Set colors
GREEN='\033[0;32m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
echo -e "${GREEN}========== Doris MCP Server Start Script (HTTP Mode) ==========${NC}"
# Check virtual environment
if [ -d ".venv" ]; then
echo -e "${CYAN}Virtual environment found, activating...${NC}"
source .venv/bin/activate
elif [ -d "venv" ]; then
echo -e "${CYAN}Virtual environment found, activating...${NC}"
source venv/bin/activate
else
echo -e "${YELLOW}Warning: No virtual environment found${NC}"
fi
# Clean cache files
echo -e "${CYAN}Cleaning cache files...${NC}"
echo -e "${CYAN}Cleaning Python cache files...${NC}"
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete 2>/dev/null || true
echo -e "${CYAN}Cleaning temporary files...${NC}"
rm -rf .pytest_cache 2>/dev/null || true
echo -e "${CYAN}Cleaning log files...${NC}"
find ./logs -type f -name "*.log" -delete 2>/dev/null || true
# Create necessary directories
mkdir -p logs
mkdir -p tmp
# Reload environment variables
if [ -f .env ]; then
echo -e "${CYAN}Loading environment variables from .env file...${NC}"
set -a # automatically export all variables
source .env
set +a # stop automatically exporting
else
echo -e "${YELLOW}Warning: .env file not found${NC}"
fi
# Load sensitive values from Docker/Compose secret files without placing them
# in the Compose model or a tracked environment file. Direct values and *_FILE
# values are mutually exclusive so deployment configuration cannot be
# ambiguous.
load_secret_file() {
local variable_name="$1"
local file_variable_name="${variable_name}_FILE"
local secret_file="${!file_variable_name:-}"
local direct_value="${!variable_name:-}"
local secret_value
if [ -z "${secret_file}" ]; then
return
fi
if [ -n "${direct_value}" ]; then
echo -e "${RED}Both ${variable_name} and ${file_variable_name} are set${NC}" >&2
exit 1
fi
if [ ! -f "${secret_file}" ] || [ ! -r "${secret_file}" ]; then
echo -e "${RED}${file_variable_name} is not a readable file${NC}" >&2
exit 1
fi
secret_value="$(<"${secret_file}")"
if [ -z "${secret_value}" ] || [[ "${secret_value}" == *$'\n'* ]] || [[ "${secret_value}" == *$'\r'* ]]; then
echo -e "${RED}${file_variable_name} must contain one non-empty line${NC}" >&2
exit 1
fi
printf -v "${variable_name}" '%s' "${secret_value}"
export "${variable_name}"
unset "${file_variable_name}"
}
load_secret_file DORIS_PASSWORD
load_secret_file TOKEN_ADMIN
# Set HTTP-specific environment variables
# FIX for Issue #62 Bug 4: Use SERVER_PORT instead of MCP_PORT for consistency with code
export MCP_TRANSPORT_TYPE="http"
export SERVER_HOST="${SERVER_HOST:-${MCP_HOST:-127.0.0.1}}"
# Keep MCP_HOST available for existing .env files while using the server's
# canonical host setting for the actual process.
export MCP_HOST="${SERVER_HOST}"
export SERVER_PORT="${SERVER_PORT:-3000}" # Changed from MCP_PORT to SERVER_PORT
export WORKERS="${WORKERS:-1}"
export ALLOWED_ORIGINS="${ALLOWED_ORIGINS:-*}"
export LOG_LEVEL="${LOG_LEVEL:-info}"
export MCP_ALLOW_CREDENTIALS="${MCP_ALLOW_CREDENTIALS:-false}"
# Add adapter debug support
export MCP_DEBUG_ADAPTER="true"
export PYTHONPATH="$(pwd):$PYTHONPATH"
echo -e "${GREEN}Starting MCP server (Streamable HTTP mode)...${NC}"
echo -e "${YELLOW}Service will run on http://${SERVER_HOST}:${SERVER_PORT}/mcp${NC}"
echo -e "${YELLOW}Liveness: http://${SERVER_HOST}:${SERVER_PORT}/live${NC}"
echo -e "${YELLOW}Readiness: http://${SERVER_HOST}:${SERVER_PORT}/ready${NC}"
echo -e "${YELLOW}MCP Endpoint: http://${SERVER_HOST}:${SERVER_PORT}/mcp${NC}"
echo -e "${YELLOW}Local access: http://localhost:${SERVER_PORT}/mcp${NC}"
echo -e "${YELLOW}Workers: ${WORKERS}${NC}"
echo -e "${YELLOW}Use Ctrl+C to stop the service${NC}"
# Start the server in HTTP mode (Streamable HTTP)
python -m doris_mcp_server.main --transport http --host "${SERVER_HOST}" --port "${SERVER_PORT}" --workers "${WORKERS}"
# Check exit status
if [ $? -ne 0 ]; then
echo -e "${RED}Server exited abnormally! Check logs for more information${NC}"
exit 1
fi
# Show usage tips
echo -e "${YELLOW}Tip: If the page displays abnormally, please clear your browser cache or use incognito mode${NC}"
echo -e "${YELLOW}Chrome browser clear cache shortcut: Ctrl+Shift+Del (Windows) or Cmd+Shift+Del (Mac)${NC}"
echo -e "${CYAN}For testing HTTP endpoints, you can use:${NC}"
echo -e "${CYAN} curl --fail http://127.0.0.1:${SERVER_PORT}/live${NC}"
echo -e "${CYAN} curl --fail http://127.0.0.1:${SERVER_PORT}/ready${NC}"