Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Tinyfish MCP server

Vendor MCP
Open markdown

The Tinyfish MCP connector routes your AI agent's tool calls to Tinyfish's own MCP server through Scalekit. Each user signs in to Tinyfish once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 32 tools.

Tools
32
What they doRead · write · destructive
15 · 12 · 515 read12 write5 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • Automate websites: run multi-step tasks on a site from a plain-language goal, including clicks, form fills, and navigation
  • Fetch page content: render up to 10 URLs in a real browser and return clean markdown, HTML, or JSON
  • Search the web: get structured results with titles, snippets, and URLs, targeted by location and language
  • Track automation runs: check status, view step-by-step traces with screenshots, and cancel runs
  • Run browser sessions: start remote Chrome sessions to drive with Playwright, Puppeteer, or Selenium, and close them

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. 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>
  3. Create the Tinyfish MCP connection

    In AgentKit > Connections, create a Tinyfish MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Tinyfish MCP server, so you don't need to register an OAuth app.

  4. 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.actions
    const connector = 'tinyfishmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Tinyfish MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'tinyfishmcp_get_wallet',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • tinyfishmcp_batch_statusCheck the status, result, and error for up to 8 automation runs by their IDs.Read-only

    Batch Status

    Check the status, result, and error for up to 8 automation runs by their IDs.

    Inputs

    run_idsarrayrequired
    List of run IDs to cancel or check status for (up to 8).
  • tinyfishmcp_discover_runReturn the run ID of the currently active automation for the given session, or null if no run is in progress.Read-only

    Discover Run

    Return the run ID of the currently active automation for the given session, or null if no run is in progress.

    Inputs

    session_idstringrequired
    The browser session ID to look up the running automation for.
  • tinyfishmcp_fetch_contentRender up to 10 URLs in a real browser and return clean structured content (markdown, HTML, or JSON) plus metadata like title, author, and publish date.Read-only

    Fetch Content

    Render up to 10 URLs in a real browser and return clean structured content (markdown, HTML, or JSON) plus metadata like title, author, and publish date. Fetches run in parallel; per-URL errors are reported without blocking the rest.

    Inputs

    formatstringrequired
    Output format for extracted content. "markdown" (default) is ideal for LLM consumption. "html" returns cleaned semantic HTML. "json" returns a structured document tree.one of markdownhtmljsondefault markdown
    iframe_linksbooleanrequired
    Extract the src URLs of <iframe> elements on each page. Useful when a page embeds its main content in a frame (job boards, booking widgets, document viewers): fetch the returned URL to read the embedded content. Iframe links are returned as absolute, deduplicated URLs in the iframe_links array of each result. Script-injected iframes are only present when the page was rendered in a browser.default false
    image_linksbooleanrequired
    Extract all image URLs (<img src>) from each page. Useful for finding visual content or media assets. Image links are returned as absolute URLs in the image_links array of each result.default false
    linksbooleanrequired
    Extract all outbound links (<a href>) from each page. Useful for discovering related pages or navigating to specific content. Links are returned as absolute URLs in the links array of each result.default false
    page_metadatabooleanrequired
    Return page-head metadata for each page in the page_metadata object of each result: canonical URL, favicon, robots directive, generator, viewport, keywords, all Open Graph (og), Twitter card (twitter), and article tags, and remaining named meta tags under `other`. Useful for SEO/technical audits and link-preview generation.default false
    urlsarrayrequired
    Array of URLs to fetch (1-10). All URLs are fetched in parallel. Each URL is processed independently — if one fails, others still return successfully. Errors are reported per-URL in the errors array.
    exclude_selectorsarray
    Array of CSS selectors (1-20 entries, each 1-1000 characters) for elements to remove before extraction — applied before `include_selectors` scopes what remains, so it also prunes inside selected regions. Entries may themselves use CSS comma-grouping. Entries that match nothing are a no-op, never an error, but URLs that resolve to direct PDF/CSV downloads fail with `selector_unsupported`. Invalid CSS selector syntax is rejected with a 422. Applied post-fetch: caching and routing are unchanged.
    if_modified_sincestring
    Last-Modified validator from a prior fetch of this URL, forwarded verbatim as the If-Modified-Since header on the origin request. Only valid with a single URL — combining with a batch of URLs returns a 400. tf-fetch does not persist validators; the caller owns replaying them.
    if_none_matchstring
    ETag validator from a prior fetch of this URL, forwarded verbatim as the If-None-Match header on the origin request. Only valid with a single URL — combining with a batch of URLs returns a 400. tf-fetch does not persist validators; the caller owns replaying them.
    include_etag_and_last_modifiedboolean
    Opt-in to receiving `etag` / `last_modified` validators (and `not_modified` detection) on each result. Defaults to false — tf-fetch omits these fields unless requested. Independent of `if_none_match` / `if_modified_since`: works with a single URL or a batch.
    include_selectorsarray
    Array of CSS selectors (1-20 entries, each 1-1000 characters) that scope extracted content (`text`, `links`, `image_links`) to elements matching ANY entry, concatenated in document order. Tag selectors cover semantic sections (`main`, `article`, `nav`); entries may themselves use CSS comma-grouping. Selected content is returned verbatim in the requested format (scripts/styles stripped) — automatic boilerplate removal is bypassed. Page-level metadata (`title`, `description`, `language`, `author`, `published_date`) still comes from the full document. When some entries match and others do not, the URL still succeeds and the misses are reported in the result's `unmatched_selectors`. When no entry matches anything, that URL fails with the per-URL error code `selector_not_matched` (carrying `unmatched_selectors` and `candidate_selectors` retry hints) — never a silent full-page fallback. URLs that resolve to direct PDF/CSV downloads fail with `selector_unsupported`. Invalid CSS selector syntax is rejected with a 422. Applied post-fetch: caching and routing are unchanged.
    per_url_timeout_msinteger
    Wall-clock timeout budget in milliseconds applied independently to each URL. If one URL exceeds this budget, it returns a per-URL timeout error while other URLs in the same request continue.
    purposestring
    Why these URLs are being fetched — the underlying goal or task the content will be used for. Used to better tailor fetching and extraction to your intent.
    ttlinteger
    Caller freshness tolerance in seconds for the cached entry. Omit (default) for unlimited tolerance — any cached entry is acceptable. Set to 0 to prefer a live fetch; a cached entry is still served if the origin's Cache-Control: max-age covers its age, or the host is in the small allowlist of operator-pinned never-expire domains. Set to N > 0 to accept a cached entry whose age is below N; the upstream Cache-Control: max-age and the never-expire allowlist may extend (never shorten) this tolerance.
  • tinyfishmcp_get_monitorOnly use when the user asks for one Monitor.Read-only

    Get Monitor

    Only use when the user asks for one Monitor. Requires monitor_id from list_monitors or create_monitor.

    Inputs

    monitor_idstringrequired
    Id returned by list_monitors or create_monitor.
  • tinyfishmcp_get_runRetrieve status, result, error, and metadata for a specific automation run by its ID.Read-only

    Get Run

    Retrieve status, result, error, and metadata for a specific automation run by its ID.

    Inputs

    idstringrequired
    The unique run ID to retrieve or cancel.
  • tinyfishmcp_get_search_usageList past search usage records with optional filtering by date range and status, for auditing query history and credit consumption.Read-only

    Get Search Usage

    List past search usage records with optional filtering by date range and status, for auditing query history and credit consumption.

    Inputs

    limitintegerrequired
    Maximum number of results to return per page.default 100
    pageintegerrequired
    Page number for paginated results.default 1
    end_beforestring
    Return records ending before this ISO 8601 timestamp.
    start_afterstring
    Return records starting after this ISO 8601 timestamp.
    statusstring
    Filter by run or session status (e.g. completed, failed, running).one of completedfailed
  • tinyfishmcp_get_stepsRetrieve the step-by-step execution trace for an automation run, including screenshots captured at each step.Read-only

    Get Steps

    Retrieve the step-by-step execution trace for an automation run, including screenshots captured at each step.

    Inputs

    runIdstringrequired
    The unique run ID to retrieve steps or poll status for.
  • tinyfishmcp_get_walletRead-only.Read-only

    Get Wallet

    Read-only. Returns the caller's current wallet balance, auto-reload state, per-product contract rates, and any in-flight top-up. Wallet top-ups and auto-reload changes happen in the dashboard, not through this tool.

    Inputs

    This tool takes no inputs.