{"id":50789704,"url":"https://github.com/thecodedaniel/jobpilot-mcp","last_synced_at":"2026-06-12T10:02:46.173Z","repository":{"id":345725845,"uuid":"1186705738","full_name":"TheCodeDaniel/jobpilot-mcp","owner":"TheCodeDaniel","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-20T15:10:27.000Z","size":27849,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-21T03:16:29.770Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TheCodeDaniel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-19T22:52:43.000Z","updated_at":"2026-03-20T15:10:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TheCodeDaniel/jobpilot-mcp","commit_stats":null,"previous_names":["thecodedaniel/jobpilot-mcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/TheCodeDaniel/jobpilot-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheCodeDaniel%2Fjobpilot-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheCodeDaniel%2Fjobpilot-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheCodeDaniel%2Fjobpilot-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheCodeDaniel%2Fjobpilot-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TheCodeDaniel","download_url":"https://codeload.github.com/TheCodeDaniel/jobpilot-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheCodeDaniel%2Fjobpilot-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34238715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-12T10:02:44.154Z","updated_at":"2026-06-12T10:02:46.161Z","avatar_url":"https://github.com/TheCodeDaniel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JobPilot MCP 🚀\n### Your AI-Powered Job Hunting Agent — Built for the Notion MCP Challenge 2026\n\n\u003e \"I built this because I needed it myself. As a developer actively searching for remote work,\n\u003e I was spending hours searching, copy-pasting, writing cover letters, and forgetting to follow up.\n\u003e JobPilot automates the grind so I can focus on what matters — actually getting hired.\"\n\u003e\n\u003e — Daniel A., THECODEDANIEL\n\n---\n\n## What is JobPilot?\n\nJobPilot is a custom MCP (Model Context Protocol) server that turns Claude into a\nfull AI job-hunting assistant. You paste your CV once, and Claude can:\n\n1. **Search** remote job boards (RemoteOK, We Work Remotely, Himalayas) for relevant roles\n2. **Score** each job against your CV (0–100 fit score with matched/missing skills)\n3. **Generate** a tailored cover letter for every job — in your tone\n4. **Log** every application automatically to a Notion Job Tracker database\n5. **Track** status changes (Applied → Interview → Offer) directly in Notion\n6. **Draft** follow-up emails when a company goes quiet\n7. **Auto-apply** to jobs using browser automation (Playwright)\n\nEverything is human-in-the-loop — Claude proposes, you decide, Notion remembers.\n\n---\n\n## Architecture\n\n```\nYou (Claude Desktop)\n      │\n      ▼\n┌─────────────────────┐\n│   JobPilot MCP       │  ← This repo\n│   (Node.js server)  │\n└──────┬──────────────┘\n       │\n  ┌────┴──────────────────────────┐\n  │                               │\n  ▼                               ▼\nJob Board APIs              Notion API\n(RemoteOK, WWR,            (Job Tracker DB\n Himalayas, Jobicy)         read \u0026 write)\n       │\n       ▼\nPlaywright (Chromium)\n(Browser automation for\n auto-apply form filling)\n```\n\n---\n\n## The 9 MCP Tools\n\n| Tool | What it does |\n|---|---|\n| `setup_notion_db` | One-time setup — creates the Job List DB in Notion with the correct schema |\n| `parse_cv` | Extracts your profile from CV text (plain text only — see Limitations) |\n| `search_jobs` | Searches RemoteOK, WeWorkRemotely, and Himalayas for matching roles |\n| `score_job_fit` | Scores how well you match each job (0–100) with gap analysis |\n| `generate_cover_letter` | Writes a personalised cover letter (professional / enthusiastic / concise) |\n| `generate_follow_up` | Drafts a follow-up email scaled to how long since you applied |\n| `log_to_notion` | Creates a row in your Notion Job Tracker with all details |\n| `update_application_status` | Updates status in Notion (Applied → Interview → Offer) |\n| **`auto_apply`** | **Full pipeline: search → score → cover letter → browser apply → Notion log** |\n\n---\n\n## Known Limitations \u0026 What's Not Fully Implemented\n\nThis is important to read before using JobPilot so you know what to expect.\n\n### PDF parsing does not work\n`parse_cv` accepts a `file_path` argument but reads the file as plain UTF-8 text. Binary PDF files will produce garbled output. **Pass your CV as plain text using `cv_text` instead.** Copy-paste from your word processor or export as `.txt` first.\n\n### No Anthropic API calls are made\nDespite the `.env.example` including `ANTHROPIC_API_KEY`, the key is never used. CV parsing, fit scoring, and cover letter generation are all done with local regex and string-matching logic — not the Anthropic API. The `ANTHROPIC_API_KEY` environment variable is currently a placeholder for a future implementation. You do not need it to run JobPilot.\n\n### The `location` filter in `search_jobs` is ignored\nThe tool accepts a `location` parameter but does not pass it to any of the job board APIs. All results are unfiltered by location. Treat this as a remote-first search.\n\n### WeWorkRemotely only covers 3 categories\nJob roles are mapped to one of: `design`, `marketing`, or `programming`. Roles like `data scientist`, `devops engineer`, or `product manager` all fall through to `programming`, which may return irrelevant listings.\n\n### Role matching uses a small keyword expansion map\nThe `RELATED_TAGS` map only covers: `flutter`, `mobile`, `react`, `ios`, `android`. All other roles rely on exact keyword matching against job titles and tags. If you search for `TypeScript developer`, only jobs with \"typescript\" in the title or tags will match — no synonyms are expanded.\n\n### Browser automation opens a visible window\n`auto_apply` launches Chromium with `headless: false`, meaning a real browser window opens on your screen during auto-apply. This is intentional for transparency but may be surprising. Do not close it while a pipeline is running.\n\n### LinkedIn field is not extracted from CV\nThe `auto_apply` pipeline attempts to fill LinkedIn fields in job application forms, but the `CandidateProfile` type does not include a `linkedin` field. The field is always left blank.\n\n### Environment variables are not loaded from `.env` when testing directly\nThe `.env` file is only read by Claude Desktop (you pass the values in the MCP config). When running or testing the server outside Claude Desktop, you must set the environment variables manually in your shell. See the Testing section below.\n\n---\n\n## Notion Database Schema\n\n\u003e You do **not** need to create this manually. Run the `setup_notion_db` tool once and it creates everything for you.\n\nThe database (\"Job List DB\") is created with these columns:\n\n| Column Name | Type | Notes |\n|---|---|---|\n| Job Title | Title | Primary column |\n| Company | Text | |\n| Job URL | URL | Used for duplicate detection in auto_apply |\n| Status | Text | Applied, Pending, Interview, Rejected, or Offer |\n| Date Applied | Date | |\n| Salary | Text | If available |\n| Fit Score | Number | AI-generated 0–100 |\n| Cover Letter Snippet | Text | First 300 chars of letter |\n| Last Updated | Date | Updated on status changes |\n| Notes | Text | Any extra context |\n\n---\n\n## Setup Guide\n\n### Prerequisites\n\nYou need the following installed before starting:\n\n| Tool | Version | Download |\n|---|---|---|\n| Node.js | 18 or higher | https://nodejs.org (choose LTS) |\n| Git | Any recent version | https://git-scm.com |\n| Claude Desktop | Latest | https://claude.ai/download |\n| A Notion account | — | https://notion.so |\n\nTo confirm Node.js and Git are installed, open a terminal and run:\n\n```bash\nnode --version   # should print v18.x.x or higher\ngit --version    # should print git version x.x.x\n```\n\nIf either command says \"command not found\", install the tool from the links above before continuing.\n\n---\n\n### Step 1 — Clone, install \u0026 build\n\nOpen a terminal and run:\n\n```bash\ngit clone https://github.com/YOUR_USERNAME/jobpilot-mcp.git\ncd jobpilot-mcp\nnpm install\nnpm run build\n```\n\nAfter `npm run build` you should see a `dist/` folder created. If you get TypeScript errors, make sure Node.js 18+ is installed.\n\nTo get the full path to this folder (you will need it in Step 3):\n\n```bash\n# macOS / Linux\npwd\n\n# Windows (PowerShell)\nGet-Location\n```\n\n---\n\n### Step 2 — Set up Notion\n\n1. Go to [notion.so/my-integrations](https://www.notion.so/my-integrations)\n2. Click **New Integration** → name it `JobPilot`\n3. Set capabilities: **Read content**, **Update content**, **Insert content**\n4. Click **Submit** and copy the **Internal Integration Token** (starts with `secret_...`)\n5. In Notion, create a blank page — this is where the database will live\n6. Open that page → click **Share** → **Invite** → search for `JobPilot` → click **Invite**\n7. Copy the **Page ID** from the page URL. It is the 32-character string in the URL:\n   ```\n   https://notion.so/yourworkspace/My-Page-\u003cPAGE_ID_HERE\u003e?v=...\n   ```\n   The Page ID is everything after the last `-` and before `?`. It looks like: `a1b2c3d4e5f6...`\n\nYou will use the integration token and page ID in the next step.\n\n---\n\n### Step 3 — Configure Claude Desktop\n\nLocate (or create) the Claude Desktop config file:\n\n| Operating System | Config file path |\n|---|---|\n| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |\n| Windows | `%APPDATA%\\Claude\\claude_desktop_config.json` |\n| Linux | `~/.config/Claude/claude_desktop_config.json` |\n\n**Open or create the file:**\n\n```bash\n# macOS\nopen -a TextEdit ~/Library/Application\\ Support/Claude/claude_desktop_config.json\n# If that fails (file doesn't exist yet):\nmkdir -p ~/Library/Application\\ Support/Claude \u0026\u0026 touch ~/Library/Application\\ Support/Claude/claude_desktop_config.json \u0026\u0026 open -a TextEdit ~/Library/Application\\ Support/Claude/claude_desktop_config.json\n```\n\n```bash\n# Linux\nmkdir -p ~/.config/Claude\nnano ~/.config/Claude/claude_desktop_config.json\n```\n\n```powershell\n# Windows (PowerShell)\nNew-Item -ItemType Directory -Force -Path \"$env:APPDATA\\Claude\" | Out-Null\nnotepad \"$env:APPDATA\\Claude\\claude_desktop_config.json\"\n```\n\nPaste the following into the file, replacing all placeholder values:\n\n```json\n{\n  \"mcpServers\": {\n    \"jobpilot\": {\n      \"command\": \"node\",\n      \"args\": [\"/FULL/PATH/TO/jobpilot-mcp/dist/index.js\"],\n      \"env\": {\n        \"NOTION_API_KEY\": \"secret_...\",\n        \"NOTION_DATABASE_ID\": \"\"\n      }\n    }\n  }\n}\n```\n\nReplace `/FULL/PATH/TO/jobpilot-mcp` with the output of `pwd` from Step 1.\n\n\u003e **Already have other MCP servers?** Add the `\"jobpilot\": { ... }` block inside your existing `\"mcpServers\"` object — don't replace the whole file.\n\n\u003e **Note:** `NOTION_DATABASE_ID` can be left blank for now. You will fill it in after Step 4.\n\n---\n\n### Step 4 — Restart Claude Desktop \u0026 create the Notion database\n\n1. Fully quit Claude Desktop (not just close the window — use Quit from the menu)\n2. Reopen Claude Desktop\n3. Select the **Chat** tab and look for the tools icon in the chat input bar — click it to confirm all 9 JobPilot tools are listed\n\nThen ask Claude to set up your Notion database:\n\n```\nRun setup_notion_db with parent_page_id YOUR_PAGE_ID_HERE\n```\n\nThe tool will return a `database_id`. Copy it, then go back to your Claude Desktop config file, paste it as `NOTION_DATABASE_ID`, and restart Claude Desktop once more.\n\n\u003e If `NOTION_DATABASE_ID` is already set and the database exists, the tool will skip creation safely — so it is safe to run multiple times.\n\n---\n\n## How to Test JobPilot (Without Claude Desktop)\n\nThis section is for developers who want to test tools directly without going through Claude Desktop.\n\n### Option 1: MCP Inspector (Recommended)\n\nThe MCP Inspector is an official browser-based tool for interactively testing any MCP server. It lets you call any tool, pass custom inputs, and see the raw JSON response — no Claude needed.\n\n**Install and run:**\n\n```bash\n# From inside the jobpilot-mcp directory\nnpm run build\nnpx @modelcontextprotocol/inspector node dist/index.js\n```\n\nThis starts a local web server and opens `http://localhost:5173` in your browser (or prints the URL if it doesn't open automatically).\n\n**Pass your environment variables** if you want Notion tools to work:\n\n```bash\n# macOS / Linux\nNOTION_API_KEY=secret_... NOTION_DATABASE_ID=your_db_id npx @modelcontextprotocol/inspector node dist/index.js\n\n# Windows (PowerShell)\n$env:NOTION_API_KEY=\"secret_...\"; $env:NOTION_DATABASE_ID=\"your_db_id\"; npx @modelcontextprotocol/inspector node dist/index.js\n```\n\n**Using the Inspector UI:**\n\n1. Click **Connect** — the server status should turn green\n2. Click **Tools** in the left sidebar — all 9 JobPilot tools appear\n3. Click any tool (e.g. `search_jobs`) to expand it\n4. Fill in the input fields and click **Run Tool**\n5. The JSON response appears on the right\n\n**Example inputs to try:**\n\n`search_jobs`:\n```json\n{\n  \"role\": \"Flutter Developer\",\n  \"max_results\": 5\n}\n```\n\n`parse_cv`:\n```json\n{\n  \"cv_text\": \"John Smith\\njohn@example.com\\n+1 555 000 1234\\n\\nSkills\\nFlutter, Dart, Firebase, REST APIs\\n\\nExperience\\nSenior Flutter Developer at Acme Corp\\n2021 – Present\\n\\nFlutter Developer at Startup Inc\\n2019 – 2021\\n\\nEducation\\nBSc Computer Science, University of Lagos\"\n}\n```\n\n`score_job_fit`:\n```json\n{\n  \"candidate_profile\": {\n    \"name\": \"John Smith\",\n    \"email\": \"john@example.com\",\n    \"phone\": \"+1 555 000 1234\",\n    \"location\": \"Lagos, Nigeria\",\n    \"summary\": \"Mobile developer with 5 years Flutter experience\",\n    \"skills\": [\"Flutter\", \"Dart\", \"Firebase\", \"REST APIs\"],\n    \"experience\": [\n      { \"title\": \"Senior Flutter Developer\", \"company\": \"Acme Corp\", \"start\": \"2021\", \"end\": \"present\" },\n      { \"title\": \"Flutter Developer\", \"company\": \"Startup Inc\", \"start\": \"2019\", \"end\": \"2021\" }\n    ],\n    \"years_experience\": 5,\n    \"education\": [\n      { \"degree\": \"BSc Computer Science\", \"institution\": \"University of Lagos\" }\n    ]\n  },\n  \"job\": {\n    \"id\": \"test-001\",\n    \"title\": \"Senior Flutter Engineer\",\n    \"company\": \"Remote First Inc\",\n    \"url\": \"https://example.com/jobs/flutter\",\n    \"description\": \"We need a Flutter expert with 3+ years experience. Must know Dart, Firebase, and REST APIs. Remote position.\",\n    \"tags\": [\"flutter\", \"dart\", \"remote\"],\n    \"date_posted\": \"2026-03-22\",\n    \"source\": \"test\"\n  }\n}\n```\n\n### Option 2: Smoke-test the MCP protocol directly\n\nSend a raw MCP message via stdin to verify the server starts and responds correctly:\n\n```bash\nnpm run build\n\n# macOS / Linux\necho '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}' | node dist/index.js\n\n# Windows (PowerShell)\necho '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}' | node dist/index.js\n```\n\nYou should see a JSON response listing all 9 tools. If the server crashes or prints nothing, check your Node.js version with `node --version`.\n\n---\n\n## How to Use JobPilot (in Claude Desktop)\n\n### Full Workflow\n\nPaste this into Claude Desktop:\n\n```\nHere is my CV:\n\n[paste your full CV as plain text — not PDF]\n\nPlease:\n1. Parse my CV to extract my profile\n2. Search for remote Flutter Developer jobs\n3. Score the top 5 results against my profile\n4. For any job with a fit score above 65, generate a professional cover letter\n5. Log each application to my Notion Job Tracker\n```\n\nClaude will run the full pipeline automatically, logging everything to Notion as it goes.\n\n---\n\n### Individual Commands\n\n**Parse your CV:**\n```\nParse my CV and extract my profile.\n[paste CV text]\n```\n\n**Search for jobs:**\n```\nSearch for remote Flutter developer jobs. Show me the top 10.\n```\n\n**Score a specific job:**\n```\nScore how well my profile matches the Senior Flutter Engineer role at Acme Corp.\n[paste job description]\n```\n\n**Generate a cover letter:**\n```\nWrite an enthusiastic cover letter for the Flutter Engineer role at Stripe.\n```\n\n**Log to Notion manually:**\n```\nLog this application to Notion:\n- Job: Senior Flutter Developer\n- Company: Shopify\n- URL: https://shopify.com/careers/123\n- Salary: $120,000/yr\n- Status: Applied\n- Fit Score: 82\n```\n\n**Update an application status:**\n```\nUpdate my Shopify application status to \"Interview\". Add a note: \"Interview scheduled for March 25 at 2pm.\"\n```\n\n**Generate a follow-up email:**\n```\nGenerate a follow-up email for my Flutter Engineer application at Stripe. It's been 9 days since I applied.\n```\n\n---\n\n### Auto-Apply Workflow\n\nThe most powerful feature of JobPilot. Run the full job application pipeline with a single command.\n\n**What it does:**\n1. Searches for remote jobs matching your role across multiple job boards\n2. Scores each job against your CV (only applies to jobs scoring \u003e= min_fit_score)\n3. Generates a tailored cover letter for each qualifying job\n4. Fills and submits application forms automatically using a Chromium browser window\n5. Logs every application to your Notion tracker with status, score, and cover letter\n\n**Example usage in Claude:**\n```\nParse my CV, then auto-apply to 10 Flutter Developer jobs today\n```\n\n**Supported application methods:**\n- Easy Apply / Quick Apply buttons\n- Greenhouse ATS forms\n- Lever ATS forms\n- Workable ATS forms\n- BambooHR ATS forms\n- Generic form fill (best-effort)\n\n**When it skips a job:**\n- CAPTCHA detected\n- Login/account creation required\n- Already applied (duplicate detected in Notion)\n- Form too complex (more than 3 steps)\n\nSkipped jobs are logged to Notion as \"Pending\" for manual follow-up.\n\n**Dry run mode:**\nSet `dry_run: true` to run the full pipeline (search → score → cover letter → log) without actually submitting any forms. Useful for previewing what would be applied to.\n\n**Safety:**\n- Never enters financial information\n- Never creates accounts or passwords\n- Never applies to the same job twice\n- Takes a screenshot after each submission as proof (saved to `screenshots/`)\n\n---\n\n## Example Notion Output\n\nAfter running the full pipeline, your Notion Job Tracker will look like this:\n\n| Job Title | Company | Status | Fit Score | Salary | Date Applied |\n|---|---|---|---|---|---|\n| Senior Flutter Engineer | Shopify | Applied | 88 | $120k/yr | 2026-03-19 |\n| Mobile Developer | Buffer | Applied | 74 | Not listed | 2026-03-19 |\n| Flutter Dev (Remote) | Remote First Inc | Pending | 61 | $80–100k | 2026-03-19 |\n\nEach row links back to the full cover letter snippet and notes.\n\n---\n\n## Project Structure\n\n```\njobpilot-mcp/\n├── src/\n│   ├── index.ts                        # MCP server + tool registry\n│   └── tools/\n│       ├── parseCV.ts                  # CV parsing (plain text only)\n│       ├── searchJobs.ts               # RemoteOK + WeWorkRemotely + Himalayas APIs\n│       ├── scoreJobFit.ts              # Fit scoring (0–100, keyword-based)\n│       ├── generateCoverLetter.ts      # Cover letter generation (template-based)\n│       ├── generateFollowUp.ts         # Follow-up email drafting\n│       ├── logToNotion.ts              # Create row in Notion DB\n│       ├── updateApplicationStatus.ts  # Update existing Notion row\n│       ├── setupNotionDB.ts            # Create the Notion database schema\n│       └── autoApply.ts               # Full auto-apply pipeline with Playwright\n├── dist/                               # Compiled output (after npm run build)\n├── .env.example                        # Environment variable template\n├── package.json\n├── tsconfig.json\n└── README.md\n```\n\n---\n\n## Tech Stack\n\n- **Runtime**: Node.js 18+ with TypeScript\n- **MCP SDK**: `@modelcontextprotocol/sdk` (official Anthropic SDK)\n- **Job scoring \u0026 cover letters**: Local string-matching logic (no external AI API required)\n- **Job data**: RemoteOK API + WeWorkRemotely RSS + Himalayas API (all free, no auth required)\n- **Browser automation**: Playwright (Chromium) for auto-apply form filling\n- **Storage**: Notion REST API v1 (2022-06-28)\n- **Host**: Claude Desktop\n\n---\n\n## Roadmap / Future Ideas\n\n- [x] Auto-apply with browser automation via Playwright (Easy Apply, ATS forms, generic forms)\n- [ ] Real AI-powered CV parsing using the Anthropic API (replace regex parser)\n- [ ] Real AI-generated cover letters via Anthropic API (replace template engine)\n- [ ] Actual PDF parsing support (e.g. using `pdf-parse` or similar)\n- [ ] LinkedIn field extraction from CVs\n- [ ] Expand `RELATED_TAGS` to cover more tech domains (DevOps, data, product, design)\n- [ ] WeWorkRemotely category mapping for more job types\n- [ ] `location` filter actually applied to job board API queries\n- [ ] Daily digest: \"You have 3 applications with no response after 14 days\"\n- [ ] Salary negotiation email generator\n- [ ] Interview prep notes auto-added to Notion page\n- [ ] Slack/Email notification when a Notion status changes\n\n---\n\n## License\n\nMIT — free to use, fork, and build on.\n\n---\n\n## Author\n\nBuilt by **Daniel A.** — **THECODEDANIEL**.\n\n\u003e This tool was built for the Notion MCP Challenge 2026 — and also because I genuinely needed it.\n\u003e Job hunting is brutal. Let AI do the boring parts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodedaniel%2Fjobpilot-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthecodedaniel%2Fjobpilot-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodedaniel%2Fjobpilot-mcp/lists"}