file-insight-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@file-insight-mcpScan the sample docs folder and generate a summary report."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
File Analysis MCP (file-insight-mcp)
A personal local MCP server that reads unstructured documents in a specified folder, analyzes their structure, and writes per-document summaries and a folder-wide summary report.
All documents in this package's
data/sample_docs/are synthetic data created for demo purposes.
References
Server structure (FastMCP, stdio, multi-MCP server composition): https://github.com/kyopark2014/mcp
Harness conventions (step-by-step stage/next_actions, grounding anchors, approval boundaries): reuses the approach established in the related
personal-meeting-mcp-trainingprojectHarness engineering principles list: https://github.com/walkinglabs/awesome-harness-engineering (context budget, pre-approval hooks, deterministic eval, and static safety scanner items selectively applied at this project's scale)
MCP Python SDK: https://github.com/modelcontextprotocol/python-sdk
Related MCP server: file-analyzer
What this server does
Scans the structure of a fixed target folder (
data/sample_docs/).Reads only documents with allowed extensions (
.txt .md .csv .log).Extracts table of contents (heading structure), dates, numbers, and key term candidates from documents using rule-based logic.
Builds a combined summary prompt from all documents. The summary itself is written by the host LLM (Claude/Codex); this MCP does not call any LLM API.
Validates the structure of the written summary report and cross-checks that mentioned filenames actually exist.
Saves the report to a file only after the user explicitly approves.
Quick start
Required environment: Python 3.11 or later, uv
uv sync --extra devAfter installation, verify that all four commands in the Verification section below pass.
To visually inspect the tools with MCP Inspector:
uv run mcp dev src/file_insight_mcp/server.pyProject structure
Domain logic and tool conventions are separated so that changing validation rules does not require touching the tool layer.
Path | Role |
| Path safety checks, extension allowlist, size and item count limits |
| Folder scan, document reading, report structure validation, approval-based saving |
| Table of contents, date, number, and key term extraction (rule-based, deterministic) |
| Cross-checking filenames mentioned in summaries (advisory check) |
| Common tool convention elements — |
| MCP tool, resource, and prompt registration (harness layer) |
| Pure logic for path expressions, verdicts, and variable substitution in eval cases |
| Deterministic regression cases (data, not code) |
| Runner that executes cases over the actual MCP protocol |
| STDIO startup, schema, and harness convention smoke test |
| Pre-release static checks (credentials, dangerous calls, tool annotations) |
| Domain function unit tests (run without starting the server) |
Recommended flow
SCAN → LIST → READ → EXTRACT → DRAFT → CHECK → PREVIEW → [사용자 승인] → SAVEDStep | Tool | Read/Write | Role |
SCAN |
| Read | Target folder structure, per-extension counts, allowed status |
LIST |
| Read | List of documents that can actually be read |
READ |
| Read | View source text. Supports line range specification and |
EXTRACT |
| Read | Extract table of contents (heading/numbering) structure |
EXTRACT |
| Read | Extract key term candidates based on dates, numbers, and frequency |
DRAFT |
| Read | Generate a prompt combining all documents + the standard report format |
CHECK |
| Read | Structure validation. Provides |
CHECK |
| Read | Cross-check that filenames mentioned in the summary actually exist (advisory, does not block saving) |
PREVIEW |
| Read | Check differences against the previously saved version |
PREVIEW |
| Read | Shows validation and diff together and issues an approval token |
SAVED |
| Write | Saves only when the approval token matches (the only write tool) |
OBSERVE |
| Read | List of saved reports |
OBSERVE |
| Read | View the save audit log |
Resources and prompts
Type | URI or name | Role |
Resource |
| Document source text |
Resource |
| Saved summary report |
Prompt |
| Analysis workflow from scan to save approval |
Harness design
This server treats not only functionality but also the way the model uses tools as a design target.
Every response includes
stageandnext_actions, so the model can choose the next tool from the response alone.blocking: trueis a guidance hint meaning "do not skip this step." What actually blocks saving is structure validation and the approval token; the hint does not take over that role.Errors are returned as
ToolFailurewith a cause code, recovery method, and selectable values. The goal is to let the model recover on its own without asking again.Argument schemas are kept flat (
{"relative_path": "..."}). Using Pydantic models as argument types would nest them as{"params": {...}}and change the call shape.Return values are Pydantic models, so
outputSchemais generated automatically.Every tool has
readOnlyHint/destructiveHintso the host can show a different approval UI for write tools.Only certain checks (structure) block saving; heuristic checks (filename cross-check) are reported as warnings only.
Context budget
Following the principle that "the context window is not a dumping ground but a working-memory budget," every tool has an explicit cap on response size.
scan_folder_structure: IfMAX_SCAN_ENTRIES(500) is exceeded, it reportstruncated: trueand truncates.read_document: Files larger thanMAX_FILE_BYTES(200KB) are not read in full; instead, an error guides the caller to read only part of the file viaread_document_chunk.extract_key_terms: Limits the number of items per category withmax_terms.preview_save_report:include_preview=Falseis the default, so a draft the model already has is not included in the response again. When it must be included,max_preview_charslimits the length.harness.truncate()/harness.number_lines(): Always makes truncation status and citation anchors (line numbers) explicit so the model does not have to guess whether "this is the whole thing or part of it."
Safety boundaries
The server only handles
security.TARGET_DIR(data/sample_docs/). It cannot access anything outside that directory via.., absolute paths, drive letters, or symbolic links (security.safe_relative_path).Files outside the extension allowlist (
.txt .md .csv .log) are not read. Executable/script extensions are always excluded from targets.If a file exceeds
MAX_FILE_BYTES(200KB), it is not read in full; an error guides the caller instead.Hidden files and folders whose names start with
.are excluded from scanning.The only write tool is
save_approved_report, which works only when the (report_id, body) hash token issued bypreview_save_reportmatches.This server only reads documents. If code or shell execution calls such as
eval/exec/subprocessappear in the source,scripts/validate_package.pyfails.
Verification
uv run pytest -q
uv run python scripts/smoke_stdio.py
uv run python scripts/run_evals.py
uv run python scripts/validate_package.pyThe four commands each check different things, so all of them must pass.
Command | Scope of checks | Server startup |
|
| No |
| Tool registration, schema flatness, annotations, error message conventions | Yes |
| Deterministic regression cases in | Yes |
| Static checks for credential leaks, dangerous calls, tool annotations | No |
run_evals.py includes the full save flow, covering whether saving succeeds or is rejected when the approval token is correct or incorrect. Whenever you fix a bug, add one line to evals/cases.jsonl with a case that reproduces that bug. See evals/README.md for the case syntax.
If you want to analyze a different folder
For safety, this project fixes the target folder to TARGET_DIR in src/file_insight_mcp/security.py (the data/sample_docs/ inside the package). To analyze a real work folder:
Change
TARGET_DIRto the desired absolute path, or modify it to be injected via an environment variable.Reflect the extensions that actually exist in that folder in
ALLOWED_EXTENSIONS.First check that there are no sensitive subfolders (credentials, personal information, etc.).
Claude Desktop connection
Replace ABSOLUTE_PROJECT_PATH in config/claude_desktop_config.example.json with the absolute path of this folder, then apply it to the Claude Desktop configuration. You must fully quit the app and relaunch it.
Design principles
The MCP does not call any separate LLM API. Claude or Codex writes the summary sentences; this MCP handles the source text, structure, validation, and saving.
It never fabricates filenames, numbers, or dates not confirmed in the documents; the grounding checker mechanically cross-checks them.
Final saving requires both the approval token issued at preview and the user's explicit approval.
Domain logic (
core,outline,grounding) is separated from tool conventions (server,harness,security).
Available Tools
13 toolsbuild_summary_promptARead-onlyIdempotent
대상 폴더의 모든 문서와 표준 보고서 형식을 결합한 요약 프롬프트를 반환합니다.
이 MCP는 LLM API를 호출하지 않습니다. 요약은 호스트(Claude/Codex)가 하고, 이 도구는 '무엇을 어떤 형식으로 쓸지'에 대한 지시문과 원문 전체를 조립합니다.
Args: with_line_numbers: 원문 줄 번호 부착 및 인용 규칙 추가 여부 (기본 True).
Returns:
PromptResponse: prompt에 규칙 + 필수 섹션 + 문서 목록 + 원문이 담긴 지시문.
| Name | Required | Description | Default |
|---|---|---|---|
| with_line_numbers | No | True면 각 문서 원문에 줄 번호를 붙이고, 요약에 'L14' 형태로 인용하도록 규칙을 추가합니다. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| prompt | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| target_dir | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| document_count | Yes |
TDQS
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.
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.
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.
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.
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.
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_groundingARead-onlyIdempotent
보고서에 언급된 파일명이 현재 폴더 스캔 결과에 실제로 있는지 대조합니다.
"문서에 없는 파일을 만들어 내지 않는다"는 규칙을 사람 눈 대신 기계가 확인합니다.
중요: 이 검사는 자문(advisory) 입니다. 휴리스틱이므로 오탐이 있을 수 있고, 저장을 막지 않습니다. 저장 게이트는 validate_report_draft(구조)와 사용자 승인입니다.
Args: report_markdown: 요약 보고서 초안 전문.
Returns:
GroundingResponse: status(GROUNDED / MOSTLY_GROUNDED /
NEEDS_EVIDENCE_REVIEW), score(0-100), findings[].
| Name | Required | Description | Default |
|---|---|---|---|
| report_markdown | Yes | 검사할 요약 보고서 초안 전문(마크다운) |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| checked | Yes | |
| summary | Yes | |
| advisory | No | True. 근거 검사는 저장을 막지 않습니다. 저장 게이트는 validate_report_draft와 사용자 승인입니다. |
| findings | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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.
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.
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.
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.
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.
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_savedARead-onlyIdempotent
이미 저장된 보고서와 초안의 차이를 보여 줍니다.
같은 report_id로 두 번째 저장을 하면 기존 파일을 덮어씁니다. 무엇이 사라지는지 먼저 확인해 사고를 막는 용도입니다.
Args: report_id: 보고서 id. report_markdown: 초안 전문. diff_preview_lines: unified diff 미리보기 줄 수 (기본 40).
Returns:
DiffResponse: diff.write_mode가 CREATE / OVERWRITE / NO_CHANGE 중 하나.
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes | 보고서 id (영문 소문자/숫자/_/- 만 허용) | |
| report_markdown | Yes | 비교할 요약 보고서 초안 전문 | |
| diff_preview_lines | No | 돌려줄 diff 미리보기 줄 수 |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| target | Yes | |
| report_id | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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.
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.
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.
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.
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.
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_outlineARead-onlyIdempotent
마크다운 헤딩, 번호 매김 항목, 전부 대문자 줄을 목차 후보로 추출합니다.
비정형 문서는 형식이 제각각이므로 규칙 기반 휴리스틱 세 가지를 함께 사용합니다. 결과에는 원문 줄 번호가 함께 담겨 근거로 쓸 수 있습니다.
Args: relative_path: 문서 상대 경로.
Returns:
OutlineResponse: outline[]에 level, title, line이 담깁니다.
| Name | Required | Description | Default |
|---|---|---|---|
| relative_path | Yes | 문서 상대 경로 |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| outline | Yes | |
| entry_count | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| relative_path | Yes |
TDQS
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.
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.
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.
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.
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.
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_termsARead-onlyIdempotent
문서에서 날짜, 단위가 붙은 수치, 빈도 기반 핵심 용어 후보를 뽑습니다.
통계적 NLP가 아니라 정규식과 빈도 계산만 쓰는 결정적(deterministic) 추출이므로, 같은 문서에는 항상 같은 결과가 나옵니다.
Args: relative_path: 문서 상대 경로. max_terms: 분류별 최대 항목 수 (기본 20).
Returns:
KeyTermsResponse: dates, numbers에 줄 번호와 원문이, frequent_terms에
용어·빈도가 담깁니다.
| Name | Required | Description | Default |
|---|---|---|---|
| max_terms | No | 분류별 최대 항목 수. 컨텍스트 보호용입니다. | |
| relative_path | Yes | 문서 상대 경로 |
Output Schema
| Name | Required | Description |
|---|---|---|
| dates | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| numbers | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| relative_path | Yes | |
| frequent_terms | Yes |
TDQS
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.
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.
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.
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.
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.
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_reportsARead-onlyIdempotent
이미 저장된 요약 보고서 목록을 조회합니다.
같은 report_id로 저장하면 덮어쓰기가 되므로, 저장 전에 무엇이 있는지 확인하는 용도입니다.
Returns:
SavedListResponse: saved[]에 report_id, 경로, 줄 수, 수정 시각(UTC),
내용 해시 앞 16자.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| saved | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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.
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.
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.
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.
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.
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_documentsARead-onlyIdempotent
확장자·크기 제한을 통과한, 실제로 읽고 요약할 수 있는 문서 목록을 돌려줍니다.
여기서 얻은 relative_path를 다른 모든 도구에 그대로 넘깁니다.
Returns:
DocumentListResponse: documents[]에 relative_path, 크기, 줄 수,
수정 시각이 담깁니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| documents | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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.
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.
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.
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.
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.
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_reportARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes | 보고서 id (영문 소문자/숫자/_/- 만 허용) | |
| include_preview | No | True면 보고서 전문을 응답에 그대로 되돌려줍니다. 이미 초안을 들고 있다면 False로 두어 컨텍스트를 아끼세요. | |
| report_markdown | Yes | 저장할 요약 보고서 전문(마크다운) | |
| max_preview_chars | No | preview 최대 길이 |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| target | Yes | |
| preview | No | |
| report_id | Yes | |
| validation | Yes | |
| write_mode | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| approval_token | Yes | 검증을 통과했을 때만 발급됩니다. 이 토큰은 사용자 승인을 대신하지 않습니다. |
| approval_request | Yes | 사용자에게 그대로 보여 주고 승인을 받을 문장 |
TDQS
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.
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.
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.
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.
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.
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_chunkARead-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 목록이 함께 담깁니다.
| Name | Required | Description | Default |
|---|---|---|---|
| end_line | No | 읽기를 끝낼 줄 번호. 생략하면 끝까지 읽습니다. | |
| start_line | No | 읽기 시작할 줄 번호(1부터) | |
| relative_path | Yes | list_target_documents가 돌려준 상대 경로 (예: 'research/market_research.txt') | |
| with_line_numbers | No | True면 'L14 | 내용' 형태로 줄 번호를 붙입니다. 요약 근거 칸에 인용 앵커를 적을 때 사용합니다. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| content | Yes | |
| end_line | Yes | |
| truncated | Yes | |
| start_line | Yes | |
| total_lines | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| relative_path | Yes |
TDQS
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.
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.
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.
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.
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.
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_logARead-onlyIdempotent
보고서 저장 감사 로그를 최신순으로 조회합니다.
AWAITING_APPROVAL → SAVED 흐름의 실행 증거를 확인할 때 사용합니다.
Args: limit: 최대 건수 (기본 20). report_id: 특정 보고서로 필터링 (선택).
Returns:
AuditResponse: events[] 최신순.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 최신순 최대 건수 | |
| report_id | No | 특정 보고서로 필터링. 생략하면 전체. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| events | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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.
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.
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.
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.
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.
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_reportADestructiveIdempotent
미리보기에서 발급된 승인 토큰이 일치할 때만 보고서를 파일로 저장합니다.
이 서버에서 유일한 쓰기 도구입니다. 호출 전 반드시 두 조건을 만족해야 합니다.
preview_save_report가
AWAITING_APPROVAL을 돌려주고 토큰을 발급했다.사용자가 그 내용을 보고 명시적으로 저장을 승인했다.
토큰은 기술적 무결성(승인한 내용 == 저장되는 내용)만 보장합니다. 사용자 승인을 대신하지 않습니다. 사용자가 "저장해"라고 말하지 않았다면 호출하지 마세요.
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. 모두 복구 방법이 메시지에 포함됩니다.
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes | 보고서 id (영문 소문자/숫자/_/- 만 허용) | |
| approval_token | Yes | preview_save_report가 발급한 승인 토큰 | |
| report_markdown | Yes | 저장할 보고서 전문. preview_save_report에 넘긴 것과 한 글자라도 다르면 토큰 검증에 실패합니다. | |
| expected_write_mode | No | 미리보기에서 본 write_mode. 지정하면 실제 상태와 다를 때 저장을 거부합니다. 덮어쓰기 사고 방지용입니다. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| audit | Yes | |
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| report_id | Yes | |
| write_mode | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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.
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.
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.
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.
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.
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_structureARead-onlyIdempotent
서버에 고정된 대상 폴더를 재귀적으로 훑어 파일 구조를 돌려줍니다.
폴더 분석의 출발점입니다. 각 항목의 allowed가 false이면 확장자 또는
크기 제한 때문에 다른 도구로 읽을 수 없다는 뜻이며, reason에 이유가
담깁니다.
Returns:
ScanResponse: entries[]에 상대 경로·확장자·크기·수정 시각·허용
여부가 담기고, extension_counts에 확장자별 개수, truncated에
항목 수 제한으로 일부만 담겼는지 여부가 담깁니다.
Examples: - 사용: "이 폴더에 어떤 파일들이 있나요?" - 사용하지 않음: 이미 대상 파일을 알고 있고 원문이 필요할 때 → read_document_chunk
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| entries | Yes | |
| max_depth | Yes | |
| truncated | Yes | |
| target_dir | Yes | |
| total_files | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| extension_counts | Yes | |
| total_size_bytes | Yes |
TDQS
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.
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.
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.
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.
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.
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_draftARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| report_markdown | Yes | 검증할 요약 보고서 초안 전문(마크다운) |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 폴더 분석 워크플로에서 지금 위치한 단계 |
| valid | Yes | |
| issues | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| error_count | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| warning_count | Yes |
TDQS
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.
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.
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.
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.
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.
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. Dates show when Glama detected each change.
13 tool updates
v0.1.0- First observed
build_summary_prompt - First observed
check_summary_grounding - First observed
diff_report_against_saved - First observed
extract_document_outline - First observed
extract_key_terms - First observed
list_saved_reports - First observed
list_target_documents - First observed
preview_save_report - First observed
read_document_chunk - First observed
read_report_audit_log - First observed
save_approved_report - First observed
scan_folder_structure - First observed
validate_report_draft
TDQS
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.
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.
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.
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
High-fidelity PDF to structured Markdown conversion and document field extraction.
Extract structured data points from research papers and other documents with an LLM.
Extract PDFs to Markdown, RAG chunks and cited tables; publish tracked Doc Links with read stats.
Agent-native document parsing: PDF, scans and FR/EU invoices to structured JSON or Markdown.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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.21MIT
- FlicenseAqualityCmaintenanceEnables 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.91-
- AlicenseAqualityCmaintenanceEnables 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.11MIT
- FlicenseAqualityCmaintenanceEnables local analysis of unstructured documents (PDF, DOCX, PPTX, SVG, PNG) by extracting text and structure with citation anchors, and verifies summaries against source material before a human approves saving a report.9-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jm333-B/temp_mcp_server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server