> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mcpmanager.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Add a Connect Button to Your Site

> How to put a "Connect via MCP Manager" button on your own site or README so a visitor reaches MCP Manager with your server URL and name already filled in and the connection already discovered — the deep-link URL format and its parameters, ready-to-paste HTML and Markdown snippets, what the visitor sees whether they are signed in, signed out, or have no account yet, the usage rules for the button, and how to debug a link that lands wrong.

If you publish an MCP server, you can put a **Connect via MCP Manager** button on your docs, your pricing page, or your README:

<Frame caption="The button, in its light and dark variants">
  <img src="https://mintcdn.com/mcpmanagerbyusercentrics/lhQCsBx5ghNO-cXA/images/connect-via-mcp-manager.svg?fit=max&auto=format&n=lhQCsBx5ghNO-cXA&q=85&s=fd6798b1777f0ed0103a207599c7bfe9" alt="Connect via MCP Manager, light variant" noZoom width="228" height="36" data-path="images/connect-via-mcp-manager.svg" />

  <img src="https://mintcdn.com/mcpmanagerbyusercentrics/lhQCsBx5ghNO-cXA/images/connect-via-mcp-manager-dark.svg?fit=max&auto=format&n=lhQCsBx5ghNO-cXA&q=85&s=263c57777c2a94571ef72e606df36882" alt="Connect via MCP Manager, dark variant" noZoom width="228" height="36" data-path="images/connect-via-mcp-manager-dark.svg" />
</Frame>

Someone who clicks it arrives with your server's URL and name already filled in and the connection already worked out, so the only thing left for them to do is authorize it. Instead of copying your endpoint out of your docs and pasting it somewhere, they press one button.

MCP Manager is where teams connect MCP servers to their AI apps and put governance in front of them — identity, permissions, and audit. Your users may already run it; if they don't, the link still works, and they can sign up on the way through. You need no relationship with us to publish the button, and there is nothing to register.

The button is a plain link. No SDK, no script tag, no embed, and nothing that phones home, so it works on any site — including one with a strict content security policy.

## Build your link

The link points at MCP Manager's servers page and carries your endpoint as a query parameter:

```text Link format theme={null}
https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=<endpoint>&serverName=<name>
```

| Parameter            | Required | What it does                                                                                                                                                                            |
| -------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `addRemoteServerUrl` | Yes      | Your MCP endpoint — the same Streamable HTTP URL a user would paste by hand. Must be `https://` to connect automatically; anything else is pre-filled but waits for a click.            |
| `serverName`         | No       | The name your server is listed under once they've added it. Leave it out and MCP Manager falls back to the name your server advertises in its `initialize` response, then its hostname. |
| `source`             | No       | Reserved for attribution — a registry name or your own slug. MCP Manager accepts it and ignores it today. Including it now is safe and future-proof.                                    |

Two things worth knowing before you test your own link:

* **The parameters disappear from the address bar** once the dialog opens. That is deliberate — it stops a refresh or a back-navigation re-opening the dialog on top of the visitor. Your link is not being rewritten or broken.
* **If a parameter appears twice, the first value wins.** `?serverName=Acme&serverName=Acme%20Docs` uses `Acme`. The values are never joined together.

<Warning>
  **URL-encode both values.** `addRemoteServerUrl` is a URL nested inside a URL, so its `://` and `/` characters must be escaped or the link breaks at
  the first slash. `serverName` needs encoding for spaces and `&`. In JavaScript that's `encodeURIComponent(value)`; most languages have the
  equivalent.
</Warning>

A worked example, for a server named **Acme Docs** at `https://mcp.acme.com/mcp`:

```text Encoded link theme={null}
https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=https%3A%2F%2Fmcp.acme.com%2Fmcp&serverName=Acme%20Docs
```

## Copy a snippet

Both colour variants are here as complete, self-contained HTML. Pick the one that suits your page, or use the auto-switching form below if your site has both themes.

<CodeGroup>
  ```html HTML (light) theme={null}
  <a
    href="https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=https%3A%2F%2Fmcp.acme.com%2Fmcp&serverName=Acme%20Docs"
    style="display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:6px;border:1px solid #d5d7dd;background:#ffffff;color:#12141d;font:600 14px/1 Lato,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;text-decoration:none;"
  >
    <svg width="18" height="15" viewBox="0 0 22.4 19.2" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path d="M1.59961 0C2.48313 0 3.19998 0.716133 3.2002 1.59961V17.5996C3.2002 18.4833 2.48326 19.2002 1.59961 19.2002C0.716134 19.2 0 18.4831 0 17.5996V1.59961C0.00021087 0.716264 0.716264 0.000211119 1.59961 0ZM20.7998 0C21.6833 0 22.4002 0.716133 22.4004 1.59961V17.5996C22.4004 18.4833 21.6835 19.2002 20.7998 19.2002C19.9162 19.2001 19.2002 18.4832 19.2002 17.5996V1.59961C19.2004 0.716199 19.9164 0.000106019 20.7998 0ZM6.40039 3.2002C7.2838 3.20041 7.99989 3.91637 8 4.7998V14.4004C7.99979 15.2837 7.28374 15.9998 6.40039 16C5.51686 16 4.80001 15.2839 4.7998 14.4004V4.7998C4.79991 3.91624 5.5168 3.2002 6.40039 3.2002ZM16 3.2002C16.8836 3.2002 17.5995 3.91624 17.5996 4.7998V14.4004C17.5994 15.2839 16.8835 16 16 16C15.1165 16 14.4006 15.2839 14.4004 14.4004V4.7998C14.4005 3.91624 15.1164 3.2002 16 3.2002ZM11.2002 6.40039C12.0838 6.4005 12.7998 7.11641 12.7998 8V11.2002C12.7997 12.0837 12.0837 12.7997 11.2002 12.7998C10.3166 12.7998 9.59971 12.0838 9.59961 11.2002V8C9.59961 7.11635 10.3165 6.40039 11.2002 6.40039Z" fill="url(#mcpManagerMark)" />
      <defs>
        <linearGradient id="mcpManagerMark" x1="11.2002" y1="0" x2="11.2002" y2="19.2002" gradientUnits="userSpaceOnUse">
          <stop stop-color="#059669" />
          <stop offset="1" stop-color="#1E40AF" />
        </linearGradient>
      </defs>
    </svg>
    Connect via MCP Manager
  </a>
  ```

  ```html HTML (dark) theme={null}
  <a
    href="https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=https%3A%2F%2Fmcp.acme.com%2Fmcp&serverName=Acme%20Docs"
    style="display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:6px;border:1px solid #3a3d4a;background:#12141d;color:#ffffff;font:600 14px/1 Lato,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;text-decoration:none;"
  >
    <svg width="18" height="15" viewBox="0 0 22.4 19.2" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path d="M1.59961 0C2.48313 0 3.19998 0.716133 3.2002 1.59961V17.5996C3.2002 18.4833 2.48326 19.2002 1.59961 19.2002C0.716134 19.2 0 18.4831 0 17.5996V1.59961C0.00021087 0.716264 0.716264 0.000211119 1.59961 0ZM20.7998 0C21.6833 0 22.4002 0.716133 22.4004 1.59961V17.5996C22.4004 18.4833 21.6835 19.2002 20.7998 19.2002C19.9162 19.2001 19.2002 18.4832 19.2002 17.5996V1.59961C19.2004 0.716199 19.9164 0.000106019 20.7998 0ZM6.40039 3.2002C7.2838 3.20041 7.99989 3.91637 8 4.7998V14.4004C7.99979 15.2837 7.28374 15.9998 6.40039 16C5.51686 16 4.80001 15.2839 4.7998 14.4004V4.7998C4.79991 3.91624 5.5168 3.2002 6.40039 3.2002ZM16 3.2002C16.8836 3.2002 17.5995 3.91624 17.5996 4.7998V14.4004C17.5994 15.2839 16.8835 16 16 16C15.1165 16 14.4006 15.2839 14.4004 14.4004V4.7998C14.4005 3.91624 15.1164 3.2002 16 3.2002ZM11.2002 6.40039C12.0838 6.4005 12.7998 7.11641 12.7998 8V11.2002C12.7997 12.0837 12.0837 12.7997 11.2002 12.7998C10.3166 12.7998 9.59971 12.0838 9.59961 11.2002V8C9.59961 7.11635 10.3165 6.40039 11.2002 6.40039Z" fill="#ffffff" />
    </svg>
    Connect via MCP Manager
  </a>
  ```

  ```html HTML (follows the visitor's theme) theme={null}
  <a href="https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=https%3A%2F%2Fmcp.acme.com%2Fmcp&serverName=Acme%20Docs" class="mcp-manager-connect">
    <svg width="18" height="15" viewBox="0 0 22.4 19.2" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path d="M1.59961 0C2.48313 0 3.19998 0.716133 3.2002 1.59961V17.5996C3.2002 18.4833 2.48326 19.2002 1.59961 19.2002C0.716134 19.2 0 18.4831 0 17.5996V1.59961C0.00021087 0.716264 0.716264 0.000211119 1.59961 0ZM20.7998 0C21.6833 0 22.4002 0.716133 22.4004 1.59961V17.5996C22.4004 18.4833 21.6835 19.2002 20.7998 19.2002C19.9162 19.2001 19.2002 18.4832 19.2002 17.5996V1.59961C19.2004 0.716199 19.9164 0.000106019 20.7998 0ZM6.40039 3.2002C7.2838 3.20041 7.99989 3.91637 8 4.7998V14.4004C7.99979 15.2837 7.28374 15.9998 6.40039 16C5.51686 16 4.80001 15.2839 4.7998 14.4004V4.7998C4.79991 3.91624 5.5168 3.2002 6.40039 3.2002ZM16 3.2002C16.8836 3.2002 17.5995 3.91624 17.5996 4.7998V14.4004C17.5994 15.2839 16.8835 16 16 16C15.1165 16 14.4006 15.2839 14.4004 14.4004V4.7998C14.4005 3.91624 15.1164 3.2002 16 3.2002ZM11.2002 6.40039C12.0838 6.4005 12.7998 7.11641 12.7998 8V11.2002C12.7997 12.0837 12.0837 12.7997 11.2002 12.7998C10.3166 12.7998 9.59971 12.0838 9.59961 11.2002V8C9.59961 7.11635 10.3165 6.40039 11.2002 6.40039Z" fill="currentColor" />
    </svg>
    Connect via MCP Manager
  </a>

  <style>
    .mcp-manager-connect {
      display: inline-flex;
      align-items: center;
      gap: 8px;
      padding: 10px 16px;
      border-radius: 6px;
      text-decoration: none;
      font: 600 14px/1 Lato, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
      border: 1px solid #d5d7dd;
      background: #ffffff;
      color: #12141d;
    }
    @media (prefers-color-scheme: dark) {
      .mcp-manager-connect {
        border-color: #3a3d4a;
        background: #12141d;
        color: #ffffff;
      }
    }
  </style>
  ```

  ```markdown Markdown / README theme={null}
  [![Connect via MCP Manager](https://docs.mcpmanager.ai/images/connect-via-mcp-manager.svg)](https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=https%3A%2F%2Fmcp.acme.com%2Fmcp&serverName=Acme%20Docs)
  ```

  ```markdown README (follows the reader's theme) theme={null}
  <a href="https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=https%3A%2F%2Fmcp.acme.com%2Fmcp&serverName=Acme%20Docs">
    <picture>
      <source media="(prefers-color-scheme: dark)">
      <img alt="Connect via MCP Manager" src="https://docs.mcpmanager.ai/images/connect-via-mcp-manager.svg">
    </picture>
  </a>
  ```

  ```text Plain link theme={null}
  https://app.mcpmanager.ai/settings/servers?addRemoteServerUrl=https%3A%2F%2Fmcp.acme.com%2Fmcp&serverName=Acme%20Docs
  ```
</CodeGroup>

Replace the endpoint and name in every snippet with your own, encoded as above.

The first two HTML snippets carry their styling inline, so they inherit nothing from your stylesheet and nothing in it can break them. The third uses a class and a `prefers-color-scheme` media query instead, because an inline `style` attribute can't hold a media query — use it when your page serves both themes, and rename the class if `mcp-manager-connect` collides with anything of yours. In all three the mark is inline SVG, so there is no image request to us and nothing to break if you are offline or behind a proxy.

For a README, the plain Markdown badge is the simplest thing that works everywhere. The `<picture>` form switches with the reader's theme and is supported on GitHub. Both hotlink the SVG from our docs; you are equally welcome to download either file and serve it from your own domain.

| File                                                                                                     | Use on                                           |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| [`connect-via-mcp-manager.svg`](https://docs.mcpmanager.ai/images/connect-via-mcp-manager.svg)           | light backgrounds — gradient mark, white ground  |
| [`connect-via-mcp-manager-dark.svg`](https://docs.mcpmanager.ai/images/connect-via-mcp-manager-dark.svg) | dark backgrounds — white mark, near-black ground |

## What the visitor sees

<Steps>
  <Step title="They click your button">
    The add-a-server dialog opens for them, with your endpoint in the URL field and your name in the name field. Nothing has been saved yet.
  </Step>

  <Step title="MCP Manager works out how to connect">
    It runs the same discovery it would run if they had pasted your URL themselves: fetching your
    [RFC 8414](https://datatracker.ietf.org/doc/html/rfc8414) authorization-server metadata and
    [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728) protected-resource metadata, and sending an MCP `initialize` request to see what your
    server asks for.
  </Step>

  <Step title="They confirm and authorize">
    They press one button. Depending on what your server supports, that runs the OAuth flow or takes them to enter a token. **MCP Manager always stops
    here for a click** — it never saves a server or opens an authorization window on someone's behalf, however the link was built.
  </Step>
</Steps>

### If they don't have an account

The link works for someone signed out, and for someone who has never heard of MCP Manager. They're taken to sign in or sign up first, and your server is carried through the whole journey — including single sign-on and accepting terms. They come out the other side at exactly the state above, with your endpoint and name still filled in.

This is the part that makes the button worth putting on a public page: you can link to it from anywhere, and a first-time visitor still lands on your server rather than an empty dashboard, with nothing to find their way back to.

## Using the button

* Use the wording **Connect via MCP Manager**. Don't reword it to imply a partnership, endorsement, or certification that isn't in place.
* Don't recolor, rotate, stretch, or otherwise redraw the mark. Use the light or dark SVG as shipped, or the inline HTML snippet.
* Point the link at `https://app.mcpmanager.ai`. A button pointed somewhere else isn't this button.
* You don't need our permission, an account, or a partnership to use it. If you operate a registry or a directory and want to generate these links in bulk, that works the same way — the format is stable and documented here.
* Link to **your own** server. Don't publish a button that connects visitors to somebody else's endpoint.

## Troubleshooting

<AccordionGroup>
  <Accordion title="The dialog opens but the URL field is empty or truncated" icon="link-slash">
    The endpoint wasn't URL-encoded, so everything after its first `/` was read as part of the outer link. Encode it — see the warning above.
  </Accordion>

  <Accordion title="The dialog opens with the URL filled in, but says it can't connect automatically" icon="lock-open">
    Your endpoint isn't `https://`. Discovery runs on our servers rather than in the visitor's browser, so we don't fire a plaintext address supplied by
    a third-party page without a click — and that includes `localhost`, which from our side means our own infrastructure rather than the visitor's
    machine. Nothing is blocked: the visitor can still press **Connect**. Publish over HTTPS and the button works end to end.
  </Accordion>

  <Accordion title="It says your server can't be connected" icon="triangle-exclamation">
    The link is fine — discovery reached your server and didn't find what it needed. That's the same failure a hand-typed URL would hit, so debug it as
    a server problem. Start with [Debugging self-hosted OAuth](/build-your-own-mcp-server/debugging-self-hosted-oauth) and the troubleshooting catalog
    in the [overview](/build-your-own-mcp-server/overview).
  </Accordion>

  <Accordion title="The name you passed isn't showing" icon="tag">
    Names are trimmed and capped at 200 characters, and invisible control characters are stripped. If `serverName` is empty after that, MCP Manager
    falls back to the name your server advertises in its `initialize` response, then to its hostname.
  </Accordion>
</AccordionGroup>

## Further reading

<CardGroup cols={2}>
  <Card title="Building Your Own MCP Server" icon="hammer" href="/build-your-own-mcp-server/overview">
    The two things any server must do to work behind MCP Manager, and the troubleshooting catalog for when one doesn't.
  </Card>

  <Card title="Debug Self-Hosted OAuth" icon="bug" href="/build-your-own-mcp-server/debugging-self-hosted-oauth">
    The dynamic-client-registration failure that trips up multi-instance deployments.
  </Card>

  <Card title="Remote MCP Servers" icon="cloud" href="/mcp-gateway-concepts/mcp-servers/remote">
    What your users are actually adding when they press your button, and the three ways it can authenticate.
  </Card>

  <Card title="Choosing Remote Auth" icon="key" href="/mcp-gateway-concepts/mcp-servers/choosing-remote-auth">
    Which authentication method to support, from the perspective of the server you operate.
  </Card>
</CardGroup>
