Service · Model Context Protocol

MCP servers that give Claude real access,
and a real boundary.

Start a project
03What a server wraps

Five systems we are usually asked to expose — and what stays human in each.

SystemWhat the model may doWhat stays human

Internal REST and GraphQL APIs

The services you already run, exposed as typed tools instead of pasted into a prompt. Usually the fastest server to build, because the contract exists.

Anything that mutates state

Production databases

Scoped, read-only-by-default access with the tenant boundary enforced in the database. The model sees the rows its caller is allowed to see and no others.

Schema changes, deletes, bulk updates

CRM, billing and support tools

Salesforce, HubSpot, Stripe, Zendesk. Records read freely; anything that touches a customer or a charge is proposed and confirmed.

Sending, charging, refunding, closing

Documents and object storage

Retrieval over the files a team actually works from, with permissions inherited from the store rather than reimplemented in the agent.

Publishing, sharing, deleting

Legacy and SOAP systems

The thirty-year-old system nobody wants to touch, wrapped once behind a modern contract so every future agent talks to it the same way.

Writes, until the wrapper has earned trust
Something stranger? Tell us what it connects to
04The build

How an MCP server actually gets built.

  1. 01Scope the surfaceWhich operations, and which stay human

    Most of the value of an MCP build is decided here. A server with six well-chosen tools beats one with forty, because every extra tool is another thing the model can pick wrongly under pressure.

  2. 02Design the tool contractsNames, schemas, and what an error says

    Tool descriptions are prompt surface: the model chooses from them. Vague names produce wrong calls. Errors get written for a reader who has to recover, not for a log file.

  3. 03Auth and scopingWho is asking, and what they may see

    The caller's identity carries through to the query. On FlyCRM that meant row-level security doing the enforcing — 236 policies across 58 tables — rather than the agent being asked to behave.

  4. 04The write boundaryPropose, confirm, then commit

    Reads can be direct. Writes are proposed by the model and committed by an authenticated session. This is what let that build finish with zero records written by a model.

  5. 05Transport and deploymentstdio, HTTP, or a remote server

    Local stdio for a developer tool, a remote HTTP server with OAuth for anything a team shares. The choice changes the auth story completely, so it is made early rather than discovered.

  6. 06Tests and observabilityProof it still works next month

    Tool-level tests, plus logging of every call and its result. An agent nobody can audit is an agent nobody will be allowed to keep.

05Why MCP

Why We Build on MCP

Three reasons, each one a thing we would otherwise be rebuilding per product.

01

One integration, every client

12 tools, reused

A server built once is available to Claude Desktop, Claude Code, your own app and whatever ships next year. The alternative is rewriting the same integration per surface.

02

The boundary is enforceable

0 model writes

MCP gives you a place to put the rule. Tools are named operations with schemas, so "the model may read this and propose that" becomes code rather than a paragraph of instructions.

03

It composes

14 agents

Several servers behind one orchestrator is the normal shape once a system does more than one job — and it stays legible, because each server owns its own systems.

Frequently Asked Questions.

What is an MCP server, in plain terms?

MCP — the Model Context Protocol — is an open standard Anthropic released in November 2024 for connecting AI models to real systems. An MCP server is a small service that exposes some of your data and operations as typed tools an AI client can call. Instead of pasting data into a prompt or writing a bespoke integration per product, you describe the operations once and any MCP-capable client can use them.

You can do that, and for one integration in one product it is often the right call. MCP earns its place when the same systems have to be reachable from several clients, when you want the tool contracts described in one place rather than scattered through prompts, or when you need a consistent boundary between what a model may read and what it may change. The protocol is the standardisation, not the capability.

Only if the enforcement lives outside the model. Our default is that reads can be direct and every write is proposed by the model and committed by an authenticated session, with tenant isolation enforced in the database rather than in prompt text. On the FlyCRM build that meant 236 row-level security policies across 58 tables, an agent with twelve typed tools, and zero records written by a model.

A focused server over an existing, well-documented API is usually two to four weeks including auth, tests and deployment. Wrapping a legacy or undocumented system takes longer, and the extra time goes into understanding the system rather than writing protocol code. Multi-server builds with an orchestration layer are scoped as a project rather than a single server.

Yes. Local stdio servers are fine for a single developer's tooling, but anything a team shares needs to be a remote server with real authentication, per-user scoping and audit logging. We decide transport at the start of the build, because it changes the auth design rather than being a deployment detail.

The systems you want reachable, who should be allowed to reach them, and which operations must never happen without a human. That last one is the important answer — it defines the write boundary, and it is faster to agree before the build than to retrofit afterwards.

Idea in your head? Let’s
bring it to life.

Got a project? A wild idea? Or just want to say hey?
We're here for all of it — reach out anytime.

I’m looking for a help with:

I’m hoping to stay around of (in USD):