Skip to main content
Glama
jm333-B

file-insight-mcp

by jm333-B

Análisis de archivos MCP (file-insight-mcp)

Es un servidor MCP local de uso personal que lee documentos no estructurados dentro de una carpeta especificada, analiza su estructura y genera un resumen por documento y un informe de resumen general de la carpeta.

Todos los documentos dentro de data/sample_docs/ de este paquete son datos sintéticos creados para fines de demostración.

Referencias base

Related MCP server: file-analyzer

Qué hace este servidor

  1. Escanea la estructura de la carpeta objetivo fija (data/sample_docs/).

  2. Lee únicamente los documentos con extensiones permitidas (.txt .md .csv .log).

  3. Extrae de los documentos la tabla de contenido (estructura de títulos), fechas, cifras y candidatos a términos clave mediante reglas.

  4. Construye un prompt de resumen que combina todos los documentos. El resumen en sí lo redacta el LLM del host (Claude/Codex); este MCP no realiza llamadas a la API del LLM.

  5. Valida la estructura del informe de resumen generado y contrasta que los nombres de archivo mencionados existan realmente.

  6. Solo guarda el informe en un archivo después de que el usuario lo apruebe explícitamente.

Inicio rápido

Entorno requerido: Python 3.11 o superior, uv

uv sync --extra dev

Tras la instalación, comprueba que se superan los cuatro comandos de la sección Verificación siguiente.

Para inspeccionar visualmente las herramientas con MCP Inspector:

uv run mcp dev src/file_insight_mcp/server.py

Estructura del proyecto

Se separa la lógica de dominio de las convenciones de las herramientas para que, al cambiar las reglas de validación, no sea necesario tocar la capa de herramientas.

Ruta

Función

src/file_insight_mcp/security.py

Comprobación de seguridad de rutas, allowlist de extensiones, límites de tamaño y número de elementos

src/file_insight_mcp/core.py

Escaneo de carpetas, lectura de documentos, validación de estructura de informes, guardado basado en aprobación

src/file_insight_mcp/outline.py

Extracción de tabla de contenido, fechas, cifras y términos clave (basado en reglas, determinista)

src/file_insight_mcp/grounding.py

Contraste de nombres de archivo mencionados en el resumen (verificación de asesoramiento)

src/file_insight_mcp/harness.py

Elementos comunes de las convenciones de herramientas — NextAction, ToolFailure, truncado y números de línea

src/file_insight_mcp/server.py

Registro de herramientas, recursos y prompts MCP (capa de harness)

src/file_insight_mcp/evalkit.py

Lógica pura de expresiones de ruta, criterios y sustitución de variables en casos de eval

evals/cases.jsonl

Casos de regresión deterministas (datos, no código)

scripts/run_evals.py

Ejecutor que ejecuta los casos mediante el protocolo MCP real

scripts/smoke_stdio.py

Prueba de humo de arranque STDIO, esquema y convenciones del harness

scripts/validate_package.py

Comprobación estática previa al despliegue (credenciales, llamadas peligrosas, anotaciones de herramientas)

tests/

Pruebas unitarias de funciones de dominio (se ejecutan sin arrancar el servidor)

Flujo recomendado

SCAN → LIST → READ → EXTRACT → DRAFT → CHECK → PREVIEW → [사용자 승인] → SAVED

Paso

Tool

Lectura/escritura

Función

SCAN

scan_folder_structure

lectura

Estructura de la carpeta objetivo, recuento por extensión y permisos

LIST

list_target_documents

lectura

Lista de documentos realmente legibles

READ

read_document_chunk

lectura

Consulta del texto original. Admite especificación de rango de líneas y anclas de cita L14

EXTRACT

extract_document_outline

lectura

Extracción de la estructura de tabla de contenido (encabezados/numeración)

EXTRACT

extract_key_terms

lectura

Extracción de candidatos a términos clave basada en fechas, cifras y frecuencia

DRAFT

build_summary_prompt

lectura

Generación de un prompt que combina todos los documentos + el formato de informe estándar

CHECK

validate_report_draft

lectura

Validación de estructura. Proporciona rule_id·severity·line·fix (puerta de guardado)

CHECK

check_summary_grounding

lectura

Contrasta que los nombres de archivo mencionados en el resumen existan realmente (asesoramiento, no bloquea el guardado)

PREVIEW

diff_report_against_saved

lectura

Comprobación de diferencias con la versión guardada anteriormente

PREVIEW

preview_save_report

lectura

Muestra validación y diff juntos y emite el token de aprobación

SAVED

save_approved_report

escritura

Guarda solo cuando el token de aprobación coincide (única herramienta de escritura)

OBSERVE

list_saved_reports

lectura

Lista de informes guardados

OBSERVE

read_report_audit_log

lectura

Consulta del registro de auditoría de guardados

Recursos y prompts

Tipo

URI o nombre

Función

Resource

document://{relative_path}

Texto original del documento

Resource

report://{report_id}

Informe de resumen guardado

Prompt

analyze_folder

Flujo de trabajo de análisis desde el escaneo hasta la aprobación del guardado

Diseño del harness

Este servidor considera como objeto de diseño no solo la funcionalidad, sino también la forma en que el modelo utiliza las herramientas.

  • Todas las respuestas incluyen stage y next_actions, de modo que el modelo puede elegir la siguiente herramienta solo con ver la respuesta. blocking: true es una pista informativa de "no omitas este paso". Lo que realmente bloquea el guardado son la validación de estructura y el token de aprobación; la pista no sustituye esa función.

  • Los errores se devuelven mediante ToolFailure junto con el código de causa, el método de recuperación y los valores seleccionables. El objetivo es que el modelo pueda recuperarse por sí mismo sin tener que volver a preguntar.

  • Los esquemas de argumentos se mantienen planos ({"relative_path": "..."}). Si se usan modelos Pydantic como tipo de argumento, se anidan como {"params": {...}} y cambia la forma de la llamada.

  • Los valores de retorno son modelos Pydantic, por lo que outputSchema se genera automáticamente.

  • Todas las herramientas llevan readOnlyHint / destructiveHint para que el host pueda mostrar una interfaz de aprobación diferente para las herramientas de escritura.

  • Solo las comprobaciones seguras (estructura) bloquean el guardado; las comprobaciones heurísticas (contraste de nombres de archivo) solo se notifican como advertencia.

Presupuesto de contexto

Siguiendo el principio de que "la ventana de contexto no es un lugar para desechar, sino un presupuesto de memoria de trabajo", todas las herramientas establecen un límite explícito en el tamaño de la respuesta.

  • scan_folder_structure: si supera MAX_SCAN_ENTRIES(500), lo notifica con truncated: true y lo trunca.

  • read_document: los archivos que superan MAX_FILE_BYTES(200KB) no se leen completos; se indica mediante un error que se lea solo una parte con read_document_chunk.

  • extract_key_terms: limita el número de elementos por categoría con max_terms.

  • preview_save_report: include_preview=False es el valor predeterminado, por lo que no vuelve a incluir en la respuesta el borrador que ya se tiene. Solo cuando es necesario incluirlo, limita la longitud con max_preview_chars.

  • harness.truncate() / harness.number_lines(): siempre indica explícitamente si hay truncamiento y las anclas de cita (números de línea), para que el modelo no tenga que adivinar "si esto es todo o solo una parte".

Límites de seguridad

  • El servidor solo maneja security.TARGET_DIR(data/sample_docs/). No se puede acceder fuera de él ni con .., rutas absolutas, letras de unidad ni enlaces simbólicos (security.safe_relative_path).

  • No se leen archivos fuera de la allowlist de extensiones (.txt .md .csv .log). Las extensiones ejecutables/de script siempre se excluyen del objetivo.

  • Si el tamaño del archivo supera MAX_FILE_BYTES(200KB), no se lee completo y se indica mediante un error.

  • Los archivos y carpetas ocultos cuyo nombre comienza con . se excluyen del escaneo.

  • La única herramienta de escritura es save_approved_report, y solo funciona cuando coincide el token hash (report_id, contenido) emitido por preview_save_report.

  • Este servidor solo lee documentos. Si en el código fuente aparecen llamadas de ejecución de código o shell como eval/exec/subprocess, scripts/validate_package.py falla.

Verificación

uv run pytest -q
uv run python scripts/smoke_stdio.py
uv run python scripts/run_evals.py
uv run python scripts/validate_package.py

Los cuatro comandos tienen funciones diferentes, por lo que deben superarse todos.

Comando

Alcance de la comprobación

Arranque del servidor

pytest -q

Funciones de dominio de core·outline·grounding·security·evalkit

No

smoke_stdio.py

Registro de herramientas, planitud del esquema, anotaciones, convenciones de mensajes de error

Sí

run_evals.py

Casos de regresión deterministas de evals/cases.jsonl

Sí

validate_package.py

Comprobación estática de fugas de credenciales, llamadas peligrosas y anotaciones de herramientas

No

run_evals.py incluye todo el flujo de guardado, incluido que el guardado tenga éxito o se rechace según si el token de aprobación es correcto o incorrecto. Cada vez que se corrige un error, se añade una línea en evals/cases.jsonl con un caso que reproduzca ese error. Consulta la sintaxis de los casos en evals/README.md.

Si quieres analizar otra carpeta

Por seguridad, este proyecto fija la carpeta objetivo en TARGET_DIR de src/file_insight_mcp/security.py (data/sample_docs/ dentro del paquete). Para analizar una carpeta de trabajo real:

  1. Cambia TARGET_DIR a la ruta absoluta deseada, o modifícalo para inyectarlo mediante una variable de entorno.

  2. Añade a ALLOWED_EXTENSIONS las extensiones que realmente existan en esa carpeta.

  3. Comprueba primero que no haya subcarpetas sensibles (credenciales, datos personales, etc.).

Conexión con Claude Desktop

Sustituye ABSOLUTE_PROJECT_PATH de config/claude_desktop_config.example.json por la ruta absoluta de esta carpeta y aplícalo en la configuración de Claude Desktop. Debes cerrar la aplicación por completo y volver a ejecutarla.

Principios de diseño

  • MCP no realiza llamadas a una API de LLM independiente. Claude o Codex redactan las frases del resumen; este MCP se encarga del texto original, la estructura, la validación y el guardado.

  • No se inventan nombres de archivo, cifras ni fechas que no estén verificados en los documentos; el verificador de fundamentación los contrasta mecánicamente.

  • El guardado final requiere tanto el token de aprobación emitido en la vista previa como la aprobación explícita del usuario.

  • Se separa la lógica de dominio (core, outline, grounding) de las convenciones de herramientas (server, harness, security).

Available Tools

13 tools
build_summary_promptA
Read-onlyIdempotent

대상 폴더의 모든 문서와 표준 보고서 형식을 결합한 요약 프롬프트를 반환합니다.

이 MCP는 LLM API를 호출하지 않습니다. 요약은 호스트(Claude/Codex)가 하고, 이 도구는 '무엇을 어떤 형식으로 쓸지'에 대한 지시문과 원문 전체를 조립합니다.

Args: with_line_numbers: 원문 줄 번호 부착 및 인용 규칙 추가 여부 (기본 True).

Returns: PromptResponse: prompt에 규칙 + 필수 섹션 + 문서 목록 + 원문이 담긴 지시문.

NameRequiredDescriptionDefault
with_line_numbersNoTrue면 각 문서 원문에 줄 번호를 붙이고, 요약에 'L14' 형태로 인용하도록 규칙을 추가합니다.

Output Schema

NameRequiredDescription
stageYes폴더 분석 워크플로에서 지금 위치한 단계
promptYes
statusYes이 호출의 결과 상태
target_dirYes
next_actionsNo이어서 호출하면 좋은 도구 목록
document_countYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description goes beyond this by disclosing the key behavioral trait: the MCP makes no LLM API call and is a pure assembly operation. Knowing this tool has zero external side effects and does not itself perform the summary is genuinely valuable context that the annotations do not fully convey. No contradiction with the annotations; the description reinforces them.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence, followed by a valuable clarifier about not calling the LLM, then clean Args/Returns sections. The structure is tidy and scannable. The Args section slightly duplicates the schema parameter documentation, but the '요약은 호스트가 한다' sentence earns its place as it materially shapes how an agent should invoke the tool. No unnecessary bulk.

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?

For a single-optional-parameter tool with an output schema present and 100% schema coverage, the description is quite complete: it covers purpose, the non-calling-LLM behavior, the parameter, and gives an overview of the return (rules + required sections + document list + raw text in the prompt field). Since an output schema exists, the description need not detail the return structure further. Minor omission: it does not state prerequisites like the target folder needing to be scanned first, but the sibling scan_folder_structure makes this implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the schema description for with_line_numbers already explains line-number attachment and the 'L14' citation rule, which is actually richer than the description's own '원문 줄 번호 부착 및 인용 규칙 추가 여부'. Both sources note the default of true. Per calibration, high schema coverage yields a baseline of 3, and the description adds only marginal value beyond what the schema provides.

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 states a specific verb and resource: it returns a summary prompt that combines all target-folder documents with a standard report format. It also clarifies what the tool is not — it does not call an LLM and does not summarize itself, which sharply distinguishes it from every sibling (scan_folder_structure, extract_key_terms, validate_report_draft, etc.). An agent can tell this is the assembly step versus the read/extract/validate steps without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description clearly explains the tool's role in the workflow — it assembles instructions plus raw text for the host to consume, and explicitly states the LLM API is NOT called so the host does the summarizing. This tells the agent when to invoke it (as the prompt-building step before summarization) and why. It does not name specific sibling alternatives with when-not conditions, but the role is distinct enough among the siblings that this is a minor gap.

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

check_summary_groundingA
Read-onlyIdempotent

보고서에 언급된 파일명이 현재 폴더 스캔 결과에 실제로 있는지 대조합니다.

"문서에 없는 파일을 만들어 내지 않는다"는 규칙을 사람 눈 대신 기계가 확인합니다.

중요: 이 검사는 자문(advisory) 입니다. 휴리스틱이므로 오탐이 있을 수 있고, 저장을 막지 않습니다. 저장 게이트는 validate_report_draft(구조)와 사용자 승인입니다.

Args: report_markdown: 요약 보고서 초안 전문.

Returns: GroundingResponse: status(GROUNDED / MOSTLY_GROUNDED / NEEDS_EVIDENCE_REVIEW), score(0-100), findings[].

NameRequiredDescriptionDefault
report_markdownYes검사할 요약 보고서 초안 전문(마크다운)

Output Schema

NameRequiredDescription
scoreYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
checkedYes
summaryYes
advisoryNoTrue. 근거 검사는 저장을 막지 않습니다. 저장 게이트는 validate_report_draft와 사용자 승인입니다.
findingsYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses the tool is heuristic, may produce false positives, is advisory, and returns a GroundingResponse with status/score/findings. This adds crucial context about reliability and non-blocking behavior, which annotations alone do not convey.

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

Conciseness4/5

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

Front-loads the core purpose, then explains advisory nature, then lists args/returns. The Korean text is somewhat verbose but each section serves a function and the structure is clear and logical.

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?

For a single-parameter tool with an output schema, the description covers the core function, advisory behavior, and return structure. It does not explicitly mention dependency on a prior folder scan, but that is inferable from sibling tools and the described purpose. Sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the description merely repeats the parameter meaning (full draft markdown). It adds no extra semantic beyond what the schema already states, so the baseline of 3 applies.

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?

Description states a specific verb+resource: it checks file names mentioned in a report against the current folder scan results. It distinguishes itself from validate_report_draft by noting that the save gate is that tool plus user approval, so the agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Explicitly states the tool is advisory, heuristic, may have false positives, and does not block saving, contrasting with validate_report_draft as the structural gate. However, it does not explicitly say when to call it (e.g., after scan_folder_structure) or provide alternatives beyond the save-gate distinction.

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

diff_report_against_savedA
Read-onlyIdempotent

이미 저장된 보고서와 초안의 차이를 보여 줍니다.

같은 report_id로 두 번째 저장을 하면 기존 파일을 덮어씁니다. 무엇이 사라지는지 먼저 확인해 사고를 막는 용도입니다.

Args: report_id: 보고서 id. report_markdown: 초안 전문. diff_preview_lines: unified diff 미리보기 줄 수 (기본 40).

Returns: DiffResponse: diff.write_mode가 CREATE / OVERWRITE / NO_CHANGE 중 하나.

NameRequiredDescriptionDefault
report_idYes보고서 id (영문 소문자/숫자/_/- 만 허용)
report_markdownYes비교할 요약 보고서 초안 전문
diff_preview_linesNo돌려줄 diff 미리보기 줄 수

Output Schema

NameRequiredDescription
diffYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
targetYes
report_idYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering the safety profile. The description adds value beyond this by disclosing the overwrite semantics of a second save (currently a write operation yet non-destructive to this call) and the diff.write_mode return range (CREATE/OVERWRITE/NO_CHANGE). With annotations covering safety, this is solid supplementary context with no contradiction.

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

Conciseness4/5

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

The description is efficiently front-loaded with the purpose, followed by the overwrite warning and a compact Args/Returns block. The structure is clean and scannable, though the Args section is somewhat redundant with the schema. Minor waste, but nothing excessive.

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 a full input schema, an output schema describing DiffResponse, and annotations covering the safety profile, the description covers the purpose, the when-to-use scenario, and the key behavioral caveat (overwrite risk). Nothing critical an agent needs to call it correctly is missing; it could name alternatives, but overall it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% — all three parameters (report_id, report_markdown, diff_preview_lines) are described in the schema, including the default of 40 for diff_preview_lines. The description's Args section largely restates this, adding negligible meaning beyond the schema. Baseline 3 is appropriate given the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: it shows the diff between an already-saved report and a draft ('이미 저장된 보고서와 초안의 차이를 보여 줍니다'). This clearly distinguishes it from save/validate siblings (save_approved_report, validate_report_draft) by its comparative, non-writing role. It stops short of naming a sibling explicitly, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description gives clear when-to-use context: a second save with the same report_id overwrites the existing file, so this tool exists to check what will be lost before that happens ('무엇이 사라지는지 먼저 확인해 사고를 막는 용도'). This strongly implies use before overwriting, though it does not explicitly name alternatives or exclusion conditions.

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

extract_document_outlineA
Read-onlyIdempotent

마크다운 헤딩, 번호 매김 항목, 전부 대문자 줄을 목차 후보로 추출합니다.

비정형 문서는 형식이 제각각이므로 규칙 기반 휴리스틱 세 가지를 함께 사용합니다. 결과에는 원문 줄 번호가 함께 담겨 근거로 쓸 수 있습니다.

Args: relative_path: 문서 상대 경로.

Returns: OutlineResponse: outline[]에 level, title, line이 담깁니다.

NameRequiredDescriptionDefault
relative_pathYes문서 상대 경로

Output Schema

NameRequiredDescription
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
outlineYes
entry_countYes
next_actionsNo이어서 호출하면 좋은 도구 목록
relative_pathYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, covering the safety profile. The description adds useful behavioral detail beyond annotations — the three heuristic rules and that results include original line numbers as evidence. This adds value without contradicting annotations.

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

Conciseness4/5

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

Purpose is front-loaded in the first line with the three heuristics following compactly. The Args/Returns block partly duplicates the schema and output summary, but the line-number-evidence detail is genuinely additive. Reasonably sized with minimal waste.

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?

For a read-only, single-parameter tool with an output schema (OutlineResponse with level, title, line), the description covers the essential behavior and return semantics. It explains what heuristics produce candidates and that line numbers serve as evidence. Nothing critical is missing for correct invocation, though it could briefly note what disqualifies a line from being an outline candidate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with relative_path already described as '문서 상대 경로' in the schema. The description repeats the same parameter explanation verbatim, adding no new meaning about format, constraints, or interpretation beyond the schema. At full coverage, the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (extract), resource (document outline), and the three heuristic strategies (markdown headings, numbered items, all-caps lines). The intent is unambiguous and distinguishable from siblings like extract_key_terms or scan_folder_structure. Slight deduction for not explicitly positioning itself against those siblings.

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?

Implies usage for unstructured documents with inconsistent formatting ('비정형 문서는 형식이 제각각이므로'), which gives context on when it applies. However, it never states when not to use it or names alternative tools (e.g., scan_folder_structure for structural scans). Usage context is present but no exclusions.

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

extract_key_termsA
Read-onlyIdempotent

문서에서 날짜, 단위가 붙은 수치, 빈도 기반 핵심 용어 후보를 뽑습니다.

통계적 NLP가 아니라 정규식과 빈도 계산만 쓰는 결정적(deterministic) 추출이므로, 같은 문서에는 항상 같은 결과가 나옵니다.

Args: relative_path: 문서 상대 경로. max_terms: 분류별 최대 항목 수 (기본 20).

Returns: KeyTermsResponse: dates, numbers에 줄 번호와 원문이, frequent_terms에 용어·빈도가 담깁니다.

NameRequiredDescriptionDefault
max_termsNo분류별 최대 항목 수. 컨텍스트 보호용입니다.
relative_pathYes문서 상대 경로

Output Schema

NameRequiredDescription
datesYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
numbersYes
next_actionsNo이어서 호출하면 좋은 도구 목록
relative_pathYes
frequent_termsYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context: the extraction is deterministic (same document always yields same results) and uses regex and frequency rather than statistical NLP. This goes beyond the annotations by describing the method and consistency guarantees, which helps the agent trust the tool for reproducible use.

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

Conciseness4/5

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

The description is structured with a clear opening line stating the tool's function, followed by Args and Returns sections. It is not overly verbose; about 100 words in Korean. Key facts (determinism, regex usage) are front-loaded, and the parameter descriptions are wrapped into sections. A slight deduction for the Returns section being somewhat redundant with the output schema, but overall well-organized and efficient.

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?

The tool has a simple signature (2 parameters, 1 required) and an output schema that covers return structure, so the description does not need to detail return types extensively. It provides enough context for correct invocation: it names the parameters, explains the deterministic behavior, and notes the output categories (dates, numbers, frequent_terms). It lacks explicit usage guidance and error conditions, but these are minor gaps given the simplicity and existing annotations. Overall, it is sufficiently complete for an agent to call the tool correctly.

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 coverage is 100% for both parameters, so the baseline is 3. The description adds meaning beyond the schema: it clarifies that max_terms is 'per category' and notes it is 'for context protection' (컨텍스트 보호용), which explains the purpose of the limit. It also frames relative_path as a 'document relative path,' matching the schema but reinforcing usage. This extra insight justifies a score above baseline.

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 extracts dates, numbers with units, and frequency-based key term candidates from documents. It uses specific verbs ('extract') and resource types, and is distinct from siblings like extract_document_outline (which handles outlines) and read_document_chunk (which reads content). The purpose is immediately understandable without ambiguity.

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 for pulling key terms and metadata from a document, but it does not explicitly mention when to use this tool versus alternatives such as extract_document_outline or build_summary_prompt. No exclusions or alternative routing are provided, so an agent would need to infer context from sibling names rather than direct guidance.

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

list_saved_reportsA
Read-onlyIdempotent

이미 저장된 요약 보고서 목록을 조회합니다.

같은 report_id로 저장하면 덮어쓰기가 되므로, 저장 전에 무엇이 있는지 확인하는 용도입니다.

Returns: SavedListResponse: saved[]에 report_id, 경로, 줄 수, 수정 시각(UTC), 내용 해시 앞 16자.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
countYes
savedYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey read-only and non-destructive nature. The description adds the overwrite warning and details the returned fields (report_id, path, line count, UTC timestamp, content hash prefix), enriching behavioral context beyond annotations.

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?

Two punchy sentences plus a return specification. Purpose is front-loaded, every sentence earns its place, and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only tool with an output schema, the description covers purpose, return contents, and usage timing. Nothing an agent needs to invoke it correctly is missing.

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?

Tool has zero parameters; baseline is 4. No parameter explanation needed, and schema coverage is irrelevant with 0 params.

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 it lists saved summary reports ('이미 저장된 요약 보고서 목록을 조회합니다') and explains its role in checking before saving. This distinguishes it from write operations like save_approved_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It explicitly says when to use: before saving, to avoid overwriting (같은 report_id로 저장하면 덮어쓰기가 되므로, 저장 전에 확인). It does not name alternatives, but the context is clear among siblings.

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

list_target_documentsA
Read-onlyIdempotent

확장자·크기 제한을 통과한, 실제로 읽고 요약할 수 있는 문서 목록을 돌려줍니다.

여기서 얻은 relative_path를 다른 모든 도구에 그대로 넘깁니다.

Returns: DocumentListResponse: documents[]에 relative_path, 크기, 줄 수, 수정 시각이 담깁니다.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
countYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
documentsYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, destructiveHint=false, idempotentHint=true), so the description's burden is light. It adds useful behavioral context beyond annotations: the tool applies extension/size filtering and guarantees the returned documents are readable and summarizable, plus it discloses the exact fields in each entry. There is no contradiction with the annotations.

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

Conciseness4/5

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

Three short paragraphs in Korean, each earning its place: purpose/filter criteria first, the cross-tool relative_path guidance second, and the return-format disclosure third. Front-loaded and no filler. It could arguably merge the return-format paragraph with the first, but the structure is clear and efficient.

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?

For a zero-parameter, read-only list tool with an output schema, the description is largely complete: it explains filtering behavior, identifies the key deliverable (relative_path), and the output schema covers the return structure. The only minor gap is the absence of an explicit mention of the global list of documents the tool filters over, and no downside/edge-case disclosure (e.g., what happens when no documents pass the filters).

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 zero parameters, so the schema carries no semantic burden that the description must compensate for. Per the rubric, this earns the baseline of 4. The description appropriately focuses on output semantics (returned fields: relative_path, size, line count, modification time) rather than parameter syntax, which is irrelevant here.

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 states a specific verb+resource: it returns the list of documents that passed extension/size restrictions and can actually be read and summarized. This clearly distinguishes it from siblings like scan_folder_structure (raw folder tree, not filtered documents) and list_saved_reports (previously saved reports, not analysis targets). Scope and filtering criteria are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description gives actionable usage guidance by telling the agent that the relative_path obtained here is passed as-is to all other tools, establishing this as the canonical entry point for document selection. However, it does not explicitly state when to prefer siblings like scan_folder_structure or list_saved_reports instead — the exclusion logic is left to inference rather than stated.

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

preview_save_reportA
Read-onlyIdempotent

저장 대상·변경 내용·검증 결과를 한 번에 보여 주고 승인 토큰을 발급합니다.

저장 직전의 단일 관문입니다. 구조 검증을 통과했을 때만 approval_token이 발급되며, 토큰은 (report_id, 본문) 해시라서 승인받은 내용과 저장되는 내용이 달라질 수 없습니다.

토큰은 사용자 승인을 대신하지 않습니다. 응답의 approval_request를 사용자에게 그대로 보여 주고, 사용자가 명시적으로 승인한 뒤에만 save_approved_report를 호출하세요.

Args: report_id: 보고서 id. report_markdown: 저장할 보고서 전문. include_preview: 전문을 응답에 다시 담을지 여부 (기본 False). max_preview_chars: preview 최대 길이 (기본 4000).

Returns: PreviewResponse: status(AWAITING_APPROVAL / NEEDS_REVISION), approval_token, validation, diff, approval_request.

NameRequiredDescriptionDefault
report_idYes보고서 id (영문 소문자/숫자/_/- 만 허용)
include_previewNoTrue면 보고서 전문을 응답에 그대로 되돌려줍니다. 이미 초안을 들고 있다면 False로 두어 컨텍스트를 아끼세요.
report_markdownYes저장할 요약 보고서 전문(마크다운)
max_preview_charsNopreview 최대 길이

Output Schema

NameRequiredDescription
diffYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
targetYes
previewNo
report_idYes
validationYes
write_modeYes
next_actionsNo이어서 호출하면 좋은 도구 목록
approval_tokenYes검증을 통과했을 때만 발급됩니다. 이 토큰은 사용자 승인을 대신하지 않습니다.
approval_requestYes사용자에게 그대로 보여 주고 승인을 받을 문장

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint false. The description adds crucial context: approval_token is issued only after structural validation, the token is a hash of (report_id, body) ensuring content integrity, and it does not replace user approval. This goes beyond the annotations to explain the tool's internal logic and constraints.

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

Conciseness4/5

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

The description is well structured, leading with the core purpose, then workflow details, a security warning, and parameter documentation. It is somewhat long but each section serves a purpose. It could be tightened by omitting the redundant parameter descriptions, but overall it is organized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (PreviewResponse) and is part of a multi-step workflow, the description fully covers the operational flow: when the token is generated, how to use the response, and the explicit order of operations. The agent has enough information to invoke it correctly and know what to expect without any gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter thoroughly. The description's Args section essentially repeats the schema text without adding new meaning. It does not reveal, for example, the impact of include_preview on token generation or how max_preview_chars interacts with validation. It meets the baseline but adds no extra insight.

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 it shows the save target, changes, and validation results, and issues an approval token. It explicitly positions itself as the 'single gateway before saving' and distinguishes from save_approved_report, which is the actual save operation. The purpose is specific and actionable.

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?

It explains it must be used before saving, and explicitly instructs that save_approved_report should be called only after showing the approval_request to the user and receiving explicit approval. This provides clear when-to-use guidance and references the sibling tool directly.

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

read_document_chunkA
Read-onlyIdempotent

relative_path에 해당하는 문서 원문을 읽습니다.

긴 문서를 통째로 읽어 컨텍스트를 낭비하지 않도록 줄 범위를 지정할 수 있습니다.

Args: relative_path: 문서 상대 경로. start_line: 시작 줄(1부터). 기본 1. end_line: 끝 줄. 생략하면 끝까지. with_line_numbers: 줄 번호 접두사 부착 여부. 기본 True.

Returns: DocumentChunkResponse: content에 본문, total_lines에 전체 줄 수, truncated에 일부만 읽었는지 여부.

Raises: ToolFailure: DOCUMENT_NOT_FOUND / INVALID_PATH. 오류 메시지에 사용 가능한 relative_path 목록이 함께 담깁니다.

NameRequiredDescriptionDefault
end_lineNo읽기를 끝낼 줄 번호. 생략하면 끝까지 읽습니다.
start_lineNo읽기 시작할 줄 번호(1부터)
relative_pathYeslist_target_documents가 돌려준 상대 경로 (예: 'research/market_research.txt')
with_line_numbersNoTrue면 'L14 | 내용' 형태로 줄 번호를 붙입니다. 요약 근거 칸에 인용 앵커를 적을 때 사용합니다.

Output Schema

NameRequiredDescription
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
contentYes
end_lineYes
truncatedYes
start_lineYes
total_linesYes
next_actionsNo이어서 호출하면 좋은 도구 목록
relative_pathYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, idempotentHint=true), the description discloses error behavior: it raises ToolFailure with DOCUMENT_NOT_FOUND/INVALID_PATH and includes a list of available paths in the error message. It also explains the return fields (content, total_lines, truncated). This additional context helps the agent anticipate failures and interpret responses, exceeding what annotations alone provide.

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

Conciseness4/5

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

The description is well-structured with clear sections (Args, Returns, Raises) and is appropriately sized. The core purpose is front-loaded in the first sentence, and the rest is organized logically. However, the Args section redundantly lists parameters that are already fully described in the schema, which is a minor inefficiency but not bloated.

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 that an output schema exists (DocumentChunkResponse), the description still adds value by explaining error scenarios and the meaning of the response fields. It covers the essential context for correct invocation—path specification, line range semantics, and error handling. While pagination or performance limits are not mentioned, they are not necessary for a read tool with these annotations and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter already has a detailed description, including examples and defaults (e.g., with_line_numbers for citation anchors). The description's Args section largely paraphrases these schema definitions without adding new semantic information. Thus, it meets the baseline but does not enrich parameter understanding beyond the schema.

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 opens with a clear statement of the verb and resource: "relative_path에 해당하는 문서 원문을 읽습니다" (reads the original document at relative_path). It further specifies chunked reading via line ranges, which distinguishes it from siblings like extract_document_outline (structural extraction) and list_target_documents (listing). The purpose is immediately understandable.

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 provides a usage tip: "긴 문서를 통째로 읽어 컨텍스트를 낭비하지 않도록 줄 범위를 지정할 수 있습니다" (specify line ranges to avoid wasting context on long documents). This implies when to use line ranges, but it does not explicitly state when to prefer this tool over alternatives, nor does it mention exclusions or fallbacks. No sibling comparison is offered.

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

read_report_audit_logA
Read-onlyIdempotent

보고서 저장 감사 로그를 최신순으로 조회합니다.

AWAITING_APPROVAL → SAVED 흐름의 실행 증거를 확인할 때 사용합니다.

Args: limit: 최대 건수 (기본 20). report_id: 특정 보고서로 필터링 (선택).

Returns: AuditResponse: events[] 최신순.

NameRequiredDescriptionDefault
limitNo최신순 최대 건수
report_idNo특정 보고서로 필터링. 생략하면 전체.

Output Schema

NameRequiredDescription
countYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
eventsYes
statusYes이 호출의 결과 상태
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already state readOnlyHint, idempotentHint, and destructiveHint. The description adds the return shape (AuditResponse with events[] in latest order) and confirms the read-only nature. It provides useful behavioral context beyond the annotations without contradicting them.

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

Conciseness4/5

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

The description is concise with a clear structure: a first line explaining what the tool does, a usage note, then Args and Returns. It is front-loaded and avoids verbosity, though it repeats some parameter details already present in the schema, which is slightly redundant but acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and the tool's simplicity, the description is complete. It explains the purpose, usage context, ordering, and return format. No additional information is needed for an agent to correctly invoke the tool, as all parameters are optional and clearly described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover both parameters fully, including defaults and constraints. The description repeats the parameter list and adds minor clarifications (e.g., '선택' for optional, '생략하면 전체' for report_id). This is consistent with the baseline of 3 when schema already does the heavy lifting.

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 action (조회 - retrieve) and resource (보고서 저장 감사 로그 - report save audit log) and specifies the ordering (최신순 - latest). It also includes a concrete usage scenario (AWAITING_APPROVAL → SAVED flow), which effectively differentiates it from sibling tools like list_saved_reports or save_approved_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description gives an explicit trigger for when to use: when verifying execution evidence of the AWAITING_APPROVAL → SAVED flow. However, it does not mention when not to use or suggest alternative tools, so it lacks explicit exclusions. Thus a 4 is appropriate.

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

save_approved_reportA
DestructiveIdempotent

미리보기에서 발급된 승인 토큰이 일치할 때만 보고서를 파일로 저장합니다.

이 서버에서 유일한 쓰기 도구입니다. 호출 전 반드시 두 조건을 만족해야 합니다.

  1. preview_save_report가 AWAITING_APPROVAL을 돌려주고 토큰을 발급했다.

  2. 사용자가 그 내용을 보고 명시적으로 저장을 승인했다.

토큰은 기술적 무결성(승인한 내용 == 저장되는 내용)만 보장합니다. 사용자 승인을 대신하지 않습니다. 사용자가 "저장해"라고 말하지 않았다면 호출하지 마세요.

Args: report_id: 보고서 id. report_markdown: 저장할 보고서 전문. approval_token: 미리보기가 발급한 토큰. expected_write_mode: 선택. 지정하면 실제 write_mode와 다를 때 거부합니다.

Returns: SaveResponse: path(저장 경로), audit(감사 로그 경로), write_mode(CREATE / OVERWRITE / NO_CHANGE).

Raises: ToolFailure: TOKEN_MISMATCH, VALIDATION_FAILED, WRITE_MODE_CHANGED, INVALID_REPORT_ID. 모두 복구 방법이 메시지에 포함됩니다.

NameRequiredDescriptionDefault
report_idYes보고서 id (영문 소문자/숫자/_/- 만 허용)
approval_tokenYespreview_save_report가 발급한 승인 토큰
report_markdownYes저장할 보고서 전문. preview_save_report에 넘긴 것과 한 글자라도 다르면 토큰 검증에 실패합니다.
expected_write_modeNo미리보기에서 본 write_mode. 지정하면 실제 상태와 다를 때 저장을 거부합니다. 덮어쓰기 사고 방지용입니다.

Output Schema

NameRequiredDescription
pathYes
auditYes
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
report_idYes
write_modeYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the bar for extra disclosure is lower — yet the description still adds critical context: the token guarantees only technical integrity (approved content == saved content), NOT user approval, which is a crucial safety clarification. It also discloses the OVERWRITE destructive mode and the WRITE_MODE_CHANGED rejection mechanism, deepening understanding of the idempotent+destructive combination.

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

Conciseness4/5

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

Well-structured with clear section headers (Args, Returns, Raises), a front-loaded purpose statement, and numbered preconditions that make the safety gate easy to parse. Slightly verbose — the Args block largely duplicates schema descriptions and the Raises list could be trimmed — but every section earns its place in an approval-gated tool where safety detail matters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a conditional approval workflow, the description is complete: it covers the preconditions, the token semantics and its limitation, the error types with recovery info, the output shape (SaveResponse with path/audit/write_mode), and the optional expected_write_mode safeguard. Output schema exists and parameter coverage is 100%, so nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself already documents all four parameters well, including the critical constraint on report_markdown ('even one character different fails token verification') and expected_write_mode's overwrite-protection purpose. The description's Args section restates these rather than adding materially new meaning, though it does reinforce the cross-parameter binding (token must originate from preview, markdown must match preview) in the flow context.

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 opens with a specific verb+resource+condition: 'saves the report to file only when the approval token issued in preview matches.' This clearly differentiates it from sibling tools — it explicitly declares itself 'the only write tool on this server,' which is a concrete distinguishing claim against the read/validation siblings like preview_save_report and list_saved_reports.

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?

Provides two explicit numbered preconditions that must hold before invocation: (1) preview_save_report returned AWAITING_APPROVAL and issued a token, and (2) the user has explicitly approved saving. It goes further with a clear exclusion: 'Do not call unless the user said save.' This gives the agent unambiguous go/no-go criteria.

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

scan_folder_structureA
Read-onlyIdempotent

서버에 고정된 대상 폴더를 재귀적으로 훑어 파일 구조를 돌려줍니다.

폴더 분석의 출발점입니다. 각 항목의 allowed가 false이면 확장자 또는 크기 제한 때문에 다른 도구로 읽을 수 없다는 뜻이며, reason에 이유가 담깁니다.

Returns: ScanResponse: entries[]에 상대 경로·확장자·크기·수정 시각·허용 여부가 담기고, extension_counts에 확장자별 개수, truncated에 항목 수 제한으로 일부만 담겼는지 여부가 담깁니다.

Examples: - 사용: "이 폴더에 어떤 파일들이 있나요?" - 사용하지 않음: 이미 대상 파일을 알고 있고 원문이 필요할 때 → read_document_chunk

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
stageYes폴더 분석 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
entriesYes
max_depthYes
truncatedYes
target_dirYes
total_filesYes
next_actionsNo이어서 호출하면 좋은 도구 목록
extension_countsYes
total_size_bytesYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already declaring readOnlyHint, idempotentHint, and destructiveHint, the description adds valuable context beyond them: it explains the recursive scan nature, the semantics of `allowed` and `reason` (why files are inaccessible due to extension/size limits), and the response structure including `truncated` for item count limits. This enriches the agent's understanding of tool behavior without contradicting any annotation.

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

Conciseness4/5

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

The description is well-structured with clear paragraphs: main action, then allowed/reason explanation, then Returns block, then Examples. It is somewhat lengthy (about 10 lines) but every sentence adds value, including the heuristic about `allowed` and the example usage. It front-loads the core purpose and doesn't waste words, though it could be slightly tighter by merging some explanatory sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, a rich output schema (as indicated by 'Has output schema: true'), and the description already covers the return fields, the tool is completely specified. It explains the `allowed`/`reason` semantics that are crucial for agent decision-making, mentions the `truncated` field, and provides usage examples. No critical information is missing for an agent to correctly invoke this tool.

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 zero parameters, so the baseline is 4 per instructions. The description doesn't need to elaborate on parameters, and it correctly focuses on output semantics. Since schema coverage is 100% (vacuously true with no props), no additional parameter documentation is required. The description effectively explains the return structure, which is the relevant semantic content.

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 recursively scans a fixed target folder and returns the file structure. It uses a specific verb ('훑어' - scans) and resource ('대상 폴더'), and distinguishes itself from siblings by explicitly mentioning it is the 'starting point of folder analysis' and giving a concrete example of when not to use it (when you already know the target file and need original text, use read_document_chunk).

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 the tool ('folder analysis starting point'), explains the meaning of the `allowed` flag in terms of downstream tool accessibility, and gives a clear example of when to use an alternative (read_document_chunk when the target file is known). This effectively routes the agent to the correct sibling tool.

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

validate_report_draftA
Read-onlyIdempotent

요약 보고서 초안의 구조를 검사합니다. 저장 게이트입니다.

error가 하나라도 있으면 preview_save_report에서 승인 토큰이 발급되지 않습니다.

검사 항목: - error: H1 제목, 필수 섹션 5개(폴더 개요/파일 구조/문서별 요약/주요 키워드/확인 필요 사항) - warning: 섹션 순서, 자리표시자 잔존, 대상 폴더 표기 누락, 문서 경로 인용 누락

Args: report_markdown: 요약 보고서 초안 전문.

Returns: ValidationResponse: valid, error_count, warning_count, issues[](rule_id/severity/message/fix/line).

NameRequiredDescriptionDefault
report_markdownYes검증할 요약 보고서 초안 전문(마크다운)

Output Schema

NameRequiredDescription
stageYes폴더 분석 워크플로에서 지금 위치한 단계
validYes
issuesYes
statusYes이 호출의 결과 상태
error_countYes
next_actionsNo이어서 호출하면 좋은 도구 목록
warning_countYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description is fully consistent. Beyond those annotations it adds real context: the gating behavior (errors block the downstream approval token) and the return shape (valid/error_count/warning_count/issues[] with rule_id/severity/message/fix/line). No contradiction with annotations.

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?

Purpose and the critical gating consequence are front-loaded in the first two lines. Validation items are organized into error/warning lists, and Args/Returns sections are compact. Nothing is wasted; the whole definition earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one fully documented parameter and an existing output schema, the description covers everything an agent needs: when to call it (before preview_save_report), what rules it enforces (with rule IDs and severities), and what it returns. No meaningful gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% - the single parameter report_markdown is already documented in the schema as '검증할 요약 보고서 초안 전문(마크다운)'. The Args section merely restates it without adding new meaning, so the baseline of 3 applies. The validation-rule context lives in the description body, not in param semantics themselves.

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?

Uses a specific verb+resource (검사합니다/요약 보고서 초안 구조) and enumerates exact validation rules by severity (error: H1 + 5 required sections; warning: section order, placeholders, etc.). Clearly distinct from all 13 siblings as a structural pre-save validator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Explicitly frames the tool as a '저장 게이트' (save gate) and states the consequence: any error means preview_save_report won't issue an approval token. This routes the agent to call it before saving. It does not name alternatives like check_summary_grounding or diff_report_against_saved to clarify when those should be used instead, so it stops short of full exclusion guidance.

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. 13 tool updatesv0.1.0
    • First observedbuild_summary_prompt
    • First observedcheck_summary_grounding
    • First observeddiff_report_against_saved
    • First observedextract_document_outline
    • First observedextract_key_terms
    • First observedlist_saved_reports
    • First observedlist_target_documents
    • First observedpreview_save_report
    • First observedread_document_chunk
    • First observedread_report_audit_log
    • First observedsave_approved_report
    • First observedscan_folder_structure
    • First observedvalidate_report_draft

TDQS

A4.2/5.0

Scored across 13 tools

Disambiguation5/5

Each tool has a distinct role in the workflow: scanning, listing readable docs, reading chunks, extracting outlines/terms, building prompts, validating structure, checking grounding, diffing, previewing, saving, listing saved reports, and reading audit logs. The only potential overlap is scan_folder_structure vs list_target_documents, but their purposes are clearly differentiated (full scan vs. actionable document list). No ambiguity in selection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (scan_folder_structure, read_document_chunk, extract_key_terms, validate_report_draft, list_saved_reports). Verbs are descriptive and parallel (scan/list/read/extract/build/validate/check/diff/preview/save). No mixed conventions or chaotic naming.

Tool Count5/5

13 tools is within the ideal 3-15 range. Each tool supports a specific stage of a coherent workflow (folder analysis → report generation → validation → approval → save → audit). No redundant or trivial tools; the count feels well-scoped for the server's purpose.

Completeness4/5

The workflow covers scanning, extraction, prompt building, structural validation, grounding checks, diff, preview, save, list, and audit. The only notable gap is the lack of a tool to read a previously saved report's full content directly (e.g., read_saved_report), though diff_report_against_saved provides partial visibility. This is a minor gap that agents can work around via diff or by reading original documents.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time indexing and semantic search of local documents (PDF, Word, text, Markdown, RTF) using vector embeddings and local LLMs. Monitors folders for changes and provides natural language search capabilities through Claude Desktop integration.
    22
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables read-only analysis of local unstructured documents by scanning a folder, extracting text and structural metadata, and passing content with truncation and error-awareness to an LLM for summarization.
    9
    1
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables reading and extracting text from local documents (PDF, Word, Excel, PowerPoint, HWP, Markdown, CSV, etc.) without network access, and provides approval-gated summary saving and file organization.
    11
    MIT