内容
# mugilu
[](https://github.com/urbanmorph/mugilu/actions/workflows/ci.yml) [](./LICENSE) [](https://mugilu.live) [](https://mugilu.live/mcp) [](https://workers.cloudflare.com)
**印度的开阔天空,一次一个坐标。** 给出印度任何一个地点,获取当前天空状况:空气、热量(含湿球温度)、雨、紫外线、灰尘和该位置的官方政府警告。开放、免费,适用于人类、应用程序和AI代理。
> ಮುಗಿಲು 是卡纳达语,意为*云/天空*。这是与 **[bharatlas](https://bharatlas.com)** (开放地理)和 **[mdshare](https://mdshare.live)** 一起的小型公共工具之一。在 **[mugilu.live](https://mugilu.live)** 上实时运行。

## 尝试使用
- **[mugilu.live](https://mugilu.live)** — 输入任意地点,以任意语言(ಬೆಂಗಳೂರು · दिल्ली · சென்னை)
- 一个点: **[/c/12.97,77.59](https://mugilu.live/c/12.97,77.59)** · 一个地点: **[/c/bengaluru](https://mugilu.live/c/bengaluru)** · 为某人: **[/c/delhi?as=asthma](https://mugilu.live/c/delhi?as=asthma)**
## 它是什么
其他地方的天空被分割和锁定:空气应用程序显示空气,天气应用程序显示天气,政府自己的数据位于彼此不通信的独立应用程序中,而组合任何数据的工具都是付费且模拟的。mugilu 将其重新拼接成一个适用于印度的、基于位置的单一层。
- **`坐标 → 条件`** 适用于任意点:来自真实地面站的空气质量、热量和湿球温度、雨、紫外线、灰尘和活跃的 **NDMA / SACHET** 警告。
- 一个 **环境** 读取,命名单个最严重的危险并给出建议,根据提问者进行加权:哮喘、老年人、儿童、户外工人、心血管疾病。
- 每个读取结果以 **HTML** 格式显示给人类,以 **JSON** 格式显示给应用程序,以 **Markdown** 格式显示给大型语言模型(LLM),并为代理提供 **MCP** 服务器。
## 使用它
开放且无密钥。相同的读取结果有四种方式:
```bash
# JSON — 按坐标或名称,可选地为漏洞加权
curl https://mugilu.live/c/12.97,77.59.json
curl "https://mugilu.live/c/delhi.json?as=asthma"
```
精简的响应(完整层:`air`、`heat`、`rain`、`uv`、`dust`、`wind`、`visibility`、`smoke`、`warnings`):
```json
{
"schema": "mugilu/conditions",
"version": 1,
"place": "德里, 德里",
"ambient": {
"risk_band": "严重",
"driver": "热量",
"persona": "哮喘",
"summary": "危险的热量。避免户外活动。"
},
"air": { "kind": "measured", "aqi": 140, "band": "中等", "yll_years": 0.83 },
"heat": { "apparent_c": 46, "wet_bulb_c": 27 },
"attribution": "… 通过 mugilu",
"disclaimer": "仅供参考 — 不适用于医疗、紧急或安全关键决策。"
}
```
**对于AI代理** — 一个MCP服务器(JSON-RPC 2.0 via Streamable HTTP):
```bash
npx @modelcontextprotocol/inspector --cli https://mugilu.live/mcp --transport http --method tools/list
```
… 或在Claude或Cursor中添加 `https://mugilu.live/mcp` 作为自定义连接器,并询问 *"我的哮喘儿童现在在Indiranagar外面玩安全吗?"*
| 路由 | 返回 |
|---|---|
| `/c/{lat},{lon}` (+ `.json` `.md` `.png`) | 一个点的条件 — HTML、JSON、Markdown 或共享图像 |
| `/c/{slug}` | 一个命名地点,例如 `/c/bengaluru` |
| `?as=` (哮喘 · 老年人 · 儿童 · 户外 · 心脏病) | 为漏洞权重计算环境读取 |
| `/near` · `/suggest` | 最近的空气站 · 地点搜索(原生脚本有效) |
| `/index.json` · `/warnings.json` | 全国空气排行榜 · 活跃的NDMA/IMD警告 |
| `/embed/{lat},{lon}` | 可嵌入的卡片,一行HTML代码 |
| `/mcp` · `/openapi.json` · `/llms.txt` | MCP服务器 · OpenAPI 3.1 规范 · LLM清单 |
| `?ref=your-app` | 在任何API/嵌入调用时自我识别(聚合属性) |
**刷新:** 读取结果每15分钟重新计算一次(空气和官方警告每小时变化一次,天气最多每15分钟变化一次)。单个条件响应携带每个指标,以及自己的 `as_of` 和 `refresh_after_seconds` 字段,由JSON、Markdown和 `/embed` 接口的 `Cache-Control` max-age 镜像。每15分钟轮询或重新加载一次每个地点:更快返回相同数据。如果您嵌入卡片,则意味着每15分钟刷新一次iframe,或者使用 `/c/{place}?kiosk`(显示视图),它会自动刷新。
## 在本地运行
一个Cloudflare Worker,可分叉和自托管。需要 **Node 22+** 、 **[pnpm](https://pnpm.io)** ,以及部署所需的Cloudflare账户。
```bash
git clone https://github.com/urbanmorph/mugilu.git
cd mugilu && pnpm install
cd apps/worker
pnpm dev # 本地开发 → http://localhost:8787
pnpm test # 测试套件(node --test via tsx)
pnpm typecheck # tsc --noEmit
pnpm deploy # wrangler deploy(您的CF账户 + wrangler.toml中的KV/R2/D1绑定)
```
空气快照、国家网格和警告由cron刷新到R2,因此新的分叉在第一次cron运行之前是空的(或您访问 `/collect` 路由)。
## 架构
单个Cloudflare Worker。cron作业每小时刷新空气快照、每小时轮询和存档NDMA/SACHET警告、每四小时采样一次国家热/雨/紫外线/灰尘网格,全部存储在R2中。对 `/c/{lat},{lon}` 的请求将最近的站点空气、实时Open-Meteo天气和点警告组装成一个标准化的模式,以便每个源都是一个可交换的适配器。客户端JS接近零;读取路径上没有数据库。
## 原则
- **免费、开放、MIT许可**。适用于个人。 **非商业**,始终如此。
- **全天空,从不单独的空气**。热量、雨、紫外线、灰尘和官方警告是一流的。
- **没有担保,没有准确性保证**。仅用于信息和教育, **不适用于医疗、紧急或安全关键决策**。有关官方危险警告,请直接咨询NDMA和IMD。
- **诚实面对差距**。它是拼接、开放性和接口,而不是数据。数据归他人所有,并被注明出处。测量的和模拟的数据被标记;覆盖范围薄的层被标记或省略。
- **最小且快速**。Cloudflare免费层,接近零JS,无数据库。
mugilu遵循 **PDGI.md** 中的人民数字商品和基础设施原则;玻璃盒方法(每个阈值)位于 **[/methodology](https://mugilu.live/methodology)**。
## 数据和出处
空气镜像来自 **[oaq.notf.in](https://oaq.notf.in)** (开放空气质量经纪人:**CPCB**、**Airnet** 由 [CSTEP](https://cstep.in) 和 **Aurassure** 组成)和OpenAQ。天气、热量、紫外线和灰尘来自 **[Open-Meteo](https://open-meteo.com)** (CC-BY 4.0)。警告来自 **NDMA / SACHET** 和 **IMD**。地理信息来自 **[bharatlas](https://bharatlas.com)**。健康影响数据使用 **[AQLI](https://aqli.epic.uchicago.edu/)** 方法学(芝加哥大学EPIC)。**每个来源保留其自己的许可** — 请参阅每页出处和 `/terms`。
## 贡献
欢迎提出问题和PR。新的数据源是标准化模式中的新适配器;需要测试(`pnpm test`)并且更改发生在分支上(通过 `pnpm deploy` 手动部署)。仓库故意保持较小 — 阅读 [`apps/worker/src/index.ts`](./apps/worker/src/index.ts) 以便在单个位置查看整个路由表面。
## 许可证
代码:**MIT** (参见 [LICENSE](./LICENSE))。数据 **不** 重新许可:每个上游源的许可证和出处均适用。
---
由 [urbanmorph](https://urbanmorph.com) 制作 · 数字公共资源 · [pdgi.org](https://pdgi.org)