A Streamable HTTP MCP server that uploads images/videos to Cloudinary and exposes a rich interactive UI that works in:
✅ ChatGPT Apps
✅ Goose
✅ Any MCP host
This repo is used in the workshop:
“Plug Your MCP App into ChatGPT”
It demonstrates how to:
- Convert an MCP App into a ChatGPT-compatible app
- Serve MCP over Streamable HTTP
- Host it on Railway
- Use one server for Goose + ChatGPT
ChatGPT
↓
Streamable HTTP (Railway)
↓
Cloudinary MCP Server
↓
Cloudinary API
The same server supports:
- Goose MCP Apps (ui:// resources)
- ChatGPT Apps SDK (skybridge template + structured output)
- Upload images/videos to Cloudinary
- Interactive UI preview
- Works in ChatGPT + Goose
- Structured tool output for ChatGPT
- MCP App UI for Goose
- Remote Streamable HTTP deployment
- Stateless server (safe for hosting)
- Node.js 18+
- Cloudinary account
Get credentials:
👉 https://console.cloudinary.com/settings/api-keys
You’ll need:
CLOUDINARY_CLOUD_NAME
CLOUDINARY_API_KEY
CLOUDINARY_API_SECRET
npm installnpm run devServer runs at:
http://localhost:3000
Health check:
GET /
MCP endpoint:
POST /mcp
Create a .env file in the project root:
CLOUDINARY_CLOUD_NAME=...
CLOUDINARY_API_KEY=...
CLOUDINARY_API_SECRET=...
Do NOT commit this file.
- Push repo to GitHub
- Go to https://railway.app
- New Project → Deploy from GitHub
- Select this repo
- Add environment variables in Railway dashboard
- Deploy
Railway will give you a URL:
https://your-app.up.railway.app
Your MCP endpoint becomes:
https://your-app.up.railway.app/mcp
Add a remote extension:
goose configure
Choose:
Remote Extension (Streamable HTTP)
Endpoint:
https://your-app.up.railway.app/mcp
Now Goose can call the Cloudinary upload tool.
In ChatGPT:
Add a custom MCP app using the same endpoint:
https://your-app.up.railway.app/mcp
ChatGPT will:
- load the template UI
- inject structured tool output
- render the upload preview
Uploads media to Cloudinary.
Parameters:
file_path— local path (Goose)file— URL or data URI (ChatGPT)resource_type— image/video/rawpublic_idoverwritetags
Returns:
- JSON metadata
- interactive UI
- ChatGPT structured output
This project teaches:
- MCP server structure
- Streamable HTTP hosting
- ChatGPT adapter pattern
- Template + structuredContent bridge
- Cross-host UI compatibility