How to turn your API into an MCP server today?
Wrap each of your API’s routes as a tool, put it online where AI assistants like Claude can reach it, and check on every call who is calling and what they may do.
The wrapping is the quick part. Sign-in, permissions and keeping it online are what take weeks. Here’s why, and the easy way to solve it.
Skip to the one-command wayWriting it is the small part. Running it is the rest.
Once your MCP server is on the internet, anyone can call it, at any hour, as often as they like. It needs every layer below to stay safe, and each one keeps needing attention after launch.
What people see
What it takes, under the water
- Speak the MCP protocolYou · 3–5 days
- Turn your routes into toolsYou · 2–4 days
- Authentication that AI clients acceptYou · 1–3 weeks
- Authorization on every tool callYou · 1–2 weeks
- Limits for assistants stuck in a loopYou · 1–2 days
- A record of every callYou · 1–2 days
- Versions and rollbackYou · 2–3 days
- Scaling for traffic spikesYou · 1–2 days
- HTTPS and a domainYou · 2–4 hours
- Servers to run it onYou · 1–2 days
- Your APIalready yours
- Your backendalready yours
Times are rough estimates for one experienced developer, including testing. They cover building it once; patching, scaling and watching it afterwards is ongoing work on top.
Two of those layers decide whether it’s safe or a risk
Authentication asks who are you? It proves a call really comes from Ana. Authorization asks are you allowed? Ana may cancel her own reservation, but not Ben’s. Without the first, anyone who finds your server can use it. Without the second, every signed-in user, and their assistant, can do anything.
Authentication
Who is calling?
Every call has to prove whose it is, in the way AI clients like Claude expect.
Without it
Someone who found the address
tools/call list_reservations
Every customer’s reservations, handed to a stranger.
What it takes to build
- A 401 that points clients to your sign-in
- Discovery documents and client registration
- OAuth sign-in with PKCE, and refresh tokens
- A check on every token: genuine, unexpired, meant for your server
Authorization
What may they do?
A signed-in assistant acts for its user and tries whatever it is asked, even things the user may not do.
Without it
Ben, signed in, via Claude
tools/call cancel_reservation #42
Done. Ben cancelled Ana’s reservation.
What it takes to build
- Roles: managers change any reservation, waiters only view
- Records: customers touch only their own
- A check before every tool call, not after
- The same rules for a person and their assistant
Skip those layers, and this is a normal morning
Most hosting puts your server online and stops there. With nothing checking who calls, what they may do or how often, strangers get in, a signed-in user cancels someone else’s reservation, and a looping agent crowds out your real users.
One morning, hosted bare
5 calls. 5 problems.
- A stranger cancelled a real reservation
- Every customer’s reservations got out
- One looping agent took the server down
- Ben, signed in, cancelled Ana’s reservation
- Ana, a real user, was locked out
And no record of any of it.
- 09:14 Unknown callercancel_reservationno authenticationDone. A stranger cancelled a reservation.
- 09:15 Unknown callerlist_reservationsno authenticationEvery customer’s reservations, handed over.
- 09:20 Agent in a looplist_reservations ×1,200no limitsServer overwhelmed.
- 09:26 Ben, via Claudecancel_reservation #42no authorizationDone. Ben cancelled Ana’s reservation.
- 09:31 Ana, via Claudelist_reservationsTimed out. Ana can’t get in.
Put your MCP server online with one command
APIblaze runs every layer of that stack for you. Point it at your API:
Put an MCP server online
$ npx apiblaze@latest create --target https://ninopizzas.com/openapi.yamlPaste it in a terminal. No sign-up, no servers. The link is a sample restaurant API; swap in your own API’s address. It prints the MCP address to paste into Claude.
APIblaze is an API proxy: every request passes through it first
It sits between AI assistants and your API. Claude, Cursor or an agent calls APIblaze, and APIblaze passes on only the calls that are allowed, as ordinary requests to your API.
Callers
- Ana, via Claudeasks to list her reservations
- Unknown callerasks to cancel a reservation
- Ben, via Claudeasks to cancel Ana’s reservation
- An agent in a loopasks to list reservations ×1,200
APIblaze
The API proxy
Speaks MCP to the assistant, checks who is calling (authentication), what they may do (authorization) and how often, then makes one ordinary call to your API.
Your API
Only sees the calls APIblaze lets through.
Never reached your code.
That’s why it can stand in for the whole stack. Every assistant has to come through it, so it’s the one place to speak MCP, check who is calling and what they may do, apply limits and keep a record, while your API stays exactly as it is.
The same morning, on APIblaze
5 calls. All handled.
- Both strangers were asked to sign in
- The looping agent was slowed to 10 a second
- Ben was refused Ana’s reservation
- Ana got her 2 reservations
- None of the refused calls reached your API
And every call is on record.
- 09:14 Unknown callercancel_reservationauthentication401 · sign in first
- 09:15 Unknown callerlist_reservationsauthentication401 · sign in first
- 09:20 Agent in a looplist_reservations ×1,200limits429 · slowed to 10 a second
- 09:26 Ben, via Claudecancel_reservation #42authorization403 · not his reservation
- 09:31 Ana, via Claudelist_reservations200 · her 2 reservations
Your API as an MCP server, step by step
- 1
Start from wherever your API is
APIblaze runs the MCP server; your API stays where it is. Pick the one that matches yours.
Your API is deployed somewhere. Point APIblaze at its address or its OpenAPI description.
$ npx apiblaze@latest create --target https://ninopizzas.com/openapi.yamlPrints an MCP address to paste into Claude, Cursor or Codex.
- 2
Paste the address into Claude
The command prints an MCP address. Add it in Claude as a custom connector, or in Cursor or Codex. People sign in the first time they use it, with GitHub or with your own login such as Google, Microsoft or Auth0, and every call after that is theirs.
- 3
Decide what each person may do
Write a rule in plain English. APIblaze turns it into a check on every tool call, and saves it in watch-only mode first, so you see what it would block before it blocks anything.
$ npx apiblaze@latest rule myapi "Customers can only cancel their own reservations"Rules can follow roles or records. Roles and groups · Per-record access
- 4
Every call goes through the same checks
Ana asks Claude for her reservations at a restaurant whose API runs on APIblaze.
Ana asks Claude: “show my reservations”
- tools/call list_reservationsfrom Claude, for Ana
- Signed in · authenticationAna, through GitHub
- Allowed · authorizationcustomers see their own reservations
- Under the limitwell inside 10 a second
- Your APIone ordinary GET /reservations
- Answeredher 2 reservations, back to Claude
- Loggedwho, what, the answer, how long
Authentication, authorization and limits run in APIblaze
On Cloudflare’s network, close to whoever is calling. Your API only sees requests that passed.
Your API gets one ordinary request
No MCP code in it, no session handling, no token checks. It answers the way it always has.
Every call leaves a record
Who asked, for what, the answer and how long it took, ready when something looks wrong.
- 5
Every assistant connects, whatever MCP version it speaks
MCP has been updated four times since late 2024, and each assistant speaks the version it was built for. APIblaze speaks all of them, so Claude, Cursor, Codex and the rest all connect.
- 2024-11-05the first
- 2025-03-26supported
- 2025-06-18supported
- 2025-11-25supported
- 2026-07-28latest
Connects withClaudeCursorCodexAny MCP client
Common questions
How do I host a remote MCP server without running infrastructure?
Put APIblaze in front of your API. One command gives you a live MCP address on Cloudflare’s global network, with authentication, authorization, limits and logs built in, and no servers, containers or certificates for you to manage.
What is a remote MCP server?
An MCP server that AI assistants reach over the internet by its address, instead of one that runs on the same computer as the assistant. Claude’s custom connectors, for example, connect to remote servers.
What is an API proxy?
A service that sits in front of your API. Every request goes through it first, so it can check who is calling and what they may do before your code runs. APIblaze is an API proxy that also speaks MCP.
How do people sign in to my MCP server?
With OAuth, the way MCP clients like Claude expect. The first time someone uses your server, a sign-in page opens. APIblaze hosts GitHub sign-in out of the box, or uses your own login, such as Google, Microsoft, Auth0 or any OpenID Connect provider.
Can I control what each person’s assistant may do?
Yes. Write rules in plain English, by role (managers, waiters) or by record (only their own reservations). Every tool call is checked before it reaches your API, and an assistant gets the same answer as the person it acts for.
Do I still need to host my API?
Yes. APIblaze runs the MCP server and everything in front of your API, not the API itself, which can live anywhere with an address: a cloud function, a container or a service you already run. While you build, the dev command serves it straight from your laptop.
Which AI clients can connect?
Any MCP client, including Claude, Cursor and Codex. APIblaze speaks every MCP version from 2024-11-05 to today’s, so a client pinned to an older version still connects.
Can I use my own domain?
Yes. Keep the address APIblaze gives you, or bring your own domain: APIblaze shows the DNS records to set and manages the certificates.
What does it cost?
There is no subscription and no monthly minimum. You pay per request from prepaid credits, with sign-in and permissions included in the price.
Prices are on the pricing page.
Put your MCP server online today
One command, no sign-up, nothing to keep running.
$ npx apiblaze@latest create --target https://ninopizzas.com/openapi.yaml