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.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。