{
  "id": "tinyfish.search",
  "object": "tool",
  "name": "TinyFish Web Search",
  "summary": "Search the live web, news, or research papers — free.",
  "description": "Browser-rendered search over the live web — results are never cached, so pricing pages, earnings releases, and breaking news are current at query time. Set 'domain_type' to 'web' (default), 'news' (adds publisher and date), or 'research_paper' (adds authors, venue, year, cited_by_count, and pdf_url). Filters cover geo ('location') and 'language', domain allow/block lists ('include_domains' / 'exclude_domains'), a freshness window ('recency_minutes') or calendar bounds ('after_date' / 'before_date'), publication-year bounds for papers, and paging ('page', 0-10). Pass 'purpose' — a short statement of the task the results are for — to sharpen ranking. Returns position, title, url, site_name, and snippet per result. Snippets only: this endpoint does not return page content — pipe the result URLs into TinyFish /fetch, which is also free, when you need the full text.\n\nRaw tinyfish#/search endpoint: input is { body, queryParams, pathParams } as the provider documents them (https://docs.tinyfish.ai/search-api/reference).",
  "category": "web",
  "hosted_by": "TinyFish",
  "runtime": "partner",
  "side_effects": false,
  "status": "live",
  "credits": 0,
  "price": "$0.0000",
  "providers": [
    {
      "id": "tinyfish",
      "name": "TinyFish",
      "price": "$0.0000"
    }
  ],
  "mcp_name": "tinyfish_search",
  "input_schema": {
    "type": "object",
    "properties": {
      "queryParams": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "description": "Search query. Accepts natural language and still honours site:/-site: operators, though include_domains / exclude_domains are preferred because they do not collide with other query syntax. Example: 'NVIDIA Q4 FY2025 revenue'."
          },
          "purpose": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000,
            "description": "Optional short statement of the task these results are for — the goal behind the request, not the request itself. TinyFish uses it as an extra ranking signal. Example: 'Compare pricing tiers across vendors for a procurement report'. Max 2000 characters."
          },
          "location": {
            "description": "Country code for geo-targeted results. Example: US, GB, FR, DE. Auto-resolves from `language` when omitted; defaults to US if neither is set.",
            "type": "string",
            "minLength": 1
          },
          "language": {
            "description": "Language code for result language. Example: en, fr, de. Auto-resolves from `location` when omitted; defaults to en if neither is set.",
            "type": "string",
            "minLength": 1
          },
          "include_domains": {
            "description": "Comma-separated domains to restrict results to. Example: github.com,arxiv.org.",
            "type": "string",
            "minLength": 1
          },
          "exclude_domains": {
            "description": "Comma-separated domains to exclude from results. Example: pinterest.com,quora.com.",
            "type": "string",
            "minLength": 1
          },
          "recency_minutes": {
            "description": "Freshness window in minutes, relative to now. Example: 60 for the last hour. Cannot be combined with after_date or before_date, and is not supported for domain_type=research_paper.",
            "type": "integer",
            "minimum": 1,
            "maximum": 5256000
          },
          "after_date": {
            "description": "Lower calendar bound, YYYY-MM-DD (must be a real calendar date). Example: 2026-06-01. Cannot be combined with recency_minutes, and is not supported for domain_type=research_paper.",
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "before_date": {
            "description": "Upper calendar bound, YYYY-MM-DD (must be a real calendar date, on or after after_date). Example: 2026-06-18. Cannot be combined with recency_minutes, and is not supported for domain_type=research_paper.",
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "domain_type": {
            "description": "Corpus to search. 'web' (default) returns general results; 'news' adds publisher and date; 'research_paper' searches academic work and adds authors, venue, year, cited_by_count, and pdf_url.",
            "type": "string",
            "enum": [
              "web",
              "news",
              "research_paper"
            ]
          },
          "pub_year_min": {
            "description": "Inclusive lower publication-year bound (must not exceed pub_year_max). Only supported for domain_type=research_paper. Example: 2017.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9999
          },
          "pub_year_max": {
            "description": "Inclusive upper publication-year bound. Only supported for domain_type=research_paper. Example: 2024.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9999
          },
          "page": {
            "description": "Zero-indexed result page. Example: 2 returns the third page. Maximum 10.",
            "type": "integer",
            "minimum": 0,
            "maximum": 10
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      }
    },
    "required": [
      "queryParams"
    ],
    "additionalProperties": false
  },
  "kind": "endpoint"
}