Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Search for AI internship and early-career roles in Bengaluru using Tavily, save leads to a local JSON database, and render a Prefab dashboard UI.

README.md

Bengaluru AI Job Radar

Bengaluru AI Job Radar is a Python FastMCP server that helps an AI agent search for AI internship and early-career AI roles in Bengaluru, save them to a local JSON job tracker, and render a Prefab dashboard UI.

Built with FastMCP 3.4.x, Prefab UI 0.20.x, Tavily for internet search, and JSON for local persistence.

---

Assignment Mapping

| Assignment Requirement | Implementation | |---|---| | Custom MCP server | Python FastMCP server (server.py) | | Internet-related function | search_ai_jobs uses Tavily API | | Local file CRUD | job_tracker_db performs CRUD on local JSON file (data/bengaluru_ai_job_radar.json) | | UI communication | render_job_dashboard returns FastMCP Prefab UI components | | Web app / dashboard | Prefab-rendered dashboard inside MCP-compatible host | | Prompt forcing all 3 tools | Included in demo_prompt.md |

---

Architecture

User prompt
  → Agent calls search_ai_jobs (Tavily internet search)
  → Agent saves results via job_tracker_db (JSON CRUD)
  → Agent reads records via job_tracker_db (JSON CRUD)
  → Agent calls render_job_dashboard (Prefab UI)
  → Prefab dashboard appears in MCP host

MCP Tools

| Tool | Purpose | Category | |---|---|---| | search_ai_jobs | Search Tavily for AI/ML/GenAI internships and junior roles in Bengaluru | Internet | | job_tracker_db | Create, read, update, delete, and manage job leads in a local JSON database | Local CRUD | | render_job_dashboard | Render a rich Prefab UI dashboard with summary metrics, job table, and charts | UI |

---

Setup (Windows)

cd C:\Cursor\EAGv3\S4
cd bengaluru-ai-job-radar

python -m venv .venv
.venv\Scripts\activate

pip install -e ".[dev]"

copy .env.example .env
# Edit .env and add your TAVILY_API_KEY

Setup (macOS / Linux)

cd /path/to/bengaluru-ai-job-radar

python3 -m venv .venv
source .venv/bin/activate

pip install -e ".[dev]"

cp .env.example .env
# Edit .env and add your TAVILY_API_KEY

---

Environment Variables

Create a .env file (or set system environment variables):

TAVILY_API_KEY=tvly-xxxxxxxxxxxxxxxxx
DATABASE_PATH=data/bengaluru_ai_job_radar.db
  • TAVILY_API_KEY (required): Get one free at tavily.com.
  • DATABASE_PATH (optional): Defaults to data/bengaluru_ai_job_radar.db relative to the project root.

---

Running the MCP Server

Direct Python execution

python -m bengaluru_ai_job_radar.server

Using FastMCP CLI

fastmcp run src/bengaluru_ai_job_radar/server.py

App preview (if supported)

fastmcp dev src/bengaluru_ai_job_radar/server.py

---

Connecting to an MCP Host

Add this to your MCP host configuration (Claude Desktop, Cursor, VS Code, etc.):

{
  "mcpServers": {
    "bengaluru-ai-job-radar": {
      "command": "python",
      "args": ["-m", "bengaluru_ai_job_radar.server"],
      "cwd": "C:\\Cursor\\EAGv3\\S4\\bengaluru-ai-job-radar",
      "env": {
        "TAVILY_API_KEY": "your_key_here",
        "DATABASE_PATH": "data/bengaluru_ai_job_radar.db"
      }
    }
  }
}

Note: Exact MCP host configuration may differ depending on Claude Desktop, Cursor, VS Code, ChatGPT MCP Apps, or another host.

---

Demo Prompt

Copy this prompt into your MCP-connected AI agent to exercise all 3 tools:

Use the Bengaluru AI Job Radar MCP server to complete this full workflow. First, use the MCP internet search tool search_ai_jobs to find companies currently hiring AI Interns, ML Interns, GenAI Interns, LLM Engineer Interns, AI Implementation Engineer Interns, or Junior AI Engineers in Bengaluru. Prioritize roles involving Python, LLMs, RAG, AI agents, embeddings, prompt engineering, fine-tuning, model training, NLP, or AI backend development. Save at least 5 relevant job leads to the local JSON job tracker using the MCP CRUD tool job_tracker_db. Then read the saved records back using job_tracker_db with the list_jobs operation. Finally, render the saved results using the FastMCP Prefab UI tool render_job_dashboard. Do not answer from memory. Do not skip any step. You must call all 3 tools: 1. search_ai_jobs 2. job_tracker_db 3. render_job_dashboard

The full prompt is also available in demo_prompt.md.

---

Example Workflow

1. Search for roles

The agent calls search_ai_jobs with: ``json { "role_query": "AI Intern", "location": "Bengaluru", "max_results": 10 } ``

2. Save job leads

The agent calls job_tracker_db for each result: ``json { "operation": "create_job", "payload": { "company": "Sarvam AI", "role_title": "AI Intern", "role_type": "internship", "location": "Bengaluru", "skills": ["Python", "LLM", "RAG"], "fit_score": 85, "source_platform": "LinkedIn", "source_url": "https://linkedin.com/jobs/view/123" } } ``

3. List saved jobs

{
  "operation": "list_jobs",
  "payload": {"min_fit_score": 50}
}

4. Update a role status

{
  "operation": "update_status",
  "payload": {
    "job_id": "...",
    "new_status": "applied",
    "event_note": "Applied via company careers page"
  }
}

5. Add a note

{
  "operation": "add_note",
  "payload": {
    "job_id": "...",
    "note": "Reach out to founder on LinkedIn"
  }
}

6. Render dashboard

The agent calls render_job_dashboard → a Prefab UI dashboard appears with summary cards, a job table, recent activity, and skill frequency.

---

Running Tests

pytest tests/ -v

Tests cover:

  • Fit score calculator — scoring rubric, caps, keyword boosts
  • Normalization — company names, slug IDs, role type inference, skill extraction
  • JSON store — full CRUD lifecycle, upsert, deduplication, dashboard aggregation

---

Project Structure

bengaluru-ai-job-radar/
  README.md
  pyproject.toml
  .env.example
  .gitignore
  demo_prompt.md

  src/
    bengaluru_ai_job_radar/
      __init__.py
      server.py          # FastMCP server entrypoint
      config.py           # Environment variable loading
      schemas.py          # Pydantic validation models

      tools/
        __init__.py
        search.py          # search_ai_jobs MCP tool
        database.py        # job_tracker_db MCP tool
        dashboard.py       # render_job_dashboard MCP tool (Prefab UI)

      services/
        __init__.py
        tavily_service.py  # Tavily API integration
        fit_score.py       # Deterministic fit-score calculator
        normalization.py   # Company/role normalization, skill extraction

      storage/
        __init__.py
        json_store.py      # JSON CRUD store (JobRadarStore)

  data/
    .gitkeep              # JSON DB created here at runtime

  tests/
    test_fit_score.py
    test_normalization.py
    test_json_store.py

---

Known Limitations

  • Tavily search result quality depends on public indexing of job boards.
  • Some job platforms may block direct scraping, so the tool relies on Tavily snippets and source links.
  • Compensation data may be unavailable for many listings — shown as "unknown".
  • Prefab UI APIs are actively evolving; dependency pinning to prefab-ui>=0.20.0,<1.0.0 is used.
  • Dashboard interactivity depends on the MCP host's support for FastMCP Apps / Prefab rendering.
  • Company name extraction from search results is best-effort; some may show as "unknown".
  • The fit-score algorithm is deterministic and rule-based — it does not use ML or LLM reasoning.

---

Dependencies

| Package | Purpose | |---|---| | fastmcp[apps] ≥3.4.0 | MCP server framework + Prefab app support | | prefab-ui ≥0.20.0 | Prefab UI components (Card, DataTable, Badge, etc.) | | pydantic ≥2.0.0 | Request/response validation | | python-dotenv ≥1.0.0 | .env file loading | | httpx ≥0.27.0 | HTTP client (Tavily fallback) | | tavily-python ≥0.5.0 | Tavily search SDK | | rich ≥13.0.0 | Rich terminal output |

---

License

MIT

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Databases servers.