The Pasar API catalogue ~ government open data (data.gov.my, data.go.th, data.go.id, data.gov.sg) plus curated commercial APIs ~ is available as a
public REST API and a
remote MCP server. Both are read-only, authless, and CORS-open.
Base URL: https://pasarapi.xyz
Every response is JSON, versioned and edge-cached (the full catalogue refreshes daily; detail and freshness responses use shorter caches). Each entry has a tier
(open = free, no-auth, copy-paste-ready · commercial = real auth/pricing + docs link).
| Endpoint | Returns |
|---|---|
GET /api/catalogue | Catalogue list: { updated, source, total, apis[] }. Add limit (max 200) and offset for pagination. |
GET /api/search | Ranked filtered list with facets. Params: q, category, tier, pricing, auth, country, free=true, no_auth=true, limit, offset. |
GET /api/apis/:id | One entry + a ready-to-run snippet, docs link, and AI prompt |
GET /api/categories | [{ category, count }] |
GET /api/freshness?days=90 | Rot report ~ apis lists entries whose verification stamp is older than the cutoff, unstamped_apis lists curated entries never verified once. Government live-fetch datasets carry no stamp by design and are counted as self_maintaining. |
GET /openapi.json | OpenAPI 3.1 contract for client generation. |
curl 'https://pasarapi.xyz/api/search?q=weather&no_auth=true'
curl 'https://pasarapi.xyz/api/apis/fuelprice'
{
"id": "fuelprice",
"title": "Weekly fuel prices (RON95, RON97, diesel)",
"tier": "open",
"auth": "none",
"pricing": "free",
"copyable": true,
"curl": "curl 'https://api.data.gov.my/data-catalogue/?id=fuelprice&limit=10'",
"prompt": "..."
}
A remote MCP server at
/mcp (stateless Streamable HTTP). Connect it in Claude, Cursor, or any MCP client and your AI
agent can search and integrate Southeast Asian APIs directly ~ no copy-pasting.
The server speaks native remote MCP (Streamable HTTP) ~ no local proxy needed.
| Client | How |
|---|---|
| Claude.ai | Settings → Connectors → Add custom connector → paste https://pasarapi.xyz/mcp |
| Claude Code | claude mcp add --transport http pasarapi https://pasarapi.xyz/mcp |
| Cursor | One-click install ↗ |
| VS Code / Windsurf | Add { "pasar-api": { "type": "http", "url": "https://pasarapi.xyz/mcp" } } to the client's MCP config |
Older stdio-only clients can still bridge via npx mcp-remote https://pasarapi.xyz/mcp.
All eight the server answers tools/list with ~ same names, same arguments, same wording as /llms.txt, which renders them straight from the server's own tool table. * marks a required argument.
| Tool | Arguments | Does |
|---|---|---|
search_sea_apis | query, category, country, free, no_auth, limit, offset | Relevance-ranked search ~ the reply states the true match total and the offset for the next page |
get_sea_api | id* | One entry in full: trust caveat, setup guide, ready-to-run snippet |
try_sea_api | id* | One live sample GET against a copyable entry (auth none AND one concrete endpoint), so you see the real response shape |
list_api_categories | no arguments | The whole taxonomy with a count per category |
list_api_stacks | no arguments | Curated build recipes (stacks) per project type |
get_api_stack | id* | The APIs in one stack, each with its role in the build |
search_malaysian_apis | query, category, country, free, no_auth, limit, offset | Legacy alias for search_sea_apis (same ranking, same paging) |
get_malaysian_api | id* | Legacy alias for get_sea_api |
The two legacy aliases stay for older clients; new ones should use the _sea_ names. Try asking your agent: “What free Malaysian, Singaporean, Indonesian or Thai weather API can I use, and how do I call it?”
open entries are free and need no auth ~ the snippet works as-is. commercial entries (payments, logistics, telco, banking, e-invoicing…) are key-gated, so instead of a fake call you get the provider's real docs link, auth type, and pricing. Every commercial entry's docs URL is fact-checked; providers with no genuinely public API are excluded, not invented.