-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart_http_server.py
More file actions
133 lines (108 loc) · 3.41 KB
/
start_http_server.py
File metadata and controls
133 lines (108 loc) · 3.41 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
#!/usr/bin/env python3
"""
Context MCP HTTP Server Startup Script
Convenient script to start the Context MCP server with HTTP transport.
This provides a persistent server instance that improves reliability
when working with multiple projects in Claude Code CLI.
Usage:
python start_http_server.py
Or with custom host/port:
python start_http_server.py --host 0.0.0.0 --port 9000
The server will be available at:
http://127.0.0.1:8000/ (default)
Update your ~/.claude.json to use HTTP transport:
{
"mcpServers": {
"context": {
"type": "http",
"url": "http://localhost:8000/"
}
}
}
"""
import argparse
import sys
import os
import logging
import uvicorn
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from src.config.settings import settings
from src.logging.manager import configure_logging
# Configure logging
configure_logging(level=settings.log_level, fmt=settings.log_format, use_stderr=False)
logger = logging.getLogger(__name__)
def main():
"""Parse arguments and start the HTTP server"""
parser = argparse.ArgumentParser(
description="Start Context MCP HTTP Server",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
# Start with default settings (localhost:8000)
python start_http_server.py
# Start on all interfaces
python start_http_server.py --host 0.0.0.0
# Use custom port
python start_http_server.py --port 9000
# Enable debug logging
python start_http_server.py --log-level DEBUG
Configuration:
Update ~/.claude.json to use HTTP transport:
{
"mcpServers": {
"context": {
"type": "http",
"url": "http://localhost:8000/"
}
}
}
"""
)
parser.add_argument(
"--host",
default="127.0.0.1",
help="Host to bind to (default: 127.0.0.1)"
)
parser.add_argument(
"--port",
type=int,
default=8000,
help="Port to bind to (default: 8000)"
)
parser.add_argument(
"--log-level",
choices=["DEBUG", "INFO", "WARNING", "ERROR"],
default=settings.log_level,
help=f"Logging level (default: {settings.log_level})"
)
args = parser.parse_args()
# Update log level if specified
if args.log_level != settings.log_level:
configure_logging(level=args.log_level, fmt=settings.log_format, use_stderr=False)
logger.info("=" * 70)
logger.info("Context MCP HTTP Server")
logger.info("=" * 70)
logger.info(f"Server: {settings.mcp_server_name} v{settings.mcp_server_version}")
logger.info(f"Host: {args.host}")
logger.info(f"Port: {args.port}")
logger.info(f"URL: http://{args.host}:{args.port}/")
logger.info(f"Log Level: {args.log_level}")
logger.info("=" * 70)
logger.info("")
logger.info("Starting server... Press Ctrl+C to stop")
logger.info("")
# Import the HTTP server module
from src.mcp_server.http_server import create_app
# Run the server using FastMCP's built-in run() method
try:
app = create_app()
uvicorn.run(app, host=args.host, port=args.port, log_level=args.log_level.lower())
except KeyboardInterrupt:
logger.info("")
logger.info("Server stopped by user")
except Exception as e:
logger.error(f"Server error: {e}", exc_info=True)
sys.exit(1)
if __name__ == "__main__":
main()