fix: ThreadingHTTPServer + unbuffered stdout + correct endpoint URL
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
FROM python:3.12-slim
|
FROM python:3.12-slim
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
ENV PYTHONPATH=/app
|
||||||
COPY lib/ lib/
|
COPY lib/ lib/
|
||||||
COPY scripts/ scripts/
|
COPY scripts/ scripts/
|
||||||
COPY server.py .
|
COPY server.py .
|
||||||
RUN python3 scripts/init_db.py
|
RUN python3 scripts/init_db.py
|
||||||
EXPOSE 3101
|
EXPOSE 3101
|
||||||
CMD ["python3", "server.py"]
|
CMD ["python3", "-u", "server.py"]
|
||||||
|
|||||||
15
server.py
15
server.py
@@ -6,6 +6,7 @@ import queue
|
|||||||
import threading
|
import threading
|
||||||
import uuid
|
import uuid
|
||||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||||
|
from socketserver import ThreadingMixIn
|
||||||
from urllib.parse import urlparse, parse_qs
|
from urllib.parse import urlparse, parse_qs
|
||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
@@ -259,10 +260,10 @@ class MCPHandler(BaseHTTPRequestHandler):
|
|||||||
self.send_header("Connection", "keep-alive")
|
self.send_header("Connection", "keep-alive")
|
||||||
self.send_header("Access-Control-Allow-Origin", "*")
|
self.send_header("Access-Control-Allow-Origin", "*")
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
# Send endpoint info
|
self.wfile.flush()
|
||||||
endpoint_msg = {"jsonrpc": "2.0", "method": "endpoint",
|
# Send endpoint event immediately per MCP SSE spec
|
||||||
"params": {"uri": f"http://0.0.0.0:{PORT}/messages?client_id={client.id}"}}
|
msg_url = f"http://192.168.86.11:{PORT}/messages?client_id={client.id}"
|
||||||
self.wfile.write(f"event: endpoint\ndata: {json.dumps(endpoint_msg)}\n\n".encode())
|
self.wfile.write(f"event: endpoint\ndata: {msg_url}\n\n".encode())
|
||||||
self.wfile.flush()
|
self.wfile.flush()
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
@@ -331,12 +332,16 @@ class MCPHandler(BaseHTTPRequestHandler):
|
|||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.wfile.write(body)
|
self.wfile.write(body)
|
||||||
|
|
||||||
|
class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
|
||||||
|
daemon_threads = True
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
db.init_db()
|
db.init_db()
|
||||||
server = HTTPServer(("0.0.0.0", PORT), MCPHandler)
|
server = ThreadingHTTPServer(("0.0.0.0", PORT), MCPHandler)
|
||||||
print(f"Handoff Pro MCP server running on port {PORT}")
|
print(f"Handoff Pro MCP server running on port {PORT}")
|
||||||
print(f"SSE endpoint: http://0.0.0.0:{PORT}/sse")
|
print(f"SSE endpoint: http://0.0.0.0:{PORT}/sse")
|
||||||
print(f"Tools registered: {len(TOOLS)}")
|
print(f"Tools registered: {len(TOOLS)}")
|
||||||
|
sys.stdout.flush()
|
||||||
server.serve_forever()
|
server.serve_forever()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user