What Is the Model Context Protocol?
In one sentence: the Model Context Protocol (MCP) is an open standard that lets any AI application connect to any external tool or data source through a single, uniform protocol instead of custom, one-off integrations. MCP was created and open-sourced by Anthropic in November 2024. The problem it solves is old and familiar to anyone who has wired systems together: the M×N integration problem. If you have M AI applications and N tools or data sources, naive integration requires M×N bespoke connectors, each with its own auth, schema, and quirks. MCP turns that into M+N — every AI app implements the protocol once as a client, every tool implements it once as a server, and they interoperate. The frequent analogy is apt: MCP is "USB-C for AI applications," one connector standard replacing a drawer full of adapters.
Crucially, the official architecture documentation is explicit that MCP "focuses solely on the protocol for context exchange — it does not dictate how AI applications use LLMs or manage the provided context." That separation of concerns is why MCP is model-agnostic: it works with Claude, but also with Gemini, GPT-family models, and open-source LLMs. For a mobile team, that neutrality is a strategic asset — you can standardize your tool layer once and swap models later without rewiring every integration.
Definition box — MCP host, client, and server. A host is the AI application (your app). It creates one client per connection. Each client maintains a dedicated link to one server, which exposes tools, resources, and prompts. "Server" refers to the program that serves context — it can run locally or remotely.
How MCP Became the Standard (2024-2026)
Short answer: MCP went from one company's release to cross-industry infrastructure in roughly a year, and is now governed by a neutral foundation — exactly the stability signal enterprises need before betting a product roadmap on it. The adoption timeline is well documented.
| Date | Milestone |
|---|---|
| November 2024 | Anthropic open-sources MCP |
| March 2025 | OpenAI adopts MCP across its Agents SDK, Responses API, and the ChatGPT desktop app |
| April 2025 | Google DeepMind's Demis Hassabis confirms MCP support in upcoming Gemini models |
| May 19, 2025 | At Microsoft Build, GitHub and Microsoft join MCP's steering committee |
| November 2025 | A major spec update introduces asynchronous operations, statelessness, server identity, and an official community-driven registry |
| December 2025 | Anthropic donates MCP to the Agentic AI Foundation (AAIF) under the Linux Foundation, with OpenAI and Block as co-founders and AWS, Google, Microsoft, Cloudflare, and Bloomberg as supporting members |
By 2026 there are more than 10,000 active public MCP servers, and MCP is embedded in ChatGPT, Cursor, Gemini, Microsoft Copilot, and Visual Studio Code. For a deeper platform-by-platform view of where MCP sits among agent frameworks, see our AI agent development platforms guide. The takeaway for mobile builders: MCP is no longer a bet on a single vendor. Vendor-neutral governance is precisely what de-risks adopting it inside a product you plan to maintain for years.
Inside MCP: Architecture, Layers, and Primitives
MCP is a JSON-RPC 2.0 protocol organized into two layers — a data layer that defines the messages and primitives, and a transport layer that defines how those messages travel. Understanding this split is what lets you reason about mobile correctly. Per the official docs, the data layer covers "the JSON-RPC based protocol for client-server communication, including lifecycle management, and core primitives such as tools, resources, prompts and notifications," while the transport layer covers "the communication mechanisms and channels that enable data exchange... including transport-specific connection establishment, message framing, and authorization." The same JSON-RPC messages flow unchanged across whichever transport you choose — which is why swapping transports for mobile does not change your tool logic.
| Transport | How It Works | Where It Fits |
|---|---|---|
| stdio | Standard input/output streams between local processes on the same machine. No network overhead. | Desktop and server hosts that spawn a local server subprocess. Impractical on iOS. |
| Streamable HTTP | HTTP POST for client-to-server messages, with optional Server-Sent Events for streaming. Supports bearer tokens, API keys, custom headers; OAuth recommended. | The mobile transport — remote servers reachable over normal mobile networking. |
Primitives are the heart of MCP — they define what clients and servers can offer each other. Servers expose three: tools (executable functions the AI can invoke — API calls, database queries, actions — discovered with tools/list and invoked with tools/call), resources (data sources that provide context, such as file contents, records, or API responses), and prompts (reusable templates that structure model interactions). Clients can expose primitives too: sampling (sampling/createMessage) lets a server request an LLM completion from the host so server authors can stay model-independent, and elicitation (elicitation/create) lets a server ask the user for more information or confirm an action — on mobile, this maps naturally to a native confirmation sheet. A cross-cutting utility, Tasks (experimental), wraps long-running requests for deferred retrieval and status tracking — important on mobile, where you cannot hold a socket open while the user backgrounds the app.
A Tool Call on the Wire
A classic MCP session (spec revision 2025-06-18 and 2025-11-25) opens with a capability-negotiation handshake, then discovers and calls tools. The client sends {"method": "tools/call", "params": {"name": "weather_current", "arguments": {"location": "Los Angeles"}}} and the server responds with a structured content array — for example {"content": [{"type": "text", "text": "74°F, sunny."}]}. Servers can also emit notifications (JSON-RPC messages with no id, no response expected) — for example notifications/tools/list_changed when their toolset changes, prompting the client to re-list. Keep this in mind for mobile UX: your tool palette can change mid-session, so drive it from live discovery rather than hard-coding it.
Why Mobile Is Different: The Sandbox and Transport Reality
The core constraint: the desktop MCP mental model — "spawn a local server as a subprocess and talk to it over stdio" — does not translate to phones. On iOS, the app sandbox does not permit an app to fork and exec arbitrary local server processes, and there is no general-purpose local process manager for third-party MCP servers. Android is more permissive but still not built around long-lived arbitrary subprocesses for this purpose.
On mobile, MCP servers are remote, and the transport is Streamable HTTP. The "local stdio server" pattern from Claude Desktop and VS Code is a desktop convenience you should not try to reproduce on a phone.
"MCP for mobile" also gets confused across three genuinely different meanings, and getting this wrong sends teams down the wrong path: (1) MCP inside your app, where your iOS or Android app is itself an MCP host/client and its embedded AI agent uses MCP servers for tools and data — this guide's primary focus; (2) MCP for mobile test automation, where servers like the open-source mobile-mcp let an agent such as Claude Code drive simulators and real devices for QA and scraping — a developer-workflow tool, not an in-app feature; and (3) the server-side MCP connector, where the Claude API's mcp_servers parameter connects to remote servers from Anthropic's cloud so your app never implements a client. Meanings 1 and 3 serve the same product goal; meaning 2 just shares the acronym.
- Network is unreliable and expensive: Connections drop in elevators and tunnels; users pay for cellular data and battery. Long-lived SSE streams are costly to hold open, which is why the 2026 move toward statelessness is a gift to mobile.
- Secrets cannot live in the binary: Anything shipped in an app can be extracted. API keys and long-lived credentials for MCP servers must not be embedded client-side — they belong on a backend or behind OAuth.
- Background execution is limited: iOS suspends apps aggressively. A multi-step agent loop cannot assume it will keep running while backgrounded, which favors server-side orchestration or the Tasks pattern for long-running work.
- Latency compounds: Each tool round-trip is a network hop; on mobile you feel every one. Favor servers that batch, cache (the new ttlMs/cacheScope fields help), and return compact results.
None of this makes MCP unsuitable for mobile — it makes a naive port unsuitable. The four architecture patterns below turn these constraints into a clean design.
Four Architecture Patterns for MCP in Mobile Apps
Answer first: there are four viable patterns, and they are composable. Most teams should start with Pattern A or C and reach for B only when they need on-device control.
- 1.Pattern A — API-managed connector (thin client): Your app calls the Claude Messages API and passes remote MCP servers via the mcp_servers parameter. Anthropic's cloud connects to the servers, discovers tools, and runs the tool loop. Your app implements no MCP client. Simplest to ship; credentials and server URLs stay in your API configuration, not the binary. Best for the majority of consumer and prosumer apps.
- 2.Pattern B — On-device native MCP client: Your app embeds the official Swift or Kotlin SDK as an MCP client and connects directly to remote Streamable HTTP servers, running its own agent loop against an LLM. Maximum control and lowest per-request cloud dependency, but you own auth, token storage, retries, and the agent loop. Best when you need device-local tools, custom UX over the loop, or multi-model flexibility on device.
- 3.Pattern C — Backend-for-frontend (BFF) host: Your own backend is the MCP host: it runs the agent loop and MCP clients, holds all credentials, enforces policy, and exposes a thin streaming API (WebSocket/SSE/REST) to the app. The phone is a UI. This is the enterprise default — centralized auth, audit logging, and secret management, with the app kept simple.
- 4.Pattern D — In-process device-tool bridge: Your app exposes device capabilities (camera, location, HealthKit, on-device files) to the agent as tools, wired in-process rather than via a spawned server. This is how you give an agent access to things only the phone has. It is often combined with A, B, or C. Respect platform permission prompts and never expose a sensitive capability as a silently-callable tool.
| Criterion | A · Connector | B · On-device client | C · BFF host | D · Device bridge |
|---|---|---|---|---|
| Time to ship | Fastest | Medium | Medium | Add-on |
| Secrets off device | Yes | Hard | Yes | N/A |
| Works offline / on-device tools | No | Partial | No | Yes |
| Control over agent loop | Low | High | High | N/A |
| Model flexibility | Claude-centric | Any | Any | Any |
| Best for | Most apps | Power/agent apps | Enterprise | Device features |
A common production shape combines two patterns: C + D, a backend host for remote tools and identity, plus an in-process bridge for device capabilities the server can request via elicitation. This composability is what makes the framework flexible enough for both a consumer app and an enterprise app built on the same underlying protocol.
Implementing MCP on iOS with Swift and Android with Kotlin
Answer first: use the official Swift SDK for Pattern B on iOS, and the HTTPClientTransport (Streamable HTTP) — not stdio — to reach remote servers. The SDK, hosted under the modelcontextprotocol GitHub organization, implements the 2025-11-25 spec and supports iOS 16+, macOS 13+, watchOS 9+, tvOS 16+, and visionOS 1+ — the same reach an iOS team in Los Angeles or a Swift shop in Geneva already targets. Add it with Swift Package Manager (.package(url: "https://github.com/modelcontextprotocol/swift-sdk.git", from: "0.11.0")), then create a client and connect over Streamable HTTP:
Swift: Connect and Call a Tool
import MCP
let transport = HTTPClientTransport(endpoint: URL(string: "https://tools.example.com/mcp")!, streaming: true)
let client = Client(name: "FrenchyDigitalApp", version: "1.0.0")
try await client.connect(transport: transport)
let tools = try await client.listTools()
let result = try await client.callTool(name: "search_orders", arguments: ["query": "open invoices"])
The SDK ships six transports — StdioTransport, HTTPClientTransport (Streamable HTTP + SSE), StatelessHTTPServerTransport, StatefulHTTPServerTransport, InMemoryTransport, and NetworkTransport (Apple's Network framework). For an app acting as a client, HTTPClientTransport is the one you want; InMemoryTransport is useful for unit tests and for a Pattern-D in-process bridge that exposes device capabilities like a HealthKit step count as a tool. iOS security note: store OAuth tokens in the Keychain, never in UserDefaults. Gate sensitive device tools (camera, location, health) behind the system permission prompts and an explicit MCP elicitation/confirmation step, and treat every tool result as untrusted input to the model.
On Android, use the official Kotlin SDK, maintained in collaboration with JetBrains. It is Kotlin Multiplatform — targeting JVM, Android, Native, JS, and Wasm from one codebase — with first-class coroutines and kotlinx.serialization, and it is published on Maven Central. The Kotlin SDK supports stdio, SSE, Streamable HTTP, and WebSocket transports; on Android, use Streamable HTTP (or WebSocket) to reach remote servers, with coroutines and Flow making streaming results idiomatic:
Kotlin: Connect and Call a Tool
val client = Client(clientInfo = Implementation(name = "FrenchyApp", version = "1.0.0"))
val transport = StreamableHttpClientTransport(url = "https://tools.example.com/mcp")
client.connect(transport)
val tools = client.listTools()
val result = client.callTool(name = "search_orders", arguments = mapOf("query" to "open invoices"))
Because it is Kotlin Multiplatform, the same MCP client logic can be shared between an Android app and a Compose Multiplatform or server target — a real advantage if you also run a Pattern-C backend in Kotlin. Android security note: persist tokens with the Android Keystore / EncryptedSharedPreferences, not plain preferences. Use certificate pinning for your MCP/host endpoints, and require biometric confirmation for high-impact tools. For cross-platform teams, React Native, Flutter, and Expo apps almost always reach MCP through a backend-for-frontend (Pattern C) or the Claude API connector (Pattern A) rather than a native client — run the MCP host on your server with the mature TypeScript or Python SDK and expose a streaming endpoint the app consumes, or wrap the native Swift/Kotlin SDK in a native module only when you specifically need on-device tools. See our React Native vs. native development guide for the broader tradeoffs on AI-heavy apps.
The Claude API MCP Connector: The Thin-Client Pattern
Answer first: the MCP connector lets you attach remote MCP servers directly to a Claude Messages API call. Anthropic's cloud connects to the servers and handles tool discovery and calling — your mobile app needs no MCP client of its own. Conceptually, you add an mcp_servers array to the request, each entry specifying a type, name, URL, and an OAuth-obtained authorization_token injected server-side. This is illustrative rather than exhaustive — the connector is in beta and its exact shape is evolving, so consult the current docs before shipping.
- Servers must support Streamable HTTP / SSE and be internet-reachable by Anthropic's infrastructure.
- You can allowlist or denylist specific tools and configure them per-tool — essential for limiting blast radius.
- OAuth is supported for server auth; the connector is a beta feature and its exact headers and tool-configuration shape have changed across revisions (a newer beta moves tool configuration into MCPToolset objects in the request's tools array). Pin to the documented beta header and test on upgrade.
- Because Anthropic connects from its cloud, the same custom connector works across Claude clients — including the Claude mobile apps — not just your API calls.
For most mobile products, this is the fastest safe path to shipping MCP-powered features: no on-device client, no embedded secrets, and a small, well-understood API surface.
Security and Governance for Mobile MCP
Answer first: the biggest MCP risks are not novel cryptography failures — they are prompt injection, tool poisoning, and confused-deputy authorization mistakes. On mobile you add token-storage and permission concerns on top. Treat every server and every tool result as untrusted. Prompt injection is ranked #1 in the OWASP Top 10 for LLM Applications — anything the model reads can carry instructions. Tool poisoning is indirect prompt injection through a tool's metadata or schema: a malicious server embeds instructions in a tool description (reviewed once, at connect time) or in a tool response (unvalidated at runtime) to hijack the agent. Confused deputy lives in the MCP server: it holds credentials for upstream systems and acts on behalf of the LLM client, and if user identity is not propagated to upstream calls, authorization decisions get made against the wrong principal — the server, not the user.
- Keep credentials off the device. Prefer Pattern A or C. If you must hold tokens on-device (Pattern B), use Keychain (iOS) or Keystore/EncryptedSharedPreferences (Android).
- Follow OAuth 2.1 / RFC 9700. Enforce token audience validation, reject token passthrough, use exact redirect-URI matching, validate the OAuth state on every callback, and require per-client consent.
- Allowlist servers and tools. Do not let an agent connect to arbitrary servers. Pin the set of servers, and allow or deny individual tools.
- Human-in-the-loop for sensitive actions. Use MCP elicitation to surface a native confirmation sheet before any tool that spends money, sends messages, or mutates data.
- Validate tool output. Treat responses as untrusted content, not trusted instructions, and constrain what tool results can trigger.
- Propagate user identity upstream so authorization is evaluated against the real user, defeating confused-deputy escalation.
- Pin certificates and log tool calls for audit, especially in regulated, enterprise contexts.
The 2026-07-28 revision explicitly hardens this area, aligning authorization more tightly with OAuth 2.0 / OpenID Connect, including issuer (iss) validation and application-type declaration — covered next.
What the 2026-07-28 Spec Changes for Mobile
Answer first: the 2026-07-28 revision (release candidate locked May 21, 2026; final published July 28, 2026) makes MCP stateless at the protocol core — and that is unusually good news for mobile. The headline change removes protocol-level session management: the initialize/initialized handshake and the Mcp-Session-Id header are gone, enabling a single self-contained request that any server instance can handle. For a phone on a flaky network, that means no sticky sessions to lose when the connection drops and reconnects to a different server instance — fewer failure modes, easier retries, and cheaper reconnection.
| Change (SEP) | What It Is | Why Mobile Cares |
|---|---|---|
| Stateless core | No handshake, no session IDs | Resilient to drops; horizontal scaling; simpler retries |
| Caching — ttlMs/cacheScope (SEP-2549) | List/read results declare freshness and shareability | Fewer redundant round-trips; less data and battery use |
| Routing headers — Mcp-Method/Mcp-Name (SEP-2243) | Gateways route without reading the body | Better rate-limiting and edge routing for mobile fleets |
| Tasks extension (SEP-2663) | Stateless durable execution via handles | Long-running work survives app backgrounding |
| MCP Apps (SEP-1865) | Server-rendered HTML UIs in sandboxed iframes | Portable tool UIs, though native mobile UI is still preferred |
| Authorization hardening (6 SEPs) | OAuth 2.0 / OIDC alignment, iss validation | Stronger on-device auth story |
| Deprecation policy (SEP-2577) | Formal 12-month windows | Predictable upgrades for shipped apps |
Caveat: the revision contains breaking changes. Roots, Sampling, and Logging are deprecated but remain functional for 12 months under the new policy, and anyone who built against the experimental 2025-11-25 Tasks API must migrate. Pin your SDK and target spec revision explicitly, and plan an upgrade window. The strategic constant underneath all of this is neutrality — with OpenAI, Google, Microsoft, AWS, Cloudflare, Block, and Bloomberg all invested through the Agentic AI Foundation, MCP is as close to a safe, durable standard as this fast-moving field offers, and building your mobile tool layer on it is a defensible bet for a multi-year roadmap.
Why Frenchy Digital for MCP-Powered Mobile Apps
Frenchy Digital designs and ships MCP-powered agent features across native iOS (Swift), Android (Kotlin), and React Native, with the security architecture to match. That means picking the right combination of the four patterns above for your product — a thin Claude API connector for a consumer app that needs to move fast, a backend-for-frontend host for an enterprise app that needs centralized auth and audit logging, or an in-process device-tool bridge when an agent genuinely needs camera, location, or health data — rather than defaulting to whichever pattern is flashiest. We also apply the security checklist above by default: OAuth 2.1 token handling in Keychain or Keystore, server and tool allowlists, and human confirmation gates for any tool that spends money or mutates data.
Frenchy Digital is headquartered in Los Angeles, with international teams in Geneva, Switzerland and Paris, France, giving mobile and AI projects coverage across US and European working hours when an integration needs to move quickly. Whether you're evaluating React Native vs. native for an AI-heavy build, adding agent features to an existing custom mobile app, or scoping a brand-new MVP with MCP tools from day one, the same team that ships these architectures reviews yours before you commit engineering time to the wrong pattern.
Frenchy Digital MCP & Mobile AI Capabilities
- MCP architecture review: pick the right pattern (connector, on-device client, BFF host, or device bridge) for your product, team, and risk profile.
- Native iOS (Swift) and Android (Kotlin) MCP client implementation, including Keychain/Keystore token handling and elicitation-gated confirmations.
- Backend-for-frontend MCP hosts for enterprise apps needing centralized auth, audit logging, and secret management.
- Claude API MCP connector integration for the fastest, lowest-risk path to shipping AI agent tools in a mobile app.
- Security hardening: OAuth 2.1 / RFC 9700 flows, server and tool allowlists, tool-output validation, and confused-deputy defenses.
Ready to add real AI agent capabilities to your iOS or Android app? Schedule your free discovery call and find out which MCP architecture pattern actually fits your product, your timeline, and your security requirements.
Ready to Ship MCP-Powered Agent Features?
Get an architecture review in days, not weeks — so you know exactly which MCP pattern fits your app, your team, and your security requirements.
1517 S Bentley Ave Unit 204, Los Angeles CA 90025
Frequently Asked Questions
Sources & References
- 1Anthropic — Introducing the Model Context Protocol↗
- 2MCP Official Architecture Documentation↗
- 3Anthropic — Donating MCP to the Agentic AI Foundation↗
- 4MCP Swift SDK (GitHub)↗
- 5MCP Kotlin SDK (GitHub)↗
- 6Claude API — MCP Connector Docs↗
- 7OWASP Top 10 for LLM Applications↗
- 8IETF RFC 9700 — OAuth 2.0 Security Best Current Practice↗

