{
  "name": "orbita",
  "version": "1.3.0",
  "transport": "stdio",
  "command": "node",
  "args": ["src/mcp-server.mjs"],
  "tools": [
    {
      "name": "orbita_search",
      "description": "Search Orbita's index for ranked sources with their whole clean page text, links and publication dates. Modes: fast (1–5 results), standard (6–10), deep (11–25), or auto, which reads the query and picks one of them. Context can add a source-grounded Summary or Evidence.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": ["query"],
        "properties": {
          "query": { "type": "string", "minLength": 1, "maxLength": 1000, "description": "Write it in the language the pages you want are published in: the user's language for local topics (news, prices, laws, jobs), usually English for global technical documentation. Orbita does not translate; the query's language decides which language's pages rank first." },
          "mode": { "type": "string", "enum": ["fast", "standard", "deep", "auto"], "default": "standard", "description": "fast for one fact, standard for a few sources, deep for research across many; auto picks one of the three for the query and charges that mode's price." },
          "max_mode": { "type": "string", "enum": ["fast", "standard", "deep"], "description": "Only with mode auto: the deepest mode it may pick. Default deep." },
          "max_cost_usd": { "type": "number", "exclusiveMinimum": 0, "description": "Per-request USD ceiling, matching usage.cost_usd." },
          "max_results": { "type": "integer", "minimum": 1, "maximum": 25, "description": "How many results to return. Each mode has its own range: fast 1–5 (default 5), standard 6–10 (default 10), deep 11–25 (default 25); the price is the same for any count in it. Ask fast for 1–2 when one source answers (weather, an exchange rate, one fact). A count outside the mode's range is rejected with the mode to use. Leave it out with auto, which picks the count." },
          "timeout_ms": { "type": "integer", "minimum": 500, "maximum": 30000, "default": 30000 },
          "links": { "type": "string", "enum": ["none", "relevant", "all"], "default": "relevant" },
          "published_after": { "type": "string", "description": "Only pages published at or after this ISO 8601 date or date-time (the modification time when a page has no publication time). Pages without a machine-readable date are left out once a window is set." },
          "published_before": { "type": "string", "description": "Only pages published at or before this ISO 8601 date or date-time. A date alone covers that whole day (UTC)." },
          "context": {
            "type": "object", "additionalProperties": false, "required": ["enabled"],
            "properties": {
              "enabled": { "type": "boolean" },
              "strategy": { "type": "string", "enum": ["summary", "evidence"], "default": "evidence" },
              "max_tokens": { "type": "integer", "enum": [500, 1000, 2000, 4000], "default": 1000 },
              "citations": { "type": "boolean", "default": true },
              "dates": { "type": "boolean", "default": true }
            }
          }
        }
      }
    },
    {
      "name": "orbita_fetch",
      "description": "Read public pages, or a whole site section, as clean text in whole paragraphs: JavaScript rendered when needed, every PDF page, text from images (OCR). Send urls, or crawl to follow links from one start page. $0.50 per 1,000 pages; failed pages are free; robots.txt is respected.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "urls": { "type": "array", "minItems": 1, "maxItems": 20, "items": { "type": "string", "minLength": 1, "maxLength": 2048 }, "description": "The pages to read, up to 20 http(s) URLs. Send urls or crawl, not both." },
          "crawl": {
            "type": "object", "additionalProperties": false, "required": ["url"],
            "properties": {
              "url": { "type": "string", "minLength": 1, "maxLength": 2048, "description": "The start page; links are followed on the same host, nearest first." },
              "same_path": { "type": "boolean", "default": true, "description": "Stay under the start page's path." }
            }
          },
          "max_pages": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Most pages to read: default 20, or the number of urls. Only pages read are charged." },
          "images": { "type": "boolean", "default": true, "description": "Read the text in images and in scanned PDF pages." },
          "timeout_ms": { "type": "integer", "minimum": 1000, "maximum": 60000, "default": 30000 }
        }
      }
    }
  ]
}
