What do I need before an AI tool can use these tools?
The server address is
https://app.loopster.ai/api/mcp.The AI tool signs in through OAuth, or it sends an API key in the header
Authorization: Bearer loopster_sk_….You make a key in the app. Open Settings, then Loopster API. See Create and revoke a Loopster API key.
With an API key, the tools work in the one workspace that owns the key.
A key has a role: Member — read only, Editor — read, write and run or Admin — everything an API key can do. Some tools need an Editor or Admin key. See "Which tools need more than a Member key?" below.
Which tools does the server have?
The server has 92 tools. This section lists all of them, grouped by job. A line says so when a tool can spend from your wallet. "Which tools can spend from my wallet?" further down lists them in one place.
Find tables and data
These tools look things up.
list_tables: lists the tables in your workspace, newest first.get_table: shows one table with its columns and its settings, including Auto-run (the tools call itautoplay).list_workbooks: lists your workbooks. Every table is in exactly one workbook.list_folders: lists your folders. A folder holds workbooks.list_columns: lists a table's columns and how each one is set up.list_views: lists a table's saved views. An empty list is normal.list_contexts: lists the ICPs, company descriptions and tier lists that columns read. It shows titles and kinds, not the text.
Tables and columns
These tools create and change tables, columns and views.
create_table: makes a table. Blank, webhook and search tables are free. Any other starter type runs its source while the table is created, and spends from your wallet.rename_table: changes a table's title.delete_table: moves a table to Trash. It does not stop work that is already running, so callstop_runfirst.move_table: files a table into a workbook.create_workbook: makes an empty workbook, at the top level or in a folder.move_workbook: moves a workbook and its tables into a folder.create_folder: makes an empty folder.set_table_autoplay: turns the table's Auto-run on or off. Switching it on does not run the rows already in the table.set_table_auto_dedupe: skips or deletes rows whose value in one column matches another row's.set_table_create_columns_from_keys: lets a new key in inserted rows become a new column. It is off by default.list_column_templates: lists the templates you can create columns from. You can filter bytype,providerortab.get_column_template: shows one template with its settings and defaults.create_column: makes a column from a template. An AI column made from a model template has no prompt, and it does not run until you set one.create_columns: makes up to 20 columns in one call. It is all or nothing.update_column: changes a column's header or setup. A column's setup decides what it costs, so set it before you run it.delete_column: deletes a column and all its cells.create_viewandupdate_view: save how a table is displayed, with its own filters, sort order and visible columns.update_viewreplaces the filters, sorting or visible columns you send. It does not merge them.delete_view: deletes a saved view.
Rows and files
These tools read and write rows, and move files in and out.
insert_rows: adds rows. One call carries at most 25,000 rows. If the table's Auto-run is on, inserting also starts enrichment and spends from your wallet.list_rows: reads rows a page at a time, with each cell's status and any error.get_row: reads one row in full, with every cell's value and status, and the error message if a cell failed.update_row: writes values into one row. Its description says that on a table with auto-rerun columns, writing a cell also re-queues the columns that read it, which spends from your wallet.update_cells: writes many cells across rows in one call. On a table with auto-rerun columns, it re-queues the columns that read the changed cells in the same way asupdate_row, which spends from your wallet.delete_rows: deletes rows by id. There is no "delete every row" form.create_upload_link: gives you an address to upload one CSV or JSON-lines file.import_file: imports an uploaded file into a table and returns ajobId. It starts no enrichment and costs nothing.get_job: checks an import. Call it untilstatusiscompleteorfailed.export_table: exports a table, or what one view shows, ascsvorjsonl. It costs nothing.get_export: checks an export and gives the download link when it iscomplete. The link works for an hour at most.
Running and results
These tools start enrichment and show what happened.
estimate_trigger_cost: prices a run without running it or spending anything.trigger_rows: starts enrichment on rows and returns arunIdstraight away. It spends from your wallet. WithoutrowIdsit runs every row in the table.get_run: reports on one run.get_status: reports progress for the whole table, including other runs.list_run_items: shows each row's state in one run.list_runs: lists your workspace's runs, newest first.stop_run: stops all ongoing processing for a table. It does not refund work that was already charged.cancel_run: cancels one run by itsrunId. It removes that run's queued work.get_waterfall_trace: explains why a waterfall cell is empty or holds something unexpected, including every provider the waterfall tried, in order. It only reads. It never re-runs anything.
Functions
A function is a reusable workflow. A new function is always a draft. To let agents run it, an admin key calls publish_function and then set_function_agent_access. A capability is a single enrichment action you can run without building a table.
Running:
list_functions: lists the functions that are published, active and open to agents.run_function: runs a function on one input or a list of up to 1,000. It spends from your wallet.get_function_run: checks a function run. Poll it untilstatusis no longerrunning.list_capabilities: lists the enrichment actions you can run without a table. The list is the same for every workspace.run_capability: runs one enrichment action on one input or a list of up to 1,000, with no table. It spends from your wallet unless it runs on your own connection.
Building:
create_function: creates a function as a draft.get_function: shows one function in any state, drafts included.open_function_sandbox: opens a sandbox, which is a copy of the function's steps that you edit. What callers run stays the same until you publish.add_function_input,update_function_inputandremove_function_input: change the function's inputs. They need an open sandbox.add_function_step,update_function_stepanddelete_function_step: change the function's steps in the open sandbox. Only some kinds of step can be added this way. Anything else is refused by name and nothing is stored.set_function_outputs: sets the whole list of columns the function sends back.publish_function: makes the draft live. A live publish needs an admin key. Call it withdryRun: truefirst, which an editor key may do.set_function_agent_access: opens a function to agents, or closes it. It needs an admin key.delete_function: moves a function to Trash for 30 days.
Search
These tools find people and companies in Loopster Data.
list_search_filters: lists the filters for people or companies and the values each one accepts. Call it before you search.search_people: finds people. It returns up to 50 records per call and is free to call.search_companies: finds companies. It returns up to 50 records per call and is free to call.
The records are ready to pass to insert_rows. They carry no email addresses or phone numbers. To get those, add a Loopster Data email or phone finder column to the table.
Webhooks
There are two kinds. An outbound webhook makes Loopster call your https URL when one of your runs settles. An inbound webhook gives a table an address that other systems can send rows to.
Outbound:
create_webhook: registers an https URL. The only event today isrun.settled, and the body never holds cell values.list_webhooks: lists your outbound endpoints. It never shows the whole URL or the signing secret.test_webhook: sends one signedpingnow and reports what your receiver answered.list_webhook_deliveries: shows an endpoint's delivery log. It is kept for 30 days.delete_webhook: removes an endpoint and its delivery log.
Inbound:
get_table_webhook: tells you whether a table has an inbound address, by its last four characters. It never returns the URL.rotate_table_webhook: makes a new inbound address for a table. The previous address stops working immediately. The new URL is shown only in this answer, so keep it.
Schedules
A schedule re-runs chosen columns on a table.
list_schedules: lists a table's schedules. Times are in UTC.create_schedule: runs chosen AI, API or task columns daily, weekly, monthly or at an interval of at least one hour. It spends from your wallet every time it fires, with nobody watching, until you pause or delete it. Usepaused: trueto save one without starting it.update_schedule: changes a schedule. Settingpaused: falsestarts it again, and it spends from your wallet when it fires.delete_schedule: deletes a schedule. A run it already started is not stopped.
You can open and change these schedules in the app too. Open Table settings and look under Scheduled column reruns. See Table settings: Auto-run, scheduled reruns and deduplication.
Sharing
A share link is public and read-only. Anyone who has it can open the whole table without signing in.
create_share_link: makes the link. It can expire anywhere from 60 seconds to a year after you make it, or work until you revoke it.list_share_links: lists the live links, newest first.revoke_share_link: stops a link at once. A revoked link cannot be turned back on.
Money and usage
get_wallet: shows how much the next run can spend, your plan and any spend limit on the workspace. Amounts are in US dollars.get_usage: shows what the workspace actually spent, by table, by column or by day.
Connections
Connections are the provider accounts your workspace runs task columns on. You add them in the app, not with a tool.
list_connections: lists the accounts your workspace can run task columns on.test_connection: asks the provider whether a saved key is still accepted. It never returns the key.remove_connection: removes a connection that no table uses. It refuses OAuth connections such as HubSpot and Slack. You remove those in the app.list_provider_defaults: shows which account each provider runs on when a column names none.set_provider_default: chooses that account for a provider. Choosing Loopster's account makes the columns you create afterwards run on it and spend from your wallet. Existing columns keep the account they were saved with.clear_provider_default: removes that choice.
Trash
list_trash: lists what Trash holds: tables deleted on their own, workbooks and functions. Each one shows the date it is deleted for good.restore_from_trash: brings an item back by its id. A workbook comes back with its tables. Nothing runs and nothing is billed.
Deleted items are kept for 30 days. See Restore deleted tables and functions from the Trash.
Feedback
send_feedback: sends a message to the Loopster team about a problem with the API. It does not open a support ticket, and nothing answers it in the conversation. Do not put secrets or personal data in it. To talk to a person, click Need Help? at the top right of any page in the app.
In what order should an AI tool use the tools?
This order prices a run before it starts and tests a few rows before it runs the rest.
Look around.
list_tablesfinds the table.get_tableshows its columns and settings. The tool checks Auto-run before any rows go in, because inserting rows into a table with Auto-run on starts enrichment and spends from your wallet.Add data. For rows, it uses
insert_rows. For a file, it usescreate_upload_link, uploads the file within two hours, then callsimport_fileandget_jobuntil the import finishes. For people or companies from Loopster Data, it callslist_search_filters, thensearch_peopleorsearch_companies, theninsert_rowswith the records.Set up columns.
list_column_templatesandcreate_columnadd a column. The tool reads the column withlist_columnsbefore it changes it withupdate_column, and it sets the column's prompt or settings before anything runs.Price the run.
estimate_trigger_costsays what the run could cost. Nothing runs.Run a few rows first.
trigger_rowswith a fewrowIdsstarts the run and answers at once with arunId.Follow the run.
get_runreports on that run.get_statusreports on the whole table. Enrichment can take minutes, so the tool checks again until the run settles.list_run_itemsshows which rows failed.Read the results.
list_rowsshows values with each cell's status and error.get_rowshows one row in full.get_statussays how many cells errored but not why, so the tool reads the failed row withget_rowto get the message. For an empty waterfall cell it can callget_waterfall_trace.Run the rest, or stop. The tool runs the remaining rows. If something looks wrong, it calls
stop_runorcancel_run.Take the data out.
export_tablestarts the export.get_exportgives the download link.
How do I see what a run will cost before it starts?
Ask your AI tool to call estimate_trigger_cost. It takes the same arguments as trigger_rows. It runs nothing and spends nothing.
maxCostUsdis a ceiling, not a forecast. It comes with a breakdown for each column.The
walletblock showsspendableUsd, how many rows your wallet covers (rowsCovered) and whether the run would start at all (wouldStart).Columns whose price cannot be known before the run are left out of
maxCostUsd.unpricedColumnssays how many.Run conditions are not evaluated, so fewer rows than quoted may run, never more.
Rows whose cells already hold a finished answer are left out, unless you ask for
force.
trigger_rows also takes a maxCostUsd cap. If the estimate is higher than the cap, nothing is queued. The cap is a check at the start, not a meter. A run that has started is not stopped part way.
For the same habit in the app, see Your wallet and keeping spend under control.
Which tools can spend from my wallet?
Your wallet holds real dollars, not credits. These tools say they spend from it:
trigger_rowsruns enrichment on rows. WithoutrowIdsit runs every row in the table.run_functionbills every step inside the function as it would bill in a table, for every input.run_capabilitybills each input as the same column would bill in a table, unless it runs on your own connection.create_schedulespends every time the schedule fires, with nobody watching, until you pause or delete it.update_schedulewithpaused: falsestarts a schedule again, and it spends when it fires.
These tools spend only in some cases:
create_tablespends when you pick a starter type other than blank, webhook or search.insert_rowsspends when the table's Auto-run is on, because inserting then starts enrichment. Rows that another system sends to a table's webhook address are handled in the same way.update_rowandupdate_cells: their descriptions say that on a table with auto-rerun columns, writing a cell re-queues the columns that read it, which spends from your wallet.set_provider_defaultwith Loopster's account makes the columns you create afterwards run on Loopster's account and spend from your wallet.
A column's setup decides what it costs. A column left on a template's defaults runs on those defaults and bills for them. An AI column with no prompt does not run at all.
These tools and cases cost nothing, as the tool descriptions say:
search_peopleandsearch_companies.estimate_trigger_cost, which prices a run without running it.export_table.import_file. Importing starts no enrichment.rename_table.restore_from_trash. Nothing runs and nothing is billed.create_view,update_view,create_share_linkandlist_provider_defaults.set_table_auto_dedupeandset_table_create_columns_from_keys. The switch itself runs and spends nothing.create_tablefor a blank, webhook or search table.insert_rowson a table with Auto-run off. It only writes rows, and nothing runs or spends until you calltrigger_rows.
The tools that build functions are on neither list. In the app, the Add test inputs dialog in the function editor says the steps are charged to your wallet exactly as they are live, so do not assume a test is free. See Functions and Sandbox Mode.
Other tools are on neither list. This article only calls a tool free when its own description says so.
What happens if my wallet runs short?
Paid work holds its worst-case cost from your wallet before it runs, and is charged what it really cost, never more.
If a run is bigger than your wallet, rows run in order while the wallet covers them. The rest are refused, not run. Their cells show a not-enough-balance error, and nothing is charged for them. The wallet is never overdrawn.
If the wallet cannot cover even the first row, the call is refused before anything is queued.
The API docs describe the same rules for the matching API call, Trigger Processing:
How do I stop a run that is spending?
Ask your AI tool to call stop_run for a whole table, or cancel_run for one run. Neither one is a refund. Work that was already charged stays charged, and work that was already running finishes and is billed.
stop_run reports stillRunning, the number of cells that may still run and bill. A stillRunning of null means unknown, not zero. Cancelling a run that already finished, or cancelling twice, changes nothing.
The API docs say the same about cancelling a run:
Deleting a table does not stop work that is already running. Stop the run first, or the queued work finishes and bills against a table in Trash.
What example requests can I type to my AI tool?
Look around:
"List my Loopster tables and tell me which ones have Auto-run on."
"Show me the columns in {table name} and how each one is set up."
Find people:
"Search Loopster Data for people with the job title Head of Sales at companies with 51-200 employees. Show me 25. Do not add anything to a table yet."
"Create a blank table with Auto-run off and add those people to it."
Price and run:
"What would it cost to run every column on all rows in {table name}? Do not run anything."
"Run {column name} on the first 5 rows only, then show me the results and any errors."
"The {waterfall column name} cell on the first row is empty. Show me which providers were tried."
Check spend and get data out:
"How much can my next run spend, and what did my workspace spend by day?"
"Export {table name} as a CSV and give me the download link."
"Make a public, read-only link to {table name} that stops working after 7 days."
"Set up a schedule on {table name} that re-runs {column name} every Monday at 09:00 UTC. Save it paused."
Three habits help. Ask for the price first. Test on a few rows before you run the rest. Say "do not run anything" when you only want a price or a look. See Run columns safely: Auto-run, test one row, then run the rest.
What can an AI tool not do?
The tools above cannot do these jobs. You do the first four in the app. The last one uses an API call.
Create or revoke an API key. There is no tool for it. Open Settings, then Loopster API.
Add a connection. Open Settings, then Connections, then click Create.
Remove an OAuth connection such as HubSpot or Slack.
remove_connectionrefuses these. You remove them in the app.Create a context. Open Settings, then AI context.
Rotate the signing secret of an outbound webhook endpoint. This is not offered as a tool, so a new secret never passes through an AI model. Use the API call
POST /v1/webhook-endpoints/{endpointId}/rotate-secretinstead.
Which tools need more than a Member key?
A key's role is Member — read only, Editor — read, write and run or Admin — everything an API key can do. These tool descriptions say they need an Editor key:
create_function,open_function_sandbox,set_function_outputsadd_function_input,update_function_input,remove_function_inputadd_function_step,update_function_step,delete_function_stepcreate_share_link,list_share_links,revoke_share_linkset_provider_default,clear_provider_default,remove_connectionget_table_webhook,rotate_table_webhook
These need an Admin key:
set_function_agent_accesspublish_function, when it makes a function live. A dry run works with an Editor key.delete_function, for a published function. A draft needs only an Editor key.
This list is not complete. Other tools can check a role too. If a call is refused because of the role, the refusal says which role it needs.
Troubleshooting
A run is refused because of money
What you see: The run does not start. The answer has a code of insufficient_balance, workspace_limit or daily_cogs_limit, with requiredUsd and spendableUsd.
Why it happens: Nothing was created, queued or charged. insufficient_balance means the wallet cannot cover even the first row. workspace_limit means the workspace's own spend limit leaves less than the wallet holds. daily_cogs_limit means the account reached its daily spend safety limit.
What to do:
For
insufficient_balance, add funds or ask for less. Click the wallet button at the top right, then Manage wallet. Settings opens on Plan & billing, on the Wallet tab, which has a Top up button. See Your wallet and keeping spend under control.For
workspace_limit, open Settings, then Workspaces, click the workspace and change its Spend limit with Set spend limit. Or ask for less. See Workspaces: create one and set a spend limit.For
daily_cogs_limit, topping up does not lift it, and asking for less does not help. It resets at midnight UTC, and Loopster support can raise it. Click Need Help? at the top right. See Contact support.
The rows are in the table but nothing ran
What you see: insert_rows worked, but the cells stay empty.
Why it happens: insert_rows stores the rows in every case. Whether enrichment started is in its answer, in the enrichment field:
started: the run was handed over and at least one column runs.none: nothing was meant to run. Auto-run may be off, or the table may have no column that an automatic run starts. An AI column needs its prompt, for example.not_started: Loopster could not hand the run to its workers.unknown: the run was sent but not confirmed, so the rows may or may not be running.
What to do:
On
not_started, calltrigger_rowswith the ids inrowsToTrigger. Do not insert again, because the rows are already in the table.On
unknown, callget_statusbefore you trigger, so the rows are not run twice.On
none, check Auto-run withget_table. With Auto-run off, nothing runs until you calltrigger_rows. Also check the column. See Why didn't my column run?.
Fewer rows started than I asked for
What you see: trigger_rows answers, but triggeredCount is lower than the number of rows you asked for.
Why it happens: triggeredCount counts the rows that were actually queued. triggeredCount + deduplicated + rejected + unavailable adds up to the rows you asked for.
deduplicatedrows already had a run in progress. Nothing extra is charged for them.rejectedrows were refused because the queue is full. They did not start and will not start on their own.unavailablerows could not be confirmed, so they may or may not have started.
What to do: Trigger the rejected rows again. Retrying rows without force is safe, because a row that did start counts as deduplicated. Retrying a forced run (force: true) can start it twice.
A tool says my key's role is too low
What you see: A call is refused with a 403. The answer carries requiredRole and role.
Why it happens: Your key's role is below what the tool needs. requiredRole is the role the tool needs: member, editor or admin. role is the role your key holds.
What to do: Make a key with the role the tool needs, and give that key to your AI tool. Open Settings, then Loopster API. Give a key the least access it needs.
A tool says my key has expired
What you see: A call is refused with a 401 and code: key_expired. The expiry date is in the error text.
Why it happens: The key is past its expiry date. You choose the expiry when you create a key, and it cannot be changed afterwards.
What to do: Create a new key under Settings, then Loopster API. A schedule made with the old key is paused automatically if the key expires before the schedule fires. Its pausedReason then says key_expired.
A call is refused with a 429
What you see: A call is refused with a 429.
Why it happens: A rate limit was reached and nothing was done. Calls made through MCP count toward your workspace's API rate limits, like other authenticated calls. The code says which wait it is:
rate_limited: any of the rate-limit windows.search_concurrency: too many searches are running at once.search_busy: Loopster Data itself is busy.provider_busy: acreate_tablestarter found a provider on Loopster's account at its limit, or paused after a burst of its errors. Nothing was charged.
What to do: Wait the number of seconds the refusal gives in Retry-After, then send the call again.
list_functions returns an empty list
What you see: list_functions returns nothing, or a function you made is not in the list.
Why it happens: The list shows only functions that are published, active and open to agents. A draft, a function that is not open to agents yet, and a function with a sandbox open are not listed. An empty list does not mean you lack access.
What to do: Call get_function to see where the function stands. To open a function to agents, an admin key calls publish_function and then set_function_agent_access.
Good to know
Over MCP, the table setting that the app calls Auto-run is called
autoplay.get_tableshows it.These tools take a column's name as shown in the table, or its id:
update_column,delete_column,update_cells,update_row,trigger_rowsandget_waterfall_trace.Six read tools take a
response_format:list_tables,get_table,list_columns,list_rows,get_rowandget_status.detailedis the default and returns the full answer.concisekeeps answers short. Usedetailedbeforeupdate_column, because changing a column needs its current setup.To retry safely, give the call an
idempotencyKey. These tools take one:create_table,insert_rows,update_row,update_cells,trigger_rows,run_capabilityandrun_function. If you repeat a call with the same key within 24 hours, you get the first answer back, markedreplayed: true, and nothing runs or bills twice. Use a new key for a new action.Adding to a cell with
update_cellsinappendmode is not safe to retry. A retried append adds the text twice, so send anidempotencyKeywhenever you may retry.delete_tableanddelete_functiongo to Trash for 30 days.delete_rows,delete_columnanddelete_viewdo not go to Trash. Ask your AI tool to check with you before it deletes them.A run is kept for 30 days, and a workspace keeps its 500 most recent runs. After that, the
runIdis not found.The docs list every tool with its arguments. See MCP Tools.
More about the API and MCP


