← MCP Security Catalog

octen-mcp 0.5.1

npm · octen-mcp · latest release

Verified with no proven findings
Security result
6
Observed tools
Version rating
Change risk

Independent inventory

Observed 2026-09-01T08:39:14.323Z using mcpSecurity-inventory. Protocol 2025-06-18.

ToolCategoryRisk
broad_searchSearch the web across many angles in one call — for comparisons, research, surveys, and questions with several distinct parts. Expands your question into multiple sub-queries and runs them concurrently. USE WHEN the question has multiple distinct parts or entities that one search cannot cover: - comparing vendors / products / pricing across many sources - literature reviews, market or landscape surveys - open-ended "what are the options for X" / "how do people solve Y" - a question that clearly decomposes into 3+ independent sub-questions - multi-angle questions about recent events ("what shipped across the industry this month") — set topic=news, do NOT loop news_search DO NOT USE for: - a single fact, entity, or document → use `search` - re-running a disappointing search → do NOT call broad_search twice; follow up with a targeted `search` or `extract` on the specific gaps - reading a page you already have the URL for → use `extract` - a straight A-vs-B comparison of two known entities → two targeted `search` calls are cheaper and more controllable COST: fans out into `max_queries` concurrent searches — roughly Nx the cost and notably higher latency than a single `search`. When in doubt, prefer `search`. QUERY: pass one natural-language question (max 500 chars). Resolve pronouns and references from the conversation first — "how does it compare to the other one" is a useless query. Do NOT pre-split into sub-queries; that is this tool's job. For broader coverage raise `max_queries` rather than calling repeatedly. Per-sub-query options (count, topic, `language` filter, domain / text filters, time window, highlight / full_content, media) match `search` and apply to every sub-query. RESULTS are grouped per sub-query and NOT deduplicated — the same URL may appear under several sub-queries. max_queries: 3-5 focused comparison (2-3 entities) | 5-10 multi-facet research | 10-20 landscape scan | 20-30 exhaustive survey For a single focused lookup use `search`; to read a specific page use `extract`. keywords: web search, search the web, look up, find information, research, compare, comparison, versus, alternatives, options, landscape, survey, market research, pricing, latest, current information, multi-part question
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 500,
      "description": "Search query. Max 500 chars."
    },
    "max_queries": {
      "type": "integer",
      "minimum": 1,
      "maximum": 30,
      "default": 5,
      "description": "Upper bound on the number of sub-queries generated (1-30). Default 5 — raise toward 30 for surveys / deeper research, lower for a tighter search."
    },
    "topic": {
      "type": "string",
      "enum": [
        "general",
        "news"
      ],
      "default": "general",
      "description": "Search category: `general` for broad web search, `news` for news-focused results. Default general."
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 5,
      "description": "Number of results to return (1-100). Default 5."
    },
    "include_domains": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 1200,
      "description": "Only return results from these domains (e.g. 'arxiv.org'). Max 1200, each ≤60 chars."
    },
    "exclude_domains": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 1200,
      "description": "Drop results from these domains. Max 1200, each ≤60 chars."
    },
    "include_text": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 30
      },
      "maxItems": 5,
      "description": "Only return results whose content contains all of these strings. Max 5, each ≤30 chars."
    },
    "exclude_text": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 30
      },
      "maxItems": 5,
      "description": "Drop results whose content contains any of these strings. Max 5, each ≤30 chars."
    },
    "time_basis": {
      "type": "string",
      "enum": [
        "auto",
        "published",
        "crawled"
      ],
      "default": "auto",
      "description": "Which timestamp the time window filters against: page `published` date, last `crawled` date, or `auto`. Default auto."
    },
    "time_range": {
      "type": "string",
      "enum": [
        "day",
        "week",
        "month",
        "year",
        "d",
        "w",
        "m",
        "y"
      ],
      "description": "Relative time window (e.g. `week`, `month`). Mutually exclusive with `start_time`/`end_time` — if both are given, the absolute range wins."
    },
    "start_time": {
      "type": "string",
      "description": "Lower bound for the time window, ISO 8601 (e.g. '2025-01-01T00:00:00Z')."
    },
    "end_time": {
      "type": "string",
      "description": "Upper bound for the time window, ISO 8601."
    },
    "format": {
      "type": "string",
      "enum": [
        "text",
        "markdown"
      ],
      "default": "text",
      "description": "Format of returned content. Default text."
    },
    "safesearch": {
      "type": "string",
      "enum": [
        "off",
        "strict"
      ],
      "default": "strict",
      "description": "Adult-content filter. Default strict."
    },
    "language": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "ar",
          "de",
          "en",
          "es",
          "fr",
          "hi",
          "id",
          "it",
          "ja",
          "ko",
          "nl",
          "pl",
          "pt",
          "ru",
          "th",
          "tr",
          "vi",
          "zh"
        ]
      },
      "default": [],
      "description": "Languages to filter results by, as ISO 639-1 codes. Empty = no filter."
    },
    "highlight": {
      "type": "object",
      "description": "Return a ranked highlighted snippet per result. Omit to use the server default.",
      "properties": {
        "enable": {
          "type": "boolean",
          "default": true,
          "description": "Whether to return highlights."
        },
        "max_tokens": {
          "type": "integer",
          "minimum": 100,
          "maximum": 20000,
          "default": 512,
          "description": "Max tokens per highlight snippet (100-20000)."
        }
      }
    },
    "full_content": {
      "type": "object",
      "description": "Return the cleaned full page body per result. Heavier than `highlight` — use only when the snippet isn't enough. Omit to use the server default (off).",
      "properties": {
        "enable": {
          "type": "boolean",
          "default": false,
          "description": "Whether to return full content."
        },
        "max_tokens": {
          "type": "integer",
          "minimum": 100,
          "maximum": 100000,
          "default": 2048,
          "description": "Max tokens of full content per result (100-100000)."
        }
      }
    },
    "include_images": {
      "type": "boolean",
      "default": false,
      "description": "Return image URLs (and a cover image) found on each result page."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1,
      "maximum": 300,
      "description": "Request timeout in seconds (1-300). Defaults to 120s if unset. Raise it for large `max_queries` surveys, which legitimately take longer."
    }
  },
  "required": [
    "query"
  ]
}
Annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
extractRead one or more web pages by URL and return clean, LLM-ready content (markdown or text). By default (no `query`) it returns each page's full content — this is what you want in almost all cases. Only pass `query` when the user explicitly asks to fetch relevance-ranked snippets for a specific topic; doing so returns highlights INSTEAD of the full body, so the content will be partial. Every result also includes a `category` (topical) and `page_structure` (typology) classification. Bare hosts like 'octen.ai' are auto-normalized to https. Cached when fresh. Use this when you already have the URL(s). To find pages first, use `search` or `broad_search`. keywords: read page, fetch url, scrape, page content, article text, parse webpage, extract, read article, url content, open link
Input schema
{
  "type": "object",
  "properties": {
    "urls": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 2048
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "URLs to extract. 1-20 per call, each ≤2048 chars. Bare hosts ok."
    },
    "query": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional — leave UNSET in the normal case. When unset, each result returns the page's `full_content` (the complete text). Only set this when the user explicitly wants relevance-ranked snippets for a specific query/topic: setting it makes each result return `highlights` (ranked excerpts) and OMIT `full_content`, so the page body will be incomplete. Do not pass it just to focus a normal fetch."
    },
    "max_age_seconds": {
      "type": "integer",
      "minimum": 300,
      "maximum": 31536000,
      "default": 86400,
      "description": "Maximum age of cached content in seconds. Default 24h. Lower this for time-sensitive pages (news / prices)."
    },
    "format": {
      "type": "string",
      "enum": [
        "markdown",
        "text"
      ],
      "default": "markdown",
      "description": "Output format. Default markdown."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60,
      "default": 30,
      "description": "Per-URL timeout in seconds (1-60)."
    },
    "include_images": {
      "type": "boolean",
      "default": false,
      "description": "Return image resources found on each page (also enables `cover_image` when the page has one)."
    },
    "include_videos": {
      "type": "boolean",
      "default": false,
      "description": "Return video URLs found on each page."
    },
    "include_audio": {
      "type": "boolean",
      "default": false,
      "description": "Return audio URLs found on each page."
    }
  },
  "required": [
    "urls"
  ]
}
Annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
image_searchFind images on the web by text query OR by a reference image — returns ranked results (title, source page, dimensions, thumbnail, description, summary). In Beta; contact us to request beta access. Pass exactly one of: a text `query`, an `image_url` (a picture already on the web), or `image_data` (base64, for a picture you hold). Never more than one. Set `topic` to `design` for UI design references — each result then carries a structured style `summary` and an `html_snippet` for building/restyling frontends. Use this when the user wants pictures, photos, diagrams, screenshots, or visual references — not for general text web search. keywords: find images, image search, photos, pictures, screenshots, visual reference, diagram, icon, illustration, UI design, reference image
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 500,
      "description": "Text query describing the images to find. Exactly one of `query`, `image_url` or `image_data` — never more than one."
    },
    "image_url": {
      "type": "string",
      "description": "Public image URL to search by visual similarity. Exactly one of `query`, `image_url` or `image_data` — never more than one."
    },
    "image_data": {
      "type": "string",
      "maxLength": 5242880,
      "description": "Base64-encoded image to search by visual similarity, for an image you hold rather than one already on the web. At most 5MB encoded; JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS or SGI. A `data:` URI is accepted — its payload is used. Exactly one of `query`, `image_url` or `image_data` — never more than one."
    },
    "topic": {
      "type": "string",
      "enum": [
        "general",
        "design"
      ],
      "default": "general",
      "description": "Image category: `general` for broad image search, `design` for design / illustration oriented results. Default general."
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 5,
      "description": "Number of results to return (1-10). Default 5."
    },
    "include_domains": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Only return results from these domains (e.g. 'unsplash.com')."
    },
    "exclude_domains": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Drop results from these domains."
    },
    "safesearch": {
      "type": "string",
      "enum": [
        "off",
        "strict"
      ],
      "default": "strict",
      "description": "Adult-content filter. Default strict."
    },
    "html_snippet": {
      "type": "object",
      "description": "Return an HTML snippet of the source context per result. Omit to use the server default.",
      "properties": {
        "enable": {
          "type": "boolean",
          "description": "Whether to return HTML snippets."
        },
        "max_tokens": {
          "type": "integer",
          "minimum": 100,
          "maximum": 100000,
          "default": 5000,
          "description": "Max tokens per HTML snippet (100-100000). Default 5000."
        }
      }
    },
    "timeout": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60,
      "description": "Request timeout in seconds (1-60). Defaults to 30s if unset."
    }
  }
}
Annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
news_searchSearch recent news and return ranked articles (title, url, snippet) — current events, headlines, timely reporting. This is `search` locked to `topic: news`; same options as `search` (domain / text filters, `language` filter, time window, highlight / full_content, media) except `topic`, which is fixed to news. For a single news lookup this is the right tool. For a multi-angle news question ("what shipped across the industry this month", "how are different outlets covering X"), use `broad_search` with topic=news instead of looping news_search. keywords: news search, latest news, headlines, current events, breaking news, recent, today, this week, press coverage
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 500,
      "description": "Search query. Max 500 chars."
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 5,
      "description": "Number of results to return (1-100). Default 5."
    },
    "include_domains": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 1200,
      "description": "Only return results from these domains (e.g. 'arxiv.org'). Max 1200, each ≤60 chars."
    },
    "exclude_domains": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 1200,
      "description": "Drop results from these domains. Max 1200, each ≤60 chars."
    },
    "include_text": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 30
      },
      "maxItems": 5,
      "description": "Only return results whose content contains all of these strings. Max 5, each ≤30 chars."
    },
    "exclude_text": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 30
      },
      "maxItems": 5,
      "description": "Drop results whose content contains any of these strings. Max 5, each ≤30 chars."
    },
    "time_basis": {
      "type": "string",
      "enum": [
        "auto",
        "published",
        "crawled"
      ],
      "default": "auto",
      "description": "Which timestamp the time window filters against: page `published` date, last `crawled` date, or `auto`. Default auto."
    },
    "time_range": {
      "type": "string",
      "enum": [
        "day",
        "week",
        "month",
        "year",
        "d",
        "w",
        "m",
        "y"
      ],
      "description": "Relative time window (e.g. `week`, `month`). Mutually exclusive with `start_time`/`end_time` — if both are given, the absolute range wins."
    },
    "start_time": {
      "type": "string",
      "description": "Lower bound for the time window, ISO 8601 (e.g. '2025-01-01T00:00:00Z')."
    },
    "end_time": {
      "type": "string",
      "description": "Upper bound for the time window, ISO 8601."
    },
    "format": {
      "type": "string",
      "enum": [
        "text",
        "markdown"
      ],
      "default": "text",
      "description": "Format of returned content. Default text."
    },
    "safesearch": {
      "type": "string",
      "enum": [
        "off",
        "strict"
      ],
      "default": "strict",
      "description": "Adult-content filter. Default strict."
    },
    "language": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "ar",
          "de",
          "en",
          "es",
          "fr",
          "hi",
          "id",
          "it",
          "ja",
          "ko",
          "nl",
          "pl",
          "pt",
          "ru",
          "th",
          "tr",
          "vi",
          "zh"
        ]
      },
      "default": [],
      "description": "Languages to filter results by, as ISO 639-1 codes. Empty = no filter."
    },
    "highlight": {
      "type": "object",
      "description": "Return a ranked highlighted snippet per result. Omit to use the server default.",
      "properties": {
        "enable": {
          "type": "boolean",
          "default": true,
          "description": "Whether to return highlights."
        },
        "max_tokens": {
          "type": "integer",
          "minimum": 100,
          "maximum": 20000,
          "default": 512,
          "description": "Max tokens per highlight snippet (100-20000)."
        }
      }
    },
    "full_content": {
      "type": "object",
      "description": "Return the cleaned full page body per result. Heavier than `highlight` — use only when the snippet isn't enough. Omit to use the server default (off).",
      "properties": {
        "enable": {
          "type": "boolean",
          "default": false,
          "description": "Whether to return full content."
        },
        "max_tokens": {
          "type": "integer",
          "minimum": 100,
          "maximum": 100000,
          "default": 2048,
          "description": "Max tokens of full content per result (100-100000)."
        }
      }
    },
    "include_images": {
      "type": "boolean",
      "default": false,
      "description": "Return image URLs (and a cover image) found on each result page."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60,
      "description": "Request timeout in seconds (1-60). Defaults to 30s if unset."
    }
  },
  "required": [
    "query"
  ]
}
Annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
searchSearch the live web and return ranked results (title, url, snippet) — fast, fresh, real-time web search for one focused lookup. Set `topic` to `news` for news-focused results. Pass `highlight` to get a ranked snippet per result, or `full_content` to pull the cleaned page body inline (heavier — costs more context). Narrow with domain / text include-exclude filters, a `language` filter (ISO 639-1 codes), and a time window (published/crawled `start_time`/`end_time`, or a relative `time_range`). Set `include_images` to return image URLs per result. USE FOR a single focused lookup: one fact, one entity, one document. If the question spans several independent subtopics, load and use `broad_search` instead — a sequence of search calls is slower and gives worse coverage than one fan-out. To read a page you already have the URL for, use `extract`. keywords: web search, search the web, look up, find, check, fact, current information, latest, news, source, url, real-time
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 500,
      "description": "Search query. Max 500 chars."
    },
    "topic": {
      "type": "string",
      "enum": [
        "general",
        "news"
      ],
      "default": "general",
      "description": "Search category: `general` for broad web search, `news` for news-focused results. Default general."
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 5,
      "description": "Number of results to return (1-100). Default 5."
    },
    "include_domains": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 1200,
      "description": "Only return results from these domains (e.g. 'arxiv.org'). Max 1200, each ≤60 chars."
    },
    "exclude_domains": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 1200,
      "description": "Drop results from these domains. Max 1200, each ≤60 chars."
    },
    "include_text": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 30
      },
      "maxItems": 5,
      "description": "Only return results whose content contains all of these strings. Max 5, each ≤30 chars."
    },
    "exclude_text": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 30
      },
      "maxItems": 5,
      "description": "Drop results whose content contains any of these strings. Max 5, each ≤30 chars."
    },
    "time_basis": {
      "type": "string",
      "enum": [
        "auto",
        "published",
        "crawled"
      ],
      "default": "auto",
      "description": "Which timestamp the time window filters against: page `published` date, last `crawled` date, or `auto`. Default auto."
    },
    "time_range": {
      "type": "string",
      "enum": [
        "day",
        "week",
        "month",
        "year",
        "d",
        "w",
        "m",
        "y"
      ],
      "description": "Relative time window (e.g. `week`, `month`). Mutually exclusive with `start_time`/`end_time` — if both are given, the absolute range wins."
    },
    "start_time": {
      "type": "string",
      "description": "Lower bound for the time window, ISO 8601 (e.g. '2025-01-01T00:00:00Z')."
    },
    "end_time": {
      "type": "string",
      "description": "Upper bound for the time window, ISO 8601."
    },
    "format": {
      "type": "string",
      "enum": [
        "text",
        "markdown"
      ],
      "default": "text",
      "description": "Format of returned content. Default text."
    },
    "safesearch": {
      "type": "string",
      "enum": [
        "off",
        "strict"
      ],
      "default": "strict",
      "description": "Adult-content filter. Default strict."
    },
    "language": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "ar",
          "de",
          "en",
          "es",
          "fr",
          "hi",
          "id",
          "it",
          "ja",
          "ko",
          "nl",
          "pl",
          "pt",
          "ru",
          "th",
          "tr",
          "vi",
          "zh"
        ]
      },
      "default": [],
      "description": "Languages to filter results by, as ISO 639-1 codes. Empty = no filter."
    },
    "highlight": {
      "type": "object",
      "description": "Return a ranked highlighted snippet per result. Omit to use the server default.",
      "properties": {
        "enable": {
          "type": "boolean",
          "default": true,
          "description": "Whether to return highlights."
        },
        "max_tokens": {
          "type": "integer",
          "minimum": 100,
          "maximum": 20000,
          "default": 512,
          "description": "Max tokens per highlight snippet (100-20000)."
        }
      }
    },
    "full_content": {
      "type": "object",
      "description": "Return the cleaned full page body per result. Heavier than `highlight` — use only when the snippet isn't enough. Omit to use the server default (off).",
      "properties": {
        "enable": {
          "type": "boolean",
          "default": false,
          "description": "Whether to return full content."
        },
        "max_tokens": {
          "type": "integer",
          "minimum": 100,
          "maximum": 100000,
          "default": 2048,
          "description": "Max tokens of full content per result (100-100000)."
        }
      }
    },
    "include_images": {
      "type": "boolean",
      "default": false,
      "description": "Return image URLs (and a cover image) found on each result page."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60,
      "description": "Request timeout in seconds (1-60). Defaults to 30s if unset."
    }
  },
  "required": [
    "query"
  ]
}
Annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
video_searchFind videos on the web by text query — returns ranked results (title, source page, cover image, duration, matching segment, authors, description). In Beta; contact us to request beta access. Pass a text `query`. Use this when the user wants to find videos, clips, footage, tutorials, or a specific moment within a video — not for general text web search. keywords: find videos, video search, clips, footage, youtube, tutorial video, watch, movie, video clip
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 500,
      "description": "Text query describing the videos to find."
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 5,
      "description": "Number of results to return (1-10). Default 5."
    },
    "time_range": {
      "type": "string",
      "enum": [
        "day",
        "week",
        "month",
        "year",
        "d",
        "w",
        "m",
        "y"
      ],
      "description": "Relative time window (e.g. `week`, `month`). Mutually exclusive with `start_time`/`end_time` — if both are given, the absolute range wins."
    },
    "start_time": {
      "type": "string",
      "description": "Lower bound for the time window, ISO 8601 (e.g. '2025-01-01T00:00:00Z')."
    },
    "end_time": {
      "type": "string",
      "description": "Upper bound for the time window, ISO 8601."
    },
    "safesearch": {
      "type": "string",
      "enum": [
        "off",
        "strict"
      ],
      "default": "strict",
      "description": "Adult-content filter. Default strict."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60,
      "description": "Request timeout in seconds (1-60). Defaults to 30s if unset."
    }
  },
  "required": [
    "query"
  ]
}
Annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}

Resources 0

Resource templates 0

Prompts 0

Changes from previous version

No completed comparison is available.

RiskChangeSubject
No material changes recorded.

Confirmed vulnerabilities

SeverityFindingAdvisory
No confirmed vulnerability is published for this version.

Provenance

Artifact SHA-256: 2abedab0a357abb3aeaf77cfd5706cea7ab7551c8b94e50e8c24ee1c35449066

Scanner: mcp-proof-engine 0.1.0.

Let’s talk about MCP security.

Share your details and our security team will contact you.