iran-cloud-status-mcp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- iran_cloud_status_mcp-0.1.0/.github/dependabot.yml +10 -0
- iran_cloud_status_mcp-0.1.0/.github/workflows/ci.yml +22 -0
- iran_cloud_status_mcp-0.1.0/.github/workflows/publish.yml +51 -0
- iran_cloud_status_mcp-0.1.0/.gitignore +6 -0
- iran_cloud_status_mcp-0.1.0/LICENSE +21 -0
- iran_cloud_status_mcp-0.1.0/PKG-INFO +110 -0
- iran_cloud_status_mcp-0.1.0/README.md +82 -0
- iran_cloud_status_mcp-0.1.0/pyproject.toml +56 -0
- iran_cloud_status_mcp-0.1.0/server.json +32 -0
- iran_cloud_status_mcp-0.1.0/src/iran_cloud_status_mcp/__init__.py +5 -0
- iran_cloud_status_mcp-0.1.0/src/iran_cloud_status_mcp/cloud.py +459 -0
- iran_cloud_status_mcp-0.1.0/src/iran_cloud_status_mcp/http.py +251 -0
- iran_cloud_status_mcp-0.1.0/src/iran_cloud_status_mcp/pricing.py +183 -0
- iran_cloud_status_mcp-0.1.0/src/iran_cloud_status_mcp/providers.py +498 -0
- iran_cloud_status_mcp-0.1.0/src/iran_cloud_status_mcp/registry.py +16 -0
- iran_cloud_status_mcp-0.1.0/src/iran_cloud_status_mcp/server.py +92 -0
- iran_cloud_status_mcp-0.1.0/tests/conftest.py +78 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/arvan_components.json +166 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/arvan_incident_101.json +1 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/arvan_incidents.json +371 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/arvan_schedules.json +98 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/arvan_status.json +6 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/cb_incident_4.json +1 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/cb_incidents.json +242 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/cb_maintenances.json +6 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/cb_overview.json +10 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/cb_services.json +98 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/chabokan_pricing.html +1 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/ham_components.json +39 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/ham_history.json +122 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/ham_notices.json +27 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/hamravesh.html +1 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/liara.html +24 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/mihan_uptime.html +1 -0
- iran_cloud_status_mcp-0.1.0/tests/fixtures/parspack.html +147 -0
- iran_cloud_status_mcp-0.1.0/tests/test_cloud.py +268 -0
- iran_cloud_status_mcp-0.1.0/tests/test_live_cloud.py +63 -0
- iran_cloud_status_mcp-0.1.0/uv.lock +1362 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
python: ["3.10", "3.11", "3.12", "3.13"]
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v7
|
|
16
|
+
- uses: astral-sh/setup-uv@v10.2.0
|
|
17
|
+
with:
|
|
18
|
+
python-version: ${{ matrix.python }}
|
|
19
|
+
- run: uv sync --locked
|
|
20
|
+
- run: uv run ruff check .
|
|
21
|
+
- run: uv run ruff format --check .
|
|
22
|
+
- run: uv run pytest -q
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
# Tag a release (git tag v0.1.0 && git push --tags) after bumping the version in
|
|
4
|
+
# pyproject.toml and server.json.
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
tags: ["v*"]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
pypi:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
environment: pypi
|
|
13
|
+
permissions:
|
|
14
|
+
id-token: write # PyPI trusted publishing
|
|
15
|
+
contents: write # GitHub Release
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v7
|
|
18
|
+
- uses: astral-sh/setup-uv@v10.2.0
|
|
19
|
+
- name: Check versions match the tag
|
|
20
|
+
run: |
|
|
21
|
+
TAG=${GITHUB_REF_NAME#v}
|
|
22
|
+
grep -q "^version = \"$TAG\"" pyproject.toml
|
|
23
|
+
test "$(jq -r .version server.json)" = "$TAG"
|
|
24
|
+
test "$(jq -r '.packages[0].version' server.json)" = "$TAG"
|
|
25
|
+
- run: uv sync --locked && uv run pytest -q
|
|
26
|
+
- run: uv build
|
|
27
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
28
|
+
- run: gh release create "$GITHUB_REF_NAME" dist/* --generate-notes --title "$GITHUB_REF_NAME"
|
|
29
|
+
env:
|
|
30
|
+
GH_TOKEN: ${{ github.token }}
|
|
31
|
+
|
|
32
|
+
mcp-registry:
|
|
33
|
+
needs: pypi
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
permissions:
|
|
36
|
+
id-token: write # MCP Registry login via GitHub OIDC
|
|
37
|
+
contents: read
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v7
|
|
40
|
+
- name: Wait for PyPI to serve the new version
|
|
41
|
+
run: |
|
|
42
|
+
for i in $(seq 1 30); do
|
|
43
|
+
curl -sf "https://pypi.org/pypi/iran-cloud-status-mcp/${GITHUB_REF_NAME#v}/json" >/dev/null && exit 0
|
|
44
|
+
sleep 10
|
|
45
|
+
done
|
|
46
|
+
exit 1
|
|
47
|
+
- name: Install mcp-publisher
|
|
48
|
+
run: |
|
|
49
|
+
curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v1.8.1/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
|
|
50
|
+
- run: ./mcp-publisher login github-oidc
|
|
51
|
+
- run: ./mcp-publisher publish
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sepehr Radmard
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: iran-cloud-status-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Unofficial read-only MCP server for Iranian cloud providers: live status, incidents, maintenance and public prices of ArvanCloud, Hamravesh, Chabokan and Liara.
|
|
5
|
+
Project-URL: Homepage, https://github.com/sepehr071/iran-cloud-status-mcp
|
|
6
|
+
Project-URL: Issues, https://github.com/sepehr071/iran-cloud-status-mcp/issues
|
|
7
|
+
Project-URL: Website, https://mcpfarsi.ir/
|
|
8
|
+
Author-email: Sepehr Radmard <sepehrr80@gmail.com>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: arvancloud,chabokan,claude,cloud,devops,hamravesh,incidents,iran,liara,mcp,model-context-protocol,persian,pricing,status-page,uptime
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: System :: Monitoring
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Requires-Dist: curl-cffi>=0.16.3
|
|
24
|
+
Requires-Dist: httpx-curl-cffi>=0.1.5
|
|
25
|
+
Requires-Dist: httpx>=0.27
|
|
26
|
+
Requires-Dist: mcp<3,>=2.2
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
<!-- mcp-name: io.github.sepehr071/iran-cloud-status-mcp -->
|
|
30
|
+
|
|
31
|
+
<div align="center">
|
|
32
|
+
|
|
33
|
+
# iran-cloud-status-mcp: Iranian cloud status, incidents and prices MCP server for AI agents
|
|
34
|
+
|
|
35
|
+
**iran-cloud-status-mcp is an unofficial, read-only MCP server that tells AI agents whether Iranian cloud providers are up.**<br>
|
|
36
|
+
Its 10 tools read the public status pages of ArvanCloud (آروان), Hamravesh (همروش), Chabokan (چابکان), ParsPack and Mihan WebHost, list incidents and<br>
|
|
37
|
+
maintenance, count outages over a period, and read the public price lists of Liara (لیارا), Hamravesh and Chabokan.<br>
|
|
38
|
+
No API key or account is needed. It works in Claude, Cursor, Copilot and any other MCP client.
|
|
39
|
+
|
|
40
|
+
[](https://pypi.org/project/iran-cloud-status-mcp/)
|
|
41
|
+
[](https://github.com/sepehr071/iran-cloud-status-mcp/blob/main/LICENSE)
|
|
42
|
+
|
|
43
|
+
[For AI agents](#for-ai-agents) · [Quick start](#quick-start) · [Tools](#tools) · [FAQ](#faq) · [فارسی](#فارسی)
|
|
44
|
+
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## For AI agents
|
|
50
|
+
|
|
51
|
+
- **What:** unofficial MCP server for the public status pages and price pages of Iranian clouds: live status per component, incidents with update timelines, planned maintenance, incident counts and outage minutes, plan and per-unit prices, and a price comparison for a given vCPU/RAM/disk size.
|
|
52
|
+
- **Install:** `uvx iran-cloud-status-mcp` or `claude mcp add iran-cloud-status -- uvx iran-cloud-status-mcp`. Transport: stdio. Needs [uv](https://docs.astral.sh/uv/getting-started/installation/) (Python 3.10+).
|
|
53
|
+
- **Auth:** none. Optional `IRAN_CLOUD_STATUS_MCP_PROXY` (HTTP proxy URL, or a comma-separated list); system proxy settings are ignored.
|
|
54
|
+
- **Access:** read-only. It cannot log in or change anything, so no confirmation is needed before calling any tool.
|
|
55
|
+
- **Tools:** 10, all prefixed `cs_`. Typical sequence: `cs_status` -> `cs_incidents` (active_only, updates) for a live problem; `cs_reliability` to compare providers; `cs_compare_prices` for the cheapest size.
|
|
56
|
+
- **Use when:** the user asks if ArvanCloud, Hamravesh or Chabokan is down or slow, what an outage was, whether maintenance is planned, which Iranian cloud was most stable, or what Liara or Hamravesh charge.
|
|
57
|
+
- **Do not use when:** the question is about another provider (Liara publishes no status page; ArvanCloud prices sit behind a JavaScript check and are not read) or about a customer's own account.
|
|
58
|
+
- **Output:** compact JSON. Status words: operational, degraded, partial_outage, major_outage, maintenance. Prices in Toman. Times are ISO in Iran time (+03:30). Titles and messages are the providers' own text (Persian or English).
|
|
59
|
+
|
|
60
|
+
## Why
|
|
61
|
+
|
|
62
|
+
During an outage the first question is "is it us or the cloud?". The three status pages have three different layouts
|
|
63
|
+
and APIs, and none of them says how the others are doing. With `iran-cloud-status-mcp` an agent answers in one call:
|
|
64
|
+
|
|
65
|
+
> **You:** Is anything broken at the Iranian clouds right now?
|
|
66
|
+
>
|
|
67
|
+
> **Agent:** *calls* `cs_status()`
|
|
68
|
+
>
|
|
69
|
+
> ArvanCloud reports a partial outage: "Qeysar Network Congestion" (open since 2026-10-10, Qeysar - Network at
|
|
70
|
+
> performance issues) and a planned MySQL 8.4 upgrade on 2026-11-03 02:00. Hamravesh and Chabokan: all services operational.
|
|
71
|
+
|
|
72
|
+
## Quick start
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
claude mcp add iran-cloud-status -- uvx iran-cloud-status-mcp
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
For other clients add `{"command": "uvx", "args": ["iran-cloud-status-mcp"]}` to the MCP server list.
|
|
79
|
+
|
|
80
|
+
## Tools
|
|
81
|
+
|
|
82
|
+
| Tool | What it does |
|
|
83
|
+
|---|---|
|
|
84
|
+
| `cs_status` | Live status of all providers: overall, components not operational, open incidents, upcoming maintenance. |
|
|
85
|
+
| `cs_providers` | What is covered per provider (no network call). |
|
|
86
|
+
| `cs_regions` | Status per region or group: component count, worst status, what is down. |
|
|
87
|
+
| `cs_components` | One provider's components with status; filter by text or only problems. |
|
|
88
|
+
| `cs_incidents` | Recent incidents, newest first, latest update or the whole timeline; filter by provider, days, open only, text. |
|
|
89
|
+
| `cs_incident` | One incident in full: whole timeline, affected components and the status set on each. |
|
|
90
|
+
| `cs_maintenance` | Announced maintenance windows that are upcoming or running; `include_past` adds recent finished ones. |
|
|
91
|
+
| `cs_reliability` | Incident count, open count, incident minutes (overlaps once) and share of the window over N days, most affected components; optional text filter. |
|
|
92
|
+
| `cs_pricing` | Liara plans (PaaS, DBaaS, IaaS, WordPress, Email, AI, ObjectStorage), Hamravesh per-unit prices, traffic, IP and monitoring fees, or Chabokan starting prices. |
|
|
93
|
+
| `cs_compare_prices` | Monthly price of one vCPU/RAM/disk size at Hamravesh (Iran, Germany) and Liara (cheapest fitting plan). |
|
|
94
|
+
|
|
95
|
+
## FAQ
|
|
96
|
+
|
|
97
|
+
**Which providers?** Status: ArvanCloud, Hamravesh, Chabokan, ParsPack (announcements only), Mihan WebHost (server up/down only). Prices: Liara, Hamravesh, Chabokan. Liara has no status page; ArvanCloud prices are not read.
|
|
98
|
+
|
|
99
|
+
**Is there an uptime percentage?** No provider publishes one. `cs_reliability` counts incidents and the time at least one was open (overlaps counted once); a partial incident counts fully, so it is not an uptime figure.
|
|
100
|
+
|
|
101
|
+
**Is it affiliated with the providers?** No. It reads the same public pages anyone can open.
|
|
102
|
+
|
|
103
|
+
## فارسی
|
|
104
|
+
|
|
105
|
+
`iran-cloud-status-mcp` یک سرور MCP غیررسمی و فقطخواندنی است که وضعیت زنده، رخدادها، تعمیرات برنامهریزیشده و قیمتهای عمومی
|
|
106
|
+
ابرهای ایرانی (آروان، همروش، چابکان و لیارا) را از صفحات عمومی خودشان میخواند. نیازی به کلید یا حساب کاربری نیست.
|
|
107
|
+
|
|
108
|
+
نصب: `claude mcp add iran-cloud-status -- uvx iran-cloud-status-mcp`
|
|
109
|
+
|
|
110
|
+
Author: Sepehr Radmard (سپهر رادمرد) · github.com/sepehr071 · linkedin.com/in/sepehr-radmard
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<!-- mcp-name: io.github.sepehr071/iran-cloud-status-mcp -->
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
# iran-cloud-status-mcp: Iranian cloud status, incidents and prices MCP server for AI agents
|
|
6
|
+
|
|
7
|
+
**iran-cloud-status-mcp is an unofficial, read-only MCP server that tells AI agents whether Iranian cloud providers are up.**<br>
|
|
8
|
+
Its 10 tools read the public status pages of ArvanCloud (آروان), Hamravesh (همروش), Chabokan (چابکان), ParsPack and Mihan WebHost, list incidents and<br>
|
|
9
|
+
maintenance, count outages over a period, and read the public price lists of Liara (لیارا), Hamravesh and Chabokan.<br>
|
|
10
|
+
No API key or account is needed. It works in Claude, Cursor, Copilot and any other MCP client.
|
|
11
|
+
|
|
12
|
+
[](https://pypi.org/project/iran-cloud-status-mcp/)
|
|
13
|
+
[](https://github.com/sepehr071/iran-cloud-status-mcp/blob/main/LICENSE)
|
|
14
|
+
|
|
15
|
+
[For AI agents](#for-ai-agents) · [Quick start](#quick-start) · [Tools](#tools) · [FAQ](#faq) · [فارسی](#فارسی)
|
|
16
|
+
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## For AI agents
|
|
22
|
+
|
|
23
|
+
- **What:** unofficial MCP server for the public status pages and price pages of Iranian clouds: live status per component, incidents with update timelines, planned maintenance, incident counts and outage minutes, plan and per-unit prices, and a price comparison for a given vCPU/RAM/disk size.
|
|
24
|
+
- **Install:** `uvx iran-cloud-status-mcp` or `claude mcp add iran-cloud-status -- uvx iran-cloud-status-mcp`. Transport: stdio. Needs [uv](https://docs.astral.sh/uv/getting-started/installation/) (Python 3.10+).
|
|
25
|
+
- **Auth:** none. Optional `IRAN_CLOUD_STATUS_MCP_PROXY` (HTTP proxy URL, or a comma-separated list); system proxy settings are ignored.
|
|
26
|
+
- **Access:** read-only. It cannot log in or change anything, so no confirmation is needed before calling any tool.
|
|
27
|
+
- **Tools:** 10, all prefixed `cs_`. Typical sequence: `cs_status` -> `cs_incidents` (active_only, updates) for a live problem; `cs_reliability` to compare providers; `cs_compare_prices` for the cheapest size.
|
|
28
|
+
- **Use when:** the user asks if ArvanCloud, Hamravesh or Chabokan is down or slow, what an outage was, whether maintenance is planned, which Iranian cloud was most stable, or what Liara or Hamravesh charge.
|
|
29
|
+
- **Do not use when:** the question is about another provider (Liara publishes no status page; ArvanCloud prices sit behind a JavaScript check and are not read) or about a customer's own account.
|
|
30
|
+
- **Output:** compact JSON. Status words: operational, degraded, partial_outage, major_outage, maintenance. Prices in Toman. Times are ISO in Iran time (+03:30). Titles and messages are the providers' own text (Persian or English).
|
|
31
|
+
|
|
32
|
+
## Why
|
|
33
|
+
|
|
34
|
+
During an outage the first question is "is it us or the cloud?". The three status pages have three different layouts
|
|
35
|
+
and APIs, and none of them says how the others are doing. With `iran-cloud-status-mcp` an agent answers in one call:
|
|
36
|
+
|
|
37
|
+
> **You:** Is anything broken at the Iranian clouds right now?
|
|
38
|
+
>
|
|
39
|
+
> **Agent:** *calls* `cs_status()`
|
|
40
|
+
>
|
|
41
|
+
> ArvanCloud reports a partial outage: "Qeysar Network Congestion" (open since 2026-10-10, Qeysar - Network at
|
|
42
|
+
> performance issues) and a planned MySQL 8.4 upgrade on 2026-11-03 02:00. Hamravesh and Chabokan: all services operational.
|
|
43
|
+
|
|
44
|
+
## Quick start
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
claude mcp add iran-cloud-status -- uvx iran-cloud-status-mcp
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
For other clients add `{"command": "uvx", "args": ["iran-cloud-status-mcp"]}` to the MCP server list.
|
|
51
|
+
|
|
52
|
+
## Tools
|
|
53
|
+
|
|
54
|
+
| Tool | What it does |
|
|
55
|
+
|---|---|
|
|
56
|
+
| `cs_status` | Live status of all providers: overall, components not operational, open incidents, upcoming maintenance. |
|
|
57
|
+
| `cs_providers` | What is covered per provider (no network call). |
|
|
58
|
+
| `cs_regions` | Status per region or group: component count, worst status, what is down. |
|
|
59
|
+
| `cs_components` | One provider's components with status; filter by text or only problems. |
|
|
60
|
+
| `cs_incidents` | Recent incidents, newest first, latest update or the whole timeline; filter by provider, days, open only, text. |
|
|
61
|
+
| `cs_incident` | One incident in full: whole timeline, affected components and the status set on each. |
|
|
62
|
+
| `cs_maintenance` | Announced maintenance windows that are upcoming or running; `include_past` adds recent finished ones. |
|
|
63
|
+
| `cs_reliability` | Incident count, open count, incident minutes (overlaps once) and share of the window over N days, most affected components; optional text filter. |
|
|
64
|
+
| `cs_pricing` | Liara plans (PaaS, DBaaS, IaaS, WordPress, Email, AI, ObjectStorage), Hamravesh per-unit prices, traffic, IP and monitoring fees, or Chabokan starting prices. |
|
|
65
|
+
| `cs_compare_prices` | Monthly price of one vCPU/RAM/disk size at Hamravesh (Iran, Germany) and Liara (cheapest fitting plan). |
|
|
66
|
+
|
|
67
|
+
## FAQ
|
|
68
|
+
|
|
69
|
+
**Which providers?** Status: ArvanCloud, Hamravesh, Chabokan, ParsPack (announcements only), Mihan WebHost (server up/down only). Prices: Liara, Hamravesh, Chabokan. Liara has no status page; ArvanCloud prices are not read.
|
|
70
|
+
|
|
71
|
+
**Is there an uptime percentage?** No provider publishes one. `cs_reliability` counts incidents and the time at least one was open (overlaps counted once); a partial incident counts fully, so it is not an uptime figure.
|
|
72
|
+
|
|
73
|
+
**Is it affiliated with the providers?** No. It reads the same public pages anyone can open.
|
|
74
|
+
|
|
75
|
+
## فارسی
|
|
76
|
+
|
|
77
|
+
`iran-cloud-status-mcp` یک سرور MCP غیررسمی و فقطخواندنی است که وضعیت زنده، رخدادها، تعمیرات برنامهریزیشده و قیمتهای عمومی
|
|
78
|
+
ابرهای ایرانی (آروان، همروش، چابکان و لیارا) را از صفحات عمومی خودشان میخواند. نیازی به کلید یا حساب کاربری نیست.
|
|
79
|
+
|
|
80
|
+
نصب: `claude mcp add iran-cloud-status -- uvx iran-cloud-status-mcp`
|
|
81
|
+
|
|
82
|
+
Author: Sepehr Radmard (سپهر رادمرد) · github.com/sepehr071 · linkedin.com/in/sepehr-radmard
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "iran-cloud-status-mcp"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Unofficial read-only MCP server for Iranian cloud providers: live status, incidents, maintenance and public prices of ArvanCloud, Hamravesh, Chabokan and Liara."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = "MIT"
|
|
7
|
+
license-files = ["LICENSE"]
|
|
8
|
+
authors = [{ name = "Sepehr Radmard", email = "sepehrr80@gmail.com" }]
|
|
9
|
+
requires-python = ">=3.10"
|
|
10
|
+
keywords = ["mcp", "model-context-protocol", "iran", "cloud", "status-page", "incidents", "uptime", "arvancloud", "hamravesh", "chabokan", "liara", "pricing", "devops", "claude", "persian"]
|
|
11
|
+
classifiers = [
|
|
12
|
+
"Development Status :: 4 - Beta",
|
|
13
|
+
"Intended Audience :: Developers",
|
|
14
|
+
"Operating System :: OS Independent",
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"Programming Language :: Python :: 3.10",
|
|
17
|
+
"Programming Language :: Python :: 3.11",
|
|
18
|
+
"Programming Language :: Python :: 3.12",
|
|
19
|
+
"Programming Language :: Python :: 3.13",
|
|
20
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
21
|
+
"Topic :: System :: Monitoring",
|
|
22
|
+
]
|
|
23
|
+
dependencies = [
|
|
24
|
+
"mcp>=2.2,<3",
|
|
25
|
+
"httpx>=0.27",
|
|
26
|
+
"httpx-curl-cffi>=0.1.5",
|
|
27
|
+
"curl-cffi>=0.16.3",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[project.urls]
|
|
31
|
+
Homepage = "https://github.com/sepehr071/iran-cloud-status-mcp"
|
|
32
|
+
Issues = "https://github.com/sepehr071/iran-cloud-status-mcp/issues"
|
|
33
|
+
Website = "https://mcpfarsi.ir/"
|
|
34
|
+
|
|
35
|
+
[project.scripts]
|
|
36
|
+
iran-cloud-status-mcp = "iran_cloud_status_mcp.server:main"
|
|
37
|
+
|
|
38
|
+
[dependency-groups]
|
|
39
|
+
dev = ["pytest>=8", "ruff>=0.6"]
|
|
40
|
+
|
|
41
|
+
[build-system]
|
|
42
|
+
requires = ["hatchling"]
|
|
43
|
+
build-backend = "hatchling.build"
|
|
44
|
+
|
|
45
|
+
[tool.pytest.ini_options]
|
|
46
|
+
testpaths = ["tests"]
|
|
47
|
+
addopts = "-m 'not live'"
|
|
48
|
+
markers = ["live: calls the real status pages (run with -m live)"]
|
|
49
|
+
|
|
50
|
+
[tool.ruff]
|
|
51
|
+
line-length = 120
|
|
52
|
+
target-version = "py310"
|
|
53
|
+
|
|
54
|
+
[tool.ruff.lint]
|
|
55
|
+
select = ["E", "F", "I", "B", "UP"]
|
|
56
|
+
ignore = ["E501"] # long Field(description=...) strings read better on one line
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.sepehr071/iran-cloud-status-mcp",
|
|
4
|
+
"title": "Iran Cloud Status",
|
|
5
|
+
"description": "Read-only status, incidents and prices of Iranian clouds: Arvan, Hamravesh, Chabokan, Liara, more.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"url": "https://github.com/sepehr071/iran-cloud-status-mcp",
|
|
8
|
+
"source": "github"
|
|
9
|
+
},
|
|
10
|
+
"websiteUrl": "https://github.com/sepehr071/iran-cloud-status-mcp",
|
|
11
|
+
"version": "0.1.0",
|
|
12
|
+
"packages": [
|
|
13
|
+
{
|
|
14
|
+
"registryType": "pypi",
|
|
15
|
+
"registryBaseUrl": "https://pypi.org",
|
|
16
|
+
"identifier": "iran-cloud-status-mcp",
|
|
17
|
+
"version": "0.1.0",
|
|
18
|
+
"runtimeHint": "uvx",
|
|
19
|
+
"transport": {
|
|
20
|
+
"type": "stdio"
|
|
21
|
+
},
|
|
22
|
+
"environmentVariables": [
|
|
23
|
+
{
|
|
24
|
+
"name": "IRAN_CLOUD_STATUS_MCP_PROXY",
|
|
25
|
+
"description": "Optional HTTP proxy URL for the status page requests; system proxy settings are ignored. Also accepts a comma-separated list: one is used until it gets blocked or fails to connect, then the next.",
|
|
26
|
+
"isRequired": false,
|
|
27
|
+
"isSecret": false
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|