ot5-mcp-server
MCPサーバー文書認識
TypeScript/Node.js製のMCPサーバーで、IDE(VSCode)のエージェント向け。4つのツールを提供する: 電子PDF、Word(DOCX)、Excel(XLSX)の認識と、PostgreSQL検索。各ツールはエージェントに構造化JSONを返す。
機能
ツール | 動作 | 戻り値 |
| テキストPDF(非スキャン)の認識 | メタデータ、ページ数、テキスト |
| DOCXの認識 | 見出し、段落、表、リスト |
| XLSXの認識 | シート、列、行数、先頭行 |
| PostgreSQL検索(読み取り専用) | テーブル、列、行(SELECT) |
各ツールの結果コントラクト: docs/contract.md 参照。
Related MCP server: Document Search MCP Server
原則
エージェント(IDE)はMCPサーバーにstdioトランスポートで接続する:IDEがサーバーを子プロセスとして起動し
(本プロジェクトではDockerコンテナ、opencode.json参照)、JSON-RPC 2.0でメッセージを交換する。
接続ライフサイクルは3フェーズ:initialize → tools/list → tools/call。
tools/listフェーズでエージェントはツールの説明(名前、説明、入力パラメータのスキーマ)を取得し、
それをモデルのコンテキストに追加する。tools/callフェーズでエージェントはサーバーに引数を送信し、サーバーが実際の処理を実行して
構造化JSONの結果を返し、それがモデルのコンテキストに戻って応答生成に使われる。
ツールとは、サーバーが宣言する関数である:名前、人間可読な説明、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構成:db は ot5_default ネットワーク上に存在。MCPコンテナは同じネットワークに接続し、
サービス名 db でDBにアクセスする。PostgreSQLのデータは名前付きボリューム pgdata に保存される。
VSCodeのエージェントへの接続(opencode)
本プロジェクトではVSCode用拡張機能 opencode を使用(
sst-dev.opencode)。 opencodeはMCPサーバーを独自の設定ファイルopencode.json経由で接続する(.vscode/mcp.jsonではない。 後者は組み込みのMCPゲートウェイ(GitHub Copilot)専用)。
依存関係をインストールし、プロジェクトをビルド:
npm install && npm run build。Docker環境を起動:
docker compose up -d db docker build -t ot5-mcp-server .プロジェクトルートに
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のパスは完全修飾パスであること(DockerがPATHにないため)。opencodeを再起動(VSCodeウィンドウを閉じて開き直すか、エージェントセッションを再開)— 設定は起動時に読み込まれる。
エージェントのチャットで、ツールを明示的に呼び出すリクエストを送信。例:「
samples/sample.pdfに対して MCPツールextract_pdfを呼び出して」。呼び出しの確認:エージェントの応答はJSONとして返る。サーバーのログはターミナル/Dockerに表示される。
注意:DB接続文字列はDockerモードでは
docker-compose.ymlの環境変数から取得される。ローカル開発時は.envのDATABASE_URLを使用(devアカウント、devパスワード、テスト専用)。
IDEなしでの確認(スモークテスト)
npm run smoke-testスクリプト scripts/smoke-test.mjs は、ビルド済みサーバーをstdio経由でMCPクライアントを通じて起動し、全ツールを呼び出す。
最新の実行出力: 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は対象外。
コード参照(仕様書の要件に基づく)
サーバーとツール登録 —
src/index.ts:35–106(ツール)、src/index.ts:107–108(stdioトランスポート)。ツール実装:
extract_pdf—src/tools/pdf.ts:14–33(実装)、ログはsrc/index.ts:36–49;extract_word—src/tools/word.ts:17–71(実装)、ログはsrc/index.ts:52–65;extract_excel—src/tools/excel.ts:15–36(実装)、ログはsrc/index.ts:68–81;postgres_search—src/tools/postgres.ts:43–86(実装)、ログはsrc/index.ts:84–104。
呼び出しログ —
src/logger.ts:20–34;出力例: docs/evidence/smoke-test.log。結果コントラクト — docs/contract.md。
エージェントへの確認リクエスト(「IDEからの呼び出し」基準)
リクエストはVSCode内のopencodeエージェントチャットで実行された。対話のトランスクリプト:mcp_ans.md(コミットしない。
個人文書から抽出したコンテンツを含むため)。集計表: docs/evidence/verification.md。
# | VSCodeでのリクエスト | 期待されるツール | 実際の結果(トランスクリプトによる) |
1 | 「利用可能なMCPはどれ?」 | —(設定確認) | エージェントが |
2 | 「フォルダ内の全PDFを認識して」 |
|
|
3 | 「Анализ…МЧС России.docx の要約を」 |
| 抽出テキストから文書要約を生成 |
4 | 「DBのテーブル一覧を表示」 |
| employees、orders、products を返却 |
5 | 「DBのテーブル一覧を表示」(再実行) |
| 同様の結果 |
6 | 「Перечень…xls からコスト情報を抽出」 |
| 価格と製造期間の表を生成 |
7 | 「Приложение 0…pdf をレビュー」 |
| 正しいエラー「プロジェクト内にファイルが見つかりません」 |
8 | 「C:\Users\User\Documents\ の Приложение.pdf を読んで」 |
| エラー:Dockerボリューム経由でプロジェクトフォルダのみアクセス可能。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)This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP 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.2MIT
- FlicenseNot gradedqualityBmaintenanceA local MCP server providing read-only access to documents like Word, PDF, Excel, and images, with file listing, reading, and metadata extraction.
- AlicenseNot gradedqualityBmaintenanceMCP server for comprehensive PDF processing including text extraction with OCR, keyword search with regex, table extraction, and page preview as Base64 PNG images.1MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server for PDF analysis that enables text extraction, image extraction, metadata retrieval, and text search via natural language.MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Epyur/ot5-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server