clay_get_ batch_ run_ resultsFetch progress and results for a batch run.
Find people or companies in Clay's database, run your own Clay function or workflow on a single row or a whole list, pull the results back, query a Clay table, and check credits before a big run.
PopMCPClay
Every Clay Public API operation, plus one-call helpers that search the database, run functions and workflows, and read back batch results.
clay_get_ batch_ run_ resultsFetch progress and results for a batch run.
clay_get_ routine_ run_ resultsFetch progress and results for a routine run.
clay_run_ routineExecute a routine against 1-100 items.
clay_get_ batch_ run_ rowsCheck a batch run and, once it is complete, download and return its result rows (Clay only gives a short-lived file link; this reads it for you).
clay_run_ routine_ and_ waitRun a Clay function or workflow (a routine) on 1-100 rows and wait for the results in ONE call: starts the run, polls it, and returns every row's result.
clay_run_ routine_ batchRun a Clay function or workflow on a large list (up to 20,000 rows) in ONE call: builds the JSONL input file, uploads it, and starts a batch run.
clay_search_ databaseFind people or companies in Clay's database in ONE call: creates the search and returns its first page.
clay_create_ searchCreate a search from a Clay search query.
clay_get_ search_ query_ referenceGet the Clay search query reference.
clay_get_ search_ resultsRun the query-mode iterator and return the next page of results.
clay_get_ credit_ balanceGet workspace credit balances.
clay_get_ meGet the authenticated user.
clay_get_ workflow_ runs_ query_ referenceGet the runs search query reference (beta).
clay_query_ workflow_ runsSearch runs by query (beta).
clay_query_ tablesRun a structured query across one or more tables.
clay_create_ batch_ upload_ urlIssue a presigned PUT URL for uploading a batch input JSONL.
clay_start_ batch_ runStart an async routine run-batch over an uploaded JSONL file.
Credentials off one Clay screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
In Clay, open Settings, then Account, then API keys. Create a key, copy it (Clay shows it only once) and paste it into the API key field. The key works in the workspace it was created in. No OAuth app or redirect URL.
••••••••••••3f7arun_routine_and_wait and run_routine_batch start Clay runs that spend credits as soon as the AI calls them; searches do not. Tick Clay on the PopMCP consent screen only for clients that should spend credits, and on Scale keep reporting teammates read-only.
Drop the PopMCP URL into Claude, ChatGPT, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Clay credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Find VPs of Sales at software companies with 500+ employees that use Salesforce
clay_get_search_query_referenceok
Then just ask for the work
“Find VPs of Sales at software companies with 500+ employees that use Salesforce”
“Run our Score Account function (link below) on these 40 domains and list the Tier 1 accounts”
“Check we have enough credits, then run our firmographics workflow on the 8,000 companies from the trade show export”
“How many runs of our inbound routing workflow failed this week, and how many credits did they use”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Clay behind an AI client.
One personal Clay API key. Create it in Clay under Settings, then Account, then API keys, and copy it straight away because Clay shows it only once. It is the only credential Clay's Public API accepts, and it works in the workspace you created it in, so the connection is locked to that workspace. PopMCP checks it by reading the key's user and workspace, stores it encrypted, and sends it from the server as the clay-api-key header.
Yes. Running a function or workflow spends Clay data credits, and on newer Clay plans action executions too; a batch run counts one run per row. Searching Clay's database spends no credits but counts toward your plan's result limits, and Free and Trial plans cap a search at 50 results. get_credit_balance reads both balances without spending anything, and PopMCP's Credits running low trigger fires when either drops below the level you set.
You tell it. Clay's Public API has no endpoint that lists functions or tables, so give the AI the function's Clay URL or its t_ id (workflows use wf_ ids). PopMCP accepts function:t_..., a bare id or the full URL and adds the prefix itself. The function needs API access turned on in Clay under Functions, Details, API, otherwise runs return 404, and the input names come from the function's inputs in Clay.
Yes, up to 20,000 rows per call. run_routine_batch builds the JSONL input file, uploads it to Clay's presigned URL and starts the batch run, a file upload a model cannot do by itself. get_batch_run_rows then checks the run and, once it is complete, downloads Clay's short-lived result file and returns the rows up to 1,000 at a time. For 1 to 100 rows, run_routine_and_wait starts the run, polls it and returns every row's result in one call.
People and companies, queried in Clay's own search language. search_database creates the search and returns the first page (25 rows by default, up to 500), and get_search_results returns the next page while has_more is true. Queries can match people by current job title, company industry and headcount, or companies by the people who work there and by technology such as Salesforce. get_search_query_reference returns every searchable field.
Yes, on Clay's Enterprise plan. query_tables runs a structured query with select, filter, order, group and join across one or more tables, and columns can be named by their titles. There is no list-tables endpoint, so give the AI the table URL or the t_ id from it. Results come back in pages with a cursor, and a record updated mid-scan can appear twice, so ask the AI to deduplicate by id when counts matter.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Loading 17 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 15-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 17 here. A trigger is something PopMCP watches for you: 1 Clay events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Clay.
Launch a hosted MCP endpoint for Clay, keep tool access under control, and start testing real workflow prompts right away.