Install octen-mcp from npm
Install exact version 0.5.1. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact octen-mcp@0.5.1MCP server for Octen Extract that turns any URL into clean, LLM-ready markdown, with highlights and classification. Works with Claude, Cursor, VS Code, and other MCP clients
Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.
Install exact version 0.5.1. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact octen-mcp@0.5.1| Canonical slug | octen-mcp-687da0d7 | Deployment | Local Only |
|---|---|---|---|
| Canonical package | npm:octen-mcp | Repository | Octen-Team/octen-mcp |
| First published | Jul 30, 2026 | Latest release | Jul 30, 2026 |
| Last security verification | Sep 1, 2026 | Classification confidence | 90% |
| Publication | Published | Official distribution | Yes |
| Channel | Identifier | Current version | Versions | Source |
|---|---|---|---|---|
| npm | octen-mcp | 0.5.1 | 5 | Repository |
| Package | Version | Published / observed | Inventory | Security scan |
|---|---|---|---|---|
| npmocten-mcp | 0.5.1Current | Sep 5, 2026 | 6 toolsSucceeded · 0 resources · 0 prompts | Verified clean |
Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.
| Provenance | artifact_hash_verified | Signature | — |
|---|---|---|---|
| MCP SDK | — | Artifact SHA-256 | 2abedab0a357abb3aeaf77cfd5706cea7ab7551c8b94e50e8c24ee1c35449066 |
| Scanner | mcp-proof-engine 0.1.0 | Scan completed | Sep 1, 2026 |
| Security rating | — | Methodology | — |
| Tool | Category | Annotations | Risk |
|---|---|---|---|
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 questionInput 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
} | — | Read onlyNon-destructiveOpen world | — |
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 linkInput 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
} | — | Read onlyNon-destructiveOpen world | — |
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 imageInput 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
} | — | Read onlyNon-destructiveOpen world | — |
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 coverageInput 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
} | — | Read onlyNon-destructiveOpen world | — |
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-timeInput 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
} | — | Read onlyNon-destructiveOpen world | — |
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 clipInput 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
} | — | Read onlyNon-destructiveOpen world | — |
| Endpoint | Transport | Authentication | Health | Observed |
|---|---|---|---|---|
| No verified remote endpoint is linked. | ||||
Install the selected package version with: npm install --save-exact octen-mcp@0.5.1
octen-mcp Server exposed 6 tools during independent protocol observation, including broad_search, extract, image_search, news_search, search, video_search.
Our scanner tested version 0.5.1 without proving a finding in the methods exercised. This is not a guarantee that every deployment is secure.
Curated product and capability guides containing this catalog record.