Install
uv tool install git+https://github.com/Stupidoodle/swissdevjobs-cliWho It's For
- Job seekers looking for salary-transparent tech roles (about 4,700 of them) in Switzerland, Germany, the UK, the US, Canada, the Netherlands, or France, who want to search, filter, and apply from the terminal or an AI agent.
- Users who want to plug their job search into an MCP client (such as Claude Code): it is simultaneously a Python CLI, an MCP server, and a Claude Code plugin.
- Not a fit for: users who need to install from PyPI (it is not published on PyPI and can only be installed from the GitHub repository); users without a Python 3.9+ environment. Also note that the search tools require no identity configuration, but actually applying to jobs requires providing your name, email, and résumé file path — this is an explicit official prerequisite.
First Attempt in 3 Minutes
The recommended main path is to start with the read-only search tools to get familiar with the data, with no applications involved:
-
Prerequisites: install uv, Python 3.9+.
-
Install the CLI:
uv tool install git+https://github.com/Stupidoodle/swissdevjobs-cliThis installs two equivalent commands,
sdjandswissdevjobs. -
Low-risk first call: use the MCP read-only tools
search_jobsdirectly (filter by salary, tech stack, city, country, remote, seniority, visa) ortop_technologies(see which technologies are currently hot in the market). These read-only tools carry areadOnlyHint, so clients may run them without interrupting you; but this only means they won't perform write operations — it does not mean zero risk, nor does it imply anything about their network access or data-reading boundaries. -
Success signal: a list of jobs matching your filters, or a technology ranking, is returned.
Before making real applications you need to configure your identity separately: sdj config --init writes ~/.config/swissdevjobs-cli/.env (chmod 600), containing SDJ_NAME, SDJ_EMAIL, and SDJ_CV. You can use sdj config to view the resolved configuration and its sources. These fields are only required for the apply action; searching and browsing don't need them.
Other official integration methods (secondary):
- Claude Code plugin:
/plugin marketplace add Stupidoodle/swissdevjobs-clithen/plugin install swissdevjobs@swissdevjobs; once installed, the MCP server starts, requiring uv to be on PATH. - Other MCP clients: configure the server key
swissdevjobsin.mcp.jsonorclaude_desktop_config.json, with the commandswissdevjobs-mcp, providing SDJ_NAME, SDJ_EMAIL, and SDJ_CV via environment variables. - Run without pre-installing:
uvx --from git+https://github.com/Stupidoodle/swissdevjobs-cli swissdevjobs-mcp.
The MCP entry point is implemented as JSON-RPC 2.0 over stdio.
Use Cases
- Search jobs by criteria: call
search_jobs, filtering by salary, tech stack, city, country, remote, seniority, or visa requirements. What to expect: a list of salary-transparent jobs matching the criteria. Read-only, no side effects. - Read a job in depth: call
get_jobon a candidate job to get the full description, requirements, and screening questions, and decide whether to apply. Read-only, no side effects. - Record real applications: if you have already applied to a job via email or some ATS, call
mark_appliedto record it locally, then uselist_applicationsto view your local records. Note that these two tools are not read-only:mark_appliedwrites local state, whilelist_applicationsonly reads locally recorded content; nothing is sent to any remote endpoint. - Apply via the site's form (with caution):
apply_to_jobsubmits through the website's own form, and once submitted it cannot be withdrawn. It has a confirmation gate: the first call refuses to submit; you must call again withconfirm: truefor the submission to actually go through. Make sure your identity is configured (name, email, résumé path) before applying.
Boundaries
- Read/write nature:
search_jobs,list_boards,get_job, andtop_technologiesare read-only;apply_to_job(remote write, requires a second call withconfirm: true, irreversible) andmark_applied(local state write) are write operations. - Side effects and confirmation points: the only remote side effect is
apply_to_jobsubmitting an application, with the confirmation point at the second call carryingconfirm: true; local side effects are the records written bymark_appliedand the local .env file written bysdj config --init. - Credential requirements: applying requires SDJ_NAME, SDJ_EMAIL, and SDJ_CV (the résumé must be a PDF at an absolute path); this is explicitly required by the official documentation for the apply action.
- Official limitations: not published on PyPI;
apply_to_jobis gated by default and cannot submit directly; the two installed commandssdjandswissdevjobsare equivalent. - Not yet confirmed: the exact compatibility scope across MCP clients, authentication details, and any rate-limiting or anti-scraping restrictions beyond the confirmation gate are not stated in the official evidence; consult the repository documentation before use.