
Product
Socket Threat Intel Now Shows Which Malware Campaigns Were Blocked or Detected
Socket Threat Intel now shows which malware campaigns were blocked or detected in your organization, with links to scans and Firewall events.
seriousletter-mcp
Advanced tools
MCP server for SeriousLetter — scrape job listings and manage applications via Claude Code
An MCP (Model Context Protocol) server that connects Claude Code to the SeriousLetter job application platform.
Once configured, you can manage your entire job search from inside Claude Code: scrape listings, maintain your pipeline, generate cover letters, export PDFs, and file Swiss RAV/NPA work efforts — all without leaving the terminal.
Repository: github.com/mnott/SeriousLetter-MCP
Tell Claude Code:
Clone https://github.com/mnott/SeriousLetter-MCP and set it up for me
Claude finds the setup skill, checks your system, clones the repo, builds it, and registers itself as an MCP server. You just provide your API token when asked — Claude does the rest.
git clone https://github.com/mnott/SeriousLetter-MCP.git
cd SeriousLetter-MCP
bun install
bun run build
This compiles TypeScript to dist/index.js.
Sign in at jobs.seriousletter.com, open Settings, go to API Tokens, and generate a token.
Edit ~/.claude.json and add a seriousletter entry under the top-level
mcpServers object:
{
"mcpServers": {
"seriousletter": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/SeriousLetter-MCP/dist/index.js"],
"env": {
"SL_API_URL": "https://jobs.seriousletter.com",
"SL_API_TOKEN": "your-api-token-here"
}
}
}
}
Replace /absolute/path/to/SeriousLetter-MCP with the actual path where you
cloned the repo (e.g. ~/dev/ai/SeriousLetter-MCP).
The tools appear as mcp__seriousletter__sl_* in your Claude Code session.
You: Scrape this job and add it to SeriousLetter:
https://www.linkedin.com/jobs/view/1234567890
Claude: [uses sl_scrape_and_create]
Done. Created "Senior Software Engineer" at Acme Corp (uuid: abc-123).
You: Generate a cover letter for the Acme Corp job, formal tone, in English.
Claude: [uses sl_generate_letter]
Here is the generated letter: ...
You: Export the cover letter as PDF and save it to my desktop.
Claude: [uses sl_list_letters, sl_export_letter_pdf]
Exported. Saved to ~/Desktop/acme-corp-cover-letter.pdf
You: Search job-room.ch for software engineer roles in Zurich.
Claude: [uses sl_search_jobroom with canton_codes: ["ZH"]]
Found 14 results. Here are the top matches: ...
You: File the Acme Corp application as a work effort on job-room.ch.
Claude: [uses sl_jobroom_sync_job]
Synced "Senior Software Engineer" at Acme Corp to job-room.ch.
| Tool | Description |
|---|---|
sl_scrape_job | Scrape a job listing URL. Returns structured data (title, company, location, description). No AI used — pure HTML extraction. |
sl_create_job | Create a new job application. Requires company and position title at minimum. |
sl_scrape_and_create | Scrape a URL and create the job in one step. Checks for duplicates first. |
sl_list_jobs | List job applications, newest first. Filter by status, paginate. |
sl_search_jobs | Search jobs by company name or title. Fuzzy matching. |
sl_get_job | Get full job details including description, status, and metadata. |
sl_update_job | Update any field on an existing job (status, title, location, description, etc.). |
sl_discover_api | Show the full SeriousLetter API schema. Useful for exploring available fields. |
| Tool | Description |
|---|---|
sl_list_profiles | List all CV profiles. Shows names and UUIDs. |
sl_get_profile | Get full CV content: experiences, education, skills, languages, certifications. |
sl_copy_cv_to_job | Copy a CV profile to a job as a job-specific CV for customisation. |
sl_export_cv_pdf | Export a CV profile as PDF. |
| Tool | Description |
|---|---|
sl_list_letters | List all cover letters for a job. |
sl_create_letter | Save a cover letter to a job (store after generating or writing manually). |
sl_get_letter | Get a single cover letter by ID. |
sl_update_letter | Update a letter's content or version name. |
sl_generate_letter | Generate a cover letter using SeriousLetter's 3-stage server-side pipeline (draft → review → consensus). |
sl_export_letter_pdf | Export a cover letter as PDF. |
| Tool | Description |
|---|---|
sl_list_companies | List or search companies in the address book. |
sl_create_company | Create a company record (name, address, contact). UUID can be reused across jobs. |
| Tool | Description |
|---|---|
sl_add_note | Add a note to a job (evaluation, research finding, status reason). |
sl_list_notes | List all notes for a job. |
sl_list_conversations | List saved conversations for a job (analyses, evaluations). |
sl_save_conversation | Save a conversation (array of user/assistant messages) to a job. |
sl_get_conversation | Get a saved conversation by ID with all messages. |
| Tool | Description |
|---|---|
sl_list_prompts | List available AI pipelines. Shows name, section, stage count. Prompt templates are not exposed. |
sl_get_prompt | Get pipeline metadata: stages, execution order, context variables. |
sl_run_prompt | Run an AI pipeline server-side on a job. Returns gap analysis, skill analysis, cover letter, etc. |
| Tool | Description |
|---|---|
sl_list_templates | List available site templates and their supported URL patterns. LinkedIn is currently supported; more are planned. |
| Tool | Description |
|---|---|
sl_get_preferences | Get user preferences: salary, availability, work arrangement, evaluation criteria, cover letter style notes. |
sl_update_preferences | Update any preference field. |
These tools integrate with arbeit.swiss, Switzerland's official public job platform.
Search tools — no authentication required:
| Tool | Description |
|---|---|
sl_search_jobroom | Search job-room.ch for jobs by keyword, canton, workload, and more. |
sl_get_jobroom_job | Get full details of a job-room.ch listing by UUID. |
sl_import_jobroom_job | Import a job-room.ch listing into SeriousLetter (checks for duplicates first). |
RAV/NPA work effort tools — require Chrome open and logged in to job-room.ch. API calls are routed through your browser session, so no separate credential setup is needed:
| Tool | Description |
|---|---|
sl_jobroom_check_session | Verify that Chrome has an active job-room.ch login. |
sl_jobroom_list_efforts | List all filed work efforts (Arbeitsbemühungen). |
sl_jobroom_get_proof | Get a single proof record with all its work effort entries. |
sl_jobroom_submit_effort | Submit a new work effort directly (manual field entry). |
sl_jobroom_sync_job | Sync a SeriousLetter job to job-room.ch automatically — fetches job data and maps fields. |
| Tool | Description |
|---|---|
sl_list_users | List registered users and show which is active in this session. |
sl_switch_user | Switch to a different user for the rest of the session. |
sl_add_user | Register a new user (or update an existing user's token). |
sl_remove_user | Remove a registered user and their token. |
Multiple people can share one MCP installation. Each user needs their own SeriousLetter API token.
Set the primary user's token in ~/.claude.json as shown in the Installation
section above. This becomes the default user.
You: Add Grazyna as a SeriousLetter user with token abc123...
Claude: [uses sl_add_user]
User "Grazyna" registered.
You: Switch to Grazyna.
Claude: [uses sl_switch_user]
Switched to Grazyna. All subsequent calls use her token.
User sessions are per-Claude-Code-session. Switching does not persist across
restarts; the token in ~/.claude.json is always the startup default.
A complete job application flow looks like this:
sl_scrape_and_create extracts the listing and saves itsl_copy_cv_to_job links your profile to the jobsl_run_prompt runs a gap analysis or skill analysis pipelinesl_generate_letter runs the 3-stage AI pipelinesl_update_letter to edit; sl_add_note to record thoughtssl_export_letter_pdf and sl_export_cv_pdfsl_jobroom_sync_job submits the work effort to job-room.ch# Install dependencies
bun install
# Compile TypeScript
bun run build
# Watch mode (recompiles on save)
bun run dev
# Run the server directly (for testing)
node dist/index.js
The source is in src/:
index.ts — All tool registrations and server entry pointapi-client.ts — SeriousLetter REST API clientjobroom-client.ts — job-room.ch browser-proxy client (RAV/NPA tools)jobroom-search.ts — job-room.ch public search API clientscraper.ts — Job listing scraper using Playwright and site templatestemplates/ — Per-site scraping templates (LinkedIn, etc.)After making changes to the source, rebuild with bun run build and restart
Claude Code to pick up the new version.
MIT
FAQs
MCP server for SeriousLetter — scrape job listings and manage applications via Claude Code
We found that seriousletter-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Product
Socket Threat Intel now shows which malware campaigns were blocked or detected in your organization, with links to scans and Firewall events.

Security News
Fixes for eMudhra and Brotli are out. Getting them everywhere they’re needed means tracking down bundled libraries, runtimes, and certificate stores.

Threat Research
/Security News
Socket uncovered secret-stealing workflows that ran in LiteLLM’s GitHub repository 11 days before the supply chain attack on PyPI and Docker.