Remote MCP server
Drop a JSON config into Claude Desktop or any MCP-aware client and the entire gary.club Public API becomes 60+ native tools — same auth, same tenancy as REST.
Endpoint#
One URL. POST your JSON-RPC over HTTP. Stateless mode — every request is self-contained, no session id required.
POST https://agency.gary.club/api/public/v1/mcp
Authorization: Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789
Content-Type: application/json
Accept: application/json, text/event-streamClaude Desktop#
{
"mcpServers": {
"gary-club": {
"url": "https://agency.gary.club/api/public/v1/mcp",
"headers": {
"Authorization": "Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789"
}
}
}
}Restart Claude Desktop. The tools appear automatically — start typing in any chat to see them.
Claude Code#
Add to ~/.claude/settings.json with the same shape:
{
"mcpServers": {
"gary-club": {
"url": "https://agency.gary.club/api/public/v1/mcp",
"headers": {
"Authorization": "Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789"
}
}
}
}Raw JSON-RPC#
For testing, scripting, or non-Claude MCP clients. Stateless mode means you can call any method without prior initialize:
curl -X POST https://agency.gary.club/api/public/v1/mcp \
-H "Authorization: Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }'curl -X POST https://agency.gary.club/api/public/v1/mcp \
-H "Authorization: Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": { "name": "crm.contacts.list", "arguments": { "limit": 5 } }
}'Auth model#
Every tool call re-validates the bearer token against our REST middleware — same revocation and expiry checks. The MCP layer is a thin protocol adapter; nothing bypasses our normal auth.
gc_live_+ no header → agency tenancy. PassX-Gary-Client-Idper-request to act as a specific client.cl_live_→ bound to one client. Same rule as REST.
Tool catalog#
Each tool wraps one REST endpoint 1:1. Source-of-truth is the OpenAPI spec at /openapi.json; this list shows the currently registered tools.
me.introspectMetacrm.contacts.listCRMcrm.contacts.createCRMcrm.contacts.getCRMcrm.contacts.updateCRMcrm.companies.listCRMcrm.companies.createCRMcrm.deals.listCRMcrm.deals.createCRMcrm.deals.updateCRMcrm.activities.listCRMcrm.activities.logCRMcrm.tasks.listCRMcrm.tasks.createCRMcrm.tasks.completeCRMcrm.lists.listCRMcrm.lists.add_membersCRMcrm.pipelines.listCRMsms.sendSMSsms.conversations.listSMSsms.conversations.messagesSMSsms_broadcasts.listBroadcastssms_broadcasts.createBroadcastssms_broadcasts.getBroadcastssms_broadcasts.updateBroadcastssms_broadcasts.approveBroadcastssms_broadcasts.send_nowBroadcastssms_broadcasts.recipientsBroadcastscalls.listCallscalls.getCallscalls.initiateCallssdr.campaigns.listSDRsdr.campaigns.getSDRsdr.campaigns.createSDRsdr.campaigns.updateSDRagents.listAgentsagents.getAgentsagents.updateAgentssequences.listSequencessequences.getSequencessequences.enrollSequencessequences.enrollmentsSequenceskb.listKBkb.documentsKBkb.documents.createKBkb.documents.deleteKBkb.searchKBkb.readKBai.contact_gistAIai.company_gistAIai.deal_gistAIbilling.balanceBillingbilling.usageBillingbilling.transactionsBillingwebhooks.listWebhookswebhooks.createWebhookswebhooks.testWebhookswebhooks.deliveriesWebhooksdocs.productsDocsdocs.listDocsdocs.getDocsdocs.searchDocsdocs.changelogDocs
