Skip to content

MCP vs. REST API

A comparison of the two integration patterns used in this lab. The prepared quality MCP server calls the Webex REST API behind the scenes.

Definitions

Term Definition
REST API A conventional HTTP interface. You call a URL with a method, headers, and parameters, and get JSON back. Designed for developers writing code.
MCP Model Context Protocol. An open standard that lets an AI agent discover and call tools at runtime, without those tools being hardcoded into the agent. Designed for models.
MCP server A process that exposes one or more tools over MCP. It may wrap a REST API, a database, a filesystem, or anything else.
MCP client The component inside your AI application that connects to MCP servers, lists their tools, and invokes them. In this lab, GitHub Copilot Chat in VS Code.
Tool A single callable operation exposed by an MCP server, with a name, a description, and a typed input schema the model can read.

Side-by-side

REST API MCP
Primary consumer A developer writing code An AI agent at runtime
Discovery Read the docs, then hardcode the call Agent asks the server "what tools do you have?"
Schema Described in docs or OpenAPI, enforced by your code Sent to the model as part of the tool definition
Auth Your code holds and sends the credential Server holds the credential; the agent never sees it
Adding a capability Write new code, redeploy the app Enable a tool; the agent discovers it on reconnect
Governance Enforced in your application logic Enforced at the server and, for Cisco servers, in Control Hub
Shape of output Whatever the API returns Whatever the tool author chooses to normalize and return

How they relate in this lab

flowchart LR
    A["AI agent<br/>(MCP client)"] -- "MCP<br/>get_meeting_qualities()" --> B["Custom MCP server<br/>src/quality-tool/server.py"]
    B -- "HTTPS REST<br/>GET /v1/meeting/qualities" --> C["Webex Analytics API"]

The same component is an MCP server on its left edge and a REST client on its right edge. That translation layer is where you add the value:

The raw REST API gives you Your MCP server adds
A verbose, deeply nested response A normalized, flattened shape the model can reason over
Empty arrays and undocumented -1 sentinels Explicit data_gaps entries so the agent cannot mistake "not measured" for "measured as zero"
Raw HTTP status codes Plain-language error strings the agent can act on
A credential you must handle A credential that never leaves the server
Every field the API supports Only the fields the workflow needs, reducing tokens and accidental data exposure

The three servers in this lab

Server Who hosts it Who governs it You write code?
Webex Meetings MCP Cisco Control Hub No
Webex Messaging MCP Cisco Control Hub No
Meeting Qualities MCP VS Code in your prepared pod Your pod credential and local process No in this lab - inspect quality-tool/server.py

Why this matters operationally

Control Hub can only govern the official Cisco servers. Your custom MCP server is governed by you — its scope, its credential, and its read-only behavior are your responsibility. That is the tradeoff for being able to wrap any API you like.

When to build a custom MCP server

Build one when:

  • The capability you need is not exposed by an official MCP server (as with meeting-quality telemetry here).
  • You want to normalize, filter, or redact a response before a model ever sees it.
  • You need the credential to stay server-side.
  • You want to constrain a broad API down to one narrow, read-only operation.

Do not build one when an official, governed server already does the job — you would be taking on hosting, credential rotation, and governance for no gain.

Next: how the client reaches the server

This page covers what an MCP server wraps. MCP Transports covers how your agent connects to one — stdio versus Streamable HTTP, and why this lab uses both.