Skip to main content
Glama
Epyur

ot5-mcp-server

by Epyur

Servidor MCP de reconocimiento de documentos

Servidor MCP en TypeScript/Node.js para agentes en IDE (VSCode). Proporciona 4 herramientas: reconocimiento de PDF electrónicos, Word (DOCX), Excel (XLSX) y búsqueda en PostgreSQL. Cada herramienta devuelve al agente un JSON estructurado.

Características

Herramienta

Qué hace

Qué devuelve

extract_pdf

Reconocimiento de PDF de texto (no escaneado)

Metadatos, número de páginas, texto por página

extract_word

Reconocimiento de DOCX

Títulos, párrafos, tablas, listas

extract_excel

Reconocimiento de XLSX

Hojas, columnas, número de filas, primeras filas

postgres_search

Búsqueda en PostgreSQL (solo lectura)

Tablas, columnas, filas (SELECT)

Contrato de resultado de cada herramienta: ver docs/contract.md.

Related MCP server: Document Search MCP Server

Principios de MCP

El agente (IDE) se conecta al servidor MCP mediante el transporte stdio: el IDE ejecuta el servidor como proceso hijo (en nuestro caso, contenedor Docker, ver opencode.json) e intercambia mensajes JSON-RPC 2.0. El ciclo de vida de la conexión consta de tres fases: initializetools/listtools/call. En la fase tools/list, el agente obtiene las descripciones de las herramientas (nombre, descripción, esquema de parámetros de entrada) y las añade al contexto del modelo; en la fase tools/call, el agente envía los argumentos al servidor, el servidor realiza el trabajo real y devuelve un resultado JSON estructurado que vuelve al contexto del modelo para formar la respuesta.

Tool es una función declarada por el servidor: tiene un nombre, una descripción legible por humanos y un esquema JSON de parámetros. El modelo no ejecuta nada por sí mismo — solo decide qué tool llamar y con qué argumentos; la ejecución siempre ocurre en el lado del servidor MCP. En este proyecto, las tools son extract_pdf, extract_word, extract_excel y postgres_search. Una explicación visual de este esquema con diagramas Mermaid está en docs/mcp-explained.html.

Requisitos

  • Node.js 20.11+ (se usa import.meta.dirname)

  • PostgreSQL (solo para la tool postgres_search)

Instalación y ejecución

npm install          # установка зависимостей
npm run build        # сборка в dist/
npm run make-samples # сгенерировать образцы в samples/ (для проверки)
npm start            # запуск сервера напрямую (stdio)

Las variables de entorno están en el archivo .env (copie .env.example, indique DATABASE_URL). El .env real no se commitea.

Ejecución en Docker

Todo el entorno se levanta con contenedores: el servidor MCP (compilado desde Dockerfile) y PostgreSQL con datos de prueba.

# 1. Собрать образ MCP-сервера
docker build -t ot5-mcp-server .

# 2. Поднять PostgreSQL с тестовыми данными (db/init.sql)
docker compose up -d db

# 3. Проверка (опционально): тулы через stdio-контейнер
docker run -i --rm --network ot5_default -e PROJECT_ROOT=/project \
  -e DATABASE_URL=postgres://dev:dev@db:5432/docs \
  -v "%CD%:/project" ot5-mcp-server:latest

Esquema: db vive en la red ot5_default; el contenedor MCP de VSCode se conecta a la misma red y accede a la BD por el nombre de servicio db. Los datos de Postgres están en el volumen nombrado pgdata.

Conexión al agente en VSCode (opencode)

En el proyecto se usa la extensión opencode para VSCode (sst-dev.opencode). opencode conecta los servidores MCP a través de su configuración opencode.json (no mediante .vscode/mcp.json, que solo se necesita para el gateway MCP integrado de GitHub Copilot).

  1. Instale las dependencias y compile el proyecto: npm install && npm run build.

  2. Levante el entorno en Docker:

    docker compose up -d db
    docker build -t ot5-mcp-server .
  3. En la raíz del proyecto ya está opencode.json — inicia docs-server como contenedor:

    {
      "$schema": "https://opencode.ai/config.json",
      "mcp": {
        "docs-server": {
          "type": "local",
          "command": [
            "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe",
            "run", "-i", "--rm", "--network", "ot5_default",
            "-e", "PROJECT_ROOT=/project",
            "-e", "DATABASE_URL=postgres://dev:dev@db:5432/docs",
            "-v", "C:\\Users\\User\\Documents\\HW\\OT-5:/project",
            "ot5-mcp-server:latest"
          ],
          "enabled": true
        }
      }
    }

    Docker debe estar en ejecución, la imagen ot5-mcp-server:latest compilada, la red ot5_default creada. La ruta a docker.exe es completa, ya que Docker no está en PATH.

  4. Reinicie opencode (cierre/abra la ventana de VSCode o reinicie la sesión del agente) — la configuración se lee al iniciar.

  5. En el chat del agente, envíe una solicitud que nombre explícitamente la herramienta, por ejemplo: «Llama a la herramienta MCP extract_pdf para samples/sample.pdf».

  6. Confirmación de la llamada: la respuesta del agente llegará como JSON, y los registros del servidor aparecerán en la terminal/Docker.

Secretos: la cadena de BD para el modo docker es la cuenta de desarrollo local dev:dev, solo para pruebas.

Verificación sin IDE (smoke test)

npm run smoke-test

El script scripts/smoke-test.mjs levanta el servidor compilado por stdio mediante un cliente MCP y llama a todas las tools. Salida de la última ejecución: docs/evidence/smoke-test.log.

Ejemplo de línea de registro en el lado del servidor (nombre de la tool, parámetros, estado):

{"ts":"2026-08-20T06:45:44.748Z","tool":"extract_pdf","params":{"path":"samples/sample.pdf"},"status":"success"}
{"ts":"2026-08-20T06:45:44.787Z","tool":"extract_word","params":{"path":"samples/sample.docx"},"status":"success"}
{"ts":"2026-08-20T06:45:44.798Z","tool":"extract_excel","params":{"path":"samples/sample.xlsx"},"status":"success"}
{"ts":"2026-08-20T06:45:44.811Z","tool":"postgres_search","params":{"operation":"list_tables"},"status":"success"}

El registro está implementado en src/logger.ts:20–34 (limpia claves como password/token).

Seguridad y limitaciones

  • Acceso a archivos — solo rutas relativas dentro de la raíz del proyecto; el acceso mediante ../ está prohibido (src/security.ts:6–22).

  • PostgreSQL — solo lectura: sesión BEGIN READ ONLY, solo SELECT, sin multi-sentencias, tiempo de espera de consulta 10 s (src/tools/postgres.ts:43–86). La cadena de conexión solo proviene de .env, no aparece en los registros.

  • Secretos — en el repositorio solo está .env.example; el registro limpia claves como password/token, etc. (src/logger.ts:20–34).

  • PDF — solo PDF electrónicos (de texto). Los documentos escaneados (imágenes) no se reconocen — el OCR no está en el alcance.

Enlaces al código (según los requisitos de la tarea)

  1. Servidor y registro de herramientassrc/index.ts:35–106 (tools) y src/index.ts:107–108 (transporte stdio).

  2. Implementación de las herramientas:

    • extract_pdfsrc/tools/pdf.ts:14–33 (implementación), registro en src/index.ts:36–49;

    • extract_wordsrc/tools/word.ts:17–71, registro en src/index.ts:52–65;

    • extract_excelsrc/tools/excel.ts:15–36, registro en src/index.ts:68–81;

    • postgres_searchsrc/tools/postgres.ts:43–86, registro en src/index.ts:84–104.

  3. Registro de llamadassrc/logger.ts:20–34; ejemplo de salida: docs/evidence/smoke-test.log.

  4. Contrato de resultadodocs/contract.md.

Solicitudes de verificación al agente (criterio «llamadas desde IDE»)

Las solicitudes se realizaron en el chat del agente opencode dentro de VSCode. Transcripción del diálogo: mcp_ans.md (no se commitea, contiene contenido extraído de documentos personales). Tabla resumen: docs/evidence/verification.md.

#

Solicitud en VSCode

Tool esperada

Hecho (según transcripción)

1

«¿Qué MCP tienes disponibles?»

— (verificación de configuración)

El agente leyó opencode.json, enumeró las 4 tools de docs-server

2

«Reconoce todos los archivos PDF de la carpeta»

extract_pdf ×2

Llamado para Чек 3 743.pdf y samples/sample.pdf — texto extraído

3

«Dame un resumen del archivo Анализ…МЧС России.docx»

extract_word

Resumen del documento generado a partir del texto extraído

4

«Muestra la lista de tablas en la BD»

postgres_search (list_tables)

Devueltas employees, orders, products

5

«Muestra la lista de tablas en la BD» (repetido)

postgres_search (list_tables)

Resultado similar

6

«Resumen de costos de Перечень…xls»

extract_excel

Tabla generada con precios y plazos de fabricación

7

«Revisa el documento Приложение 0…pdf»

extract_pdf (negativo)

Error correcto «archivo no encontrado en el proyecto»

8

«Lee el archivo Приложение.pdf en C:\Users\User\Documents\»

extract_pdf (negativo)

Error: acceso solo a la carpeta del proyecto mediante volumen Docker; Read rechazado por el usuario

Resultado según el criterio: 8 solicitudes de verificación, de las cuales 7 conducen a una llamada a la tool MCP (el requisito «≥5 solicitudes, ≥3 llamadas reales» se cumple con margen), además 2 solicitudes negativas confirman los límites de seguridad.

Estructura del proyecto

src/index.ts            # сервер, stdio-транспорт, регистрация тулов
src/logger.ts           # логирование вызовов (имя, параметры, статус)
src/security.ts         # проверка путей внутри корня проекта
src/tools/pdf.ts        # PDF (pdf-parse)
src/tools/word.ts       # DOCX (mammoth + cheerio)
src/tools/excel.ts      # XLSX (xlsx / SheetJS)
src/tools/postgres.ts   # PostgreSQL (pg, read-only)
scripts/make-samples.ts # генерация образцов
scripts/smoke-test.mjs  # смоук-тест через MCP-клиент
Dockerfile              # образ MCP-сервера
docker-compose.yml      # PostgreSQL с тестовыми данными
db/init.sql             # инициализация БД (таблицы + данные)
opencode.json          # MCP-конфиг для агента opencode
docs/contract.md        # контракт результатов
docs/evidence/          # логи подтверждений (smoke-test.log, verification.md)
docs/mcp-explained.html # наглядное объяснение принципов MCP (схемы Mermaid)
F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    D
    maintenance
    MCP server that enables searching and reading binary document files (PDF, DOCX, PPTX, XLSX, ODT, ODS, ODP, RTF, EPUB) using regex patterns and retrieving content by sections.
    2
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A local MCP server providing read-only access to documents like Word, PDF, Excel, and images, with file listing, reading, and metadata extraction.
  • A
    license
    Not graded
    quality
    D
    maintenance
    A read-only MCP server for PDF analysis that enables text extraction, image extraction, metadata retrieval, and text search via natural language.
    MIT

View all related MCP servers

Related MCP Connectors

  • A paid remote MCP for Context7 MCP docs, built to return verdicts, receipts, usage logs, and audit-r

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.

View all MCP Connectors

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/Epyur/ot5-mcp-server'

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