# The feature that isn't an endpoint

2026-08-21

Every feature I've ever shipped meant an endpoint. You design the route, write the schema, version it, document it, test it, and then you own that contract for as long as the product lives. That's the tax you pay for a thing being real.

Then I went to add "check this email renders everywhere," and there was no endpoint to write. It isn't a request. It's a procedure: mint a few mailboxes, send the same message to each of them, wait for what lands, pull the HTML apart, and check it against everything you know about how Outlook mangles a table. Every one of those steps already existed in my API. What was missing wasn't a route, it was the know-how.

That's a skill, in the sense the word has picked up over the last year: a written procedure an agent loads when it's relevant and then follows. Nothing gets deployed and nothing gets pasted in - a document that turns primitives you already have into something you didn't.

The part that got my attention is that this is being standardized. There's an MCP working group on it, and the direction they've landed on is [SEP-2640](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2640) - skills delivered as ordinary MCP resources, no new protocol primitive, with a registry proposal alongside it so they can be discovered like anything else. It's still in review. But the direction is plain: handing your agent a written procedure won't be my homemade trick much longer, it'll just be how MCP servers work.

It splits a product cleanly in two. The API stays small, deterministic, and frankly boring - mint, send, wait, read, assert. That's the half that has to be right, so it's the half that gets versioned and drift-guarded and tested to death. Everything above it is recipes: how to test a signup flow end to end, how to move off the tool you're on now, how to make an email survive Outlook. Recipes compose the primitives. They ship in an afternoon. And when one changes, nothing breaks, because there's no contract underneath it to break.

I can't afford a feature that costs me an endpoint every time. What I can do is write down what I learned the hard way last week and hand it to your agent over the same connection you're already authenticated on.

Cross-client rendering is the first one, and every rule in it was learned the ugly way, on real devices, in real inboxes. The rest of the list is short, because each one has to earn its place: turning "make sure the signup email works" into assertions that actually hold, instead of you guessing what you'll have to clean up. Moving a suite off whatever you're on now without hand rewriting every test. Wiring the loop into the CI you already run. Reading the SPF, DKIM and DMARC verdicts on a message and telling you which one is why it went to spam. Minting a key scoped to one test run and nothing else.

Not one of those needs a new endpoint. They're the same handful of primitives, arranged by somebody who already made the mistake. That's the part worth paying for, and it's the part that gets better every week without anything underneath it moving.