# Connect Your SaaS to ChatGPT and Claude With MCP

> A plain-words guide to MCP for non-technical founders: what it is, how your users connect your app to Claude or ChatGPT, and why sign-in stays safe.

Source: https://boringpush.com/blog/connect-your-saas-to-chatgpt-and-claude-mcp

## Who this is for

You run a SaaS app. You are not an engineer, or you are one who wants the short version.

You have heard that users can "connect an app to ChatGPT or Claude", and you want to know what that means for your product. This post answers that in plain words.

## What MCP is

MCP stands for Model Context Protocol. The [official site](https://modelcontextprotocol.io/) describes it as an open-source standard for connecting AI applications to external systems.

Think of a power socket. Before sockets had a standard shape, every lamp needed its own wiring. MCP is the standard shape for assistants and apps.

If your app offers an MCP address, any assistant that speaks MCP can plug into it. You do not build one version for Claude and another for ChatGPT.

## What the assistant gets

Your app tells the assistant what it can do, as a short list of named tools. Each tool is one action, such as "list my boards" or "add a comment".

BoringPush offers twelve of them:

- **Read:** `whoami`, `billing_status`, `list_boards`, `get_board`, `list_posts`, `get_post`, `list_comments`.
- **Write:** `create_board`, `create_post`, `add_comment`, `vote_post`, `set_post_status`.

The list is fixed. There is no tool that lets the assistant call any address it wants, so it cannot do anything you did not name.

## The address your users need

Every BoringPush app serves its tools at one web address. It is your site, followed by `/api/mcp`.

For example, if your app lives at `https://yourapp.com`, the address is `https://yourapp.com/api/mcp`. That is the only thing a user has to paste.

Under the hood, the app uses a method called Streamable HTTP. You don't need to know more than that, but it matters because it is what Claude expects. Anthropic's [help article](https://support.anthropic.com/en/articles/11503834-building-custom-connectors-via-remote-mcp-servers) says Claude's custom connectors work with remote MCP servers over Streamable HTTP.

## What your user does in Claude

Here are the steps, in the order the user sees them:

1. Open **Settings**, then **Connectors**.
2. Choose **Add custom connector**.
3. Paste your app's `/api/mcp` address.
4. A page from your site opens. They sign in if needed and approve.

That is the whole setup. After it, they can ask Claude about their boards and posts in plain words.

Two caveats from Anthropic's [same article](https://support.anthropic.com/en/articles/11503834-building-custom-connectors-via-remote-mcp-servers). Custom connectors are available on paid plans, and the feature is in beta. Menu names can change, so check that page if a step looks different.

## What your user does in ChatGPT

ChatGPT can connect to MCP servers too. OpenAI describes the details in its [MCP guide](https://developers.openai.com/api/docs/mcp), and the exact menu path is theirs to define, so follow that guide for the clicks.

The idea is the same. The user adds a custom MCP connector, gives it your `/api/mcp` address, and approves on your site.

We have not tested BoringPush with ChatGPT ourselves. What we can say is that BoringPush follows the connector requirements OpenAI documents, which we cover in the next section.

## Why there is no password to paste

The connection uses OAuth. That is the same pattern as "Sign in with Google" on other sites.

The user is sent to your site, signs in with the account they already have, and clicks approve. The assistant never sees their password. It gets a token that your app can switch off.

OpenAI's [auth guide](https://developers.openai.com/plugins/build/auth) says ChatGPT uses OAuth with PKCE S256, and that dynamic client registration is supported. BoringPush requires PKCE S256 and lets clients register themselves, so it lines up with those requirements. In plain words, the assistant introduces itself to your app, and the handshake is protected against stolen codes.

## What the user sees on the approval page

The approval page is the part of the flow that you own. It is a page on your own site, so users see your name and your account system.

On BoringPush, the page asks for read access by default. That covers boards, posts, orders and account details.

If an assistant asks for more, the page shows an extra box, "Also allow changes", and it starts unchecked. If the user leaves it unchecked, the connection can only read.

## Read-only by default

This matters more than any other detail in this post. A connection that can only read cannot damage anything.

If a read-only connection tries a write tool, the app answers with a read-only error and changes nothing. The check happens on the server, so it holds however the assistant is prompted.

Users who want the assistant to create posts or comments can allow it on the approval page. Our post on [letting AI change your app data safely](/blog/let-ai-change-your-app-data-safely) explains the rest.

## An example, labelled as one

This is an illustration, not a real log.

A user has connected the app with read access. They type: "Which posts on my launch board are still open?"

The assistant calls `list_boards`, finds the right board, calls `list_posts` and replies with the open ones. If they then say "mark the first one as planned", the read-only connection refuses, and they can reconnect with changes allowed if they want that.

## What you need to run

If you use BoringPush, the address already exists on your deployment. The setup steps are in the [AI assistants docs](/docs/18-ai-assistants-mcp).

If you build your own, you need a few parts:

- An address that speaks MCP over Streamable HTTP.
- OAuth sign-in with PKCE and a consent page.
- A fixed tool list, each tool mapped to an existing API route.
- Permission checks on those routes, not in the tool list.

The last point is the one people skip. Keep the rules in the route, so the website, the command line and the assistant all follow the same ones. That is the idea behind [building CLI first](/blog/cli-first-saas-run-your-app-from-terminal).

## How long a connection lasts

On BoringPush, access tokens last 30 days. There are no refresh tokens in this version, so a user reconnects after 30 days.

Each connection shows up as an ordinary API token named after the client. That means you can list it and revoke it like any other key.

## What this does not do

It does not make an assistant correct. Assistants can misread a question or pick the wrong tool.

It also does not make every plan work. Claude's custom connectors need a paid plan, and a user on a free plan may not see the option. Tell your users that before they hit it.

## FAQ

### Do my users need to install anything?

No. They paste one address into their assistant and approve on your site. Nothing runs on their computer.

### Does this work with Claude today?

Yes. BoringPush apps work as a custom connector in Claude. Per [Anthropic](https://support.anthropic.com/en/articles/11503834-building-custom-connectors-via-remote-mcp-servers), custom connectors are in beta and need a paid plan.

### Does it work with ChatGPT?

We follow the connector requirements OpenAI documents, including OAuth with PKCE S256, per its [auth guide](https://developers.openai.com/plugins/build/auth). We have not tested it with ChatGPT, so try it on your own account first.

### Is a password ever shared with the assistant?

No. Sign-in happens on your site, and the assistant receives a token that you can revoke.

### Can I turn a connection off?

Yes. Each connection is a normal API token, so you can list your tokens and revoke any of them.

Related reading:

- [CLI First: If Your Agent Can't Run It, You Didn't Ship It](/blog/cli-first-saas-run-your-app-from-terminal) — why every feature should have a route first
- [Control Your App From Claude (MCP)](/docs/18-ai-assistants-mcp) — the full BoringPush setup guide
- [Web Apps Aren't Dead. The Front Door Moved to AI.](/blog/web-apps-front-door-moved-to-ai) — why this matters
- [Let AI Change Your App Data Safely](/blog/let-ai-change-your-app-data-safely) — read-only defaults and approval for writes
