job-tracker-mcp

job-tracker-mcp

Enables users to manage job applications (add, list, update status) through natural language conversations, using Notion as the backend.

Category
Visit Server

README

job-tracker-mcp

A personal job-application tracker, exposed as an MCP server so any MCP-aware LLM client (Claude Desktop, Cline, or my own Nexus assistant) can manage it through plain conversation instead of a UI.

"Add a job application for Amazon, Software Engineer Intern, deadline September 1st" → it's in Notion, correctly filed, no clicking required.

▶ See it running, no setup: this server powers the live Nexus demo — open it and ask "list my job applications" or add one; the three tools below are what the assistant is calling behind the scenes.

Why this exists

I'm job-hunting in the UK and wanted a tracker I'd actually keep using — and a real project to learn Model Context Protocol with, beyond just consuming someone else's MCP server. Building the tool layer myself (rather than wiring up Notion's own official MCP server) is the point: it forces you to design the actual interface an LLM gets to reason over, not just proxy a REST API.

How it works

you: "I finished my internship at Vitality, add it as an offer"
        │
        ▼
LLM decides to call add_application(company: "Vitality", position: "...", status: "Offer")
        │
        ▼
this server executes it against the Notion API and returns a plain-text confirmation
        │
        ▼
LLM relays that back to you in natural language

The server itself has zero natural-language understanding — it just declares three tools with typed schemas. The LLM (via whatever client you connect it to) decides when to call which tool and how to fill in the arguments from your sentence. See src/index.ts for the tool registrations and src/notion.ts for the Notion API layer they call into.

Tools

Tool What it does
add_application Records a new application (company, position, optional deadline/status/notes). Applied date is set automatically.
list_applications Lists tracked applications, optionally filtered by status and/or a deadlineBefore cutoff.
update_status Finds an application by company name and updates its status. If the name matches more than one application, it lists them and updates nothing rather than guessing which one you meant.

Status values: Applied, Screening, Interview Scheduled, Awaiting Result, Offer, Rejected, Withdrawn.

Setup

1. Create a Notion integration

2. Share a page with it

Notion integrations can't see anything until a page is explicitly shared with them — this is a hard requirement of Notion's permission model, not something the code can skip. Create any page (e.g. "Job Tracker Data"), then •••Connections → select your integration.

3. Create the tracker database

This server doesn't auto-provision the database yet (see Roadmap) — create one manually under the shared page with these properties:

Property Type
Company Title
Position Text
Applied Date Date
Deadline Date
Status Select (options: Applied, Screening, Interview Scheduled, Awaiting Result, Offer, Rejected, Withdrawn)
Notes Text

4. Configure

npm install
cp .env.example .env

Fill in .env:

NOTION_API_TOKEN=ntn_...
NOTION_DATA_SOURCE_ID=...    # the database's data source ID — Notion's
                             # 2025-09-03 API splits database ID from data
                             # source ID; this is the one queries run against

5. Build and connect

npm run build

Point any MCP client at dist/index.js. Example for Claude Desktop / Cline config:

{
  "mcpServers": {
    "job-tracker": {
      "command": "node",
      "args": ["--use-system-ca", "/absolute/path/to/job-tracker-mcp/dist/index.js"]
    }
  }
}

--use-system-ca is only needed on networks that TLS-inspect outbound HTTPS (e.g. behind a corporate proxy) — Node's bundled CA store won't trust that network's root cert even though your OS already does.

Or consume it as a dependency. Nexus installs this repo straight from GitHub and spawns the built dist/index.js itself, passing the Notion credentials through to the child process — no separate config file, no manual .env beside it. That path is why the server reads its credentials from the environment first and only falls back to a local .env.

Tech stack

TypeScript, @modelcontextprotocol/sdk (stdio transport), Zod for tool schema validation, Notion API directly (no SDK — see src/notion.ts).

Roadmap

  • ensure_tracker_exists tool — have the server create its own Notion database on first use (schema defined in code) instead of the manual step above. Notion's permission model still requires a human to share one page with the integration once; everything past that point should be automatable.
  • research_company tool — given a company name, search for and extract basic facts (industry, size, HQ), then generate interview-prep questions tailored to that company's actual interview style (e.g. Amazon's Leadership-Principles-based behavioral questions), reported via MCP's progress notifications so a client can show live step-by-step progress instead of a single opaque "thinking" state.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured