npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

siyana

v0.1.0

Published

Siyana — open-source MCP server delivering region-tuned facilities-management asset knowledge: specs, fault resolution, and PPM schedules for HVAC, electrical, and plumbing. Launching GCC-first.

Downloads

163

Readme

Siyana

صِيانة — Arabic for "maintenance."

Open-source Model Context Protocol server delivering region-tuned facilities-management asset knowledge — specs, fault resolution, and PPM schedules — directly inside any LLM client. Launching GCC-first.

Facilities teams in the Gulf answer the same questions every day: What are the specs for this asset? How do I resolve this fault? What's the right preventive-maintenance schedule for it in this climate? This server puts that knowledge — tuned for the Middle East's heat, dust, and hard water — one question away in Claude, Cursor, or any MCP-compatible client.

⚠️ Guidance, not gospel. The knowledge base is synthesised from public manufacturer information and open standards, then GCC-tuned. It is not a substitute for the OEM manual, a competent engineer's judgement, or local regulations. Always verify before acting.


🌱 A living, community-grown knowledge base

Siyana is an open ecosystem — the knowledge base grows with the FM community, not just one vendor. Anything missing? Request it in one click, no coding required:

| If you want to… | Open this issue | |------|------| | Add equipment we don't cover (e.g. a fire pump) | 🧰 New asset / equipment | | Add a brand to assets we have (e.g. "Add Trane HVAC equipment") | 🏷️ Add a brand / manufacturer | | Propose a new trade or service (fire, BMS, lifts, cleaning…) | 🧱 New trade / service | | Start a new region (UK, US, ANZ, EU…) | 🌍 New region dataset | | Flag something wrong or outdated | 🩹 Report inaccurate data |

Prefer to contribute the knowledge directly? Even better — see CONTRIBUTING.md. Every entry is paraphrased and cited (never copyrighted text), reviewed by a maintainer, and shipped in the next release. Run npm run stats to see current coverage.


What it covers (v1)

Three trades, ~16 core asset types, each with specifications, GCC-tuned PPM schedules, fault-resolution guides, and cited sources:

| Trade | Assets | |-------|--------| | HVAC | Air-cooled chiller, AHU, FAHU, VRF/VRV, split AC, cooling tower, fan coil unit | | Electrical | LV distribution board, diesel generator, UPS, distribution transformer, ACB/LV switchgear | | Plumbing | Booster pump set, submersible drainage/sewage pump, electric water heater, GRP water tank |

Not yet included: market/labour rates (planned for v2). See Roadmap.

Tools

| Tool | What it does | |------|--------------| | list_asset_categories | List the trades and every available asset type with its id. Start here. | | search_assets | Fuzzy-search by keyword, asset type, brand, or model (e.g. "Daikin VRV"). | | get_asset_spec | Full specs for an asset type, plus cited brand/model spec sheets and region context. | | get_ppm_schedule | Region-tuned preventive-maintenance tasks, frequencies, and the standard behind each. | | get_fault_resolution | Diagnose a symptom → likely causes, step-by-step resolution, safety notes. |

Live weather-aware tools (need network; disable with SIYANA_OFFLINE=1):

| Tool | What it does | |------|--------------| | get_weather | Current conditions + daily forecast + elevated dust/PM10 for a location. | | estimate_cooling_energy | Indicative cooling kWh (and optional cost / peak TR) for a space, using live degree-days × a cited region/building-type benchmark. | | get_maintenance_advisory | Turns the forecast into proactive maintenance actions (heatwave → coil clean, dust → filters), optionally tied to a specific asset's PPM tasks. |


Quick start

Requires Node.js ≥ 18. The server runs over stdio and needs no configuration or network access.

npx siyana

Claude Desktop / Claude Code

Add to your MCP config (claude_desktop_config.json, or .mcp.json for Claude Code):

{
  "mcpServers": {
    "siyana": {
      "command": "npx",
      "args": ["-y", "siyana"]
    }
  }
}

Cursor

In ~/.cursor/mcp.json (or project .cursor/mcp.json):

{
  "mcpServers": {
    "siyana": {
      "command": "npx",
      "args": ["-y", "siyana"]
    }
  }
}

Then ask, for example:

  • "What's the PPM schedule for a Daikin VRV running in Dubai?"
  • "My air-cooled chiller keeps tripping on high pressure in summer — how do I resolve it?"
  • "How often should I clean a GRP water tank in the UAE, and why?"

Why GCC-tuned?

Generic global maintenance data under-serves the Gulf. This knowledge base bakes in:

  • Extreme heat — high-ambient derating, more frequent condenser-coil cleaning, battery-life impacts.
  • Dust & sand — shorter filter life, radiator/coil fouling, sand-trap louvres.
  • Hard water — scaling of heaters, cooling-tower fill, and pump seals; descaling regimes.
  • Local norms — references to DEWA, SASO, Dubai Municipality, and Civil Defence requirements.

Regions & scope

Siyana ships one dataset per region, and the server is scoped to a region as an environment property. Each region is a self-contained dataset — a GCC chiller and a UK chiller are different files with their own specs, PPM, and faults. Tools only ever read from the active region's dataset.

data/
  gcc/                          ← region = dataset (the only one populated today)
    equipments/<category>/
      category.md               ← frontmatter (specs · PPM · faults) + Markdown body (guidance)
      <brand>/<model>.md        ← model specs + link to the OEM's official manual
    services/    resources/    benchmarks/   ← further pillars (rolling out)
  uk/  us/  anz/  eu/           ← add a region by adding a folder; no rebrand

Siyana's knowledge is organised into four region-scoped pillars: equipments (category → brand → model, live today), services (trades like housekeeping/glass-cleaning), resources (FM roles + indicative rates), and benchmarks (by facility type).

  • Scope with SIYANA_REGION (gcc | uk | us | anz | eu); defaults to gcc. The server reads from data/<region>/ and every tool is confined to it.
  • Override per call: each tool also accepts an optional region argument to read another region's dataset.
  • list_asset_categories reports the active region, the default, and which regions have data today.
  • Asking for a region with no dataset returns a clear "no asset … in region" message — never silent or wrong.
// Scope a server instance to the UK dataset
{
  "mcpServers": {
    "siyana-uk": {
      "command": "npx",
      "args": ["-y", "siyana"],
      "env": { "SIYANA_REGION": "uk" }
    }
  }
}

Today only the gcc dataset is populated. See the roadmap.

Weather-aware intelligence

Static guidance becomes situational when it knows the local weather. Siyana integrates the free, open, no-key Open-Meteo API so it can:

  • Estimate cooling energy for a space from live climate data — e.g. "how much energy will my 10,000 sqft Dubai office need this summer?" It pulls cooling-degree-days for the location and applies a cited region/building-type energy-intensity benchmark.
  • Plan maintenance around the forecast — a 48 °C heatwave next week → prioritise condenser-coil cleaning; a dust event → bring filter changes forward.
estimate_cooling_energy({ location: "Dubai", area_sqft: 10000, building_type: "office", period: "summer" })
→ ~74,000 kWh (range 55k–98k) · summer CDD 2,186 · indicative ±~25%, with assumptions + sources

Indicative, not an MEP load calculation. Estimates use the degree-day × benchmark method with wide error bars. The benchmarks in reference/benchmarks/ are community-maintained — improve them via PRs.

Design: the five knowledge tools are fully offline and deterministic — only the three weather tools use the network, with timeouts, caching, and graceful failure. Run SIYANA_OFFLINE=1 to disable the weather layer entirely (e.g. air-gapped sites); the knowledge tools keep working. Weather data © Open-Meteo.com (CC BY 4.0).

How the knowledge stays up to date

  • Every asset file carries sources and a last_reviewed date.
  • New brand/model or revised practice → open a pull request → CI validates → maintainer review → release. npx users get it on the next run.
  • npm run freshness reports entries overdue for review; a scheduled CI job opens "review needed" issues.

Found an asset we're missing, or something out of date? Open an issue or PR — see CONTRIBUTING.md.


Development

npm install
npm run dev        # run the server from source (tsx)
npm test           # run the test suite
npm run validate   # validate every data file against the schema
npm run gen-schema # regenerate schema/asset.schema.json from src/schema.ts
npm run build      # compile to dist/
npm run inspect    # build + open the MCP Inspector against the server

The data shape is defined once in src/schema.ts (zod) and mirrored to schema/asset.schema.json for contributors and CI.


Roadmap

  • v2 — market & labour rates: SQFT- and trade-wise FM staff/service rate benchmarks for GCC markets (sourcing under evaluation).
  • Global regions: Siyana is region-agnostic by design — GCC ships first, with UK / US / ANZ / EU profiles to follow as a region dimension of the data (no rebrand, same package).
  • More trades: fire & life-safety, BMS, vertical transport.
  • Arabic-language content.
  • Optional HTTP/SSE transport for hosted deployments.

License

Maintained by the community.