import logging
from dotenv import load_dotenv
import os
from flask import Flask, request, jsonify
# Load environment variables from .env file
dotenv_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), '.env')
load_dotenv(dotenv_path)
from custom_mcp.mcp_controller import MCPController
# ——— Logging Setup ———
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)
app = Flask(__name__)
controller = MCPController()
# Root route for browser visits
@app.route("/")
def root():
return "<h2>Custom MCP API is running.<br>Use /task, /task/<task_id>/run, or /stats endpoints.</h2>", 200
@app.route("/task", methods=["POST"])
def create_task():
payload = request.json or {}
logging.info("POST /task payload: %s", payload)
task_id = controller.create_task(
payload.get("input", ""),
payload.get("tools", [])
)
return jsonify({"task_id": task_id}), 201
@app.route("/task/<task_id>/run", methods=["POST"])
def run_task(task_id):
logging.info("POST /task/%s/run", task_id)
result = controller.run(task_id)
return jsonify(result)
# --- Real-time stats endpoint for Streamlit UI ---
@app.route("/stats", methods=["GET"])
def stats():
return jsonify(controller.get_stats())
if __name__ == "__main__":
logging.info("Starting Custom MCP server on port 8000")
app.run(host="0.0.0.0", port=8000)