editor-mcp
Editor MCP
Un servidor editor de texto basado en Python, desarrollado con FastMCP, que proporciona potentes herramientas para la gestión de archivos. Este servidor permite leer, editar y gestionar archivos de texto mediante una API estandarizada con un enfoque único de varios pasos que mejora significativamente la precisión y la fiabilidad de la edición de código para LLM y asistentes de IA.
Características
Selección de archivo : establece un archivo con el que trabajar usando rutas absolutas
Operaciones de lectura :
Leer archivos completos con números de línea usando
skimLeer rangos de líneas específicos con números de línea prefijados usando
readBusque texto específico dentro de archivos usando
find_lineBusque y extraiga definiciones de funciones en archivos Python y JavaScript/JSX usando
find_function
Operaciones de edición :
Proceso de edición en dos pasos con vista previa de diferencias
Seleccionar y sobrescribir texto con verificación de identidad
Flujo de trabajo de edición limpio con seleccionar → sobrescribir → confirmar/cancelar patrón
Comprobación de sintaxis para archivos Python (.py) y JavaScript/React (.js, .jsx)
Crear nuevos archivos con contenido
Gestión de archivos :
Crear nuevos archivos con la inicialización adecuada
Eliminar archivos del sistema de archivos
Listar el contenido del directorio con
listdir
Soporte de pruebas :
Ejecutar pruebas de Python con
run_testsEstablecer rutas de Python para una resolución adecuada del módulo
Características de seguridad :
Verificación de Content ID para evitar conflictos
Límites de conteo de líneas para evitar el agotamiento de recursos
Comprobación de sintaxis para mantener la integridad del código
Rutas protegidas para restringir el acceso a archivos confidenciales
Related MCP server: MCP File Manager
Riesgos de seguridad
El editor-mcp incluye potentes capacidades que vienen con ciertas consideraciones de seguridad:
Riesgo de jailbreak : El editor-mcp podría sufrir jailbreak al leer un archivo con instrucciones maliciosas. El contenido malicioso en los archivos editados podría contener instrucciones que manipulen el asistente de IA.
Ejecución de código arbitrario : si la ejecución de pruebas está habilitada, existe el riesgo de ejecución de código arbitrario a través de archivos de prueba manipulados o código Python malicioso.
Exposición de datos : el acceso a las operaciones del sistema de archivos podría exponer información confidencial si no se configuran las protecciones de ruta adecuadas.
Para mitigar estos riesgos:
Utilice la variable de entorno
PROTECTED_PATHSpara restringir el acceso a archivos y directorios confidenciales.Deshabilite las capacidades de ejecución de pruebas en entornos de producción a menos que sea absolutamente necesario.
Revise cuidadosamente los archivos antes de abrirlos, especialmente si provienen de fuentes no confiables.
Considere ejecutar el editor en un entorno aislado con permisos limitados.
Ventajas clave para los LLM
El diseño único de este editor de texto resuelve problemas críticos que normalmente afectan la edición de código LLM:
Previene la pérdida de contexto : Los enfoques tradicionales suelen provocar que los LLM pierdan la visión general del código base tras unas pocas modificaciones. Esta implementación mantiene el contexto a través del proceso de varios pasos.
Evita reescrituras que consumen muchos recursos : los LLM suelen reemplazar archivos completos cuando se confunden, lo cual resulta costoso, lento e ineficiente. Este editor permite realizar ediciones selectivas.
Proporciona retroalimentación visual : el sistema de vista previa de diferencias permite que el LLM realmente vea y verifique los cambios antes de confirmarlos, lo que reduce drásticamente los errores.
Implementa la comprobación de sintaxis : la validación automática para Python y JavaScript/React garantiza que no se confirme el código roto.
Mejora el razonamiento de edición : el enfoque de múltiples pasos le da al LLM tiempo para razonar entre pasos, lo que reduce la producción aleatoria de tokens.
Gestión de recursos
El editor implementa varias medidas de seguridad para garantizar la estabilidad del sistema y evitar el agotamiento de los recursos:
Máximo de líneas de edición : de forma predeterminada, el editor aplica un límite de 50 líneas para cualquier operación de edición individual.
Instalación
Este MCP fue desarrollado y probado con Claude Desktop. Puedes descargar Claude Desktop en cualquier plataforma. Para Linux, puedes usar un script de instalación no oficial (que usa el archivo oficial). Repositorio recomendado: https://github.com/emsi/claude-desktop/tree/main
Una vez que tenga instalado Claude Desktop, siga las instrucciones a continuación para instalar este MCP específico:
Fácil instalación con UVX (recomendado)
La forma más sencilla de instalar el Editor MCP es utilizando el script de instalación proporcionado:
# Clone the repository
git clone https://github.com/danielpodrazka/editor-mcp.git
cd editor-mcp
# Run the installation script
chmod +x install.sh
./install.shEste script hará lo siguiente:
Compruebe si UVX está instalado e instálelo si es necesario
Instalar el Editor MCP en modo de desarrollo
Haga que el comando
editor-mcpesté disponible en su PATH
Instalación manual
Uso de UVX
# Install directly from GitHub
uvx install git+https://github.com/danielpodrazka/mcp-text-editor.git
# Or install from a local clone
git clone https://github.com/danielpodrazka/mcp-text-editor.git
cd mcp-text-editor
uvx install -e .Usando pip tradicional
pip install git+https://github.com/danielpodrazka/mcp-text-editor.git
# Or from a local clone
git clone https://github.com/danielpodrazka/mcp-text-editor.git
cd mcp-text-editor
pip install -e .Uso de requisitos (heredado)
Instalar desde el archivo de bloqueo:
uv pip install -r uv.lockGenerar un archivo de requisitos bloqueado:
uv pip compile requirements.in -o uv.lockUso
Iniciando el servidor
Después de la instalación, puede iniciar el servidor Editor MCP utilizando uno de estos métodos:
# Using the installed script
editor-mcp
# Or using the Python module
python -m text_editor.serverConfiguración de MCP
Puede agregar el Editor MCP a su archivo de configuración MCP:
{
"mcpServers": {
"text-editor": {
"command": "editor-mcp",
"env": {
"MAX_SELECT_LINES": "100",
"ENABLE_JS_SYNTAX_CHECK": "0",
"FAIL_ON_PYTHON_SYNTAX_ERROR": "1",
"FAIL_ON_JS_SYNTAX_ERROR": "0",
"PROTECTED_PATHS": "*.env,.env*,config*.json,*secret*,/etc/passwd,/home/user/.ssh/id_rsa"
}
}
}
}Configuración de variables de entorno
El editor MCP admite varias variables de entorno para personalizar su comportamiento:
MAX_SELECT_LINES : "100": número máximo de líneas que se pueden editar en una sola operación (el valor predeterminado es 50)
ENABLE_JS_SYNTAX_CHECK : "0" - Habilita o deshabilita la verificación de sintaxis de JavaScript y JSX (el valor predeterminado es "1" - habilitado)
FAIL_ON_PYTHON_SYNTAX_ERROR : "1": cuando está habilitado, los errores de sintaxis de Python cancelarán automáticamente la operación de sobrescritura (el valor predeterminado es habilitado)
FAIL_ON_JS_SYNTAX_ERROR : "0": cuando está habilitado, los errores de sintaxis de JavaScript/JSX cancelarán automáticamente la operación de sobrescritura (el valor predeterminado está deshabilitado).
PROTECTED_PATHS : Lista separada por comas de patrones de archivos o rutas a los que no se puede acceder, que admite comodines (por ejemplo, " .env,.env ,/etc/passwd")
Ejemplo de configuración de MCP al compilar desde la fuente
{
"mcpServers": {
"text-editor": {
"command": "/home/daniel/pp/venvs/editor-mcp/bin/python",
"args": ["/home/daniel/pp/editor-mcp/src/text_editor/server.py"],
"env": {
"MAX_SELECT_LINES": "100",
"ENABLE_JS_SYNTAX_CHECK": "0",
"FAIL_ON_PYTHON_SYNTAX_ERROR": "1",
"FAIL_ON_JS_SYNTAX_ERROR": "0",
"PROTECTED_PATHS": "*.env,.env*,config*.json,*secret*,/etc/passwd,/home/user/.ssh/id_rsa"
}
}
}
}Herramientas disponibles
El editor MCP proporciona 13 herramientas potentes para la manipulación, edición y prueba de archivos:
1. set_file
Establece el archivo actual con el que trabajar.
Parámetros :
filepath(str): Ruta absoluta al archivo
Devoluciones :
Mensaje de confirmación con la ruta del archivo
2. skim
Lee el texto completo del archivo actual. Cada línea tiene como prefijo su número.
Devoluciones :
Diccionario que contiene líneas con sus números de línea, número total de líneas y la configuración máxima de líneas de edición
Ejemplo de salida :
{
"lines": [
[1, "def hello():"],
[2, " print(\"Hello, world!\")"],
[3, ""],
[4, "hello()"]
],
"total_lines": 4,
"max_select_lines": 50
}3. read
Lee el texto del archivo actual desde la línea inicial hasta la línea final.
Parámetros :
start(int): Número de línea de inicio (indexación basada en 1)end(int): Número de línea final (indexación basada en 1)
Devoluciones :
Diccionario que contiene líneas con sus números de línea como claves, junto con información de la línea de inicio y final
Ejemplo de salida :
{
"lines": [
[1, "def hello():"],
[2, " print(\"Hello, world!\")"],
[3, ""],
[4, "hello()"]
],
"start_line": 1,
"end_line": 4
}4. select
Seleccione un rango de líneas del archivo actual para la posterior operación de sobrescritura.
Parámetros :
start(int): Número de línea de inicio (basado en 1)end(int): Número de línea final (basado en 1)
Devoluciones :
Diccionario que contiene las líneas seleccionadas, el rango de líneas y la identificación para verificación
Nota :
Esta herramienta valida la selección contra max_select_lines
Los detalles de selección se almacenan para su uso en la herramienta de sobrescritura.
Esto debe usarse antes de llamar a la herramienta de sobrescritura
5. overwrite
Prepárese para sobrescribir un rango de líneas en el archivo actual con texto nuevo.
Parámetros :
new_lines(lista): Lista de nuevas líneas para sobrescribir el rango seleccionado
Devoluciones :
Vista previa de diferencias que muestra los cambios propuestos
Nota :
Este es el primer paso de un proceso de dos pasos:
Primera llamada a overwrite() para generar una vista previa de la diferencia
Luego llame a confirm() para aplicar o cancel() para descartar los cambios pendientes.
Esta herramienta permite reemplazar las líneas previamente seleccionadas con contenido nuevo
El número de nuevas líneas puede diferir de la selección original.
Para los archivos Python (extensión .py), la verificación de sintaxis se realiza antes de escribir
Para los archivos JavaScript/React (extensiones .js, .jsx), la verificación de sintaxis es opcional y se puede deshabilitar mediante la variable de entorno
ENABLE_JS_SYNTAX_CHECK
6. confirm
Aplicar los cambios pendientes de la operación de sobrescritura.
Devoluciones :
Resultado de la operación con estado y mensaje
Nota :
Esta es una de las dos acciones posibles en el segundo paso del proceso de edición.
La selección se elimina tras la aplicación exitosa de los cambios.
7. cancel
Descartar los cambios pendientes de la operación de sobrescritura.
Devoluciones :
Resultado de la operación con estado y mensaje
Nota :
Esta es una de las dos acciones posibles en el segundo paso del proceso de edición.
La selección permanece intacta cuando se cancelan los cambios.
8. delete_file
Eliminar el archivo configurado actualmente.
Devoluciones :
Resultado de la operación con estado y mensaje
9. new_file
Crea un nuevo archivo.
Parámetros :
absolute_file_path(str): Ruta del nuevo archivo
Devoluciones :
Resultado de la operación con estado e id del contenido si aplica
Nota :
Esta herramienta fallará si el archivo actual existe y no está vacío
10. find_line
Busque líneas que coincidan con el texto proporcionado en el archivo actual.
Parámetros :
search_text(str): Texto a buscar en el archivo
Devoluciones :
Diccionario que contiene líneas coincidentes con sus números de línea y coincidencias totales
Ejemplo de salida :
{
"status": "success",
"matches": [
[2, " print(\"Hello, world!\")"]
],
"total_matches": 1
}Nota :
Devuelve un error si no se establece ninguna ruta de archivo
Busca coincidencias de texto exactas dentro de cada línea
El id se puede utilizar para operaciones de edición posteriores
11. find_function
Busque una definición de función o método en el archivo Python o JavaScript/JSX actual.
Parámetros :
function_name(str): Nombre de la función o método a buscar
Devoluciones :
Diccionario que contiene las líneas de función con sus números de línea, línea_de_inicio y línea_de_finalización
Ejemplo de salida :
{
"status": "success",
"lines": [
[10, "def hello():"],
[11, " print(\"Hello, world!\")"],
[12, " return True"]
],
"start_line": 10,
"end_line": 12
}Nota :
Para los archivos Python, esta herramienta utiliza el AST de Python y tokeniza los módulos para identificar con precisión los límites de las funciones, incluidos los decoradores y las cadenas de documentación.
Para archivos JavaScript/JSX, esta herramienta utiliza una combinación de enfoques:
Método principal: análisis de Babel AST cuando esté disponible (requiere paquetes Node.js y Babel)
Método de respaldo: coincidencia de patrones de expresiones regulares para declaraciones de funciones cuando Babel no está disponible
Admite varios tipos de funciones de JavaScript, incluidas funciones estándar, funciones asíncronas, funciones de flecha y ganchos de React.
Devuelve un error si no se establece ninguna ruta de archivo o si no se encuentra la función
12. listdir
Enumera el contenido de un directorio.
Parámetros :
dirpath(str): Ruta al directorio a listar
Devoluciones :
Diccionario que contiene la lista de nombres de archivos y la ruta consultada
13. run_tests y set_python_path
Herramientas para ejecutar pruebas de Python con pytest y configurar el entorno de Python.
Establezca en "0", "falso" o "no" para deshabilitar la comprobación de sintaxis de JavaScript
Útil si no tienes instalado Babel y las dependencias relacionadas
FAIL_ON_PYTHON_SYNTAX_ERROR: Controla si los errores de sintaxis de Python cancelan automáticamente la operación de sobrescritura (valor predeterminado: 1)Cuando está habilitado, los errores de sintaxis en los archivos Python harán que la acción de sobrescritura se cancele automáticamente.
Las líneas permanecerán seleccionadas para que puedas corregir el error y volver a intentarlo.
FAIL_ON_JS_SYNTAX_ERROR: Controla si los errores de sintaxis de JavaScript/JSX cancelan automáticamente la operación de sobrescritura (valor predeterminado: 0)Cuando está habilitado, los errores de sintaxis en archivos JavaScript/JSX harán que la acción de sobrescritura se cancele automáticamente.
Las líneas permanecerán seleccionadas para que puedas corregir el error y volver a intentarlo.
DUCKDB_USAGE_STATS: Controla si las estadísticas de uso se recopilan en una base de datos DuckDB (valor predeterminado: 0)Establezca en "1", "verdadero" o "sí" para habilitar la recopilación de estadísticas de uso de la herramienta.
Cuando está habilitado, registra información sobre cada llamada de herramienta, incluidas las marcas de tiempo y los argumentos.
STATS_DB_PATH: Ruta donde se almacenará la base de datos DuckDB para estadísticas (predeterminado: "text_editor_stats.duckdb")Solo se utiliza cuando
DUCKDB_USAGE_STATSestá habilitado
PROTECTED_PATHS: Lista separada por comas de patrones de archivos o rutas absolutas a las que se les negará el accesoEjemplo:
*.env,.env*,config*.json,*secret*,/etc/passwd,/home/user/credentials.txtAdmite rutas de archivos exactas y patrones glob flexibles con comodines en cualquier posición:
*.env: coincide con archivos que terminan en .env, como.env,dev.env,prod.env.env*- coincide con archivos que comienzan con .env, como.env,.env.local,.env.production*secret*- coincide con cualquier archivo que contenga 'secreto' en el nombre
Proporciona protección contra la exposición accidental de archivos de configuración y credenciales confidenciales.
Las líneas permanecerán seleccionadas para que puedas corregir el error y volver a intentarlo.
Desarrollo
Prerrequisitos
El editor-mcp requiere:
Python 3.7+
Paquete FastMCP
negro (para comprobaciones de formato de código Python)
Babel (para comprobaciones de sintaxis de JavaScript/JSX si se trabaja con esos archivos)
Instalar dependencias de desarrollo:
# Using pip
pip install pytest pytest-asyncio pytest-cov
# Using uv
uv pip install pytest pytest-asyncio pytest-covPara validar la sintaxis de JavaScript/JSX, necesita Node.js y Babel. El editor de texto usa npx babel para comprobar la sintaxis de JS/JSX al editar estos tipos de archivos:
# Required for JavaScript/JSX syntax checking
npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/preset-react
# You can also install these globally if you prefer
# npm install -g @babel/core @babel/cli @babel/preset-env @babel/preset-reactEl editor requiere:
@babel/corey@babel/cli: paquetes básicos de Babel para la comprobación de sintaxis@babel/preset-env- Para archivos JavaScript estándar (.js)@babel/preset-react- Para archivos React JSX (.jsx)
Ejecución de pruebas
# Run tests
pytest -v
# Run tests with coverage
pytest -v --cov=text_editorEstructura de la prueba
El conjunto de pruebas cubre:
herramienta set_file
Configuración de archivos válidos
Configuración de archivos inexistentes
herramienta de lectura
Validación del estado del archivo
Leyendo archivos completos
Lectura de rangos de líneas específicos
Casos extremos como archivos vacíos
Manejo de rango no válido
herramienta de selección
Validación de rango de línea
Validación de selección contra max_select_lines
Almacenamiento de selección para operaciones posteriores
herramienta de sobrescritura
Verificación de contenido seleccionado mediante identificación
Validación de reemplazo de contenido
Comprobación de sintaxis para archivos Python y JavaScript/React
Generación de vista previa de diferencias para cambios
confirmar y cancelar herramientas
Aplicar o cancelar cambios pendientes
Proceso de verificación de dos pasos
herramienta de eliminación de archivos
Validación de eliminación de archivos
herramienta new_file
Validación de creación de archivos
Manejo de archivos existentes
herramienta find_line
Encontrar coincidencias de texto en archivos
Manejo de términos de búsqueda específicos
Manejo de errores para archivos inexistentes
Manejo de casos sin coincidencias
Manejo de archivos existentes
Cómo funciona
El enfoque de edición de varios pasos
A diferencia de los métodos tradicionales de edición de código, donde los LLM simplemente buscan líneas para editar y realizan reemplazos (lo que a menudo genera confusión después de varias ediciones), este editor implementa un flujo de trabajo estructurado de varios pasos que mejora drásticamente la precisión de la edición:
set_file - Primero, el LLM establece qué archivo quiere editar
Skim - El LLM lee todo el archivo para obtener una descripción general completa
leer - El LLM examina secciones específicas relevantes para la tarea, con líneas que se muestran junto a los números para un mejor contexto
seleccionar - Cuando esté listo para editar, el LLM selecciona líneas específicas (limitadas a un número configurable, predeterminado 50)
sobrescribir : LLM propone contenido de reemplazo, lo que da como resultado una vista previa de estilo git diff que muestra exactamente qué cambiará
Confirmar/Cancelar : después de revisar la vista previa, el LLM puede aplicar o descartar los cambios.
Este flujo de trabajo estructurado obliga al LLM a analizar cuidadosamente cada edición y evita errores comunes, como sobrescribir archivos completos accidentalmente. Al ver vistas previas de los cambios antes de confirmarlos, el LLM puede verificar que las ediciones sean correctas.
Sistema de verificación de identidad
El servidor utiliza FastMCP para ofrecer funciones de edición de texto mediante una API bien definida. El sistema de verificación de identidad garantiza la integridad de los datos verificando que el contenido no haya cambiado entre las operaciones de lectura y modificación.
El mecanismo de identificación utiliza SHA-256 para generar un identificador único del contenido del archivo o de los rangos de líneas seleccionados. Para operaciones específicas de línea, el ID incluye un prefijo que indica el rango de líneas (p. ej., "L10-15-[hash]"). Esto ayuda a garantizar que las modificaciones se apliquen al contenido esperado.
Detalles de implementación
La clase principal TextEditorServer :
Se inicializa con una instancia de FastMCP llamada "editor de texto".
Establece un límite
max_select_linesconfigurable (predeterminado: 50) a partir de variables de entornoMantiene la ruta del archivo actual como estado
Registra trece herramientas principales a través de FastMCP:
set_file: valida y establece la ruta del archivo actualskim: lee todo el contenido de un archivo y devuelve un diccionario de números de línea a texto de línearead: lee líneas de un rango de líneas especificado y devuelve un diccionario estructurado del contenido de las líneasselect: selecciona líneas para la operación de sobrescritura posterioroverwrite: toma una lista de nuevas líneas y prepara una vista previa de diferencias para cambiar el contenidoconfirm: aplica los cambios pendientes de la operación de sobrescrituracancel: descarta los cambios pendientes de la operación de sobrescrituradelete_file: elimina el archivo actualnew_file: Crea un nuevo archivofind_line: Encuentra líneas que contienen texto específicofind_function: busca definiciones de funciones o métodos en archivos Python y JavaScript/JSXlistdir: enumera el contenido de un directoriorun_testsyset_python_path: herramientas para ejecutar pruebas de Python
El servidor se ejecuta utilizando el transporte stdio de FastMCP de forma predeterminada, lo que facilita la integración con varios clientes.
Aviso del sistema para obtener mejores resultados
Para obtener resultados óptimos con los asistentes de IA, se recomienda utilizar el mensaje del sistema (consulte system_prompt.md ) que ayuda a guiar a la IA para realizar ediciones manejables y seguras.
Este mensaje del sistema ayuda al asistente de IA a:
Realizar cambios incrementales : dividir las ediciones en partes más pequeñas
Mantener la integridad del código : realizar cambios que mantengan el código funcional
Trabajar dentro de los límites de recursos : evitar operaciones que puedan saturar el sistema
Seguir un flujo de trabajo de verificación : realizar comprobaciones finales para detectar errores después de las ediciones
Al incorporar este aviso del sistema cuando trabaje con asistentes de IA, obtendrá un comportamiento de edición más confiable y evitará errores comunes en la edición de código automatizada.

Estadísticas de uso
El editor de texto MCP puede recopilar estadísticas de uso cuando está habilitado, lo que proporciona información sobre cómo se utilizan las herramientas de edición:
Recopilación de datos : las estadísticas se recopilan en una base de datos DuckDB cuando
DUCKDB_USAGE_STATSestá habilitadoInformación rastreada : registra el nombre de la herramienta, los argumentos, la marca de tiempo, la ruta del archivo actual, la respuesta de la herramienta y las identificaciones de solicitud/cliente
Ubicación de almacenamiento : los datos se almacenan en un archivo DuckDB especificado por
STATS_DB_PATHPrivacidad : todo se almacena localmente en su máquina.
Las estadísticas recopiladas pueden ayudar a comprender patrones de uso, identificar flujos de trabajo comunes y optimizar el editor para las operaciones más frecuentes.
Puede consultar la base de datos utilizando SQL estándar a través de cualquier cliente DuckDB para analizar patrones de uso.
Solución de problemas
Si encuentra problemas:
Comprobar permisos de archivos
Verifique que las rutas de los archivos sean absolutas
Asegúrese de que el entorno utilice Python 3.7+
Inspiración
Inspirado en un proyecto similar: https://github.com/tumf/mcp-text-editor , que al principio bifurqué, sin embargo decidí reescribir todo el código base desde cero para que solo la idea general permaneciera igual.
Available Tools
14 toolscancelD
Cancel action
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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. 'Cancel action' gives no information about what the tool actually does behaviorally - whether it's a read-only status change, a destructive operation, what permissions are required, what side effects occur, or what the typical response looks like. The description is completely inadequate for understanding the tool's 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?
While 'Cancel action' is extremely brief, this is under-specification rather than effective conciseness. The two words fail to provide necessary information about the tool's purpose and usage. True conciseness would efficiently convey essential information, but this description is so sparse that it's essentially non-functional as documentation.
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 the tool has no parameters but likely performs some meaningful action (cancellation), the description is incomplete. With no annotations to provide behavioral context and a description that offers only the most minimal information, an agent would struggle to understand when and how to use this tool appropriately. The existence of an output schema helps somewhat, but the description itself provides insufficient context for 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 tool has 0 parameters with 100% schema description coverage, so the schema fully documents the parameter situation (none). The description doesn't need to compensate for any parameter documentation gaps. The baseline for zero parameters with full schema coverage is 4, as there are no parameters whose semantics need explanation beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Cancel action' is a tautology that essentially restates the tool name 'cancel'. It doesn't specify what type of action gets canceled, what resource is affected, or what the cancellation entails. While the name suggests a general cancellation function, the description adds no meaningful clarification beyond the name itself.
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 absolutely no guidance on when to use this tool versus alternatives. With sibling tools like 'confirm', 'delete_file', 'overwrite', and others that might represent different actions or states, there's no indication of what context triggers a cancellation, what prerequisites exist, or what alternatives might be appropriate in different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirmC
Confirm action
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Confirm action' implies a mutation (confirmation typically changes state), but it doesn't specify what gets confirmed, whether it's reversible, what permissions are needed, or what the response contains. This leaves significant gaps for a tool that likely modifies workflow state.
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 ('Confirm action') but arguably under-specified rather than efficiently informative. While it wastes no words, it fails to provide the minimal context needed to understand what's being confirmed, making this brevity problematic rather than virtuous.
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 likely performs a state-changing confirmation (implied by the name and sibling tools like 'cancel'), the description is incomplete. With no annotations, no parameter documentation needed, but an output schema exists, the description should at least clarify what action is confirmed and in what context, which it fails to do.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters with 100% schema description coverage, so the schema already fully documents the absence of inputs. The description doesn't need to compensate for any parameter gaps, and 'Confirm action' appropriately implies no additional inputs are required for a simple confirmation operation.
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 'Confirm action' is a tautology that essentially restates the tool name 'confirm' without specifying what action is being confirmed or what resource is involved. It provides no differentiation from sibling tools like 'cancel' or 'select' that might also involve confirmation-like 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?
No guidance is provided on when to use this tool versus alternatives. The description doesn't indicate what context triggers its use, what prerequisites exist, or how it differs from sibling tools like 'cancel' (which might abort an action) or 'select' (which might choose among options).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileC
Delete current file
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the action without behavioral details. It doesn't disclose if deletion is permanent, requires permissions, has side effects, or what happens on success/failure. 'Delete' implies destructive mutation, but specifics are missing.
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?
Extremely concise at two words, front-loaded with the core action. Every word earns its place with no wasted text, though this brevity contributes to vagueness in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no annotations, the description is incomplete. It lacks context on what 'current' means, deletion behavior, permissions, or output. The presence of an output schema helps, but the description doesn't leverage it to explain return values or error conditions.
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 no parameter documentation is needed. The description doesn't add param info, but that's appropriate here, meeting the baseline for zero-param tools.
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 'Delete current file' clearly states the action (delete) and target (current file), but it's vague about what 'current' refers to in context. It doesn't distinguish this from potential sibling operations like 'overwrite' or 'cancel' that might also modify files.
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 like 'overwrite' or 'cancel'. The description implies it's for deletion but doesn't specify prerequisites, conditions, or what makes a file 'current'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_functionA
Find a function or method definition in a Python or JS/JSX file. Uses AST parsers.
Args: function_name (str): Name of the function or method to find
Returns: dict: function lines with their line numbers, start_line, and end_line
| Name | Required | Description | Default |
|---|---|---|---|
| function_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool's behavior: it finds function/method definitions using AST parsers and returns line numbers and ranges. However, it doesn't mention error handling (e.g., if file doesn't exist or function isn't found), performance characteristics, or whether it searches recursively in directories. It adds value beyond the minimal schema but lacks comprehensive behavioral details.
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 efficiently structured with a clear purpose statement followed by Args and Returns sections. Every sentence earns its place: the first sentence defines the tool's core functionality, and the subsequent lines provide essential parameter and return value information without redundancy.
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 moderate complexity (AST parsing across two languages), no annotations, and an output schema that likely defines the return dict structure, the description is reasonably complete. It covers what the tool does, the parameter meaning, and return format. However, it could better address error cases or language-specific quirks (e.g., JSX vs JS differences) for full completeness.
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 has 0% description coverage, so the description must compensate. It clearly explains the single parameter 'function_name' as 'Name of the function or method to find', which adds essential semantic meaning not present in the bare schema. However, it doesn't specify case-sensitivity, partial matching, or handling of nested methods (e.g., 'ClassName.method_name'), leaving some ambiguity.
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 ('Find a function or method definition'), the target resources ('in a Python or JS/JSX file'), and the implementation method ('Uses AST parsers'). It distinguishes itself from siblings like 'find_line' (general line search) and 'skim' (likely file overview) by focusing specifically on function/method definitions with AST parsing.
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 context by specifying 'Python or JS/JSX file' and 'function or method definition', suggesting it should be used when searching for function definitions in those file types. However, it doesn't explicitly state when NOT to use it or name alternatives like 'find_line' for non-function searches or 'skim' for file overviews.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_lineA
Find lines that match provided text in the current file.
Args: search_text (str): Text to search for in the file
Returns: dict: Matching lines with their line numbers, and full text
| Name | Required | Description | Default |
|---|---|---|---|
| search_text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 states the tool finds matching lines but does not disclose behavioral traits such as case sensitivity, regex support, search scope (e.g., whole file vs. visible portion), or performance considerations (e.g., large file handling). The description is minimal beyond the basic operation.
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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured Args and Returns sections. Every sentence earns its place with no redundant information, making it efficient and easy to parse.
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 (one parameter) and the presence of an output schema (which covers return values), the description is mostly complete. It explains what the tool does and the parameter, but lacks behavioral details (e.g., search behavior) that would be helpful despite the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage (schema has no descriptions), the description must compensate. It adds meaning by specifying that 'search_text' is 'Text to search for in the file', clarifying the parameter's purpose. However, it does not detail constraints (e.g., length, special characters) or examples, leaving some gaps.
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 ('Find lines that match provided text') and resource ('in the current file'), distinguishing it from siblings like 'find_function' (which likely searches for functions) and 'read' (which reads the entire file). The verb+resource combination 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 implies usage for text matching in a file, but does not explicitly state when to use this tool versus alternatives like 'find_function' (for functions) or 'skim' (purpose unclear). No exclusions or prerequisites are mentioned, leaving the agent to infer context from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listdirD
| Name | Required | Description | Default |
|---|---|---|---|
| dirpath | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_fileA
Creates a new file.
After creating new file, the first line is automatically selected for editing. Automatically creates parent directories if they don't exist.
Args: filepath (str): Path of the new file Returns: dict: Status message with selection info
| Name | Required | Description | Default |
|---|---|---|---|
| filepath | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it creates a file, automatically selects the first line for editing, and creates parent directories if missing. This covers mutation behavior and side effects, though it doesn't mention permissions, error handling, or rate limits, which are gaps for a tool with no annotations.
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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by important behavioral details, and ends with structured Args and Returns sections. Every sentence adds value without redundancy, making it efficient and easy to parse.
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 moderate complexity (file creation with side effects), no annotations, and an output schema present, the description is fairly complete. It explains the action, behavioral traits, and parameter semantics, but could improve by addressing error cases or interaction with siblings. The output schema handles return values, so the description's focus on other aspects is appropriate.
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 meaningful context for the single parameter 'filepath' by explaining it's the 'Path of the new file', which clarifies its purpose beyond the schema's basic type definition. With 0% schema description coverage and only one parameter, this compensation is effective, though it doesn't detail format constraints or 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 clearly states the tool's purpose with the verb 'creates' and resource 'new file', making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'overwrite' or 'set_file', which might also involve file creation or modification, leaving room for ambiguity in tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating new files and automatically handling parent directories, but provides no explicit guidance on when to use this tool versus alternatives like 'overwrite' or 'set_file'. It mentions automatic post-creation actions (first line selection), which hints at context, but lacks clear when-to-use or when-not-to-use directives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overwriteB
Overwrite the selected lines with new text. Amount of new lines can differ from the original selection
Args: new_lines (dict): Example: {"lines":["line one", "second line"]}
Returns: dict: Diff preview showing the proposed changes, and any syntax errors for JS or Python
| Name | Required | Description | Default |
|---|---|---|---|
| new_lines | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool overwrites lines and returns a diff preview with syntax errors for JS or Python, which adds useful context about output and language-specific behavior. However, it lacks details on permissions, side effects (e.g., whether changes are immediate or require confirmation), or error handling, leaving 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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by key behavioral details. The Args and Returns sections are structured but could be more integrated. There's minimal waste, though the example in Args might be slightly verbose; overall, it earns its place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mutation with 1 parameter, nested objects, and an output schema), the description is partially complete. It explains the action and return values, and the output schema likely covers the diff preview details, reducing the burden. However, with no annotations and low schema coverage, it misses critical context like safety, prerequisites, and full parameter semantics, making it adequate but with clear gaps.
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 0%, so the description must compensate. It provides an example for the 'new_lines' parameter (a dict with a 'lines' key containing an array of strings), which adds meaning beyond the generic object type in the schema. However, it doesn't explain the structure fully (e.g., other possible keys, constraints) or cover nested object details, resulting in incomplete parameter documentation.
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: 'Overwrite the selected lines with new text' specifies the verb (overwrite) and resource (selected lines). It distinguishes from siblings like 'delete_file' or 'set_file' by focusing on line-level text replacement rather than file operations. However, it doesn't explicitly differentiate from similar text-editing siblings that might exist, keeping it at 4 instead of 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?
No guidance is provided on when to use this tool versus alternatives. The description mentions that the amount of new lines can differ from the original selection, which implies a context of line editing, but it doesn't specify prerequisites (e.g., needing a selection first), exclusions, or direct comparisons to siblings like 'set_file' or 'confirm'. This leaves the agent without clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readA
Read lines from the current file from start line to end line, returning them in a dictionary like {"lines":[[1,"text on first line"],[2,"text on second line"]]}. This makes it easier to find the precise lines to select for editing.
Args: start (int, optional): Start line number end (int, optional): End line number
Returns: dict: lines, start_line, end_line
| Name | Required | Description | Default |
|---|---|---|---|
| start | Yes | ||
| end | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool reads lines and returns them in a specific dictionary format, which is useful. However, it lacks details on error handling, file state changes, or permissions needed, leaving behavioral gaps for a read operation.
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 appropriately sized and front-loaded with the core functionality in the first sentence. The Args and Returns sections are structured but slightly verbose; every sentence adds value, though it could be more streamlined.
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, no annotations, and an output schema present, the description is fairly complete. It explains the purpose, parameters, and return format adequately. However, it could improve by addressing error cases or interaction with sibling tools for better context.
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 0%, so the description must compensate. It adds meaning by explaining that 'start' and 'end' are line numbers and are optional in the Args section, clarifying their role in selecting lines. However, it doesn't detail default behaviors or constraints beyond basic types.
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 ('Read lines from the current file') and resource ('current file'), distinguishing it from siblings like 'skim' or 'select'. It precisely defines what the tool does without being vague or 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 implies usage for editing by mentioning 'easier to find the precise lines to select for editing', but does not explicitly state when to use this tool versus alternatives like 'skim' or 'find_line'. No exclusions or clear alternatives are provided, leaving usage context somewhat implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_testsB
Run pytest tests using the specified Python virtual environment.
Args: test_path (str, optional): Directory or file path containing tests to run test_name (str, optional): Specific test function/method to run verbose (bool, optional): Run tests in verbose mode collect_only (bool, optional): Only collect tests without executing them
Returns: dict: Test execution results including returncode, output, and execution time
| Name | Required | Description | Default |
|---|---|---|---|
| test_path | No | ||
| test_name | No | ||
| verbose | No | ||
| collect_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but provides minimal behavioral context. It mentions the tool runs tests in a virtual environment but doesn't disclose critical behaviors like: whether it modifies files, what happens if tests fail, if it requires specific permissions, execution timeouts, or how results are structured beyond the basic return dict. The description doesn't contradict annotations (none exist).
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 well-structured with clear sections (purpose statement, Args, Returns) and appropriately sized. The opening sentence efficiently states the core purpose. The Args section is necessary given the 0% schema coverage. Only minor improvement possible by integrating parameter explanations more seamlessly.
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 4 parameters with 0% schema coverage and no annotations, the description does a good job explaining parameters and return values. However, for a test execution tool that could have significant behavioral implications (modifying state, long-running processes, failure modes), the description lacks important context about execution environment, error handling, and behavioral constraints that would be needed for safe 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?
With 0% schema description coverage, the description compensates well by clearly explaining all 4 parameters in the Args section, adding meaningful context about what each parameter controls. The description provides semantic value beyond the bare schema by explaining test_path accepts 'Directory or file path', test_name is for 'Specific test function/method', and what collect_only actually does ('Only collect tests without executing them').
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 ('Run pytest tests') and resource ('using the specified Python virtual environment'), distinguishing it from all sibling tools which are file/function operations rather than test execution. The verb 'Run' 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?
No guidance is provided about when to use this tool versus alternatives. While it's clearly for running pytest tests, there's no mention of prerequisites (e.g., needing a virtual environment setup), when to use collect_only versus full execution, or how it relates to other testing tools (none exist among siblings).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
selectC
Select lines from for subsequent overwrite operation.
Args: start (int): Start line number (1-based) end (int): End line number (1-based)
Returns: dict: status, lines, start, end, id, line_count, message
| Name | Required | Description | Default |
|---|---|---|---|
| start | Yes | ||
| end | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but provides minimal behavioral information. It mentions this is for a 'subsequent overwrite operation' which implies this is a preparatory step, but doesn't describe what happens during the selection (does it lock lines? create a temporary buffer? require specific permissions?). No information about side effects, error conditions, or performance characteristics.
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 appropriately brief with clear sections (purpose statement, Args, Returns). The first sentence could be more polished ('Select lines from' is incomplete), but overall the structure is efficient with no wasted words. Each section serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there's an output schema (Returns section), the description doesn't need to explain return values in detail. However, for a tool with no annotations and only 2 parameters, the description provides adequate but minimal context. It explains what the tool does and documents parameters, but lacks information about error conditions, prerequisites, or how it integrates with the 'overwrite' sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an Args section that clearly documents both parameters with their types and meaning (line numbers, 1-based). With 0% schema description coverage and only 2 parameters, this documentation fully compensates for the schema gap. The parameter information is complete and adds meaningful context beyond the bare 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 states the tool 'Select lines from for subsequent overwrite operation' which indicates a selection function but is grammatically awkward and vague about what resource is being selected from. It distinguishes from siblings like 'overwrite' by indicating this is a preparatory step, but doesn't clarify what type of content or file is involved.
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 mentions this is 'for subsequent overwrite operation' which provides some context about when to use it, but doesn't explicitly state when NOT to use it or what alternatives exist. No guidance is given about prerequisites or how this tool relates to other file operations in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_fileA
Set the current file to work with.
This is always the first step in the workflow. You must set a file before you can use other tools like read, select etc.
| Name | Required | Description | Default |
|---|---|---|---|
| filepath | Yes |
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 states the tool sets a file as a prerequisite for other operations, implying a stateful context, but doesn't disclose behavioral traits like whether the file must exist, what happens on invalid paths, if this persists across sessions, or any error conditions. For a tool with no annotations, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: two sentences that efficiently convey purpose and usage guidelines without redundancy. Every sentence adds value, and it's front-loaded with the core action.
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 moderate complexity (stateful operation with a prerequisite role), no annotations, and an output schema present (which may cover return values), the description is partially complete. It explains the workflow role but lacks details on parameter semantics and behavioral transparency, making it adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 1 parameter with 0% description coverage. The description doesn't add any meaning beyond the schema—it doesn't explain what 'filepath' represents (e.g., absolute/relative path, format, constraints). With low schema coverage, the description fails to compensate, but since there's only one parameter, the baseline is slightly higher than minimal.
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: 'Set the current file to work with.' This is a specific verb ('set') and resource ('current file'), making the action understandable. However, it doesn't explicitly differentiate from sibling tools like 'new_file' or 'delete_file' beyond workflow context.
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 usage guidance: 'This is always the first step in the workflow. You must set a file before you can use other tools like read, select etc.' It clearly states when to use it (first step) and why (prerequisite for other tools), with named alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_python_pathB
Set it before running tests so the project is correctly recognized
| Name | Required | Description | Default |
|---|---|---|---|
| path | 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 implies a configuration change ('set') but doesn't disclose behavioral traits like whether it's persistent, requires specific permissions, or has side effects. For a mutation tool with no annotations, this is inadequate.
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 is front-loaded with the key information. It wastes no words and is appropriately sized for its purpose, earning full marks for conciseness.
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 as a configuration setter with no annotations, no output schema, and low schema coverage, the description is incomplete. It lacks details on behavior, parameter usage, and expected outcomes, making it insufficient for effective tool 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 input schema has 1 parameter with 0% description coverage, and the tool description doesn't add any meaning about the 'path' parameter. It fails to explain what the path represents, its format, or examples, leaving the parameter semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's purpose is to 'set' something 'before running tests' for project recognition, which is clear but vague. It doesn't specify what exactly is being set (Python path) or distinguish it from siblings like 'set_file', making it moderately helpful but lacking specificity.
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 context for when to use it ('before running tests'), which is helpful guidance. However, it doesn't mention when not to use it or alternatives among siblings, such as how it differs from 'set_file', leaving some gaps in usage differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skimA
Read text from the current file, truncated to the first SKIM_MAX_LINES lines.
Returns: dict: lines, total_lines, max_select_lines
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it's a read operation (implied by 'Read text'), truncates output based on `SKIM_MAX_LINES`, and returns a dict with specific keys. However, it doesn't mention permissions, error conditions, or how `SKIM_MAX_LINES` is defined (e.g., environment variable, default value), leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: the first sentence states the core action and constraint, and the second sentence clearly outlines the return format. Every sentence earns its place with no wasted words, making it easy to parse and front-loaded with 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 low complexity (0 parameters, read-only operation) and the presence of an output schema (implied by 'Returns: dict'), the description is mostly complete. It covers purpose, behavior, and output structure. However, it lacks details on `SKIM_MAX_LINES` (e.g., source or default) and any prerequisites (e.g., needing a file set via 'set_file'), which would enhance completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on behavior and output. A baseline of 4 is applied since no parameters exist, and the description adds value by explaining the tool's operation beyond the empty 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 with specific verbs ('Read text from the current file') and resource ('current file'), distinguishing it from siblings like 'read' (which presumably reads the entire file) by specifying truncation behavior. It explicitly mentions the truncation limit ('first `SKIM_MAX_LINES` lines'), making the scope 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 implies usage context by specifying it reads from 'the current file' (suggesting a file must already be selected/opened) and truncates output, which differentiates it from tools like 'read' (full file reading) or 'select' (line selection). However, it doesn't explicitly state when NOT to use it or name alternatives, missing full sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v1.0.0- Changed
find_function1 field changed- removed
Input schema / properties / function_name / titleRemoved value: -"Function Name"
- Changed
find_line1 field changed- removed
Input schema / properties / search_text / titleRemoved value: -"Search Text"
- Changed
listdir1 field changed- removed
Input schema / properties / dirpath / titleRemoved value: -"Dirpath"
- Changed
new_file1 field changed- removed
Input schema / properties / filepath / titleRemoved value: -"Filepath"
- Changed
overwrite1 field changed- removed
Input schema / properties / new_lines / titleRemoved value: -"New Lines"
- Changed
read2 fields changed- removed
Input schema / properties / end / titleRemoved value: -"End" - removed
Input schema / properties / start / titleRemoved value: -"Start"
- Changed
run_tests4 fields changed- removed
Input schema / properties / collect_only / titleRemoved value: -"Collect Only" - removed
Input schema / properties / test_name / titleRemoved value: -"Test Name" - removed
Input schema / properties / test_path / titleRemoved value: -"Test Path" - removed
Input schema / properties / verbose / titleRemoved value: -"Verbose"
- Changed
select2 fields changed- removed
Input schema / properties / end / titleRemoved value: -"End" - removed
Input schema / properties / start / titleRemoved value: -"Start"
- Changed
set_file3 fields changed- removed
Input schema / properties / filepath / titleRemoved value: -"Filepath" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
set_python_path1 field changed- removed
Input schema / properties / path / titleRemoved value: -"Path"
14 tool updates
- First observed
cancel - First observed
confirm - First observed
delete_file - First observed
find_function - First observed
find_line - First observed
listdir - First observed
new_file - First observed
overwrite - First observed
read - First observed
run_tests - First observed
select - First observed
set_file - First observed
set_python_path - First observed
skim
TDQS
Scored across 14 tools
Most tools have distinct purposes, but 'cancel' and 'confirm' are ambiguous without context, and 'find_function' and 'find_line' could be confused as both search within files. The core editing tools like 'read', 'select', and 'overwrite' are clearly differentiated, supporting a coherent workflow.
The naming is mixed with some consistency: verbs like 'find', 'set', and 'run' are used, but patterns vary (e.g., 'listdir' vs. 'new_file', 'overwrite' vs. 'select'). There's no uniform verb_noun structure, making it readable but not predictable across all tools.
With 14 tools, this is well-scoped for an editor server, covering file operations, editing, searching, and testing. Each tool serves a specific role in the workflow, and the count is neither too sparse nor overwhelming for the domain.
The toolset provides strong coverage for file editing and testing workflows, including create, read, update, and delete operations. Minor gaps exist, such as no explicit 'save' or 'undo' tools, but agents can work around these using existing tools like 'overwrite' and workflow steps.
Maintenance
Related MCP Connectors
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A simple MCP server built with FastMCP and python
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA FastMCP server providing powerful code editing tools including precise file modifications with diff-based operations, file creation and reading with line numbers, and more tools for code editing workflows.MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that provides tools for secure file management within a dedicated workspace directory. It enables users to create, list, and delete files through natural language while preventing path traversal attacks.6 npm-
- FlicenseBqualityCmaintenanceAn MCP server for creating, loading, and editing RFC TXT documents using the rfc-editor Python library. It provides a suite of tools to manage document components including sections, abstracts, titles, and author metadata.29-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides line-oriented text file editing capabilities through a standardized API. Optimized for LLM tools with efficient partial file access to minimize token usage.MIT