Skip to main content
Glama
file-analysis-mcp

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.

Python 3.11+ MCP read--only tests

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 docs zusammen 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

scan_folder

Gibt die Liste der Zieldateien im Ordner (Pfad/Größe/Änderungsdatum) und die Anzahl je Dateityp zurück

Bei Überschreitung von max_files (Standard 300) wird list_truncated=True gesetzt

analyze_folder_structure

Gibt Baumstruktur inkl. Unterordner, Statistik je Dateityp, Speicherbedarf und Liste der größten Dateien zurück

Nur der Baum ist durch max_files begrenzt (Statistik immer auf Basis aller Dateien)

read_document

Extrahiert den Text aus einem einzelnen pdf/docx/pptx/svg-Dokument

Wird mit max_chars abgeschnitten, als truncated=True gekennzeichnet

read_image_text

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

analyze_folder

Extrahiert alle Zieldateien im Ordner in einem Durchgang und gibt sie als Report zurück (kein mehrfacher Aufruf nötig)

Bei Überschreitung von max_files (Standard 50) wird die Anzahl über skipped_due_to_limit angegeben

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.

  1. 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.)

  2. Fügen Sie den Installationspfad (Standard: C:\Program Files\Tesseract-OCR) zur System-PATH-Variable hinzu.

  3. 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.py

Empfohlener 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 status + next_actions. Je nach Situation (Erfolg/Teilerfolg/leeres Ergebnis usw.) werden das als Nächstes aufzurufende Tool und der Grund konkret genannt

Umsetzbare Fehler

ToolFailure erzwingt Ursachencode + Wiederherstellungsmethode + zulässige Werte. Beispiel: nicht unterstützte Dateiendung → Liste der unterstützten Endungen

Kontext sparen (einzelne Antworten)

read_document/read_image_text/analyze_folder schneiden mit max_chars (pro Datei) ab und kennzeichnen dies mit truncated

Kontext sparen (Guardrails)

scan_folder/analyze_folder_structure/analyze_folder haben eine Obergrenze für die Dateianzahl (max_files), sodass ein einzelner Aufruf auch bei sehr vielen Dateien im Ordner nicht unbegrenzt groß wird

Nützliche Fehler im Kontext behalten

analyze_folder bricht den Batch auch bei einem fehlgeschlagenen Einzelfile nicht ab, sondern protokolliert Erfolg/Fehler je Datei, damit die nächste Entscheidung darauf aufbauen kann

Keine stillen Verluste

Auch bei Überschreitung der Obergrenze werden Dateien nicht heimlich übersprungen; die genaue Anzahl der nicht gelesenen Dateien bleibt über list_truncated/skipped_due_to_limit in der Antwort sichtbar

Tool-Vertrag testen

tests/test_server_contract.py prüft per Code, ob "alle Tools Beschreibung/annotations haben", "das Argument-Schema flach ist", "alle Tools read-only sind" und "die Guardrails tatsächlich funktionieren"

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 von harness.number_lines() ergänzt werden.

  • Speicher-Workflow mit Genehmigungstoken: Da dieser Server keine Dateien schreibt, nicht zutreffend.

Available Tools

5 tools
analyze_folderA
Read-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

NameRequiredDescriptionDefault
max_filesNo이번 호출에서 실제로 추출을 시도할 최대 파일 수(컨텍스트/시간 보호용 상한). 초과분은 시도조차 하지 않고 skipped_due_to_limit로 개수를 알려줍니다.
recursiveNo하위 폴더까지 재귀적으로 탐색할지 여부
extensionsNo필터링할 확장자 목록. 생략하면 pdf/docx/pptx/svg/png 전체를 대상으로 함
folder_pathYes분석할 폴더의 절대 경로
max_chars_per_fileNo파일당 반환할 최대 문자 수(컨텍스트 보호용 절단)

Output Schema

NameRequiredDescription
failedYes
folderYes
statusYesOK 또는 PARTIAL 등 처리 결과 상태
reportsYes
succeededYes
total_filesYes실제로 추출을 시도한 파일 수 (= len(reports))
next_actionsNo
total_matchedYes조건에 맞는 전체 파일 수(상한 적용 전)
skipped_due_to_limitYesmax_files 상한 때문에 시도조차 하지 않은 파일 수
analyze_folder_structureA
Read-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

NameRequiredDescriptionDefault
max_filesNo트리(tree)에 포함할 최대 파일 수(컨텍스트 보호용 상한). 통계(개수/용량 등)는 상한과 무관하게 항상 전체 기준입니다.
extensionsNo필터링할 확장자 목록. 생략하면 pdf/docx/pptx/svg/png 전체를 대상으로 함
folder_pathYes분석할 폴더의 절대 경로

Output Schema

NameRequiredDescription
treeYes
folderYes
statusYesOK 또는 PARTIAL 등 처리 결과 상태
max_depthYes
total_filesYes조건에 맞는 전체 파일 수(통계는 항상 전체 기준)
by_extensionYes
next_actionsNo
largest_filesYes
list_truncatedYes파일이 너무 많아 tree에는 max_files개까지만 반영됐으면 True
total_size_bytesYes
read_documentA
Read-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

NameRequiredDescriptionDefault
file_pathYes읽을 문서의 절대 경로 (pdf, docx, pptx, svg)
max_charsNo반환할 최대 문자 수(컨텍스트 보호용 절단)

Output Schema

NameRequiredDescription
pathYes
textYes
statusYesOK 또는 PARTIAL 등 처리 결과 상태
metadataYes
extensionYes
truncatedYes
next_actionsNo
read_image_textA
Read-onlyIdempotent

PNG 이미지 하나를 OCR로 읽어 텍스트를 추출합니다(Tesseract-OCR 필요).

스크린샷, 스캔한 메모, 다이어그램에 박힌 라벨처럼 이미지 안의 문자를 읽어야 할 때 사용하세요. 순수 그림/사진처럼 텍스트가 없는 이미지는 빈 결과가 나올 수 있습니다(비전 해석이 아니라 OCR이므로 그림 자체의 의미는 파악하지 못합니다).

Returns: ReadImageTextResponse: text에 인식된 문자열이 담깁니다. 결과가 비어 있으면 next_actions에서 그 이유를 안내합니다.

Examples: - 사용: "이 스크린샷에 뭐라고 적혀 있어?" - 사용하지 않음: pdf/docx/pptx/svg 문서 → read_document

NameRequiredDescriptionDefault
file_pathYesOCR로 읽을 PNG 이미지의 절대 경로
max_charsNo반환할 최대 문자 수(컨텍스트 보호용 절단)

Output Schema

NameRequiredDescription
pathYes
textYes
statusYesOK 또는 PARTIAL 등 처리 결과 상태
metadataYes
truncatedYes
next_actionsNo
scan_folderA
Read-onlyIdempotent

폴더 안의 대상 파일(pdf/docx/pptx/svg/png) 목록과 확장자별 개수를 조회합니다.

문서 내용을 읽지 않고 메타데이터(경로/크기/수정일)만 가볍게 훑어보는 도구입니다. 폴더 안에 어떤 파일이 몇 개 있는지 빠르게 확인하고 싶을 때 사용하세요.

Returns: ScanFolderResponse: files[]에 경로/이름/확장자/크기/수정일이 담깁니다. 파일이 max_files보다 많으면 list_truncated=True이고, by_extension의 개수는 상한과 무관하게 항상 전체 매칭 파일 기준입니다.

Examples: - 사용: "이 폴더에 어떤 문서들이 있어?", "pdf 몇 개야?" - 사용하지 않음: 파일 내용까지 요약하고 싶을 때 → analyze_folder - 사용하지 않음: 하위 폴더 구조/통계까지 보고 싶을 때 → analyze_folder_structure

NameRequiredDescriptionDefault
max_filesNo목록에 포함할 최대 파일 수(컨텍스트 보호용 상한). 초과분은 스킵되며 list_truncated=True로 표시됩니다(개수 통계는 항상 전체 기준).
recursiveNo하위 폴더까지 재귀적으로 탐색할지 여부
extensionsNo필터링할 확장자 목록(예: ['.pdf', '.png']). 생략하면 pdf/docx/pptx/svg/png 전체를 대상으로 함
folder_pathYes스캔할 폴더의 절대 경로

Output Schema

NameRequiredDescription
filesYes
folderYes
statusYesOK 또는 PARTIAL 등 처리 결과 상태
total_filesYes실제 반환된 파일 수 (= len(files))
by_extensionYes상한과 무관하게 전체 매칭 파일 기준 확장자별 개수
next_actionsNo
total_matchedYes조건에 맞는 전체 파일 수(상한 적용 전)
list_truncatedYestotal_matched > total_files이면 True. 목록이 잘렸다는 뜻

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedanalyze_folder
    • First observedanalyze_folder_structure
    • First observedread_document
    • First observedread_image_text
    • First observedscan_folder

TDQS

A4.5/5.0

Scored across 5 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides 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.
    3
    5 npm
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables read-only analysis of local unstructured documents by scanning a folder, extracting text and structural metadata, and passing content with truncation and error-awareness to an LLM for summarization.
    9
    1
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    -