Skip to main content
Glama
skaosqkf0-del

file-analyzer-mcp

Proof

Point it at a folder and it hands back a real tree, not a guess:

$ analyze_folder_structure({ "folder_path": "tests/fixtures" })
{
  "status": "OK",
  "file_count": 6,
  "supported_file_count": 6,
  "extension_stats": [
    { "extension": ".pdf",  "count": 2, "bytes": 723995 },
    { "extension": ".docx", "count": 1, "bytes": 35505 },
    { "extension": ".pptx", "count": 1, "bytes": 33067 },
    { "extension": ".svg",  "count": 1, "bytes": 319 },
    { "extension": ".png",  "count": 1, "bytes": 74 }
  ],
  "tree_text": "fixtures/\n├── sample.docx (34.7KB)\n├── sample.pdf (431B)\n├── sample.png (74B)\n├── sample.pptx (32.3KB)\n├── sample.svg (319B)\n└── sample_scanned.pdf (706.6KB)"
}

Then read one of them — headings, paragraphs, and tables come back structured, not flattened:

$ read_docx({ "file_path": "tests/fixtures/sample.docx" })
{
  "status": "OK",
  "headings": ["테스트 문서"],
  "text": "테스트 문서\n본문 첫 문단입니다.",
  "tables": [{ "index": 0, "rows": [["A", "B"], ["1", "2"]] }]
}

Both calls are reproducible — clone this repo, run uv sync --extra dev, and call them against tests/fixtures/ yourself.

Related MCP server: Agent Helper

What it is

A personal MCP server that reads whatever's in a folder — PDF, Word, PowerPoint, SVG, PNG — and hands the structure and raw content back to whichever agent called it (Claude Code, Claude Desktop, Codex). It doesn't summarize anything itself.

That's the whole design: the server extracts, the host interprets. No LLM API key lives in this server. A PNG comes back as base64 image content, not a caption — your host's own vision reads it. A scanned PDF only gets OCR'd when you ask for it.

Tools

Tool

Role

analyze_folder_structure

Recursive tree + per-extension stats for a folder

list_supported_files

Just the pdf/docx/pptx/svg/png paths, filtered

read_pdf

Per-page text. ocr=True runs Tesseract on pages with no text layer

read_docx

Paragraphs, headings, tables (.doc not supported)

read_pptx

Per-slide title, body, speaker notes (.ppt not supported)

read_svg

Size, tag counts, <text> content — no rasterizing

read_image

PNG as metadata + image content, for the host to look at directly

Large documents paginate: page_start/page_end for PDF, slide_start/slide_end for PPTX. Default caps are 30 pages / 60 slides — past that, the response's next_actions tells you the next range to ask for.

Install

uv sync --extra dev

Register with Claude Code:

claude mcp add -s user file-analyzer -- "<uv.exe path>" --directory "<this folder>" run python src/file_analyzer_mcp/server.py

On Windows, if uv was installed via pip it won't be on Claude's PATH — use uv.exe's full path (pip show uv to find it). Claude Desktop and Codex examples are in config/: claude_code.example.md, claude_desktop_config.example.json, codex-config.example.toml.

Security

Sensitive paths are refused deterministically — this doesn't depend on the model deciding not to read them. See paths.py.

Pattern

What it protects

.ssh, .aws, .gnupg, .azure, .kube, .docker

Credential and cloud-config directories

Browser profile roots (e.g. User Data)

Saved logins and cookies

.env*, *.pem, *.key, *.pfx, *.p12

Secret files, matched by name pattern

id_rsa, id_ed25519, known_hosts, .netrc, credentials, credentials.json, login data, cookies, web data

Specific credential filenames

Every call is also audited — tool name, arguments, and outcome (success or blocked) get appended to logs/audit.jsonl. See audit.py. A 50MB file size cap applies on top of all of this.

Conventions for anyone extending this server are in AGENTS.md.

Errors

Every failure raises ToolFailure with a code, a plain-language reason, and how to recover — the message is written for the calling model to read and act on, not just for a human.

Code

Raised when

PATH_NOT_FOUND

The folder or file path doesn't exist

NOT_A_DIRECTORY / NOT_A_FILE

A tool got the wrong kind of path

UNSUPPORTED_EXTENSION

The file isn't pdf/docx/pptx/svg/png

WRONG_TOOL_FOR_EXTENSION

e.g. read_pdf called on a .docx

FILE_TOO_LARGE

File exceeds the 50MB cap

SENSITIVE_PATH_BLOCKED

Path matches the security table above

OCR_ENGINE_NOT_FOUND

ocr=True but Tesseract isn't installed/configured

SVG_PARSE_ERROR

The .svg file isn't valid XML

Scanned-PDF OCR

read_pdf(ocr=True) needs Tesseract:

winget install UB-Mannheim.TesseractOCR
uv run python scripts/setup_ocr.py   # copies eng/osd, downloads kor.traineddata

ocr_lang defaults to "kor+eng". Wrong Tesseract path? Set TESSERACT_CMD.

Testing

uv run pytest -q                        # parser / path / audit unit tests
uv run python scripts/smoke_stdio.py    # real stdio round-trip against the server

Both should pass before a change counts as done — pytest checks modules in isolation, the smoke test is the only thing that exercises the actual MCP protocol and catches schema-level breakage.

Limits

Limit

Why / what to do

.doc / .ppt not supported

Legacy binary formats — save as .docx/.pptx first

Scanned PDFs return empty text by default

Pass ocr=True (off by default — it's slower)

SVGs aren't rasterized

Parsed as XML for structure, not rendered as an image

Available Tools

7 tools
analyze_folder_structureA
Read-onlyIdempotent

지정한 폴더를 재귀적으로 훑어 트리, 확장자별 통계를 돌려준다.

파일 분석의 출발점입니다. 여기서 폴더 규모를 먼저 파악한 뒤, list_supported_files로 실제로 읽을 수 있는 파일만 추리세요.

Args: folder_path: 분석할 폴더 경로. max_depth: 트리 최대 깊이 (기본 5). max_entries: 트리에 나열할 최대 항목 수 (기본 2000).

Returns: FolderStructureResponse: tree_text에 들여쓰기된 트리, extension_stats에 확장자별 개수/용량, truncated에 상한 초과 여부.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depthNo트리를 내려갈 최대 깊이
folder_pathYes분석할 폴더의 절대/상대 경로
max_entriesNo트리에 나열할 최대 파일+폴더 수

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootYes
statusYes이 호출의 결과 상태
dir_countYes
tree_textYes들여쓰기된 트리 텍스트
truncatedYesTrue면 max_depth/max_entries 상한에 걸려 트리가 일부만 표시됨
file_countYes
total_bytesYes
next_actionsNo이어서 호출하면 좋은 도구 목록
extension_statsYes
supported_file_countYespdf/docx/pptx/svg/png 개수 합

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description exceeds this by disclosing the recursive behavior, the effect of max_depth and max_entries limits, and the truncation flag in the response. This is useful behavioral context beyond what annotations convey, although it does not detail error handling or performance expectations.

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 a usage-oriented introduction followed by explicit Args and Returns sections. It front-loads the purpose and usage guidance, then gets into parameters. It is efficient and not bloated, though the Korean text is slightly verbose in listing parameter behaviors already present in the schema.

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 tool with an output schema, the description does not need to explain return types in detail; it still summarizes the key fields (tree_text, extension_stats, truncated). It also covers the main execution limit (truncation) and instructs the agent on the next step. Missing any explicit error-handling or prerequisites, but given the annotations and schema, this is adequately complete for an agent to call it correctly.

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 the schema already documents each parameter's meaning. The description restates these meanings with slightly more operational context (e.g., '트리 최대 깊이 (기본 5)' vs the schema's '트리를 내려갈 최대 깊이'). No additional syntax or format details are added. Per guidelines, baseline is 3, and the description does not meaningfully exceed that 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 uses a specific verb ('recursively scans') and resource ('folder'), and clearly states the output (tree and per-extension statistics). It also frames itself as the starting point for file analysis, which distinguishes it from the sibling read_* tools that operate on individual files. The purpose is unambiguous and immediately scoped.

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 explicitly tells the agent when to use this tool ('starting point for file analysis') and how to proceed afterward: 'after first grasping folder scale, use list_supported_files to extract only actually readable files.' This routes the agent to the correct sibling for follow-up, providing clear when-to-use guidance and a named alternative.

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

list_supported_filesA
Read-onlyIdempotent

폴더 안에서 pdf/docx/pptx/svg/png 파일만 골라 경로 목록으로 돌려준다.

각 항목의 absolute_path를 read_pdf/read_docx/read_pptx/read_svg/read_image에 그대로 넘기면 됩니다.

Args: folder_path: 분석할 폴더 경로. max_depth: 탐색 최대 깊이 (기본 5). max_entries: 탐색할 최대 항목 수 (기본 2000).

Returns: SupportedFilesResponse: files[]에 relative_path/absolute_path/extension/bytes.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depthNo탐색할 최대 깊이
folder_pathYes분석할 폴더의 절대/상대 경로
max_entriesNo탐색할 최대 파일+폴더 수

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootYes
countYes
filesYes
statusYes이 호출의 결과 상태
truncatedYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so safety is covered. The description adds useful behavioral details: it filters by extension, returns a specific response type with relative_path/absolute_path/extension/bytes, and mentions recursion depth and entry limits. It also explains that the returned paths are meant to be passed to sibling read tools, which is valuable context not in annotations. No contradictions 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.

Conciseness4/5

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

The description is compact: a purpose sentence, an integration hint, then a concise Args/Returns section. It avoids fluff and front-loads the core purpose. The Args/Returns format is standard and scannable. Slight redundancy with the schema (defaults repeated) but not wasteful. Good structure for an agent to parse.

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

Completeness4/5

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

Given the tool's moderate complexity (3 params, output schema present), the description covers the essentials: what files are included, what the output contains, and how to consume the output. The output schema likely details the response structure, so not explaining return values in detail is fine. The main missing piece is a note about error handling or edge cases (e.g., inaccessible folders), but that's minor for a list 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?

Schema coverage is 100%, so the description doesn't need to explain all parameters, but it adds context beyond the schema: it explains max_depth and max_entries in the context of traversal (max depth and max files/folders to explore), and describes the return fields. The line '각 항목의 absolute_path를 ... 그대로 넘기면 됩니다' adds integration guidance. This adds meaning beyond the schema's basic parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose: it filters a folder for specific file types (pdf/docx/pptx/svg/png) and returns a list of paths. The verb 'list' is specific, the resource is 'supported files within a folder', and the file types are enumerated. It also distinguishes itself from siblings like read_pdf/read_docx by noting it returns paths to pass to those readers, and from analyze_folder_structure by focusing on supported file types rather than general structure.

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 tells the agent to pass the absolute_path values from the result to the read_* tools, which is a clear usage directive. It doesn't explicitly say when NOT to use it (e.g., when you need all files regardless of type), but the context signals and sibling list imply alternatives. The guidance is present but could be more explicit about when to choose this over analyze_folder_structure.

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

read_docxA
Read-onlyIdempotent

Word(.docx) 문서의 본문 문단, 제목, 표를 추출한다.

옛 형식(.doc)은 지원하지 않습니다 — Word에서 '다른 이름으로 저장 > .docx'로 변환한 뒤 다시 시도하세요.

Args: file_path: docx 파일 경로. max_chars: 본문 최대 글자 수 (기본 60000).

Returns: ReadDocxResponse: text(본문), headings(제목 스타일 문단), tables(행 단위 셀 텍스트).

Raises: ToolFailure: PATH_NOT_FOUND / NOT_A_FILE / FILE_TOO_LARGE / UNSUPPORTED_EXTENSION.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes읽을 .docx 파일 경로
max_charsNo본문 최대 글자 수. 초과분은 잘림

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
statusYes이 호출의 결과 상태
tablesYes
headingsYes
file_pathYes
truncatedYes
next_actionsNo이어서 호출하면 좋은 도구 목록
paragraph_countYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds behavioral details such as the max_chars truncation, the extraction of text/headings/tables, and the specific error conditions (PATH_NOT_FOUND, FILE_TOO_LARGE, etc.), which go beyond the annotations and provide valuable runtime expectations.

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-organized with clear sections (purpose, limitation, args, returns, raises) and is front-loaded with the core action. While slightly verbose, every sentence is informative and earns its place, making it concise for the amount of context provided.

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?

Despite having an output schema, the description still explains the return structure (ReadDocxResponse with text, headings, tables) and enumerates all possible errors. Combined with the fully documented parameters and annotations, nothing essential is missing for an agent to call this tool correctly.

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 the schema already documents both parameters. The description repeats the parameter meanings (file_path: docx 파일 경로, max_chars: 본문 최대 글자 수) without adding new details, making this a baseline score.

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 ('Word(.docx) 문서의 본문 문단, 제목, 표'), clearly distinguishing it from sibling tools like read_pdf and read_pptx by naming the exact file format. It also explicitly excludes .doc, making its scope 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 provides a clear usage context: it is for .docx files only, and specifically instructs the agent to convert .doc files before retrying. It does not compare against alternative readers, but the format-specific guidance is enough to direct correct usage.

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

read_imageA
Read-onlyIdempotent

PNG 이미지를 읽어 메타데이터와 이미지 콘텐츠를 함께 돌려준다.

이 도구는 이미지를 요약하지 않는다. 반환된 이미지를 직접 보고 내용을 설명/요약하는 것은 호출자(당신)의 역할입니다.

Args: file_path: png 파일 경로.

Returns: list: [메타데이터(JSON), 이미지 콘텐츠] 두 항목. 메타데이터에는 width/height/mime_type이 담깁니다.

Raises: ToolFailure: PATH_NOT_FOUND / NOT_A_FILE / FILE_TOO_LARGE / UNSUPPORTED_EXTENSION.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes읽을 .png 파일 경로

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond annotations by disclosing the return structure (list of [metadata, image content]), the metadata fields (width/height/mime_type), the explicit non-summarization behavior, and the specific ToolFailure error codes. 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.

Conciseness4/5

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

The description is front-loaded with the core purpose, then delivers the critical behavioral caveat (no summarization) before structured Args/Returns/Raises sections. It is well organized with minimal wasted text, though the error-enum listing adds modest length without deep explanatory value.

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 read tool with no output schema, the description covers purpose, parameter, return format with metadata fields, caller responsibility, and error codes. The only notable gap is that FILE_TOO_LARGE implies a size threshold that is never specified, but overall this is reasonably complete for its low complexity.

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% (file_path is documented as '읽을 .png 파일 경로' in the schema). The description restates the parameter nearly identically without adding format, constraints, or usage nuances beyond the schema. Baseline 3 is correct when the schema carries the full parameter documentation.

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 (PNG image), and explicitly clarifies what it does NOT do (summarize the image), which separates it from document-reading siblings like read_pdf and read_docx. The purpose is unambiguous and self-contained.

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 context through the file-type distinction among siblings (read_pptx, read_pdf, read_svg) and clarifies that the caller must do the summarizing. However, it never names an alternative tool or gives an explicit when-to-use/when-not-to-use condition, leaving the routing to inference from the file extension.

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

read_pdfA
Read-onlyIdempotent

PDF에서 페이지별 텍스트를 추출한다.

긴 PDF는 컨텍스트를 아끼기 위해 page_start/page_end로 범위를 지정해 나눠 읽으세요. page_end를 생략하면 기본 상한(30페이지)까지만 읽고, 그 이상은 truncated 여부 대신 total_pages와 end_page 차이로 알 수 있습니다.

Args: file_path: PDF 파일 경로. page_start: 시작 페이지 (기본 1). page_end: 끝 페이지. 생략 시 최대 30페이지. ocr: 텍스트 레이어가 없는 페이지를 OCR로 보강할지 여부 (기본 False, 느립니다). ocr_lang: OCR 언어 코드 (기본 'kor+eng').

Returns: ReadPdfResponse: pages[]에 페이지별 text와 text_source ('extracted'/'ocr'/'empty'). likely_scanned가 True면 원래 텍스트 레이어가 없는 스캔본 — ocr=True로 다시 호출하면 내용을 읽을 수 있습니다.

Raises: ToolFailure: PATH_NOT_FOUND / NOT_A_FILE / FILE_TOO_LARGE / UNSUPPORTED_EXTENSION / OCR_ENGINE_NOT_FOUND.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNoTrue면 텍스트 레이어가 없는 페이지를 Tesseract OCR로 다시 읽습니다. 스캔본 PDF에서만 켜세요 — 텍스트 레이어가 있는 페이지는 그대로 추출을 씁니다.
ocr_langNoOCR 언어 코드. 기본 'kor+eng'(한국어+영어 동시 인식)kor+eng
page_endNo끝 페이지. 생략하면 문서 끝까지(단, 기본 상한 30페이지)
file_pathYes읽을 .pdf 파일 경로
page_startNo시작 페이지(1부터)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pagesYes
statusYes이 호출의 결과 상태
end_pageYes
metadataYes
file_pathYes
start_pageYes
total_pagesYes
next_actionsNo이어서 호출하면 좋은 도구 목록
likely_scannedYesTrue면 텍스트 레이어가 없는 스캔 이미지 PDF로 추정됨. 이 서버는 OCR을 수행하지 않으므로 요약이 불가능합니다.

TDQS

A4.7/5.0
Behavior5/5

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

Discloses the default 30-page cap, the truncation detection method (total_pages vs end_page), OCR slowness, return structure (ReadPdfResponse with pages, text_source, likely_scanned), and specific error types (PATH_NOT_FOUND, FILE_TOO_LARGE, etc.). Adds meaningful context beyond the readOnly/idempotent annotations and covers operational nuances.

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?

Well-structured with clear sections: purpose, usage advice, Args, Returns, Raises. Front-loaded with purpose and usage guidance. Every sentence contributes value; no filler or redundancy. The length is justified by the tool's complexity.

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?

Covers input (file_path), pagination behavior, OCR details, return value structure, and error conditions. The presence of an output schema and complete parameter descriptions means nothing essential is missing. An agent can invoke the tool correctly with this description alone.

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 covers all 5 parameters with descriptions (100% coverage). The description adds behavior beyond the schema: the default page_end cap of 30, the OCR slowness warning, and the guidance to re-call with ocr=True when likely_scanned. This supplements the schema with practical usage details.

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?

States a specific verb (extracts), resource (PDF), and scope (page-by-page text). Distinguishes from sibling tools like read_pptx and read_docx which handle different file formats. The purpose is unambiguous and directly actionable.

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 instructs using page_start/page_end for long PDFs to save context and explains the default 30-page limit with truncation detection via total_pages vs end_page. Also advises calling with ocr=True when likely_scanned is true. Does not explicitly contrast with sibling tools, but the file-type difference is implied and the guidance is concrete.

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

read_pptxA
Read-onlyIdempotent

PowerPoint(.pptx)에서 슬라이드별 제목, 본문, 스피커 노트를 추출한다.

옛 형식(.ppt)은 지원하지 않습니다. 슬라이드가 많으면 slide_start/slide_end로 나눠 읽으세요.

Args: file_path: pptx 파일 경로. slide_start: 시작 슬라이드 (기본 1). slide_end: 끝 슬라이드. 생략 시 최대 60장.

Returns: ReadPptxResponse: slides[]에 slide_number/title/text/notes.

Raises: ToolFailure: PATH_NOT_FOUND / NOT_A_FILE / FILE_TOO_LARGE / UNSUPPORTED_EXTENSION.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes읽을 .pptx 파일 경로
slide_endNo끝 슬라이드. 생략하면 최대 60장까지
slide_startNo시작 슬라이드(1부터)

Output Schema

ParametersJSON Schema
NameRequiredDescription
slidesYes
statusYes이 호출의 결과 상태
end_slideYes
file_pathYes
start_slideYes
next_actionsNo이어서 호출하면 좋은 도구 목록
total_slidesYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description adds substantial behavior beyond that: the default 60-slide cap, the extraction of speaker notes, the expected response structure (slides[] with slide_number/title/text/notes), and specific ToolFailure codes (PATH_NOT_FOUND / NOT_A_FILE / FILE_TOO_LARGE / UNSUPPORTED_EXTENSION). This informs the agent about limits and failure modes that annotations 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?

The definition uses well-organized Google-style sections (purpose, constraint, Args, Returns, Raises) with front-loaded purpose and zero filler. The Args section is somewhat redundant with the schema's own descriptions, which slightly reduces the efficiency score.

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?

Since an output schema exists and the description separately explains the slides[] return shape, return values are doubly covered. Parameter meanings are in the schema, the .ppt limitation is disclosed, error codes are enumerated, and the default range behavior is stated — nothing an agent needs to invoke this tool 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 description coverage is 100%, so a baseline of 3 applies. The description's Args section restates parameter meanings (file_path path, slide_start default 1, slide_end default up to 60) that the schema already documents, adding marginal value beyond reinforcing defaults.

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: 'PowerPoint(.pptx)에서 슬라이드별 제목, 본문, 스피커 노트를 추출한다' (extracts title, body, speaker notes per slide). It explicitly names the .pptx format, which distinguishes it from sibling tools that target other formats (read_pdf, read_docx, read_svg, read_image).

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?

Clear usage context is provided: the .ppt exclusion ('옛 형식(.ppt)은 지원하지 않습니다') serves as a when-not, and the guidance to paginate large presentations via slide_start/slide_end is actionable operational direction. However, it does not explicitly name sibling alternatives (e.g., 'use read_pdf for PDF files'), so routing is implied by format naming rather than stated.

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

read_svgA
Read-onlyIdempotent

SVG의 크기, 태그별 구조 통계, 텍스트 요소를 추출한다.

SVG는 XML이라 별도 렌더링 없이 구조 파악이 가능합니다. 단, 이 도구는 벡터를 래스터화(이미지로 렌더링)하지 않으므로, 텍스트가 거의 없고 순수 도형으로만 이루어진 다이어그램은 element_counts로 복잡도만 짐작할 수 있습니다.

Args: file_path: svg 파일 경로.

Returns: ReadSvgResponse: element_counts(태그별 개수), text_content(text 요소 모음), title/description(/ 값).

Raises: ToolFailure: PATH_NOT_FOUND / NOT_A_FILE / FILE_TOO_LARGE / UNSUPPORTED_EXTENSION.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes읽을 .svg 파일 경로

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleYes
widthYes
heightYes
statusYes이 호출의 결과 상태
view_boxYes
file_pathYes
descriptionYes
next_actionsNo이어서 호출하면 좋은 도구 목록
text_contentYes
element_countsYes태그별 등장 횟수. 구조 복잡도 파악용

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds valuable behavioral context beyond annotations: it explicitly states that the tool does not rasterize vectors (a critical non-destructive behavior), lists the specific output fields (element_counts, text_content, title/description), and enumerates possible failures (PATH_NOT_FOUND, NOT_A_FILE, etc.). This fully discloses operational behavior 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?

The description is well-structured with clear sections (Args, Returns, Raises) and a concise note on rendering limitations. It is not overly verbose, and the core purpose is stated first. The only minor inefficiency is the redundancy of repeating file_path in Args when the schema already documents it, but overall the structure is efficient and scannable.

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's simplicity (one parameter) and the presence of an output schema (ReadSvgResponse), the description is exhaustive. It covers the input, output fields, potential error conditions, and a key behavioral limitation. Including the Raises section ensures the agent knows what failures to anticipate. Nothing essential is missing for correct invocation and interpretation of results.

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?

There is only one parameter (file_path) and the input schema already provides a full description ('읽을 .svg 파일 경로'), giving 100% schema coverage. The description repeats the same information in the Args section without adding new semantics like format constraints or examples. Since the schema carries the burden, a baseline of 3 is appropriate.

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 extracts SVG size, per-tag structure statistics, and text elements. The verb '추출한다' (extracts) plus the specific resource (SVG) makes the purpose precise and distinct from sibling tools like read_pdf or read_docx, which target different formats.

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 explains that SVG is XML and can be understood without rendering, and importantly notes that it does not rasterize vectors, so diagrams with little text can only be gauged via element_counts. This gives strong context for when to use the tool and what limitations to expect, though it does not explicitly name alternatives or state when not to use it. The context is sufficient for an agent to decide appropriately.

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.

  1. 7 tool updatesv0.1.0
    • First observedanalyze_folder_structure
    • First observedlist_supported_files
    • First observedread_docx
    • First observedread_image
    • First observedread_pdf
    • First observedread_pptx
    • First observedread_svg

TDQS

A4.4/5.0
Disambiguation5/5

Each read_* tool targets a distinct file format (pptx, svg, image, pdf, docx) with clear boundaries; list_supported_files and analyze_folder_structure have separate discovery roles. No overlap or ambiguity exists.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern: read_<format> for content extraction, plus list_supported_files and analyze_folder_structure. Conventions are uniform and predictable.

Tool Count5/5

Seven tools is well-scoped for a file analyzer server: five format readers plus two discovery/analysis helpers. Each tool has a clear purpose and none feel redundant or missing.

Completeness5/5

The server covers all explicitly supported formats (pdf, docx, pptx, svg, png) with read operations, and provides folder-level discovery through list_supported_files and analyze_folder_structure. The surface is complete for its stated analysis purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to read, search, and analyze local file systems with tools for reading file contents, listing directories, searching by patterns, and analyzing folder structures for context-aware queries.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to inspect and convert PDF, PowerPoint, Excel, and many other file formats into clean, structured Markdown, with chunking support for long documents.
    Apache 2.0
  • 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
    -

Latest Blog Posts

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/skaosqkf0-del/MCP_test'

If you have feedback or need assistance with the MCP directory API, please join our Discord server