VetJobs.au - veterinary jobs in Australia

Live Australian veterinary jobs: vet, nurse and locum roles, direct from employers.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
76%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~762Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (0.60% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "vetjobs": {
      "url": "https://vetjobs.au/mcp"
    }
  }
}

Remote endpoints

https://vetjobs.au/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_jobs(category, state, employment_type, q, updated_since, ...)

Search live veterinary job listings on VetJobs.au, Australia's dedicated veterinary job board: veterinarian, veterinary nurse, locum, practice manager, reception and animal care roles posted by clinics, hospitals and practices across Australia (plus some New Zealand roles), with no recruiter middlemen. Expired listings are never returned; a listing that is gone from the source disappears from results. Each listing reports provenance: source, is_imported, first_party and source_url. Pass first_party=true to restrict results to listings the employer posted directly — the most current inventory, and the subset safest to cite.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Occupation slug. Call list_categories first for the vocabulary and live counts, e.g. veterinary-nurse, veterinarian-small-animal."
    },
    "state": {
      "type": "string",
      "description": "Australian state/territory code, e.g. QLD, NSW, VIC."
    },
    "employment_type": {
      "type": "string",
      "description": "FULL_TIME, PART_TIME, LOCUM_TENENS, CASUAL, CONTRACTOR, TEMPORARY, RESIDENCY, INTERNSHIP, VOLUNTEER or OTHER."
    },
    "q": {
      "type": "string",
      "description": "Free-text search over title, employer, location and description."
    },
    "updated_since": {
      "type": "string",
      "description": "ISO 8601 date or datetime. Returns only listings changed since then — use this for incremental sync instead of re-fetching everything."
    },
    "first_party": {
      "type": "boolean",
      "description": "true = only listings posted directly by the employer (excludes scraped imports); false = only imports. Omit for both."
    },
    "new_graduates_accepted": {
      "type": "boolean",
      "description": "true = only listings that say they accept new graduates (graduate-friendly roles); false = only listings that do not. Omit for both."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1
    },
    "per_page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  },
  "additionalProperties": false
}
🟢get_job(id)

Fetch a single live listing by its numeric id, in the same shape search_jobs returns, including embedded schema.org JobPosting structured data. Returns an error if the listing is unknown, unpublished or expired — treat that as 'no longer available' rather than retrying.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Numeric listing id from search_jobs."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢list_categories

The board's vocabulary and volume: every occupation category with its live count, the states that currently have listings, the total active count and the first-party vs imported split. Call this first to learn valid filter values and how much inventory exists before searching.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
⚪recent_changes(updated_since, first_party, page, per_page)

Incremental sync: every listing created or updated since the given ISO 8601 timestamp, newest first. Poll this instead of re-fetching the whole board — combine with the returned ids to keep a local copy current. Expired listings are never returned.

Input Schema

{
  "type": "object",
  "properties": {
    "updated_since": {
      "type": "string",
      "description": "ISO 8601 date or datetime to sync from."
    },
    "first_party": {
      "type": "boolean",
      "description": "Restrict to first-party (non-imported) listings."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1
    },
    "per_page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  },
  "required": [
    "updated_since"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools