file-analyzer-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-analyzer-mcpanalyze folder ~/Downloads and extract text from the PDFs"
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.
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 |
| Recursive tree + per-extension stats for a folder |
| Just the pdf/docx/pptx/svg/png paths, filtered |
| Per-page text. |
| Paragraphs, headings, tables (.doc not supported) |
| Per-slide title, body, speaker notes (.ppt not supported) |
| Size, tag counts, |
| 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 devRegister with Claude Code:
claude mcp add -s user file-analyzer -- "<uv.exe path>" --directory "<this folder>" run python src/file_analyzer_mcp/server.pyOn 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 |
| Credential and cloud-config directories |
Browser profile roots (e.g. | Saved logins and cookies |
| Secret files, matched by name pattern |
| 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 |
| The folder or file path doesn't exist |
| A tool got the wrong kind of path |
| The file isn't pdf/docx/pptx/svg/png |
| e.g. |
| File exceeds the 50MB cap |
| Path matches the security table above |
|
|
| The |
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.traineddataocr_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 serverBoth 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 |
| Legacy binary formats — save as |
Scanned PDFs return empty text by default | Pass |
SVGs aren't rasterized | Parsed as XML for structure, not rendered as an image |
Available Tools
7 toolsanalyze_folder_structureARead-onlyIdempotent
지정한 폴더를 재귀적으로 훑어 트리, 확장자별 통계를 돌려준다.
파일 분석의 출발점입니다. 여기서 폴더 규모를 먼저 파악한 뒤, list_supported_files로 실제로 읽을 수 있는 파일만 추리세요.
Args: folder_path: 분석할 폴더 경로. max_depth: 트리 최대 깊이 (기본 5). max_entries: 트리에 나열할 최대 항목 수 (기본 2000).
Returns:
FolderStructureResponse: tree_text에 들여쓰기된 트리,
extension_stats에 확장자별 개수/용량, truncated에 상한 초과 여부.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No | 트리를 내려갈 최대 깊이 | |
| folder_path | Yes | 분석할 폴더의 절대/상대 경로 | |
| max_entries | No | 트리에 나열할 최대 파일+폴더 수 |
Output Schema
| Name | Required | Description |
|---|---|---|
| root | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| dir_count | Yes | |
| tree_text | Yes | 들여쓰기된 트리 텍스트 |
| truncated | Yes | True면 max_depth/max_entries 상한에 걸려 트리가 일부만 표시됨 |
| file_count | Yes | |
| total_bytes | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| extension_stats | Yes | |
| supported_file_count | Yes | pdf/docx/pptx/svg/png 개수 합 |
TDQS
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.
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.
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.
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.
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.
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_filesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No | 탐색할 최대 깊이 | |
| folder_path | Yes | 분석할 폴더의 절대/상대 경로 | |
| max_entries | No | 탐색할 최대 파일+폴더 수 |
Output Schema
| Name | Required | Description |
|---|---|---|
| root | Yes | |
| count | Yes | |
| files | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| truncated | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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.
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.
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.
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.
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.
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_docxARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | 읽을 .docx 파일 경로 | |
| max_chars | No | 본문 최대 글자 수. 초과분은 잘림 |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| tables | Yes | |
| headings | Yes | |
| file_path | Yes | |
| truncated | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| paragraph_count | Yes |
TDQS
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.
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.
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.
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.
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.
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_imageARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | 읽을 .png 파일 경로 |
TDQS
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.
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.
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.
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.
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.
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_pdfARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | True면 텍스트 레이어가 없는 페이지를 Tesseract OCR로 다시 읽습니다. 스캔본 PDF에서만 켜세요 — 텍스트 레이어가 있는 페이지는 그대로 추출을 씁니다. | |
| ocr_lang | No | OCR 언어 코드. 기본 'kor+eng'(한국어+영어 동시 인식) | kor+eng |
| page_end | No | 끝 페이지. 생략하면 문서 끝까지(단, 기본 상한 30페이지) | |
| file_path | Yes | 읽을 .pdf 파일 경로 | |
| page_start | No | 시작 페이지(1부터) |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| end_page | Yes | |
| metadata | Yes | |
| file_path | Yes | |
| start_page | Yes | |
| total_pages | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| likely_scanned | Yes | True면 텍스트 레이어가 없는 스캔 이미지 PDF로 추정됨. 이 서버는 OCR을 수행하지 않으므로 요약이 불가능합니다. |
TDQS
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.
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.
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.
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.
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.
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_pptxARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | 읽을 .pptx 파일 경로 | |
| slide_end | No | 끝 슬라이드. 생략하면 최대 60장까지 | |
| slide_start | No | 시작 슬라이드(1부터) |
Output Schema
| Name | Required | Description |
|---|---|---|
| slides | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| end_slide | Yes | |
| file_path | Yes | |
| start_slide | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| total_slides | Yes |
TDQS
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.
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.
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.
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.
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.
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_svgARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | 읽을 .svg 파일 경로 |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| width | Yes | |
| height | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| view_box | Yes | |
| file_path | Yes | |
| description | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| text_content | Yes | |
| element_counts | 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, 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.
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.
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.
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.
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.
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.
7 tool updates
v0.1.0- First observed
analyze_folder_structure - First observed
list_supported_files - First observed
read_docx - First observed
read_image - First observed
read_pdf - First observed
read_pptx - First observed
read_svg
TDQS
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.
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.
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.
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
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
Agent-native document parsing: PDF, scans and FR/EU invoices to structured JSON or Markdown.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Securely search and manage workspace context files for AI agents and teams.
Generate and read PDFs for AI agents: a generate_pdf and a read_pdf tool, priced per document.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables 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.-
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to process files locally — OCR images, extract text from PDFs and DOCX, and describe images using local vision models, all without sending data to external services.-
- AlicenseNot gradedqualityBmaintenanceEnables 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
- 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-
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/skaosqkf0-del/MCP_test'
If you have feedback or need assistance with the MCP directory API, please join our Discord server