MCP server
Meet the Gain.io MCP
Stop switching tabs to answer a question about a customer. Ask wherever you're working and the answer comes back with the deal and the ticket attached.
Works with Claude, ChatGPT, Cursor, Gemini, Grok and any client that speaks MCP.
Use cases
Questions that need both halves
The deal on one side, the ticket on the other, one customer in the middle. Every question below reads across both without being told where to look.
“Which deals closing this quarter have open support tickets?”
list_dealslist_tickets“Summarise everything that’s happened with Acme Corp since we signed them.”
get_activity_timeline“Draft a follow-up for the three accounts whose CSAT dropped after their last ticket.”
get_csat_scoresdraft_ticket_reply“What feature requests came from customers on annual plans?”
list_feedback“Which tickets this week came from accounts up for renewal in the next 60 days?”
list_sla_statusSetup
One command, one connection
Settings → Connectors → Add custom connector. Name it Gain.io, paste https://mcp.gain.io/v2/connect, and leave the OAuth client ID / secret fields empty — Claude registers itself.
Click Add, then Connect, and finish in the browser: log in → Approve. Enable Gain.io in the search & tools menu of any chat.
claude mcp add --transport http gainio https://mcp.gain.io/v2/connectStart claude, run /mcp, select gainio and choose Authenticate — the browser flow does the rest: log in → Approve.
Custom connectors need Developer mode: Settings → Apps & Connectors → Advanced settings → toggle it on. (Workspace plans: an admin may need to enable connectors first.)
Back in Apps & Connectors, Create a connector: name Gain.io, URL https://mcp.gain.io/v2/connect, authentication OAuth with the client fields left empty. Connect, log in → Approve, then add it in a chat via the + menu → Use connectors.
Settings → MCP → Add new MCP server. Or edit ~/.cursor/mcp.json:
{
"mcpServers": {
"gainio": {
"url": "https://mcp.gain.io/v2/connect"
}
}
}The MCP list shows gainio with a Needs login action — click it and finish in the browser: log in → Approve.
In the Gemini Enterprise admin console, open Integrations → Add MCP server. Paste https://mcp.gain.io/v2/connect and select OAuth — discovery and registration are automatic.
Each user connects once from their own account: log in → Approve.
The Gemini CLI doesn’t run the OAuth browser step for HTTP servers on all versions — use the console flow above.
Grok’s connector form is manual — register a client once. Find your workspace’s callback URL in Grok’s connector dialog, then:
curl -s -X POST https://mcp.gain.io/v2/register \
-H 'content-type: application/json' \
-d '{"client_name":"Grok","redirect_uris":["<GROK_CALLBACK_URL>"]}'In Grok’s form: server URL https://mcp.gain.io/v2/connect, client ID from the response, client secret empty, authorization endpoint /v2/authorize, token endpoint /v2/token, token auth method none (PKCE). Connect, log in → Approve.
Any client supporting HTTP MCP transport with OAuth 2.1 works. Point it at https://mcp.gain.io/v2/connect — it registers itself, and you approve access in the browser.
After connecting, ask your agent “list my open deals in Gain.io”. If it comes back with data, you’re set.
Reference
What the server exposes
| Read — contacts and deals | list_contactsget_contactlist_dealsget_deallist_taskslist_notesget_activity_timeline |
|---|---|
| Read — support | list_ticketsget_ticketget_conversationlist_sla_statusget_csat_scores |
| Read — community | list_feedbackget_roadmapget_changelog |
On write access: read-only at launch, on purpose. An agent that can move a deal stage or send a ticket reply can also do it wrong, at scale, before anyone notices. So yours reads everything and drafts freely, but nothing it writes reaches a customer until a person sends it. Full write access is opt-in, later.
Questions before you connect
What we hear most often about pointing an AI tool at the customer record.