The Clay MCP connector routes your AI agent's tool calls to Clay's own MCP server through Scalekit. Each user signs in to Clay once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 17 tools.
- Tools
- 17
- What they doRead · write · destructive
- 10 · 4 · 310 read4 write3 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Clay MCP connection
In AgentKit > Connections, create a Clay MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Clay MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'claymcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Clay MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'claymcp_get_credits_available',toolInput: { rationale: 'YOUR_RATIONALE' },})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "claymcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Clay MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={"rationale":"YOUR_RATIONALE"},tool_name="claymcp_get_credits_available",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolclaymcp_add_company_data_pointsAdd data points to companies in an existing search.Read-onlyAdd Company Data Points
Add data points to companies in an existing search. Supports enriching ALL companies or specific companies via entityIds. Use for tech stack, funding, headcount, competitors, or any custom research question about companies.
Inputs
dataPointsarrayrequired- The data points to apply to the company
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
taskIdstringrequired- The task ID identifying the search to add company data points to
entityIdsarray- Optional. Array of entityIds to enrich. When omitted, enriches all companies.
claymcp_add_contact_data_pointsAdd data points to contacts in an existing search.Read-onlyAdd Contact Data Points
Add data points to contacts in an existing search. Supports enriching ALL contacts or specific contacts via entityIds. Use for emails, phone numbers, work history, thought leadership, or any custom research question about contacts.
Inputs
dataPointsarrayrequired- The data points to apply to the contacts
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
taskIdstringrequired- The task ID identifying the search to add contact data points to
entityIdsarray- Optional. Array of entityIds to enrich. When omitted, enriches all contacts.
claymcp_ask_question_about_accountsAsk a natural language question about one or more accounts available in Clay Audiences.Read-onlyAsk Question About Accounts
Ask a natural language question about one or more accounts available in Clay Audiences. An AI agent analyzes account data including contacts, opportunities, Gong calls, and emails to answer the question.
Inputs
accountIdsarrayrequired- Account IDs to analyze (1-10)
questionstringrequired- Natural language question about the accounts
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
claymcp_get_credits_availableCheck if credits are available for the workspace.Read-onlyGet Credits Available
Check if credits are available for the workspace. Returns hasWorkspaceCredits, hasSalesRepCredits, and (when credit budgets are enabled) hasBudgetCredits.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
claymcp_get_current_workspaceReport which Clay workspace this connection is pinned to.Read-onlyGet Current Workspace
Report which Clay workspace this connection is pinned to. Returns workspaceName, workspaceId, and workspaceUrl. Use when the user asks which workspace they are connected to, or to confirm where searches and enrichments will run.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
claymcp_get_subroutine_input_optionsFetch the available dropdown options for a subroutine input that has a configured options source.Read-onlyGet Subroutine Input Options
Fetch the available dropdown options for a subroutine input that has a configured options source.
Inputs
inputNamestringrequired- The name of the input whose options to fetch.
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
subroutine_idstringrequired- The ID of the subroutine.
claymcp_get_taskGet task status and results by task ID.Read-onlyGet Task
Get task status and results by task ID. Handles all task types (search, direct) and returns the current state. Accepts universal mcp-task-* IDs and legacy cgas-search-id-* IDs.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
taskIdstringrequired- The task ID to retrieve (mcp-task-* or legacy cgas-search-id-*)
pageinteger- Optional 1-based page of entities for direct tasks (100 per page). Defaults to 1.
claymcp_get_task_contextRetrieve the current state of a task — all entities, enrichment values, and statuses.Read-onlyGet Task Context
Retrieve the current state of a task — all entities, enrichment values, and statuses. Call this to get actual enrichment results (emails, phone numbers, work history, custom data points) after a search or enrichment operation.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
taskIdstringrequired- The task ID to retrieve (mcp-task-* or legacy cgas-search-id-*)
entityIdsarray- Optional. Pass specific entity IDs to retrieve only those entities. Leave empty or omit to retrieve all entities for the task.
pageinteger- Optional 1-based page of entities for direct tasks (100 per page). Defaults to 1. Ignored when entityIds is provided.
claymcp_list_subroutinesList available custom functions in the workspace.Read-onlyList Subroutines
List available custom functions in the workspace. Call this to see their required inputs before using run_subroutine.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
claymcp_query_objectsQuery audience accounts, contacts, or deals using natural language.Read-onlyQuery Objects
Query audience accounts, contacts, or deals using natural language. Translates plain language descriptions into structured filters and returns matching entities with field values from Clay Audiences.
Inputs
querystringrequired- Natural language description of what to filter, e.g. "tech companies with 500+ employees"
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
audienceNamestring- Name of a saved audience segment to scope results to
limitinteger- Max rows to return (default 50)
offsetinteger- Pagination offset (default 0)
onlyMineboolean- When true, restrict account results to the caller's Salesforce-owned accounts
claymcp_find_and_enrich_companyFind and enrich a single company by domain or LinkedIn URL.WriteFind and Enrich Company
Find and enrich a single company by domain or LinkedIn URL. Use for prospecting publicly available company info (funding, competitors, tech stack, etc.). Returns a taskId for follow-up enrichment.
- Idempotent
Inputs
companyIdentifierstringrequired- Company identifier (domain like "clay.com" or LinkedIn URL like "https://www.linkedin.com/company/grow-with-clay")
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
companyDataPointsarray- Optional data points to enrich during search creation
claymcp_find_and_enrich_contacts_at_companySearch for contacts at a company by role, title, name, or department.WriteFind and Enrich Contacts at Company
Search for contacts at a company by role, title, name, or department. Supports filtering by job title keywords, locations, tenure, certifications, languages, and more. Returns a taskId for follow-up enrichment.
- Idempotent
Inputs
companyIdentifierstringrequired- The company identifier to search for company and contacts. Either a domain (e.g. "clay.com") or a LinkedIn URL (e.g. "https://www.linkedin.com/company/grow-with-clay").
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
contactFiltersobject- No description.
dataPointsobject- Optional data points to enrich during search creation
claymcp_find_and_enrich_list_of_contactsFind and enrich specific named contacts at their companies.WriteFind and Enrich List of Contacts
Find and enrich specific named contacts at their companies. Use when you have a list of specific people by name (e.g. "John Smith at OpenAI"). Returns a taskId for follow-up enrichment.
- Idempotent
Inputs
contactIdentifiersarrayrequired- Array of contact identifiers to find and enrich, with their company identifiers
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
dataPointsobject- Optional data points to enrich during search creation
claymcp_track_eventTrack an analytics event with optional properties.WriteTrack Event
Track an analytics event with optional properties.
Inputs
eventNamestringrequired- The name of the event to track
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
propertiesobject- Additional properties to include with the event
claymcp_run_subroutineExecute a custom function on contacts/companies from an existing search.DestructiveRun Subroutine
Execute a custom function on contacts/companies from an existing search. Use when you have a taskId from a previous search and want to run a subroutine on all or specific contacts. Requires fieldMapping to map entity fields to subroutine inputs.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
subroutine_idstringrequired- The ID of the subroutine to execute. Get this from list_subroutines.
taskIdstringrequired- Required. The taskId from the existing search task to add results to.
entityIdsarray- Optional. Array of entityIds to run on. When omitted with fieldMapping, runs on all contacts.
fieldMappingobject- Required for batch mode. Format: { "entityField": "subroutineInput" }. KEY = entity field name, VALUE = subroutine input name.
claymcp_run_subroutine_directExecute a custom function directly on one or more sets of provided inputs, without needing an existing task or entityIds.DestructiveRun Subroutine Direct
Execute a custom function directly on one or more sets of provided inputs, without needing an existing task or entityIds. Use when the user provides specific input values (LinkedIn URL, name, email, etc.) and wants to run a function on that data directly, for one value or many.
Inputs
inputsarrayrequired- Array of input objects, one per run (max 1000); use a single-element array to run once. Each object's keys must match the input names from list_subroutines.
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
subroutine_idstringrequired- The ID of the subroutine to execute. Get this from list_subroutines.
claymcp_run_subroutine_no_mappingRun a custom subroutine on search entities.DestructiveRun Subroutine No Mapping
Run a custom subroutine on search entities. The backend automatically generates the field mapping. Requires a subroutine_id and taskId from an existing search.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
subroutine_idstringrequired- The ID of the subroutine to execute.
taskIdstringrequired- The taskId from the existing search.
entityIdsarray- Optional. Array of entityIds to run on. When omitted, runs on all entities.
inputsobject- Optional. Explicit values for inputs the user selected (e.g. dropdown pickers), keyed by input name.
No tools match.