Skip to main content
Glama

mcp-toolkit

用于 AI 代理的通用 MCP 服务器。 基于 Python 3.13、FastMCP 和 Playwright 构建。

可用工具

工具

描述

web_search

使用 Playwright 在 DuckDuckGo 上搜索并提取网页内容

fetch_url

提取直接 URL 的主要内容

http_request

执行不带 Playwright 的通用 HTTP 请求

time_now

返回指定时区的当前日期和时间

date_utils

转换时区并计算日期/持续时间

memory_set

在 SQLite 中保存持久化值

memory_get

检索已保存的值

memory_delete

删除键

memory_list

列出所有键(可选前缀过滤)

memory_clear

清除所有内存(不可逆!)

memory_search

在已保存的键和值中搜索文本

run_python

在带超时的沙盒中执行 Python 代码

run_js

在带超时的沙盒中通过 Node.js 执行 JavaScript 代码


Related MCP server: MCP Server

安装

前置要求

  • 已安装 UV

  • Python 3.13(如果未安装,UV 会自动下载)

  • Node.js(可选,仅用于 run_js)

选项 A — 从本地文件夹安装

git clone https://github.com/YoshiLoL0526/mcp-toolkit
cd mcp-toolkit
uv tool install --python 3.13 .

选项 B — 直接从 GitHub 安装

uv tool install --python 3.13 git+https://github.com/YoshiLoL0526/mcp-toolkit

强制步骤:为 Playwright 安装 Chromium

安装包后,仅需执行一次此命令:

# Obtener la ruta del entorno virtual creado por uv tool
uv tool run --from mcp-toolkit python -m playwright install chromium

或者,如果你知道环境路径:

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

MCP 客户端配置

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)

{
  "mcpServers": {
    "mcp-toolkit": {
      "command": "mcp-toolkit"
    }
  }
}

在 Windows 上,路径为 %APPDATA%\Claude\claude_desktop_config.json

Cursor / VS Code (.cursor/mcp.json 或 .vscode/mcp.json)

{
  "servers": {
    "mcp-toolkit": {
      "type": "stdio",
      "command": "mcp-toolkit"
    }
  }
}

HTTP 服务器(用于远程访问或多个客户端)

mcp-toolkit --transport http --host 0.0.0.0 --port 8080

服务器将在 http://<host>:<port>/mcp 上监听,使用 streamable-http 传输(当前 MCP 标准)。你可以使用 --path /otra-ruta 更改路径。

--transport sse 传输方式为了兼容旧客户端得以保留,但自 FastMCP 2.3 起已被弃用。


工具使用

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"

示例(代理):

Busca las últimas noticias sobre Python 3.13 con deep=True

fetch_url

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

示例(代理):

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

示例(代理):

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"
)

date_utils 支持的操作:parse、convert_timezone、add 和 diff。对于没有偏移量的日期,使用 timezone_name;时区必须是 IANA 名称,如 UTC、America/New_York 或 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")

数据保存在 ~/.local/share/mcp-toolkit/memory.db 中。 所有内存工具都接受 namespace 参数,以便按项目、客户端或对话隔离数据。如果未指定,则使用 default。

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

安全限制:

  • 最小化环境:不继承宿主进程的密钥或任意变量

  • 每次执行使用临时工作目录

  • HTTP 代理被环境变量覆盖

  • 内存限制:256 MB (Linux/macOS)

  • 严格超时:超时后进程将被终止

  • 在 Windows 上,Python 不应用进程内存限制

  • 网络锁定不能保证强隔离;对于不可信代码,建议在具有网络策略的容器或虚拟机中运行服务器

run_js

参数与 run_python 相同。需要系统中安装 Node.js。


开发

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

添加新工具

  1. 创建 mcp_toolkit/tools/mi_tool.py,包含一个 async def mi_tool(...) -> str 函数

  2. 在 server.py 中导入并使用 mcp.tool()(mi_tool) 注册它

  3. 重新安装:uv tool install --python 3.13 . --reinstall


项目结构

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/

许可证

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.

  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

Scored across 8 tools

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
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers