Skip to main content
Glama
slamsmart

Super-MCP-OCR-Deepseek

by slamsmart

๐Ÿฆ‰ Super MCP OCR for DeepSeek (teks-only LLM) M8ven Score

Memberi "mata" ke model AI yang tidak punya vision (mis. DeepSeek v4 Flash, DeepSeek R1, atau LLM teks-only lain) โ€” semua gambar & dokumen dibaca jadi teks murni yang bisa langsung dianalisa.

Gambar / PDF / Word / Excel / PPT
        โ”‚
        โ–ผ
   [ MCP OCR Server ]  โ”€โ”€โ–บ  teks murni  โ”€โ”€โ–บ  LLM bisa baca & jawab

โœจ Fitur

Format

Cara baca

๐Ÿ–ผ๏ธ Gambar โ€” png, jpg/jpeg, webp, bmp, gif, tif/tiff

OCR (RapidOCR + pre-process)

๐Ÿ“„ PDF

teks asli diekstrak; halaman scan otomatis di-OCR per halaman (max 25 hal)

๐Ÿ“ Office โ€” docx, xlsx/xlsm, pptx, rtf

ekstrak paragraf, tabel, slide

๐Ÿ“ƒ Teks โ€” txt, md, csv, json, xml, log, yaml, toml, html

baca langsung

Tidak didukung: .doc / .xls versi lama โ†’ simpan ulang sebagai .docx / .xlsx.

Tool yang tersedia:

  • read_document(file_path, mode, enhance) โ€” nama penuh (teks)

  • ocr_image(image_path, mode, enhance) โ€” alias kompatibel (teks)

  • read_colors(file_path, top_n=8, merge=true) โ€” ๐ŸŽจ ekstrak warna dominan dari gambar


Related MCP server: docling-mcp

๐ŸŽจ Baca Warna dari Gambar (read_colors)

Model teks-only juga tidak bisa melihat warna. read_colors terjemahkan warna gambar jadi teks berstruktur โ€” hex, rgb, nama, shade, persentase area, dan posisi region. Cocok buat: copy-paste screenshot halaman web, mau ganti warna desain, cari nilai hex yang dipakai.

read_colors(file_path="web-design.png")
read_colors(file_path="ui.png", top_n=12)        # lebih banyak warna
read_colors(file_path="ui.png", merge=false)     # tanpa gabung shade dekat

Param

Nilai

Fungsi

file_path

path gambar lokal / URL

wajib

top_n

8 (default)

jumlah warna teratas

merge

true (default)

gabung warna nyaris-sama (<30 delta)

Contoh output:

[COLORS] web-design.png โ€” 1280x800px โ€” top 6 warna dominan
1. #FFFFFF  rgb(255, 255, 255)  ~white (light)  53.1%  posisi: background
2. #1F2937  rgb(31, 41, 55)  ~custom (dark)  19.8%  posisi: header/navbar
3. #3B82F6  rgb(59, 130, 246)  ~custom (dark)  6.5%  posisi: accent/panel

Region label: background, header/navbar, footer, sidebar, panel/card, accent/button/text, band. Nilai hex sudah siap tempel ke CSS/Tailwind. Warna tanpa nama umum (Tailwind dll) dilabel ~custom โ€” pakai hex/rgb-nya.

Flow copas web: gambar di-paste di chat โ†’ extract-pasted-image.py โ†’ read_colors(...) โ†’ dapat hex โ†’ edit warna.


๐ŸŽฏ Kenapa ini penting?

Banyak LLM yang murah/cepat hanya teks-only โ€” mereka menolak gambar (Cannot read image / model does not support image input). Padahal pengguna sering paste screenshot error, stack trace, scan dokumen, proposal PDF.

Skill ini menjembatani: file โ†’ OCR โ†’ teks โ†’ LLM, tanpa perlu model vision yang mahal.


๐Ÿš€ Cara Setup

1. Install dependensi

cd mcp-ocr
# pakai uv (disarankan)
uv sync

# atau pakai pip langsung
pip install -r pyproject.toml

Butuh Python 3.10 โ€“ 3.13. Dependensi utama: mcp, rapidocr-onnxruntime, Pillow, numpy, pypdfium2, python-docx, openpyxl, python-pptx, striprtf.

Model OCR RapidOCR (ONNX) di-download otomatis saat pertama kali dipakai.

2. Daftarkan sebagai MCP server

Tambahkan ke config MCP klien kamu (opencode, Claude Code, dst):

{
  "mcpServers": {
    "ocr": {
      "command": "python",
      "args": ["/path/ke/server.py"],
      "env": { "PYTHONIOENCODING": "utf-8" }
    }
  }
}

3. Selftest (tanpa MCP)

python server.py --selftest                    # buat sample gambar lalu OCR
python server.py --selftest "folder/file"      # test file atau folder

๐Ÿ“– Cara Pakai

Panggil tool dari LLM:

read_document(file_path="C:/Users/.../test-failed-1.png")
read_document(file_path="proposal.pdf")
read_document(file_path="laporan-bug.docx", mode="text", enhance=true)

Param

Nilai

Fungsi

file_path

path lokal / URL http(s) / file://

wajib

mode

auto | text | code

urutan baris OCR (code terbaik utk stack trace)

enhance

true (default)

autocontrast + upscale teks kecil

Hasilnya teks murni + metadata singkat, contoh:

[OCR] pasted-XXXX.png โ€” 1658x605px โ€” 21 baris โ€” avg confidence 0.98 โ€” 18.5s
----------------------------------------------------
Models
# Model Provider Source Input Output ...
1 cx/gpt-5.5 9router Codex 16.5M 685K ...
...

๐Ÿ”— Bonus: Baca gambar yang DI-PASTE langsung di chat

Ada satu masalah unik di opencode: gambar yang di-paste di kolom chat tidak disimpan sebagai file โ€” opencode menyimpannya di database SQLite (opencode.db, tabel part) sebagai base64 data-URL. Model teks-only tidak bisa melihat bytes-nya.

Helper extract-pasted-image.py menjembatani ini:

User paste gambar di chat
        โ”‚
        โ–ผ
[extract-pasted-image.py]  โ”€โ”€โ–บ  ambil gambar terbaru dari opencode.db
        โ”‚                          (base64 โ†’ file temp)
        โ–ผ
[read_document]  โ”€โ”€โ–บ  OCR  โ”€โ”€โ–บ  teks  โ”€โ”€โ–บ  LLM jawab

Pakai

python extract-pasted-image.py
# โ†’ {"paths": ["C:/.../pasted-XXXX.png"], "count": 1}

Lalu OCR hasilnya:

read_document(file_path="C:/.../pasted-XXXX.png")

Opsi:

Flag

Fungsi

--n <N>

ekstrak N gambar terakhir (default 1)

--session <id>

filter session tertentu

--outdir <dir>

folder output (default temp)

--db <path>

lokasi opencode.db (auto-detect)

Butuh Python + stdlib saja (sqlite3, base64, json). Lokasi DB auto-detect dari ~/.local/share/opencode/ lalu ~/.config/opencode/.

Alur kerja agent (otomatis)

  1. User paste gambar โ†’ model dapat error Cannot read image.

  2. Agent jalankan extract-pasted-image.py โ†’ ambil file temp.

  3. Agent panggil read_document(file_path=<hasil>) โ†’ teks.

  4. Agent analisa & jawab. Tanpa minta user simpan manual.


๐Ÿงฉ Struktur Project

Super-MCP-OCR-Deepseek/
โ”œโ”€โ”€ README.md                      โ† dokumentasi ini
โ”œโ”€โ”€ SKILL.md                       โ† skill instruction (untuk agent)
โ”œโ”€โ”€ server.py                      โ† MCP OCR server (inti + read_colors)
โ”œโ”€โ”€ extract-pasted-image.py        โ† helper gambar tempelan opencode
โ”œโ”€โ”€ pyproject.toml                 โ† dependensi
โ””โ”€โ”€ .python-version                โ† versi Python

๐Ÿง  Alur Kerja Teknis (server.py)

  1. _resolve_path โ€” terima path lokal / URL http(s) / file:// โ†’ file lokal.

  2. Routing per ekstensi โ€” gambar โ†’ OCR; pdf โ†’ ekstrak+OCR; office โ†’ ekstrak; teks โ†’ baca.

  3. _ocr_pil (gambar) โ€” pre-process (grayscale + autocontrast + upscale teks kecil) โ†’ RapidOCR ONNX โ†’ susun hasil jadi baris visual (urut y lalu x).

  4. _extract_palette / _read_colors (gambar) โ€” flatten RGBAโ†’RGB โ†’ downscale โ†’ kuantisasi median-cut (PIL) โ†’ cluster warna dominan โ†’ gabung shade dekat โ†’ hitung % area + region.

  5. Confidence filter โ€” buang hasil OCR dengan skor < 0.35.

  6. Output โ€” header metadata + teks murni, siap dianalisa LLM.

Kenapa preprocessing?

  • Teks kecil (< 900px) di-upscale 2โ€“3ร— agar OCR akurat.

  • Gambar raksasa (> 3200px) di-cap agar tidak boros memory.

  • Autocontrast meningkatkan kontras teks di screenshot gelap/terang.


๐Ÿ”ง Troubleshooting

Masalah

Solusi

API Error 500 max instances / 401 Insufficient balance

Masalah kuota gateway model, bukan MCP OCR. Top up saldo, lalu ulangi.

Tool tidak muncul di klien

Restart sesi / mcp reconnect. Cek claude mcp get ocr โ†’ harus Connected.

OCR hasil jelek

Pakai mode="code" untuk stack trace; cek file dinaikkan resolusi.

.doc/.xls tidak terbaca

Simpan ulang sebagai .docx/.xlsx.


๐Ÿ“„ Lisensi

MIT โ€” bebas dipakai, diubah, disebarluaskan.

Dibuat untuk mengaktifkan DeepSeek & LLM teks-only lainnya di ekosistem MCP (opencode, Claude Code, dll).

Related MCP Connectors

Related MCP Servers