multi-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@multi-mcpScrape https://books.toscrape.com and extract book titles and prices into a table."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
multi-mcp
Servidor MCP multi-propósito para opencode. Provee utilidades de texto/hash/tiempo y un scraper web profesional (scrape-dom).
Incluye un CLI instalador (multi-mcp-setup) que configura el MCP server y el plugin de slash commands en opencode desde cero, sin corromper la config existente ni chocar con otros servers/plugins.
Requisitos
Node.js ≥ 22
npm
Related MCP server: agent-utils-mcp
Quick Start
1. Instala el paquete
npm install -g multi-mcp
# o para desarrollo local:
# npm link # dentro del repo2. Configura opencode
multi-mcp-setup installEl comando:
Copia el plugin y sus slash commands a
~/.config/opencode/plugins/Registra el MCP server
multi-mcpen~/.config/opencode/opencode.jsonPreserva comentarios, orden y el resto de claves de tu config (edición quirúrgica JSONC)
Es idempotente: re-ejecutarlo no duplica nada
Detecta conflictos: si
mcp.multi-mcpapunta a otro server, aborta sin pisarlo
3. Reinicia opencode
Tras instalar, reinicia opencode. Tendrás las tools multi-mcp_* y los slash commands /multi-mcp-scrape, /multi-mcp-scrape-dom, /multi-mcp-dom, /multi-mcp-list-tools.
Verificar y desinstalar
multi-mcp-setup status # estado actual
multi-mcp-setup install --dry-run # previsualizar cambios sin escribir
multi-mcp-setup uninstall # quita solo lo nuestroWindows: usa
npm install -g multi-mcponpx multi-mcp-setup installen vez de ejecutarbin/cli.jsdirectamente. npm genera los wrappers.cmd/.ps1automáticamente.
Configuración manual (sin CLI)
Alternativa al Quick Start: registra el servidor en ~/.config/opencode/opencode.json como MCP local apuntando al bundle compilado:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
// ...otros servers...
"multi-mcp": {
"type": "local",
"command": ["node", "/root/.config/opencode/mcp/multi-mcp/build/server.mjs"],
"enabled": true
}
}
}Ajusta la ruta a donde tengas este repo. Tras editar el código del server:
npm run typecheck && npm run buildy reinicia opencode para que cargue las tools nuevas.
Tools
Tool | Descripción |
| Devuelve el texto de entrada |
| Fecha/hora actual (zona IANA opcional) |
| Evalúa expresiones aritméticas |
| Hash sha256/sha1/md5 |
| Codifica/decodifica base64 |
| Genera UUIDs |
| Lista todas las tools con descripciones |
| Fetch de URL con bypass Cloudflare, retries y metadata. Devuelve HTML crudo |
| Parsea HTML dado con jsdom y ejecuta operaciones (query, queryAll, attr, text, tables, forms, links...) |
| Scraper profesional: fetch + parse jsdom + extract DSL + operations + paginación |
scrape-dom — scraper profesional
Combina fetch (con bypass Cloudflare) + parseo jsdom + extracción estructurada, en una sola llamada.
Parámetros comunes
Parámetro | Tipo | Default | Descripción |
| string (URL) | — | Página a scrapear |
| GET/POST/HEAD |
| Método HTTP |
| int (1000–120000) |
| Timeout en ms |
| int (0–10) |
| Reintentos |
| object | — | Headers HTTP custom |
| array | — | Pipeline de operaciones DOM de bajo nivel |
| object | — | DSL de extracción estructurada |
| object | — | Seguir enlaces "next" y acumular resultados |
Modo 1: extract (DSL estructurado)
Ideal para scrapear listas/items repetidos o campos concretos de una página.
scrape-dom({
url: "https://example.com/list",
extract: {
itemSelector: ".card", // cada item repetido (omitir ⇒ campos leídos de la página completa)
include: ".card:not(.sold-out)", // filtro: solo items que matchean
exclude: ".ad", // filtro: descarta items que matchean
fields: [
{ key: "title", selector: "h2", transform: ["trim", "collapse"] },
{ key: "price", selector: ".price", type: "int" },
{ key: "link", selector: "a", attr: "href", resolveUrl: true },
{ key: "desc", selector: "p", optional: true },
{ key: "id", selector: ".id", default: "unknown" }
]
}
})Campo del DSL:
Campo | Descripción |
| Clave de salida |
| Selector CSS del campo (dentro del item, o de la página si no hay |
| Atributo a leer en vez del texto ( |
| Coercionar: |
| Array en orden: |
| Resolver URLs relativas contra la base de la página (con |
| Valor si el campo falta |
| Si |
Resultado (modo itemSelector): { items, count, skippedInvalid?, pagesFetched }.
Resultado (sin itemSelector): { items, count, singleItem, pagesFetched }.
Modo 2: operations (pipeline de bajo nivel)
Operaciones planas sobre todo el documento, estilo dom pero tras scrapear la URL.
scrape-dom({
url: "https://example.com",
operations: [
{ type: "title" },
{ type: "queryAll", selector: "li a" },
{ type: "tables" }
]
})Tipos de operación: title, meta, query, queryAll, attr, text, html, links, images, tables, forms, scripts, styles, custom (con scriptSelector + all).
Paginación multi-página
scrape-dom({
url: "https://example.com/news?page=1",
extract: { itemSelector: "article", fields: [{ key: "title", selector: "h2" }] },
pagination: {
nextSelector: "a.next", // selector del enlace "next"
attr: "href", // atributo con la URL (default href)
maxPages: 5 // máx páginas (1-20, default 3)
}
})Acumula los items de todas las páginas en items y lista las URLs visitadas en pagesFetched. Evita loops detectando URLs repetidas.
scrape / dom (componentes)
scrape({ url, method?, timeout?, retries?, metadata?, headers? })→ HTML crudo, conmetadata: truedevuelve status/headers/size/tiempo.dom({ html, operations? })→ parsea HTML dado con jsdom y ejecuta las mismas operaciones que el modo 2 descrape-dom.
Build
npm run build # tsup → build/server.mjs (server MCP)
npm run build:plugin # tsup → install/plugin/multi-mcp.mjs + command/*.md
npm run build:cli # tsup → bin/cli.js (instalador con shebang)
npm run build:all # los tres
npm run dev # npx tsx src/server.ts (sin build, desde fuente)
npm run typecheck # tsc --noEmit
npm run start # node build/server.mjsBun: compilar a binario con
bun build --compileno funciona — css-tree (dep de jsdom) carga../data/patch.jsoncon unrequiredinámico que el bun compile no empaqueta (Cannot find module '../data/patch.json'). Usarnpm run build(tsup).
Available Tools
10 toolsbase64B
Encode or decode base64 strings
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to encode or decode | |
| action | Yes | Whether to encode or decode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only restates the basic operation already captured by the action enum. It does not mention edge-case behavior such as handling of invalid base64 input, character encoding, URL-safe variants, or the exact output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler or redundant phrases. It is appropriately sized for a simple utility tool and immediately communicates the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and its parameters are fully documented in the schema, so the minimal description is partially adequate. However, it lacks any note about return values, error handling, or encoding details, and there is no output schema to compensate for that absence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Encode or decode base64 strings.' It clearly communicates the exact operation and resource, and the action enum reinforces the two possible modes, making it easy to distinguish from sibling tools like hash or echo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives, nor are any exclusions or preferred contexts mentioned. The usage is only implied by the tool name and description, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domB
Parse HTML with jsdom and execute DOM operations (query, attr, text, html, links, images, tables, forms, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | HTML content to parse | |
| operations | No | Array of operations to execute on the parsed DOM. If omitted, returns title and basic structure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that HTML is parsed and DOM operations are executed, but does not disclose whether operations mutate the parsed document, what the return structure looks like, how multiple operations are aggregated, or how errors are handled. This is a significant gap for a tool with an operations array that can produce varied results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose and lists representative operations. There is no wasted text, and it communicates the general scope efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple operation types, optional operations array, no output schema), the description is adequate but incomplete. It does not explain the output format, the meaning of 'returns title and basic structure' when operations are omitted, or how operation results are sequenced. The schema covers parameter names but not the behavioral contract of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description enumerates operation types that overlap with the schema's enum, providing no additional semantic detail beyond what the schema already documents. It does add a high-level 'etc.' but adds no genuine value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Parse HTML with jsdom') and resource ('HTML'), and enumerates the operation categories it supports. However, it does not explicitly distinguish itself from the sibling tool 'scrape-dom', which likely has overlapping functionality, so differentiation relies on the reader inferring the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like 'scrape-dom' or 'scrape'. The description lists operations but does not state prerequisites, expected use cases, or exclusions, leaving the agent to guess where this tool fits among its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
echoA
Echo back the input text
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to echo back |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does state the core behavior—returning the input text—but it does not explicitly mention side-effect freedom, output format, or behavior for empty or unusual input. Nothing contradicts the annotations, but the disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler words, and the core action is front-loaded. It is appropriately sized for a one-parameter utility and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial echo tool with one fully documented required parameter, the description is nearly complete. An agent can invoke it correctly without further context. A short example or an explicit statement that no transformation occurs would make it fully complete, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with the parameter description 'Text to echo back', so the description adds no additional parameter semantics. This is a baseline case where the schema handles the semantics and the description has no further burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Echo back', and a clear resource, 'input text', making it plain that the tool returns the provided text unchanged. It is self-evidently distinct from siblings like hash, base64, and timestamp because it performs no transformation, though it does not explicitly call out that contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: pass text and receive it back unchanged. However, there is no explicit guidance on when to use this tool versus alternatives, no exclusions, and no mention of edge cases. For such a trivial utility this is acceptable, but usage inference is left entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashC
Generate a hash of the input text using various algorithms
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to hash | |
| algorithm | No | Hash algorithm. Defaults to sha256. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It provides only a minimal statement about generating a hash and does not disclose output format, determinism, one-way nature, or algorithm-specific behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with a clear verb-first structure. It is not bloated, though 'using various algorithms' is somewhat vague and could be more specific.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool lacks an output schema and annotations, so the description should explain the return format and practical behavior. It does not state whether the output is a hex string, raw bytes, or base64, which is important for downstream use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds little beyond the schema, but it does map 'input text' to the text parameter. The algorithm parameter is fully documented by the schema's enum and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Generate a hash of the input text'. It distinguishes the tool's function from siblings like base64 or uuid, though it does not explicitly differentiate from similar hash-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of preferred use cases, exclusions, or comparisons with siblings such as base64 or uuid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-toolsA
List all available tools with descriptions and usage examples
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses the core behavior: a read-only enumeration of available tools with their descriptions and usage examples. It does not mention output format, ordering, or potential response size, but for a simple discovery tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words. The verb and resource are front-loaded ('List all available tools'), followed immediately by the value proposition ('with descriptions and usage examples').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless introspection tool, this description is complete: it states the action, the scope ('all available tools'), and the content of the returned information. No output schema exists, but the description itself sufficiently specifies what the agent will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so there is no parameter meaning to convey. The baseline for a zero-parameter tool is 4, and the description correctly omits irrelevant parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action 'List all available tools' and explicitly defines the output contents: descriptions and usage examples. This distinguishes it clearly from the sibling utility tools like echo, timestamp, and math, which perform concrete operations rather than discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context obvious: use this tool to discover what tools are available and how to invoke them. It doesn't explicitly mention when not to use it or name alternatives, but as a parameterless meta-tool, sibling alternatives are unlikely to be confused with it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mathA
Evaluate a math expression (add, subtract, multiply, divide, parentheses)
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | Math expression to evaluate, e.g. '(2 + 3) * 4' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It states the core action and supported operations but does not disclose the return type (e.g., number), order-of-operations precedence beyond parentheses, or error behavior for invalid expressions. This is minimal but not misleading for a simple calculation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every element—the verb, the resource, and the supported operations—earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool, the definition is nearly sufficient. It is missing explicit return-value and error-handling statements, but the expected result (evaluated number) is strongly implied by 'Evaluate' and the example, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the sole parameter with a clear example, giving 100% coverage. The description's list of operations adds some context but largely restates what the example already implies, so it does not meaningfully exceed the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Evaluate') and resource ('math expression'), and lists supported operations. This is immediately distinct from sibling tools that deal with strings, hashes, timestamps, or DOM scraping, so purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context: use it for arithmetic evaluation. It does not explicitly name alternatives or exclusions, but the sibling tool list makes the appropriate use-case obvious, so this is above vague but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrapeA
Fetch a URL with Cloudflare bypass, retries, and optional metadata. Returns raw HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to fetch | |
| method | No | HTTP method | GET |
| headers | No | Custom HTTP headers | |
| retries | No | Retry attempts (0-10) | |
| timeout | No | Timeout in ms (1000-120000) | |
| metadata | No | Include response metadata (status, headers, size, time) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses non-obvious behavior such as Cloudflare bypass, retries, and optional metadata. However, it does not mention error handling, rate limits, authentication, or response behavior on non-200 statuses, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tightly written sentence that front-loads the primary action ('Fetch a URL'), then names the key behavioral traits and return type. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there are no annotations and no output schema, the description plus schema is adequate but not rich. It covers raw HTML output, Cloudflare bypass, and retries, but it lacks guidance on error behavior, response metadata details, and when to prefer DOM-focused sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds little beyond 'Cloudflare bypass' and 'optional metadata,' and it does not clarify method, headers, timeout, or retry semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Fetch a URL with Cloudflare bypass, retries, and optional metadata. Returns raw HTML.' The phrase 'raw HTML' distinguishes it from sibling tools like scrape-dom or dom, which likely return parsed or extracted DOM content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching raw HTML and bypassing Cloudflare, but it does not explicitly state when to use this tool versus alternatives like scrape-dom. There is no direct exclusion or mention of better-suited sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape-domA
Scrape a URL, parse with jsdom, and extract data via structured DSL or low-level operations. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to scrape | |
| method | No | HTTP method | GET |
| extract | No | Structured extraction DSL. Mutually preferred over operations for item scraping | |
| headers | No | Custom HTTP headers | |
| retries | No | Retry attempts (0-10) | |
| timeout | No | Timeout in ms (1000-120000) | |
| operations | No | Low-level DOM operations to run on each page (pipeline mode) | |
| pagination | No | Follow next-page links and accumulate results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the tool fetches a URL, parses via jsdom, supports structured and low-level extraction, and pagination. However, it does not disclose limitations such as whether JavaScript is executed, output shape, or that pagination triggers multiple network requests, making the disclosure adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and key capabilities are front-loaded, and every phrase earns its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is rich and fully documents the DSL, operations, and pagination. The description provides a high-level orientation that matches that complexity. It does not explain return values or JavaScript execution caveats, but given the schema's depth, the description is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds cross-cutting meaning by grouping `extract` as 'structured DSL' and `operations` as 'low-level operations', and by calling out pagination as a capability, which goes beyond any single schema parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Scrape a URL'), names the parsing engine ('parse with jsdom'), and highlights the two extraction modes plus pagination. This clearly identifies the tool's function and helps distinguish it from simpler siblings like 'scrape' or 'dom'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through action phrases but provides no explicit when-to-use guidance or exclusions. It does not mention when to prefer scrape-dom over the sibling tools 'scrape' or 'dom', leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timestampA
Get the current date and time
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | No | IANA timezone (e.g. America/New_York). Defaults to UTC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It states the basic action but does not reveal important behavioral details such as the output format (e.g., ISO 8601), whether milliseconds are included, or how the optional timezone parameter affects the returned value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words or repetition. It is front-loaded and immediately understandable, earning its place without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is mostly adequate, but it leaves out the return format and how timezone selection changes behavior. These details would help an agent call the tool with correct expectations, especially given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides full coverage of the only parameter, timezone, including an example and default behavior. The description adds no additional parameter semantics, but because coverage is 100%, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('current date and time'), making the tool's function immediately clear. It also intuitively distinguishes itself from the listed sibling tools, none of which provide time-related functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used when the current date and time are needed, but it does not explicitly state when to use it versus alternatives or mention any exclusions. Since the sibling tools are unrelated, the lack of alternatives is not a major gap, but guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uuidB
Generate one or more UUIDs
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of UUIDs to generate. Defaults to 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that UUIDs are generated, but does not mention whether they are random (e.g., v4), the format of the output (string vs array), or any side-effect-free guarantee. This leaves important behavioral traits undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. It conveys the essential action and count range immediately, and is appropriately sized for the trivial complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the tool is simple, there is no output schema and the description lacks key details such as the return format (e.g., plain string vs JSON array) and whether the UUIDs are version 4 random. The one parameter is well-documented, but for an agent to correctly consume the result, these missing behavioral and output details are important. The description does not fully compensate for the absent output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the 'count' parameter with a description ('Number of UUIDs to generate. Defaults to 1.'), so schema coverage is 100%. The tool description adds little beyond the schema, merely restating that one or more UUIDs can be generated, which meets the baseline for this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Generate one or more UUIDs' uses a specific verb ('Generate') and a clear resource ('UUIDs'), and implies a count range. It is immediately distinguishable from all sibling tools (echo, timestamp, math, hash, base64) that serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are stated, but the purpose is self-evident and the usage context is implied: use whenever a UUID is needed. For a simple utility with no overlapping siblings, this implicit guidance is acceptable, though not as strong as naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v1.0.0- First observed
base64 - First observed
dom - First observed
echo - First observed
hash - First observed
list-tools - First observed
math - First observed
scrape - First observed
scrape-dom - First observed
timestamp - First observed
uuid
TDQS
Scored across 10 tools
The utility tools are clearly distinct, but scrape, scrape-dom, and dom overlap in fetching URLs and working with HTML/DOMs, so an agent could select the wrong one. Descriptions clarify raw HTML vs structured extraction vs in-memory DOM operations, but the boundaries are not immediately obvious from names alone.
All names are lowercase, but the set mixes single-word nouns (timestamp, math, uuid), single-word verbs (echo, scrape), and hyphenated verb-noun names (list-tools, scrape-dom). The naming is readable and predictable in tone, but not structurally consistent.
Ten tools is within a reasonable scope for a multi-purpose server, and each tool has a defined function. The utility side adds some trivial tools, but the overall count is not excessive or too thin.
The utility side covers common helper operations, and the scraping side provides raw fetch, structured extraction, and DOM manipulation with pagination support. There are minor gaps like limited HTTP request customization, but no critical dead ends for the apparent purpose.
Maintenance
Related MCP Connectors
Deterministic web intake and data utilities for autonomous agents.
Turn any URL into clean Markdown and structured data. Scrape, crawl, search and extract.
All HasData scraping tools in one MCP server: Google, TikTok, Instagram, maps, e-commerce and more.
Generate IDs, QR codes, and hashes, encode values, geolocate IPs, plus gated host diagnostics.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides advanced web scraping with HTTP client, smart content extraction to Markdown, browser automation via Playwright, screenshot/PDF generation, and Docker sandbox execution environments.1MIT
- FlicenseAqualityDmaintenanceSwiss-army-knife utility MCP server for AI agents. 18 tools for JSON validation/formatting, base64 encode/decode, hash generation, UUID generation, URL parsing, regex testing, markdown↔HTML conversion, text stats, slug generation, datetime conversion, cron parsing, text diffing, CSV↔JSON conversion, and JWT decoding. Zero API Key required185-

zenrows-mcpofficial
AlicenseAqualityBmaintenanceScrape any webpage and return clean markdown, HTML, or structured JSON. Bypasses anti-bot protection, renders JavaScript (React/Vue/Angular), supports premium residential proxies and CSS extraction. Works with any MCP client — no local install required.140719MIT- AlicenseNot gradedqualityBmaintenanceOpen-source web scraper and extraction MCP server with JavaScript rendering, markdown output, PDF/DOCX parsing, structured errors, and validated extraction contract diagnostics for agents.2AGPL 3.0