Skip to main content

ChatGPT MCP Server: How to Connect One in 2026 (Step by Step)

12 min readBy Viallo · Editorial standards

Quick take: an MCP server is a web address you paste into your AI assistant once, after which the assistant can call a fixed list of tools on your behalf. Claude Code takes one terminal command, Claude Desktop and ChatGPT take three clicks in Settings, and Cursor takes four. Every client ends at the same place: a browser sign-in and a consent screen where you tick which permissions the assistant gets. Read-only is the sensible default, and you can revoke the whole thing later from one settings page.

A brass patch cable being plugged into a vintage audio patch bay, with rows of unused sockets around it

What an MCP server actually is

An MCP server is a small web service that hands an AI assistant a fixed, named list of things it is allowed to do with one of your accounts. Viallo runs one at https://mcp.viallo.app/mcp, so Claude, ChatGPT and Cursor can list your albums, look up photo metadata and create share links without you uploading anything to the assistant. The alternative is the manual route: exporting a folder from Google Photos or Dropbox and dragging the files into a chat window, which works but hands the actual images to the assistant every single time.

MCP stands for Model Context Protocol. Anthropic published it as an open standard in November 2024, and it has since been adopted across the major assistants, which is why the same endpoint works in four different apps. The protocol itself is boring on purpose: the server advertises a list of tools, the assistant picks which one to call, the server answers that one call. There is no background sync, no crawler, and no standing session.

Viallo is a private photo sharing platform. Photos are not used to train AI, share links open in any browser without the viewer creating an account, and uploads are kept at full resolution rather than being recompressed. Its MCP server inherits all of that, which is the point of connecting it rather than uploading copies of your library somewhere else.

What you need before you connect

Five minutes, and not much else. This is the part most integration guides skip, so here it is up front.

  • A Viallo account. MCP access is included on every plan, including the free one, which gives you 2 albums, 200 photos and 10 GB with no credit card. Plan limits still apply to whatever the assistant does. See the plan comparison if you are close to those numbers.
  • One endpoint. It is https://mcp.viallo.app/mcp for everyone. There is no per-user URL to look up and no API key to generate.
  • A client that speaks remote MCP. The transport is Streamable HTTP and the server is stateless, so any client that supports remote servers works. Clients that only launch local stdio processes cannot reach it at all.
  • A browser. Authentication is OAuth 2.1 with PKCE. Your client opens a browser window, you sign in to Viallo there, and the client never sees your password. You will not be asked to paste a token anywhere.

Static bearer tokens exist internally as a testing escape hatch and none are issued to users. If a guide tells you to paste a long secret string into a config file, it is not describing this server.

Connect an MCP server to Claude Code

Claude Code is the fastest of the four because it takes a single command. Run this in any terminal:

claude mcp add --transport http viallo https://mcp.viallo.app/mcp
  1. Run the command above. viallo is just the local nickname for the server, so pick a different word if you prefer.
  2. Start Claude Code and type /mcp. The server will show as connected but unauthenticated.
  3. Select the server and choose to authenticate. A browser window opens on Viallo's sign-in page.
  4. Sign in, review the consent screen, tick the scopes you want to grant, and confirm. The browser hands control back to the terminal.
  5. Ask something simple to confirm it works, such as "how many albums do I have in Viallo?"

If step 2 shows nothing, the command wrote to a different scope than the project you are in. Re-run it and check the confirmation line that Claude Code prints, which tells you exactly which config file it wrote to.

A row of small brass keys hanging on individual hooks against a dark green wall, each hook holding a different key

Add a Claude Desktop MCP server

Claude Desktop calls remote MCP servers "connectors", and adding one is a settings panel rather than a config file. If you have seen older guides that told you to hand-edit a JSON file, that route was for local servers and is not what you want here.

  1. Open Claude Desktop and go to Settings.
  2. Select Connectors, then Add connector.
  3. Paste https://mcp.viallo.app/mcp as the URL and confirm.
  4. Sign in to Viallo in the browser window that opens, then approve the scopes on the consent screen.
  5. Back in Claude Desktop, open a new chat. The connector appears in the tools list for that conversation.

One thing that trips people up: the connector is attached to your Claude account, not to a single chat. Once it is added it is available in every new conversation until you remove it, which is convenient but also worth knowing before you grant write access.

ChatGPT connectors: add an MCP server on a paid plan

ChatGPT groups MCP under its connectors feature, and adding a custom server is gated to paid plans. On a free ChatGPT account you will see connectors to first-party services but no option to point at your own endpoint, which is the single most common reason people think the server is broken when it is not.

  1. Open ChatGPT on a paid plan and go to Settings.
  2. Find MCP servers and choose Add server.
  3. Set the transport to Streamable HTTP. Do not pick the older SSE option if it is offered.
  4. Paste https://mcp.viallo.app/mcp as the server URL and save.
  5. Sign in to Viallo in the browser window, then approve the scopes.
  6. Open a new chat and ask it to list your albums. The tool call shows up inline so you can see exactly what it asked for.

This is genuinely different from uploading photos into a ChatGPT conversation. An upload sends the image files themselves to OpenAI, where they are processed and, on consumer plans, may be retained unless you opt out. A connector sends metadata by default and leaves the files in Viallo's storage. The trade-off is real and worth stating plainly: an upload lets the model analyse what is in the picture, and this connection cannot.

Cursor and JetBrains: add a remote MCP server

Cursor treats MCP servers as an editor-level setting, so once it is added it is available in every project you open.

  1. Open Cursor and go to Settings.
  2. Select MCP, then Add remote server.
  3. Paste https://mcp.viallo.app/mcp and save.
  4. Click Authenticate. Sign in to Viallo in the browser and approve the scopes.
  5. Open the chat sidebar and ask for your albums. The server shows a green indicator in the MCP settings list once a call has succeeded.

JetBrains IDEs use the same HTTP transport through their AI assistant settings, so the steps are the same shape: add a remote server, paste the endpoint, authenticate in the browser. If your client supports remote MCP at all, pasting that one URL is the whole configuration.

ChatGPT MCP connector vs Claude, Cursor and JetBrains

All four clients end up in the same place, but the path there and the requirements differ. Here is the support matrix.

ClientWhere you add itRemote Streamable HTTPSign-inRequirement
Claude CodeOne terminal commandYesBrowser OAuthNone beyond the CLI
Claude DesktopSettings > Connectors > Add connectorYesBrowser OAuthNone
ChatGPTSettings > MCP servers > Add serverYesBrowser OAuthPaid plan
CursorSettings > MCP > Add remote serverYesAuthenticate buttonNone
JetBrains IDEsAI assistant MCP settingsYesBrowser OAuthNone
stdio-only clientsNot supportedNoNot applicableNeeds a remote-capable client

This is the screen that decides everything, and it is worth reading rather than clicking through. Viallo's MCP server exposes 18 tools grouped under four scopes, and the consent screen asks for them separately.

ScopeWhat it unlocksToolsGrant it?
profile.readDisplay name, email, plan and storage usageget_meYes, it is harmless
albums.readBrowsing, metadata and searchlist_albums, get_album, list_photos, get_photo_metadata, search_photos, view_photoYes, this is the useful one
albums.writeCreating, renaming, moving, uploading and deletingcreate_album, update_album, delete_album, add_photos_to_album, remove_photo_from_album, request_upload_url, confirm_uploadOnly if you want the assistant to reorganise things
share_links.manageCreating, listing and revoking share linkscreate_share_link, get_share_links, revoke_share_linkOnly if you want it to hand out links

The write scopes are never granted by default. You have to tick them, which means a read-only connection is the path of least resistance rather than something you have to fight for. My advice for a first connection: grant profile.read and albums.read, live with it for a week, and come back for the write scopes once you know what you actually want the assistant to do.

One tool deserves its own paragraph: view_photo is the only path to actual pixels. Everything else returns text. When you ask to see a specific photo, that tool hands it over, and every one of those calls is written to your activity log. Nothing scans your library in the background to build an index first.

If you want the mechanism underneath this screen rather than the steps on top of it, MCP OAuth explained walks through the whole handshake: PKCE, dynamic client registration, what the token actually carries, and the eight checks worth running before you trust any MCP server.

How to verify the connection worked

"It says connected" is not the same as "it works". Run these three checks in order and you will know exactly where you stand.

  1. Ask for your account. "What plan am I on in Viallo and how much storage have I used?" This calls get_me and proves the token is valid. If it fails here, authentication did not complete.
  2. Ask for a list. "List my Viallo albums with how many photos are in each." This proves albums.read was actually granted. A refusal here usually means you unticked that scope on the consent screen.
  3. Ask a search question. "Which of my photos were taken in Rome in June?" This exercises search_photos against dates and place names, which is the query shape the server is actually good at.

Then check it from the other side. Open Connected Apps in your Viallo settings at /settings/connected-apps and confirm the client is listed with the scopes you expected. If the scopes there do not match what you thought you approved, the settings page is right and your memory is wrong.

What you can actually ask once connected

The useful queries are the ones that would take you five minutes of tapping around an app. These all work:

  • "Which of my albums have photos from Sicily?"
  • "What is the earliest photo I have from Japan, and how many are there?"
  • "Make an album called Summer 2026 and move my July photos into it."
  • "Send my parents a link to the wedding album that stops working in 30 days."
  • "Which share links are still active?"
  • "How much of my storage have I used?"

Notice what those have in common. They are all questions about captions, tags, filenames, dates and place names, because that is the only text the server has. The last two are the ones people underrate: an assistant that can list and revoke your live share links is a genuinely faster audit than clicking through a settings page, and it pairs well with the full tool reference.

What it will not do, and the one thing you cannot undo

Viallo runs no image analysis on its servers - no object detection, no face recognition, no content search. So "find the photo with the red balloon" will not work, and no amount of rephrasing will make it work. "Find photos from Rome in June" will. If searching by picture content is the thing you actually want, Google Photos analyses image content to do exactly that, and it is the honest recommendation for that job. That analysis is also the reason its approach to AI training on your photos is a different conversation entirely.

The other limit is one to take seriously. Deletion through MCP is permanent. delete_album and remove_photo_from_album remove the files from storage, and there is no undelete - not in MCP, and not in the app either. There is no trash to fish them back out of. That is the strongest argument for keeping a first connection read-only: an assistant that misinterprets "clean up my old albums" with write access can do real damage in one turn.

Beyond that, the server simply cannot act outside the scopes you approved, and it has no standing permission to wander. It answers the call it was given and stops. Compared with the broad camera-roll access that AI assistants have been asking for, a named list of 18 tools is a much smaller surface.

How to disconnect an assistant

  1. Open /settings/connected-apps in Viallo.
  2. Find the client in the list and revoke it. Its tokens are removed immediately, so the assistant loses access on its very next call.
  3. Remove the server in the client too. In Claude Code that is claude mcp remove viallo; in Claude Desktop, ChatGPT and Cursor it is a delete button in the same settings panel you used to add it.

Revoking in Viallo is the step that actually cuts off access. Deleting the entry in the client only tidies up that side and would not stop a token that was already issued. Security activity entries are kept for 90 days, so you can go back afterwards and see what was accessed and when. Neither Dropbox nor iCloud offers an equivalent per-assistant kill switch for photo access today, because neither exposes a photo MCP server in the first place.

An open shoebox of printed photographs on a kitchen table, with a few prints laid out in a neat row beside it

Frequently Asked Questions

Does ChatGPT support MCP servers?

Yes, on paid plans, through Settings > MCP servers > Add server, using the Streamable HTTP transport. Viallo publishes its server at https://mcp.viallo.app/mcp, so adding it is a matter of pasting that one URL and signing in through the browser. Free ChatGPT accounts can use first-party connectors but cannot add a custom server, which is the most common reason a working endpoint appears to fail.

How do I add an MCP server to Claude Desktop?

Go to Settings, choose Connectors, click Add connector, and paste the server URL. For Viallo that is https://mcp.viallo.app/mcp, after which a browser window opens for sign-in and the consent screen where you pick scopes. Older guides describe hand-editing a JSON config file instead, but that route is for local stdio servers and does not apply to a remote HTTP one.

Is it safe to connect my photo library to an AI assistant?

It depends entirely on what the server hands over, which is why the scope list matters more than the brand name. Viallo's server is metadata-first: it returns album names, dates, places, captions and tags, and reaches actual pixels only through view_photo when you explicitly ask to see a photo, with every such call logged. To be clear about the limits, Viallo is not end-to-end encrypted, so this is a narrower permission than uploading your camera roll rather than a mathematical guarantee.

Can an AI assistant delete my photos through MCP?

Only if you granted the albums.write scope, and if you did, the deletion is permanent. Viallo's delete_album and remove_photo_from_album tools remove files from storage with no undelete, exactly as deleting in the app does. Write scopes are never granted by default, so a read-only connection genuinely cannot change anything - which is the safer way to start.

Do I need a paid plan to connect an MCP server to my photos?

Not on the Viallo side. MCP access is included on every Viallo plan, including the free one with 2 albums, 200 photos and 10 GB and no credit card, and your plan limits apply to whatever the assistant does. The paid requirement comes from the client instead: ChatGPT gates custom MCP servers to paid plans, while Claude Code, Claude Desktop and Cursor do not.

In their words

Real experiences from people using Viallo to share their photos.

  • I'm in Portland and my parents are in Perth, so there's basically a full day between us. We're never awake at the same time. I drop the weekend's photos into an album before bed, and by the time I'm up my mum has been through every one on her iPad and texted me about the dog. She is not a tech person, not even slightly, so that part still gets me.
    Verified Viallo user
  • Half my friends are on iPhones and half on Android, so every trip used to end the same way. Three different shared albums, and everyone going 'wait, can you send me that one?' After Croatia this summer we just put everything into one Viallo album instead. It was the first time I came home with all of the photos and not only the handful I happened to take myself.
    Verified Viallo user
  • I sent them a suggestion for a small thing I kept wishing the app did, half expecting one of those 'thanks, we'll add it to the list' replies that never go anywhere. Two days later they wrote back to say it was already live. I had to open the app and check for myself, because honestly, who actually does that?
    Verified Viallo user

Related articles