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 do what the website does: search jobs and read full ads, research companies (profiles, employee reviews, salaries), read Seek's career guide and salary insights, browse the recruiter directory and People search, manage every part of the signed-in profile and its résumés, keep saved jobs, saved searches and notes, tune recommendations and notifications, 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 server sends the same GraphQL documents the Seek website sends, copied verbatim out of the site's own JavaScript bundles (src/documents.ts), and checks every request it builds against the schema those bundles ship. How the operations were found is 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: keywords, location, work type, work arrangement (on-site, hybrid, remote), classification and subclassification, listing date, salary, one advertiser or one company; counts by work type and arrangement; Seek's refinement pills for a search. Full ads come with the employer's screening questions, contact details in the ad, badges, the advertiser's history on Seek and the company's rating.
Companies: profile, culture, perks and awards, employee ratings by category, Seek's AI summary of reviews, every review (filter by location, sort by recent or helpful), salary ranges by role, the company's open jobs and its Graduates tab; browse companies by industry.
Career advice and salaries: Seek's career guide for any role (what it's like, duties, skills, how to become one, satisfaction and hours, growth, similar roles), salary insight New Zealand-wide or by region, annual or hourly, by industry, role reviews, career pathways to next roles with live job counts, roles that use given skills, role counts by industry and interest theme, careers by classification, the advice articles (latest, featured, popular, by category) and the Career Compass quiz with its AI recommendations.
Recruiters and people: the recruiter and agency directory (search by placements, specialisation and region; featured recruiters and agencies; profiles, reviews, jobs, placements, teams and awards; email a recruiter or record a call) and People search over public candidate profiles.
Apply natively: the same
submitApplicationmutation the website sends, with résumé, a written or uploaded cover letter, written or uploaded selection criteria, the profile's most recent role, every employer question answered by exact option id, and optional strong interest (priority apply). Dry-run mode prepares everything and sends nothing. Off-site jobs can be recorded in Applied jobs.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.
The whole profile: personal details, summary, career history (add, edit, delete, accept or dismiss résumé suggestions), education, licences and certifications, skills (with Seek's suggestions), languages, next-role preferences (availability, work types, locations, classification, role titles, salary, rights to work), approachability, visibility, photo, profile strength and Seek's suggestions, activity and verifications (verified licences and qualifications are edited the way Seek allows); résumés (upload with Seek's virus scan, delete, set default, download, generate one from the profile).
Your activity: saved jobs, saved searches and their email alerts, notes on saved and applied jobs, applied jobs with the documents sent and applicant insights, priority-apply credits, recommendations and "not interested" feedback, the home feed (AI job summaries, market insights for your role and location, profile performance) and refining recommendations by answering Seek's questions, the salary and market-insight prompts, and Seek's AI assessments of a job (job match, strong fit, how to stand out).
Settings: email and push notification preferences, changing the sign-in email, and (guarded) deleting the account.
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
The tools marked "no" below 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;check: trueasks Seek which account it is;logout: truerevokes and deletes it.
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.An unused sign-in lapses after about a week. Seek's identity provider stops renewing a refresh token that has not been used for roughly seven days (
invalid_grant).seek_auththen reportssignedIn: falsewith the reason; sign in to nz.seek.com in Chrome and bootstrap again.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 or email-code sign-in for the server: Seek's identity provider refuses those grants for this client, and its email-code login requires a reCAPTCHA, so a real browser login has to exist first.
Tools
62 tools. "no" in the sign-in column means it works without an account.
Jobs
Tool | Sign-in | What it does |
| no | Search ads. |
| no | Full ad: description, advertiser, location, salary, work type and arrangement, classification, dates, status, bullets, badges, the employer's questions, contact details, company profile summary, |
| no | The jobs Seek recommends alongside an ad. |
| no | Autocomplete and id lookup: keywords, search locations, profile locations (numeric ids), role titles, companies, schools, qualifications, skills, licences, languages (ontology ids), rights to work; |
| no | Classifications and subclassifications with ids, and the availability, work-type and visibility options. |
| yes | Saved/applied, matched/inferred/missing skills, salary match, applicant insights, and Seek's AI assessments: job match, strong fit (the candidate's strengths for the role) and stand out (three ways to stand out, a tailored summary). |
| either | Report an ad (Fraudulent, Discrimination, Misleading, SalaryBelowMinimumWage). Needs |
| yes | The recommended-jobs feed, with each job's "not interested" reasons. |
| yes | Hide jobs by those reasons, unhide, or list what is hidden. |
| yes | The home feed: recommended jobs with AI summaries and "not interested" reasons, company highlights, market insights for a role and location (open roles, ad-volume trend; |
| yes | Seek's questions for better recommendations; |
| yes | The salary prompt and the market-insights role and location; |
Applying and activity
Tool | Sign-in | What it does |
| yes |
|
| yes | Prepare ( |
| yes | Record an off-site job in Applied jobs and get the employer's application address. |
| — | Read or set the standing answers (see below). |
| yes | The saved-jobs list, with notes. |
| yes | Save or unsave a job by id. |
| yes | Applications with dates, documents included, status history and notes, and for each one on Seek the number of candidates who applied ( |
| yes | One application: documents sent (download links) and applicant insights; |
| yes | Write or clear the note on a saved or applied job. |
| yes | List, create (from search filters), delete, and switch email alerts on or off. |
Profile
Tool | Sign-in | What it does |
| yes | Account id and email, name, phone, location, résumés and roles; |
| yes | First/last name, phone ( |
| yes | The personal summary. |
| yes | Add a career-history role, or pass an existing |
| yes | Delete a role, or accept / dismiss a role suggested from a résumé. |
| yes | Add, update, delete, accept or dismiss qualifications. A verified one only takes |
| yes | Add, update or delete licences and certifications. A verified one only takes |
| yes | List (with suggestions), set, add or remove skills. |
| yes | Add or delete languages. |
| yes | Read or set availability, work types, preferred locations, classification, role titles, minimum salary, rights to work, approachability and visibility. |
| yes | Upload (JPG/PNG) or delete the profile photo. |
| 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é, or make one the default. |
| yes | A download link for a résumé. |
| yes | Have Seek build a résumé from the profile. |
| no | Text of a local PDF, DOCX or text CV. Extraction only. |
Account
Tool | Sign-in | What it does |
| — | Status; |
| yes | List or change email/push notifications per type and channel, with frequency. |
| yes | Change the sign-in email: send a code, then verify it. |
| yes | Permanently delete the account; needs the account's exact email as |
Companies
Tool | Sign-in | What it does |
| no | Company profiles by name, with ids, ratings and review counts; |
| no | Profile, ratings by category, AI review summary, |
| no | Reviews, by page, sorted by recent or helpful, optionally for one location. |
| no | Salary ranges by role against the industry. |
| no | The company's open jobs. |
| yes | Mark a review helpful or report it. Needs |
Career advice
Tool | Sign-in | What it does |
| no | Roles and advice articles; |
| no ( | The career guide for a role, with live job counts by |
| no | Salary insight for a role, nationwide or by region, annual or hourly, by industry. |
| no | What people in the role say about it. |
| no | Classifications, or a classification's roles; |
| no | Read an article, or list the latest, |
| last step | Seek's Career Compass quiz one |
Recruiters and people
Tool | Sign-in | What it does |
| no | Recruiters or agencies by name, placements, specialisations, role types and region; |
| no | A recruiter's or agency's profile, reviews, jobs, placements, team or awards. |
| either |
|
| no | Public candidate profiles by name, narrowed by role titles, companies and locations. |
| no | One public profile. |
seek_apply arguments
Argument | Meaning |
| Seek job id (numeric string). |
| Required. |
| One entry per employer question: |
| A written cover letter, or a file to attach. Omit both for none. |
| Written or attached selection criteria; one is required when |
| Defaults to the profile's default résumé; |
| Spend a priority-apply credit to flag strong interest ( |
|
|
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.
Actions that need confirmation
Some tools reach other people or cannot be undone. They say so in their descriptions and MCP annotations, and refuse to act without an explicit argument:
seek_report_job,seek_contact_recruiterandseek_company_review_feedbackneedconfirm: true.seek_delete_accountneedsconfirmEmailequal to the signed-in account's email (Seek itself asks for nothing).seek_applysends only withsubmit: true;seek_change_emailchanges nothing until the emailed code is given.
A Seek mutation that answers with a typed failure (…Failure, error, errors) is reported as an error, never as done.
Files and environment
Path / variable | Purpose |
| The sign-in (mode 600). Delete it, or run |
| 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 createServer(), the core tools (search, job, apply, profile, résumés, saved/applied, auth) and INSTRUCTIONS
tools/*.ts the other tools, one module per area: jobs, activity, profile, settings, companies, career, directory
documents.ts generated: the GraphQL documents nz.seek.com sends, copied verbatim from its bundles
seek.ts constants, signed-out GraphQL (nz.seek.com and the career-guide API), clean(), shared helpers
auth.ts token store, renewal, signed-in GraphQL, typed-failure checks, status/check/logout
api.ts search, job page fallback, application requirements, profile, saved/applied jobs
apply.ts application documents and submit, résumé and attachment uploads, roles, personal details, saved jobs
jobs.ts job details over GraphQL, similar jobs, insights, AI job match, reports
activity.ts saved searches, notes, applications, priority apply, recommendations and job preferences
profile-sections.ts every other profile section, preferences, avatar, résumé download and generation
settings.ts notifications, email change, account deletion
companies.ts company search, profile, reviews, salaries, jobs, review feedback
career.ts career guide, salaries, role reviews, articles
directory.ts People search and the recruiter directory
discover.ts autocomplete / id lookups, classifications, profile option lists
answers.ts, cv.ts, chrome-storage.ts, leveldb.ts standing answers, CV text, Chrome hand-over
test/ node:test unit tests; scenarios.mjs drives every signed-in operation; fixtures/ holds Seek's schema
scripts/ live checks (below) and research/ (how documents.ts and the schema were produced)
NATIVE-NOTES.md the Seek API as observed: endpoints, operations, payload shapes, how they were foundnpm testbuilds and runs the unit tests. They need no network and no account.requests-schema.test.mjsdrives every signed-in operation through the real code with canned replies and validates each request's document and variables against Seek's own GraphQL schema.npm run check:publiccalls every tool that needs no sign-in against the live site.npm run check:shapessends every signed-in request to Seek without a sign-in and checks Seek answersUNAUTHENTICATED(the request is well formed and nothing ran) rather thanBAD_USER_INPUT. Operations that might run anonymously, and the application submit, are never sent.npm run smokedrives the built server against the signed-in account: search, job, requirements, profile and all its sections, preferences, notifications, saved/applied lists, insights, recommendations, and round trips that leave the account as they found it (save → note → clear → unsave, saved search create → alerts off → delete, 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 add another Seek operation: rebuild the research catalogue (scripts/research/, see NATIVE-NOTES.md), add its name to scripts/research/gen-documents.mjs, run npm run research:documents, call it with sgql (signed in) or publicGql, and add a scenario to test/scenarios.mjs.
How it works
Job search is a GET to Seek's public
jobsearch/v5/searchendpoint. Everything else is GraphQL:nz.seek.com/graphqlfor jobs, companies, the recruiter directory, People search and the account, andcareer-guide-api.cloud.seek.com.au/graphql(withcountry: NZheaders) for the career guide, salaries and articles.The documents are the website's own, copied verbatim from its JavaScript bundles:
scripts/research/downloads each app's bundles, reads the compiled GraphQL ASTs and query strings out of them as data (never running them), andgen-documents.mjswrites the ones the server uses intosrc/documents.ts.Account calls send a bearer token and Seek's brand/country headers. On
UNAUTHENTICATEDthe server renews once and retries. Mutations that answer with a typed failure are reported as errors.Applying mirrors the website step for step:
TrackJobApplicationStarted,GetJobApplicationProcessfor the questionnaire,generateCoverLetter/generateSelectionCriteriafor written documents (or the presigned upload plusprocessUploadedAttachmentfor files), then onesubmitApplicationwhose input is built exactly as the site's bundle builds it (optional parts omitted, not nulled).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.
A jobs data API and MCP server. Every listing comes from the employer's own career site, an ATS feed or a government employment service, never resold from another board. Each row names its source and when we last confirmed the vacancy existed, and a role that disappears keeps a closure date and a reason. Six tools: search_jobs, get_job, company_hiring, market_signals, coverage, changes_since.
CareerOneStop MCP — wraps the CareerOneStop Web API (U.S. Dept. of Labor) (api.careeronestop.org).…
GetJobzi MCP server for job search, application tracking, and career forecasting.
Related MCP Servers
AlicenseBqualityAmaintenanceHosted 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.3317MIT- 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.20-