Manycrawl

MCP / Tools

All 29 tools

Twenty-two drive the app. Seven work its queue. When something is missing — a plan gate, an unset API key, an enrichment already running — the error names it, so read the error rather than retrying with different parameter names.

Two halves

Control is the agent as operator: it builds tables and reads them back. Those twenty-two tools need the desktop app running and signed in. Drain is the agent as worker: an AI column in the app queues a job and the agent answers it. Those seven only work on a job you have claimed. Most people only ever need the first half.

Discovery control

Find out what exists and whether the engine is up. Call engine_status first when anything fails — it answers even when the app is not reachable, which is how you tell a closed app from a broken call.

ToolReturns
manycrawl_engine_statusWhether the engine is ready: bridge, dashboardAlive, pending counts, and the signed-in plan and limits.
manycrawl_capabilitiesThe plan, the available sources, and every enrichment with whether the plan allows it and whether its API key is set.
manycrawl_list_tablesEvery table in the app: id, name, row count, source type, last updated.
manycrawl_get_tablePortable rows, flattened to plain fields, with a cursor. Carries coverage per field and a filling flag.
manycrawl_get_columnsThe columns, plus promptTokens: the exact {{…}} strings to paste into a prompt. Copy one verbatim; a column's own name is usually not a token.
manycrawl_table_statusRows, successes, errors, changed-row count, coverage, and whether the table is still filling. Each column carries lastRun — where a column that stayed empty says why. While something runs on the table, running says what; a failed search carries its reason as sourceError.
manycrawl_get_logThe Activity Log: the step-by-step lines a run writes (retries, per-row errors, blocks, “done: N rows”). Filter by table, by time (a column's lastRun.startedAt reads just that run) or by level. Newest last; kept in memory, so it starts empty when the app restarts.

Build a table control

Create rows, from a source or from a file on the same machine.

ToolReturns
manycrawl_create_sourceBuilds a list of places, companies, people, jobs or posts, or reads any page that lists things with the List scraper. Returns a tableId immediately; rows stream in after. Always makes a new table. While another Maps or Google search runs it is refused with engine_busy and nothing is created.
manycrawl_inspect_listReads a page the way the List scraper does and returns the lists it found: item count, columns with sample values, sample rows, the paging, and a ready-made recipe. For a page the List scraper got wrong, or before building from an unfamiliar one.
manycrawl_test_list_recipeRuns a list recipe against the live page (1–3 pages) and reports each column's fill, sample rows, where the next page is, and what is likely wrong. Saves nothing and bills nothing; iterate until it says good, then pass the recipe to create_source.
manycrawl_scrape_moreTops up an existing Maps, Google, Reddit, Jobs or Apollo table by resuming its source and appending deduped rows. One Maps query saturates around 80–120, so this is how you grow past that.
manycrawl_inspect_csvHeaders, row count and three sample rows from a local CSV, plus a suggested URL column to import on.
manycrawl_import_csvImports a local CSV as a new table. Takes a path, never file contents. Importing rows does not spend a monthly action.
manycrawl_delete_tableDeletes a table. Permanent, with no undo and no trash — so a table holding rows is refused unless you pass confirm:true, and one mid-run is refused outright.

Enrich control

Add columns and run them. The call returns once the column exists; the fill keeps going, so poll rather than wait.

ToolReturns
manycrawl_add_columnAdds an enrichment column to a table and, by default, runs it across the rows.
manycrawl_list_connectionsThe API connections saved in the app: id, name, the one host each is allowed to send to, and the names of its secrets. Never the secret values — no tool returns one.
manycrawl_test_http_requestTries an HTTP request column on one row and returns the request sent, the live response, and what each field picked up. Creates nothing. Run it before adding the column: a wrong JSON path otherwise gives a column that succeeds with every cell empty.
manycrawl_run_columnRuns a column that already exists. The retry path for one created with run:false, or one refused while the engine was busy.
manycrawl_stopThe Stop button, for an agent: halts whatever column fill or search is running. Rows already in flight finish and are kept; nothing new starts. Refuses if the run is on a different table than the one you name.
manycrawl_update_columnEdits a column in place and re-runs it, for refining a prompt without making a second column.
manycrawl_set_automationTable-level automation: pause and resume, a daily cap, retention, and source auto-refresh for Reddit and Jobs monitors.
manycrawl_control_statusStatus, result and error for a create_source or add_column job, by its jobId.

Worker queue drain side

The inverse. An AI column in the app queues work; the agent claims it and answers, so your Claude or Codex subscription does the reasoning instead of an API key.

ToolReturns
manycrawl_pending_countHow many jobs are waiting, so a loop knows whether to keep going.
manycrawl_next_jobClaims the next job: id, prompt, content, url, browse config, model, row hint. Long-polls up to 25 seconds, then returns { job: null } rather than hanging.
manycrawl_submit_resultSubmits the finished answer for a claimed job. The app is polling and writes it into the cell.
manycrawl_fail_jobMarks a job as impossible, for when the content is genuinely unusable. Prefer a best-effort answer.

Browse drain side

How the agent reads the web while working a claimed job. All three take the jobId from next_job — without one they return unknown jobId, so this is not a general-purpose fetcher.

ToolReturns
manycrawl_searchA web search run in the Manycrawl browser, returning results and the AI overview when there is one. Needs the app open and draining, or it times out — fall back to your own search then.
manycrawl_fetch_pageOne page through the Turbo sidecar: title, description, main content, links, emails, phones and social links. Under a job's browse limits it returns alreadyVisited or capReached instead — your signal to stop and submit.
manycrawl_get_linksJust the links on a page, without the content, for discovering sub-pages worth fetching.
Two habits worth having

Everything is async. create_source returns a tableId immediately and rows stream in. Poll table_status, and while filling is true do not report what is missing: Maps streams names and websites first, then backfills address and phone.

Quote coverage, not the page. coverage counts each field across the whole table. Counting the rows you happen to have read gives you a wrong answer on anything paginated.