seek-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@seek-mcpfind software developer jobs in Auckland"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
seek-mcp
An MCP server for Seek New Zealand (nz.seek.com). It lets an MCP client such as Claude Code or Claude Desktop search jobs, read full ads, inspect what an application requires, manage the signed-in profile and résumés, save jobs, and submit applications.
Everything runs over Seek's own HTTP API with plain Node fetch. There is no browser, no Puppeteer and no Playwright at runtime: the search and job-ad endpoints are called directly, and the account features use the same GraphQL operations the Seek website itself sends. The operations and input shapes were captured from the site's network traffic and apply bundle; they are documented in NATIVE-NOTES.md.
This is an unofficial tool. It is not affiliated with or endorsed by SEEK. Automating your account may be against Seek's terms of use, applications it submits are real and cannot be withdrawn, and you are responsible for the truthfulness of every answer it sends on your behalf. Use it on your own account, at your own risk.
Why this exists
Built by ezydubs, who got tired of watching decent applications vanish into screening software and decided the only fair answer was to put the same kind of automation on the applicant's side. The method is simple: use AI to beat AI. Employers already use it to rank hundreds of CVs in seconds and to run first-round interviews; this gives job hunters an assistant that can search, read every ad properly, answer the screening questions exactly, write a tailored cover letter and apply, free and open source, with the same honesty rules it enforces on itself. Yes, that makes him a bit of a legend. He said so himself, and the applied-jobs list agrees.
"Beat" does not mean spam. The tool refuses jobs you have already applied to, will not guess an answer, and dry-runs everything before it sends. It exists so a real person can show up to every role they genuinely fit with a complete, honest application, at the speed the screeners read them.
The job market this was built for (New Zealand, 2025–2026)
"The unemployment rate was 5.6 percent in the June 2026 quarter, compared with 5.4 percent in the March 2026 quarter." — Abby Johnston, labour market spokesperson, Stats NZ, 5 August 2026. RNZ called it an 11-year high: 166,500 people unemployed, and underutilisation among 15–24-year-olds up to 37 percent.
"As of November 2025 ... relative to November 2019 ... we have seen a 243 percent increase in the number of applicants per job ad on the Seek site, at least." — Brad Olsen, Infometrics chief executive, in RNZ, 18 February 2026. The same story: Oppo's managing director "would usually consider 500 a high number of applicants for a job ad", then watched one central-Auckland customer service ad pass 2,500 applications.
"Sheryl has applied for 90 jobs since being made redundant last November. Despite decades of experience in human resources and being desperate to work, so intense is the competition for jobs that she's struggled to even get a response to many of her applications." ... "It's demoralising, your self-worth takes a hit, self-doubt starts to creep in." — RNZ, 6 August 2026. In the same piece a 22-year-old graduate had sent almost 200 applications for about six interviews, and a nurse with 37 years' experience put it this way: "They don't tell you when they email you back, they don't tell you why you didn't get the job, they just say 'We're so sorry and thank you for your application', so you never know."
"If you've had 200 people apply for a role, you need to be able to quickly comb that down and rank those employees, so the AI does that and gives you a shortlist." ... "Unfortunately for all the job hunters out there, there is a lot more people looking for jobs than jobs are going." — Neil Webster, Employment Hero chief executive, in 1News, 21 May 2026, which reported more than 2,500 AI-led job interviews run by that one company in April alone.
"More than a third of employers said AI-generated CVs are making it difficult to assess talent quality (36%)", while "automated screening tools tend to miss strong job candidates (37%)". — Robert Half survey of New Zealand employers, reported by HRD New Zealand, 6 February 2026. The screeners are missing good people, by their own users' account.
"There's no way that you can deal with that type of application level." — Liza Viz, Beyond Recruitment chief executive, on an administration role that drew about 1,200 applications in two days, in The Spinoff, 24 February 2025. One job hunter in the same article, after a year of searching: "I don't want to look at another job app, write another cover letter. Oh god, it's like nightmare fuel."
That last quote is the problem this solves. Writing the fortieth tailored cover letter is nightmare fuel; the software reading it on the other side never gets tired. Now neither do you.
Related MCP server: witness-mcp
Contents
Features
Search and read without signing in — keyword, location, work type, date range and salary filters; full ad text pulled out of the server-rendered job page.
Apply natively — the same
submitApplicationmutation the website sends, with résumé, written cover letter, written selection criteria, the profile's most recent role and every employer question answered by exact option id. Dry-run mode prepares everything and sends nothing.Answer employer questions deliberately — human-readable answers are matched against the live questionnaire and must resolve to exactly one option; anything unmatched, ambiguous or duplicated is an error rather than a guess. Standing answers fill the standard work-rights, notice-period and salary questions.
Profile management — read the profile, update name/phone/location, add or edit career-history roles, upload/delete/set-default résumés (with Seek's virus scan awaited), read a local CV as text.
Saved and applied jobs — list them, save and unsave, and see whether a job is already applied to before applying.
Self-renewing sign-in — a one-time hand-over from your own Chrome profile, then automatic renewal; tokens live in a mode-600 file outside the repo.
Requirements
Node.js 22.13 or newer (uses the built-in
fetch,FormData,Blobandnode:test).macOS for the one-time Chrome sign-in hand-over (
seek_authwithbootstrap). Everything else is platform-independent.Google Chrome signed in to nz.seek.com, for that same hand-over.
No other binaries. PDF CVs are read with Mozilla's pure-JavaScript pdf.js and DOCX files with Node's built-in zlib.
Install
git clone https://github.com/ezydubs/seek-mcp.git
cd seek-mcp
npm install
npm run build # compiles src/ to dist/
npm test # builds and runs the unit testsThe server binary is dist/server.js (also exposed as the seek-mcp bin). It speaks MCP over stdio.
Connect it to an MCP client
Claude Code
claude mcp add seek -- node /absolute/path/to/seek-mcp/dist/server.jsClaude Desktop (claude_desktop_config.json) or any other stdio MCP client:
{
"mcpServers": {
"seek": {
"command": "node",
"args": ["/absolute/path/to/seek-mcp/dist/server.js"]
}
}
}Restart or reconnect the client after rebuilding: a running server keeps the code it started with.
Signing in
seek_search, seek_job and seek_cv_read work without an account. Every other tool needs Seek's sign-in.
Sign in to nz.seek.com in Google Chrome (the
Defaultprofile unlessCHROME_PROFILEsays otherwise).Ask the client to run
seek_authwithbootstrap: true. The server copies Seek's sign-in out of that Chrome profile once, renews it, and stores the result in~/.seek-mcp/tokens.jsonwith mode 600.From then on the server renews the sign-in by itself.
seek_authwith no arguments reports whether a usable sign-in is held and when it expires.
Two things to know:
Seek rotates the sign-in on every renewal, so the copy Chrome held becomes stale after the hand-over and Chrome will usually ask you to sign in again. That is expected. Do not run the bootstrap again unless
seek_authreports the server signed out, or you deliberately want the server to take over whichever account Chrome is on now.The server acts as whichever account Chrome was signed into at bootstrap time. If you have more than one Seek account, check
seek_profile(it returns the account email) before applying to anything.
There is no username/password sign-in: Seek's identity provider does not allow it for this client, so a real browser login has to exist first.
Tools
Tool | Sign-in | What it does |
| no | Search ads. Args: |
| no | Full ad by id: description text, company, location, salary, work type, dates, status, and |
| no | Text of a local PDF, DOCX or text CV. Extraction only; it does not try to parse names, roles or dates. |
| — | Status, or with |
| yes | Account id and email, name, phone, location, résumés (with |
| yes | Set first/last name, phone ( |
| yes | Add a career-history role, or pass an existing |
| yes | Upload a PDF/DOC/DOCX/TXT/RTF résumé, wait for Seek's virus scan, optionally make it the default (default true). |
| yes | Delete a résumé by id. |
| yes | Make a résumé the one applications attach by default. |
| yes | The saved-jobs list. |
| yes | Save or unsave a job by id. |
| yes | Applications with dates, whether a résumé/cover letter was included, and status history. |
| yes | What applying needs: |
| — | Read or set the standing answers (see below). |
| yes | Prepare ( |
seek_apply arguments
Argument | Meaning |
| Seek job id (numeric string). |
| Required. |
| One entry per employer question: |
| Full cover letter, sent as a written cover letter. Omit for none. |
| Written selection criteria; required when |
| Defaults to the profile's default résumé; |
|
|
Both modes return the résumé used, whether documents were prepared, the most recent role Seek will attach, the standing answers that were auto-filled and the resolved option for every question. submit: true additionally returns Seek's applicationId.
Applying safely
Always dry-run first.
submit: falseruns the full preparation (questionnaire resolution, document generation) and returns exactly what would be sent. Nothing reaches the employer.Submissions are irreversible. Seek has no withdraw. The tool refuses jobs the account has already applied to and jobs that take applications off Seek (
externalApply).Every question must be answered, honestly. Unmatched, ambiguous or duplicated answers fail loudly instead of guessing. Privacy-policy consent questions are ordinary questions and are never filled automatically: pass
{ question: "privacy policy", option: "Yes" }yourself when you mean it.Know which account you are on.
seek_profileshows the email. Applications go to that account and its notification inbox.
Standing answers
Seek asks the same three screening questions on most jobs. seek_standing_answers stores your answers so applications can go out unattended; they are the user's own declarations and the tool never invents others.
// seek_standing_answers arguments
{
"workRights": "New Zealand citizen", // option text for the right-to-work question
"notice": "None, I'm ready to go now", // option text for the notice-period question
"salaryDefault": "$90k", // when a job advertises no salary
"salaryBands": [ // chosen by the midpoint of the advertised range
{ "upTo": 80000, "answer": "$75k" },
{ "upTo": 110000, "answer": "$100k" },
{ "upTo": 9999999, "answer": "$130k" }
],
"salaryHourly": "45" // for questions that ask an hourly rate
}Call it with no arguments to read the current settings. Answers are stored in ~/.seek-mcp/answers.json. An explicit answer in seek_apply always wins over a standing one, and a question is never answered twice.
Files and environment
Path / variable | Purpose |
| The sign-in (mode 600). Delete it to sign the server out. |
| Standing answers. |
| Directory for the two files above (default |
| Chrome profile directory name to bootstrap from (default |
Nothing about your account is written inside the repository.
Development
src/
server.ts MCP tool definitions and the apply orchestration
api.ts search, job ad, application requirements, profile, saved/applied jobs
apply.ts mutations: profile, roles, résumés, saved jobs, documents, submit
answers.ts standing answers and salary-band logic
auth.ts token store, renewal, authenticated GraphQL
cv.ts local CV text extraction: PDF via pdf.js, DOCX via a small zip reader on node:zlib
chrome-storage.ts reads one origin's localStorage from a Chrome profile
leveldb.ts dependency-free LevelDB/Snappy reader used by chrome-storage.ts
test/ node:test unit tests (payload shape, answer resolution, token renewal)
scripts/ live checks against a real account (see below)
NATIVE-NOTES.md the Seek API as observed: endpoints, GraphQL operations, payload shapesnpm testbuilds and runs the unit tests. They need no network and no account.npm run smokedrives the built server over MCP stdio against the signed-in account: search, job, requirements, profile, saved/applied lists, save→unsave, and a dry-run apply. SetSEEK_CV_PATHto a résumé file to also exerciseseek_cv_readand upload→delete. It sends no applications.node scripts/matrix.mjs "<keywords>"andnode scripts/scan.mjsdry-run many jobs to see which the standing answers can complete and which questions block the rest.node scripts/submit.mjs <jobId> <hourlyRate> [yes]submits a real application after a dry run;yespasses the privacy-policy consent.
To extend the server with another Seek operation, capture it from the website (introspection is disabled) and add it following the pattern in apply.ts; record what you learn in NATIVE-NOTES.md.
How it works
Search is a GET to Seek's public
jobsearch/v5/searchendpoint; a job ad is thewindow.SEEK_APOLLO_DATAobject embedded in the job page, extracted with a string-aware brace scanner.Account features POST Apollo-style batches to
nz.seek.com/graphqlwith a bearer token and Seek's brand/country headers. OnUNAUTHENTICATEDthe server renews once and retries.Applying mirrors the website step for step:
TrackJobApplicationStarted,GetJobApplicationProcessfor the questionnaire,generateCoverLetter/generateSelectionCriteriafor written documents, then onesubmitApplicationwhose input is built exactly as the site's bundle builds it (optional parts omitted, not nulled). Résumé upload uses the same presigned S3 form the site requests.Sign-in renewal is the standard refresh grant against Seek's identity provider; the refresh token rotates on every use, which is why only one party may hold it.
Details, field names and the captured operation list are in NATIVE-NOTES.md.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Public MCP server for discovering open jobs. Search, filter, and get application links.
CareerOneStop MCP — wraps the CareerOneStop Web API (U.S. Dept. of Labor)
GetJobzi MCP server for job search, application tracking, and career forecasting.
Scrape SEEK job listings from Australia and New Zealand.
Related MCP Servers
AlicenseBqualityBmaintenanceHosted MCP server for job search (3M+ jobs from employer career pages and ATS feeds like Lever/Greenhouse), PDF resume generation with multiple templates, AI resume tailoring per job description, cover letters, and career advice. Free hosted endpoint, no API key required.3316MIT- AlicenseNot gradedqualityDmaintenanceEnables to interact with job application workflows through MCP, allowing users to find jobs, generate non-trivial applications with proof-maps, and build offline dashboards, all without auto-submitting.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes job-search and application-management capabilities to compatible AI clients, enabling discovery of vacancies, drafting of tailored application materials, and coordinated human-approved submissions.MIT
- FlicenseAqualityCmaintenanceEnables searching job listings, tracking applications, managing resumes, and tailoring resumes to job posts, all locally via MCP.620-