file-insight-mcp
ファイル分析MCP (file-insight-mcp)
指定されたフォルダ内の非構造化ドキュメントを読み取って構造を分析し、ドキュメント別の要約とフォルダ全体の要約レポートを作成する個人用ローカルMCPサーバーである。
このパッケージの
data/sample_docs/内のドキュメントはすべてデモ用に作成された合成データである。
基盤となる参考
サーバー構造(FastMCP、stdio、複数MCPサーバー構成): https://github.com/kyopark2014/mcp
ハーネス規約(段階的なstage/next_actions、根拠アンカー、承認境界): 同系列の
personal-meeting-mcp-trainingプロジェクトで確立した方式を再利用ハーネスエンジニアリング原則リスト: https://github.com/walkinglabs/awesome-harness-engineering (コンテキスト予算、事前承認フック、決定論的eval、静的セキュリティスキャナーの項目を このプロジェクトの規模に合わせて選別適用)
MCP Python SDK: https://github.com/modelcontextprotocol/python-sdk
Related MCP server: file-analyzer
このサーバーが行うこと
固定された対象フォルダ(
data/sample_docs/)の構造をスキャンする。許可された拡張子(
.txt .md .csv .log)のドキュメントのみを読み取る。ドキュメントから目次(見出し構造)、日付・数値・主要用語の候補をルールベースで抽出する。
ドキュメント全体を結合した要約プロンプトを作成する。要約自体はホストLLM(Claude/Codex)が 作成し、このMCPはLLM APIを呼び出さない。
作成された要約レポートの構造を検証し、言及されたファイル名が実際に存在するか照合する。
ユーザーが明示的に承認した後にのみレポートをファイルとして保存する。
クイックスタート
必須環境: Python 3.11以上、uv
uv sync --extra devインストール後、下記の検証節の4つのコマンドをすべてパスすることを確認する。
MCP Inspectorでツールを目視確認するには:
uv run mcp dev src/file_insight_mcp/server.pyプロジェクト構造
ドメインロジックとツール規約を分離し、検証ルールを変更するときにツール階層に触れないようにする。
パス | 役割 |
| パス安全性チェック、拡張子allowlist、サイズ・項目数上限 |
| フォルダスキャン、ドキュメント読み取り、レポート構造検証、承認ベース保存 |
| 目次・日付・数値・主要用語の抽出 (ルールベース、決定論的) |
| 要約に言及されたファイル名の照合 (助言的チェック) |
| ツール規約の共通要素 — |
| MCPツール・リソース・プロンプト登録 (ハーネス階層) |
| evalケースのパス式・判定・変数置換の純粋ロジック |
| 決定論的リグレッションケース (コードではなくデータ) |
| ケースを実際のMCPプロトコルで実行するランナー |
| STDIO起動・スキーマ・ハーネス規約スモークテスト |
| 配布前の静的チェック (クレデンシャル・危険な呼び出し・ツールコメント) |
| ドメイン関数のユニットテスト (サーバー起動なしで実行) |
推奨フロー
SCAN → LIST → READ → EXTRACT → DRAFT → CHECK → PREVIEW → [사용자 승인] → SAVED段階 | Tool | 読み書き | 役割 |
SCAN |
| 読み取り | 対象フォルダ構造・拡張子別の数・許可可否 |
LIST |
| 読み取り | 実際に読み取れるドキュメントのリスト |
READ |
| 読み取り | 原文の参照。行範囲の指定と |
EXTRACT |
| 読み取り | 目次(見出し/番号付け)構造の抽出 |
EXTRACT |
| 読み取り | 日付・数値・頻度ベースの主要用語候補の抽出 |
DRAFT |
| 読み取り | ドキュメント全体 + 標準レポート形式を結合したプロンプト生成 |
CHECK |
| 読み取り | 構造検証。 |
CHECK |
| 読み取り | 要約に言及されたファイル名が実際に存在するか照合 (助言、保存を妨げない) |
PREVIEW |
| 読み取り | 既存の保存版との差分確認 |
PREVIEW |
| 読み取り | 検証・diffをまとめて表示し、承認トークンを発行 |
SAVED |
| 書き込み | 承認トークンが一致する場合のみ保存 (唯一の書き込みツール) |
OBSERVE |
| 読み取り | 保存されたレポートのリスト |
OBSERVE |
| 読み取り | 保存監査ログの照会 |
リソースとプロンプト
種類 | URIまたは名前 | 役割 |
Resource |
| ドキュメント原文 |
Resource |
| 保存された要約レポート |
Prompt |
| スキャンから保存承認までの分析ワークフロー |
ハーネス設計
このサーバーは機能だけでなく、モデルがツールを使う方法も設計対象としている。
すべての応答に
stageとnext_actionsがあり、モデルが応答だけを見て次のツールを 選ぶ。blocking: trueは「この段階をスキップしないでください」という案内ヒントである。実際に 保存を妨げるのは構造検証と承認トークンであり、ヒントがその役割を代行することはない。エラーは
ToolFailureで原因コード・復旧方法・選択可能な値を一緒に返す。 モデルが再度問い合わせずに自分で回復できるようにすることが目的である。引数スキーマはフラットに保つ(
{"relative_path": "..."})。Pydanticモデルを 引数型として使うと{"params": {...}}のようにネストされ、呼び出し形式が変わる。戻り値はPydanticモデルなので
outputSchemaが自動的に生成される。すべてのツールに
readOnlyHint/destructiveHintを付け、ホストが書き込みツールに 異なる承認UIを表示できるようにする。確実なチェック(構造)のみ保存を妨げ、ヒューリスティックなチェック(ファイル名照合)は警告としてのみ通知する。
コンテキスト予算
「コンテキストウィンドウは捨てる場所ではなく作業メモリの予算」という原則に従い、 すべてのツールは応答サイズに明示的な上限を設けている。
scan_folder_structure:MAX_SCAN_ENTRIES(500)を超えるとtruncated: trueで 通知して切り詰める。read_document:MAX_FILE_BYTES(200KB)を超えるファイルは全体を読み取らず、read_document_chunkで一部のみ読み取るようにエラーで案内する。extract_key_terms:max_termsで分類別の項目数を制限する。preview_save_report:include_preview=Falseがデフォルト値なので、すでに保持している ドラフトを再度応答に含めない。含める必要がある場合のみmax_preview_charsで長さを 制限する。harness.truncate()/harness.number_lines(): 切り詰めの有無と引用アンカー(行 番号)を常に明示し、モデルが「これが全体なのか一部なのか」を推測しないようにする。
安全境界
サーバーは
security.TARGET_DIR(data/sample_docs/)の1つだけを扱う。..、絶対パス、 ドライブ文字、シンボリックリンクでもその外側にアクセスできない (security.safe_relative_path)。拡張子allowlist(
.txt .md .csv .log)外のファイルは読み取らない。実行/スクリプト 拡張子は対象から常に除外される。ファイルサイズが
MAX_FILE_BYTES(200KB)を超えると全体を読み取らず、エラーで案内する。名前が
.で始まる隠しファイル・フォルダはスキャンから除外する。書き込みツールは
save_approved_reportの1つだけで、preview_save_reportが発行した (report_id、本文)ハッシュトークンが一致する場合のみ動作する。このサーバーはドキュメントを読み取るだけである。
eval/exec/subprocessのようなコード・シェル実行 呼び出しがソースに入るとscripts/validate_package.pyが失敗する。
検証
uv run pytest -q
uv run python scripts/smoke_stdio.py
uv run python scripts/run_evals.py
uv run python scripts/validate_package.py4つのコマンドの役割がそれぞれ異なるため、すべてパスさせる必要がある。
コマンド | 検査範囲 | サーバー起動 |
|
| しない |
| ツール登録・スキーマの平坦性・コメント・エラーメッセージ規約 | する |
|
| する |
| クレデンシャル漏洩、危険な呼び出し、ツールコメントの静的チェック | しない |
run_evals.py には、承認トークンが正しい場合と間違っている場合に保存がそれぞれ成功・拒否されるかまで
含めた全体の保存フローが入っている。バグを修正するたびに、そのバグを再現するケースを
evals/cases.jsonl に1行追加する。ケースの文法は evals/README.md を参照。
他のフォルダを分析したい場合
このプロジェクトは安全性のため、対象フォルダを src/file_insight_mcp/security.py の
TARGET_DIR(パッケージ内の data/sample_docs/)に固定している。実際の業務フォルダを
分析するには:
TARGET_DIRを任意の絶対パスに変更するか、環境変数で注入するように修正する。そのフォルダに実際にある拡張子を
ALLOWED_EXTENSIONSに反映する。機密性の高いサブフォルダ(認証情報、個人情報など)がないか先に確認する。
Claude Desktop接続
config/claude_desktop_config.example.json の ABSOLUTE_PROJECT_PATH をこのフォルダの
絶対パスに置き換えた後、Claude Desktop設定に反映する。アプリを完全に終了してから
再度実行する必要がある。
設計原則
MCPは別のLLM APIを呼び出さない。ClaudeまたはCodexが要約文を作成し、 このMCPは原文・構造・検証・保存を担当する。
ドキュメントで確認されていないファイル名・数値・日付を作り出さず、根拠チェッカーが 機械的に照合する。
最終保存はプレビューで発行された承認トークンとユーザーの明示的承認の両方が 必要である。
ドメインロジック(
core、outline、grounding)とツール規約(server、harness、security)を分離する。
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 Servers
- AlicenseNot gradedqualityDmaintenanceEnables real-time indexing and semantic search of local documents (PDF, Word, text, Markdown, RTF) using vector embeddings and local LLMs. Monitors folders for changes and provides natural language search capabilities through Claude Desktop integration.22MIT
- 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.9
- AlicenseAqualityCmaintenanceEnables reading and extracting text from local documents (PDF, Word, Excel, PowerPoint, HWP, Markdown, CSV, etc.) without network access, and provides approval-gated summary saving and file organization.11MIT
- FlicenseAqualityCmaintenanceEnables local analysis of unstructured documents (PDF, DOCX, PPTX, SVG, PNG) by extracting text and structure with citation anchors, and verifies summaries against source material before a human approves saving a report.9
Related MCP Connectors
Convert PDF bank statements into structured transactions, accounts, and balances.
Turn any PDF into structured JSON via AI + OCR: invoices, bank statements, contracts.
LLM chat, text summarization and AI image generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jm333-B/temp_mcp_server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server