# GPT Mobile: a bring-your-own-key Android chat client for OpenAI, Anthropic, Google, Groq and Ollama

> GPT Mobile is a Kotlin and Jetpack Compose Android app that sends one prompt to several model providers at once using your own API keys. It stores chat history locally, and its optional agent tools add web search and MCP servers with real privacy trade-offs.

**Taewan-P/gpt_mobile** — Chat app for Android that supports answers from multiple LLMs at once. Bring your own API key AI client. Supports OpenAI, Anthropic, Google, and Ollama. Designed with Material3 & Compose.

- Repository: https://github.com/Taewan-P/gpt_mobile
- Stars: 1,240 · Forks: 142
- Language: Kotlin
- License: GPL-3.0
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/taewan-p-gpt-mobile

## The problem GPT Mobile solves, and who it is aimed at

Most mobile chat apps pick one vendor and hide the key behind a subscription. GPT Mobile takes the opposite route. The README describes it as a "Multi-provider AI chat and optional on-device agents for Android" and states that it "Uses official APIs for each platforms". You supply the keys. The app supports OpenAI GPT, Anthropic Claude, Google Gemini, Groq and Ollama, and the README also mentions custom API URLs and custom models. That last point matters more than the provider list: any endpoint speaking the OpenAI-compatible shape can be dropped in.

The target user is someone who already pays for API access and wants to compare answers without opening five browser tabs. The comparison workflow is the product. You write one prompt, several models answer, and you judge which one is worth keeping. A second audience is the self-hosting crowd: Ollama support means a local or LAN model can sit next to a hosted one in the same conversation, and the README notes that requests go only to the selected model providers and assigned tools during chats.

It is not for people who want a free chat app. There is no bundled quota. Your spend is your provider bill, and the app itself only manages the requests.

## How a prompt reaches several providers at once

The README describes the app as "100% Kotlin, Jetpack Compose, Single Activity" following Android's modern app architecture. That single-activity structure is visible in how settings are expressed: the README says the app supports dark mode and system dynamic theming "without Activity restart". Theming changes state inside Compose rather than recreating the activity.

Each provider is configured as a profile. The README says you can customize temperature, top p (nucleus sampling) and the system prompt, and that custom API URLs and custom models are supported. So a profile is not just a key: it is a key plus an endpoint plus generation parameters plus, optionally, a set of tools.

The agent layer arrived later and is opt-in. According to the README, profiles support "Native tool calling with OpenAI, OpenAI-compatible/Groq, Anthropic, and Gemini", plus Firecrawl, Perplexity or Exa for web search and URL reading, and "MCP Streamable HTTP servers with public, bearer, or OAuth authentication". Tool runs are described as supporting parallel runs, persistent traces, cancellation and foreground progress. The README is explicit that "Existing and newly migrated profiles remain chat-only until tools are assigned", so upgrading does not silently give a model the ability to call out to the network.

Storage is local by design. Chat history is "only saved locally", and credentials are encrypted with Android Keystore and excluded from backup and export. That is a clean split: the transcript and the key never leave the device except as part of a request to the provider you selected.

## Installing GPT Mobile and running a first multi-model prompt

The README points to three distribution channels: F-Droid, Google Play, and GitHub Releases. The package name is dev.chungjungsoo.gptmobile, which is what you search for on F-Droid or Play. The README notes that "Cross platform updates are supported" but that GitHub Releases will be the fastest track because the others involve verification, estimating roughly a one week difference. If you want the newest version, take the APK from the releases page.

If you prefer to build from source, the repository is laid out as a Gradle Android project with a gradlew wrapper at the top level, alongside settings.gradle.kts and build.gradle.kts. The README does not document a build or install command, so there is no command from the project's own documentation to copy here; the app directory, the gradle wrapper scripts and the Gradle settings files are what the repository shows you.

Once installed, the first run is about keys. Open the provider settings, pick a provider, and paste the API key you generated with that vendor. The app does not ship keys. Set a model and, if you want, adjust temperature, top p and the system prompt. The README lists these as per-profile settings.

After at least two profiles are configured, send one prompt and select more than one model for it. The point of the app is that both answers appear for the same question. If you want to try a local model, add an Ollama profile pointing at your own server's API URL; the README lists Ollama as a supported platform and custom API URLs as a feature.

Agent tools are a separate step. The README says profiles stay chat-only until tools are assigned, so nothing changes until you open the Tools dialog for a profile and attach a tool.

## Where the local-first design becomes a real constraint

The strongest limitation is stated plainly in the README: "Opening a profile's Tools dialog may contact every saved MCP server for discovery and may include its bearer or OAuth credential." That is a side effect of opening a settings screen, not of sending a message. If you have saved several MCP servers, opening one profile's Tools dialog can reach all of them. On a metered connection or a network you do not control, that is a real consideration, and it is the kind of behaviour that surprises people who assume configuration screens are inert.

The second constraint is the absence of a hosted account. There is no sync service described in the README. Chat history is local only, and credentials are excluded from backup and export. Move to a new phone and you start over unless you have another mechanism. That is the price of the privacy model, and it is a deliberate trade rather than an oversight.

Third, the platform is Android only. The README describes an Android app, the badge says Platform Android, and the distribution channels are Android stores. There is no iOS or desktop client mentioned. Anyone who wants the same transcripts on a laptop is looking at the wrong project.

Finally, the app is a client, not a service. If a provider changes its API or retires a model name, the fix has to come from the app or from you editing the profile. Custom models and custom URLs soften this, but they do not remove the dependency.

## How GPT Mobile differs from a single-vendor client or a local-only runner

The closest comparison in the same space is a local-model Android app such as GPT4All on Android. That approach bundles or downloads a model and runs inference on the device. No API key, no per-token bill, and no network round trip. The cost is model quality and device resources: a phone-sized model is not the same thing as a frontier hosted model, and generation is bounded by the hardware.

GPT Mobile inverts that. It runs no inference locally. It is a client that talks to remote APIs, with Ollama as the escape hatch for pointing at a model server you run yourself, possibly on the same network. So the honest split is this: choose a local runner when you want offline operation and zero marginal cost; choose GPT Mobile when you want the strongest available models and are willing to pay per token and send prompts to a vendor.

Against a single-vendor official app, the difference is breadth. One key, one model family, one vendor's UI. GPT Mobile puts several vendors in one conversation and lets you set temperature, top p and system prompt per profile. The trade is that you manage keys, billing and model names yourself, and there is no support relationship with the model vendor through this app.

The agent feature is the third axis. Native tool calling, web search through Firecrawl, Perplexity or Exa, and MCP servers over Streamable HTTP are capabilities a plain chat client does not have. They are also the parts with the sharpest privacy edges, which is why the README keeps them opt-in and documents them separately.

## Maintenance, licence and what an upgrade actually costs

The project is not archived, and the last push was on 2026-09-10. Releases are frequent: v0.9.0 on 2026-09-09, v0.8.0 on 2026-08-18, and v0.7.6 on 2026-06-18. v0.8.0 is the release that introduced the agent tools, and the repository carries docs/agent-tools.md and docs/release-notes-v0.8.0.md for that work.

The upgrade cost is mostly configuration review. The README states that existing and newly migrated profiles remain chat-only until tools are assigned, so the migration itself does not grant new network access. What you should re-read after an upgrade is the Tools dialog behaviour, because that is where credentials can be sent during discovery. If you never assign tools, that path stays closed.

There is also a channel cost. Because F-Droid and Play involve verification, the README estimates roughly a week of lag behind GitHub Releases. If you install from a store, you are running an older build than the one on the releases page, and version-specific documentation such as the 0.8.0 release notes may describe behaviour you do not have yet.

The licence is GPL-3.0, stated in the repository and referenced by the README's licence section. For anyone forking or redistributing, that is a copyleft licence with source disclosure obligations on distributed derivative works. This is a description of the licence identifier, not legal advice; read LICENSE and take your own counsel if you plan to ship a modified build.

One practical note on the repository: it contains AGENTS.md, CLAUDE.md and CONTEXT.md at the top level, alongside docs/ and model_catalog.json. Those are working files for the project's own development workflow, not user documentation.

## Conclusion

Adopt GPT Mobile if you already hold API keys, want several models answering the same prompt side by side, and accept that credentials live on the device rather than behind an account. Skip it if you need a hosted service, an iOS build, or a chat client that works without your own keys. Before installing, read docs/agent-tools.md and check the permission and credential wording for the Tools dialog, since opening a profile's Tools dialog can contact every saved MCP server and may send its bearer or OAuth credential. Then confirm on the releases page which version you are installing, because GitHub Releases ships ahead of the store listings.

## FAQ

### How do I install GPT Mobile on Android?

The README lists three channels: F-Droid, Google Play and GitHub Releases, under the package name dev.chungjungsoo.gptmobile. GitHub Releases is described as the fastest track because the store listings involve a verification step, with roughly a one week difference.

### Is GPT Mobile free?

The app itself is distributed through F-Droid, Google Play and GitHub Releases, but it does not include any model access. You bring your own API keys, so your cost is whatever the providers you configure charge you.

### Can I use GPT Mobile with a local model instead of a cloud API?

Yes. Ollama is listed as a supported platform, and the README says custom API URLs and custom models are supported, so a profile can point at your own server rather than a hosted endpoint.

### Where does GPT Mobile store my chat history and API keys?

The README states that chat history is only saved locally, and that credentials are encrypted with Android Keystore and excluded from backup and export. There is no account or sync service described.

### Does GPT Mobile support MCP servers?

The README says agent tools include MCP Streamable HTTP servers with public, bearer or OAuth authentication. Tools are opt-in: profiles remain chat-only until tools are assigned.

## Sources

- [Issues](https://github.com/Taewan-P/gpt_mobile/issues)
- [License: GPL-3.0](https://github.com/Taewan-P/gpt_mobile/blob/main/LICENSE)
- [README](https://github.com/Taewan-P/gpt_mobile/blob/main/README.md)
- [Releases](https://github.com/Taewan-P/gpt_mobile/releases)
- [Taewan-P/gpt_mobile on GitHub](https://github.com/Taewan-P/gpt_mobile)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/taewan-p-gpt-mobile
