# OpenJob (remote · openjobs-3168f222.alpic.live)

Find jobs in your own words and apply on the company website — no detours.

- Trust score: 72/100 (medium)
- Change this week: +6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `openjobs-3168f222.alpic.live`: 72/100 (this document), [markdown](https://verifymcp.io/servers/live-alpic-openjobs-3168f222-openjobs/openjobs-3168f222.md), [page](https://verifymcp.io/servers/live-alpic-openjobs-3168f222-openjobs/openjobs-3168f222)

## Channel facts

- Endpoint: `https://openjobs-3168f222.alpic.live`
- Transports: `streamable-http, sse`
- Auth: `none`
- Version: `0.0.2`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 70/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2093 tokens (~209/item across 10 items; 6 tools + 4 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 85% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### Claude

```bash
claude mcp add --transport http live-alpic-openjobs-3168f222-openjobs https://openjobs-3168f222.alpic.live/
```

### Codex

```toml
[mcp_servers.live-alpic-openjobs-3168f222-openjobs]
url = "https://openjobs-3168f222.alpic.live/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "live-alpic-openjobs-3168f222-openjobs": {
      "type": "remote",
      "url": "https://openjobs-3168f222.alpic.live/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add live-alpic-openjobs-3168f222-openjobs --url https://openjobs-3168f222.alpic.live/ --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  live-alpic-openjobs-3168f222-openjobs:
    url: "https://openjobs-3168f222.alpic.live/"
```

### Other

```json
{
  "mcpServers": {
    "live-alpic-openjobs-3168f222-openjobs": {
      "type": "http",
      "url": "https://openjobs-3168f222.alpic.live/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 72, 0)

- [security] Resource “get_job_details” now points somewhere else: ui://views/apps-sdk/job-details.html?v=d67f2d6f → ui://views/ext-apps/job-details.html?v=d67f2d6f
- [security] Resource “search_jobs” now points somewhere else: ui://views/apps-sdk/jobs.html?v=97de5338 → ui://views/ext-apps/jobs.html?v=97de5338

### 2026-08-02 (score 72, +1)

- [security] Resource “search_jobs” now points somewhere else: ui://views/apps-sdk/jobs.html?v=97de5338 → ui://views/ext-apps/jobs.html?v=97de5338
- [security] Resource “get_job_details” now points somewhere else: ui://views/apps-sdk/job-details.html?v=d67f2d6f → ui://views/ext-apps/job-details.html?v=d67f2d6f

### 2026-08-01 (score 71, 0)

- [security] Resource “get_job_details” now points somewhere else: ui://views/apps-sdk/job-details.html?v=d67f2d6f → ui://views/ext-apps/job-details.html?v=d67f2d6f
- [security] Resource “search_jobs” now points somewhere else: ui://views/apps-sdk/jobs.html?v=97de5338 → ui://views/ext-apps/jobs.html?v=97de5338

### 2026-07-31 (score 71, +3)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 68, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 67, 0)

- [security] Resource “search_jobs” now points somewhere else: ui://views/apps-sdk/jobs.html?v=97de5338 → ui://views/ext-apps/jobs.html?v=97de5338
- [security] Resource “get_job_details” now points somewhere else: ui://views/apps-sdk/job-details.html?v=d67f2d6f → ui://views/ext-apps/job-details.html?v=d67f2d6f

### 2026-07-28 (score 67, +1)

- [security] Resource “get_job_details” now points somewhere else: ui://views/apps-sdk/job-details.html?v=d67f2d6f → ui://views/ext-apps/job-details.html?v=d67f2d6f
- [security] Resource “search_jobs” now points somewhere else: ui://views/apps-sdk/jobs.html?v=97de5338 → ui://views/ext-apps/jobs.html?v=97de5338

### 2026-07-27 (score 66, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (6)

### `get_app_intro` (~35 tokens)

Friendly introduction to OpenJob for job seekers. Use when the user is new or asks how this works. Return plain language only.

Output parameters:

- `cv_note` (string)
- `example_prompts` (array)
- `name` (string)
- `seniority_note` (string)
- `tagline` (string)
- `tips` (array)
- `welcome` (string)
- `what_it_does` (string)
- `who_its_for` (string)

### `explain_filters` (~37 tokens)

Plain-language search tips for job seekers. Use when the user asks how to search or what they can filter. No technical jargon in the reply.

Output parameters:

- `filters` (array)
- `if_no_results` (array)
- `intro` (string)
- `limitations` (array)
- `role_presets` (array)
- `title` (string)
- `verified_examples` (array)

### `explain_data_source` (~49 tokens)

Where job listings come from, licensing, and links to the data provider. Use only when the user asks about data source, Feashliaa, license, attribution, or who built OpenJob.

Output parameters:

- `affiliation` (string)
- `github` (string)
- `license` (string)
- `license_url` (string)
- `maintainer` (string)
- `openjob_repo` (string)
- `provider` (string)
- `summary` (string)
- `update_cadence` (string)
- `website` (string)
- `what_we_show` (string)

### `get_index_status` (~36 tokens)

How much of the job board is loaded and whether search is ready. Explain to the user in simple terms, not technical sync jargon.

Output parameters:

- `baked_index` (boolean)
- `coverage_percent`
- `jobs_loaded` (number)
- `message` (string)
- `ready` (boolean)
- `still_loading` (boolean)
- `total_jobs_about`

### `search_jobs` (~1295 tokens)

Search open company job listings. Map the user's natural language to filters. Always set search_mode on search_jobs and get_job_details: keyword_search when the user only describes a role, place, or filters; resume_match when they upload a resume/CV or ask to match jobs to their background or memory. Never show parameter names (role_cluster, skill_level, search_mode, etc.) to the user — speak like a career coach. Do not mention data sources or licenses unless the user asks — use explain_data_source for that. Every job has url and apply_url (company careers page). When you list jobs in a table, bullets, or prose, each row must include at least one clickable markdown link to that url — e.g. linked title [Title](url), linked company name, or a separate Apply / View posting link. Never list a job with no way to click through. After search_jobs, add a structured follow-up in the user's language — the widget shows cards; your text adds coaching. Include: (1) a markdown table Role | Company | Fit (use resume/memory when available; otherwise one-line highlight per row); (2) a numbered priority list for applying (top 3–5 with brief rationale); (3) if the user shared background, one CV positioning sentence they can reuse; (4) related title search variants as inline tags (e.g. Entrepreneur in Residence, Venture Development, GTM Associate, Chief of Staff). When the user has a resume or detailed background, call get_job_details on the best 5–8 urls before ranking. Do not invent match percentages. search_jobs live-checks up to 8 Greenhouse/Ashby/Lever listings per search and drops roles confirmed closed on the company site. For deeper advice on a shortlist, call get_job_details on the best urls (batch up to 10) to load full posting text. Use verifiable_only=true when the user wants only listings we can double-check live (~30% of the board). When the user uploads a resume (curriculum vitae) or asks to match jobs to their background (or ChatGPT memory): (1) extract target titles,…

Input parameters:

- `ats` (string): Career-site type if user asks, e.g. greenhouse, lever, ashby
- `company` (string): Company name.
- `exclude_keywords` (string): Comma-separated words to exclude from title
- `hide_recruiters` (boolean): Exclude recruiting-agency posts; default true
- `include_keywords` (string): Comma-separated words that must appear in title
- `limit` (integer)
- `location` (string): City, region, or country.
- `min_salary` (number)
- `remote_only` (boolean)
- `role_cluster` (string): Internal preset when user wants a role family: founder_associate | chief_of_staff | product_manager
- `search_mode` (string, required): keyword_search = role/location/filters only; resume_match = user uploaded a resume (CV) or asked to match jobs to their background or ChatGPT memory.
- `skill_level` (string): Seniority if user says junior, senior, etc.
- `title` (string): Job title keywords from the user's words.
- `user_intent` (string): A concise summary of what the user is trying to accomplish, derived from their message or the conversation context that triggered this tool call. This is used to understand the user's intent and cont…
- `verifiable_only` (boolean): Only Greenhouse, Ashby, and Lever (~30% of board) — listings we can live-verify
- `verify_live` (boolean): Live-check Greenhouse/Ashby/Lever and drop listings confirmed closed; default true

Output parameters:

- `apply_note` (string)
- `count` (number)
- `hints` (array)
- `jobs` (array)
- `listings_removed` (number)
- `live_checks_run` (number)
- `locale` (string)
- `model_followup_hint` (string)

### `get_job_details` (~583 tokens)

Fetch full posting text for job urls from search_jobs. Set search_mode resume_match when fetching postings to compare against the user's resume or background; keyword_search otherwise. Greenhouse (including embedded careers pages), Ashby, and Lever are supported; other career sites may return unsupported_ats. Closed roles are cached about 24 hours; open postings about 14 days (posting text only, not user resumes). Use description_text to compare against the user's resume or stated background.

Input parameters:

- `search_mode` (string): keyword_search = role/location/filters only; resume_match = user uploaded a resume (CV) or asked to match jobs to their background or ChatGPT memory.
- `url` (string): Single job url from search_jobs results.
- `urls` (array): Up to 10 job urls — preferred after resume match.
- `user_intent` (string): A concise summary of what the user is trying to accomplish, derived from their message or the conversation context that triggered this tool call. This is used to understand the user's intent and cont…

Output parameters:

- `count` (number)
- `from_cache_count` (number)
- `jobs` (array)
- `loaded_ok` (number)
- `requested` (number)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/live-alpic-openjobs-3168f222-openjobs/openjobs-3168f222#diagnostics

## Score history

- 2026-08-03: 72
- 2026-08-02: 72
- 2026-08-01: 71
- 2026-07-31: 71
- 2026-07-30: 68
- 2026-07-29: 67
- 2026-07-28: 67
- 2026-07-27: 66
- 2026-07-26: 65

## Links

- Remote endpoint: https://openjobs-3168f222.alpic.live/
- Website: https://openjobs-3168f222.alpic.live/try
- Changelog RSS feed: https://verifymcp.io/servers/live-alpic-openjobs-3168f222-openjobs/openjobs-3168f222/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/live-alpic-openjobs-3168f222-openjobs/openjobs-3168f222/changelog.json
- HTML version of this page: https://verifymcp.io/servers/live-alpic-openjobs-3168f222-openjobs/openjobs-3168f222
