Every new app these days ships dripping with MCP servers, terrified the agent won't be able to reach it. But old software? Things, Surge, assorted veterans of the system tray — no MCP, and there never will be. Wait for the developers to grow a conscience?

No. Waiting is the worst strategy.

1. Forty-year-old interfaces, exactly good enough

macOS has two ancient corridors, each older than the last.

AppleScript, born 1993, invocable today with a one-line osascript:

osascript -e 'tell application "Spotify" to playpause'

URL schemes, where each app registers its own xxx:// protocol. For example, adding a to-do to Today in Things:

open "things:///add?title=review%20PR&when=today"

What these two corridors share: text in, text out, no GUI involved. Think about it — that's literally the agent's mother tongue.

2. The agent lacks ability? No, it lacks a manual

At first I assumed the agent "couldn't use" Things. Turns out it's not that it can't — it doesn't know the door exists. I wrote up the commands Things listens to, plus the read-before-write rules, as a one-page skill, and it instantly handled it like a pro: query the list first, then add, then re-query to verify — more punctilious than I am.

So the full recipe for giving a pre-AI-era tool an agent interface is three ingredients:

old interface (AppleScript / URL scheme)
+ one page of manual (which verbs exist)
+ a little manners (read state first, act, verify after)

No SDK, no MCP server, no developer cooperation required.

3. The pits

There are pits, and knowing them early saves lives:

  • Permissions: the first time osascript controls an app, the system pops an automation consent dialog. The agent will hang there until a human clicks — TCC's rules.
  • Coverage: not every app has a scripting dictionary. For the ones without, System Events via Accessibility can brute-force the menus — works, but it's reading braille by proxy; avoid if you can.
  • One-way streets: most URL schemes only fire and forget. If you need return values, look for x-callback-url support, or just switch to AppleScript.

4. Going further

If the app is your own, there's a bigger move: give the running instance a local Unix socket and a thin CLI to send commands. That's exactly how Surge does it — surge-cli sends commands to the running app and gets JSON back, while the GUI stays the GUI.

I'm building my own clipboard tool in that direction right now; there will be a post when it lands.

5. Closing

The most ironic thing about the AI era: the easiest things for an agent to take over are the interfaces older than you are.

No need to wait for anyone's conscience. An old interface plus one page of manual, and the agent can raid your fridge.