Architecture · MCP · Jan 2026 · 1 min read

One service layer, many surfaces

Thesis

A browser, a Claude agent, and a background worker should all go through the same code. Anything else drifts.

The temptation, when you add an AI surface to an app, is to give it its own path to the data. Resist it. The moment the agent endpoint and the browser endpoint run different code, they start to disagree, and the disagreement always turns up in production.

MeTime has one business-logic layer and three ways in: a REST API for the browser, an MCP endpoint for a Claude agent, and background workers for the slow work. All three delegate to the same services. When an agent answers whether I’m free on Thursday, it’s reading the exact schedule the interface would show, through the exact code the interface uses. The same pattern shows up in AI Hub, Roler.ai, and Connect Layer: thin surfaces, one service core.

The payoff is that correctness lives in one place. Encryption, validation, the categorization logic: write it once, and every surface inherits it. The surfaces stay thin, which is what surfaces should be. Agent context formats are the handoff cousin of the same idea: one contract, many consumers.

Related work

MeTime →AI Hub →Roler.ai →Connect Layer →

Related reading

Agents deserve a real context format →Compress for agents, not for humans →Dual channels and rule layers beat a longer prompt →

Portfolio graph

Hover nodes · click empty canvas to zoom/pan

Maps how the work here connects. Open the Portfolio graph →

  • Professional
  • Personal
  • Skill
  • Writing