{
  "markdown": "<p align=\"center\">\n  <img src=\"assets/olano-ai-singapore.svg\" alt=\"MCP Singapore skyline logo\" width=\"420\">\n</p>\n\n<h1 align=\"center\">🇸🇬 Singapore MCP by Olano</h1>\n\n[![npm](https://img.shields.io/npm/v/%40olano%2Fmcp-singapore?logo=npm&label=npm&color=2563eb)](https://www.npmjs.com/package/@olano/mcp-singapore)\n[![CI](https://github.com/olano-ai/mcp-singapore/actions/workflows/ci.yml/badge.svg)](https://github.com/olano-ai/mcp-singapore/actions/workflows/ci.yml)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-published-16a34a)](https://registry.modelcontextprotocol.io/)\n[![Node.js 20+](https://img.shields.io/badge/Node.js-20%2B-339933?logo=nodedotjs&logoColor=white)](https://nodejs.org/)\n[![Telegram](https://img.shields.io/badge/Telegram-%40OlanoSGBot-26A5E4?logo=telegram&logoColor=white)](https://t.me/OlanoSGBot)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nAsk Claude or Codex questions about Singapore property, MRT/LRT, buses, companies, weather, the\neconomy, public services, and official financial reference data.\n\n**291 read-only tools · 8 Agent Skills · 7 plugins · stdio and Streamable HTTP**\n\n> **Try it right now, without installing anything.** Message\n> [**@OlanoSGBot**](https://t.me/OlanoSGBot) on Telegram and ask a Singapore question in plain\n> English. It is free to use and needs no API key. See\n> [Try it on Telegram](#try-it-on-telegram).\n\nBuilt and maintained in Singapore by Olano — the [olano.ai](https://olano.ai) platform for applied\nAI, and [olano.sg](https://olano.sg), our Singapore AI studio. Singapore MCP is the studio's open\ncontribution to the local AI community, and it is free to use under the MIT licence.\n\n> Singapore MCP is an independent community project. It is not affiliated with, endorsed by, or an\n> official product of the Singapore Government or any government agency. “Official” below describes\n> an upstream data source, not this software.\n\n## Overview\n\nSingapore MCP is a read-only bridge between an AI client and Singapore's official public data:\ndata.gov.sg, OneMap, LTA DataMall, and SingStat. Every answer keeps its source agency, dataset\nidentifier, observation period, units, and freshness caveats, so you can check the work. Most of it\nruns with no API key at all.\n\nThe monorepo separates provider access, reusable analysis, and user-facing workflows. Install the\naggregate server for the complete experience or a focused executable when you only need one\nprovider.\n\n| Package                  | Role                                                                                                                      | Credentials                           |\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |\n| `@olano/mcp-singapore`   | Aggregate server: every provider, catalog, insight, rail, finance, analytics, prompt, resource, and cross-agency workflow | Depends on the selected tool          |\n| `@olano/mcp-datagov`     | data.gov.sg catalog, metadata, rows, and real-time feeds                                                                  | Optional data.gov.sg key              |\n| `@olano/mcp-onemap`      | OneMap address search, reverse geocoding, and routing                                                                     | OneMap token                          |\n| `@olano/mcp-lta`         | LTA DataMall bus arrivals, traffic, parking, and taxi feeds                                                               | LTA DataMall Account Key              |\n| `@olano/mcp-weather`     | Forecasts, temperature, rainfall, and PSI                                                                                 | Optional data.gov.sg key              |\n| `@olano/mcp-catalog`     | Curated Singapore datasets, 27 ACRA entity shards, and SingStat tables                                                    | Optional data.gov.sg key              |\n| `@olano/mcp-insights-sg` | Prompt discovery, semantic routing, period-aware comparisons, and derived public-data insights                            | Depends on the routed source          |\n| `@olano/mcp-rail-sg`     | MRT/LRT stations, codes, lines, exits, interchanges, and nearest-location tools                                           | None; OneMap token for address lookup |\n| `@olano/mcp-finance-sg`  | Official mortgage reference-rate history and transparent local mortgage calculations                                      | Optional data.gov.sg key              |\n| `@olano/mcp-analytics`   | Deterministic local statistics, comparisons, correlations, and text sparklines                                            | None                                  |\n| `@olano/mcp-core`        | Shared transport, safe HTTP client, caching, retries, and MCP result helpers                                              | None                                  |\n| `@olano/sg-cli`          | Search, inspect, route, and invoke the complete suite from a terminal                                                     | Depends on the selected tool          |\n\nFocused stdio/HTTP executables are available for the aggregate, data.gov.sg, OneMap, LTA, weather,\nand rail packages. The other packages are reusable registration libraries composed by the aggregate\nserver.\n\n## Example questions\n\nAsk these in an MCP client, or use `olano-sg examples [category]` to browse the packaged prompt\ncatalog. Results depend on upstream coverage and, for a few tools, on the optional keys in\n[Credentials and caching](#credentials-and-caching). Not installed yet? Ask a few of these on\nTelegram first with [@OlanoSGBot](https://t.me/OlanoSGBot), or go straight to\n[Quick start](#quick-start).\n\n### Companies and ACRA\n\n- “Find the official public ACRA records matching `Olano` and show the UEN and entity status.”\n- “Look up this exact UEN across all ACRA shards; make any match uncertainty explicit.”\n- “Compare monthly business formations and cessations, then calculate net formations.”\n- “How have formations changed for two SSIC sectors over matched periods?”\n\n### HDB and private property\n\n- “Show recent 4-room HDB resale transactions in Bedok and calculate the median and quartiles.”\n- “Compare HDB resale price per square metre between Tampines and Jurong East.”\n- “Find HDB carparks whose address contains `Bishan` and group them by carpark type.”\n- “Show bounded private-property transaction evidence for a project or district.”\n- “Build a property-area brief for Queenstown with OneMap location context.”\n\nThe first example is a single MCP operation. `hdb_resale_stats` applies the exact town and flat-type\nfilters, selects the latest available matching month by default, returns the transaction rows, and\ncalculates the range, median, Q1, Q3, and price per square metre inside the server:\n\n```bash\nnpx -y @olano/sg-cli tool hdb_resale_stats '{\"town\":\"BEDOK\",\"flatType\":\"4 ROOM\"}'\n```\n\nUse `latestMonths`, `startMonth`, or `endMonth` to choose a different period. A direct dataset\ndownload is not required. This operation is available in the aggregate server's `all` and\n`property` profiles; it is not part of the focused `@olano/mcp-datagov` row-reader package.\n\n### COE, buses, roads, parking, and taxis\n\n- “What is the latest Category B COE premium, quota, number of bids, and bid-to-quota ratio?”\n- “Show the last 12 Category A bidding exercises and changes from the prior premium.”\n- “When are the next buses arriving at this bus stop?”\n- “List current traffic incidents and nearby traffic-camera images.”\n- “Show live LTA carpark availability and taxi availability.”\n\n### MRT and LRT\n\n- “What are the MRT/LRT codes and line connections for Paya Lebar?”\n- “List every station on the Thomson-East Coast Line.”\n- “Which official station exits belong to City Hall?”\n- “Find the five nearest rail stations to latitude 1.29027, longitude 103.851959.”\n- “Find rail stations near `1 Fullerton Road` and state whether distance is straight-line or walking.”\n- “List MRT/LRT interchanges and show the date of each bundled source snapshot.”\n\n### Weather, PSI, rainfall, and dengue\n\n- “Show the current two-hour forecast for Singapore areas.”\n- “What are the latest temperature and rainfall readings by station?”\n- “Show the 24-hour forecast, four-day outlook, and latest PSI readings.”\n- “Find current dengue-cluster records and include the dataset freshness.”\n\n### Education and childcare\n\n- “Find MOE schools matching `Nanyang` and show the official dataset fields.”\n- “Find ECDA childcare centres in an area and summarise any published vacancy fields.”\n- “Resolve this address with OneMap before comparing nearby school or childcare records.”\n\n### GDP, prices, labour, income, FX, tax, and trade\n\n- “Show the latest GDP growth observations and compare selected industries.”\n- “Calculate year-on-year CPI change using the same month, not adjacent months.”\n- “Compare retail-sales year-on-year change with CPI over matched monthly periods.”\n- “Show median-income history, employment by sector, and calculated employment growth.”\n- “Show unemployment and resident labour-force participation history.”\n- “Find official MAS exchange-rate observations and preserve each published unit.”\n- “Show IRAS tax-collection history and calculate category shares only where units match.”\n- “Show Singapore merchandise-trade history from SingStat.”\n\n### Tourism, population, health, energy, crime, and hawkers\n\n- “Rank visitor-arrival source markets for the latest published period.”\n- “Show tourism receipts history and warn me if the curated dataset is stale.”\n- “Compare population, live births, deaths, marriages, and divorces over available periods.”\n- “Show disease-case history, its last observation, and a clear frozen-data warning if applicable.”\n- “Show electricity-generation history and the source agency.”\n- “Compare like-for-like recorded-crime series without inferring neighbourhood or individual risk.”\n- “Find NEA hawker centres matching `Maxwell` and profile the published fields.”\n\n### Mortgage reference rates\n\n- “Show the latest official SORA and published housing-loan reference-rate series.”\n- “Show 24 months of official mortgage reference-rate context and identify the latest period.”\n- “At a user-supplied illustrative rate, calculate the monthly payment on a S$600,000 mortgage.”\n- “Stress-test that mortgage at 2.5%, 3.5%, and 4.5%, with assumptions shown.”\n\nThese are official reference-rate statistics and educational calculations, not live lender offers,\ncredit decisions, or personal financial advice.\n\n### Cross-series analysis and discovery\n\n- “Align these quarterly GDP and monthly CPI series to annual periods and explain the aggregation.”\n- “Compare two matched series and return observations, Pearson correlation, and calculation notes.”\n- “Create a text sparkline and chart-ready points for these observations.”\n- “Which Olano tool should answer: ‘How competitive was the latest COE bidding exercise?’”\n- “List prompt categories, then show examples for rail and property.”\n- “Show the compatibility record for `sg_cross_dataset`.”\n\n### Advanced: multi-step and cross-agency questions\n\nThese are where the eight packaged Agent Skills and the analytics tools earn their keep. Each one\nspans several agencies or several periods, so the answer has to align units, match periods, and keep\nevery source attached. Ask them in a client that has the Agent Skills installed — the\n[Claude Code plugin](#claude-code) or the [Claude Desktop extension](#claude-desktop-app) — and\nClaude will chain the tools itself.\n\n**Property and affordability**\n\n- “Build a Queenstown property brief: recent 4-room resale medians and quartiles, the nearest MRT\n  stations with walking versus straight-line distance stated, nearby schools and childcare, and an\n  illustrative mortgage at 3.5% on the median price. Show every assumption and source.”\n- “Compare HDB resale price per square metre across Tampines, Bedok, and Jurong East over matched\n  months, then test whether the ranking survives switching to a different flat type.”\n- “Stress-test a S$600,000 mortgage at 2.5%, 3.5%, and 4.5% against the latest published SORA and\n  housing-loan reference rates, and say plainly which parts are official statistics and which are my\n  own illustrative assumptions.”\n\n**Economy and cross-series analysis**\n\n- “Align quarterly GDP with monthly CPI to annual periods, explain the aggregation you used, then\n  report the Pearson correlation with its calculation notes and any period you had to drop.”\n- “Compare retail sales year-on-year against CPI year-on-year over exactly matched months, and flag\n  any month where the two series use different bases or units.”\n- “Track median income, employment by sector, and resident labour-force participation over the\n  longest matched window available, and calculate employment growth per sector.”\n\n**Business and sector research**\n\n- “Profile the ACRA records matching a company name, resolve the UEN across all 27 shards, make any\n  match uncertainty explicit, then put it in context with formations and cessations for its SSIC\n  sector over matched periods.”\n- “Compare net business formations across two SSIC sectors, then check whether the pattern lines up\n  with retail sales and visitor arrivals for the same periods.”\n\n**Mobility and location**\n\n- “Plan a comparison of three addresses for a new office: resolve each with OneMap, list rail\n  stations within walking distance, show live carpark availability nearby, and summarise the\n  trade-offs without inferring anything the data does not support.”\n- “Show the last 12 Category A and Category B COE bidding exercises with premium changes, quota,\n  bids, and bid-to-quota ratio, and say which exercises were most competitive and why.”\n\n**Data quality and method**\n\n- “Answer using only tools that disclose their source agency and observation period, and list any\n  part of my question you could not answer within that constraint.”\n- “Show me which Olano tool you would use for this question and why, before you run it.”\n- “Repeat that analysis, but this time show the freshness of every dataset you touched and warn me\n  about any that is stale or frozen.”\n\n## Try it on Telegram\n\nThe fastest way to see what this server does is to ask it something.\n**[@OlanoSGBot](https://t.me/OlanoSGBot)** is a free Telegram bot, built by Olano and backed by the\nSingapore MCP tools in this repository. No install, no Node.js, no API key, and no account beyond\nthe Telegram one you already have.\n\n1. Open [**t.me/OlanoSGBot**](https://t.me/OlanoSGBot), or search `@OlanoSGBot` inside Telegram.\n2. Press **Start**.\n3. Ask a question in plain English.\n\nQuestions that work well in a chat window:\n\n- “What is the two-hour weather forecast and the latest PSI?”\n- “What is the latest Category B COE premium?”\n- “Show recent 4-room HDB resale prices in Bedok.”\n- “Which MRT stations are nearest to 1 Fullerton Road?”\n- “When is the next bus at stop 01012?”\n\nAnswers keep their source agency and observation period, the same as they do in an MCP client. The\nbot remembers your conversation so that follow-up questions work; send **`/forget`** whenever you\nwant it to delete the memory and conversation data it holds for you.\n\nThe bot is a hosted service rather than a local install. It runs as an Olano-hosted agent on a\nserver in Singapore; each user's conversation and memory is stored separately, scoped to their\naccount on the messaging platform, so no user — and no agent session — can reach another user's\ndata. Composing a reply sends the relevant message content to a third-party language-model provider,\nwhich may process it outside Singapore. Read [Privacy](PRIVACY.md) before sending anything\nsensitive.\n\nFor everyday use, for the complete 291-tool suite, and for the eight Agent Skills, install the\nserver in your own AI client with [Quick start](#quick-start). That route runs on your own machine\nand sends nothing to Olano.\n\n## Quick start\n\nNew to MCP? An MCP server is a small helper program that your AI app runs on your own computer so\nit can look things up for you. You install it once, and after that you just ask questions in plain\nEnglish. This one runs locally and reads official Singapore public data; it has no Olano account,\ntelemetry, or analytics. See [Privacy](PRIVACY.md).\n\n**Find your app in the table and follow only that section.** The default install gives you the\n**complete Olano Singapore suite**. You do not need to pick a category, and you do not need an API\nkey.\n\n| Your app                                       | Follow this                               | How                         |\n| ---------------------------------------------- | ----------------------------------------- | --------------------------- |\n| **Claude Desktop app** — the **Chat** tab      | [Claude Desktop app](#claude-desktop-app) | Download one file, click it |\n| **Claude Code** — terminal or the **Code** tab | [Claude Code](#claude-code)               | Two `/plugin` commands      |\n| **Codex app**                                  | [Codex app](#codex-app)                   | Add a server in Settings    |\n| **Codex CLI**                                  | [Codex CLI](#codex-cli)                   | One `codex mcp add` command |\n\n**Just want to see it work first?** You do not have to install anything at all — message\n[@OlanoSGBot](https://t.me/OlanoSGBot) on Telegram instead. See\n[Try it on Telegram](#try-it-on-telegram).\n\nNot sure which one you have? If you type questions into a chat window, you are using the Claude\nDesktop app. If you run `claude` in a terminal, or you use the **Code** tab inside the desktop app,\nyou are using Claude Code. Claude Code gets the better install, because it can load the Agent Skills\nas well as the tools.\n\n### Before you start\n\n**Installing the Claude Desktop extension? Nothing to install first.** Claude Desktop ships its own\nNode.js runtime and the extension carries everything else. Skip straight to\n[Claude Desktop app](#claude-desktop-app).\n\n**Every other route** runs the server with `npx`, which comes with Node.js. You need **Node.js 20 or\nnewer**.\n\n1. Download the **LTS** installer from [nodejs.org](https://nodejs.org/) and run it.\n\n2. Open a terminal — Terminal on macOS, PowerShell on Windows — and check the version:\n\n   ```bash\n   node --version\n   ```\n\nYou should see `v20.` or higher, for example `v22.14.0`. If you get \"command not found\" or \"not\nrecognized\", close the terminal, open a new one, and try again. If it still fails, Node.js did not\ninstall correctly.\n\nYou do **not** need to download this repository, clone anything, or run `npm install`. `npx` fetches\nthe published package for you the first time it runs.\n\n### Claude Desktop app\n\n> This section is for the **Chat** tab of the Claude Desktop app. If you use the **Code** tab,\n> follow [Claude Code](#claude-code) instead — you get the eight Agent Skills there too.\n\n#### Route A — install the extension (recommended)\n\nOne file, one click, no terminal and no Node.js.\n\n1. **Download the extension.**\n\n   [**⬇ Download olano-singapore.mcpb**](https://github.com/olano-ai/mcp-singapore/releases/latest/download/olano-singapore.mcpb)\n\n   It is about 2 MB and contains the whole server. Every published version is also listed on the\n   [releases page](https://github.com/olano-ai/mcp-singapore/releases).\n\n2. **Install it.** Double-click the downloaded file. Claude Desktop opens a review dialog showing\n   what the extension adds. Select **Install**.\n\n   If double-clicking does nothing, open Claude Desktop and drag the file onto the **Settings**\n   window, or go to **Settings → Extensions → Advanced settings → Install Extension…** and pick it.\n\n   Claude Desktop will note that the extension is not signed. That is expected for this project.\n\n3. **Leave every setting blank and finish.** The four optional boxes are for free government API\n   keys you probably do not have yet. Everything works without them, and you can add them later from\n   **Settings → Extensions**.\n\n4. **Ask a question.** No restart needed.\n\n   > Show me the latest two-hour weather forecast for Singapore, with timestamps.\n\nThat is it, can already. To update later, download the file again and install it over the top.\n\n#### Route B — let an AI agent set it up for you\n\nAlready have Claude Code, Codex, Cursor, or another coding agent that can edit files on your\ncomputer? Paste this and it will do the whole job:\n\n```text\nPlease add the Olano Singapore MCP server to my Claude Desktop configuration.\n\n1. Open my Claude Desktop config file, creating it if it does not exist:\n   - macOS:   ~/Library/Application Support/Claude/claude_desktop_config.json\n   - Windows: %APPDATA%\\Claude\\claude_desktop_config.json\n   - Linux:   ~/.config/Claude/claude_desktop_config.json\n2. Inside the \"mcpServers\" object, add an entry named \"singapore\" that runs the\n   command \"npx\" with the arguments [\"-y\", \"@olano/mcp-singapore\"]. On Windows use\n   the command \"cmd\" with [\"/c\", \"npx\", \"-y\", \"@olano/mcp-singapore\"] instead.\n3. Keep every server that is already in the file and keep the JSON valid.\n4. Do not add any API keys. Show me the final file and tell me to fully quit and\n   reopen Claude Desktop.\n```\n\nThis route needs Node.js on your computer. Route A does not.\n\n#### Route C — edit the configuration file yourself\n\n1. **Open the settings file.** In Claude Desktop, open **Settings → Developer → Edit Config**. That\n   button opens `claude_desktop_config.json` in your text editor and creates it if it is missing.\n\n   <details>\n   <summary>Can't find that menu? Open the file directly.</summary>\n\n   | System  | File                                                              |\n   | ------- | ----------------------------------------------------------------- |\n   | macOS   | `~/Library/Application Support/Claude/claude_desktop_config.json` |\n   | Windows | `%APPDATA%\\Claude\\claude_desktop_config.json`                     |\n   | Linux   | `~/.config/Claude/claude_desktop_config.json`                     |\n\n   On macOS the Settings window opens from **Claude** in the menu bar, not from the chat window. On\n   Windows, check the Claude icon in the system tray. If the file does not exist, create it.\n\n   </details>\n\n2. **Paste the configuration.**\n\n   If the file is **empty or brand new**, paste this entire block — the outer `{` and `}` matter:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"singapore\": {\n         \"command\": \"npx\",\n         \"args\": [\"-y\", \"@olano/mcp-singapore\"]\n       }\n     }\n   }\n   ```\n\n   If the file **already has other servers**, keep them and add only the `singapore` entry, with a\n   comma between entries:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"some-server-you-already-had\": {\n         \"command\": \"npx\",\n         \"args\": [\"-y\", \"some-other-package\"]\n       },\n       \"singapore\": {\n         \"command\": \"npx\",\n         \"args\": [\"-y\", \"@olano/mcp-singapore\"]\n       }\n     }\n   }\n   ```\n\n   The same file is available at [`examples/claude-desktop.json`](examples/claude-desktop.json).\n\n   <details>\n   <summary><strong>On Windows?</strong> Use this version instead.</summary>\n\n   Windows installs `npx` as a `.cmd` script, which some builds of Claude Desktop cannot start\n   directly. If the plain version above shows an error, wrap it in `cmd /c`:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"singapore\": {\n         \"command\": \"cmd\",\n         \"args\": [\"/c\", \"npx\", \"-y\", \"@olano/mcp-singapore\"]\n       }\n     }\n   }\n   ```\n\n   </details>\n\n3. **Save the file and fully restart Claude Desktop.** Closing the window is not enough. Quit the\n   app completely — **Claude → Quit** on macOS, or right-click the tray icon and choose **Quit** on\n   Windows — then open it again.\n\n4. **Confirm it worked.** Click the **+** button next to the message box and look under\n   **Connectors**. You should see `singapore` listed with its tools. Then ask a question:\n\n   > Show me the latest two-hour weather forecast for Singapore, with timestamps.\n\n   The first question may take 20–30 seconds while `npx` downloads the package. After that it is\n   fast.\n\nIf `singapore` does not appear, see [If something is not working](#if-something-is-not-working).\nReference details are in [Claude Desktop](docs/claude-desktop.md).\n\n### Claude Code\n\n> This covers both the `claude` terminal command and the **Code** tab in the Claude Desktop app.\n\nUse the **plugin**. It installs the complete MCP server _and_ all eight Olano Agent Skills, which\nteach Claude when to reach for which Singapore tool, so answers come back better sourced. It also\ngives you a safe place to add the optional API keys later.\n\n1. **Add the Olano marketplace.** Type this at the Claude Code prompt, exactly as shown, including\n   the leading `/`:\n\n   ```text\n   /plugin marketplace add olano-ai/mcp-singapore\n   ```\n\n   This only registers the catalogue. Nothing is installed yet.\n\n2. **Install the complete plugin:**\n\n   ```text\n   /plugin install olano-singapore@olano\n   ```\n\n   Choose **User scope** when it asks, so the plugin works in every project. If the summary says\n   `Run /reload-plugins to activate.`, run that command too; otherwise the plugin is already live.\n\n3. **Confirm and ask a question.** Run:\n\n   ```text\n   /mcp\n   ```\n\n   You should see `singapore` connected. Then try:\n\n   > List every station on the Thomson-East Coast Line in order and identify the interchanges.\n\n   The first call may take 20–30 seconds while the package downloads. After that it is fast.\n\n#### Prefer to have Claude do it?\n\nPaste this into Claude Code and it will run the setup and check it for you:\n\n```text\nInstall the complete Olano Singapore plugin for me. Run\n`npx -y @olano/sg-cli setup claude`, verify it with\n`npx -y @olano/sg-cli doctor claude`, and tell me when to start a new session.\nDo not ask me for optional API keys yet.\n```\n\n#### Prefer a terminal one-liner?\n\nThis does the same two steps without an interactive session, at user scope. It is safe to re-run\nwhenever you want to refresh the Olano marketplace:\n\n```bash\nnpx -y @olano/sg-cli setup claude\nnpx -y @olano/sg-cli doctor claude\n```\n\nStart a new Claude Code session afterwards, or run `/reload-plugins` in an open one.\n\n<details>\n<summary><strong>Just the tools, without the Agent Skills</strong></summary>\n\n```bash\nclaude mcp add --transport stdio --scope user singapore -- npx -y @olano/mcp-singapore\n```\n\nStart a new session and run `/mcp`. This installs every MCP tool but none of the packaged Agent\nSkills, so Claude gets the same data with less guidance on how to use it. The plugin above is the\nbetter default.\n\n</details>\n\n### Codex app\n\nThe Codex app and Codex CLI share the same MCP configuration, so you only need to install the server\nonce.\n\n1. Open **Settings → MCP servers → Add server**.\n\n2. Enter `singapore` as the name, choose **STDIO**, use `npx` as the command, and enter these\n   arguments:\n\n   ```text\n   -y @olano/mcp-singapore\n   ```\n\n3. Save, select **Restart**, and type `/mcp` in a new conversation to confirm that `singapore` is\n   connected.\n\nAlready installed it with the Codex CLI? Then there is nothing else to add. Restart the app and it\nwill use the same configuration.\n\n### Codex CLI\n\n1. Add the complete MCP server:\n\n   ```bash\n   codex mcp add singapore -- npx -y @olano/mcp-singapore\n   ```\n\n2. Confirm that it is enabled:\n\n   ```bash\n   codex mcp list\n   ```\n\n3. Start a new Codex session and run `/mcp`, then ask a question.\n\nPrefer to ask Codex to do the installation? Paste this prompt:\n\n```text\nInstall the complete Olano Singapore MCP for me. Run\n`codex mcp add singapore -- npx -y @olano/mcp-singapore`, verify it with\n`codex mcp list`, and tell me when to start a new session.\nDo not request optional API keys yet.\n```\n\nThe command intentionally has no `--profile` argument. With no profile selected,\n`@olano/mcp-singapore` loads the complete suite.\n\n### If something is not working\n\nFind the row that matches what you see. The Node.js rows apply only to the `npx` routes — the Claude\nDesktop extension has no such dependency.\n\n| What you see                                       | What to do                                                                                                                                                                               |\n| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Double-clicking the `.mcpb` file does nothing      | Open Claude Desktop first, then drag the file onto its **Settings** window, or use **Settings → Extensions → Advanced settings → Install Extension…**.                                   |\n| Claude Desktop warns the extension is not signed   | Expected. This project does not sign its bundles yet. Download only from the [releases page](https://github.com/olano-ai/mcp-singapore/releases).                                        |\n| The extension installed but Claude ignores it      | Open **Settings → Extensions** and confirm it is enabled. Extensions apply to new messages, not to a conversation already in progress.                                                   |\n| `singapore` is not listed at all                   | On the configuration-file route, you did not fully quit and reopen the app. Closing the window is not enough — quit it completely, then reopen.                                          |\n| The server shows as failed or disconnected         | Run `node --version` in a terminal. If it is missing or below `v20`, install [Node.js](https://nodejs.org/) LTS and restart the app — or switch to the extension, which needs neither.   |\n| It fails on Windows                                | Switch the config to `\"command\": \"cmd\"` with `\"args\": [\"/c\", \"npx\", \"-y\", \"@olano/mcp-singapore\"]`, then restart the app.                                                                |\n| Claude Desktop says the config file is invalid     | A missing or extra comma, or a missing outer `{`. Paste your file into a JSON validator, or copy [`examples/claude-desktop.json`](examples/claude-desktop.json) over it and start again. |\n| The first question is very slow                    | Expected on the `npx` routes; the package downloads on first run. The extension has no first-run download.                                                                               |\n| Claude Code says `/plugin` is not a known command  | Update Claude Code: `npm install -g @anthropic-ai/claude-code@latest`, or `brew upgrade claude-code`. Then restart your terminal.                                                        |\n| The plugin installed but the tools are missing     | Run `/reload-plugins` in the session, or start a new session. Then run `/mcp` again.                                                                                                     |\n| A tool reports a missing environment variable      | That tool needs a free key from OneMap or LTA DataMall. Add it in **Settings → Extensions**, or see [Credentials and caching](#credentials-and-caching). Everything else works without.  |\n| Claude answers from memory instead of using a tool | Ask for the source explicitly, for example \"using the Singapore MCP tools, show the latest PSI readings with timestamps\".                                                                |\n\nCheck the exact state of a Claude Code install at any time:\n\n```bash\nnpx -y @olano/sg-cli doctor claude\n```\n\nStill stuck? [Open an issue](https://github.com/olano-ai/mcp-singapore/issues) with your app name,\nyour operating system, how you installed, and the output of `node --version`.\n\n### Optional: choose a smaller profile\n\nThe quick-start commands above install everything. Later, experienced users can choose a focused\nprofile to send fewer tool definitions to the model.\n\n| Profile    | Good for                                                        |\n| ---------- | --------------------------------------------------------------- |\n| `property` | HDB, private property, neighbourhoods, amenities, and mortgages |\n| `mobility` | MRT/LRT, buses, roads, parking, taxis, routing, and COE         |\n| `business` | Companies, UENs, formations, sectors, retail, and tourism       |\n| `economy`  | GDP, prices, jobs, income, population, and trade                |\n| `civic`    | Weather, health, education, childcare, safety, and services     |\n| `finance`  | Official rates, mortgage scenarios, FX, income, and inflation   |\n| `all`      | The complete Singapore suite                                    |\n\nEach profile has its own Claude Code plugin. Install one the same way as the complete plugin:\n\n```text\n/plugin install olano-singapore-property@olano\n```\n\nOr select a profile from a terminal, where `--profile` narrows the MCP server directly:\n\n```bash\nnpx -y @olano/sg-cli setup claude property\ncodex mcp add singapore-property -- npx -y @olano/mcp-singapore --profile property\n```\n\nFor Claude Desktop, add `\"--profile\", \"property\"` to the `args` array in the config file. The\none-click extension always loads the complete suite; use the configuration-file route if you want a\nprofile there.\n\n### Questions to try\n\n- “List every station on the Thomson-East Coast Line in order and identify the interchanges.”\n- “Find the nearest MRT or LRT stations to latitude 1.29027, longitude 103.851959.”\n- “Find the official public ACRA records matching `Olano` and show the UEN and entity status.”\n- “Show the latest two-hour weather forecast and PSI, with timestamps.”\n- “Compare Singapore CPI and retail sales over exactly matched monthly periods.”\n- “Stress-test a S$600,000 mortgage at 2.5%, 3.5%, and 4.5%, showing every assumption.”\n\nMore examples are available in [Example questions](#example-questions) or from:\n\n```bash\nnpx -y @olano/sg-cli examples\n```\n\n**New here? Stop now and try a question.** The rest of this README documents packages, transports,\ncredentials, data sources, and development.\n\n## More ways to run it\n\n### Run without saving MCP configuration\n\n```bash\nnpx -y @olano/mcp-singapore\n```\n\nAdd it to a client that accepts the common `mcpServers` format:\n\n```json\n{\n  \"mcpServers\": {\n    \"singapore\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@olano/mcp-singapore\"],\n      \"env\": {\n        \"DATA_GOV_SG_API_KEY\": \"optional-data-gov-key\",\n        \"ONEMAP_TOKEN\": \"your-onemap-token\",\n        \"LTA_DATAMALL_API_KEY\": \"your-lta-account-key\",\n        \"OLANO_SG_CACHE_DIR\": \"/absolute/path/to/olano-sg-cache\"\n      }\n    }\n  }\n}\n```\n\nRemove credentials you do not use and never commit real values. The server starts without any\ncredential; only tools that require one will return a missing-credential error.\n\n### Smaller server-side tool profiles\n\nThe aggregate defaults to `all`. To reduce the tool definitions sent to a model, select a focused\nproduction profile without losing MCP prompts or resources:\n\n```bash\nnpx -y @olano/mcp-singapore --profile mobility\nOLANO_SG_PROFILE=property npx -y @olano/mcp-singapore\n```\n\nThe stable profiles are `mobility`, `property`, `business`, `economy`, `civic`, and `finance`.\n`singapore_tool_profiles` is always available and returns each profile's prefix contract, exact live\ntool count, and optional tool-name inventory. The same definitions power `olano-sg profiles` and\n`olano-sg profile <name>`. An unknown profile fails at startup instead of silently falling back to\n`all`.\n\n### MCP over Streamable HTTP\n\n```bash\nnpx -y @olano/mcp-singapore --transport http --host 127.0.0.1 --port 3000\n```\n\nThe MCP endpoint is `http://127.0.0.1:3000/mcp`. Localhost is the default bind address. Add TLS,\nauthentication, request limits, and operational monitoring before exposing it to a network.\n\nFocused servers use the same flags:\n\n```bash\nnpx -y @olano/mcp-rail-sg --transport http --port 3001\nnpx -y @olano/mcp-weather --transport http --port 3002\n```\n\n### CLI\n\nThe npm package is `@olano/sg-cli`; its executable is `olano-sg`.\n\n```bash\nnpx -y @olano/sg-cli list\nnpx -y @olano/sg-cli search rail\nnpx -y @olano/sg-cli examples\nnpx -y @olano/sg-cli examples property\nnpx -y @olano/sg-cli ask \"Compare recent HDB resale prices in Bedok\"\nnpx -y @olano/sg-cli datasets economy\nnpx -y @olano/sg-cli prompts\nnpx -y @olano/sg-cli tool weather_two_hour_forecast '{}'\nnpx -y @olano/sg-cli setup claude property\nnpx -y @olano/sg-cli doctor claude property\n```\n\n`ask` and its `query` alias use a deterministic local router. They recommend tools, extract obvious\narguments, and report missing inputs; they do not send the question to an external model or silently\nexecute the recommendation. Use `tool` for an explicit invocation.\n\nFor client-specific reference, updates, and validation, see\n[Claude Desktop](docs/claude-desktop.md), [Claude Code plugins](docs/claude-code.md), and\n[Codex and OpenAI plugins](docs/openai-plugins.md).\n\n## Prompts and resources\n\nThe aggregate server packages reusable MCP prompts:\n\n- `research-singapore`\n- `research-neighbourhood`\n- `research-company`\n- `analyze-property`\n- `analyze-mobility`\n\nIt also exposes read-only resources at `singapore://about`, `singapore://sources`, and\n`singapore://examples`. Tool-based discovery is available through `singapore_prompt_categories`,\n`singapore_prompt_examples`, `singapore_prompt_for_tool`, and `singapore_ask`.\n\n## Packaged Agent Skills\n\nThe repository includes eight reusable workflows for clients that support Agent Skills:\n\n- `research-singapore` — general locations, mobility, economy, population, environment, and public\n  services research;\n- `analyze-singapore-property` — HDB/private-property evidence, neighbourhood, transport, amenities,\n  and educational mortgage scenarios;\n- `research-singapore-business` — ACRA/UEN lookup, business formations, sectors, labour, inflation,\n  exchange rates, retail, tourism, and trade context;\n- `analyze-singapore-mobility` — MRT/LRT, bus, road, parking, taxi, routing, and COE analysis;\n- `analyze-singapore-economy` — period- and unit-aware economic indicator analysis;\n- `research-singapore-civic` — weather, health, education, population, safety, and public services;\n- `analyze-singapore-finance` — official rates and transparent mortgage and affordability scenarios;\n  and\n- `develop-with-singapore-mcp` — profile selection, exact tool calls, credentials, transports, and\n  troubleshooting.\n\nSee [skills/README.md](skills/README.md) for installation and usage guidance.\n\n## Credentials and caching\n\n| Variable               | Purpose                                                                    |\n| ---------------------- | -------------------------------------------------------------------------- |\n| `DATA_GOV_SG_API_KEY`  | Optional data.gov.sg key for production use and provider limits            |\n| `ONEMAP_TOKEN`         | OneMap bearer token for authenticated OneMap tools and rail address lookup |\n| `LTA_DATAMALL_API_KEY` | LTA DataMall subscriber Account Key for dynamic transport APIs             |\n| `OLANO_SG_CACHE_DIR`   | Optional absolute directory for the persistent public-response cache       |\n| `OLANO_SG_PROFILE`     | Optional aggregate tool profile; defaults to `all`                         |\n\nEvery provider uses an in-memory TTL cache. Setting `OLANO_SG_CACHE_DIR` additionally persists\neligible public responses between processes. Cache entries use provider-specific TTLs and hashed\nkeys, are partitioned by a hash of the request-header identity, and omit the entire query string from\nstored source metadata. Response payloads can still contain addresses, company searches, or other\nrequest results. Do not share one cache directory across untrusted tenants; protect it as application\ndata and clear it when retention requirements demand it. `singapore_cache_info` reports whether it is\nenabled.\n\n## Official upstream sources and attribution\n\nThe suite keeps source agency, dataset/table identifier, source URL, retrieval time, observation\nperiod, units, and freshness caveats wherever the upstream format allows it.\n\n- [data.gov.sg developer guide](https://guide.data.gov.sg/developer-guide/api-overview) — Singapore\n  public datasets published by their named agencies, including ACRA, HDB, URA, MOE, ECDA, IRAS,\n  STB, EMA, SPF, MOH, and NEA datasets used by the curated catalog.\n- [OneMap API documentation](https://www.onemap.gov.sg/apidocs/) — Singapore Land Authority address,\n  geocoding, and routing services.\n- [LTA DataMall](https://datamall.lta.gov.sg/content/datamall/en.html) — Land Transport Authority\n  dynamic transport APIs and downloadable rail datasets.\n- [SingStat Table Builder](https://tablebuilder.singstat.gov.sg/) — Singapore Department of\n  Statistics economic, business, labour, trade, and population tables.\n- [Meteorological Service Singapore](https://www.weather.gov.sg/) — official weather context; the\n  implemented real-time feeds are retrieved through data.gov.sg.\n- [Official bank interest rates dataset](https://data.gov.sg/datasets/d_5fe5a4bb4a1ecc4d8a56a095832e2b24/view)\n  — SingStat-published series sourced from the Monetary Authority of Singapore, including SORA and\n  published bank interest-rate statistics.\n- [Singapore Open Data Licence](https://data.gov.sg/open-data-licence) — licence applying to covered\n  data.gov.sg materials.\n\nRail tools additionally disclose the exact LTA snapshot date and source URL through\n`rail_source_metadata`. API availability, data accuracy, rate limits, licences, and upstream terms\nremain controlled by the respective providers. Applications must comply with those terms and retain\nrequired attribution.\n\n## Financial-data boundary\n\nOlano integrates only the free official mortgage reference-rate dataset described above. It does\nnot expose live SGX quotes, lender product offers, or insurance premiums because no stable free\nofficial API with suitable production and redistribution terms has been verified. It does not scrape\ncomparison sites or label third-party quote data as official Singapore data. Use\n`finance_singapore_data_availability` for the current boundary and official reference links.\n\n## Safety and engineering\n\nThe servers are read-only. Zod validates inputs; upstream origins and paths are fixed in code;\nrequests use timeouts, bounded response sizes, retries, rate spacing, and caching; and tools return\nexplicit errors for missing credentials. Derived tools disclose assumptions and do not turn area,\ncompany, crime, property, or finance data into unsupported personal conclusions.\n\n## Development\n\nRequires Node.js 20 or newer.\n\n```bash\nnpm install\nnpm run format:check\nnpm run lint\nnpm test\nnpm run build\n```\n\nInspect the aggregate server interactively:\n\n```bash\nnpx @modelcontextprotocol/inspector node packages/singapore/dist/cli.js\n```\n\nBuild and verify the Claude Desktop bundle. `check:mcpb` unpacks the packed `.mcpb` outside the\nrepository and starts it with the exact command its own manifest declares, so a dependency that only\nresolves through the monorepo fails here rather than on a user's machine:\n\n```bash\nnpm run build:mcpb\nnpm run check:mcpb\n```\n\nSee [Architecture](docs/architecture.md), [Claude Desktop](docs/claude-desktop.md),\n[Contributing](CONTRIBUTING.md), and [Security](SECURITY.md).\n\n## Licence\n\nSource code is released under the MIT License. Government data remains subject to the licence and\nterms published by each source agency.\n",
  "bytes": 43509,
  "sha": "f73ebd32efc5d28217e88052dda532debb635e7ca8a69e709ccb0b8435734778",
  "repo_slug": "olano-ai/mcp-singapore",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_olano_ai_mcp_singapore_46277a04/readme"
}