simple_server.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. """
  2. AI MCP Web UI - 简化后端服务器
  3. 使用 Python 内置 http.server 模块
  4. """
  5. import os
  6. import json
  7. import http.server
  8. import socketserver
  9. from pathlib import Path
  10. # 配置
  11. PORT = int(os.getenv('PORT', 5000))
  12. FRONTEND_DIR = str(Path(__file__).parent.parent / 'frontend')
  13. class MCPHandler(http.server.SimpleHTTPRequestHandler):
  14. def __init__(self, *args, **kwargs):
  15. super().__init__(*args, directory=FRONTEND_DIR, **kwargs)
  16. def log_message(self, format, *args):
  17. print(f"[{self.log_date_time_string()}] {format % args}")
  18. def end_headers(self):
  19. self.send_header('Access-Control-Allow-Origin', '*')
  20. self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
  21. self.send_header('Access-Control-Allow-Headers', 'Content-Type, X-Session-ID')
  22. super().end_headers()
  23. def do_OPTIONS(self):
  24. self.send_response(200)
  25. self.end_headers()
  26. def do_GET(self):
  27. if self.path == '/api/health':
  28. self.send_json_response(200, {
  29. "status": "ok",
  30. "message": "MCP Web UI Server (Simplified)",
  31. "frontend_dir": FRONTEND_DIR
  32. })
  33. elif self.path == '/api/mcp/servers':
  34. self.send_json_response(200, {
  35. "servers": [
  36. {"id": "novel-translator", "name": "Novel Translator MCP", "enabled": True},
  37. {"id": "novel-platform-user", "name": "Novel Platform User MCP", "enabled": False},
  38. {"id": "novel-platform-admin", "name": "Novel Platform Admin MCP", "enabled": False}
  39. ]
  40. })
  41. else:
  42. super().do_GET()
  43. def do_POST(self):
  44. content_length = int(self.headers.get('Content-Length', 0))
  45. data = {}
  46. if content_length > 0:
  47. try:
  48. post_data = self.rfile.read(content_length)
  49. data = json.loads(post_data.decode('utf-8'))
  50. except:
  51. pass
  52. if self.path == '/api/chat':
  53. message = data.get('message', '')
  54. self.send_json_response(200, {
  55. "response": f"[简化服务器] 收到: {message}\n\n注意: 完整 AI 功能需要安装 Flask、Anthropic SDK 等依赖。",
  56. "model": "simplified-server"
  57. })
  58. elif self.path == '/api/auth/login':
  59. self.send_json_response(200, {
  60. "success": False,
  61. "message": "完整认证功能需要 Flask 支持"
  62. })
  63. else:
  64. self.send_json_response(404, {"error": "Not found"})
  65. def send_json_response(self, code, data):
  66. self.send_response(code)
  67. self.send_header('Content-Type', 'application/json')
  68. self.end_headers()
  69. self.wfile.write(json.dumps(data, ensure_ascii=False).encode('utf-8'))
  70. def main():
  71. print("=" * 50)
  72. print(" MCP Web UI - 简化服务器")
  73. print("=" * 50)
  74. print(f" 端口: {PORT}")
  75. print(f" 前端: {FRONTEND_DIR}")
  76. print(f" 访问: http://localhost:{PORT}")
  77. print("=" * 50)
  78. with socketserver.TCPServer(("0.0.0.0", PORT), MCPHandler) as httpd:
  79. httpd.serve_forever()
  80. if __name__ == '__main__':
  81. main()