Skip to main content
Glama
Epyur

ot5-mcp-server

by Epyur

문서 인식 MCP 서버

TypeScript/Node.js 기반 MCP 서버로, IDE(VSCode)의 에이전트를 대상으로 합니다. 4가지 도구를 제공합니다: 전자 PDF, Word(DOCX), Excel(XLSX) 추출과 PostgreSQL 검색. 각 도구는 에이전트에 구조화된 JSON을 반환합니다.

기능

도구

수행 작업

반환 값

extract_pdf

텍스트(스캔되지 않은) PDF 추출

메타데이터, 페이지 수, 페이지별 텍스트

extract_word

DOCX 추출

제목, 문단, 표, 목록

extract_excel

XLSX 추출

시트, 열, 행 수, 첫 번째 행들

postgres_search

PostgreSQL 검색 (read-only)

테이블, 열, 행(SELECT)

각 도구의 결과 계약은 docs/contract.md를 참조하세요.

Related MCP server: Document Search MCP Server

MCP 작동 원리

에이전트(IDE)는 stdio 전송 방식으로 MCP 서버에 연결합니다. IDE는 서버를 자식 프로세스로 실행하며(이 프로젝트에서는 Docker 컨테이너, opencode.json 참고) JSON-RPC 2.0 메시지로 통신합니다. 연결 수명 주기는 initializetools/listtools/call의 세 단계로 구성됩니다. tools/list 단계에서 에이전트는 도구 설명(이름, 설명, 입력 파라미터 스키마)을 받아 모델 컨텍스트에 추가합니다. tools/call 단계에서는 에이전트가 서버에 인수를 전달하고, 서버가 실제 작업을 수행하여 구조화된 JSON 결과를 반환합니다. 이 결과는 다시 모델 컨텍스트로 들어가 응답을 만드는 데 사용됩니다.

Tool은 서버가 선언한 함수입니다. 이름, 사람이 읽을 수 있는 설명, 파라미터 JSON 스키마를 가집니다. 모델은 무엇도 직접 실행하지 않고, 어떤 도구를 어떤 인수로 호출할지 결정만 합니다. 실제 실행은 항상 MCP 서버 쪽에서 이루어집니다. 이 프로젝트에서 도구는 extract_pdf, extract_word, extract_excel, postgres_search입니다. Mermaid 다이어그램으로 이 구조를 시각적으로 설명한 문서는 docs/mcp-explained.html에 있습니다.

요구 사항

  • Node.js 20.11+ (import.meta.dirname 사용)

  • PostgreSQL (postgres_search 도구에서만 필요)

설치 및 실행

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

환경 변수는 .env 파일에 있습니다(.env.example을 복사한 후 DATABASE_URL을 지정하세요). 실제 .env는 커밋되지 않습니다.

Docker에서 실행

모든 환경은 컨테이너로 구성됩니다: MCP 서버(Dockerfile에서 빌드)와 테스트 데이터가 있는 PostgreSQL입니다.

# 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

구성: dbot5_default 네트워크에 있습니다. VSCode MCP 컨테이너는 같은 네트워크에 연결되어 서비스 이름 db로 DB에 접속합니다. Postgres 데이터는 named volume pgdata에 저장됩니다.

VSCode(opencode) 에이전트에 연결

이 프로젝트는 VSCode용 opencode 확장(sst-dev.opencode)을 사용합니다. opencode는 자체 설정인 opencode.json을 통해 MCP 서버를 연결합니다. .vscode/mcp.json을 통해서가 아닙니다. .vscode/mcp.json은 GitHub Copilot의 내장 MCP 게이트웨이에만 필요합니다.

  1. npm install && npm run build로 종속성을 설치하고 프로젝트를 빌드합니다.

  2. Docker 환경을 띄웁니다:

    docker compose up -d db
    docker build -t ot5-mcp-server .
  3. 프로젝트 루트에 opencode.json이 이미 있습니다. 이 파일이 docs-server를 컨테이너로 실행합니다:

    {
      "$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가 실행 중이고, 이미지 ot5-mcp-server:latest가 빌드되어 있으며, 네트워크 ot5_default가 생성되어 있어야 합니다. docker.exe의 경로는 full path입니다. Docker가 PATH에 없기 때문입니다.

  4. opencode를 재시작합니다(VSCode 창을 닫았다 열거나 에이전트 세션을 재시작) — 설정은 시작 시 읽힙니다.

  5. 에이전트 채팅에 도구를 명시적으로 포함한 실행을 하나 보냅니다. 예: "Введите extract_pdf для samples/sample.pdf."

  6. 호출 확인: 에이전트의 답변은 JSON으로 자격 저장되며, 서버 로그는 터미널/Docker에 표시됩니다.

비밀 정보: docker 모드의 DB 연결 문자열은 로컬 개발용 계정 dev:dev이며 테스트 전용입니다.

IDE 없이 검증 (스모크 테스트)

npm run smoke-test

scripts/smoke-test.mjs은 빌드된 서버를 MCP 클라이언트를 통해 stdio로 띄우고 모든 도구를 호출합니다. 가장 최근 실행 결과: docs/evidence/smoke-test.log.

서버 쪽 로그 한 줄의 예(도구 이름, 파라미터, 상태):

{"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"}

로깅은 src/logger.ts:20–34에 구현되어 있으며(password/token 형태의 키를 제거) 확인합니다.

보안 및 제한 사항

  • 파일 접근 — 프로젝트 루트 내의 상대 경로만 허용하며, ../를 통한 우회는 금지됩니다(src/security.ts:6–22).

  • PostgreSQL — 읽기 전용입니다: BEGIN READ ONLY 세션, SELECT만 허용, 멀티스테이트먼트 금지, 쿼리 시간 초과 10초(src/tools/postgres.ts:43–86). 연결 문자열은 .env에서만 가져오며 로그에 포함되지 않습니다.

  • 비밀 — 저장소에는 .env.example만 존재합니다. 로깅은 password/token 형태의 키를 제거합니다(src/logger.ts:20–34).

  • PDF — 전자(텍스트) PDF만 지원합니다. 스캔된 문서(이미지)는 확장되지 않습니다 — OCR은 대상 범위가 아닙니다.

코드 참조 (요구사항별)

  1. 서버 및 도구 등록src/index.ts:35–106 (도구) 및 src/index.ts:107–108 (stdio 전송).

  2. 도구 구현:

    • extract_pdfsrc/tools/pdf.ts:14–33 (구현), 로깅은 src/index.ts:36–49;

    • extract_wordsrc/tools/word.ts:17–71, 로깅은 src/index.ts:52–65;

    • extract_excelsrc/tools/excel.ts:15–36, 로깅은 src/index.ts:6481;

    • postgres_searchsrc/tools/postgres.ts:43–86, 로깅은 src/index.ts:84–104.

  3. 호출 로깅src/index.ts의 로그 출력 참고.

    • 로깅 구현: src/index.ts:20–34? 원문은 src/index.ts/logger.ts:20–34로 표기됨. 바로 src/tools/logger.ts20–34.

    • 출력 예시: docs/evidence/smoke-test.log.

  4. 결과 계약docs/contract.md.

에이전트 검증 요청 (기준: "IDE에서 호출")

  • 요청은 VSCode 내 opencode 에이전트 채팅에서 실행되었습니다.

  • 대화 기록: mcp_ans.md (커밋되지 않음, 개인 문서의 추출 내용 포함).

  • 요약 테이블: docs/evidence/verification.md.

#

VSCode에서 보낸 요청

예상 도구

실제 결과 (대화 기록 기준)

1

«Какие MCP тебе доступны?»

— (설정 확인)

에이전트가 opencode.json을 읽고 docs-server의 4개 도구를 나열

2

«Распознай все PDF-файлы в папке»

extract_pdf ×2

Чек 3 743.pdf и samples/sample.pdf로 호출 — текст успешно извлечён

3

«Дай резюме по файлу Анализ…МЧС России.docx»

extract_word

추출된 텍스트를 기반으로 문서 요약 생성

4

«Покажи список таблиц в БД»

postgres_search (list_tables)

employees, orders, products 반환됨

5

«Покажи список таблиц в БД» (повторно)

postgres_search (list_tables)

유사한 결과

6

«Выжимку по стоимости из Перечень…xls»

extract_excel

가격과 제조 기간이 포함된 표 생성됨

7

«Ревью документа Приложение 0…pdf»

extract_pdf (негативный)

정확한 오류: "파일을 찾을 수 없음"

8

«Прочитай файл Приложение.pdf в C:\Users\User\Documents\»

extract_pdf (негативный)

오류: Docker volume을 통한 프로젝트 폴더에만 접근 가능; Read는 사용자에게 거부됨

기준 결론: 8개의 테스트 요청 중 7개가 MCP 도구를 호출함 (요구 사항 «요청 ≥5회, 실제 호출 ≥3회»을 충족 이상), 여기에 2개의 부정적 요청이 보안 경계를 상세 확인합니다.

프로젝트 구조

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