Developer docs
The Stack is a weekly tech careers newsletter read by 55,000+ engineers, and a free jobs board of visa-sponsored tech jobs in Europe; the best jobs from the board go out in the newsletter every Tuesday.
Newsletter: trythestack.co · Subscribe
MCP server · free · no account
Use The Stack inside Claude, ChatGPT and Cursor
Add one link to your AI assistant and ask it things like the examples below. It searches every job on The Stack, reads the newsletter, and can sign you up for the newsletter or job alerts (you confirm by email first).
https://cvybaiwpmbqykurtdned.supabase.co/functions/v1/mcpAdd it in 30 seconds
- Claude (claude.ai, desktop):
Settings → Connectors → Add custom connector, URL https://cvybaiwpmbqykurtdned.supabase.co/functions/v1/mcp - Claude Code:
claude mcp add --transport http the-stack https://cvybaiwpmbqykurtdned.supabase.co/functions/v1/mcp - ChatGPT:
Settings → Connectors → Create (developer mode), URL https://cvybaiwpmbqykurtdned.supabase.co/functions/v1/mcp, no authentication - Cursor / VS Code / others:
{ "mcpServers": { "the-stack": { "url": "https://cvybaiwpmbqykurtdned.supabase.co/functions/v1/mcp" } } }
Then ask
- Find backend jobs in Germany that sponsor visas
- What roles is Wise hiring for, and which ones sponsor visas?
- Summarise the latest issue of The Stack newsletter
- Email me new data engineering jobs in the Netherlands every week
What it can do (tools)
search_jobs: Search active jobs by words, country, city, remote, visa sponsorship and age.get_job: One job in full: description, skills, salary, visa sponsorship, application link.get_company: An employer and its open roles.list_newsletter_issues: The latest newsletter issues and guides.get_newsletter_issue: The full text of one issue.subscribe_to_newsletter: Sign the user up to the newsletter. They get a confirmation email and are subscribed only once they confirm.create_job_alert: Set up job-alert emails for the user. They get a confirmation email and alerts start only once they confirm.
Subscribing and job alerts only ever send the person a confirmation email, and are rate-limited.
Jobs API
A read-only REST endpoint (Supabase PostgREST) over every active job on The Stack Jobs. No account needed.
- Base URL:
https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public - Header (required):
apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut - The key is a publishable key. Row-level security limits it to reading this view, which holds active jobs only.
- Response: a JSON array of rows.
Columns
| Column | Type | Meaning |
|---|---|---|
| id | uuid | Row id. |
| slug | text | URL slug: the job page is https://jobs.trythestack.co/jobs/{slug}, its markdown https://jobs.trythestack.co/jobs/{slug}.md. |
| date_posted | timestamptz | When the employer posted the job. |
| title | text | Job title as the employer wrote it. |
| organization | text | Employer name. |
| category | text | Job category, when set (often empty). |
| job_url | text | The employer's own application page. Applications happen there, not on The Stack. |
| salary | text | Salary as stated by the employer: free text, or a JSON MonetaryAmount (currency, value/minValue/maxValue, unitText). Empty when not stated. |
| employment_type | text | For example full_time, part_time, contract, internship (spellings vary). |
| visa_sponsorship | text | "true" (or "yes"/"1") when the listing offers visa sponsorship; anything else means not stated. |
| country | text | Country name in English, for example Germany, United Kingdom. |
| location | text | City or place as the listing gives it. |
| job_description | text | Full description from the listing. |
| short_description | text | One- or two-sentence summary. |
| experience_level | text | Years of experience as a band, for example 0-2, 2-5, 10+. |
| key_skills | text | Comma-separated skills the listing names. |
| remote | text | "remote" or "true" for remote roles, "hybrid" for hybrid; anything else means not marked remote. |
Empty columns mean the listing does not say. An empty visa_sponsorship means "not stated", not "no sponsorship".
Filter examples
Remote roles with visa sponsorship
curl 'https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public?select=title,organization,country,job_url,slug&remote=in.(remote,true)&visa_sponsorship=in.(true,yes,1)' \
-H 'apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut'Jobs in Germany, newest first
curl 'https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public?select=*&country=eq.Germany&order=date_posted.desc' \
-H 'apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut'Jobs that name a skill (Python)
curl 'https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public?select=title,organization,country,slug&key_skills=ilike.*python*' \
-H 'apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut'Jobs with a stated salary
curl 'https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public?select=title,organization,salary,slug&salary=not.is.null&salary=neq.' \
-H 'apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut'Posted in the last 7 days (replace the date)
curl 'https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public?select=title,organization,country,slug&date_posted=gte.{YYYY-MM-DD}&order=date_posted.desc' \
-H 'apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut'Title search
curl 'https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public?select=title,organization,country,slug&title=ilike.*data%20engineer*' \
-H 'apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut'Pagination: rows 101–200
curl 'https://cvybaiwpmbqykurtdned.supabase.co/rest/v1/jobs_public?select=title,slug&order=date_posted.desc&limit=100&offset=100' \
-H 'apikey: sb_publishable_a61VjughNnWERjT0fMbHZw_JjWvY0ut'Etiquette
- Read-only. Only active listings are in the view; there is no write access.
- Ask for the columns you need with select=, and page with limit (100–1000) and offset.
- Keep to about one request per second, and cache results: new jobs arrive once a day, around 09:00 UTC.
- Link each job to its page on The Stack and send applicants to its job_url.
Machine-readable files
- developers/api.md: These docs as markdown
- llms.txt: Site brief
- llms-full.txt: Full brief with brand facts
- ai.txt: AI usage policy
- jobs.md: Every active job, one line each
- companies.md: Every company with open roles
- mcp.json: MCP server manifest
- api-catalog.json: Endpoint index (RFC 9727 copy at /.well-known/api-catalog)
- sitemap.xml: Every indexable page
- One job as markdown:
/jobs/{slug}.md(same data as the job page) - One company as markdown:
/companies/{slug}.md