local-tech-digest-mcp
A local, privacy-first MCP server that automatically tracks entry-level tech job openings and upcoming USA tech conferences and emails you a clean HTML digest on a smart schedule.
README
π local-tech-digest-mcp
A local, privacy-first Model Context Protocol (MCP) server that automatically tracks entry-level tech job openings and upcoming USA tech conferences β then emails you a clean HTML digest on a smart schedule.
Runs 100% on your machine. No cloud, no tracking, no third-party accounts beyond a Gmail App Password.
β¨ Features
- Dual digest β entry-level jobs (daily) + tech conferences (weekly)
- Smart scheduler β fires at 08:00 ET daily; also triggers immediately if you open your laptop after 8 PM
- 3-gate job filter β level β exclusion β domain β stack scoring
- F-1 OPT aware β excludes clearance/citizenship-required and no-sponsorship roles
- USA / International split β USA roles first, foreign roles in a separate section
- Zero API keys β all data sources are free and public
- Deduplication β SQLite tracks every job/conference ever seen; emails only new entries
- 10 MCP tools β query, search, and trigger digests directly from Claude Desktop
- Auto-start β silent Windows Startup launcher included
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β local-tech-digest-mcp β
β β
β βββββββββββββββ ββββββββββββββββββββββββββββββββββββββββββββ β
β β Claude β β Scrapers β β
β β Desktop ββββββΆβ SimplifyJobs β RemoteOK β The Muse β β
β β (MCP tools) β β (GitHub JSON) β (API) β (API) β β
β βββββββββββββββ ββββββββββββββββ¬ββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββ ββββββββββββββββΌββββββββββββββββββββββββββββ β
β β Scheduler β β Filter Pipeline β β
β β node-cron β β Gate 1: Level (junior/entry/intern) β β
β β 08:00 ET β β Gate 2: Exclusion (clearance/no-visa) β β
β β + 8 PM β β Gate 3: Domain (cyber/cloud/web/sys) β β
β β on-open β β Scorer: Stack match (Python/AWS/Linuxβ¦) β β
β ββββββββ¬βββββββ ββββββββββββββββ¬ββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββΌββββββββββββββββββββββββββββ β
β β β SQLite (digest.db) β β
β β β conferences table β jobs table β β
β β β hash dedup β hash dedup β β
β β ββββββββββββββββ¬ββββββββββββββββββββββββββββ β
β β β β
β ββββββββββββββββββββββββββββΆβ β
β βΌ β
β ββββββββββββββββββββββββββββ β
β β Email Builder β β
β β Section 1: USA Jobs β β
β β Section 2: Conferences β β
β β Section 3: Intl Jobs β β
β ββββββββββββββββ¬ββββββββββββ β
β β β
β βΌ β
β Gmail SMTP (nodemailer) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Project Structure
local-tech-digest-mcp/
βββ src/
β βββ db/
β β βββ schema.ts # SQLite init β creates both tables on first run
β β βββ conferences.ts # Conference CRUD & queries
β β βββ jobs.ts # Job CRUD, search, filter, stats
β βββ filters/
β β βββ jobs.ts # 3-gate pipeline, stack scorer, HTML stripper
β βββ scrapers/
β β βββ conferences.ts # confs.tech GitHub JSON scraper
β β βββ jobs/
β β βββ index.ts # Parallel orchestrator for all job sources
β β βββ simplify.ts # SimplifyJobs (new-grad + internships)
β β βββ remoteok.ts # RemoteOK public API
β β βββ themuse.ts # The Muse public API
β βββ email/
β β βββ builder.ts # Region classifier, USA/intl split, SMTP send
β β βββ jobs-section.ts # Job cards HTML renderer
β β βββ conf-section.ts # Conference cards HTML renderer
β βββ server.ts # MCP server β 10 tools for Claude Desktop
β βββ scheduler.ts # node-cron dual schedule + 8 PM on-open trigger
βββ data/ # Auto-created β SQLite database (gitignored)
βββ dist/ # Auto-created β compiled JS (gitignored)
βββ launch-silent.vbs # Windows Startup silent launcher
βββ setup-autostart.ps1 # Register Windows startup task (optional)
βββ .env.example # Environment variable template
βββ package.json
βββ tsconfig.json
π Data Sources
| Source | Type | Auth | What it provides |
|---|---|---|---|
| SimplifyJobs New-Grad | GitHub raw JSON | None | Entry-level CS full-time roles |
| SimplifyJobs Internships | GitHub raw JSON | None | Summer/fall tech internships |
| RemoteOK | Public API | None | Remote tech roles globally |
| The Muse | Public API | None | Entry-level filtered roles |
| confs.tech | GitHub raw JSON | None | USA tech conferences by topic |
π Job Filter Pipeline
Every scraped job passes three sequential gates before being stored:
RAW JOB
β
βΌ GATE 1 β LEVEL FILTER (title must match)
junior Β· entry-level Β· associate Β· l1 Β· graduate Β· new-grad Β· intern(ship)
β
βΌ GATE 2 β EXCLUSION FILTER (reject if found in title or description)
us-citizenship-required Β· must-be-us-citizen Β· secret-clearance
top-secret Β· ts/sci Β· dod Β· department-of-defense Β· itar
no-sponsorship Β· sponsorship-not-available
β
βΌ GATE 3 β DOMAIN FILTER (must match at least one)
Cybersecurity β security | infosec | soc | devsecops | pentest | siem β¦
Cloud/DevOps β cloud | aws | azure | devops | kubernetes | terraform β¦
Web Development β frontend | backend | full-stack | react | node | django β¦
SysAdmin β linux | sysadmin | system-admin | sre | network-admin β¦
β
βΌ STACK SCORER (points added for matching user's tech stack)
Python +2 Linux / Debian / Ubuntu +2
Bash / Shell +2 AWS +2
Security (CVE) +2 Docker / Kubernetes +1
Terraform +1 Git / GitHub +1
Networking +1
ββββββββββββββββββββββββββββββββββββ
Maximum score: 14 points
β
βΌ STORED in SQLite
Emailed if score β₯ MIN_JOB_SCORE (default: 0)
Capped at MAX_JOBS_PER_DOMAIN per email (default: 25)
π§ Email Layout
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Weekly Tech Digest β May 29, 2026 β
β πΊπΈ 82 USA roles Β· π 18 international Β· π 15 conf β
β [Cybersecurity] [Cloud/DevOps] [Web Dev] [SysAdmin] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
πΌ NEW ENTRY-LEVEL OPENINGS (USA)
ββββββββββββββββββββββββββββββββββββββββββββββ
π Cybersecurity (N roles)
ββββββββββββββββββββββββββββββββββββββββββββ
β Security Analyst Intern β CrowdStrike β
β π’ CrowdStrike π Remote β
β [Internship] [Remote] [β Visa Sponsor] β
β Tags: python linux aws β
β Match ββββββββββββ 8/14 β
β [Apply β] β
ββββββββββββββββββββββββββββββββββββββββββββ
βοΈβ Cloud / DevOps (N roles)
π Web Development (N roles)
π₯οΈ SysAdmin (N roles)
π UPCOMING USA TECH CONFERENCES (Monday only)
ββββββββββββββββββββββββββββββββββββββββββββββ
π Cybersecurity
β’ DEF CON 34 β Las Vegas Β· Aug 7β10
βοΈ Cloud / DevOps
β’ KubeCon NA β Atlanta Β· Nov 10β14 β° CFP: Jul 21
π INTERNATIONAL OPPORTUNITIES
ββββββββββββββββββββββββββββββββββββββββββββββ
βΉοΈ These roles are outside the USA. Verify work
authorization before applying.
[Same card layout, purple accent]
π οΈ Prerequisites
- Node.js v18 or later
- A Gmail account with App Password enabled (requires 2-Step Verification)
βοΈ Setup
1. Clone & install
git clone https://github.com/YOUR_USERNAME/local-tech-digest-mcp.git
cd local-tech-digest-mcp
npm install
2. Configure environment
copy .env.example .env # Windows
cp .env.example .env # Mac/Linux
Edit .env with your values:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=you@gmail.com
SMTP_PASS=xxxx_xxxx_xxxx_xxxx # Gmail App Password (16 chars, no spaces)
NOTIFY_EMAIL=you@gmail.com
TZ=America/New_York # Your timezone
MIN_JOB_SCORE=0 # 0 = all jobs | 4 = strong stack matches only
MAX_JOBS_PER_DOMAIN=25 # Max job cards per domain per email
Gmail App Password: Go to myaccount.google.com/apppasswords, create a new app password, and paste the 16-character code (without spaces) as
SMTP_PASS.
3. Build
npm run build
4. Register with Claude Desktop
Add to claude_desktop_config.json:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"tech-digest-mcp": {
"command": "node",
"args": ["/absolute/path/to/local-tech-digest-mcp/dist/server.js"]
}
}
}
Restart Claude Desktop after saving.
5. Run the scheduler
node dist/scheduler.js
Keep this terminal open. The scheduler fires automatically on its schedule.
6. Auto-start on Windows login (optional)
Copy launch-silent.vbs to your Windows Startup folder:
Copy-Item .\launch-silent.vbs ([Environment]::GetFolderPath('Startup'))
The scheduler will now start silently every time you log in.
π§ͺ Test Commands
# Trigger daily jobs digest immediately
node dist/scheduler.js --now-daily
# Trigger full weekly digest (jobs + conferences)
node dist/scheduler.js --now-weekly
π Schedule Behaviour
| When | Action |
|---|---|
| Every day 08:00 ET (TueβSun) | Scrape jobs β send jobs-only email |
| Every Monday 08:00 ET | Scrape jobs + conferences β send full email |
| Laptop opened after 8 PM | Runs the appropriate digest immediately |
| Nothing new | Email skipped β no empty digests |
π§ MCP Tools (Claude Desktop)
| Tool | Description |
|---|---|
fetch_jobs |
Scrape all sources, filter, score, store new jobs |
list_new_jobs |
Pending (un-emailed) jobs sorted by score |
get_top_matches |
Top N jobs by stack-match score |
search_jobs |
Full-text search by keyword |
filter_jobs |
Filter by domain, type, min score |
fetch_conferences |
Scrape confs.tech for upcoming USA events |
list_upcoming_conferences |
Conferences in the next N days |
search_conferences |
Keyword search across conferences |
send_digest_email |
Manually trigger digest (mode: daily|weekly) |
get_stats |
Database counts for jobs and conferences |
ποΈ Database Schema
-- Conference events
CREATE TABLE conferences (
id, name, url, startDate, endDate, city, state, country,
topics TEXT, -- JSON array of domain labels
cfpDeadline, cfpUrl, source,
hash TEXT UNIQUE, -- md5(name|startDate|city) for deduplication
firstSeen, notified INTEGER DEFAULT 0
);
-- Job listings
CREATE TABLE jobs (
id, external_id, title, company, url, apply_url,
location, remote INTEGER,
job_type, -- full-time | internship
domain, -- primary domain bucket
tags TEXT, -- JSON array
description TEXT,
date_posted, sponsorship, source,
hash TEXT UNIQUE, -- md5(title|company|url) for deduplication
score INTEGER, -- 0β14 stack-match score
first_seen, notified INTEGER DEFAULT 0
);
π Privacy
- All data stays on your machine
- No analytics, no telemetry, no external accounts required
- The only outbound connections are to public GitHub raw URLs, RemoteOK, The Muse, and your own SMTP relay
.envcredentials are gitignored and never leave your machine
π License
MIT β use freely, modify freely.
Recommended Servers
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.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.