-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy path__init__.py
More file actions
61 lines (46 loc) · 1.65 KB
/
__init__.py
File metadata and controls
61 lines (46 loc) · 1.65 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
import argparse
import logging
import signal
import sys
# Configure root logger
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[logging.StreamHandler(sys.stderr)],
)
logger = logging.getLogger("openstack-mcp-server")
def handle_interrupt(signum, frame):
"""Handle keyboard interrupt (Ctrl+C) gracefully."""
logger.info(f"Received signal {signum}, shutting down gracefully...")
sys.exit(0)
def main():
"""Openstack MCP Server main entry point."""
try:
# Import here to avoid circular imports
from openstack_mcp_server.config import MCP_TRANSPORT
from openstack_mcp_server.server import serve
parser = argparse.ArgumentParser(
description="Openstack MCP Server",
)
# Set up signal handler for graceful shutdown
signal.signal(signal.SIGINT, handle_interrupt)
signal.signal(signal.SIGTERM, handle_interrupt)
# Validate transport protocol
if MCP_TRANSPORT not in ["stdio", "streamable-http"]:
logger.error(
f"Invalid transport protocol: {MCP_TRANSPORT}. Using stdio instead.",
)
transport = "stdio"
else:
transport = MCP_TRANSPORT
# Start the server
logger.info(
f"Starting Openstack MCP Server with {transport} transport",
)
args = parser.parse_args()
serve(transport=transport, **vars(args))
except KeyboardInterrupt:
logger.info("Keyboard interrupt received. Shutting down gracefully...")
sys.exit(0)
if __name__ == "__main__":
main()