# JobSweep

> Search 195k open jobs from 2,831 company career sites. Read-only, no API key.

- name: works.jobsweep/jobsweep
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 94/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/works.jobsweep%2Fjobsweep
- tools: https://api.protogrid.dev/v1/servers/works.jobsweep%2Fjobsweep/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "jobsweep": {
      "type": "http",
      "url": "https://jobsweep.works/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-0d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 94/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,191 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`, `stability.new_links`: tool history recorded for 0 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 6, about 1,191 tokens to load them all
- tool set hash: 67de520222d52ae6af1ca19ca618e5da
- tools last changed: 2026-11-14T04:40:41.548Z
- badge: [![protogrid quality](https://protogrid.dev/badge/works.jobsweep/jobsweep.svg)](https://protogrid.dev/servers/works.jobsweep/jobsweep)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-14 `get_coverage` changed (title, description, inputSchema, annotations)
  - before: Which hiring platforms are indexed: status (`live`, `blocked`, `no live deployments`, `no connector`, `no tenants`), number of career sites, open jobs and the time of the last successful crawl.
  - after: Which hiring platforms (ATS) are covered and whether they work: status (`live`, `blocked`, `no live deployments`, `no connector`, `no tenants`), career sites, open jobs and last successful crawl. Not for finding jobs; use search_jobs.
- 2026-11-14 `index_stats` changed (title, description, annotations)
  - before: Size and freshness of the index: open jobs, postings, career sites, live platforms, time of the last successful crawl and the success rate of recent crawl runs.
  - after: Size and freshness of the index: open jobs, postings, career sites, live platforms, last successful crawl and recent crawl success rate. Not for finding jobs; use search_jobs.
- 2026-11-14 `search_companies` changed (title, description, inputSchema, annotations)
  - before: Find companies by name with their number of open jobs, largest first. Pass the exact name as `company` to search_jobs to list their jobs.
  - after: Find companies by name with their number of open jobs, largest first. Pass a returned name as `company` to search_jobs to list that company's jobs.
- 2026-11-14 `list_filter_values` changed (title, description, annotations)
  - before: List the values accepted by the `remote` and `employment_type` filters of search_jobs with the number of open jobs for each, plus the countries (ISO code and name) and companies with the most open jobs.
  - after: List the values accepted by the `remote` and `employment_type` filters of search_jobs with open job counts, plus top countries (ISO code, name) and companies. Call before search_jobs when you need valid filter values.
- 2026-11-14 `get_job` changed (title, description, annotations)
  - before: Get one job in full: plain-text description (truncated to 8000 characters), every source posting it was merged from, and the change history of those postings.
  - after: Get one job in full: plain-text description (truncated to 8000 characters), salary, every source posting it was merged from and their change history. Call after search_jobs with a job_id.
- 2026-11-14 `search_jobs` changed (title, description, inputSchema, annotations)
  - before: Search open jobs across all indexed career sites (duplicates merged). Returns `jobs` (id, title, company, location, remote, employment_type, salary, posted_at, first_seen_at, url to the JobSweep page, company_url, apply_url) newest or most relevant first, and `next_cursor`. To get the next page call again with the same filters and `cursor` set to `next_cursor`; null means the last page. Call get_job for the description.
  - after: Search open jobs across all indexed career sites (duplicates merged). Use list_filter_values for valid filter values and get_job for a job's full description. Returns `jobs` (id, title, company, location, remote, employment_type, salary, posted_at, first_seen_at, url, company_url, apply_url) newest or most relevant first, and `next_cursor`. For the next page repeat the call with the same filters and `cursor` set to `next_cursor`; null means the last page.

Full history: https://api.protogrid.dev/v1/servers/works.jobsweep%2Fjobsweep/changes

## Remotes

- https://jobsweep.works/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (6)

- `get_coverage`: Which hiring platforms (ATS) are covered and whether they work: status (`live`,
        `blocked`, `no live deployments`, `no connector`, `no tenants`), career sites, open
        jobs and last successful crawl. Not for finding jobs; use search_jobs.
- `get_job`: Get one job in full: plain-text description (truncated to 8000 characters), salary,
        every source posting it was merged from and their change history. Call after
        search_jobs with a job_id.
- `index_stats`: Size and freshness of the index: open jobs, postings, career sites, live platforms,
        last successful crawl and recent crawl success rate. Not for finding jobs; use
        search_jobs.
- `list_filter_values`: List the values accepted by the `remote` and `employment_type` filters of
        search_jobs with open job counts, plus top countries (ISO code, name) and companies.
        Call before search_jobs when you need valid filter values.
- `search_companies`: Find companies by name with their number of open jobs, largest first. Pass a
        returned name as `company` to search_jobs to list that company's jobs.
- `search_jobs`: Search open jobs across all indexed career sites (duplicates merged). Use
        list_filter_values for valid filter values and get_job for a job's full description.

        Returns `jobs` (id, title, company, location, remote, employment_type, salary,
        posted_at, first_seen_at, url, company_url, apply_url) newest or most relevant first,
        and `next_cursor`. For the next page repeat the call with the same filters and `cursor`
        set to `next_cursor`; null means the last page.
        
