{
  "id": "keenable.v1.search",
  "object": "tool",
  "name": "Keenable Search",
  "summary": "Search the web and get ranked results with page snippets.",
  "description": "Search Keenable's web index and return ranked results with title, URL, description, and an extracted snippet of page text. Restrict to a site, filter by publication date or when the page was indexed, search the index as it stood at a point in time (`query_time`), cap snippet length (180–10000 characters) and result count (1–50, default 10), and pick a `pro` (deeper) or `realtime` (fastest) mode. Phrase the query as a description of the page you want. Pipe result URLs into Keenable /fetch when you need the full page as markdown.\n\nRaw keenable#v1/search endpoint: input is { body, queryParams, pathParams } as the provider documents them (https://docs.keenable.ai/api-reference/search).",
  "category": "web",
  "hosted_by": "Keenable",
  "runtime": "partner",
  "side_effects": false,
  "status": "live",
  "credits": 0,
  "price": null,
  "providers": [
    {
      "id": "keenable",
      "name": "Keenable",
      "price": null,
      "own_key_only": true
    }
  ],
  "mcp_name": "keenable_v1_search",
  "input_schema": {
    "type": "object",
    "properties": {
      "body": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "description": "The search query. Natural language; describe the page you want."
          },
          "site": {
            "type": "string",
            "minLength": 1,
            "description": "Restrict results to a specific site, e.g. 'techcrunch.com' or 'arxiv.org'."
          },
          "acquired_after": {
            "type": "string",
            "minLength": 1,
            "description": "YYYY-MM-DD (whole day UTC: an _after bound starts at 00:00:00, a _before bound ends at 23:59:59.999), an ISO 8601 timestamp (no offset means UTC), or a relative delta such as 7d, 2w, 30min, 6mo, 1y (units: min, h, d, w, mo, y; truncated to the minute)."
          },
          "acquired_before": {
            "type": "string",
            "minLength": 1,
            "description": "YYYY-MM-DD (whole day UTC: an _after bound starts at 00:00:00, a _before bound ends at 23:59:59.999), an ISO 8601 timestamp (no offset means UTC), or a relative delta such as 7d, 2w, 30min, 6mo, 1y (units: min, h, d, w, mo, y; truncated to the minute)."
          },
          "published_after": {
            "type": "string",
            "minLength": 1,
            "description": "YYYY-MM-DD (whole day UTC: an _after bound starts at 00:00:00, a _before bound ends at 23:59:59.999), an ISO 8601 timestamp (no offset means UTC), or a relative delta such as 7d, 2w, 30min, 6mo, 1y (units: min, h, d, w, mo, y; truncated to the minute)."
          },
          "published_before": {
            "type": "string",
            "minLength": 1,
            "description": "YYYY-MM-DD (whole day UTC: an _after bound starts at 00:00:00, a _before bound ends at 23:59:59.999), an ISO 8601 timestamp (no offset means UTC), or a relative delta such as 7d, 2w, 30min, 6mo, 1y (units: min, h, d, w, mo, y; truncated to the minute)."
          },
          "query_time": {
            "type": "string",
            "minLength": 1,
            "description": "YYYY-MM-DD (whole day UTC: an _after bound starts at 00:00:00, a _before bound ends at 23:59:59.999), an ISO 8601 timestamp (no offset means UTC), or a relative delta such as 7d, 2w, 30min, 6mo, 1y (units: min, h, d, w, mo, y; truncated to the minute)."
          },
          "snippet_max_length": {
            "type": "integer",
            "minimum": 180,
            "maximum": 10000,
            "description": "Maximum length, in characters, of the snippet returned per result (180–10000). When omitted, a default snippet length is used."
          },
          "max_results": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Maximum number of results to return (1–50). When omitted, up to 10 results are returned."
          },
          "mode": {
            "type": "string",
            "description": "Search mode: 'pro' (default) for deeper retrieval, 'realtime' for the fastest results. Same price."
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": {}
      }
    },
    "required": [
      "body"
    ],
    "additionalProperties": false
  },
  "kind": "endpoint"
}