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/mcp

Add 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

ColumnTypeMeaning
iduuidRow id.
slugtextURL slug: the job page is https://jobs.trythestack.co/jobs/{slug}, its markdown https://jobs.trythestack.co/jobs/{slug}.md.
date_postedtimestamptzWhen the employer posted the job.
titletextJob title as the employer wrote it.
organizationtextEmployer name.
categorytextJob category, when set (often empty).
job_urltextThe employer's own application page. Applications happen there, not on The Stack.
salarytextSalary as stated by the employer: free text, or a JSON MonetaryAmount (currency, value/minValue/maxValue, unitText). Empty when not stated.
employment_typetextFor example full_time, part_time, contract, internship (spellings vary).
visa_sponsorshiptext"true" (or "yes"/"1") when the listing offers visa sponsorship; anything else means not stated.
countrytextCountry name in English, for example Germany, United Kingdom.
locationtextCity or place as the listing gives it.
job_descriptiontextFull description from the listing.
short_descriptiontextOne- or two-sentence summary.
experience_leveltextYears of experience as a band, for example 0-2, 2-5, 10+.
key_skillstextComma-separated skills the listing names.
remotetext"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