Skip to main content
Glama

mcp-toolkit

General-purpose MCP server for AI agents. Built with Python 3.13, FastMCP, and Playwright.

Available tools

Tool

Description

web_search

Searches DuckDuckGo and extracts web content with Playwright

fetch_url

Extracts the main content from a direct URL

http_request

Executes generic HTTP requests without Playwright

time_now

Returns the current date and time in a specific timezone

date_utils

Converts timezones and calculates dates/durations

memory_set

Saves a persistent value in SQLite

memory_get

Retrieves a saved value

memory_delete

Deletes a key

memory_list

Lists all keys (with optional prefix filter)

memory_clear

Clears all memory (irreversible!)

memory_search

Searches for text in saved keys and values

run_python

Executes Python code in a sandboxed environment with a timeout

run_js

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-toolkit

Mandatory 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 chromium

Or alternatively, if you know the environment path:

~/.local/share/uv/tools/mcp-toolkit/bin/python -m playwright install chromium

Configuration 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 8080

The 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 sse transport is maintained for compatibility with older clients, but it has been deprecated since FastMCP 2.3.


Using the tools

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=True

fetch_url

Parámetros:
  url (str) — URL absoluta HTTP o HTTPS a leer

Example (agent):

Lee https://example.com/articulo con fetch_url

http_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 60

Example (agent):

Haz un POST a https://api.example.com/items con http_request

time_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 opcional

Security 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 pytest

Adding a new tool

  1. Create mcp_toolkit/tools/my_tool.py with an async def my_tool(...) -> str function

  2. Import and register it in server.py with mcp.tool()(my_tool)

  3. 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 tools
memory_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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesNombre de la clave a eliminar.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesNombre de la clave a recuperar.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixNoFiltrar claves que comiencen con este texto (vacío = todas).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesNombre único de la clave (ej: "usuario_preferencias").
valueYesValor a guardar. Puede ser texto, número, lista u objeto JSON.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesCódigo JavaScript a ejecutar.
timeoutNoTiempo máximo de ejecución en segundos (máximo 60).
stdinNoTexto a pasar como entrada estándar al programa.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesCódigo Python a ejecutar.
timeoutNoTiempo máximo de ejecución en segundos (máximo 60).
stdinNoTexto a pasar como entrada estándar al programa.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 8 tool updatesv0.1.0
    • First observedmemory_clear
    • First observedmemory_delete
    • First observedmemory_get
    • First observedmemory_list
    • First observedmemory_set
    • First observedrun_js
    • First observedrun_python
    • First observedweb_search

TDQS

A3.8/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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