🔌 iApp AI MCP Server
Bring Thai AI into the tools you already use. Connect Claude, Claude Code, Cursor, Codex, Windsurf, Antigravity (Gemini) — or any MCP client — to the iApp AI Marketplace: OCR, translation, Thai legal data, LLMs and more, straight from your assistant.
Connect your client
One URL. Sign in. Done. The remote server connects with your iApp account through OAuth — your API key is retrieved automatically on our side. No key to copy, no key to paste.
https://mcp.iapp.co.th
- Claude
- Claude Code
- Cursor
- Codex
- Windsurf
- Antigravity (Gemini)
- Other MCP clients
Name:
iApp AIURL:
https://mcp.iapp.co.thLeave the OAuth fields empty.

One command, then authenticate in the browser:
claude mcp add --transport http iapp-ai https://mcp.iapp.co.th
Run /mcp inside Claude Code and pick iapp-ai → Authenticate — your browser opens the iApp sign-in, and the key links automatically.
Prefer the full 44-tool local server with local-file access? See Local server below.
Settings → Tools & Integrations → New MCP Server, or add to ~/.cursor/mcp.json:
{
"mcpServers": {
"iapp-ai": { "url": "https://mcp.iapp.co.th" }
}
}
Cursor detects OAuth automatically — click Needs login when prompted and sign in with your iApp account.
codex mcp add iapp-ai --url https://mcp.iapp.co.th
codex mcp login iapp-ai
Or in ~/.codex/config.toml:
[mcp_servers.iapp-ai]
url = "https://mcp.iapp.co.th"
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"iapp-ai": { "serverUrl": "https://mcp.iapp.co.th" }
}
}
Refresh plugins in the Cascade panel and complete the sign-in when prompted.
In Google Antigravity, open the Agent panel → MCP servers (plug icon) → Manage MCP servers → View raw config, and add:
{
"mcpServers": {
"iapp-ai": { "serverUrl": "https://mcp.iapp.co.th" }
}
}
Save and refresh — Antigravity opens the iApp sign-in in your browser; approve and the tools appear for Gemini to use.
If your build doesn't complete the sign-in, use the mcp-remote bridge instead:
{
"mcpServers": {
"iapp-ai": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.iapp.co.th"]
}
}
}
Any client that speaks Streamable HTTP + OAuth can use https://mcp.iapp.co.th directly.
For stdio-only or OAuth-incompatible clients, use the mcp-remote bridge — it runs locally, handles the browser sign-in, refreshes tokens, and exposes iApp AI as a normal stdio server:
{
"mcpServers": {
"iapp-ai": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.iapp.co.th"]
}
}
}
Or run the classic local server with an API key — all 44 tools, including local-file OCR.
By default the connector serves iApp's 16 most-used services (21 tools): speech-to-text, text-to-speech, document OCR, Thai law & Supreme Court data (ฎีกา) with grounded legal Q&A, face verification, passive liveness, translation, Thai national ID card OCR, driver licence OCR, passport OCR, Thai holidays, background removal, licence plate recognition, and — new — image, presentation-slide and video generation.
Calls bill your iApp account at normal API prices. File inputs are public http(s) URLs, not local paths — the server runs remotely and cannot read your disk. For local files, run the local server.
Choosing your tools
Every tool definition takes up room in your assistant's context for the whole session, so the connector ships the most-used services rather than everything. Add a query string to the connector URL to change that:
| Connector URL | Tools served |
|---|---|
https://mcp.iapp.co.th | The 16 default services, generation included (recommended) |
https://mcp.iapp.co.th/?tools=all | Everything the remote server offers |
https://mcp.iapp.co.th/?groups=legal | One category only — smallest context |
https://mcp.iapp.co.th/?groups=default,llm | The defaults plus another category |
https://mcp.iapp.co.th/?tools=iapp_translate,iapp_summarize | Exactly the tools you name |
Groups: speech, ocr, identity, face, vision, legal, data, nlp, llm, generation.
A narrow selection is worth it when you know the job — a legal research assistant loading only ?groups=legal spends a fraction of the context of the full set. Unknown names are ignored rather than rejected, so a typo costs you one tool, not the connection.
Why use it
Without MCP, calling an iApp API means writing a script: read the file, build the request, handle the response. With MCP, you describe the outcome and the assistant handles the plumbing — including chaining several APIs together.
Ask "หาฎีกาที่ตีความ ป.อ. มาตรา 335 หลังปี 2560" and the assistant searches real Supreme Court decisions and cites them with verification links. No glue code, no keys pasted into the conversation.
Local server (all 44 tools)
The iapp-mcp package runs locally over stdio — your API key stays on your machine, files are read straight off your disk, and all 44 tools are available including OCR on local files, eKYC, speech, and image/video generation.
claude mcp add iapp-mcp -s user -e IAPP_API_KEY=YOUR_API_KEY -- uvx iapp-mcp
Prerequisites
1. An iApp API key
- Login / Register at iapp.co.th
- Go to API Keys in the control panel
- Click Create New API Key, name it, and create
- Copy the key — it is only shown once
2. A runtime
The server is published on both PyPI and npm — use whichever you prefer.
Python 3.10+
| Package manager | Run without installing | Install permanently |
|---|---|---|
| uv | uvx iapp-mcp | uv tool install iapp-mcp |
| pip | — | pip install iapp-mcp |
Node.js 18+
| Package manager | Run without installing | Install permanently |
|---|---|---|
| npm | npx -y iapp-mcp | npm install -g iapp-mcp |
| yarn | yarn dlx iapp-mcp | yarn global add iapp-mcp |
| pnpm | pnpm dlx iapp-mcp | pnpm add -g iapp-mcp |
The npm package is a thin launcher for the Python server, so uv must be installed either way:
curl -LsSf https://astral.sh/uv/install.sh | sh # or: brew install uv
Setup — Claude Code
Use the claude mcp add CLI. Pick the line matching how you installed, pass your API key with -e, and put -- before the launch command:
# uv / uvx (recommended, nothing to install)
claude mcp add iapp-mcp -s user -e IAPP_API_KEY=YOUR_API_KEY -- uvx iapp-mcp
# npm / npx
claude mcp add iapp-mcp -s user -e IAPP_API_KEY=YOUR_API_KEY -- npx -y iapp-mcp
# already installed permanently (pip / uv tool / npm / yarn / pnpm)
claude mcp add iapp-mcp -s user -e IAPP_API_KEY=YOUR_API_KEY -- iapp-mcp
Scopes
| Flag | Where it applies |
|---|---|
-s user | Every project on this machine (recommended) |
-s project | This repo only, written to a shared .mcp.json your teammates get on clone |
-s local | This project, this machine only (the default if omitted) |
Verify and manage
claude mcp list # should show iapp-mcp as connected
claude mcp remove iapp-mcp # remove it later
You can also run /mcp inside a Claude Code session to see the server and its tools.
Setup — other MCP clients
Claude Desktop, Cursor and others take a JSON config. The server speaks stdio, so any client can launch it:
uv / uvx (recommended):
{
"mcpServers": {
"iapp-mcp": {
"command": "uvx",
"args": ["iapp-mcp"],
"env": { "IAPP_API_KEY": "YOUR_API_KEY" }
}
}
}
npm:
{
"mcpServers": {
"iapp-mcp": {
"command": "npx",
"args": ["-y", "iapp-mcp"],
"env": { "IAPP_API_KEY": "YOUR_API_KEY" }
}
}
}
Permanently installed:
{
"mcpServers": {
"iapp-mcp": {
"command": "iapp-mcp",
"env": { "IAPP_API_KEY": "YOUR_API_KEY" }
}
}
}
You can also run the server directly to check it starts:
IAPP_API_KEY=YOUR_API_KEY iapp-mcp
Tool reference
All 44 tools. File inputs are local file paths; generated files are written to the output_path you specify.
🪪 eKYC
| Tool | What it does | Key inputs |
|---|---|---|
iapp_thai_id_card_ocr | Read data from a Thai national ID card photo | file_path, side (front/back) |
iapp_thai_id_card_photocopy_ocr | Read a photocopied ID card + detect signature | file_path |
iapp_passport_ocr | Read MRZ + personal data from any passport | file_path, segmentation |
iapp_thai_driver_license_ocr | Read a Thai driver license | file_path |
iapp_book_bank_ocr | Read account name/number from a bank book page | file_path |
iapp_face_verification | Check if two face photos are the same person (1:1) | image1_path, image2_path, threshold |
iapp_face_detection | Find face(s) + bounding boxes in a photo | file_path, mode (single/multi) |
iapp_face_liveness | Detect photo-of-photo / screen spoofing | file_path |
iapp_face_id_card_kyc | Match a selfie against the face on an ID card | id_card_path, selfie_path |
iapp_face_recognition | Enroll & search faces in a company database (1:N) | action, company, file_path, name, password |
🔍 Thai Document OCR
| Tool | What it does | Key inputs |
|---|---|---|
iapp_document_ocr | OCR any Thai document | file_path, mode: text / layout / docx |
iapp_receipt_ocr | Extract line items & totals from Thai receipts | file_path, return_ocr |
iapp_credit_card_statement_ocr | Extract transactions from card statements | file_path, return_ocr |
iapp_tax_deduction_certificate_ocr | Read withholding tax certificates (50 ทวิ) | file_path, return_ocr |
iapp_civil_registration_ocr | Read Thai civil registration certificates | file_path, return_ocr |
iapp_resume_ocr | Extract structured data from a resume/CV + AI evaluation | file_path |
iapp_job_description_ocr | Extract structured data from a job description | file_path |
🤖 Large Language Model
| Tool | What it does | Key inputs |
|---|---|---|
iapp_llm_chat | Chat with LLMs hosted on iApp (OpenAI-compatible) | prompt or messages, model: deepseek-chat (default) / deepseek-reasoner / deepseek-v4-flash / deepseek-v4-pro, system_prompt, max_tokens, temperature |
iapp_openthai_legal_chat | Ask Thai legal questions with verifiable มาตรา citations — RAG-grounded over 39 Thai laws, returns the statute sections used (FREE until 24 Aug 2026) | prompt or messages, rag (default true), rag_top_k, rag_inject (user/system), max_tokens, temperature |
iapp_thanoy_legal_qa | Ask Thai legal questions (Thanoy Legal AI) | query |
🌐 Thai NLP
| Tool | What it does | Key inputs |
|---|---|---|
iapp_translate | Translate between 28 languages (Thai-optimized) | text, source_lang, target_lang |
iapp_summarize | Summarize Thai/English text | text, style, language |
iapp_sentiment_analysis | Classify Thai text as positive/neutral/negative | text |
iapp_toxicity_classification | Detect toxic Thai text | text |
iapp_thai_qa | Answer a question from a given Thai document | question, document |
iapp_question_generation | Generate Q&A pairs from Thai text | text |
🎙️ Speech Technology
| Tool | What it does | Key inputs |
|---|---|---|
iapp_speech_to_text | Transcribe audio with speaker diarization | file_path, language (th/en/zh), quality (base/pro) |
iapp_text_to_speech | Synthesize Thai speech and save an audio file | text, output_path, voice, speed |
iapp_voice_clone_tts | Speak any text in a voice cloned from a sample | text, ref_audio_path, ref_text, output_path |
iapp_ai_audio_detection | Check if audio was AI-generated | audio_path |
🖼️ Image & 🎬 Video Generation
| Tool | What it does | Key inputs |
|---|---|---|
iapp_image_generation | Generate an image from text (Google Nano Banana) | prompt, model |
iapp_slide_generation | Generate one finished 16:9 presentation slide | title, content, style, aspect_ratio, image_size |
iapp_slide_deck_generation | Generate a whole deck in one call, slides rendered in parallel | slides[], style, aspect_ratio, image_size |
iapp_remove_background | Remove the background from an image | image_url (remote) / file_path (local) |
iapp_video_generation_submit | Submit an async Seedance video job — returns a task id | prompt, model, duration, ratio, resolution, generate_audio |
iapp_video_generation_status | Poll a video job and get the download URL | task_id |
Image, slide and video generation need a paid iApp account — the free signup bonus does not unlock them. Costs: image 3 IC (nanobanana) or 8 IC (nanobanana-pro), slide 8 IC, video billed per output token (a 5-second 720p clip is roughly 27 IC). Failed video jobs and status polls cost 0 IC.
The local server saves images and slides to an output_path you choose; the remote connector has no access to your disk, so it returns them inline in the conversation.
♻️ Smart City AI & 📊 Thai Data
| Tool | What it does | Key inputs |
|---|---|---|
iapp_license_plate_ocr | Read Thai vehicle license plates from photos | file_path |
iapp_meter_ocr | Read power/water meter values from photos | file_path |
iapp_route_optimization | Optimize delivery routes for multiple drivers (≤100 stops) | origin_address + coordinates, stops, driver_count |
iapp_thai_holidays | Look up Thai public holidays | year, or start_date+end_date, or nothing |
⚖️ Thai Legal Data (statutes + ฎีกา)
| Tool | What it does | Key inputs |
|---|---|---|
iapp_thai_law_list | Catalogue of the 39 indexed Thai laws (free) — call first to get valid law names | q (optional name filter) |
iapp_thai_law_section | Verbatim มาตรา text; optionally the Supreme Court decisions citing it | law, section, with_deka |
iapp_thai_law_search | Semantic statute search from a Thai fact pattern | query, top_k (1–20, default 8) |
iapp_thai_deka_search | Precedent search across 70,634 ฎีกา; filter to decisions citing a section | query, cites_law, cites_section, year_from, top_k |
iapp_thai_deka_get | One ruling by ฎีกา number (1234/2565 or 1234-2565) | case_id, include_body |
iapp_thai_legal_ask | Grounded legal answer with machine-verified citations — never invents a case number | question, include_deka |
→ Full details: Thai Legal Data API/MCP
Usage examples
Once connected — in Claude Code, Claude Desktop, or any other MCP client — just ask in plain Thai or English. No command syntax; the assistant picks the tool.
eKYC
อ่านข้อมูลจากบัตรประชาชนในไฟล์ idcard.jpg
เช็คว่ารูป selfie.jpg กับ idcard.jpg เป็นคนเดียวกันไหม
Extract the MRZ data from passport.jpg
ตรวจว่ารูป face.jpg เป็นภาพถ่ายคนจริงหรือภาพปลอม
Slides, images and video
ทำสไลด์นำเสนอ 5 หน้า เรื่องผลประกอบการไตรมาส 3 พร้อมกราฟรายได้
Make me a 6-slide deck introducing our new product, clean corporate style
สร้างวิดีโอ 5 วินาที ภาพตลาดน้ำตอนเช้า มีหมอกบาง ๆ กล้องเคลื่อนช้า ๆ
Generate a 10-second 720p video of a tuk-tuk driving through Bangkok at night
Ask for a deck and the assistant calls iapp_slide_deck_generation once with all the slides — they render in parallel, so a six-slide deck takes about as long as a single slide instead of six times as long. iapp_slide_generation remains for one-off slides. Ask for a video and it calls iapp_video_generation_submit, which returns a task id immediately, then polls iapp_video_generation_status every few seconds until the render finishes and hands you the download URL.
That two-step split is deliberate: a render takes 30 seconds to 4 minutes, which is long enough that a single blocking call would time out in most MCP clients. Submitting and polling keeps the conversation responsive, and lets you go and do something else while it renders.
Three things dominate the time, in this order:
- One call per slide. Each render is 15-30 seconds and the assistant waits for one before starting the next, so six slides serialise into several minutes.
iapp_slide_deck_generationrenders up to 8 slides concurrently in a single call — usually the difference between ~3 minutes and ~30 seconds. - Re-doing rejected slides. A slide that comes back with overlapping text gets thrown away and rebuilt, paying for the render twice. The tools now instruct the model to keep 6% margins, cap bullets, and shorten rather than crowd — and to omit speaker-notes panels, which was the most common collision.
- Image size. Pass
image_size: "1K"while iterating: it renders faster and returns a quarter of the bytes, which also keeps your assistant's context small. Switch to2Kfor the final render.
Pick the right tool for the content. These are generative images, so they are excellent for title, concept and marketing slides — and the wrong choice for a dense financial table where every figure must be exact. For those, have your assistant render natively (pptx or HTML to PNG); generating one and then correcting it costs more time than building it correctly once.
A finished video's download URL is valid for about 24 hours. Ask the assistant to download it, or save it yourself before then.
Documents
OCR ใบเสร็จ receipt.jpg แล้วรวมยอดให้หน่อย
แปลงเอกสารสแกนนี้เป็นไฟล์ Word
สกัดข้อมูลจาก resume.pdf แล้วประเมินความเหมาะสมกับตำแหน่ง
อ่านหนังสือรับรองหักภาษี ณ ที่จ่าย (50 ทวิ) ไฟล์นี้
Speech and language
ถอดเสียงไฟล์ประชุม meeting.wav พร้อมระบุว่าใครพูด
อ่านข้อความนี้เป็นเสียงพูดด้วยเสียงไข่ต้ม เซฟเป็น speech.wav
แปลข้อความนี้เป็นภาษาญี่ปุ่น
วิเคราะห์ว่ารีวิวลูกค้าพวกนี้เป็นบวกหรือลบ
LLM and legal
ถาม Chinda Thai LLM ว่า ส้มตำมีกี่แคลอรี่
ใช้ DeepSeek V4 Flash ช่วยจัดหมวดหมู่ข้อความลูกค้าพวกนี้
ถามทนอย: สัญญาเช่าบ้านไม่มีลายเซ็นพยานมีผลไหม
Creative and smart city
สร้างรูปแมวใส่ชุดไทยนั่งริมเจ้าพระยา เซฟเป็น cat.png
Generate a 5-second video of a cat surfing at sunset
จัดเส้นทางส่งของ 20 จุดนี้ให้คนขับ 3 คน เริ่มจากคลังสินค้า
อ่านป้ายทะเบียนรถจากภาพกล้องวงจรปิด cctv.jpg
Thai Legal Data
ขอตัวบท ป.อ. มาตรา 335 พร้อมฎีกาที่เกี่ยวข้อง
หาฎีกาที่ตีความ ป.อ. มาตรา 335 หลังปี 2560
ลักทรัพย์ในเวลากลางคืนมีโทษอย่างไร ตอบแบบอ้างอิงได้
Notes and limits
- Local file paths. File-based tools take paths on your machine; generated audio, images and video are written to the
output_pathyou name. - Credits. Most tools consume iApp credits (IC) per call. Each tool's description documents its cost. Chinda Thai LLM 4B is free.
- Seedance video generation requires a paid account — any IC package purchase unlocks it.
- Context stays small. Large base64 blobs in API responses (cropped face images, for example) are truncated in tool output.
- Runtimes. Python 3.10+ or Node.js 18+.
Troubleshooting
| Symptom | Fix |
|---|---|
Old iapp-mcp (local) shows failed — common on Windows | The classic stdio server needs uv installed. Easiest fix: switch to the remote server — claude mcp remove iapp-mcp then claude mcp add --transport http iapp-ai https://mcp.iapp.co.th (no uv, no API key needed). Or install uv and keep the local server |
iapp-ai (remote) shows Needs authentication | That's expected right after adding — run /mcp → iapp-ai → Authenticate and sign in |
claude mcp list shows the server as failed | Check uv is installed and on your PATH — run uvx iapp-mcp directly to see the error |
| Authentication errors on every tool | The IAPP_API_KEY value is wrong or expired. Re-add with the correct key, or check API Keys in the control panel |
| Server missing in a different project | You installed with the default -s local scope. Re-add with -s user |
| Insufficient credits (HTTP 402) | Top up in the control panel; check per-tool costs on the pricing page |
| Video generation rejected | Seedance requires a paid account — purchase any IC package to unlock |
Prefer to write code?
If you are calling iApp APIs from your own Python program rather than through an assistant, use the SDK instead:
from iapp_ai import api
client = api("YOUR_API_KEY")
resp = client.idcard_front("id.jpg") # returns requests.Response
print(resp.json())
pip install iapp-ai
Both packages share the same iapp-core foundation, so behaviour and error handling are identical.
Links
- Announcement: iApp AI 2.0 — new packages and an MCP server
- GitHub: github.com/iapp-technology/iapp_ai
- PyPI: iapp-mcp · iapp-ai · iapp-core
- npm: iapp-mcp
- Support: support@iapp.co.th · Discord