All posts

What it takes to charge for it

Toolport for Teams is the first thing we've charged for, and charging changes what 'done' means. A billing bug we only caught by paying our own invoice, making seats airtight, and why the paid case has to be made in the open.

The earlier posts here made an argument. Loading every MCP server’s full tool list into context on every request is a tax worth removing; context is expensive real estate; and (measured on a frontier model) you can remove most of that tax without losing a single correct answer. Toolport for Teams, which goes live on Product Hunt today, is the first thing we’ve ever asked anyone to pay for. And charging for something changes what “done” means.

When a product is free, “done” is roughly “it works and people like it.” The moment a card is involved, a different set of paths turns load-bearing: upgrading, getting charged the right amount, seeing the right plan afterward, changing seats, canceling. None of them are glamorous. All of them are the product now: get one wrong and it’s worse than any feature you didn’t ship. So the last stretch before launch wasn’t features. It was making the money paths boring.

The bug you only catch by paying your own invoice

Here’s the clearest one. I upgraded our own demo team from the trial to a paid monthly plan. Stripe took the card, showed a successful charge, sent the receipt. And the dashboard still said “free trial.”

That’s the kind of bug you never catch by reading the code, because every piece of it looked right. The charge succeeded. The webhook fired. The subscription existed. The problem was that “are you on a trial?” got answered from the trial end date alone, which hadn’t run out yet, and the dashboard checked that before it checked whether you’d actually subscribed. So a team that had just paid us got told, in the friendliest possible way, that it was still on a free trial. If you can’t tell whether someone is paying you, nothing else you built matters.

The fix is a rule we now apply anywhere money is involved: read the live state, never a stale flag or a hopeful redirect. A paying team is never shown as on a trial, even if the original trial window hasn’t run out. The upgrade grants off the real subscription (the same handler the recurring webhook uses), so re-opening the success page can’t restore a stale plan, and a mid-trial upgrade flips to paid the instant Stripe confirms it. Then we wrote the regression test we should’ve had in the first place, so this exact embarrassment can’t come back.

Seats have to be airtight

Toolport for Teams is $39/month for up to 5 people, then $12 per person after that. Seats are the entire paid lever, which means every path that touches a seat count had to be walked.

A few of the sharper edges. You can’t check out for fewer seats than you already have members, or you’d strand people the second you paid. You can’t check out for an absurd number either now: the count is capped, so a fat-fingered “500” can’t turn into a five-figure invoice before anyone notices. And then there’s the state nobody designs for on purpose, a team with more members than paid seats, which happens the moment someone cancels or downgrades while people are still on. The honest thing there isn’t to quietly strand anyone, and it isn’t to remove people behind their back. It’s to say so: a banner that tells you the team is over its seat count and lets you add seats or take members off. New joins were already blocked at the limit; now an existing overage is visible instead of quietly running past what you’re paying for.

Making the case in the open

There’s a tension in charging for Toolport, and we walked into it on purpose. It’s local-first and secretless: your keys stay in your own OS keychain, the servers run on your own machines. That’s the whole point, and it also means we can’t hold your data hostage behind a paywall. The free tier is genuinely useful on its own. So the paid case has to be made in the open, on the merits: the governance a team actually needs (per-server access control, roles, budgets, full audit history, service accounts) and the seats to grow past five.

So it had to be obvious what you’re paying for, without turning into a nag. The upgrade prompt now lists what Team actually unlocks instead of waving at “governance controls.” A brand-new free team gets one clear, low-key nudge toward a no-card trial, where before it got almost nothing. And since we’re launching today, we made sure the “we’re live on Product Hunt” banner doesn’t stack on top of the trial banner and bury the actual app. One message at a time.

Where that leaves it

Being right about the idea is what got Toolport installed. Being trustworthy with a team’s money is a different bar, and it’s the one that decides whether anyone leaves a card on file. Most of that work is invisible when it goes well, which is the point.

If you’re a team drowning in per-agent MCP config, Toolport for Teams is live today; the details are on the Teams page. And if you find the next bug we’d only have caught by paying our own invoice, tell us.

Download Toolport Star on GitHub