Give AI a door. And a set of keys.
Connecting an assistant to a real business system means deciding what it can see, what it can change and how every action can be understood afterwards.
the whole journey, at a glance.
Interactive product-flow illustration · tap a step to explore
What needed to work.
Two backends needed similar integration plumbing, but very different permissions. Treating them identically would hide the most important difference.
The work behind it.
I worked on a common Python/FastAPI MCP-server foundation and its adapters for the Lark CRM and NestJS web backend, including authentication, audit logging and access controls.
The decision that mattered.
Reuse the server foundation while keeping permission policies distinct. The CRM connector supports controlled administrative writes; the REST connector is read-only, with dry-run and kill-switch controls around riskier paths.
The boundary is part of the product. A smaller, explicit tool surface is easier to reason about than a connector that can do everything.
A little context.
Sanitized integration case study with a public implementation. Backend names describe architecture; no credentials, internal endpoints or customer data appear here.