Tough Customer MCP
Integrates with GitHub for repository management and deployment workflows when setting up the MCP server on Vercel.
Built as a Next.js application, serving as the framework for the MCP server implementation and UI components.
Supports deployment to Vercel hosting platform, with instructions for linking GitHub repositories and deploying production instances.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Tough Customer MCPcreate a tough customer roleplay scenario for me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tough Customer MCP
Remote MCP server (Next.js on Vercel) that exposes the Tough Customer roleplay setup workflow to LLM clients (Claude, ChatGPT, MCP Inspector).
Auth model: Model B — Supabase Auth is the OAuth Authorization Server.
Claude carries a Supabase-issued JWT, never a raw Salesforce token.
Salesforce is a downstream backend; users link it once at /connect, and
the MCP server stores an envelope-encrypted refresh token and mints
short-lived SF access tokens per request. SOQL runs WITH USER_MODE, so
Salesforce enforces FLS + sharing as the linked end user.
See userstories.md (especially §2.1, §2.2, §2.7) for the full architecture
and security rationale.
Endpoints
Route | Purpose |
| MCP streamable-HTTP endpoint (connect Claude here) |
| RFC 9728 metadata pointing at the Supabase AS |
| One-time Salesforce account-linking UI |
| Begins SF PKCE flow |
| SF redirect target — server-side token exchange + vault save |
| Removes SF link, revokes refresh token at SF |
| Supabase Google OAuth glue |
| Landing page |
Tools exposed
list_opportunitieslist_voiceslist_scenariosget_opportunity_contactscreate_roleplay_sessionPrompt:
setup_sales_roleplay
Local development
npm install
cp .env.example .env.local # fill in the values
npm run dev
# http://localhost:3000
# MCP endpoint: http://localhost:3000/mcpFor local dev without Supabase / Salesforce, set TC_MODE=mock — the server
serves in-memory data and skips auth.
Inspect with the MCP Inspector:
npx @modelcontextprotocol/inspector
# Transport: Streamable HTTP
# URL: http://localhost:3000/mcpDeploy to Vercel
gh repo create mcp --public --source=. --remote=origin --push
npx vercel link
npx vercel --prodProvision Supabase via the Vercel Marketplace integration so
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, and
SUPABASE_SERVICE_ROLE_KEY are auto-populated across all environments.
Apply database migrations:
supabase db pushCustom domains (production):
mcp.toughcustomer.ai→ this Vercel projectapp.toughcustomer.ai→ this Vercel project (alias; serves/connect)auth.toughcustomer.ai→ Supabase (custom hostname; seedocs/CUSTOM_DOMAIN.md)
Salesforce setup
The Connected App is a downstream backend, not the AS for Claude.
See docs/SALESFORCE_SETUP.md for the Connected App runbook and
docs/SALESFORCE_OBJECTS.md for the custom objects + fields the SF admin
must create. No Apex deploy required — the MCP server uses SF REST
GraphQL exclusively, which enforces FLS + sharing for all profiles
including admins.
Vault graduation
v1 encrypts SF refresh tokens with AES-256-GCM keyed by the VAULT_KEY_V1
env var. Before any non-internal customer connects real Salesforce data,
graduate to Supabase Vault or external KMS — see docs/VAULT_V2.md.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/toughcustomerai/mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server