mcp / tech_radar /ui /static_server.py
Anish Dahiya
Deploy TechRadar-MCP Gradio App to Hugging Face Space
cca012f
Raw
History Blame Contribute Delete
2.61 kB
import json
import os
from fastapi import FastAPI, HTTPException
from fastapi.responses import HTMLResponse, JSONResponse
from pydantic import BaseModel
from typing import Dict, Any, Optional
from tech_radar.mcp.tools import (
get_db_and_vector_store,
tool_search_tech_jobs,
tool_analyze_skill_gap,
tool_generate_resume_patch,
tool_get_market_insights,
tool_generate_interview_prep_kit
)
app = FastAPI(title="TechRadar MCP Web Server")
class McpRequest(BaseModel):
tool: str
args: Dict[str, Any]
@app.get("/", response_class=HTMLResponse)
def get_web_app():
html_path = os.path.join(os.path.dirname(__file__), "web_app.html")
if not os.path.exists(html_path):
raise HTTPException(status_code=404, detail="web_app.html not found")
with open(html_path, "r", encoding="utf-8") as f:
return f.read()
@app.get("/api/jobs")
def get_jobs(domain: Optional[str] = None, city: Optional[str] = None):
db, _, _, _ = get_db_and_vector_store()
jobs = [j.dict() for j in db.search_jobs(domain=domain, city=city, limit=200)]
return {"count": len(jobs), "jobs": jobs}
@app.get("/api/insights")
def get_insights(city: str = "All", domain: str = "All"):
_, _, _, analyst = get_db_and_vector_store()
report = analyst.generate_market_report(city=city, domain=domain)
return report.dict()
@app.post("/api/mcp/execute")
def execute_mcp_tool(req: McpRequest):
tool_name = req.tool
args = req.args
if tool_name == "search_tech_jobs":
res = tool_search_tech_jobs(
domain=args.get("domain", "All"),
city=args.get("city", "All"),
query=args.get("query")
)
elif tool_name == "analyze_skill_gap":
res = tool_analyze_skill_gap(
resume_text=args.get("resume_text", ""),
target_job_id=args.get("target_job_id", "")
)
elif tool_name == "generate_tailored_resume_patch":
res = tool_generate_resume_patch(
resume_text=args.get("resume_text", ""),
target_job_id=args.get("target_job_id", "")
)
elif tool_name == "get_market_insights":
res = tool_get_market_insights(
domain=args.get("domain", "All"),
city=args.get("city", "All")
)
elif tool_name == "generate_interview_prep_kit":
res = tool_generate_interview_prep_kit(
target_job_id=args.get("target_job_id", "")
)
else:
raise HTTPException(status_code=400, detail=f"Unknown tool: {tool_name}")
return {"status": "success", "tool": tool_name, "result": res}