OpenPostings is an OpenSource ATS job aggregator and application tracking app. It pulls jobs that were posted in the last 24 hours or that has no posted date.
It combines:
- A React Native client (
Web,Android,Windows) - A local Node/Express API
- A local SQLite database
- An MCP apply-agent server for agent-assisted workflows
- Pulls jobs from multiple ATS providers into one local database.
- Filters postings by search text, ATS, industry, state, county, and remote mode.
- Tracks applied/ignored posting state and application lifecycle status.
- Stores applicant profile and MCP agent settings in SQLite. - Exposes MCP tools for **candidate selection, cover-letter drafting, and result recording.**
Current sync support includes:
workdayashby/ashbyhqgreenhouse/greenhouse.iolever/lever.cojobvite/jobvite.comapplicantpro/applicantpro.comapplytojob/applytojob.comtheapplicantmanager/theapplicantmanager.comicims/icims.comrecruitee/recruitee.comultipro/ukgtaleo/taleo.net
About +7748 companies in total. All gathered from search engine data like Google and DuckDuckGo.
It pulls in new job data at random from companies and stores it in the database. If the posting has lasted longer than 24 hours in the database its no longer used/deleted.
- Node.js 18+ and npm
- For Windows target: React Native Windows prerequisites
- For Android target: Android Studio/emulator or device
cd OpenPostings
npm installTerminal 1:
cd OpenPostings
npm run serverTerminal 2:
cd OpenPostings
npm run webAccess the Web UI
http://localhost:8081
Default API base URL behavior:
- Web/Windows:
http://localhost:8787 - Android emulator:
http://10.0.2.2:8787
npm run windows (For windows)
npm run android (For Android)Core:
GET /healthGET /sync/statusPOST /sync/ats(?wait=1optional)POST /sync/workday(alias route)
Postings:
GET /postingsGET /postings/filter-optionsPOST /postings/ignore
Applications:
GET /applicationsPOST /applicationsPATCH /applications/:idDELETE /applications/:id
Settings:
GET /settings/personal-informationPUT /settings/personal-informationGET /settings/mcpPUT /settings/mcp
MCP helper endpoints:
GET /mcp/candidatesPOST /mcp/cover-letter-draftPOST /mcp/applications/complete
You can have Codex/Claude/Gemini/Qwen/LLMs do the following for you:
- Get your applicantee information
get_applicant_context - Find the latest relevent jobs for you.
find_posting_candidates - Apply to those jobs (As long as your LLM model has access to a browser)
- Build a dynamic cover letter for you that relates to your resume, experience and the job you are applying for.
draft_cover_letter - Update job application tracking for you.
record_application_result
To turn on the MCP server so your model can interact with OpenPostings run:
cd OpenPostings
npm run mcp:apply-agentMCP server setup for your Codex (If you use a different LLM, ask it to setup an MCP setup for you):
[mcp_servers.openpostings-apply]
command = "node"
args = ['C:\Users\<path to where you cloned the repo>\OpenPostings\server\mcp-apply-server.js']
This is designed for local/self-hosted usage.
- MCP credentials/settings are stored in local SQLite fields.
- If you need stricter controls, add OS-level secret storage, DB encryption-at-rest, and tighter filesystem permissions.



