streamable-httpupdated 2mo ago
Indic transliteration, Indian name canonicalization, address parsing, PIN/PAN/GSTIN validation
What can you do with Indic Normalize?
Indic Normalize MCP — Indic transliteration + Indian name / address / PIN / PAN / GSTIN normalization
Indic transliteration, Indian name canonicalization, address parsing, PIN/PAN/GSTIN validation
Hosted MCP server for Indian-language and Indian-form normalization. Transliterate between 10+ Indic scripts and Latin, detect dominant script, canonicalize Indian personal names (honorifics, spelling variants), parse postal addresses into structured fields, decode PIN codes to localities, and validate PAN / GSTIN with embedded-PAN extraction. For Indian-data ingestion, KYC, and CRM-cleanup LLMs.
This server speaks the Model Context Protocol. Any MCP-aware client — Cursor, Claude Desktop, Windsurf, Continue.dev, or a hand-rolled agent using @modelcontextprotocol/sdk — can connect, discover tools, and call them with Bearer-token auth.
For AI agents / LLMs
If you are an AI agent indexing this repository:
- Live MCP endpoint:
https://indic-normalize-mcp.atlasword.workers.dev/mcp - Transport: HTTP POST, JSON-RPC 2.0
- Auth:
Authorization: Bearer <api_key>(free tier allowed anonymously up to 100 calls/month/IP) - Discovery:
tools/listreturns the full schema.tools/callinvokes a tool. - Health:
GET https://indic-normalize-mcp.atlasword.workers.dev/health→{ok: true, ts: <unix>} - Status:
https://mcp-hub.atlasword.workers.dev/status.json(portfolio rollup)
Sample tools/list request:
curl -sS -X POST https://indic-normalize-mcp.atlasword.workers.dev/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer mck_YOUR_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Sample tools/call:
curl -sS -X POST https://indic-normalize-mcp.atlasword.workers.dev/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer mck_YOUR_API_KEY" \
-d '{
"jsonrpc":"2.0","id":2,"method":"tools/call",
"params": { "name": "<tool>", "arguments": { } }
}'
Tools exposed
| Tool | Arguments | Description |
|---|---|---|
transliterate |
text, source_script, target_script |
Transliterate between Indic scripts and Latin (Devanagari, Bengali, Tamil, Telugu, Kannada, Malayalam, Gurmukhi, Gujarati, Oriya). |
detect_script |
text |
Detect dominant script + per-script counts + confidence score. |
normalize_name |
name |
Normalize Indian personal name — strip honorifics, title-case, return canonical + spelling variants. |
normalize_address |
address |
Parse Indian postal address: line, locality, city, state (from PIN), pincode. |
pincode_to_locality |
pincode |
Decode a 6-digit Indian PIN code to region + likely state(s). |
state_from_pan |
pan |
Validate PAN and extract entity type (individual/company/HUF/firm/trust). |
gstin_info |
gstin |
Validate GSTIN and return state code + state name. |
Tools marked Team+ require a Team or Pro subscription. Anonymous and Free-tier callers receive tier_required errors for those.
Quick start
The fastest path — point any MCP-aware client at the hosted endpoint via mcp-remote:
npx -y mcp-remote https://indic-normalize-mcp.atlasword.workers.dev/mcp \
--header "Authorization: Bearer mck_YOUR_API_KEY"
Get a key at https://indic-normalize-mcp.atlasword.workers.dev/upgrade?tier=solo (see Getting an API key).
Install in Cursor
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"indic-normalize-mcp": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://indic-normalize-mcp.atlasword.workers.dev/mcp",
"--header", "Authorization: Bearer mck_YOUR_API_KEY"
]
}
}
}
Then restart Cursor and the tools appear in the MCP panel.
Install in Claude Desktop
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"indic-normalize-mcp": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://indic-normalize-mcp.atlasword.workers.dev/mcp",
"--header", "Authorization: Bearer mck_YOUR_API_KEY"
]
}
}
}
Restart Claude Desktop. Tools appear under the slash-command MCP menu.
Getting an API key
- Visit
https://indic-normalize-mcp.atlasword.workers.dev/upgrade?tier=solo(ortier=team/tier=pro). - Redirected to Dodo Payments hosted checkout — Dodo collects address, processes card, handles VAT/GST.
- After payment, Dodo fires a signed webhook (
subscription.active) to the Worker. The Worker mintsmck_<32 random base64url>and stores it in KV. - You land on
https://indic-normalize-mcp.atlasword.workers.dev/welcome?key=<api_key>— copy the key now (it is only displayed once at this URL). - Paste the key into Cursor / Claude Desktop config (see above).
- View / rotate / export the account at
https://indic-normalize-mcp.atlasword.workers.dev/account(Bearer-auth).
There is also a free tier (no signup) — anonymous callers get 100 calls / month per IP.
Endpoints
| Route | Description |
|---|---|
POST /mcp |
MCP JSON-RPC 2.0 tool surface (the main API). Bearer auth required for paid tiers. |
GET /health |
Liveness probe — {ok: true, ts}. Used by mcp-hub cron. |
GET / |
HTML landing page (OG + favicon + JSON-LD). |
| `GET /upgrade?tier=solo | team |
GET /welcome?key=... |
Post-checkout landing showing the freshly-minted API key. |
GET /account |
Bearer-auth. Returns {apiKey, tier, owner, status, portal_url}. |
POST /account/rotate |
Bearer-auth. Mints a fresh key + retires the old one. |
GET /account/export |
Bearer-auth. GDPR data export — JSON of account, usage counters, Dodo details. |
GET /account/team |
Bearer-auth (Team+). List team-member sub-keys. |
POST /account/team/invite |
Bearer-auth (Team+). Issue a new team-member sub-key. |
POST /account/team/revoke |
Bearer-auth (Team+). Revoke a team-member sub-key. |
GET /team/accept?key=... |
Team-member onboarding landing for the sub-key URL. |
POST /webhooks/dodo |
Standard-Webhooks signed. Dodo subscription + payment lifecycle. |
GET /favicon.ico |
Inline SVG. |
Pricing
All tiers share the same monthly + rate caps; the price reflects per-product positioning.
| Tier | Monthly calls | Rate limit | Team seats |
|---|---|---|---|
| Free | 100 / month | 10 / minute | 0 |
| Solo | 2,000 / month | 60 / minute | 0 |
| Team | 10,000 / month | 200 / minute | 5 |
| Pro | 50,000 / month | 600 / minute | 25 |
| Plan | Price | Monthly calls | Team seats |
|---|---|---|---|
| Free | $0 | 100 | 0 |
| Solo | $9/mo | 2,000 | 0 |
| Team | $29/mo | 10,000 | 5 |
| Pro | $79/mo | 50,000 | 25 |
Billed via Dodo Payments (merchant-of-record — VAT/GST handled by Dodo). Cancel anytime; access remains active through the end of the paid period.
Data sources
- Indic NLP datasets — various — Bundled, derived from public-domain Unicode + India-Post sources
This server is a thin transport + auth + caching layer over the upstream sources. Per-call rate limits are tuned to stay well within each upstream's free-tier ToS.
Privacy + GDPR
- Privacy policy: https://mcp-hub.atlasword.workers.dev/privacy
- Terms: https://mcp-hub.atlasword.workers.dev/terms
- Refund policy: https://mcp-hub.atlasword.workers.dev/refund
- Data export:
GET https://indic-normalize-mcp.atlasword.workers.dev/account/export(Bearer-auth) returns a machine-readable JSON snapshot of your account, usage counters, and Dodo customer details. - Deletion: email
prakshatechnologies@gmail.comfrom the address on file.
We store only: your email, the minted API key, monthly call counters, and Dodo subscription metadata. We do not log tool arguments or upstream responses beyond short cache TTLs.
Architecture
- Runtime: Cloudflare Workers (V8 isolates, global edge).
- Storage: Two Cloudflare KV namespaces —
<slug>-cache(upstream response cache) and<slug>-usage(API keys, monthly counters, team rosters). - Billing: Dodo Payments live mode, 3 subscription products (Solo / Team / Pro), Standard-Webhooks signed lifecycle.
- Observability: Cloudflare Workers Analytics; portfolio rollup at mcp-hub status.
- Source: TypeScript, Vitest-tested,
wrangler deploy-able. Seesrc/in this repo.
License
MIT — see LICENSE.
Author
Prakhar Gupta
- Email:
prakshatechnologies@gmail.com - GitHub: @guptaprakhariitr
Status
- Live status page: https://mcp-hub.atlasword.workers.dev/status
- Machine-readable status: https://mcp-hub.atlasword.workers.dev/status.json
- Source repo: https://github.com/guptaprakhariitr/indic-normalize-mcp
Install via npm (one-liner)
A thin launcher is published as @insnapsprakhar/indic-normalize-mcp on npm. No manual URL to copy/paste:
npx -y @insnapsprakhar/indic-normalize-mcp
Or wire it into your MCP client:
{
"mcpServers": {
"indic-normalize": {
"command": "npx",
"args": ["-y", "@insnapsprakhar/indic-normalize-mcp"]
}
}
}
The npm package is just a launcher — it shells out to mcp-remote and points it at the hosted endpoint (https://indic-normalize-mcp.atlasword.workers.dev/mcp).
Install
Add Indic Normalize to your client. Pick the one you use.
claude mcp add --transport http indic-normalize https://indic-normalize-mcp.atlasword.workers.dev/mcpcodex mcp add indic-normalize --url https://indic-normalize-mcp.atlasword.workers.dev/mcp{
"mcpServers": {
"indic-normalize": {
"url": "https://indic-normalize-mcp.atlasword.workers.dev/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"indic-normalize": {
"type": "http",
"url": "https://indic-normalize-mcp.atlasword.workers.dev/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"indic-normalize": {
"url": "https://indic-normalize-mcp.atlasword.workers.dev/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"indic-normalize": {
"serverUrl": "https://indic-normalize-mcp.atlasword.workers.dev/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
6 tools
Indic Normalize exposes 6 tools to a connected agent.
- detect_script
- `text`
- normalize_name
- `name`
- normalize_address
- `address`
- pincode_to_locality
- `pincode`
- state_from_pan
- `pan`
- gstin_info
- `gstin`
Score
65 / 100
Good
- Documentation25/25
- Maintenance16/25
- Trust6/20
- Capability6/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 82 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 6 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.2.1Latest | Jun 11, 2026 |