ChatGPT MCP Server: How to Connect One in 2026 (Step by Step)
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.

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 stored on EU servers, the company does not train AI on them, 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/mcpfor 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- Run the command above.
viallois just the local nickname for the server, so pick a different word if you prefer. - Start Claude Code and type
/mcp. The server will show as connected but unauthenticated. - Select the server and choose to authenticate. A browser window opens on Viallo's sign-in page.
- Sign in, review the consent screen, tick the scopes you want to grant, and confirm. The browser hands control back to the terminal.
- 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.

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.
- Open Claude Desktop and go to Settings.
- Select Connectors, then Add connector.
- Paste
https://mcp.viallo.app/mcpas the URL and confirm. - Sign in to Viallo in the browser window that opens, then approve the scopes on the consent screen.
- 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.
- Open ChatGPT on a paid plan and go to Settings.
- Find MCP servers and choose Add server.
- Set the transport to Streamable HTTP. Do not pick the older SSE option if it is offered.
- Paste
https://mcp.viallo.app/mcpas the server URL and save. - Sign in to Viallo in the browser window, then approve the scopes.
- 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 EU 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.
- Open Cursor and go to Settings.
- Select MCP, then Add remote server.
- Paste
https://mcp.viallo.app/mcpand save. - Click Authenticate. Sign in to Viallo in the browser and approve the scopes.
- 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.
| Client | Where you add it | Remote Streamable HTTP | Sign-in | Requirement |
|---|---|---|---|---|
| Claude Code | One terminal command | Yes | Browser OAuth | None beyond the CLI |
| Claude Desktop | Settings > Connectors > Add connector | Yes | Browser OAuth | None |
| ChatGPT | Settings > MCP servers > Add server | Yes | Browser OAuth | Paid plan |
| Cursor | Settings > MCP > Add remote server | Yes | Authenticate button | None |
| JetBrains IDEs | AI assistant MCP settings | Yes | Browser OAuth | None |
| stdio-only clients | Not supported | No | Not applicable | Needs a remote-capable client |
What the consent screen asks and what to approve
This is the screen that decides everything, and it is worth reading rather than clicking through. Viallo's MCP server exposes 17 tools grouped under four scopes, and the consent screen asks for them separately.
| Scope | What it unlocks | Tools | Grant it? |
|---|---|---|---|
| profile.read | Display name, email, plan and storage usage | get_me | Yes, it is harmless |
| albums.read | Browsing, metadata and search | list_albums, get_album, list_photos, get_photo_metadata, search_photos, view_photo | Yes, this is the useful one |
| albums.write | Creating, renaming, moving, uploading and deleting | create_album, update_album, delete_album, add_photos_to_album, remove_photo_from_album, request_upload_url, confirm_upload | Only if you want the assistant to reorganise things |
| share_links.manage | Creating, listing and revoking share links | create_share_link, get_share_links, revoke_share_link | Only 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.
- Ask for your account. "What plan am I on in Viallo and how much storage have I used?" This calls
get_meand proves the token is valid. If it fails here, authentication did not complete. - Ask for a list. "List my Viallo albums with how many photos are in each." This proves
albums.readwas actually granted. A refusal here usually means you unticked that scope on the consent screen. - Ask a search question. "Which of my photos were taken in Rome in June?" This exercises
search_photosagainst 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 17 tools is a much smaller surface.
How to disconnect an assistant
- Open
/settings/connected-appsin Viallo. - Find the client in the list and revoke it. Its tokens are removed immediately, so the assistant loses access on its very next call.
- 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.

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.