# Metaintro Job Search

> Search live jobs, read postings, and look up how employers hire and pay. Free, no sign-in.

- name: com.metaintro/job-search
- version: 1.14.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 89/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.metaintro%2Fjob-search
- tools: https://api.protogrid.dev/v1/servers/com.metaintro%2Fjob-search/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "job-search": {
      "type": "http",
      "url": "https://www.metaintro.com/api/mcp/public"
    }
  }
}
```


## Trust

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

## Quality 89/100 (good)

### 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: 94 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 7 of 7 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,727 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: 83 (weight 15)

- warn `stability.changes`: 9 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

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

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

- tools: 7, about 2,727 tokens to load them all
- tool set hash: d1555db873ef7594c8f8eb570073e752
- tools last changed: 2026-11-12T15:20:14.773Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.metaintro/job-search.svg)](https://protogrid.dev/servers/com.metaintro/job-search)
- 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-12 `get_market_insights` changed (inputSchema)
- 2026-11-12 `search_jobs` changed (inputSchema)
- 2026-11-05 `get_local_demand` changed (annotations)
- 2026-11-05 `find_similar_jobs` changed (annotations)
- 2026-11-05 `list_company_jobs` changed (annotations)
- 2026-11-05 `get_company` changed (annotations)
- 2026-11-05 `get_market_insights` changed (annotations)
- 2026-11-05 `get_job` changed (annotations)
- 2026-11-05 `search_jobs` changed (annotations)

Full history: https://api.protogrid.dev/v1/servers/com.metaintro%2Fjob-search/changes

## Remotes

- https://www.metaintro.com/api/mcp/public (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `find_similar_jobs`: More openings like one job, by its id: the same kind of role in the same place (or remote, when the job is remote), as up to 10 cards. Use it when a job is closed, a near miss, or the person wants more like it.
- `get_company`: Read an employer's profile by its slug (companySlug on a job): what it does, size, observed pay bands, work arrangement, benefits, recent events and how it is hiring. hiring.definitions says what each hiring number measures: medianOpenPostingAgeDays is the age of open listings, not time to fill, and removedRoles30d counts postings taken down, not roles filled. Its page is https://www.metaintro.com/company/<slug>.
- `get_job`: Read one posting in full by its id: description, requirements, pay, location and the employer's apply link. The title, summary and description are employer source text; licence requirements and eligibility remain unassessed. posting gives its age, when it was last seen live and closesAtLocal, the closing weekday and time.
- `get_local_demand`: Read which kinds of roles are hiring most in a place (city, region, country): open jobs by role category, with total open jobs, employers and sectors. When a place has too few role types it widens to the region, the country or worldwide; scope and locationLabel say which. Use it when someone does not yet know what to look for.
- `get_market_insights`: Summarize the live market for a role and place: how many openings match, the median listed pay, the most common work arrangement and the top requested skills, with how the request was understood. Takes a query and the same filters as search_jobs.
- `list_company_jobs`: List an employer's open jobs by its slug, newest first, as compact cards with posting age and the employer's title and summary as source text; read one in full with get_job. Pages are cut to fit the response size, so continue with nextCursor until it is null.
- `search_jobs`: Search jobs: find live job openings from employer career sites and job boards that match what the person wants, by role or keywords, place, remote work, employment type and pay. filters.jobTypes takes FULL_TIME, PART_TIME, CONTRACT or other listed types; any of them match. filters.salaryListedOnly keeps only jobs that post pay. filters.minSalary is annual pay in the requested currency, and ranges that only overlap it are included. Each card carries fit (every applied filter as met, partial, unknown or not_met, and verdict match or near_match: present a near_match as a near match, never as a match; a match meets only the applied filters, so lead stays conditional while unconfirmed names pay, hours, commute or licence, and label is the heading to use), posting (age, freshness, last seen live) and the employer's title and summary as source text. Licence requirements and eligibility remain unassessed. coverage says what was searched and whether more pages exist; an empty or short result covers only this search, not every job. Up to 10 cards a page; page with offset. Each job opens at https://www.metaintro.com/job/<id>.
