MCP · API Architecture · AI Agents

Stop Rebuilding for AI Integrations: Use Your Existing REST APIs with MCP

The MCP → REST pattern: one protocol-adapter service makes your existing REST microservices AI-accessible — no rebuilding required.

Contents
Contents
  1. TL;DR
  2. The Problem That Started Everything
  3. We’re Solving the Wrong Problem
  4. The Real Comparison
  5. What I Built: The MCP → REST Pattern
  6. Request Flow Example: Real AI in Action
  7. Try It Yourself: Real curl Example
  8. Key Takeaways
  9. Avoid the Rebuild: Leverage What You Already Have
  10. The Bottom Line

A few weeks ago, I shared an insight on LinkedIn that sparked a conversation. I’ve since built a POC to test the feasibility — here’s what I discovered.

TL;DR

  • Make existing REST APIs AI-accessible — no rebuilding required
  • Protocol adapter pattern — one service translates MCP ↔ REST
  • Minimal overhead — standard HTTP
  • Working POC availabletry it here

The Problem That Started Everything

After analyzing the Model Context Protocol (MCP), I had a nagging feeling that we were making AI integration harder than it needed to be. Everyone was talking about building “MCP servers” from scratch, but I kept thinking:

What if MCP servers are just microservices with a protocol wrapper?

So I decided to put the idea to the test. What I built is a working example that brings the concept to life — and it could change the way we think about connecting AI to existing systems.

We’re Solving the Wrong Problem

Everyone was asking: “How do we build MCP servers?”

But the better question is: “How do we make existing systems MCP-compatible?”

The Real Comparison

Without MCP (traditional):

AI Agent → Custom Integration Code → REST API → Tool

With MCP (current approach):

AI Agent → MCP Client → MCP Server → Tool

With MCP → REST pattern (my approach):

AI Agent → MCP Client → MCP Adapter → Existing REST APIs → Existing Microservices

The insight: an MCP server is often just a protocol wrapper around an existing REST-based microservice.

What I Built: The MCP → REST Pattern

Instead of a theoretical discussion, let me show you what happened when I took this seriously.

The MCP Adapter acts as a bidirectional protocol translator that enables seamless communication between AI agents (speaking MCP/JSON-RPC) and your existing microservices (speaking REST/HTTP).

Each process runs independently, communicating through standard HTTP protocols. The adapter translates between MCP and REST without any process coupling.

Request Flow Example: Real AI in Action

User query: “Show me all orders for customer John Doe and their shipping status.”

Step 1: Auto-discovery. The adapter discovers your services and generates tools automatically — zero configuration required.

Step 2: The AI agent’s sequential tool execution:

  1. search_customers(name="John Doe") → MCP Adapter → GET /customers/search?name=John+Doe → Customer Service → customer_id: "cust-456"
  2. get_customer_orders(customer_id="cust-456") → MCP Adapter → GET /orders?customer_id=cust-456 → Order Service → orders: [1001, 1002, 1003]
  3. get_shipping_status(order_ids=[1001,1002,1003]) → MCP Adapter → GET /orders/shipping?ids=1001,1002,1003 → Order Service → shipping: ["shipped","in_transit","processing"]
  4. Final synthesis: “John Doe has 3 orders: Order #1001 shipped, Order #1002 in transit, Order #1003 processing.”

Step 3: The magic — no changes needed. Your existing services handle these requests exactly as they always have. Zero modifications required.

Try It Yourself: Real curl Example

# Call the MCP adapter to list customers
curl -X POST http://localhost:8000/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "customer_list_customers_customers_get",
      "arguments": {}
    }
  }'

Response:

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [{
      "type": "text",
      "text": "[ { \"id\": \"cust-001\", \"name\": \"John Doe\", \"email\": \"john@example.com\", \"status\": \"active\" }, { \"id\": \"cust-002\", \"name\": \"Jane Smith\", \"email\": \"jane@example.com\", \"status\": \"active\" } ]"
    }],
    "isError": false,
    "_meta": { "status_code": 200, "service": "customer" }
  }
}

Behind the scenes: the adapter translated this MCP call to GET /customers on your existing customer service, then wrapped the response in MCP format.

Key Takeaways

The MCP Adapter is a focused, single-purpose component with clearly defined boundaries:

  • Does: protocol translation between MCP and REST
  • Does NOT: business logic, data storage, authentication, service-mesh functions

This focused scope is what makes the pattern so powerful — it does one thing exceptionally well: making existing REST APIs accessible to AI agents.

Avoid the Rebuild: Leverage What You Already Have

Your existing infrastructure provides the foundation:

  • Business logic — already implemented in microservices
  • Security foundation — AuthN/AuthZ systems provide the base
  • Monitoring — observability stack can extend to AI interactions
  • Reliability — services are battle-tested in production
  • Compliance — audit trails and governance frameworks exist

The MCP → REST pattern leverages these proven foundations rather than rebuilding them.

The MCP Adapter is just like any other microservice in your stack — same operational patterns (Docker, Kubernetes), same monitoring tools (Prometheus, Grafana), same scaling strategies, same security models. Your ops team already knows how to manage this.

The Bottom Line

In many cases, MCP servers are just microservices with a schema wrapper. For teams that already have REST APIs, this insight can unlock fast, scalable AI integration with minimal effort.

Of course, this is not a one-size-fits-all solution. Use this pattern where it fits best:

  • ✅ Exposing existing business logic to AI agents
  • ✅ Leveraging proven infrastructure and security
  • ❌ Not ideal for AI-native workflows, real-time streaming, or vector data

When the use case fits, the MCP → REST pattern can replace months of effort with a single, focused translation layer. Explore it, share your feedback, and help evolve the pattern — the code is on GitHub.


Originally published on LinkedIn.

Sources & further reading

Related content