Arabic Pipeline API

io.github.skypantherrPublished by GitHub account skypantherrv0.2.0Updated Oct 31, 2026

Pay-per-call Arabic text, audio and document utilities over x402. USDC on Base, no API key.

VerifiedStreamable HTTPWeb executableFiles & StorageAI & ML

Overview

AI-generated overview

Remote MCP server offering pay-per-call Arabic text, audio transcription and document extraction tools, billed in USDC on Base with no API key.

What you can do
  • Measure text: character, word, sentence and reading-time stats plus Arabic/Latin language mix
  • Normalise Arabic text for search or indexing, detect Arabic/English/mixed language, and split long text into chunks with exact offsets
  • Compare two texts word by word and search text with normalisation, whole-word, phrase or fuzzy matching
  • Transcribe Arabic or English audio sent as base64 into plain text
  • Extract structured fields such as amounts, dates, names and tax numbers from Arabic document images or PDFs, one at a time or in batches of up to five
When to use it
Useful when an assistant has to handle Arabic content where diacritics, letter variants and Arabic-Indic digits break naive matching, or when it needs Arabic speech transcription or field extraction from receipts, invoices and IDs without setting up its own models.
Requirements
Nothing to install: it is a remote streamable HTTP endpoint. No API key, account or subscription is needed. Each tool call must be paid in USDC on Base mainnet through the x402 flow, so the client needs a funded wallet and x402 payment support. Audio and document tools take base64 payloads up to 12 MB.
Before you install
Every tool call spends real money in USDC on Base, from $0.002 for text tools up to $0.10 for a document batch, and payments settle to the provider's wallet. The client must sign payments, so wallet credentials are involved. Audio and document contents are sent to the remote service and processed by third-party models. Text and document data leave the user's machine.

Installation

In SourceWeft

  1. Open Arabic Pipeline API in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.skypantherr%2Farabic-pipeline/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "arabic-pipeline-api": {
      "type": "http",
      "url": "https://arabic-pipeline-mcp.arabic-pipeline.workers.dev/"
    }
  }
}

README

Arabic Pipeline API

[Arabic Pipeline API MCP server]

Pay-per-call utilities for Arabic text, audio and documents, sold over x402 in USDC on Base.

No API key. No account. No subscription. The first request returns 402 Payment Required; the client signs a payment and retries; the money lands in the provider's wallet. That is the whole protocol — and it is why this service can pay a provider directly, with no payment processor in between.

bash
# Claude Code (any Streamable HTTP MCP client works the same way)claude mcp add --scope user --transport http arabic-pipeline-mcp \  https://arabic-pipeline-mcp.arabic-pipeline.workers.dev/

No install, no key: the tools are already on the other end. A tool call without payment answers with the x402 challenge, and your client pays it on Base.

Live endpoints

URL
REST APIhttps://arabic-pipeline.arabic-pipeline.workers.dev
MCP server (streamable HTTP)https://arabic-pipeline-mcp.arabic-pipeline.workers.dev/
OpenAPIhttps://arabic-pipeline.arabic-pipeline.workers.dev/openapi.json
x402 manifest (/.well-known/x402)https://arabic-pipeline.arabic-pipeline.workers.dev/.well-known/x402
llms.txt (agent-readable summary)https://arabic-pipeline.arabic-pipeline.workers.dev/llms.txt
x402scanhttps://www.x402scan.com/server/298e1e2b-3f5c-4890-9791-6d063fd20931
mcprush (MCP marketplace)https://mcprush.com/skypantherr/arabic-pipeline-api-mcp
PayAPI Market (settlement-verified listing)https://payapi.market/api/arabic-pipeline-api
MCP registryio.github.skypantherr/arabic-pipeline (v0.2.0, active)
Sourcehttps://github.com/skypantherr/arabic-pipeline

The MCP server exposes the same nine capabilities as tools, each behind its own x402 payment (text_metrics, text_normalize, text_detect_language, text_chunk, text_diff, text_search, audio_transcribe, doc_extract, doc_extract_batch).

Why not a generic text tool

Arabic breaks naive string handling in ways that are invisible until they cost you a failed match:

  • Tashkeel — فَاطِمَة and فاطمة are the same name, but not the same bytes.
  • Letter variants — أ إ آ → ا, ى → ي, ة → ه are folded on purpose, not by accident.
  • Arabic-Indic digits — ١٢٣ must match 123, and the tashkeel range overlaps the digit range, so order of operations matters.
  • Bidi control characters — LRM/RLM and zero-width joiners are invisible, and strip "clean" text unless removed deliberately.
  • Offsets — every text tool returns start/end into the original string, so a result can be applied to the caller's own text rather than a rewritten copy.

The paid routes declare this in the 402 itself: each challenge carries a Bazaar input schema and an output example, so a client can see exactly what it is buying before it signs anything.

Endpoints

RouteWhat it doesPriceCost to serve
GET /text/metrics?text=…Counts, language mix, sentence/word stats, reading time$0.002$0 (pure code)
POST /text/metricsSame, JSON body$0.002$0 (pure code)
POST /text/normalizeArabic text cleanup: tashkeel/tatweel, alef/ya/ta-marbuta folding, digit unification, bidi-control removal, whitespace collapse$0.005$0 (pure code)
POST /text/detectArabic / English / mixed detection with confidence and script mix$0.002$0 (pure code)
POST /text/chunkSentence-aligned chunks with exact offsets, for model context windows$0.002$0 (pure code)
POST /text/diffWord-level diff after Arabic normalisation: equal flag, similarity, added/removed$0.002$0 (pure code)
POST /text/searchNormalised Arabic search (phrase / whole-word / fuzzy) with exact offsets and snippets$0.002$0 (pure code)
POST /audio/transcribeAudio → clean text (Arabic or English)$0.02model call
POST /doc/extractDocument image/PDF → structured fields (receipts, invoices, IDs)$0.03model call
POST /doc/extract/batch1–5 documents in one call, independent results and partial failures$0.10model call ×n

POST /text/normalize accepts a mode:

  • light — lossless: whitespace, digit unification, bidi cleanup only.
  • search — light + tashkeel removal + letter folding (أإآ→ا, ى→ي, ة→ه).
  • index — search + punctuation stripped (use as a dedup / index key).

Try it

bash
# 1. Any paid route answers 402 with a payment challengecurl -i https://arabic-pipeline.arabic-pipeline.workers.dev/text/normalize \  -H 'content-type: application/json' \  -d '{"text":"مُحَمَّدٌ عَلِيّ","mode":"search"}'
# 2. Free routes (no payment needed)curl https://arabic-pipeline.arabic-pipeline.workers.dev/openapi.jsoncurl https://arabic-pipeline.arabic-pipeline.workers.dev/

How x402 payment works (for agents)

  1. Call the route with no payment header → 402 Payment Required.
  2. The response carries a base64 PAYMENT-REQUIRED header and, in the body, accepts[] entries describing how to pay (network, asset, price, payTo).
  3. Pick one entry, sign a payment for it, and retry the request with the PAYMENT-SIGNATURE header (base64 payment payload).
  4. The server verifies and settles the payment (via the facilitator) and returns the real result plus a PAYMENT-RESPONSE header with the receipt.

The full machine-readable contract — including per-operation x-payment-info — is at GET /openapi.json.

Settlement

  • Network: Base mainnet (eip155:8453), asset USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913).
  • Payments are verified and settled by a public x402 facilitator (https://x402.dexter.cash — no account, no fees). The facilitator only executes the buyer's signed payment; it never holds funds.
  • Settlement destination: 0x05523af5bd166816D1418Ebf7D6371e1fFB1D2e6.

PayAPI Market independently verified this deployment by buying a call and publishing the receipt: POST /text/normalize for $0.005 USDC, settled in transaction 0xfc3e42f9…73ce9c at block 53,330,178 on Base. The listing is payapi.market/api/arabic-pipeline-api.

Model endpoints

/audio/transcribe uses gemini-3.5-transcribe; /doc/extract and /doc/extract/batch use gemini-3.6-flash with a JSON response schema. Both model names are configurable (GEMINI_TRANSCRIBE_MODEL, GEMINI_VISION_MODEL). The six text endpoints are pure computation and cost nothing to serve.

A batch runs one model call per document, concurrently. At $0.10 for five documents that is $0.02 each, a third below the $0.03 single-document price; for one or two documents the single route is cheaper, and the batch route says so. A failed document is reported in place (ok: false plus error) instead of failing the whole call, so a bad scan costs one slot rather than the payment.

Local development

bash
npm installcp .dev.vars.example .dev.vars   # then add GEMINI_API_KEYnpm run dev                       # wrangler devnpm test                          # vitestnpm run typecheck

Deployment

See DEPLOY.md. The short version: npm run login → npm run secret → npm run deploy → register the listing.

Two Workers are deployed from this repo:

bash
npm run deploy              # REST API  -> arabic-pipeline.arabic-pipeline.workers.devnpx wrangler deploy -c wrangler.mcp.toml   # MCP server -> arabic-pipeline-mcp.arabic-pipeline.workers.dev

Licence

Proprietary — all rights reserved. The source is public so the service can be audited; it is not licensed for reuse or redistribution. The API itself is sold per call, not licensed.

Source: README.md at commit e45562a

Tools

9

text_metrics

Text metrics

Measure text deterministically: characters, words, unique words, sentences, lines, paragraphs, digits, punctuation, average word and sentence length, reading time and an Arabic/Latin language mix. Works on any language, not only Arabic.

Parameterstextrequired

text_normalize

Normalize Arabic text

Canonicalise Arabic text for search, matching or indexing: remove tashkeel and tatweel, fold alef/ya/ta-marbuta, unify Arabic-Indic digits, strip bidi control characters and collapse whitespace. mode=light is lossless; search adds letter folding; index also strips punctuation so the result can be used as a dedup key.

Parametersmodetextrequired

text_detect_language

Detect language

Identify whether text is Arabic, English, mixed or unknown from its script mix, with a confidence score and the count of Arabic, Latin and other letters. Deterministic and model-free, so it is cheap enough to run on every incoming message to route Arabic work.

Parameterstextrequired

text_chunk

Chunk text

Split long text into chunks for a model context window. Cuts at sentence boundaries when possible, then at word boundaries, and never mid-word unless a single word is longer than max_chars. Returns each chunk with exact start/end offsets into the original string plus an optional overlap for context carry-over.

Parameterstextrequiredoverlapmax_chars

text_diff

Diff two texts

Compare two texts word by word after Arabic normalisation (tashkeel, alef/ya/ta-marbuta and digit variants are treated as equal). Returns an equal flag, a similarity score and the added and removed words. Use it for deduplication, re-import checks and QA of edited Arabic copy. Each side is limited to 1500 words.

Parametersarequiredbrequired

audio_transcribe

Transcribe audio

Transcribe Arabic or English speech to plain text. Send the audio as base64 (webm, mp3, wav or mp4); the payload limit is 12 MB of base64. Returns the transcript plus the model that produced it.

Parametersmime_typeaudio_base64required

doc_extract

Extract document fields

Extract structured fields from an Arabic document image or PDF (receipts, invoices, official letters, national IDs, bank slips) as JSON: amounts, dates, names, identifiers and tax numbers, with null for fields the document does not contain. Send the file as base64 (jpeg, png or pdf); the limit is 12 MB of base64.

Parametersmime_typedocument_base64required

doc_extract_batch

Extract document fields (batch)

Extract structured fields from 1 to 5 Arabic documents in one paid call: $0.10 for the batch, i.e. $0.02 per document instead of $0.03. Documents are processed independently and in parallel, results come back in request order with an echoed id, and one unreadable image does not fail the rest (it appears with ok=false and an error). Use this for a stack of receipts, invoices or bank slips.

Parametersdocumentsrequiredmime_type

Version history

2
  1. v0.2.0LatestOct 31, 2026
  2. v0.1.0Oct 22, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.