Yapay zekâ ajanları için pasaport OCR MCP sunucusu

Bir asistana pasaport, kimlik kartı veya seyahat belgesi okuma yeteneği kazandırın – ve karşılığında bir metin yığını değil, yapılandırılmış alanlar alsın. Sunucu Model Context Protocol'ü iki yolla konuşur: npm'den kurulup istemcinizce bir komut olarak başlatılan stdio ile ya da mcp.doc.cheap üzerinde barındırılan Streamable HTTP ile. Her iki durumda da herkese açık HTTP API'sinin ince bir istemcisidir: kendine ait hiçbir veri tutmaz.

npx -y @doc-cheap/mcp

npm'de @doc-cheap/mcp olarak, resmî MCP kayıt defterinde cheap.doc/mcp olarak yayımlanmıştır; kaynak kodu: GitLab'daki herkese açık yansı.

Listelendiği yerler: resmî MCP kayıt defteri, Smithery, cursor.directory, npm.

Ajanınıza neler döner

Asıl önemli fark şu. Bir sayfa metin döndüren bir OCR aracı, modele yeniden ayrıştıracağı bir şey verir; bir tarihi yeniden ayrıştırması istenen bir model de er geç bir tarih uydurur. Bu araç alanları zaten ayrılmış olarak döndürür:

  • Hamil: adlar, soyadı, doğum tarihi, cinsiyet, uyruk.
  • Belge: tür, ülke, düzenleyen devlet, numara, seri, düzenlenme tarihi, son geçerlilik tarihi, süresinin dolup dolmadığı ve kaç gün kaldığı.
  • Bulunan her alan, her biri kendi güven düzeyiyle, makinede okunabilir bölgeden (MRZ) ve basılı görsel bölgeden ayrı ayrı okunmuş olarak – böylece model iki okumanın uyuştuğunu varsaymak yerine görebilir.
  • Bir hükümle birlikte makinede okunabilir bölge: geçti, başarısız ya da yok; nedeni ve satırların kendisiyle.
  • Asistanın çalışırken size gösterebileceği tek satırlık bir özet.

Hatalar sessiz, boş bir sonuç olarak değil, bir hata bloğunda okunabilir tek bir satır olarak döner: asistan buna göre davranabilir ve bunu size gösterebilir. API'den gelen bir ret, API'nin kendi ifadesini, hata kodunu ve onu açıklayan sayfanın bağlantısını korur.

İstemcinize kurun

Claude Desktop

claude_desktop_config.json

{
  "mcpServers": {
    "doc-cheap": {
      "command": "npx",
      "args": [
        "-y",
        "@doc-cheap/mcp"
      ],
      "env": {
        "DOC_CHEAP_API_KEY": "sk_live_your_key"
      }
    }
  }
}

Claude Code

tek bir komut, proje dizininden

claude mcp add-json doc-cheap '{"command":"npx","args":["-y","@doc-cheap/mcp"],"env":{"DOC_CHEAP_API_KEY":"sk_live_your_key"}}'

Cursor

~/.cursor/mcp.json ya da bir projede .cursor/mcp.json

{
  "mcpServers": {
    "doc-cheap": {
      "command": "npx",
      "args": [
        "-y",
        "@doc-cheap/mcp"
      ],
      "env": {
        "DOC_CHEAP_API_KEY": "sk_live_your_key"
      }
    }
  }
}

VS Code

.vscode/mcp.json – dikkat: mcpServers altında değil, servers altında yer alır

{
  "servers": {
    "doc-cheap": {
      "command": "npx",
      "args": [
        "-y",
        "@doc-cheap/mcp"
      ],
      "type": "stdio",
      "env": {
        "DOC_CHEAP_API_KEY": "sk_live_your_key"
      }
    }
  }
}

Gemini CLI

~/.gemini/settings.json

{
  "mcpServers": {
    "doc-cheap": {
      "command": "npx",
      "args": [
        "-y",
        "@doc-cheap/mcp"
      ],
      "env": {
        "DOC_CHEAP_API_KEY": "sk_live_your_key"
      }
    }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "doc-cheap": {
      "command": "npx",
      "args": [
        "-y",
        "@doc-cheap/mcp"
      ],
      "env": {
        "DOC_CHEAP_API_KEY": "sk_live_your_key"
      }
    }
  }
}

Kiro

çalışma alanında .kiro/settings/mcp.json ya da ~/.kiro/settings/mcp.json

{
  "mcpServers": {
    "doc-cheap": {
      "command": "npx",
      "args": [
        "-y",
        "@doc-cheap/mcp"
      ],
      "disabled": false,
      "autoApprove": [
        "check_balance",
        "search_docs"
      ],
      "env": {
        "DOC_CHEAP_API_KEY": "sk_live_your_key"
      }
    }
  }
}

Kiro, tek tıkla

İstemcinin kendi kurulum bağlantısı. Bir şey yazmadan önce onay ister ve komutu ile argüman listesini gösterir.

Kiro'ya ekle

  • Bloğu ekledikten sonra istemciyi yeniden başlatın. Sunucuyu istemci başlatır; bu yüzden değişen bir yapılandırmayı ve değişen bir ortamı ancak yeniden başlatıldığında alır.
  • DOC_CHEAP_API_KEY olmadan sunucu herkese açık sandbox anahtarına geri döner: taramalar bu anahtarın ücretsiz hakkı içinde çalışır ve bildirilecek bir bakiye olmaz. Çalıştığını görmenin en hızlı yolu budur.
  • İsteğe bağlı ayarlar: DOC_CHEAP_DOCS_BASE (arama sonuçlarının bağlantı verdiği yer), DOC_CHEAP_DOCS_DIR (dokümantasyonun hangi kopyasında aranacağı) ve DOC_CHEAP_IMAGE_ROOT (aşağıdaki korumalara bakın).

Ya da barındırılan sunucuya bağlanın

Aynı üç araç https://mcp.doc.cheap/mcp adresinde Streamable HTTP üzerinden barındırılır; böylece bir URL'ye bağlanan bir istemcinin hiçbir şey kurmasına gerek kalmaz. Oturum açma yok: anahtarınızı X-Doc-Cheap-Api-Key ya da Authorization: Bearer olarak gönderin (ikisi birden gönderilirse adlandırılmış başlık geçerli olur) ya da hiç göndermeyin; bu durumda herkese açık sandbox anahtarı kullanılır. Barındırılan sunucu makinenizdeki dosyaları okuyamaz; bu yüzden görüntüyü base64 ya da bir https URL'si olarak alır.

https://mcp.doc.cheap/mcp

Claude Code

tek bir komut

claude mcp add --transport http doc-cheap https://mcp.doc.cheap/mcp --header "Authorization: Bearer sk_live_your_key"

Cursor

~/.cursor/mcp.json

{
  "mcpServers": {
    "doc-cheap": {
      "url": "https://mcp.doc.cheap/mcp",
      "headers": {
        "Authorization": "Bearer sk_live_your_key"
      }
    }
  }
}

VS Code

.vscode/mcp.json

{
  "servers": {
    "doc-cheap": {
      "type": "http",
      "url": "https://mcp.doc.cheap/mcp",
      "headers": {
        "Authorization": "Bearer sk_live_your_key"
      }
    }
  }
}

Claude Desktop ve claude.ai içinde Settings, Connectors altında, özel bir bağlayıcı olarak https://mcp.doc.cheap/mcp URL'siyle ekleyin; anahtar olmadan sandbox anahtarıyla çalışır.

Üç araç

MCP sunucusunun yayımladığı üç araç
AraçNe yaparNe döndürürBildirdiği davranış
scan_document Recognise a passport or ID documentBir belge görüntüsünü tanırYapılandırılmış sonucun tamamı ve tek satırlık özetSalt okunur değildir: bir kredi düşebilir. Yıkıcı değildir. Bir idempotency anahtarı gönderdiğinizde, ve yalnızca o zaman, idempotenttir. Açık dünya: yanıt uzak bir hizmetten gelir.
check_balance Check remaining creditsHesabın kullanımını okurBakiye ve bu dönemin sayaçlarıSalt okunur ve açık dünya: rakamlar hesabın canlı durumudur.
search_docs Search the doc.cheap API documentationDokümantasyonda arama yaparBaşlıkları, bağlantıları ve alıntılarıyla eşleşen bölümler – çevrimdışıSalt okunur ve kapalı dünya: derlem, sunucuyla birlikte gelen dokümantasyon kopyasıdır; böylece aynı sorgu hiçbir ağ olmadan aynı yanıtı verir.
  • scan_document görüntüyü image_base64, image_path veya image_url olarak alır ve doğrudan bir çağrının aldığı seçeneklerin aynısını kabul eder; bunlar arasında expect_country, return_portrait, reference ve idempotency_key vardır.
  • search_docs, sunucuyla birlikte gelen dokümantasyon kopyasını okur; bu yüzden hiçbir ağ olmadan yanıt verir. Bu da ajanın alan sözlüğüne veya bir hata koduna bir çağrı harcamadan bakabileceği anlamına gelir.
  • check_balance arkasında bir hesap olan bir anahtar gerektirir. Herkese açık sandbox anahtarıyla, okunmuş bir değer gibi görünen sıfırlarla yanıt vermek yerine bakiye olmadığını açıkça söyler.
  • Her araç bir çıktı şeması bildirir ve ona uyan yapılandırılmış içerik döndürür; böylece bir ajan alanları metin ayrıştırmadan kullanabilir.
  • Dokümantasyonun her sayfası aynı zamanda ajanın okuyabileceği bir kaynaktır; dört prompt da – bir belgeyi JSON'a okumak, bir son geçerlilik tarihini kontrol etmek, bir partiyi taramak, bir hata kodunu açıklamak – yaygın işleri tek adımda başlatır.

Ne kadar tutar

Tanınan belge başına $0.01. Sabit fiyat, her hesap için, her hacimde – tek bir rakam ve pazarlık edilecek hiçbir şey yok. Bir belge yalnızca tanındığında ücretlendirilir: hiçbir şey bulamayan, görüntüyü okuyamayan veya türü belirleyemeyen bir tarama hükmünü bildirir ve hiçbir ücret doğurmaz. Her sonuç hangisi olduğunu söyler; böylece ajan da siz de o çağrının bir şey harcayıp harcamadığını her zaman bilirsiniz.

Hesabınız olmadan önce: herkese açık sandbox anahtarı IP adresi başına toplam 10 ücretsiz tanınan belge çalıştırır; yanıt ne olursa olsun saatte en fazla 10 istek. Kayıt olmak 20 kredi daha ekler. Bir kredi bir senttir, bir sent de bir belgedir.

Tanıma, üretimde medyan olarak yaklaşık 275 ms sürer ve her sonuç kendi süre bilgisini taşır; böylece bir ajan döngüsü gerçek bir rakama göre bütçe yapabilir.

Sunucu neyi bildirir

Sunucu varsayılan olarak hiçbir yere hiçbir şey bildirmez: hata raporlama, bir raporlama uç noktasını kendiniz ayarlamadığınız sürece kapalıdır ve uç nokta olmadan izleme kütüphanesi hiç yüklenmez bile.

Bilmeye değer iki koruma

Sunucu makinenizde sizin yetkilerinizle çalışır ve argümanlarını bir model seçer. Bu yüzden bunlardan ikisi sınırlandırılmıştır:

Yerel dosyalar, bir dizine izin verene kadar kapalıdır

image_path, DOC_CHEAP_IMAGE_ROOT bir dizin belirtene kadar hiçbir şey yapmayı reddeder ve asistana bunun yerine image_base64 göndermesini söyler. Değişken ayarlandığında, kapsama kontrolünden önce hem dizin hem de istenen dosya sembolik bağlantılar izlenerek çözümlenir; bir .. parçası da dışarıyı gösteren bir bağlantı da reddedilir ve göreli bir yol, istemcinin süreci nereden başlattığına değil, o dizine göre ele alınır. Kök dizinin dışındaki bir yol ile var olmayan bir yol aynı mesajı verir – her biri için farklı bir mesaj, makinenizdeki herhangi bir yol için “bu dosya var mı?” sorusunu yanıtlamış olurdu.

Uzak görüntüler herkese açık https olmalıdır

image_url sunucu tarafından indirilir; bu yüzden şema https: olmalı ve ana makine yalnızca herkese açık internet adreslerine çözümlenmelidir: loopback, özel, link-local, operatör düzeyinde NAT (CGNAT), multicast ve ayrılmış aralıklar, IPv6 eşlemeli yazımları da dahil olmak üzere reddedilir. Herkese açık olmayan tek bir yanıt URL'nin tamamını reddettirir. Yönlendirmeler elle, en fazla üç adım izlenir ve her adım yeniden kontrol edilir. Gövde 25 MB ile sınırlıdır; boyut bir başlığa güvenilerek değil, veri geldikçe sayılarak ölçülür.

image_base64 bu kısıtlamaların hiçbirini taşımaz, çünkü çağıran taraf baytlara zaten sahiptir; yukarıdaki her ret de bu yüzden onu işaret eder.

Rehberi okuyun