Skip to main content
Glama
smat-dev

Jinni: Bring Your Project Into Context

by smat-dev

Jinni: Pon tu proyecto en contexto

Jinni es una herramienta que proporciona eficientemente a los Modelos de Lenguaje Grandes el contexto de sus proyectos. Ofrece una vista consolidada de los archivos relevantes del proyecto, superando las limitaciones e ineficiencias de leer los archivos uno por uno. El contenido de cada archivo está precedido por un encabezado simple que indica su ruta:

```path=src/app.py
print("hello")

La filosofía detrás de esta herramienta es que las ventanas de contexto de LLM son grandes, los modelos son inteligentes y ver directamente el proyecto equipa mejor al modelo para ayudarte con cualquier cosa que le propongas.

Hay un servidor MCP (Protocolo de contexto de modelo) para la integración con herramientas de IA y una utilidad de línea de comandos (CLI) para uso manual que copia el contexto del proyecto al portapapeles, listo para pegarlo donde lo necesite.

Estas herramientas tienen opiniones firmes sobre lo que se considera un contexto de proyecto relevante para funcionar mejor de inmediato en la mayoría de los casos de uso, excluyendo automáticamente:

* Binary files
* Dotfiles and hidden directories
* Common naming conventions for logs, build directories, tempfiles, etc

Las inclusiones/exclusiones se pueden personalizar con granularidad completa si es necesario usando .contextfiles : esto funciona como .gitignore excepto que define inclusiones. Los archivos .gitignore en sí también se respetan automáticamente, pero cualquier regla en .contextfiles tiene prioridad.

El servidor MCP puede proporcionar la parte del proyecto que se desee. Por defecto, el alcance es el proyecto completo, pero el modelo puede solicitar módulos específicos, patrones coincidentes, etc.

Guía de inicio rápido de MCP

Archivo de configuración del servidor MCP para Cursor / Roo / Claude Desktop / cliente de elección:

{
    "mcpServers": {
        "jinni": {
            "command": "uvx",
            "args": ["jinni-server"]
        }
    }
}

Opcionalmente, puede restringir el servidor para que solo lea dentro de un árbol por seguridad en caso de que su LLM se vuelva inestable: agregue "--root", "/absolute/path/" a la lista args .

Instale uv si no está en su sistema: https://docs.astral.sh/uv/getting-started/installation/

Recargue su IDE y ahora podrá pedirle al agente que lea en contexto.

Si desea restringir esto a módulos o rutas particulares, simplemente pregunte, por ejemplo, "Leer contexto para pruebas".

En acción con Cursor:

Nota para los usuarios del cursor

El cursor puede eliminar silenciosamente el contexto que es más grande que el máximo permitido, por lo que si tiene un proyecto considerable y el agente actúa como si la llamada a la herramienta nunca hubiera ocurrido, intente reducir lo que está incorporando ("leer contexto para xyz")

Componentes

  1. Servidor MCP jinni :

    • Se integra con clientes MCP como Cursor, Cline, Roo, Claude Desktop, etc.

    • Expone una herramienta read_context que devuelve una cadena concatenada de contenidos de archivos relevantes de un directorio de proyecto especificado.

  2. jinni CLI:

    • Una herramienta de línea de comandos para generar manualmente el volcado de contexto del proyecto.

    • Útil para introducir contexto en los LLM mediante copiar y pegar o la entrada de archivos. También puede canalizar la salida donde la necesite.

Related MCP server: scythe-context-mcp

Características

  • Recopilación de contexto eficiente: lee y concatena archivos de proyecto relevantes en una sola operación.

  • Filtrado inteligente (inclusión al estilo Gitignore):

    • Utiliza un sistema basado en la sintaxis .gitignore ( gitwildmatch de la biblioteca pathspec ).

    • Carga automáticamente los archivos .gitignore desde la raíz del proyecto hacia abajo. Estas exclusiones se pueden anular mediante reglas en .contextfiles .

    • Admite configuración jerárquica mediante .contextfiles ubicados en los directorios del proyecto. Las reglas se aplican dinámicamente según el archivo o directorio que se esté procesando.

    • Comportamiento de coincidencia: Los patrones se comparan con la ruta relativa al directorio de destino que se está procesando (o con la raíz del proyecto si no se especifica un destino específico). Por ejemplo, si se selecciona src/ , la regla !app.py en src/.contextfiles coincidirá con app.py Las rutas de salida se mantienen relativas a la raíz del proyecto original.

    • Anulaciones: Admite --overrides (CLI) o rules (MCP) para usar exclusivamente un conjunto específico de reglas. Cuando las anulaciones están activas, se ignoran tanto las reglas predeterminadas integradas como cualquier archivo .contextfiles . La coincidencia de rutas para las anulaciones sigue siendo relativa al directorio de destino.

    • Inclusión explícita de destinos: Los archivos proporcionados explícitamente como destinos siempre se incluyen (omitiendo las comprobaciones de reglas, pero no las de binario/tamaño). Los directorios proporcionados explícitamente como destinos siempre se introducen, y el descubrimiento/coincidencia de reglas se realiza en relación con ese directorio de destino.

  • Configuración personalizable ( .contextfiles / Anulaciones):

    • Define con precisión qué archivos/directorios incluir o excluir utilizando patrones de estilo .gitignore aplicados a la ruta relativa .

    • Los patrones que empiezan con ! invalidan la coincidencia (un patrón de exclusión). (Consulte la sección Configuración a continuación).

  • Manejo de contextos grandes: Se cancela con un error DetailedContextSizeError si el tamaño total de los archivos incluidos supera un límite configurable (predeterminado: 100 MB). El mensaje de error incluye una lista de los 10 archivos más grandes que contribuyen al tamaño, lo que ayuda a identificar candidatos para la exclusión. Consulte la sección "Solución de problemas" para obtener instrucciones sobre la gestión del tamaño del contexto.

  • Encabezados de metadatos: La salida incluye un encabezado de ruta para cada archivo incluido (p. ej., ````path=src/app.py ). This can be disabled with `list_only`.

  • Manejo de codificación: intenta múltiples codificaciones de texto comunes (UTF-8, Latin-1, etc.).

  • Modo de solo lista: opción para enumerar solo las rutas relativas de los archivos que se incluirían, sin su contenido.

Uso

Servidor MCP (herramienta read_context )

  1. Configuración: configure su cliente MCP (por ejemplo, claude_desktop_config.json de Claude Desktop) para ejecutar el servidor jinni a través de uvx .

  2. Invocación: al interactuar con su LLM a través del cliente MCP, el modelo puede invocar la herramienta read_context .

    • project_root (cadena, obligatoria): La ruta absoluta al directorio raíz del proyecto. Las rutas de descubrimiento de reglas y de salida son relativas a esta raíz.

    • targets (matriz JSON de cadenas, obligatoria): Especifica una lista obligatoria de archivos/directorios dentro de project_root para procesar. Debe ser una matriz JSON de rutas de cadena (p. ej., ["path/to/file1", "path/to/dir2"] ). Las rutas pueden ser absolutas o relativas a CWD. Todas las rutas de destino deben resolverse en ubicaciones dentro de project_root . Si se proporciona una lista [] vacía, se procesa todo project_root .

    • rules (matriz JSON de cadenas, obligatoria): Una lista obligatoria de reglas de filtrado en línea (con sintaxis de estilo .gitignore , p. ej., ["src/**/*.py", "!*.tmp"] ). Proporcione una lista vacía [] si no se necesitan reglas específicas (esto usará los valores predeterminados integrados). Si no está vacía, se usan exclusivamente estas reglas, ignorando los valores predeterminados integrados y .contextfiles .

    • list_only (booleano, opcional): si es verdadero, devuelve solo la lista de rutas de archivos relativas en lugar del contenido.

    • size_limit_mb (entero, opcional): anula el límite de tamaño del contexto en MB.

    • debug_explain (booleano, opcional): habilita el registro de depuración en el servidor.

    1. Salida: La herramienta devuelve una sola cadena con el contenido concatenado (con encabezados) o la lista de archivos. Las rutas en los encabezados/listas son relativas al valor project_root proporcionado. En caso de un error de tamaño del contexto, devuelve un error DetailedContextSizeError con detalles sobre los archivos más grandes.

Servidor MCP (herramienta usage )

  • Invocación: El modelo puede invocar la herramienta usage (no se necesitan argumentos).

  • Salida: Devuelve el contenido del archivo README.md como una cadena.

(Las instrucciones detalladas de configuración del servidor variarán según su cliente MCP. Generalmente, debe configurar el cliente para ejecutar el servidor Jinni).

Ejecutando el servidor:

  • Método recomendado: utilice uvx para ejecutar el punto de entrada del servidor directamente (requiere que el paquete jinni esté publicado en PyPI o que uvx pueda encontrarlo):

    uvx jinni-server [OPTIONS]

    Ejemplo de configuración de cliente MCP (por ejemplo, claude_desktop_config.json ):

    {
      "mcpServers": {
        "jinni": {
          "command": "uvx",
          "args": ["jinni-server"]
        }
      }
    }

Opcionalmente, puede restringir el servidor para que solo lea dentro de un árbol por seguridad en caso de que su LLM se vuelva inestable: agregue "--root", "/absolute/path/" a la lista args .

Consulte la documentación específica de su cliente MCP para conocer los pasos de configuración precisos. Asegúrese de que uv esté instalado.

Utilidad de línea de comandos ( jinni CLI)

jinni [OPTIONS] [<PATH...>]
  • <PATH...> (opcional): Una o más rutas a los directorios o archivos del proyecto que se analizarán. Si no se proporciona ninguna, el valor predeterminado es el directorio actual ( . ).

  • -r <DIR> / --root <DIR> (opcional): Especifica el directorio raíz del proyecto. Si se proporciona, la detección de reglas comienza aquí y las rutas de salida son relativas a este directorio. Si se omite, la raíz se infiere del ancestro común de los argumentos <PATH...> (o CWD si solo se procesa ".").

  • --output <FILE> / -o <FILE> (opcional): escribe la salida en <FILE> en lugar de imprimir en la salida estándar.

  • --list-only / -l (opcional): solo enumera las rutas relativas de los archivos que se incluirán.

  • --overrides <FILE> (opcional): utiliza reglas de <FILE> en lugar de descubrir .contextfiles .

  • --size-limit-mb <MB> / -s <MB> (opcional): anula el tamaño máximo del contexto en MB.

  • --debug-explain (opcional): imprime razones detalladas de inclusión/exclusión en stderr y jinni_debug.log .

  • --root <DIR> / -r <DIR> (opcional): ver arriba.

  • --no-copy (opcional): evita copiar automáticamente el contenido de salida al portapapeles del sistema al imprimir en la salida estándar (el valor predeterminado es copiar).

Instalación

Puedes instalar Jinni usando pip o uv :

Usando pip:

pip install jinni

Usando uv:

uv pip install jinni

Esto hará que el comando CLI jinni esté disponible en su entorno. Consulte la sección "Ejecución del servidor" más arriba para saber cómo iniciar el servidor MCP según su método de instalación.

Notas específicas de la plataforma

Windows + WSL

Jinni v0.1.7+ convierte automáticamente rutas WSL.

Proporcione cualquiera de estos como project_root (argumento CLI --root o MCP):

/home/user/project
vscode-remote://wsl+Ubuntu-22.04/home/user/project

No se requieren envoltorios, montajes ni indicadores adicionales: Jinni resuelve la ruta UNC ( \\wsl$\... ) en Windows automáticamente.

Formato de ruta UNC: Jinni siempre usa \\wsl$\<distro>\... para máxima compatibilidad con todas las versiones de Windows compatibles con WSL. Manejo de nombres de distribución: Se permiten espacios y la mayoría de los caracteres especiales en el nombre de la distribución. Solo los caracteres UNC no válidos se reemplazan con _ . Almacenamiento en caché: Las búsquedas y conversiones de rutas de WSL se almacenan en caché para mejorar el rendimiento. Si instala WSL mientras Jinni se está ejecutando, reinicie Jinni para obtener la nueva wslpath . Desactivación: Configure la variable de entorno JINNI_NO_WSL_TRANSLATE=1 para desactivar toda la lógica de traducción de rutas de WSL.

Solo se traducen los URI wsl+<distro> y las rutas POSIX absolutas (que comienzan con / ); para controles remotos SSH o de contenedor, ejecute Jinni dentro de ese entorno.

Sistema operativo en tiempo de ejecución

Lo que pasas en

¿Qué devuelve _translate_wsl_path() ?

Ventanas

vscode-remote://wsl%2BUbuntu/home/a/b

\\wsl$\\Ubuntu\home\a\b

Ventanas

/home/a/b

\\wsl$\\Ubuntu\home\a\b (a través de wslpath)

Linux/WSL

vscode-remote://wsl+Ubuntu/home/a/b

/home/a/b

Linux/WSL

/home/a/b

/home/a/b (sin cambios)

Ejemplos

  • Vuelca el contexto de my_project/ a la consola:

    jinni ./my_project/ # Process a single directory
    jinni ./src ./docs/README.md # Process multiple targets
    jinni # Process current directory (.)
  • Lista de archivos que se incluirían en my_project/ sin contenido:

    jinni -l ./my_project/
    jinni --list-only ./src ./docs/README.md
  • Vuelca el contexto de my_project/ a un archivo llamado context_dump.txt :

    jinni -o context_dump.txt ./my_project/
  • Utilice reglas de anulación de custom.rules en lugar de .contextfiles :

    jinni --overrides custom.rules ./my_project/
  • Mostrar información de depuración:

    jinni --debug-explain ./src
  • Contexto de volcado (la salida se copia automáticamente al portapapeles de manera predeterminada):

    jinni ./my_project/
  • Volcar contexto pero no copiar al portapapeles:

    jinni --no-copy ./my_project/

Configuración ( .contextfiles y anulaciones)

Jinni usa .contextfiles (o un archivo de anulación) para determinar qué archivos y directorios incluir o excluir, basándose en patrones de estilo .gitignore .

  • Principio básico: las reglas se aplican dinámicamente durante el recorrido, en relación con el directorio de destino actual que se está procesando.

  • Ubicación ( .contextfiles ): Coloque .contextfiles en cualquier directorio. Al procesar un directorio (ya sea el destino inicial o un subdirectorio), Jinni busca archivos .contextfiles a partir de ese directorio. Las reglas de directorios superiores fuera del directorio de destino actual se ignoran al procesar dentro de ese directorio.

  • Formato: Texto simple, codificado en UTF-8, un patrón por línea.

  • Sintaxis: utiliza la sintaxis del patrón estándar .gitignore (específicamente la implementación gitwildmatch de pathspec ).

    • Comentarios: Las líneas que comienzan con # se ignoran.

    • Patrones de inclusión: especifique los archivos/directorios que desea incluir (por ejemplo, src/**/*.py , *.md , /config.yaml ).

    • Patrones de exclusión: Las líneas que comienzan con ! indican que se debe excluir un archivo coincidente (niega el patrón).

    • Anclaje: Un / principal ancla el patrón al directorio que contiene los .contextfiles .

    • Coincidencia de directorios: un / final coincide únicamente con directorios.

    • Los comodines: * , ** , ? funcionan como en .gitignore .

  • Lógica de aplicación de reglas:

    1. Determinar el objetivo: Jinni identifica el directorio de destino (ya sea proporcionado explícitamente o la raíz del proyecto).

    2. Comprobación de anulación: Si se proporcionan --overrides (CLI) o rules (MCP), estas reglas se utilizan exclusivamente. Se ignoran todos .contextfiles y los valores predeterminados integrados. La coincidencia de rutas es relativa al directorio de destino.

    3. Reglas de contexto dinámico (sin anulaciones): al procesar un archivo o subdirectorio dentro del directorio de destino:

      • Jinni encuentra todos los archivos .gitignore y .contextfiles desde el directorio de destino hasta el directorio del elemento actual.

      • Primero se aplican las reglas de .gitignore , luego los valores predeterminados integrados y, finalmente, cualquier .contextfiles (que tienen prioridad).

      • Compila estas reglas combinadas en una especificación ( PathSpec ).

      • Coincide con la ruta del archivo/subdirectorio actual, calculada en relación al directorio de destino , frente a esta especificación.

    4. Coincidencia: El último patrón del conjunto de reglas combinadas que coincide con la ruta relativa del elemento determina su destino. ! niega la coincidencia. Si ningún patrón definido por el usuario coincide, el elemento se incluye a menos que coincida con una exclusión predeterminada (como !.* ).

    5. Manejo de destinos: Los archivos con destino explícito eluden las comprobaciones de reglas. Los directorios con destino explícito se convierten en la raíz para la detección de reglas y la coincidencia de su contenido. Las rutas de salida siempre se mantienen relativas al project_root original.

Ejemplos ( .contextfiles )

Ejemplo 1: Incluir la fuente de Python y la configuración raíz

Ubicado en my_project/.contextfiles :

# Include all Python files in the src directory and subdirectories
src/**/*.py

# Include the main config file at the root of the project
/config.json

# Include all markdown files anywhere
*.md

# Exclude any test data directories found anywhere
!**/test_data/

Ejemplo 2: Anulación en un subdirectorio

Ubicado en my_project/src/.contextfiles :

# In addition to rules inherited from parent .contextfiles...

# Include specific utility scripts in this directory
utils/*.sh

# Exclude a specific generated file within src, even if *.py is included elsewhere
!generated_parser.py

Desarrollo

  • Detalles del diseño: DESIGN.md

  • Ejecución del servidor localmente: durante el desarrollo (después de la instalación con uv pip install -e . o similar), puede ejecutar el módulo del servidor directamente:

    python -m jinni.server [OPTIONS]

    Ejemplo de configuración de cliente MCP para desarrollo local:

    {
      "mcpServers": {
        "jinni": {
          // Adjust python path if needed, or ensure the correct environment is active
          "command": "python -m jinni.server"
          // Optionally constrain the server to only read within a tree (recommended for security):
          // "command": "python -m jinni.server --root /absolute/path/to/repo"
        }
      }
    }

Solución de problemas

Errores de tamaño de contexto ( DetailedContextSizeError )

Si encuentra un error que indica que se superó el límite de tamaño del contexto, Jinni le proporcionará una lista de los 10 archivos más grandes que intentó incluir. Esto le ayudará a identificar posibles candidatos para la exclusión.

Para resolver esto:

  1. Revisar los archivos más grandes: Consulta la lista proporcionada en el mensaje de error. ¿Hay archivos grandes (p. ej., archivos de datos, registros, artefactos de compilación, archivos multimedia) que no deberían formar parte del contexto del LLM?

  2. Configurar exclusiones: utilice .contextfiles o las opciones --overrides / rules para excluir archivos o directorios innecesarios.

    • Ejemplo ( .contextfiles ): para excluir todos los archivos .log y un directorio de datos grande específico:

      # Exclude all log files
      !*.log
      
      # Exclude a large data directory
      !large_data_files/
    • Consulte la sección Configuración más arriba para obtener información detallada sobre la sintaxis y el uso.

  3. Aumentar el límite (Usar con precaución): Si todos los archivos incluidos son realmente necesarios, puede aumentar el límite de tamaño usando --size-limit-mb (CLI) o size_limit_mb (MCP). Tenga en cuenta los límites de la ventana de contexto de LLM y los costos de procesamiento.

  4. Utilice jinni usage / usage : si necesita volver a consultar estas instrucciones o los detalles de configuración mientras soluciona problemas, utilice el comando jinni usage o la herramienta MCP usage .

Available Tools

2 tools
read_contextA

Reads context from a specified project root directory (absolute path). Focuses on the specified target files/directories within that root. Returns a static view of files with paths relative to the project root. Assume the user wants to read in context for the whole project unless otherwise specified - do not ask the user for clarification if just asked to read context. If the user just says 'jinni', interpret that as read_context. If the user asks to list context, use the list_only argument. Both targets and rules accept a JSON array of strings. The project_root, targets, and rules arguments are mandatory. You can ignore the other arguments by default. IMPORTANT NOTE ON RULES: Ensure you understand the rule syntax (details available via the usage tool) before providing specific rules. Using rules=[] is recommended if unsure, as this uses sensible defaults.

Guidance for AI Model Usage

When requesting context using this tool:

  • Default Behavior: If you provide an empty rules list ([]), Jinni uses sensible default exclusions (like .git, node_modules, __pycache__, common binary types) combined with any project-specific .contextfiles. This usually provides the "canonical context" - files developers typically track in version control. Assume this is what the users wants if they just ask to read context.

  • Targeting Specific Files: If you have a list of specific files you need (e.g., ["src/main.py", "README.md"]), provide them in the targets list. This is efficient and precise, quicker than reading one by one.

ParametersJSON Schema
NameRequiredDescriptionDefault
debug_explainNo
exclusionsNoOptional exclusion configuration. Object with 'global' (list of keywords), 'scoped' (object mapping paths to keyword lists), and 'patterns' (list of file patterns) fields.
list_onlyNo
project_rootYes**MUST BE ABSOLUTE PATH**. The absolute path to the project root directory.
rulesYes**Mandatory**. List of inline filtering rules. Provide `[]` if no specific rules are needed (uses defaults). It is strongly recommended to consult the `usage` tool documentation before providing a non-empty list.
size_limit_mbNo
targetsYes**Mandatory**. List of paths (absolute or relative to CWD) to specific files or directories within the project root to process. Must be a JSON array of strings. If empty (`[]`), the entire `project_root` is processed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/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 effectively describes key behaviors: the tool returns a 'static view' (implying read-only, non-destructive), uses 'sensible default exclusions' when rules=[], and provides guidance on default behavior and targeting efficiency. However, it doesn't explicitly mention permission requirements, rate limits, or error handling, leaving some behavioral aspects uncovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately front-loaded with core functionality, but it contains some redundancy (e.g., repeating that targets and rules accept JSON arrays) and includes implementation details like 'You can ignore the other arguments by default' that could be streamlined. The 'Guidance for AI Model Usage' section is helpful but adds length. Overall, it's informative but could be more concise.

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 complexity (7 parameters, 57% schema coverage, no annotations, but with an output schema), the description is mostly complete. It covers the core purpose, usage guidelines, parameter semantics for key inputs, and behavioral context. The output schema exists, so return values needn't be explained. However, it lacks details on less critical parameters like 'debug_explain' and 'size_limit_mb', and doesn't mention error cases or performance implications.

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?

Schema description coverage is 57%, so the description must compensate. It adds significant value beyond the schema: it explains that 'targets' and 'rules' accept JSON arrays, clarifies that empty rules ([]) use sensible defaults, provides examples of default exclusions, and gives practical guidance on when to use specific targets versus processing the entire root. However, it doesn't fully explain all 7 parameters, particularly 'debug_explain' and 'size_limit_mb'.

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: 'Reads context from a specified project root directory' and 'Returns a static view of files with paths relative to the project root.' It specifies the verb (read), resource (context/files), and scope (project root directory), distinguishing it from the sibling 'usage' tool which provides documentation rather than file reading.

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 on when to use this tool: 'Assume the user wants to read in context for the whole project unless otherwise specified' and 'If the user just says 'jinni', interpret that as read_context.' It also specifies when to use the list_only argument: 'If the user asks to list context, use the list_only argument.' This gives clear usage rules and context for invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

usageA

Retrieves the Jinni usage documentation (content of README.md).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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 the behavioral trait of retrieving documentation, which is a read-only operation, but does not add context beyond that, such as rate limits, authentication needs, or error handling. It adequately describes the core behavior but lacks richer operational details.

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 front-loads the key information ('Retrieves the Jinni usage documentation') without any wasted words. It is appropriately sized for a simple tool with no parameters, making it easy to understand quickly.

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 simplicity (0 parameters, no annotations, but with an output schema), the description is complete enough for its purpose. It explains what the tool does, and since an output schema exists, it does not need to detail return values. However, it could slightly improve by mentioning the output format or usage context.

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, and schema description coverage is 100%, so there is no need for parameter details in the description. The baseline for 0 parameters is 4, as the description correctly avoids unnecessary parameter information and focuses on the tool's purpose.

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 ('Retrieves') and resource ('Jinni usage documentation (content of README.md)'), distinguishing it from the sibling tool 'read_context' which likely serves a different purpose. 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by specifying what is retrieved, but it does not provide explicit guidance on when to use this tool versus alternatives or any exclusions. It lacks context about scenarios where this tool is preferred over the sibling 'read_context', leaving usage decisions to inference.

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. 2 tool updatesv1.0.0
    • First observedread_context
    • First observedusage

TDQS

A3.9/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have completely distinct purposes: 'read_context' is for reading project files and directories, while 'usage' is for retrieving documentation. There is no overlap or ambiguity between them; an agent would never confuse one for the other.

Naming Consistency4/5

Both tools use snake_case naming, which is consistent. However, 'read_context' follows a verb_noun pattern, while 'usage' is a noun only, representing a minor deviation from a fully uniform convention.

Tool Count2/5

With only 2 tools, the server feels thin for its purpose of bringing projects into context. While 'read_context' is core, there are likely missing operations like updating context, managing rules, or querying context metadata, making the set under-scoped.

Completeness2/5

The tool surface is severely incomplete for the domain of project context management. It only supports reading context and accessing documentation, lacking essential operations such as writing/modifying context, listing available contexts, or configuring rules beyond defaults, which will limit agent capabilities.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Intelligently analyzes codebases to enhance LLM prompts with relevant context, featuring adaptive context management and task detection to produce higher quality AI responses.
    2
    -
  • A
    license
    A
    quality
    C
    maintenance
    Generates AI context files (CLAUDE.md, AGENTS.md, Cursor/Windsurf/Cline/Continue/Kilo Code/Trae rules, GEMINI.md, Copilot, Aider, Junie, Warp) for any repository. Runs as CLI or MCP server, 100% local.
    3
    14 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Combines codebase files into a single prompt for AI assistants, enabling code review, documentation, and debugging via natural language.
    7 npm
    2
    MIT