file-analysis-mcp
file-analysis-mcp
"Lies alle PDF/DOCX/PPTX/SVG/PNG-Dokumente in diesem Ordner und fasse sie zusammen." Ein persönlicher MCP-Server, mit dem man Claude Code genau diesen einen Satz ausführen lassen kann.
Wenn ein Ordner angegeben wird, öffnet der Server die darin enthaltenen Dokumente, extrahiert nur den Text und gibt ihn unverändert zurück. Zusammenfassen und Interpretieren übernimmt nicht dieser Server, sondern der Claude, der ihn aufruft, im Laufe des Gesprächs – daher funktioniert alles ohne separaten LLM-API-Schlüssel, vollständig privat und lokal.
Inhaltsverzeichnis
Related MCP server: file-analyzer
So funktioniert es in der Praxis
Das Ergebnis einer Anfrage in Claude Code mit einem realen Ordner (ein Ordner mit internen PRD-Dokumenten).
Ich: Fasse die Dokumente im Ordner
docszusammen und analysiere die Dateistruktur
Claude ruft nacheinander analyze_folder_structure → analyze_folder auf und antwortet auf Basis des zurückgegebenen Originaltexts wie folgt.
[analyze_folder_structure] pdf 2개, 총 455KB, 최대 파일 prd.pdf(231KB)
[analyze_folder] 2개 파일 모두 추출 성공 (succeeded: 2, failed: 0)
→ Claude의 요약:
두 문서는 같은 프로젝트("ParameterCheck")의 서로 다른 산출물입니다.
- proposal.pdf: RF솔루션 파트의 CAB 파라미터 검증 자동화 기획서
- prd.pdf: 같은 아이디어의 정식 PRD. 목표는 검증 시간 10분→5분 단축,
MVP는 "파라미터 엑셀 입력 시 집계시트 자동 생성 + 오류 빨강 표시"
공통점: 사람 검토·승인은 항상 최종 단계로 남겨둔다는 원칙이 두 문서 모두에 명시됨.Der Server hat nur den Text übergeben – die obige Zusammenfassung stammt vollständig von Claude. Genau diese Rollentrennung ist das Ziel dieses Projekts.
Schnellstart
# 1) 의존성 설치 (uv 사용)
uv sync --extra dev
# 2) 확인
uv run pytest # 유닛테스트
uv run python scripts/smoke_stdio.py # 실제 MCP 프로토콜로 서버를 띄워보는 스모크 테스트Falls OCR (PNG-Analyse) benötigt wird, muss Tesseract-OCR separat installiert werden – die Anleitung dazu steht weiter unten im Abschnitt Bei Claude Code registrieren. Auch ohne Installation funktionieren die übrigen 4 Tools normal.
Die 5 Tools
Tool | Beschreibung | Guardrail |
| Gibt die Liste der Zieldateien im Ordner (Pfad/Größe/Änderungsdatum) und die Anzahl je Dateityp zurück | Bei Überschreitung von |
| Gibt Baumstruktur inkl. Unterordner, Statistik je Dateityp, Speicherbedarf und Liste der größten Dateien zurück | Nur der Baum ist durch |
| Extrahiert den Text aus einem einzelnen pdf/docx/pptx/svg-Dokument | Wird mit |
| Liest den Text aus einem einzelnen png-Bild per OCR | Wie links + wenn das OCR-Ergebnis leer ist, wird der Grund über next_actions mitgeteilt |
| Extrahiert alle Zieldateien im Ordner in einem Durchgang und gibt sie als Report zurück (kein mehrfacher Aufruf nötig) | Bei Überschreitung von |
Alle Tools sind schreibgeschützt und verändern oder löschen keine Dateien. Selbst wenn das Limit (max_files) erreicht wird, werden Dateien nicht stillschweigend weggelassen, sondern die Anzahl der nicht gelesenen Dateien bleibt in der Antwort sichtbar; außerdem wird status auf PARTIAL gesetzt, sodass dieser Umstand sofort erkennbar ist.
Bei Claude Code registrieren
OCR-Engine installieren (nur für PNG-Analyse nötig)
pytesseract ist lediglich die Python-Anbindung an die Tesseract-OCR-Engine; die Engine selbst muss separat installiert werden.
Laden Sie das UB-Mannheim Tesseract-Installationspaket herunter und installieren Sie es unter Windows. (Falls Koreanisch erkannt werden soll, aktivieren Sie bei der Installation unter "Additional language data" die Option Korean.)
Fügen Sie den Installationspfad (Standard:
C:\Program Files\Tesseract-OCR) zur System-PATH-Variable hinzu.Prüfen Sie die Installation mit
tesseract --version.
Server registrieren
In diesem Repository liegt bereits eine .mcp.json im Root-Verzeichnis bereit. Wenn Sie Claude Code im Ordner file-analysis-mcp (oder einem übergeordneten Ordner) starten, wird sie automatisch erkannt. Prüfen Sie nach dem Neustart über den Befehl /mcp oder in der Tool-Liste, ob die 5 Tools von file-analysis sichtbar sind.
Zur manuellen Registrierung:
claude mcp add file-analysis -- uv --directory "C:\Users\20223\Desktop\file-analysis-mcp" run python src/file_analysis_mcp/server.pyEmpfohlener Ablauf: Zuerst die Struktur mit analyze_folder_structure erfassen → dann den gesamten Dokumenttext mit analyze_folder in einem Durchgang extrahieren → Claude fasst auf Basis des extrahierten Texts zusammen.
Projektstruktur
file-analysis-mcp/
├── pyproject.toml
├── .mcp.json
├── src/file_analysis_mcp/
│ ├── server.py # FastMCP 서버, 도구 5개
│ ├── harness.py # 응답/오류 계약 (BaseResponse, ToolFailure 등)
│ ├── scanner.py # 폴더 스캔/구조 분석
│ └── extractors/ # pdf/docx/pptx/svg/image 텍스트 추출기
├── scripts/smoke_stdio.py
├── tests/
│ ├── test_scanner.py # 도메인 로직(순수 함수) 유닛테스트
│ ├── test_extractors.py # 포맷별 추출기 유닛테스트
│ └── test_server_contract.py # 하네스 규약(도구 계약) 테스트
└── data/sample_docs/ # 테스트용 샘플 문서Designprinzip: Harness Engineering
Dieser Server priorisiert nicht "mehr Funktionen", sondern dass das Modell allein anhand der Antwort weiß, was es als Nächstes tun soll. Aus den Prinzipien, die in awesome-harness-engineering vorgestellt werden, wurden nur diejenigen gezielt übernommen, die zum Charakter dieses Projekts (lokal, Einzelbenutzer, schreibgeschützt) tatsächlich passen. (OpenTelemetry-Observability, Prompt-Injection-Sandboxing, Scope-Approval-Gating wie bei mcp-guardian usw. sind für Mehrbenutzer- und langlaufende Agenten gedacht und wären für ein persönliches Tool dieser Größenordnung übertrieben – daher nicht angewendet.)
Angewendet | Form in diesem Projekt |
Klare Tool-Grenzen | In den Tool-Docstrings werden Zweck + Returns + Beispiele für "verwenden / nicht verwenden" angegeben, damit das Modell aus den 5 Tools das richtige auswählt |
Nächste Aktion anleiten | Jede Antwort enthält |
Umsetzbare Fehler |
|
Kontext sparen (einzelne Antworten) |
|
Kontext sparen (Guardrails) |
|
Nützliche Fehler im Kontext behalten |
|
Keine stillen Verluste | Auch bei Überschreitung der Obergrenze werden Dateien nicht heimlich übersprungen; die genaue Anzahl der nicht gelesenen Dateien bleibt über |
Tool-Vertrag testen |
|
Bewusst nicht angewendet
Zusammenfassungs-/Grounding-Funktion: Da dieser Server nur "extrahieren" soll (Zusammenfassen ist Aufgabe des Host-Modells), nicht zutreffend.
Zeilennummern-Zitatanker (
L12 | ...): Ohne ein separates Tool zur Verifikation der Zitatgrundlage würde der Text nur unübersichtlich – daher nicht angewendet. Falls nötig, kann dies durch Wiederverwendung vonharness.number_lines()ergänzt werden.Speicher-Workflow mit Genehmigungstoken: Da dieser Server keine Dateien schreibt, nicht zutreffend.
Available Tools
5 toolsanalyze_folderARead-onlyIdempotent
폴더 안의 모든 대상 파일(pdf/docx/pptx/svg/png)을 한 번에 추출해 리포트로 반환합니다.
파일마다 read_document/read_image_text를 따로 호출하지 않아도 되는 배치 도구입니다. 한 파일이 실패해도 나머지 파일 처리는 계속되며, 실패 이유는 파일별로 남습니다. 파일 수가 max_files를 넘으면 앞쪽부터 max_files개만 처리하고, 넘겨받지 못한 개수는 skipped_due_to_limit로 투명하게 알려줍니다(조용히 누락되지 않습니다).
Returns:
AnalyzeFolderResponse: reports[]의 각 항목은 status(OK/ERROR)와 함께
text 또는 error를 담습니다. status가 PARTIAL이면 일부 실패했거나(failed>0)
상한 때문에 스킵된 파일(skipped_due_to_limit>0)이 있다는 뜻입니다.
Examples: - 사용: "이 폴더 문서들 다 요약해줘", "폴더 구조 분석하고 내용도 정리해줘" - 사용하지 않음: 파일 목록만 필요할 때 → scan_folder - 사용하지 않음: 특정 파일 하나만 자세히 → read_document / read_image_text
| Name | Required | Description | Default |
|---|---|---|---|
| max_files | No | 이번 호출에서 실제로 추출을 시도할 최대 파일 수(컨텍스트/시간 보호용 상한). 초과분은 시도조차 하지 않고 skipped_due_to_limit로 개수를 알려줍니다. | |
| recursive | No | 하위 폴더까지 재귀적으로 탐색할지 여부 | |
| extensions | No | 필터링할 확장자 목록. 생략하면 pdf/docx/pptx/svg/png 전체를 대상으로 함 | |
| folder_path | Yes | 분석할 폴더의 절대 경로 | |
| max_chars_per_file | No | 파일당 반환할 최대 문자 수(컨텍스트 보호용 절단) |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | Yes | |
| folder | Yes | |
| status | Yes | OK 또는 PARTIAL 등 처리 결과 상태 |
| reports | Yes | |
| succeeded | Yes | |
| total_files | Yes | 실제로 추출을 시도한 파일 수 (= len(reports)) |
| next_actions | No | |
| total_matched | Yes | 조건에 맞는 전체 파일 수(상한 적용 전) |
| skipped_due_to_limit | Yes | max_files 상한 때문에 시도조차 하지 않은 파일 수 |
analyze_folder_structureARead-onlyIdempotent
폴더의 하위 디렉터리 트리와 확장자별 통계, 용량, 최대 파일을 분석합니다.
scan_folder보다 한 단계 더 깊은 "구조" 파악용 도구입니다. 폴더가 어떻게 구성돼 있는지(하위 폴더별 파일 분포, 가장 큰 파일 등)를 먼저 감 잡고 싶을 때 사용하세요.
Returns:
FolderStructureResponse: tree는 {"하위폴더명": {...}, "_files": [...]}
형태의 중첩 딕셔너리입니다. 파일이 max_files보다 많으면 tree에는 앞쪽
max_files개만 반영되고 list_truncated=True가 되지만, total_files/
by_extension/total_size_bytes 등 통계는 항상 전체 파일 기준입니다.
Examples: - 사용: "이 폴더 구조 좀 분석해줘", "가장 큰 파일이 뭐야?" - 사용하지 않음: 파일 목록만 빠르게 보고 싶을 때 → scan_folder
| Name | Required | Description | Default |
|---|---|---|---|
| max_files | No | 트리(tree)에 포함할 최대 파일 수(컨텍스트 보호용 상한). 통계(개수/용량 등)는 상한과 무관하게 항상 전체 기준입니다. | |
| extensions | No | 필터링할 확장자 목록. 생략하면 pdf/docx/pptx/svg/png 전체를 대상으로 함 | |
| folder_path | Yes | 분석할 폴더의 절대 경로 |
Output Schema
| Name | Required | Description |
|---|---|---|
| tree | Yes | |
| folder | Yes | |
| status | Yes | OK 또는 PARTIAL 등 처리 결과 상태 |
| max_depth | Yes | |
| total_files | Yes | 조건에 맞는 전체 파일 수(통계는 항상 전체 기준) |
| by_extension | Yes | |
| next_actions | No | |
| largest_files | Yes | |
| list_truncated | Yes | 파일이 너무 많아 tree에는 max_files개까지만 반영됐으면 True |
| total_size_bytes | Yes |
read_documentARead-onlyIdempotent
문서 파일(pdf/docx/pptx/svg) 하나의 텍스트를 추출합니다. 요약은 하지 않습니다.
scan_folder/analyze_folder에서 찾은 파일 중 하나를 더 자세히 보고 싶을 때, 또는 analyze_folder의 일괄 요약이 잘렸을 때(truncated=True) 이어서 읽을 때 씁니다.
Returns:
ReadDocumentResponse: text에 원문(잘렸으면 앞부분)이 담깁니다.
truncated=True면 max_chars를 늘려 다시 호출해 나머지를 볼 수 있습니다.
Examples: - 사용: "이 pdf 파일 내용 좀 자세히 보여줘" - 사용하지 않음: png 이미지 → read_image_text - 사용하지 않음: 폴더 전체를 한 번에 훑고 싶을 때 → analyze_folder
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | 읽을 문서의 절대 경로 (pdf, docx, pptx, svg) | |
| max_chars | No | 반환할 최대 문자 수(컨텍스트 보호용 절단) |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| text | Yes | |
| status | Yes | OK 또는 PARTIAL 등 처리 결과 상태 |
| metadata | Yes | |
| extension | Yes | |
| truncated | Yes | |
| next_actions | No |
read_image_textARead-onlyIdempotent
PNG 이미지 하나를 OCR로 읽어 텍스트를 추출합니다(Tesseract-OCR 필요).
스크린샷, 스캔한 메모, 다이어그램에 박힌 라벨처럼 이미지 안의 문자를 읽어야 할 때 사용하세요. 순수 그림/사진처럼 텍스트가 없는 이미지는 빈 결과가 나올 수 있습니다(비전 해석이 아니라 OCR이므로 그림 자체의 의미는 파악하지 못합니다).
Returns:
ReadImageTextResponse: text에 인식된 문자열이 담깁니다. 결과가 비어
있으면 next_actions에서 그 이유를 안내합니다.
Examples: - 사용: "이 스크린샷에 뭐라고 적혀 있어?" - 사용하지 않음: pdf/docx/pptx/svg 문서 → read_document
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | OCR로 읽을 PNG 이미지의 절대 경로 | |
| max_chars | No | 반환할 최대 문자 수(컨텍스트 보호용 절단) |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| text | Yes | |
| status | Yes | OK 또는 PARTIAL 등 처리 결과 상태 |
| metadata | Yes | |
| truncated | Yes | |
| next_actions | No |
scan_folderARead-onlyIdempotent
폴더 안의 대상 파일(pdf/docx/pptx/svg/png) 목록과 확장자별 개수를 조회합니다.
문서 내용을 읽지 않고 메타데이터(경로/크기/수정일)만 가볍게 훑어보는 도구입니다. 폴더 안에 어떤 파일이 몇 개 있는지 빠르게 확인하고 싶을 때 사용하세요.
Returns:
ScanFolderResponse: files[]에 경로/이름/확장자/크기/수정일이 담깁니다.
파일이 max_files보다 많으면 list_truncated=True이고, by_extension의
개수는 상한과 무관하게 항상 전체 매칭 파일 기준입니다.
Examples: - 사용: "이 폴더에 어떤 문서들이 있어?", "pdf 몇 개야?" - 사용하지 않음: 파일 내용까지 요약하고 싶을 때 → analyze_folder - 사용하지 않음: 하위 폴더 구조/통계까지 보고 싶을 때 → analyze_folder_structure
| Name | Required | Description | Default |
|---|---|---|---|
| max_files | No | 목록에 포함할 최대 파일 수(컨텍스트 보호용 상한). 초과분은 스킵되며 list_truncated=True로 표시됩니다(개수 통계는 항상 전체 기준). | |
| recursive | No | 하위 폴더까지 재귀적으로 탐색할지 여부 | |
| extensions | No | 필터링할 확장자 목록(예: ['.pdf', '.png']). 생략하면 pdf/docx/pptx/svg/png 전체를 대상으로 함 | |
| folder_path | Yes | 스캔할 폴더의 절대 경로 |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| folder | Yes | |
| status | Yes | OK 또는 PARTIAL 등 처리 결과 상태 |
| total_files | Yes | 실제 반환된 파일 수 (= len(files)) |
| by_extension | Yes | 상한과 무관하게 전체 매칭 파일 기준 확장자별 개수 |
| next_actions | No | |
| total_matched | Yes | 조건에 맞는 전체 파일 수(상한 적용 전) |
| list_truncated | Yes | total_matched > total_files이면 True. 목록이 잘렸다는 뜻 |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
analyze_folder - First observed
analyze_folder_structure - First observed
read_document - First observed
read_image_text - First observed
scan_folder
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: read_document handles individual text documents, scan_folder lists metadata, analyze_folder_structure provides hierarchical stats, read_image_text does OCR, and analyze_folder batch-processes all files. Descriptions explicitly state what not to use each tool for, reinforcing boundaries.
All tool names follow a consistent snake_case verb_noun pattern (read_document, scan_folder, analyze_folder_structure, read_image_text, analyze_folder). The verbs are distinct and descriptive, and the pattern is uniform across the set.
With 5 tools, the server is well-scoped for file and folder analysis. Each tool covers a distinct aspect (single read, metadata scan, structure analysis, OCR, batch processing) without redundancy or missing essentials, making the count ideal for its purpose.
The tool surface covers the full lifecycle of file analysis: listing, detailed reading (both text and OCR), structural analysis, and batch processing. Error handling and truncation are addressed. No obvious gaps for the stated domain, such as missing file deletion or modification, which are out of scope.
Maintenance
Related MCP Connectors
Read and search folders on your own computer with explicit consent. Files are never uploaded.
Convert PDF, Word, Excel and scanned documents to Markdown, tables and RAG chunks. OCR.
Converts PDF, scans, DOCX, XLSX and PPTX to Markdown with tables and page-aware RAG chunks.
Safe folder access for ChatGPT and Claude: read, write and search files, risky tools opt-in.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides LLMs with secure, read-only access to local documentation by scanning directories, extracting content from PDF, DOCX, Markdown, and text files, and performing keyword searches.35 npmMIT
- 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-
- FlicenseNot gradedqualityCmaintenanceEnables local, read-only extraction of text and structure from PDF, DOCX, PPTX, SVG, and PNG files, including OCR for images, directory tree and metadata reporting, with strict path isolation and audit logging.-
- FlicenseNot gradedqualityCmaintenanceEnables local folder analysis of unstructured documents (PDF, DOCX, PPTX, TXT, SVG, PNG, CSV, XLSX) by extracting structure, reading content, and generating reports, with a strict approval gate before any save operation.-