iApp AI MCP Server
The iApp AI MCP server gives Claude, Cursor, Codex and any other MCP client the iApp APIs as tools: OCR, eKYC, speech, translation, Thai legal data, and image, slide and video generation. Add this URL to your client and sign in with your iApp account. OAuth links your API key on our side, so there is no key to copy; calls bill your credits at the normal API price.
https://mcp.iapp.co.th
Connect your client
- Claude
- Claude Code
- Cursor
- Codex
- Windsurf
- Antigravity (Gemini)
- Other MCP clients
- In Claude Desktop or claude.ai, open Settings → Connectors.
- Click Add custom connector. Name:
iApp AI. URL:https://mcp.iapp.co.th. Leave the OAuth fields empty. - Click Connect, sign in with your iApp account and approve.
-
Add the server:
claude mcp add --transport http iapp-ai https://mcp.iapp.co.th -
Run
/mcpin Claude Code, pick iapp-ai → Authenticate and sign in in the browser.
-
Open Settings → Tools & Integrations → New MCP Server, or add this to
~/.cursor/mcp.json:{
"mcpServers": {
"iapp-ai": { "url": "https://mcp.iapp.co.th" }
}
} -
Click Needs login when Cursor asks, and sign in with your iApp account.
-
Add the server, or put the same in
~/.codex/config.toml:codex mcp add iapp-ai --url https://mcp.iapp.co.th[mcp_servers.iapp-ai]
url = "https://mcp.iapp.co.th" -
Sign in:
codex mcp login iapp-ai
-
Add this to
~/.codeium/windsurf/mcp_config.json:{
"mcpServers": {
"iapp-ai": { "serverUrl": "https://mcp.iapp.co.th" }
}
} -
Refresh plugins in the Cascade panel and sign in when asked.
-
In the Agent panel, open MCP servers (the plug icon) → Manage MCP servers → View raw config, and add:
{
"mcpServers": {
"iapp-ai": { "serverUrl": "https://mcp.iapp.co.th" }
}
} -
Save and refresh, then approve the iApp sign-in that opens in your browser.
-
If the sign-in does not complete, use the
mcp-remoteconfiguration under Other MCP clients.
-
A client that supports Streamable HTTP and OAuth uses
https://mcp.iapp.co.thdirectly. -
A stdio-only client, or one without OAuth, runs the
mcp-remotebridge, which handles the browser sign-in and refreshes the token:{
"mcpServers": {
"iapp-ai": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.iapp.co.th"]
}
}
} -
To read files from your own disk, run the local server instead.
Then ask in Thai or English; the assistant picks the tool:
หาฎีกาที่ตีความ ป.อ. มาตรา 335 หลังปี 2560
แปลข้อความนี้เป็นภาษาญี่ปุ่น
Make me a 6-slide deck introducing our new product, clean corporate style
Generate a 10-second 720p video of a tuk-tuk driving through Bangkok at night
Choosing the tools
By default the connector serves the most-used services: speech-to-text, text-to-speech, document OCR, Thai law, Supreme Court, Council of State and Administrative Court data with grounded legal Q&A, face verification, passive liveness, translation, Thai ID card, driver licence and passport OCR, Thai holidays, background removal, licence plate recognition, and image, slide and video generation. File inputs are public http(s) URLs, because the server runs remotely and cannot read your disk.
Every tool definition takes space in your assistant's context for the whole session. To serve a different set, add a query string to the URL; an unknown name is skipped, not rejected.
https://mcp.iapp.co.th/?tools=all: every tool on the remote serverhttps://mcp.iapp.co.th/?groups=legal: one group, the smallest contexthttps://mcp.iapp.co.th/?groups=default,llm: the defaults plus one grouphttps://mcp.iapp.co.th/?tools=iapp_translate,iapp_summarize: only the tools you name
Groups: speech, ocr, identity, face, vision, legal, data, nlp, llm, generation.
Local server
The iapp-mcp package runs on your machine over stdio with your own API key. Use it to read local files and to reach every tool. It needs:
-
An API key: log in, open API Keys in the control panel and click Create New Key. The key is shown once.
-
uv (Python 3.10+). The npm package (Node.js 18+) launches the same Python server, so uv is needed either way:
curl -LsSf https://astral.sh/uv/install.sh | sh # or: brew install uv
- uvx (recommended)
- npx
-
Claude Code:
claude mcp add iapp-mcp -s user -e IAPP_API_KEY=YOUR_API_KEY -- uvx iapp-mcp -
Claude Desktop, Cursor and other clients with a JSON config:
{
"mcpServers": {
"iapp-mcp": {
"command": "uvx",
"args": ["iapp-mcp"],
"env": { "IAPP_API_KEY": "YOUR_API_KEY" }
}
}
}
-
Claude Code:
claude mcp add iapp-mcp -s user -e IAPP_API_KEY=YOUR_API_KEY -- npx -y iapp-mcp -
Claude Desktop, Cursor and other clients with a JSON config:
{
"mcpServers": {
"iapp-mcp": {
"command": "npx",
"args": ["-y", "iapp-mcp"],
"env": { "IAPP_API_KEY": "YOUR_API_KEY" }
}
}
}
In Claude Code, -s user adds the server to every project on this machine, -s project writes a shared .mcp.json for the repository, and the default -s local covers this project on this machine only. claude mcp list should show it as connected.
Install permanently instead
Install it with one of these:
uv tool install iapp-mcp # or: pip install iapp-mcp
npm install -g iapp-mcp # or: yarn global add iapp-mcp, or: pnpm add -g iapp-mcp
yarn dlx iapp-mcp and pnpm dlx iapp-mcp run it without installing. Once installed, launch it as iapp-mcp:
claude mcp add iapp-mcp -s user -e IAPP_API_KEY=YOUR_API_KEY -- iapp-mcp
{
"mcpServers": {
"iapp-mcp": {
"command": "iapp-mcp",
"env": { "IAPP_API_KEY": "YOUR_API_KEY" }
}
}
}
To check that it starts:
IAPP_API_KEY=YOUR_API_KEY iapp-mcp
Tool reference
On the local server, file inputs are paths on your machine and generated files are written to the output_path you name; on the remote connector, inputs are public URLs and images and slides come back in the conversation. Each tool's description states its price in IC, and large base64 fields in a response are truncated to keep the context small.
eKYC
| Tool | What it does | Key inputs |
|---|---|---|
iapp_thai_id_card_ocr | Reads a Thai national ID card | file_path, side (front/back) |
iapp_thai_id_card_photocopy_ocr | Reads a photocopied ID card and detects the signature | file_path |
iapp_passport_ocr | Reads the MRZ and personal data of any passport | file_path, segmentation |
iapp_thai_driver_license_ocr | Reads a Thai driver licence | file_path |
iapp_book_bank_ocr | Reads the account name and number from a bank book | file_path |
iapp_face_verification | Checks whether two face photos are the same person (1:1) | image1_path, image2_path, threshold |
iapp_face_detection | Finds faces and their bounding boxes | file_path, mode (single/multi) |
iapp_face_liveness | Detects photo-of-photo and screen spoofing | file_path |
iapp_face_id_card_kyc | Matches a selfie against the face on an ID card | id_card_path, selfie_path |
iapp_face_recognition | Enrols and searches 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 for any Thai document | file_path, mode: text / layout / docx |
iapp_receipt_ocr | Line items and totals from Thai receipts | file_path, return_ocr |
iapp_credit_card_statement_ocr | Transactions from card statements | file_path, return_ocr |
iapp_tax_deduction_certificate_ocr | Withholding tax certificates (50 ทวิ) | file_path, return_ocr |
iapp_civil_registration_ocr | Thai civil registration certificates | file_path, return_ocr |
iapp_resume_ocr | Structured data from a resume, with an AI evaluation | file_path |
iapp_job_description_ocr | Structured data from a job description | file_path |
Large language models
| 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 | Thai legal answers that return the statute sections they cite; 0.01 / 0.02 IC per 1K input / output tokens | prompt or messages, rag (default true), rag_top_k, rag_inject (user/system), max_tokens, temperature |
iapp_thanoy_legal_qa | Thai legal questions (Thanoy Legal AI) | query |
Thai NLP
| Tool | What it does | Key inputs |
|---|---|---|
iapp_translate | Translates between 28 languages | text, source_lang, target_lang |
iapp_summarize | Summarises Thai or English text | text, style, language |
iapp_sentiment_analysis | Classifies Thai text as positive, neutral or negative | text |
iapp_toxicity_classification | Detects toxic Thai text | text |
iapp_thai_qa | Answers a question from a given Thai document | question, document |
iapp_question_generation | Generates question-answer pairs from Thai text | text |
Speech
| Tool | What it does | Key inputs |
|---|---|---|
iapp_speech_to_text | Transcribes audio and labels the speakers | file_path, language (th/en/zh), quality (base/pro) |
iapp_text_to_speech | Speaks Thai text and saves an audio file | text, output_path, voice, speed |
iapp_voice_clone_tts | Speaks text in a voice cloned from a sample | text, ref_audio_path, ref_text, output_path |
iapp_ai_audio_detection | Checks whether audio was AI-generated | audio_path |
Image, slide and video generation
| Tool | What it does | Key inputs |
|---|---|---|
iapp_image_generation | Generates an image from text | prompt, model |
iapp_slide_generation | Generates one finished 16:9 slide | title, content, style, aspect_ratio, image_size |
iapp_slide_deck_generation | Generates a whole deck in one call, up to 8 slides at once | slides[], style, aspect_ratio, image_size |
iapp_remove_background | Removes the background from an image | image_url (remote) / file_path (local) |
iapp_video_generation_submit | Starts a Seedance video job and returns a task id | prompt, model, duration, ratio, resolution, generate_audio |
iapp_video_generation_status | Polls a video job and returns the download URL | task_id |
- Image, slide and video generation need a paid account; the free sign-up bonus does not unlock them. Any IC package purchase unlocks video.
- Image 3 IC (
nanobanana) or 8 IC (nanobanana-pro); slide 8 IC; video per output token, about 27 IC for a 5-second 720p clip. Failed video jobs and status polls cost 0 IC. - A slide renders in 15 to 30 seconds. A video takes 30 seconds to 4 minutes, so it is submitted, then polled; its download URL is valid for about 24 hours.
- Pass
image_size: "1K"while iterating on slides and2Kfor the final render. Generated slides suit title and concept slides, not a table where every figure must be exact.
Smart city and Thai data
| Tool | What it does | Key inputs |
|---|---|---|
iapp_license_plate_ocr | Reads Thai vehicle licence plates | file_path |
iapp_meter_ocr | Reads power and water meter values | file_path |
iapp_route_optimization | Plans delivery routes for several drivers, up to 100 stops | origin_address + coordinates, stops, driver_count |
iapp_thai_holidays | Looks up Thai public holidays | year, or start_date + end_date, or nothing |
Thai legal data
| Tool | What it does | Key inputs |
|---|---|---|
iapp_thai_law_list | The catalogue of laws, free; call it first for valid law names | q (optional name filter) |
iapp_thai_law_section | A section's verbatim text, optionally with 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 133,159 ฎีกา documents, filterable by the section cited | 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 | A grounded answer with machine-verified citations; never invents a case number | question, include_deka |
iapp_thai_krisdika_opinion_search | Council of State opinions by subject, linking the official PDF | query, top_k |
iapp_thai_admincourt_search | Administrative Court decisions by subject, parties or case number, linking the official PDF | query, court, top_k |
Full details: Thai Legal Data API/MCP.
Troubleshooting
iapp-ai shows Needs authentication
This is expected right after adding it: run /mcp, pick iapp-ai → Authenticate and sign in.
The local iapp-mcp shows failed, often on Windows
It needs uv on your PATH; run uvx iapp-mcp to see the error. Or switch to the remote server, which needs neither uv nor a key: claude mcp remove iapp-mcp, then claude mcp add --transport http iapp-ai https://mcp.iapp.co.th.
Every tool returns an authentication error
The IAPP_API_KEY value is wrong or expired; re-add the server with a key from API Keys in the control panel.
The server is missing in another project
It was added with the default -s local scope; re-add it with -s user.
HTTP 402, insufficient credits
Top up in the control panel; each tool's price is on the pricing page. Video generation is rejected until the account is paid.
Links
- Source: GitHub · PyPI iapp-mcp, iapp-ai, iapp-core · npm iapp-mcp
- Python SDK, to call the APIs from your own code rather than through an assistant:
pip install iapp-ai - Announcement: iApp AI 2.0: new packages and an MCP server
- Support: support@iapp.co.th · Discord