I'm moving to LA in a few months. before that I need to clear out a life's worth of stuff. furniture, a car, a few cameras, and a house in the south of vienna at bergwald43.at. all of it goes on willhaben, austria's everything-marketplace.
managing willhaben by hand needs a daily habit. my attention arrives in bursts instead. so I built an mcp that runs the loop for me.
phase one: listings. a cron job pulls comparable listings every morning and edits my prices when they drift.
phase two: chat. early failure mode was the agent replying to the same conversation a few times, the kind of error that makes buyers ghost. guardrails fixed it.
stack: typescript, playwright with the stealth plugin, better-sqlite3, an mcp server on top of @modelcontextprotocol/sdk. originally hosted on a digitalocean droplet, which ran straight into willhaben's bot protection. the fix was a wireguard tunnel from the server through the fritzbox in my apartment, so traffic exits through a normal austrian residential ip. now on a hetzner box, but the fritzbox-as-residential-exit is still load-bearing. login: the early version sniffed my session cookie from a browser extension. the current version reads credentials from .env and runs the form like any user.
I'm not publishing the code. my reading of the terms of service is that this is over the line, and I'd rather sell my house than win that argument. but I'll say out loud: this is where everything goes anyway. people already write listings through chatgpt and copy across browser tabs by hand. the agent running the whole loop is barely a step further.
platforms need to think about it now. there's a clever pattern from a keynote by mario zechner, founder of pi.dev: in his github repo he auto-closes every submitted issue and waits for a real human to comment to reopen it. that one trick filters out almost every drive-by agentic submission. willhaben needs to think about methods like that. if I can build this, everyone can. an honest mechanism for declaring "this account is operated by an agent, and these are the rules" would be more useful than another captcha.
until then the workaround is the fritzbox.