Install
$ agentstack add mcp-interviewstackio-interviewstack-jobs ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
InterviewStack.io Job Search - for your AI assistant
Search live, curated jobs from the InterviewStack.io job board from any MCP-compatible AI assistant - Claude Code, Cursor, VS Code + Copilot, OpenAI Codex, Windsurf, and more. Let your AI find roles that genuinely fit you, polish your resume against real postings, and draft tailored applications.
Under the hood this is one open MCP server - the same endpoint and tools for every client. This repo packages it for easy setup plus the workflow guidance that makes it sing: a Claude Code plugin (one-click, bundles the skills) and a portable [AGENTS.md](./AGENTS.md) that Codex, Cursor, Copilot, Windsurf and ~20 other tools read natively.
> Jobs are sourced from InterviewStack.io (the .io job board - not a .com).
Quick start - one copy-paste, then just talk
- Get a key (free) - sign in at app.interviewstack.io/sidenav/job-search-mcp and click Create key. That page fills your key into the command below automatically and has a Test connection button to confirm it works. One active key at a time - delete it from the same page if you need a fresh one.
- Connect Claude Code - paste this ONE line in your Terminal (your key is embedded, no shell setup, nothing to forget):
``bash claude mcp add --transport http interviewstack-jobs https://mcp-job-search.interviewstack-io.workers.dev/mcp --header "Authorization: Bearer isk_your_key_here" ` Then fully quit and reopen Claude Code, and run /mcp` to confirm interviewstack-jobs is connected. Using a different tool? See [Step 2](#step-2---connect-your-tool).
- (Optional) add the guided skills - paste in Claude Code for auto-updating tailor/resume/digest workflows:
`` /plugin marketplace add interviewstackio/interviewstack-jobs /plugin install interviewstack-jobs@interviewstack-jobs ``
- That's the whole setup. Now just ask:
> "Find new jobs that match my resume and save the best ones for me every morning."
Your assistant takes it from there: asks for your resume, sets up the morning schedule itself (jittered, on your machine), and from then on the best new matches land in your application tracker with a note on why each one fits. You review and apply. Jobs you remove are never re-saved. More ideas: [starter prompts](#starter-prompts---what-to-ask-it).
Prefer to script the schedule yourself instead of asking in chat? See [Step 3](#step-3---daily-digest-on-autopilot).
Step 1 - Get your API key (all tools)
Sign in at app.interviewstack.io/sidenav/job-search-mcp and click Create key. Copy the key (isk_…) - it's shown once. The page also has a Test connection button: paste your key there to confirm it works before you wire it into a tool. One active key at a time: delete it from the same page if you need a fresh one (anything still using the old key stops working).
> Paste the key directly into each tool's config (shown in Step 2). The > configs below embed the literal key - no shell environment variables, which > GUI-launched editors often don't inherit and are the #1 cause of a silent > "Unauthorized" later. Never commit your key. It's read-only and > rate-limited, but treat it like a password; delete-and-recreate anytime.
Step 2 - Connect your tool
The MCP endpoint is the same everywhere: https://mcp-job-search.interviewstack-io.workers.dev/mcp with header Authorization: Bearer .
Claude Code
Most reliable - one line in your Terminal (key embedded, no env vars):
claude mcp add --transport http interviewstack-jobs https://mcp-job-search.interviewstack-io.workers.dev/mcp --header "Authorization: Bearer isk_your_key_here"
Quit and reopen Claude Code, then verify with /mcp.
Optional - also get the bundled, auto-updating skills (tailor-application, resume-polish, daily-job-digest). Paste inside Claude Code:
/plugin marketplace add interviewstackio/interviewstack-jobs
/plugin install interviewstack-jobs@interviewstack-jobs
The plugin reads your key from an INTERVIEWSTACK_MCP_KEY environment variable, so if you use the plugin route, add export INTERVIEWSTACK_MCP_KEY="isk_…" to your ~/.zshrc (or ~/.bashrc) and relaunch Claude Code from a fresh terminal. The one-line command above needs none of that. Enable auto-update under /plugin → Marketplaces → interviewstack-jobs → Enable auto-update.
Cursor
Add to ~/.cursor/mcp.json (global - works in every project). Paste your real key in place of isk_your_key_here:
{
"mcpServers": {
"interviewstack-jobs": {
"url": "https://mcp-job-search.interviewstack-io.workers.dev/mcp",
"headers": { "Authorization": "Bearer isk_your_key_here" }
}
}
}
Save the file, then fully quit and reopen Cursor; check Settings → MCP for a green dot. For the workflow guidance, copy [AGENTS.md](./AGENTS.md) into your project root (Cursor reads it), or add it under .cursor/rules/.
VS Code + GitHub Copilot (agent mode)
Add to .vscode/mcp.json:
{
"servers": {
"interviewstack-jobs": {
"type": "http",
"url": "https://mcp-job-search.interviewstack-io.workers.dev/mcp",
"headers": { "Authorization": "Bearer ${input:interviewstack_key}" }
}
},
"inputs": [
{
"id": "interviewstack_key",
"type": "promptString",
"description": "InterviewStack.io MCP key",
"password": true
}
]
}
VS Code prompts once for the key and stores it securely. For guidance, drop [AGENTS.md](./AGENTS.md) in the repo root - Copilot reads it (or .github/copilot-instructions.md).
OpenAI Codex CLI
Add to ~/.codex/config.toml. The first line (at the very top of the file, not inside any [section]) lets Codex use a literal key instead of an environment variable. Paste your real key in place of isk_your_key_here:
experimental_use_rmcp_client = true
[mcp_servers.interviewstack-jobs]
url = "https://mcp-job-search.interviewstack-io.workers.dev/mcp"
bearer_token = "isk_your_key_here"
Save, restart Codex, then run codex mcp list to confirm. Codex reads [AGENTS.md](./AGENTS.md) natively - copy it into your project root.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json. Paste your real key in place of isk_your_key_here:
{
"mcpServers": {
"interviewstack-jobs": {
"serverUrl": "https://mcp-job-search.interviewstack-io.workers.dev/mcp",
"headers": { "Authorization": "Bearer isk_your_key_here" }
}
}
}
Save, then in Windsurf open the Cascade panel → MCP and click Refresh (or restart Windsurf). Windsurf reads [AGENTS.md](./AGENTS.md) - copy it into your project root.
Any other MCP client
Point your client at a remote Streamable-HTTP MCP server:
{
"mcpServers": {
"interviewstack-jobs": {
"type": "http",
"url": "https://mcp-job-search.interviewstack-io.workers.dev/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY_HERE" }
}
}
}
Some clients (e.g. older Claude Desktop builds) only support stdio MCP - bridge with mcp-remote: npx mcp-remote https://mcp-job-search.interviewstack-io.workers.dev/mcp --header "Authorization: Bearer YOUR_KEY". Then add [AGENTS.md](./AGENTS.md) for the workflow guidance.
Once connected, grab a prompt from [Starter prompts](#starter-prompts---what-to-ask-it) below.
Not working? Unblock it
Almost every problem is the key. The fastest fix is the Test connection button on the key page - paste your key and it tells you immediately if the key itself is good.
- "Unauthorized" / 401 - the key is missing, mistyped, or you pasted the
placeholder (isk_your_key_here) instead of your real key. Copy the whole key (starts with isk_), no missing characters or stray spaces. Can't find it? You can't recover it - delete it on the key page and create a new one.
- The tool doesn't show the server - fully quit and reopen the tool (not
just close the window); configs are only read on a fresh start. Cursor/VS Code/Windsurf also have an MCP Refresh button.
- Worked yesterday, not today - a key works only until it's deleted or
replaced. If you made a new key, update every tool and scheduled digest with it.
- Is it safe to put the key in a file? - Yes. It only reads jobs, is
rate-limited, and you can delete it anytime. That's why we embed it directly instead of fiddling with system environment variables - fewer things to break.
Still stuck? Email [support@interviewstack.io](mailto:support@interviewstack.io) with the tool you're using.
Step 3 - Daily digest on autopilot
This is the step that makes the whole thing passive: a scheduled run finds what's new for you each morning, auto-saves the strongest matches (each with a one-line "why it fits" note) into your application tracker, and writes a compact digest to a log. You review and apply from the tracker - jobs you remove are never re-saved.
The easiest way: just ask your assistant - "set up my daily job digest to run on a local open model." It will run the installer, set up Ollama, and schedule it. Or do it yourself:
Recommended - free + private, on a local open model
The recurring run uses a local open model (via Ollama) - no hosted-AI key, no per-token bills, and your resume/profile never leaves your machine. After setup, each morning is just python3 digest.py.
# Installs Ollama if needed, pulls the model, and writes a JITTERED schedule.
INTERVIEWSTACK_MCP_KEY=isk_... WINDOW_START=6 WINDOW_END=9 \
./examples/cron/open-model/setup.sh
Then edit ~/.config/interviewstack-digest/config.json (your profile + search criteria) and test with python3 ~/.config/interviewstack-digest/digest.py --dry-run. Full guide: [examples/cron/open-model/](examples/cron/open-model/).
Alternative - hosted AI each morning
Prefer to spend a hosted-AI call per run instead of running a local model?
DIGEST_PROMPT="Run my daily job digest: new senior ML engineer roles, remote, US, \
posted in the last 3 days, deduped against my last run. Top 6, save the best 2-3 \
to my tracker with concrete fit reasons." \
WINDOW_START=6 WINDOW_END=9 ./examples/cron/setup-daily-digest.sh
This template runs Claude Code headlessly; on another tool (Codex, Copilot, ...), schedule that tool's equivalent headless command with the same jittered timing.
> ⏰ Always jitter the schedule. Don't run it at 09:00 sharp. If everyone runs > on the hour, the shared job database takes a synchronized hit and gets slow for > everyone. Both setup scripts randomize the time for you; if you schedule manually, > pick a random minute (e.g. 07:23, not 08:00). The digest isn't time-critical.
Starter prompts - what to ask it
Copy-paste any of these into your connected AI tool. They're ordered roughly by where you are in a job search.
Explore what the board covers > "What job search tools do you have from InterviewStack, and what roles does the > board support for someone with my background? Here's my resume: [paste]"
Find roles that actually fit you (not keyword soup) > "Here's my resume: [paste]. Find roles on the InterviewStack board that genuinely > fit my background - rank by real fit, be honest about stretches, and show salary > where listed."
Targeted search with hard constraints > "Find senior backend engineer roles, remote, US, posted this week, paying > $180k+. I need visa sponsorship. Top 10, newest first."
Build a shortlist and save it for later > "Search for staff product manager roles in fintech, hybrid or remote in NYC. > Save the 3 best fits to my InterviewStack tracker with a concrete reason for > each, and give me the link to review them."
Tailor applications to the best matches > "Here's my resume: [paste]. Find the 2 best-fitting senior data scientist roles > posted this week and draft tailored resume bullets, a short cover note, and the > apply link for each. Save both to my tracker."
Polish your resume against real demand > "Pull 8-10 real senior DevOps postings from the InterviewStack board, tell me > which skills and phrasings keep recurring, and rewrite my resume toward that > demand. Here's the current version: [paste]"
Scope a career pivot with real data > "I'm a data analyst who wants to move toward ML engineering. Using the > InterviewStack board: which adjacent roles exist, what do their postings ask for > that I don't have yet, and which current openings would accept my profile today?"
Market recon > "What are the highest-paying remote machine learning roles on the board right > now? Which companies show up most in those results?"
Set up the recurring digest (interactive alternative to Step 3) > "Set up a daily job digest for me: new senior frontend roles, remote, EU, > every morning at a randomized time between 7 and 9. Each run, save the best 2-3 > new matches to my tracker with fit reasons and keep the digest to 6 lines."
A few habits that get better results: paste your real resume (fit ranking is only as good as what the agent knows about you), state hard constraints explicitly (visa, salary floor, location), and ask it to be honest about stretches - the board's curated taxonomy means "no good matches" is a real, useful answer.
Use a local, open model (free and private)
Prefer to run the AI on your own machine? Point a local open-source model at the same MCP server. Two real wins:
- Free. No API keys, no per-token bills. The model runs on your hardware; your only
cost is your own compute.
- Private. Your model and your resume stay on your machine. (Job search still
calls our hosted MCP, so the job data comes from InterviewStack.io, but your resume and the model never leave your computer.)
What you need
- A local runtime. Ollama is the simplest.
- A model that is good at tool calling - this workflow is multi-step (the agent
calls find_roles, then search_jobs, then get_job), so an agentic/coding model is the right pick. A strong, ~30B example is qwen3-coder:30b (tuned for tool use; budget roughly 24 GB+ of RAM/VRAM at a 4-bit quant). Smaller 7-14B models work but are less reliable at the multi-tool flow. (If you specifically want a ~27B model, Google's gemma3:27b is another option, but pick one trained for tool calling.)
- An MCP-capable agent client that supports local models, such as
Cline for VS Code.
Recipe: Cline + Ollama + Qwen3-Coder
# 1. Pull the model (see ollama.com/library for current tags)
ollama pull qwen3-coder:30b
// 2. In Cline, add the MCP server (MCP Servers -> Configure), remote HTTP:
{
"mcpServers": {
"interviewstack-jobs": {
"type": "streamableHttp",
"url": "https://mcp-job-search.interviewstack-io.workers.dev/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}
- In Cline, choose Ollama as the API provider and
qwen3-coder:30bas the model. - Drop [
AGENTS.md](./AGENTS.md) into your workspace so the model follows the
curated-filters-first workflow, then ask it to find roles and tailor to your resume.
> Honest note: local models are less reliable at multi-step tool orchestration than > frontier hosted models, so expect to guide them a bit more. The curated-filters-first > design (resolve the role with find_roles, then a structured `se
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: interviewstackio
- Source: interviewstackio/interviewstack-jobs
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.