Skip to main content
Glama

Install and Go. One command, single binary. Your AI reads any document — PDF, text, Markdown, DOCX, images.

MCP server for multi-format document access — read, search, extract images, OCR, and fetch documents from URLs via the Model Context Protocol. 13 tools, 6 formats, zero configuration.

go install github.com/drolosoft/go-docs-mcp@latest
# That's it. Single binary, starts in milliseconds.

For a deeper look at why an MCP server beats a direct tool, see Why MCP?


🏆 Why Go-Docs MCP?

Every other document MCP server handles one format — a PDF server for PDFs, a DOCX server for DOCX. You'd need three separate servers to read three formats.

Go-Docs MCP

Others

Single binary, no runtime

Yes

Need Node/Python

go install one-liner

Yes

npm+deps or pip+venv

Multi-format (6 types)

Yes

One format each

Full-text search

Yes

Partial or none

OCR (scanned PDFs + images)

Yes

Rare

Image & table extraction

Yes

Partial

Document outline

Yes

Rare

Fetch from URL

Yes

Rare

Dir-locked, read-only

Yes

Varies

Smart caching

Yes

No

Fully offline

Yes

Yes

Go-Docs MCP reads them all from a single binary — fast, secure, and dependency-free at runtime.


Related MCP server: immich-photo-manager

📋 Features — 13 Tools

Category

Tool

Description

Discovery

list_documents

List all documents with metadata (format, pages, size)

Discovery

list_formats

List supported formats and dependency status

Reading

read_document

Full text, specific page, or page ranges from any format

Reading

read_url

Download from URL and extract text (50MB max)

Reading

get_document_summary

First 3 pages as a quick overview

Search

search_document

Case-insensitive full-text search with context

Analysis

get_document_metadata

Title, author, dates, version, page count

Analysis

get_document_outline

Table of contents / bookmarks

Analysis

extract_tables

Tables as structured data

Analysis

extract_images

Images as base64 (max 10 per call)

OCR

ocr_document

Force OCR on scanned/image-based PDFs

OCR

read_image

Extract text from PNG, JPG, TIFF via OCR

Export

convert_to_markdown

Convert any document to clean Markdown

Highlights:

  • Fast — mtime-based in-memory caching avoids redundant extraction

  • Multi-format — PDF, TXT, MD, CSV, DOCX, and images from one server

  • OCR — automatic fallback to tesseract for scanned documents

  • Secure — directory-locked with path traversal prevention

  • Portable — works on macOS and Linux


📄 Supported Formats

Format

Dependencies

Notes

PDF

poppler (pdftotext, pdfinfo, pdfimages, pdftoppm)

Full support — text, images, metadata, OCR fallback

TXT, MD, CSV

None

Native, zero dependencies

DOCX

pandoc (optional)

Word document extraction

Images (PNG, JPG, TIFF)

tesseract (optional)

OCR text extraction


📦 Prerequisites

  • Go 1.25+ (install)

  • poppler — required for PDF support

  • tesseract (optional) — enables OCR for scanned docs and images

  • pandoc (optional) — enables DOCX support

# macOS
brew install poppler
brew install tesseract        # optional: OCR
brew install pandoc           # optional: DOCX

# Debian/Ubuntu
apt install poppler-utils
apt install tesseract-ocr     # optional: OCR
apt install pandoc            # optional: DOCX

# Fedora/RHEL
dnf install poppler-utils
dnf install tesseract         # optional: OCR
dnf install pandoc            # optional: DOCX

Note: TXT, MD, and CSV work out of the box with zero dependencies. Install only what you need.


🚀 Installation

From source

go install github.com/drolosoft/go-docs-mcp@latest

Build locally

git clone https://github.com/drolosoft/go-docs-mcp.git
cd go-docs-mcp
make build      # produces ./go-docs-mcp
make install    # installs to /usr/local/bin/

⚙️ Configuration

Go-Docs MCP reads documents from a configured directory. Set DOCS_MCP_DIR to change it:

Variable

Default

Description

DOCS_MCP_DIR

~/.docs-mcp/documents/

Directory containing documents to serve

PDF_MCP_DIR

(legacy alias)

Backward-compatible alias for DOCS_MCP_DIR

Place your documents in the directory and the server finds them automatically. All supported formats are detected.


💡 Usage

With Claude Code

Add to your .claude/settings.json:

{
  "mcpServers": {
    "docs": {
      "command": "go-docs-mcp",
      "env": {
        "DOCS_MCP_DIR": "/path/to/your/documents"
      }
    }
  }
}

With Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "docs": {
      "command": "/usr/local/bin/go-docs-mcp",
      "env": {
        "DOCS_MCP_DIR": "/path/to/your/documents"
      }
    }
  }
}

With any MCP client

The server communicates over stdio using JSON-RPC 2.0:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | go-docs-mcp

📖 Tool Reference

list_documents

Lists all documents in the configured directory with format detection.

Parameters: None

Example output:

[
  {
    "filename": "architecture-guide.pdf",
    "format": "pdf",
    "title": "architecture-guide",
    "pages": 42,
    "size_bytes": 1048576
  },
  {
    "filename": "notes.md",
    "format": "markdown",
    "title": "notes",
    "size_bytes": 4096
  }
]

list_formats

Lists all supported document formats and their dependency status.

Parameters: None


read_document

Reads the extracted text content of a document. Automatically falls back to OCR if the document is image-based/scanned and pdftotext returns empty text.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The document filename to read

page

number

No

Single page number (1-based). Omit for full text.

pages

string

No

Page ranges, e.g. "1-5", "10", "1-3,7,10-12". Overrides page.

Example input:

{
  "filename": "architecture-guide.pdf",
  "pages": "1-3,10-12"
}

search_document

Searches within a document for lines matching a query. Returns matches with 2 lines of context and approximate page numbers.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The document filename to search

query

string

Yes

Search query (case-insensitive)

Example output:

Found 3 matches for 'microservice' in architecture-guide.pdf:

--- Match 1 (page ~2, line 45) ---
  The system is composed of several
> microservice components that communicate
  via gRPC and message queues.

get_document_summary

Returns the text from the first 3 pages of a document as a quick summary.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The document filename to summarize


get_document_metadata

Returns full document metadata.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The document filename to get metadata for

Example output:

{
  "title": "Architecture Guide",
  "author": "Jane Doe",
  "subject": "System Design",
  "creator": "LaTeX",
  "producer": "pdfTeX",
  "creation_date": "Thu May 15 10:30:00 2025",
  "modification_date": "Thu May 15 10:30:00 2025",
  "pages": 42,
  "file_size_bytes": 1048576,
  "pdf_version": "1.5"
}

get_document_outline

Extracts the document outline (table of contents / bookmarks) as a structured list.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The document filename to extract outline from


extract_tables

Extracts tables from a document as structured data.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The document filename to extract tables from

page

number

No

Specific page to extract from. Omit for all pages.


extract_images

Extracts images from a document as base64-encoded data. Returns up to 10 images per call.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The document filename to extract images from

page

number

No

Specific page to extract from. Omit for all pages.

Example output:

[
  {
    "page": 1,
    "index": 0,
    "format": "jpeg",
    "width": 800,
    "height": 600,
    "data_base64": "/9j/4AAQSkZJRg..."
  }
]

read_url

Downloads a document from a URL and extracts its text content. Maximum file size: 50MB.

Parameters:

Name

Type

Required

Description

url

string

Yes

The URL of the document to download and read

pages

string

No

Page ranges to extract, e.g. "1-5". Omit for full text.

Example input:

{
  "url": "https://example.com/report.pdf",
  "pages": "1-3"
}

ocr_document

Forces OCR on a PDF document using tesseract. Useful for scanned/image-based PDFs or when pdftotext returns garbled text. Requires tesseract and pdftoppm.

Note: read_document already auto-detects image-based PDFs and falls back to OCR. Use ocr_document when you want to force OCR regardless, or need to specify a non-English language.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The PDF filename to OCR

page

number

No

Specific page to OCR (1-based). Omit for all pages.

language

string

No

Tesseract language code (default: eng). Use spa, fra, etc.

Example input:

{
  "filename": "scanned-contract.pdf",
  "page": 1,
  "language": "spa"
}

read_image

Extracts text from an image file using OCR. Supports PNG, JPG, and TIFF. Requires tesseract.

Parameters:

Name

Type

Required

Description

filename

string

Yes

The image filename to read (PNG, JPG, TIFF)

language

string

No

Tesseract language code (default: eng).

Example input:

{
  "filename": "receipt.png",
  "language": "eng"
}

🔒 Security

  • Directory-locked — only files within DOCS_MCP_DIR are accessible

  • Path traversal prevention — filenames sanitized; ../ rejected

  • Extension filter — only supported formats served

  • Read-only — no write operations

  • URL downloads — 50MB limit, Content-Type validated, temp files cleaned immediately


🛠️ Development

make build     # Build the binary
make test      # Run tests with race detector
make clean     # Remove build artifacts

Project structure

go-docs-mcp/
  main.go              # MCP server setup, 12 tool registrations
  internal/
    pdf/
      reader.go        # Document extraction, caching, search, metadata, images, OCR
  Makefile             # Build targets
  go.mod               # Module definition

🦙 Glama Score


📄 License

MIT - Copyright 2026 Drolosoft


💛 Support


DrolosoftTools we wish existed

Available Tools

13 tools
convert_to_markdownB
Destructive

Convert a document to clean Markdown format. Use this when you need structured, readable output from any document; for PDFs headings are detected and formatted, for TXT/CSV content is wrapped in code blocks, and MD files are returned as-is. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to convert

TDQS

B3.4/5.0
Behavior1/5

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

The description claims 'Read-only', but annotations set destructiveHint=true and readOnlyHint=false, creating a direct contradiction. This severely undermines an agent's ability to predict side effects, and the description fails to clarify actual behavior beyond the contradiction.

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 concise with two sentences, front-loading the purpose. The phrase 'Read-only' is redundant given the first sentence implies no modification, and contradicts annotations, but overall structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains behavior for multiple document types, which is helpful, but completely omits details about output format (beyond stating Markdown) and fails to resolve the behavioral contradiction. For a single-parameter tool, it is adequate but not thorough.

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?

Schema coverage is 100%, so the baseline is 3. The description adds context about per-type handling but does not enhance parameter understanding beyond what the schema already provides.

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 tool converts a document to clean Markdown format, specifying the verb, resource, and output format. It also distinguishes behavior for different input types, making it easy to differentiate from sibling 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 provides clear guidance on when to use the tool (for structured, readable output) and explains per-format handling. However, it lacks explicit exclusionary guidance or alternatives, which slightly reduces its utility.

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

extract_imagesA
Destructive

Extract embedded images from a PDF as base64-encoded data, up to 10 per call. Use this when you need to retrieve figures, charts, or photos embedded in a PDF document. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to extract images from
pageNoOptional page number to extract images from. If omitted, extracts from all pages.

TDQS

A3.5/5.0
Behavior1/5

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

Description claims 'Read-only' but annotations set destructiveHint=true, a direct contradiction. No other behavioral details beyond the limit.

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?

Two concise sentences covering purpose and usage, no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description mentions format. Contradictory annotations reduce completeness. Adequate for a simple tool but missing error/limit details.

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?

Schema covers both parameters with descriptions, so description adds minimal value. The limit is mentioned but not linked to parameters.

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 action (extract images), resource (PDF), output format (base64-encoded data), and a limit (up to 10 per call). It distinguishes from sibling tools like extract_tables.

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?

Specifies when to use (retrieve figures, charts, photos). Lacks explicit when-not or alternatives, but context is clear given sibling names.

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

extract_tablesA
Destructive

Extract table-like structures from a document, detecting pipe-delimited, tab-delimited, and multi-space-delimited columns. Use this when you need structured tabular data from a PDF, CSV, or text file. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to extract tables from
pageNoOptional page number for PDFs (1-based). If omitted, extracts from all pages.

TDQS

A3.7/5.0
Behavior1/5

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

The description claims 'Read-only,' but annotations set readOnlyHint: false and destructiveHint: true, a direct contradiction. No other behavioral traits are disclosed, leaving the agent misinformed about side effects.

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?

Two sentences, front-loaded with main action, no redundant phrases. Every word is necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, but the description does not explain what is returned (e.g., JSON rows). Combined with the annotation contradiction, the agent lacks full context. For a simple 2-param tool, it's adequate but not complete.

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

Parameters4/5

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

Schema coverage is 100% with descriptions. The description adds value by explaining the delimiters detected and that page is optional, but the schema already covers parameter format. Baseline 3, plus one for extra context.

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 tool extracts table-like structures, specifying pipe, tab, and multi-space delimiters. It stands out from siblings like read_document or convert_to_markdown by focusing on structured tabular data.

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 'Use this when you need structured tabular data from a PDF, CSV, or text file,' providing clear context. It does not mention when not to use or list alternatives, but the sibling list helps differentiate.

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

get_document_metadataB
Destructive

Get document metadata including title, author, dates, page count, and file size. Use this when you need document properties without reading its content; returns full PDF-specific fields (subject, creator, producer, version) for PDF files. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to get metadata for

TDQS

B3.4/5.0
Behavior1/5

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

Description claims 'Read-only' but annotations have readOnlyHint=false and destructiveHint=true, indicating it may modify data. This is a direct contradiction, severely reducing transparency.

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?

Two concise sentences with no redundancy, efficiently conveying purpose, usage, and special PDF behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite listing returned fields and PDF specifics, the contradiction and missing output schema lead to incomplete context. The read-only claim misleads about behavioral impact.

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?

Schema covers 100% of parameter descriptions. The description does not add extra semantic value beyond the schema for the filename parameter.

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?

Clearly states verb 'Get', resource 'document metadata', and specific fields returned. Distinguishes from sibling tools like read_document by noting it gives properties without content.

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?

Explicitly says 'Use this when you need document properties without reading its content', providing clear context. However, it does not name alternative siblings explicitly.

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

get_document_outlineA
Destructive

Extract the heading structure and table of contents from a document. Use this to understand document organization before reading specific sections; detects numbered sections, ALL-CAPS headings, and markdown # headings. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to extract outline from

TDQS

A3.5/5.0
Behavior1/5

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

The description claims 'Read-only', but annotations set readOnlyHint: false and destructiveHint: true, which is a direct contradiction. This severely undermines transparency and trust.

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 two sentences long, front-loaded with the primary action, and contains no unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple outline extraction tool with one parameter and no output schema, the description provides adequate context about return value (heading structure) and detection capabilities. However, the contradiction with annotations reduces completeness and introduces confusion.

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 input schema has 100% coverage with a clear description for the single 'filename' parameter. The tool description adds details about detected heading styles but does not add meaning beyond the schema for the parameter itself, so a baseline score of 3 is appropriate.

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 tool extracts heading structure and table of contents. It uses a specific verb ('Extract') and resource ('heading structure'), and is distinct from sibling tools like get_document_metadata or read_document.

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 says 'Use this to understand document organization before reading specific sections', providing clear guidance on when to use it. It does not explicitly mention when not to use or name alternatives, but the use case is well-defined.

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

get_document_summaryA
Destructive

Get a quick summary by extracting the first 3 pages or ~100 lines of a document. Use this to preview document content before deciding to read it in full. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to summarize

TDQS

A3.6/5.0
Behavior1/5

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

The description claims 'Read-only', but annotations set destructiveHint=true, creating a direct contradiction. No additional behavioral context is provided beyond the conflicting claim.

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 two sentences and front-loaded, but the inclusion of 'Read-only' is misleading due to contradiction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description mostly suffices but lacks details about the summary format or behavior, and the contradiction undermines completeness.

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?

Schema coverage is 100% and the description adds minimal extra meaning beyond the schema's description of the filename parameter.

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 action (get a quick summary) and specifies the method (first 3 pages or ~100 lines), distinguishing it from siblings like get_document_metadata and read_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using this tool to preview content before deciding to read in full, implying when to use it and suggesting an alternative (read_document).

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

list_documentsA
Destructive

List all documents in the configured directory with format detection and metadata (filename, pages, size). Use this to discover available documents before reading or searching. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior1/5

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

The description claims 'Read-only,' but annotations indicate readOnlyHint=false and destructiveHint=true, directly contradicting the description. This serious inconsistency undermines agent trust and proper tool selection.

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?

Two sentences efficiently convey the tool's purpose and usage context without extraneous information. Every word adds value.

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 simple list tool with no parameters and no output schema, the description covers purpose, scope, and usage context. However, it lacks explanation of 'format detection' and fails to reconcile the annotation contradiction.

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

Parameters4/5

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

The input schema has no parameters, so the description does not need to add parameter information. The minimal description is adequate given the zero-parameter 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 clearly states 'List all documents in the configured directory with format detection and metadata (filename, pages, size).' It specifies the action (list), the resource (documents), and the scope (configured directory), effectively distinguishing it from sibling tools like read_document or search_document.

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 advises 'Use this to discover available documents before reading or searching.' This provides clear context for when to use the tool, though it does not explicitly mention when not to use it or list alternatives.

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

list_formatsA
Destructive

Show all supported document formats and their dependency installation status. Use this to check which formats are available and diagnose missing dependencies. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior1/5

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

The description claims 'Read-only', but annotations set readOnlyHint=false and destructiveHint=true, creating a direct contradiction. The description does not disclose the actual behavioral traits beyond annotations, and instead contradicts them, which is highly misleading.

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 two sentences with no wasted words. The first sentence states the main purpose, and the second provides usage context. It is well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description should fully explain the return format and behavior. It covers formats and dependency status, but the behavioral claim contradicts annotations, so the description is incomplete and unreliable for an agent.

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

Parameters4/5

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

The input schema has no parameters with 100% coverage, so the description does not need to add parameter meaning. The description explains what the output contains (formats and installation status), which is sufficient.

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 tool shows all supported document formats and their dependency installation status, with a specific verb 'Show' and resource 'document formats'. It distinguishes itself from siblings like 'list_documents' by focusing on formats.

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 'Use this to check which formats are available and diagnose missing dependencies', providing clear when-to-use guidance. However, it does not mention when not to use or suggest alternatives, so it's not a 5.

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

ocr_documentA
Destructive

Force OCR text extraction on a PDF, bypassing normal text extraction. Use this when read_document returns garbled or empty text from a scanned PDF; requires tesseract and pdftoppm. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe PDF filename to OCR
languageNoTesseract language code (default: "eng"). Use "spa" for Spanish, "fra" for French, etc. Run 'tesseract --list-langs' to see available languages.
pageNoOptional page number to OCR (1-based). If omitted, OCRs all pages.

TDQS

A3.7/5.0
Behavior1/5

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

The description claims 'Read-only', but annotations set destructiveHint=true, which contradicts the claim. This contradiction undermines trust and provides no additional behavioral context beyond the misleading statement.

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 two sentences with no wasted words. It is front-loaded with the core action and provides immediate guidance on usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers purpose and usage, it lacks information about the output format or return value. The annotation contradiction also reduces completeness. For a tool with only one required parameter and no output schema, more detail about what the tool returns would be helpful.

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 input schema has 100% description coverage for all three parameters (filename, language, page). The description adds no extra parameter semantics; it only mentions system dependencies. Baseline 3 is appropriate as the schema already defines the parameters.

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 tool performs OCR text extraction on a PDF, bypassing normal text extraction. It specifies the resource (PDF) and the action (Force OCR), and distinguishes it from read_document by describing when to use it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool when read_document returns garbled or empty text from a scanned PDF, providing clear context. It also mentions system dependencies (tesseract and pdftoppm), guiding the agent on prerequisites.

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

read_documentA
Destructive

Read text content from a document with optional page selection. Use this when you need the raw text of a PDF, TXT, MD, CSV, or DOCX file; supports page ranges (e.g. "1-5", "1-3,7,10-12") and auto-OCR fallback for scanned PDFs. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to read
pageNoOptional single page number to read (1-based). If omitted, returns full text.
pagesNoOptional page ranges to read, e.g. "1-5", "10", "1-3,7,10-12". Overrides 'page' if both provided.

TDQS

A3.6/5.0
Behavior1/5

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

The description claims 'Read-only' but annotations set readOnlyHint: false and destructiveHint: true, indicating possible side effects. This contradiction makes the behavioral description misleading and unreliable.

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 two sentences, front-loading the purpose and optional selection, then providing additional context. Every sentence adds value; no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite covering basics, the contradiction with annotations undermines completeness. No output format info, though simple text is implied. With no output schema, description should clarify return structure.

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

Parameters4/5

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

Schema coverage is 100%, and the description adds meaning beyond schema by explaining page range syntax (e.g., '1-5') and auto-OCR fallback, which are not in parameter 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 clearly states 'Read text content from a document' and lists supported formats (PDF, TXT, MD, CSV, DOCX), differentiating it from siblings like extract_images or extract_tables.

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?

Description advises 'Use this when you need the raw text of a...file' and mentions page ranges and auto-OCR, providing clear context for usage, though it doesn't explicitly state when not to use it or name alternatives.

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

read_imageA
Destructive

Extract text from a standalone image file (PNG, JPG, TIFF, BMP) using OCR. Use this when you need to read text from an image rather than a document; supports multiple languages via tesseract. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe image filename to OCR (must be in the documents directory)
languageNoTesseract language code (default: "eng"). Use "spa" for Spanish, "fra" for French, etc.

TDQS

A3.8/5.0
Behavior1/5

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

The description claims 'Read-only' but annotations indicate destructiveHint=true, which is a direct contradiction. No further behavioral details beyond annotations.

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?

Two sentences, no fluff, efficiently communicates core functionality and constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple tool with full schema coverage, but the description-destructiveHint contradiction undermines completeness.

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 coverage is 100%; description adds valuable context: filename must be in documents directory, language codes with examples (spa, fra) beyond the default.

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 specifies the tool extracts text from standalone images (PNG, JPG, TIFF, BMP) using OCR, differentiating it from document-focused siblings like ocr_document.

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?

Explicitly states when to use ('when you need to read text from an image rather than a document') and mentions language support, but lacks explicit 'when not to use' statements.

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

read_urlA
Destructive

Download a document from a URL and extract its text content (max 50MB). Use this when the document is hosted online rather than in the local directory; supports PDF and plain text URLs. Read-only, downloads to a temporary file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoOptional page ranges to read, e.g. "1-5", "10", "1-3,7,10-12". If omitted, returns full text.
urlYesThe URL of the document to download and read

TDQS

A3.8/5.0
Behavior1/5

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

Description claims 'Read-only' while annotations set destructiveHint=true, a direct contradiction. Additionally, the temporary file download is not explained as a side effect.

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?

Two sentences with no wasted words. Action, constraints, and usage guidance are 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?

Explains result (text content) and constraints (max 50MB, supported types). Lacks error scenarios or output format, but sufficient for a simple retrieval tool.

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

Parameters4/5

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

Schema coverage is 100%, but description adds value by stating max file size and supported formats, which are not in schema. Adds context beyond 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?

Clearly states the verb 'Download and extract text content' from a URL, distinguishing from sibling tools that handle local documents.

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?

Explicitly tells when to use ('hosted online') and mentions supported types (PDF, plain text) and a max size (50MB). Lacks explicit alternative names but provides clear context.

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

search_documentB
Destructive

Search for text within a document and return matching lines with context and approximate page numbers. Use this when you need to find specific content without reading the entire document. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesThe document filename to search
queryYesThe search query (case-insensitive)

TDQS

B3.3/5.0
Behavior1/5

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

Description claims 'Read-only,' which contradicts annotations (destructiveHint: true). This is a critical inconsistency. No mention of potential side effects or required permissions beyond the contradiction.

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?

Three sentences: one for purpose, one for usage guidance, one for behavior. Efficient and front-loaded with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having only 2 parameters, the tool is a search operation with clear output description in text. However, the annotation contradiction undermines completeness; missing behavioral truth and no output schema information.

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?

Both parameters are fully described in the input schema (100% coverage), so the description adds no additional meaning beyond the schema. Baseline score of 3 appropriate.

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?

Description clearly states the verb 'Search', the resource 'document', and specifics about output ('matching lines with context and approximate page numbers'). It effectively distinguishes from siblings like read_document and get_document_summary.

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?

Description explicitly says 'Use this when you need to find specific content without reading the entire document,' providing clear when-to-use guidance. However, it lacks explicit alternatives or when-not-to-use indications, but context from sibling tools suffices.

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.

  1. 1 tool updatev1.1.0
    • Addedconvert_to_markdown
  2. 12 tool updatesv0.1.0
    • First observedextract_images
    • First observedextract_tables
    • First observedget_document_metadata
    • First observedget_document_outline
    • First observedget_document_summary
    • First observedlist_documents
    • First observedlist_formats
    • First observedocr_document
    • First observedread_document
    • First observedread_image
    • First observedread_url
    • First observedsearch_document

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose (e.g., reading, searching, extracting images/tables, OCR, listing, etc.). There is no overlap or ambiguity between tools.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, such as list_documents, read_document, convert_to_markdown, etc. The naming is predictable and clear.

Tool Count5/5

With 13 tools covering listing, reading, searching, extracting, and format support, the count feels well-scoped for a document processing server. No tool seems superfluous.

Completeness5/5

The tool set covers all essential read-only document operations: listing, metadata, outline, summary, full text reading, search, conversion, image/table extraction, OCR, URL import, and format listing. No obvious gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides advanced OCR capabilities with multiple state-of-the-art backends (DeepSeek-OCR, Florence-2, DOTS.OCR, PP-OCRv5), supporting document processing, scanner integration, and multi-format output with layout preservation.
    20
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Turn markdown into designed PDFs with cover page, table of contents, and code blocks that hold across pages. One command from Claude Desktop, Claude Code, Cursor, Cline, Zed, or any MCP-capable client.
    2
    63
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Zero-knowledge document vault backed by Azure Blob Storage with built-in MCP server. Client-side AES-256-GCM encryption, five tools (list, get, search, create, update), and OAuth-gated access for Claude.
    9
    1
    MIT

Latest Blog Posts

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/drolosoft/go-docs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server