Jobsearch Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Jobsearch Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 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 |
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| 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 |
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_KEYcd /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_KEYCreate a .env file (or set system environment variables):
TAVILY_API_KEY=tvly-xxxxxxxxxxxxxxxxx
DATABASE_PATH=data/bengaluru_ai_job_radar.dbdata/bengaluru_ai_job_radar.db relative to the project root.python -m bengaluru_ai_job_radar.serverfastmcp run src/bengaluru_ai_job_radar/server.pyfastmcp dev src/bengaluru_ai_job_radar/server.pyAdd 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.
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 usingjob_tracker_dbwith thelist_jobsoperation.
>
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_jobs2.job_tracker_db3.render_job_dashboard
The full prompt is also available in demo_prompt.md.
The agent calls search_ai_jobs with:
{
"role_query": "AI Intern",
"location": "Bengaluru",
"max_results": 10
}The agent calls job_tracker_db for each result:
{
"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"
}
}{
"operation": "list_jobs",
"payload": {"min_fit_score": 50}
}{
"operation": "update_status",
"payload": {
"job_id": "...",
"new_status": "applied",
"event_note": "Applied via company careers page"
}
}{
"operation": "add_note",
"payload": {
"job_id": "...",
"note": "Reach out to founder on LinkedIn"
}
}The agent calls render_job_dashboard → a Prefab UI dashboard appears with summary cards, a job table, recent activity, and skill frequency.
pytest tests/ -vTests cover:
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.pyprefab-ui>=0.20.0,<1.0.0 is used.| 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 |
MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.