What an MCP client, an MCP server and an MCP endpoint are
Client, server and endpoint get used as if they were interchangeable. In the Model Context Protocol (MCP) they are three different pieces. The client is the piece inside your AI application that holds a connection to one server. The server is the program that offers tools, data and prompt templates over that connection. The endpoint is the URL a remote server answers on. The rest of this page is detail on those three sentences, with OBTO's own endpoint as the worked example.
The MCP client
The specification calls the AI application the host: Claude Desktop, Claude Code, ChatGPT, Cursor, VS Code. The host creates one MCP client per server it connects to, and each client keeps a dedicated connection to its server. When Claude Desktop is connected to a filesystem server and to OBTO, it is running two MCP clients. You never install a client on its own; it ships inside the app. What you configure is the list of servers the host should open clients for.
The MCP server
An MCP server is a program that provides context to clients, wherever it runs. It exposes three kinds of things: tools the model can call, resources the model can read, and prompts the host can offer the user. A local server runs on your machine and talks over standard input and output; the filesystem server is the usual example. A remote server runs elsewhere and talks over HTTP, so many clients can share it. The messages are JSON-RPC 2.0 either way. The plain-English guide to MCP servers goes further on the three primitives.
The MCP endpoint
"Endpoint" is not a term the specification defines. In practice it means the URL of a remote MCP server, the thing you paste into a connector dialog. OBTO's is https://app.obto.co/ms/mcp. The client sends HTTP POST requests to it, each carrying one JSON-RPC message, and the server answers in the response body or over a server-sent event stream. One URL, one server, as many clients as sign in.
Three messages happen on every new connection.
- Hello. The client announces the protocol version it speaks and what it can do. Servers on protocol revisions up to 2025-11-25 receive this as an
initializerequest and answer with their name and capabilities; the client then sends aninitializednotification. From the 2026-07-28 revision the same facts ride on every request, and a client may askserver/discoverup front instead. Most servers in use today, OBTO's included, answerinitialize. - What have you got. The client sends
tools/listand receives every tool's name, description and input schema. This list is what the model sees. A tool that is not in it cannot be called. - Do this. When the model picks a tool, the client sends
tools/callwith the tool's name and arguments. The server runs it and returns content, usually text.
Remote endpoints normally require sign-in. The specification uses OAuth 2.1 for HTTP transports: the first request without a token gets a 401 with a pointer to the server's metadata, the client registers or identifies itself, the user approves in a browser, and from then on every request carries a bearer token in the Authorization header.
Worked example: connecting to OBTO
In Claude, ChatGPT, Claude Code or Cursor, add a connector, paste https://app.obto.co/ms/mcp, choose OAuth, and sign in with Google when asked. That sign-in is the OAuth step above. The first tool worth calling is obto_whoami: it returns who you are, your workspace domain, the server version and the apps you can reach. From there the client has the catalog, and the model can build, read and change an app through tool calls.
The same URL answers on every OBTO cluster, so two connections are told apart by the domain whoami returns, never by the address. A second form of the endpoint, https://app.obto.co/ms/mcp?scope=tenant, serves a connection only the tools, resources and prompts that one tenant has published, plus whoami. It is a smaller catalog for the people who use a tenant's app, and it is a catalog filter rather than an access control: each tool still runs its own checks. Which tools appear in tools/list is the subject of the tool list is the boundary.
Where the MCP documentation lives
OBTO's setup steps per client are on the getting started page, and connecting an MCP server to Claude covers the first failed call. The specification, the SDKs and the reference servers are at modelcontextprotocol.io. The current revision is 2026-07-28, and the SDK a server was built with decides which handshake it answers.