Metadata-Version: 2.4
Name: jobscan-mcp
Version: 1.0.0
Summary: MCP server over a daily job market scan: four read-only tools to search postings and track market stats
Author: Al Amin Bashir Afara
License: MIT
Project-URL: Homepage, https://github.com/aminafara123/jobscan-mcp
Project-URL: Repository, https://github.com/aminafara123/jobscan-mcp
Keywords: mcp,job-search,job-market,job-scanner,remote-jobs,uae
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: mcp
Dynamic: license-file

# jobscan-mcp

[![M8ven Score](https://m8ven.ai/badge/mcp/aminafara123-jobscan-mcp-1c9wqy?v=98cb6d9d6c8106d3d0ccca8da34b74ff)](https://m8ven.ai/mcp/aminafara123-jobscan-mcp-1c9wqy)

An MCP server over my [job-scan-automation](https://github.com/aminafara123/job-scan-automation) dataset: the daily market scan behind [uae-remote-jobs-daily](https://github.com/aminafara123/uae-remote-jobs-daily), exposed as tools that any MCP-capable AI client can call.

MCP (Model Context Protocol) is the open standard for giving AI models controlled access to tools and data. This server is the pattern in miniature and in production: my own dataset, four read-only tools, and a model on the other end that can suddenly answer questions like "any new GRC postings this week?" with real data instead of guesses.

## Tools

| Tool | What it does |
|---|---|
| `latest_report()` | Full text of the most recent daily scan |
| `search_jobs(query, days)` | Search postings across the last N days of reports, links included |
| `market_stats(days)` | Per-day relevant/new counts: the pulse of the niche market |
| `is_seen(company, title)` | Whether the scanner's dedupe memory already knows a posting |

## Setup

```bash
python3 -m venv .venv
.venv/bin/pip install mcp
```

Wire it into Claude Code:

```bash
claude mcp add jobscan -- /path/to/jobscan-mcp/.venv/bin/python /path/to/jobscan-mcp/jobscan_mcp.py
```

## Demo

What it looks like from Claude Code:

```
> check the job scan: anything new in IAM in the last week?

⏺ jobscan · search_jobs("IAM", 7)

  2 match(es) for 'IAM':

  [2026-09-26] - **IAM Engineer** at Falconride Logistics
    https://example.com/falconride/iam-engineer
  [2026-09-23] - **Identity and Access Analyst** at Northgate Retail
    https://example.com/northgate/iam-analyst

⏺ Two IAM roles surfaced this week. Falconride is the Dubai one,
  Northgate is remote. Neither was in the scan before Tuesday.
```

The postings above are demo data. The format is exactly what the server returns.

## Design notes

- **Read-only by construction.** Every tool reads files, nothing mutates the dataset. Giving a model tools means deciding what it must never be able to do, and here that decision is structural, not a prompt instruction.
- **Sanitization at the boundary.** The underlying reports can carry the operator's personal notes, so the server strips them before anything crosses the protocol. Data boundaries belong in code, not in hope.
- **Small on purpose.** Four tools, one file, standard library plus the `mcp` SDK. An MCP server doesnt need to be a platform to be useful. It just needs to expose the right verbs over data you actually maintain.

## About

Al Amin Bashir Afara, Dubai · [github.com/aminafara123](https://github.com/aminafara123) · [linkedin.com/in/aminafara](https://www.linkedin.com/in/aminafara)
