Skip to main content
Glama
koraynar

doc-extract-mcp

doc-extract-mcp

LLM(대형 언어 모델)에 구조화된 데이터 추출 작업을 위한 결정적 문서 도구를 제공하는 MCP(Model Context Protocol) 서버입니다. LLM이 읽기와 추출 추론을 담당하며, 이 서버는 언어 모델에 맡기면 안 되는 부분 — 신 있는 파일 접근, 파싱, 청크, JSON Schema 검증, 안전한 파일 출력 — 을 제공합니다.

Koray Nar가 구축 중인 AI 문서 자동화 작업을 위한 포트폴리오 프로젝트로 제작되었습니다. — 목표 사협은 지저분한 PDFs(구매 주문서, 인보이스, 보과서)를 스키마 검증된 JSON으로 변환하는 것입니다. 공개 포트폴리오의 일부로 출計되었으며, Claude Code와 Claude Desktop, 그리고 기타다른 모든 MCP 클라이언트와 함께 사용 을 수 있습니다.

이♀

추출 playwright는 예측 가한 지점에서 실패합니다. — фай일 내용을 환각하거나, 긴 문서를 놓치거나, 목표 스키마와 거이 비슷한 JSON를 조용이 만들은 혹, 출력을 아니 기대는 않습니다. 이 서버는 이러한 실패 요인을 제거합니다.

  • 파일 접근은 허용된 트 한개(DOC_EXTRACT_ROOT)로 제한됩니다.

  • PDF 텍스트트에는 명시적 --- page N --- 마커서가 불어 있어, "page 3"와 인용은 실주로 3 page를 기리킵니다.

  • 긴 문서는 오버플되지 않게 계산되며 오버lap과 page 힌트와 함께 청크됩니다.

  • 추출된 JSON은 JSON Schema(Draft 2020-12)를 대조하여 검증되며 모든 오류가 JSON Pointer 경로와 함께 보고됩니다 — 첫 번째만이 아니라모든, 따라서 모델이 모든 오류를 한 번에 수정할 수 있습니다.

  • (JSON 또는 CSV) 출력은 서버가 작성을 합니다. 이 역시 중국 럼— 파일 저장 내용의 patent — 내에서 이루어지며, 행/바이 헤수가 포함됩니다.

Related MCP server: file-analyzer

도구

도구

인자

설지

list_documents

directory, glob *

허용된 트안의 디렉터리에서 파일을 크기와 수정시간과 함께 나열합니다. **/*. 같은 재귀 glob 패턴을 지정합니다. 패턴은 relative NJ일 되어 $..$ 이 들아가지 못하며, 루트 밖으로 해석된 매치는 자동으로 제와합니다.

read_document

path, pages=''

문서의 텍스트를 변환합니다. .pdf는 pypdf로 발생하며 --- page N --- 마커와 선택 1-beam 페이지('3', '1-5', '1-3,7')의 인용이 저장되어 있습니다. .txt/.md/.json은 직접 읽고, .csv는 정렬된 텍스트 테이블 형태로 나타냅니다. 지원하지 않는 타입은 명확한 오류를 보여줍니다.

document_info

path

전체 내용 없이 메타데이터를 제공합니다: 타입, 크기, 수정시간, PDF는 페이지 수와 PDF 메타데이터, 텟스트로 파일은 줄 수를 포함합니다.

문자_문서

path, max_len=4000, overlap=200

문서를 순서가 있는 겹끼는 청크로 나눕니다. 각 청크에는 인덱스, 시작 오프셋, 그리고 PDF에 disambiguation 포함되는 page hint가 포함됩니다.

validate_json

data, json_schema

JSON 스트링을 JSON Schema(Draft 2020-12)에 대해 검증합니다. Draft202012Validator.iter_errors 결과의 모든 오류를 JSON Pointer 경로가 붙어 내보냅니다.

save_structured

path, data, format='json'|'csv'

추출한 데이터 파일을 허용된 루트 안에 씁니다. CSV는 평평 객체 JSON 배열을 예상합니다. 작성된 경로, 행 수, 바이트 수를 반환합니다.

모든 경로 인자는 허용된 루트를 벗어나면 거부됩니다 (path traversal로부터 가드). glob_pattern 동일하게 제한됩니다: 절대 경로 패턴과 ..을 포함하는 패턴은 거부되고, 외로 해석되는 매치(예: symlink에 의해)는 목록에서 조용히 내어집니다. 가드 실패는 MCP 도구 오로로 승출되어, 호출한 모델이 마스킹된 일반화 오류가 아닌 실주 원인을 볼 수 있습니다.

시작하기

Python 3.11+ 및 uv가 필요합니다.

git clone https://github.com/koraynar/doc-extract-mcp.git
cd doc-extract-mcp
uv venv
uv pip install -e .

Standalone (stdio) 실행:

DOC_EXTRACT_ROOT=/path/to/your/documents uv run doc-extract-mcp

Claude Code

claude mcp add doc-extract --env DOC_EXTRACT_ROOT=/path/to/your/documents \
  -- uv run --directory /absolute/path/to/doc-extract-mcp doc-extract-mcp

Claude Desktop

claude_desktop_config.json에 다음을 추가합니다:

{
  "mcpServers": {
    "doc-extract": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/doc-extract-mcp",
        "doc-extract-mcp"
      ],
      "env": {
        "DOC_EXTRACT_ROOT": "/path/to/your/documents"
      }
    }
  }
}

DOC_EXTRACT_ROOT는 지정되지 않으면 서버의 작업 디렉터리를 기본으로 사용합니다. 문서 파일이 있는 폴더로 설정하면 그 안만 읽거나 쓸 수 있습니다.

일반 작업의 흐름

  1. list_documents(".", "*.pdf") — 인수서 등을 찾습니다.

  2. document_info("invoice.pdf") — 페이지 수를 확인합니다.

  3. read_document("invoice.pdf", "1-3") 또는 chunk_document(...) — 텍스트를 읽습니다.

  4. LLM이 필드를 JSON으로 구성합니다.

  5. validate_json(data, json_schema) — 보고된 모든 오류를 수정하고 다시 검증합니다.

  6. save_structured("out/invoice.json", data, "json") — 결과를 저장합니다.

한계 (솔직히)

  • 텍스트 기반 PDF만 지원합니다. 추출은 pypdf를 사용하며, 스캔 또는 이미지 전용 PDF의 텍스트는 비어 있습니다. OCR은 없습니다.

  • 추출 품질은 달라질 수 있습니다 PDF가 만들어진 방식에 따라 다릅니다. 복잡한 위젯(복층이 있는, 표 붙)는 읽는 순서가 완전하지 않을 수 있습니다. 이는 상속받은 pypdf의 특성입니다.

  • .docx / .xlsx 지원은 없습니다. 지원되는 파일의 확장자는 .pdf, .txt, .md, .csv, .json입니다.

  • 서버는 추출의 추론을 하지 않습니다. 인보이스의 총액을 대신 찾아주지 않습니다. 단지 그 작업을 실제 텍스트에서 수행하고 결과가 정의된 스키마대로 나오는지 보장합니다.

  • 이 프로젝트는 제가 구축 중인 AI 문서 자동화 작업을 위한 실제 도구이며, 포트폴리오의 일부로 게시되었습니다. 새롭게 만들어진 도구여서 아직 실마리는 많지 않습니다. 테스트와 경로 제한 가드는 갖추었지만 그 부가 하드닝되지는 않았습니다. 민감한 디렉토리에 연결해서 사용하기 전에 검토하세요.

개발

uv venv
uv pip install -e '.[dev]'
uv run pytest

테스트 스위트는 두 페이지짜리 아주 작은 PDF 픽스처(추가 의존성 없이 손으로 작성해 만든 미니 PDF)를 메모리상으로 생성하여, 전체 6가지 도구와 경로 트래버스 가드, glob 패턴 제한(심볼릭 링크 우회를 포함), 페이지 범위 오류, 다중 오류 스키마 검증, CSV 반올림, 그리고 MCP 서버 객체를 통한 도구 등록 및 오류 전달까지 전부 확인합니다.

라이선스

MIT © 2026 Koray Nar

Available Tools

6 tools
chunk_documentA

Split a document's text into ordered, overlapping chunks.

Useful for long documents that do not fit one context read. For PDFs the text keeps its '--- page N ---' markers and each chunk carries a 'page_hint' (the page active at the start of the chunk); for other types 'page_hint' is null.

Args: path: File path inside the allowed root. max_chars: Maximum characters per chunk (default 4000). overlap: Characters repeated between consecutive chunks (default 200, must be smaller than max_chars).

Returns a list of {index, start_char, page_hint, text} in document order.

NameRequiredDescriptionDefault
pathYes
overlapNo
max_charsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description must carry the full behavioral burden. It discloses PDF-specific page markers and page_hint behavior, the overlap constraint (must be smaller than max_chars), and the return structure. It could note that it is read-only, but that is implied. Overall it is transparent about key behaviors without contradictions.

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?

The description is well-structured with a purpose sentence, a usage note, a behavior note, an Args section, and a Returns statement. It is lean with no redundant wording and front-loads the core purpose, making it easy for an agent to scan.

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?

The description covers purpose, usage, parameters, behavior, and return format. It even describes the output structure (list of {index, start_char, page_hint, text}) despite an output schema being available. There are no obvious gaps 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully explain the parameters. It does: 'path' is the file path inside the allowed root, 'max_chars' is the maximum chunk size, and 'overlap' repeats characters between chunks, with the constraint that overlap must be smaller than max_chars. This adds significant meaning beyond the bare schema.

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 (split) and resource (document's text), producing ordered, overlapping chunks. It also notes the tool is for long documents that don't fit one context read, implicitly distinguishing it from read_document and other siblings. This is more than adequate for purpose clarity.

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 explicitly says 'Useful for long documents that do not fit one context read,' giving a clear when-to-use scenario. However, it does not name alternative tools or state when not to use it, so it misses the full 5-level guidance of explicit exclusions and named alternatives.

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

document_infoA

Return metadata for a document without reading its full content.

Includes file type, size, and modification time; page count and PDF metadata for PDFs; line count for text-based files.

Args: path: File path inside the allowed root.

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It states what metadata is returned (file type, size, modification time) and notes variations (PDF metadata, line counts for text files), which is helpful. However, it does not mention error conditions (e.g., missing file, insufficient permissions), time-out behavior, or any side effects, leaving some behavioral uncertainty for the agent.

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?

The description is concise and front-loaded: the first sentence states the core purpose, the second lists the main outputs, and the Args section cleanly describes the parameter. Every sentence contributes value with no fluff or redundancy.

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?

The tool is simple (one param) and an output schema exists, so return values are covered externally. The description logically describes the metadata returned and file-type-specific additions. It lacks guidance on edge cases like unsupported file types or empty results, but completeness is adequate for a metadata retrieval tool. A minor gap is not explicitly stating what happens for non-PDF binary files, but the description's inclusive language ('Includes file type...') gives sufficient context.

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?

The schema description coverage is 0%, so the description must add meaning to the single 'path' parameter. It does add the constraint 'File path inside the allowed root', which is valuable. However, it does not specify path format (absolute vs relative), whether directories are valid, or any path syntax details. This is a partial compensation but not comprehensive.

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 verb 'Return' and the resource 'metadata for a document', distinguishing it from sibling tools like read_document (which reads full content) and list_documents (which lists documents). The explicit 'without reading its full content' clarifies the scope and separates it from content-reading tools.

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 implies when to use this tool—when you need metadata rather than content—by explicitly stating it returns metadata and not content. It does not name specific alternatives or exclusions, but the context of the sibling tools and the phrasing 'without reading its full content' gives clear contextual guidance without explicitly saying 'use read_document instead'.

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

list_documentsA

List files in a directory inside the allowed root.

Args: directory: Directory path, relative to the allowed root (use '.' for the root itself) or absolute but inside it. glob_pattern: Filename filter, e.g. '.pdf' or '**/.csv' for recursive matching. Defaults to '*'. Must be relative and must not contain '..'; matching never leaves the allowed root.

Returns a list of {path, name, size_bytes, modified} entries; 'path' is relative to the allowed root and is what other tools accept.

NameRequiredDescriptionDefault
directoryYes
glob_patternNo*

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the read-only nature (listing), the security constraint (never leaving root), and the return format. It doesn't mention permissions or rate limits, but for a listing operation the disclosed traits are adequate.

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 one-sentence summary, parameter explanations, and return details. It's slightly verbose but every sentence provides value, and the critical scoping constraint is front-loaded.

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?

The description covers the operation, parameters, and return contract clearly. It lacks only minor details like sorting order or error behavior, which are not critical for a listing tool. The presence of an output schema (indicated by context) further reduces the need to document return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates. It explains directory (relative or absolute, with '.' for root) and glob_pattern (format, defaults, recursive matching, and security constraints), giving complete meaning beyond the bare schema.

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 action (list files) and resource (directory), with clear scoping to the allowed root. It distinguishes from siblings like read_document (reading content) and document_info (metadata) by focusing on listing directory entries.

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?

It clearly implies usage for listing directory contents and even notes that returned paths are accepted by other tools, guiding workflow. It doesn't explicitly contrast with alternatives or state when not to use, but the context is sufficient for most cases.

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

read_documentA

Read a document and return its text content.

Supports .pdf (extracted per page with '--- page N ---' markers), .txt / .md / .json (read directly), and .csv (rendered as an aligned text table). Other types return a clear error.

Args: path: File path inside the allowed root. pages: Optional 1-indexed page selection for PDFs, e.g. '3', '1-5', or '1-3,7'. Empty string means all pages.

NameRequiredDescriptionDefault
pathYes
pagesNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden, and it excels: PDFs are extracted per page with '--- page N ---' markers, CSV is rendered as an aligned table, and unsupported types error. It also explains the pages argument's 1-indexed syntax and examples, offering far more context than the bare schema.

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?

The description is efficiently structured: a one-sentence summary, a compact list of supported formats, and an Args block that maps directly to the schema. Every sentence adds value, with format details and page syntax front-loaded before parameter specifics.

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?

For a two-parameter read tool with no annotations, the description covers all operational essentials: accepted types, per-format rendering rules, page selection syntax, and error behavior. An output schema exists, so return-value documentation is unnecessary, and nothing an agent needs for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, making the description the sole source of parameter meaning. It defines 'path' as a file path inside the allowed root and explains 'pages' with concrete examples like '3', '1-5', and '1-3,7', plus the default of empty string meaning all pages.

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 opens with a specific verb-resource pair ('Read a document and return its text content'), immediately clarifying the tool's function. It further specifies supported formats and states that other types return an error, which distinguishes it from sibling tools like list_documents or document_info.

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 clear context by enumerating supported file types and noting that unsupported types return a clear error, giving an implicit when-not-to-use. However, it does not explicitly name alternative tools for metadata or chunking tasks, such as document_info or chunk_document, so the guidance relies on inference rather than direct exclusions.

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

save_structuredA

Write extracted data to a file inside the allowed root.

Args: path: Output file path inside the allowed root; parent directories are created as needed. data: The data to write, as a JSON string. For 'csv' it must be a JSON array of flat objects (no nested arrays/objects). format: 'json' (pretty-printed) or 'csv'.

Returns {path, format, rows, bytes}; 'rows' is the row count for csv or the element count when the JSON payload is an array, otherwise null.

NameRequiredDescriptionDefault
dataYes
pathYes
formatNojson

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It does well by disclosing that parent directories are created, CSV data must be flat objects, JSON is pretty-printed, and it specifies the return shape. However, it does not mention overwrite behavior or what happens when a path falls outside the allowed root, which are relevant for a file-writing tool.

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?

The description is compact and well-structured: a one-line purpose statement followed by Args and Returns blocks. Every sentence carries useful information, and there is no filler or repetition of schema fields without added context.

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 no annotations and only a sparse schema, the description covers the essential usage: all parameters are explained, constraints are provided, and the return value is documented, including the rows edge case. The only notable gap is overwrite behavior and error handling for invalid or out-of-root paths, which keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage, so the description must compensate. It fully does: it explains that path is relative to the allowed root, that data is a JSON string with format-specific shape requirements, and that format controls pretty-printing. This adds meaning far beyond the schema's bare names, types, and enum.

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 starts with a clear action: 'Write extracted data to a file inside the allowed root.' It names the resource (file), the action (write), and a key constraint. The sibling tools are all read/list/validation operations, so this write tool is clearly differentiated.

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?

Usage is implied by the verb 'Write extracted data' and by the surrounding sibling tools, but the description never explicitly states when to prefer this tool over alternatives or when not to use it. There is no exclusions or alternative routing, so it relies on the agent inferring that this is the write/save operation among read-only siblings.

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

validate_jsonA

Validate a JSON string against a JSON Schema (Draft 2020-12).

Reports EVERY validation error with a JSON Pointer path, not just the first, so extraction mistakes can be fixed in one pass.

Args: data: The JSON document to validate, as a string. json_schema: The JSON Schema to validate against, as a string.

Returns {valid, error_count, errors:[{pointer, message, validator}]}; 'pointer' is a JSON Pointer into the data ('' means the document root).

NameRequiredDescriptionDefault
dataYes
json_schemaYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

There are no annotations, so the description carries the full burden. It discloses that the tool returns every validation error with JSON Pointer paths, not just the first, and details the exact return structure including the meaning of 'pointer'. It also specifies the schema draft version, providing comprehensive behavioral context.

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?

The description is compact and well-structured: a clear purpose line, a behavioral note, then parameter and return documentation. Every sentence adds value, and the core action is front-loaded, making it easy to scan.

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?

For a tool with two parameters and an output schema, the description is complete. It covers the input formats, the validation behavior, and the output structure, including the meaning of 'pointer'. No critical information is missing, so an agent can call it correctly without further lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description's explanation of 'data' as the JSON document and 'json_schema' as the schema string provides essential semantic meaning beyond the bare parameter names. It fully compensates for the lack of schema 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 states a specific verb ('validate') and resource ('a JSON string against a JSON Schema'), and specifies the schema draft (2020-12). This clearly distinguishes it from the document management siblings, as it describes a validation operation rather than document handling.

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 implies a use case by noting it reports every error 'so extraction mistakes can be fixed in one pass', which guides when to use it. It does not explicitly name alternatives, but the sibling tools are all document-oriented, so the context is sufficient. A slight gap is the absence of explicit 'when not to use' guidance.

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.

  1. 6 tool updatesv0.1.0
    • First observedchunk_document
    • First observeddocument_info
    • First observedlist_documents
    • First observedread_document
    • First observedsave_structured
    • First observedvalidate_json

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool serves a distinct purpose: listing, reading, metadata, chunking, validation, and saving. No overlap; even read_document and chunk_document are clearly differentiated (full content vs. splitting for context). The separation is clean and unambiguous.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (list_documents, read_document, chunk_document, validate_json, save_structured). The exception is document_info, which uses a noun_noun form instead of get_document_info, creating a minor deviation from the otherwise predictable scheme.

Tool Count5/5

Six tools is an appropriate, well-scoped count for a document extraction server. Each tool covers a necessary step in the extraction workflow without redundancy or bloat.

Completeness5/5

The tool set provides a complete lifecycle for document extraction: discovering files (list), retrieving content (read), obtaining metadata (info), handling long documents (chunk), validating structured output (validate), and persisting results (save). No obvious gaps; the scope is tightly defined and fully covered.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables reading entire PDF documents into validated structured JSON, including tables, key-values, and markdown, with read-only extraction tools and layout reconstruction.
    -
  • 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
    B
    maintenance
    Enables agents to deterministically extract structured entities from input payloads and validate or coerce them against JSON schemas, returning a standardized response dossier with execution telemetry. It runs as a zero-dependency MCP server that plugs into Claude Desktop, Cursor, and other MCP clients.
    8
    -