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
Visit Server

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.

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