local-tech-digest-mcp

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.

Category
访问服务器

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
  • .env credentials are gitignored and never leave your machine

📄 License

MIT — use freely, modify freely.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选