mcp-toolkit
mcp-toolkit is a general-purpose MCP server for AI agents with the following capabilities:
Web Search — Search the web via DuckDuckGo with optional deep content extraction using Playwright, configurable result count (up to 10), and language support.
URL Fetching — Extract main content from a direct HTTP/HTTPS URL using Playwright.
Generic HTTP Requests — Execute GET, POST, PUT, PATCH, DELETE, HEAD, or OPTIONS requests with optional headers and body.
Time & Date Utilities — Get current time in any timezone, convert between timezones, parse dates, add durations, and calculate differences.
Persistent Memory (Key-Value Store) — Store, retrieve, delete, list, search, and clear key-value pairs persistently via SQLite, with namespace support.
Sandboxed Python Execution — Run Python code in an isolated subprocess with configurable timeout (up to 60s), memory limit (256MB on Linux), optional stdin, and no network access.
Sandboxed JavaScript Execution — Run Node.js code in an isolated subprocess with the same safety restrictions as Python (requires Node.js installed).
Provides web search capabilities using DuckDuckGo, allowing AI agents to search the web and extract content from web pages with configurable parameters like result count and language.
Supports installation directly from GitHub repositories and provides development tools for extending the MCP server with custom functionality.
Click on "Install 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., "@mcp-toolkitsearch for latest Python 3.14 release notes with deep extraction"
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.
mcp-toolkit
General-purpose MCP server for AI agents. Built with Python 3.13, FastMCP, and Playwright.
Available tools
Tool | Description |
| Searches DuckDuckGo and extracts web content with Playwright |
| Extracts the main content from a direct URL |
| Executes generic HTTP requests without Playwright |
| Returns the current date and time in a specific timezone |
| Converts timezones and calculates dates/durations |
| Saves a persistent value in SQLite |
| Retrieves a saved value |
| Deletes a key |
| Lists all keys (with optional prefix filter) |
| Clears all memory (irreversible!) |
| Searches for text in saved keys and values |
| Executes Python code in a sandboxed environment with a timeout |
| Executes JavaScript code with Node.js in a sandboxed environment with a timeout |
Related MCP server: MCP Server
Installation
Prerequisites
UV installed
Python 3.13 (UV downloads it automatically if not present)
Node.js (optional, only for
run_js)
Option A — Install from local folder
git clone https://github.com/YoshiLoL0526/mcp-toolkit
cd mcp-toolkit
uv tool install --python 3.13 .Option B — Install directly from GitHub
uv tool install --python 3.13 git+https://github.com/YoshiLoL0526/mcp-toolkitMandatory step: install Chromium for Playwright
After installing the package, run this command once:
# Obtener la ruta del entorno virtual creado por uv tool
uv tool run --from mcp-toolkit python -m playwright install chromiumOr alternatively, if you know the environment path:
~/.local/share/uv/tools/mcp-toolkit/bin/python -m playwright install chromiumConfiguration in MCP clients
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)
{
"mcpServers": {
"mcp-toolkit": {
"command": "mcp-toolkit"
}
}
}On Windows, the path is
%APPDATA%\Claude\claude_desktop_config.json
Cursor / VS Code (.cursor/mcp.json or .vscode/mcp.json)
{
"servers": {
"mcp-toolkit": {
"type": "stdio",
"command": "mcp-toolkit"
}
}
}HTTP Server (for remote access or multiple clients)
mcp-toolkit --transport http --host 0.0.0.0 --port 8080The server will listen on http://<host>:<port>/mcp using the streamable-http transport (current MCP standard). You can change the path with --path /other-path.
The
--transport ssetransport is maintained for compatibility with older clients, but it has been deprecated since FastMCP 2.3.
Using the tools
web_search
Parámetros:
query (str) — texto a buscar
max_results (int) — resultados a devolver, default 5, máximo 10
deep (bool) — si True, extrae el contenido completo de cada página
language (str) — idioma para las cabeceras HTTP, default "es-ES"Example (agent):
Busca las últimas noticias sobre Python 3.13 con deep=Truefetch_url
Parámetros:
url (str) — URL absoluta HTTP o HTTPS a leerExample (agent):
Lee https://example.com/articulo con fetch_urlhttp_request
Parámetros:
method (str) — método HTTP: GET, POST, PUT, PATCH, DELETE, HEAD u OPTIONS
url (str) — URL absoluta HTTP o HTTPS
headers (dict) — cabeceras opcionales
body (str) — cuerpo opcional como texto
timeout (int) — segundos máximos, default 10, máximo 60Example (agent):
Haz un POST a https://api.example.com/items con http_requesttime_now / date_utils
time_now(timezone_name="UTC")
date_utils(
action="convert_timezone",
value="2026-04-21T12:00:00+00:00",
target_timezone="America/New_York"
)Actions supported by date_utils: parse, convert_timezone, add, and diff. For dates without an offset, timezone_name is used; timezones must be IANA names like UTC, America/New_York, or Europe/Madrid.
memory_set / memory_get
memory_set(key="usuario_nombre", value="Carlos", namespace="default")
memory_get(key="usuario_nombre", namespace="default")
memory_list(prefix="usuario_", namespace="default")
memory_search(query="Carlos", namespace="default")Data is saved in ~/.local/share/mcp-toolkit/memory.db.
All memory tools accept a namespace to separate data by project, client, or conversation. If not specified, default is used.
run_python
Parámetros:
code (str) — código Python a ejecutar
timeout (int) — segundos máximos, default 10, máximo 60
stdin (str) — entrada estándar opcionalSecurity restrictions:
Minimal environment: does not inherit secrets or arbitrary variables from the host process
Temporary working directory per execution
HTTP proxies overridden by environment variables
Memory limit: 256 MB (Linux/macOS)
Strict timeout: the process is killed when time runs out
On Windows, there is no per-process memory limit applied from Python
Network blocking is not a guarantee of strong isolation; for untrusted code, it is recommended to run the server inside a container or VM with network policies
run_js
Same parameters as run_python. Requires Node.js installed on the system.
Development
git clone https://github.com/YoshiLoL0526/mcp-toolkit
cd mcp-toolkit
uv sync
uv run python -m playwright install chromium
# Ejecutar en modo desarrollo
uv run mcp-toolkit
# Tests
uv run pytestAdding a new tool
Create
mcp_toolkit/tools/my_tool.pywith anasync def my_tool(...) -> strfunctionImport and register it in
server.pywithmcp.tool()(my_tool)Reinstall:
uv tool install --python 3.13 . --reinstall
Project structure
mcp-toolkit/
├── pyproject.toml
├── README.md
├── mcp_toolkit/
│ ├── server.py # FastMCP app + registro
│ ├── tools/
│ │ ├── web_search.py # Playwright: buscar + extraer
│ │ ├── fetch_url.py # Extraer una URL directa
│ │ ├── http_request.py # Cliente HTTP genérico
│ │ ├── date_time.py # Fechas, zonas horarias y duraciones
│ │ ├── memory.py # SQLite KV store con namespaces
│ │ ├── run_python.py # Sandbox Python
│ │ └── run_js.py # Sandbox Node.js
│ └── utils/
│ ├── browser.py # Singleton Playwright
│ └── sandbox.py # Helpers de subprocess y timeout
└── tests/License
MIT
Available Tools
8 toolsmemory_clearA
Elimina TODAS las claves de la memoria persistente. Usar con precaución: esta acción no se puede deshacer.
Returns: Número de entradas eliminadas.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: it discloses the irreversible nature ('no se puede deshacer'), which is a critical behavioral trait for a destructive operation. It also mentions the return value format. However, it doesn't cover potential side effects like impact on other tools or error conditions.
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 perfectly concise: three sentences with zero waste. The first states the purpose, the second gives a critical warning, and the third specifies the return value. Each sentence earns its place by adding essential information.
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 high complexity (destructive, irreversible operation) and no annotations, the description does well by covering purpose, warning, and return value. With an output schema present, it doesn't need to detail return values further. A minor gap is the lack of explicit prerequisites or error handling, but it's largely 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?
The tool has 0 parameters with 100% schema coverage, so the schema fully documents the absence of inputs. The description adds no parameter information, which is appropriate. A baseline of 4 is applied for zero-parameter tools, as no compensation is needed.
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 specific action ('Elimina TODAS las claves') and resource ('de la memoria persistente'), distinguishing it from siblings like memory_delete (which likely deletes specific keys) and memory_list (which lists keys). The verb 'Elimina' (deletes/removes) is precise and unambiguous.
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 explicit guidance with 'Usar con precaución: esta acción no se puede deshacer' (Use with caution: this action cannot be undone), clearly indicating when to be careful. It implicitly distinguishes from memory_delete by specifying 'TODAS las claves' (ALL keys), suggesting alternatives for partial deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_deleteB
Elimina una clave de la memoria persistente.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Nombre de la clave a eliminar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 the tool deletes a key but doesn't mention what happens if the key doesn't exist (e.g., error, silent failure), whether the deletion is permanent, any permission requirements, or rate limits. For a destructive operation with zero annotation coverage, this is a significant gap in transparency.
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, efficient sentence in Spanish that directly states the tool's purpose with zero waste. It's appropriately sized and front-loaded, making it easy to understand at a glance without unnecessary elaboration.
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 (destructive operation with 1 parameter), the description is minimally adequate but incomplete. With no annotations and an output schema present (which likely describes the return value), the description doesn't need to explain returns. However, it lacks critical behavioral details for a delete operation, such as error handling or side effects, leaving gaps in understanding.
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 description adds no parameter semantics beyond what the input schema provides. The schema has 100% coverage with a clear description for the 'key' parameter ('Nombre de la clave a eliminar'), so the baseline is 3. The tool description doesn't elaborate on key format, constraints, or examples, relying entirely on the schema.
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 action ('Elimina' - deletes) and the resource ('una clave de la memoria persistente' - a key from persistent memory). It distinguishes itself from siblings like memory_get (retrieve) and memory_set (store), though it doesn't explicitly mention sibling differentiation. The purpose is specific and unambiguous.
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. While the purpose is clear, there's no mention of prerequisites (e.g., the key must exist), when not to use it, or how it differs from memory_clear (which likely clears all keys). The description assumes context but offers no explicit usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getB
Recupera el valor almacenado bajo una clave.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Nombre de la clave a recuperar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the retrieval action but doesn't disclose behavioral traits: whether it returns null/error for non-existent keys, requires authentication, has rate limits, or what the output format is. The description is minimal and lacks operational context.
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, efficient sentence in Spanish that directly states the tool's function. It is front-loaded with the core action and resource, with zero wasted words. 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?
Given the tool's low complexity (single parameter, read-only operation) and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and simple schema, it lacks context on error handling or behavioral nuances, making it incomplete for robust agent 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%, with the parameter 'key' fully documented in the schema. The description adds no additional meaning beyond the schema's 'Nombre de la clave a recuperar.' Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't compensate with extra context like key format examples.
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 'Recupera el valor almacenado bajo una clave' clearly states the action (retrieves) and resource (value stored under a key). It distinguishes from siblings like memory_set (stores) and memory_delete (removes), but doesn't explicitly differentiate from memory_list (lists all keys). The purpose is specific and unambiguous.
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. The description doesn't mention prerequisites (e.g., key must exist), when not to use it, or refer to sibling tools like memory_list for discovering available keys. Usage is implied from the name and purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_listA
Lista todas las claves almacenadas, con filtro opcional por prefijo.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | Filtrar claves que comiencen con este texto (vacío = todas). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 describes the listing behavior and optional filtering, which covers basic functionality. However, it lacks details on behavioral traits such as pagination, rate limits, authentication needs, or what happens if no keys exist (e.g., returns empty list). The description is adequate but minimal for a read-only 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, efficient sentence in Spanish that front-loads the main action ('Lista todas las claves almacenadas') and adds the optional filter detail. There is no wasted text, and it's appropriately sized for a straightforward tool with one parameter.
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 low complexity (1 optional parameter, no annotations, but has an output schema), the description is reasonably complete. It covers the purpose and basic usage, and the output schema likely handles return values, so the description doesn't need to explain them. However, it could benefit from more behavioral context, such as response format or error cases, to be fully comprehensive.
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 description coverage is 100%, so the schema already documents the single parameter 'prefix' with its default and purpose. The description adds marginal value by mentioning the filter in Spanish ('filtro opcional por prefijo'), but doesn't provide additional semantics beyond what the schema states. With 0 required parameters, the baseline is 4, as the tool is simple and the schema handles parameter documentation well.
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 verb ('Lista') and resource ('todas las claves almacenadas'), making the purpose understandable. It distinguishes itself from siblings like memory_get (retrieve specific key) and memory_set (store key) by focusing on listing all keys. However, it doesn't explicitly contrast with memory_clear or memory_delete, which are destructive operations.
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 the optional prefix filter, suggesting it's for browsing keys, but doesn't explicitly state when to use this tool versus alternatives. For example, it doesn't clarify that memory_get is for retrieving a specific key's value, or that this tool is for discovery purposes. The guidance is functional but not comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_setB
Guarda un valor en memoria persistente bajo una clave.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Nombre único de la clave (ej: "usuario_preferencias"). | |
| value | Yes | Valor a guardar. Puede ser texto, número, lista u objeto JSON. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. While it indicates this is a write operation ('Guarda'), it doesn't mention persistence characteristics (e.g., durability, expiration), permissions required, or potential side effects. This leaves significant gaps for a mutation 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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the core functionality.
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 that this is a mutation tool with no annotations but with a complete input schema and an output schema (which handles return values), the description is minimally adequate. However, it lacks important behavioral context about persistence and side effects that would be expected for a storage operation.
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 description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't clarify key uniqueness constraints or value serialization details). Baseline 3 is appropriate when the schema does the heavy lifting.
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 action ('Guarda un valor') and resource ('en memoria persistente bajo una clave'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like memory_get or memory_delete, which would require a 5.
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 no guidance on when to use this tool versus alternatives like memory_get (for retrieval) or memory_delete (for removal). It states what the tool does but offers no context about appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_jsA
Ejecuta un fragmento de código JavaScript con Node.js y devuelve su salida.
El código corre en un subproceso separado con:
Timeout configurable (por defecto 10 segundos).
Sin acceso a red (variables de entorno anuladas).
Node.js debe estar instalado en el sistema.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Código JavaScript a ejecutar. | |
| timeout | No | Tiempo máximo de ejecución en segundos (máximo 60). | |
| stdin | No | Texto a pasar como entrada estándar al programa. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 does an excellent job describing key behavioral traits: timeout configuration (default 10 seconds, maximum 60), execution in a separate subprocess, security constraints (no network access, overridden environment variables), and the prerequisite of Node.js installation. The only minor gap is not explicitly mentioning whether this is a read-only or destructive operation, though 'ejecuta' implies execution rather than data modification.
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 perfectly structured and concise. The first sentence states the core purpose, followed by bullet points that efficiently detail the execution environment and constraints. Every sentence earns its place with essential information, and there's no redundant or unnecessary 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 that this is a code execution tool with no annotations but with comprehensive input schema (100% coverage) and an output schema (confirmed in context signals), the description provides excellent contextual completeness. It covers the execution environment, security constraints, prerequisites, and behavioral characteristics, making it complete enough for an agent to understand when and how to use this tool effectively.
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?
With 100% schema description coverage, the schema already documents all three parameters thoroughly. The description doesn't add any additional parameter semantics beyond what's in the schema - it mentions timeout configuration generally but doesn't provide extra details about the code, timeout, or stdin parameters. This meets the baseline expectation when schema coverage is complete.
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 purpose with a specific verb ('Ejecuta' - executes) and resource ('un fragmento de código JavaScript con Node.js'), distinguishing it from sibling tools like run_python (different language) and memory_* tools (different functionality). It precisely defines what the tool does without being tautological.
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 clear context about when to use this tool by specifying the execution environment (Node.js, separate subprocess) and constraints (no network access, overridden environment variables). However, it doesn't explicitly state when NOT to use it or mention alternatives like run_python for Python code execution, which would be helpful for sibling tool differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_pythonA
Ejecuta un fragmento de código Python y devuelve su salida.
El código corre en un subproceso separado con:
Timeout configurable (por defecto 10 segundos).
Sin acceso a red (variables de entorno anuladas).
Límite de memoria de 256 MB en Linux.
El módulo sys.exit() termina el proceso sin errores.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Código Python a ejecutar. | |
| timeout | No | Tiempo máximo de ejecución en segundos (máximo 60). | |
| stdin | No | Texto a pasar como entrada estándar al programa. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 and does so excellently. It clearly describes the execution environment: separate subprocess, configurable timeout, no network access, memory limits, and how sys.exit() is handled. This provides crucial behavioral context beyond what the input schema covers.
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 perfectly structured and concise. The first sentence states the core purpose, followed by bullet points detailing the execution environment. Every sentence earns its place by providing essential information without redundancy. The information is front-loaded with the most important details first.
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 that this is a code execution tool with security implications, the description provides excellent completeness. With no annotations but an output schema present, the description thoroughly covers the execution environment constraints (timeout, network access, memory limits) and behavioral characteristics. This is complete enough for an agent to understand the tool's capabilities and limitations.
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 description coverage is 100%, so the baseline is 3. The description doesn't add specific parameter semantics beyond what's already in the schema descriptions. It mentions timeout configuration generally but doesn't provide additional details about the code, timeout, or stdin parameters beyond what the schema already documents.
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 purpose with specific verb+resource: 'Ejecuta un fragmento de código Python y devuelve su salida' (Executes a Python code fragment and returns its output). It distinguishes from sibling tools like run_js (JavaScript execution) and memory_* tools (memory operations). The description is specific about what the tool does without being tautological.
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 clear context about when to use this tool: for executing Python code in a sandboxed environment. It implicitly distinguishes from run_js for JavaScript execution and memory_* tools for memory operations. However, it doesn't explicitly state when NOT to use it or mention specific alternatives beyond what's obvious from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchB
Busca en internet usando DuckDuckGo y Playwright.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Texto a buscar. | |
| max_results | No | Número de resultados a devolver (máximo 10). | |
| deep | No | Si es True, accede a cada URL y extrae el contenido completo de la página además del snippet. | |
| language | No | Código de idioma para las cabeceras HTTP (ej: "es-ES", "en-US"). | es-ES |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 mentions the technologies (DuckDuckGo and Playwright) but doesn't describe key behavioral traits: whether this is a read-only operation, potential rate limits, authentication requirements, error handling, or what happens when 'deep' mode is enabled (e.g., timeouts or content extraction limits). For a tool with no annotation coverage, this leaves significant gaps in understanding its 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 extremely concise and front-loaded with a single, clear sentence: 'Busca en internet usando DuckDuckGo y Playwright.' There is no wasted text or redundancy, making it easy to understand the core purpose immediately. Every word earns its place by specifying the action, target, and implementation details.
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 that there's an output schema (not shown but indicated in context signals), the description doesn't need to explain return values. However, for a tool with 4 parameters, no annotations, and sibling tools present, the description is minimal. It covers the basic purpose but lacks usage guidelines, behavioral context, and differentiation from siblings. It's adequate as a starting point but has clear gaps that could hinder effective tool selection and invocation.
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 description adds no parameter-specific information beyond what's already in the input schema, which has 100% coverage with clear descriptions for all 4 parameters. The baseline score of 3 is appropriate since the schema fully documents the parameters (query, max_results, deep, language), and the description doesn't need to compensate for any gaps. However, it doesn't provide additional context like examples or constraints beyond the schema.
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 purpose: 'Busca en internet usando DuckDuckGo y Playwright' (Search the internet using DuckDuckGo and Playwright). It specifies the action (search) and the resource (internet), and mentions the specific technologies used. However, it doesn't explicitly differentiate this web search tool from its siblings like memory_* tools or code execution tools, which is why it doesn't reach a perfect score.
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 no guidance on when to use this tool versus alternatives. It doesn't mention any specific scenarios, prerequisites, or exclusions. While the context signals show sibling tools exist (like memory_* tools for data storage/retrieval and run_* tools for code execution), the description offers no comparison or decision criteria for choosing web_search over them.
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. Dates show when Glama detected each change.
8 tool updates
v0.1.0- First observed
memory_clear - First observed
memory_delete - First observed
memory_get - First observed
memory_list - First observed
memory_set - First observed
run_js - First observed
run_python - First observed
web_search
TDQS
Every tool has a clearly distinct purpose with no ambiguity. The five memory_* tools handle different CRUD operations for persistent storage, while run_js and run_python execute code in different languages, and web_search performs internet searches. There is no overlap in functionality between these categories.
Tool names follow a consistent verb_noun pattern throughout. The memory tools use clear action verbs (clear, delete, get, list, set) paired with 'memory', while the execution tools use 'run_' followed by the language, and web_search follows the same convention. All names are in snake_case with no deviations.
With 8 tools, the count is reasonable for a toolkit server. However, the scope feels slightly broad, combining memory management, code execution in two languages, and web search into one server, which might be better split. The tools earn their place, but the domain is not tightly focused.
For the memory domain, the tools provide complete CRUD coverage (set, get, delete, list, clear). For code execution, both JavaScript and Python are covered. The web_search tool adds internet capability. Minor gaps include no update operation for memory (though set can overwrite) and no tool for executing other languages, but agents can work around these.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables web searching, URL content extraction, and summarization without requiring API keys. It also provides advanced mathematical evaluation and multi-language Wikipedia summary retrieval tools.53196MIT
- AlicenseNot gradedqualityDmaintenanceA modular MCP server providing file operations, web search, URL scraping, and sandboxed command execution for LLM interactions.1MIT
- AlicenseAqualityDmaintenanceAn MCP server that provides real-time web search to AI agents via a pay-per-search USDC microtransaction system.5671MIT
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server that enables LLMs to safely execute code, control file systems, search the web, and integrate with services like Gmail and TMDB.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/YoshiLoL0526/mcp-toolkit'
If you have feedback or need assistance with the MCP directory API, please join our Discord server