devhelm-mcp-server 0.3.0__tar.gz → 0.4.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.
Files changed (37) hide show
  1. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/PKG-INFO +2 -2
  2. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/docs/openapi/monitoring-api.json +202 -96
  3. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/pyproject.toml +4 -5
  4. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/uv.lock +5 -5
  5. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/.github/workflows/ci.yml +0 -0
  6. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/.github/workflows/release.yml +0 -0
  7. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/.github/workflows/spec-check.yml +0 -0
  8. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/.gitignore +0 -0
  9. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/LICENSE +0 -0
  10. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/Makefile +0 -0
  11. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/README.md +0 -0
  12. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/docker/Dockerfile +0 -0
  13. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/scripts/regen-from.sh +0 -0
  14. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/scripts/release.sh +0 -0
  15. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/__init__.py +0 -0
  16. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/client.py +0 -0
  17. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/server.py +0 -0
  18. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/__init__.py +0 -0
  19. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/alert_channels.py +0 -0
  20. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/api_keys.py +0 -0
  21. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/dependencies.py +0 -0
  22. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/deploy_lock.py +0 -0
  23. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/environments.py +0 -0
  24. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/incidents.py +0 -0
  25. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/monitors.py +0 -0
  26. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/notification_policies.py +0 -0
  27. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/resource_groups.py +0 -0
  28. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/secrets.py +0 -0
  29. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/status.py +0 -0
  30. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/status_pages.py +0 -0
  31. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/tags.py +0 -0
  32. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/src/devhelm_mcp/tools/webhooks.py +0 -0
  33. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/tests/__init__.py +0 -0
  34. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/tests/run_mcp.py +0 -0
  35. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/tests/test_client.py +0 -0
  36. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/tests/test_tools.py +0 -0
  37. {devhelm_mcp_server-0.3.0 → devhelm_mcp_server-0.4.0}/tests/test_typed_schemas.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devhelm-mcp-server
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: DevHelm MCP server — AI agent access to monitors, incidents, alerting, and more
5
5
  Project-URL: Homepage, https://devhelm.io
6
6
  Project-URL: Repository, https://github.com/devhelmhq/mcp-server
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Programming Language :: Python :: 3.13
19
19
  Classifier: Topic :: Software Development :: Libraries
20
20
  Requires-Python: >=3.11
21
- Requires-Dist: devhelm>=0.3.0
21
+ Requires-Dist: devhelm>=0.4.0
22
22
  Requires-Dist: fastmcp>=2.0.0
23
23
  Description-Content-Type: text/markdown
24
24
 
@@ -15794,7 +15794,7 @@
15794
15794
  "content": {
15795
15795
  "*/*": {
15796
15796
  "schema": {
15797
- "$ref": "#/components/schemas/TableValueResultStatusPageComponentUptimeDayDto"
15797
+ "$ref": "#/components/schemas/TableValueResultComponentUptimeDayDto"
15798
15798
  }
15799
15799
  }
15800
15800
  }
@@ -16343,6 +16343,127 @@
16343
16343
  }
16344
16344
  }
16345
16345
  },
16346
+ "/api/v1/status-pages/{id}/domains/{domainId}/primary": {
16347
+ "post": {
16348
+ "tags": [
16349
+ "Status Pages"
16350
+ ],
16351
+ "summary": "Mark a verified custom domain as the page's primary host",
16352
+ "operationId": "setPrimaryDomain",
16353
+ "parameters": [
16354
+ {
16355
+ "name": "id",
16356
+ "in": "path",
16357
+ "required": true,
16358
+ "schema": {
16359
+ "type": "string",
16360
+ "format": "uuid"
16361
+ }
16362
+ },
16363
+ {
16364
+ "name": "domainId",
16365
+ "in": "path",
16366
+ "required": true,
16367
+ "schema": {
16368
+ "type": "string",
16369
+ "format": "uuid"
16370
+ }
16371
+ }
16372
+ ],
16373
+ "responses": {
16374
+ "200": {
16375
+ "description": "OK",
16376
+ "content": {
16377
+ "*/*": {
16378
+ "schema": {
16379
+ "$ref": "#/components/schemas/SingleValueResponseStatusPageCustomDomainDto"
16380
+ }
16381
+ }
16382
+ }
16383
+ },
16384
+ "400": {
16385
+ "description": "Bad request — the payload failed validation",
16386
+ "content": {
16387
+ "application/json": {
16388
+ "schema": {
16389
+ "$ref": "#/components/schemas/ErrorResponse"
16390
+ }
16391
+ }
16392
+ }
16393
+ },
16394
+ "401": {
16395
+ "description": "Unauthorized — missing or invalid credentials",
16396
+ "content": {
16397
+ "application/json": {
16398
+ "schema": {
16399
+ "$ref": "#/components/schemas/ErrorResponse"
16400
+ }
16401
+ }
16402
+ }
16403
+ },
16404
+ "403": {
16405
+ "description": "Forbidden — the actor lacks permission for this resource",
16406
+ "content": {
16407
+ "application/json": {
16408
+ "schema": {
16409
+ "$ref": "#/components/schemas/ErrorResponse"
16410
+ }
16411
+ }
16412
+ }
16413
+ },
16414
+ "404": {
16415
+ "description": "Not found — the requested resource does not exist",
16416
+ "content": {
16417
+ "application/json": {
16418
+ "schema": {
16419
+ "$ref": "#/components/schemas/ErrorResponse"
16420
+ }
16421
+ }
16422
+ }
16423
+ },
16424
+ "409": {
16425
+ "description": "Conflict — the request collides with current resource state",
16426
+ "content": {
16427
+ "application/json": {
16428
+ "schema": {
16429
+ "$ref": "#/components/schemas/ErrorResponse"
16430
+ }
16431
+ }
16432
+ }
16433
+ },
16434
+ "500": {
16435
+ "description": "Internal server error — see the message field for details",
16436
+ "content": {
16437
+ "application/json": {
16438
+ "schema": {
16439
+ "$ref": "#/components/schemas/ErrorResponse"
16440
+ }
16441
+ }
16442
+ }
16443
+ },
16444
+ "502": {
16445
+ "description": "Bad gateway — an upstream provider returned an error",
16446
+ "content": {
16447
+ "application/json": {
16448
+ "schema": {
16449
+ "$ref": "#/components/schemas/ErrorResponse"
16450
+ }
16451
+ }
16452
+ }
16453
+ },
16454
+ "503": {
16455
+ "description": "Service unavailable — try again shortly",
16456
+ "content": {
16457
+ "application/json": {
16458
+ "schema": {
16459
+ "$ref": "#/components/schemas/ErrorResponse"
16460
+ }
16461
+ }
16462
+ }
16463
+ }
16464
+ }
16465
+ }
16466
+ },
16346
16467
  "/api/v1/status-pages/{id}/domains/{domainId}/verify": {
16347
16468
  "post": {
16348
16469
  "tags": [
@@ -21970,7 +22091,6 @@
21970
22091
  "ComponentUptimeDayDto": {
21971
22092
  "required": [
21972
22093
  "date",
21973
- "source",
21974
22094
  "partialOutageSeconds",
21975
22095
  "majorOutageSeconds",
21976
22096
  "degradedSeconds",
@@ -21980,7 +22100,7 @@
21980
22100
  "properties": {
21981
22101
  "date": {
21982
22102
  "type": "string",
21983
- "description": "Date of the daily bucket (ISO 8601)",
22103
+ "description": "Start-of-day timestamp for this bucket (UTC midnight, ISO 8601)",
21984
22104
  "format": "date-time"
21985
22105
  },
21986
22106
  "partialOutageSeconds": {
@@ -22000,17 +22120,16 @@
22000
22120
  },
22001
22121
  "uptimePercentage": {
22002
22122
  "type": "number",
22003
- "description": "Computed uptime percentage for the day",
22123
+ "description": "Computed uptime percentage using the weighted formula (degraded does not lower it)",
22004
22124
  "format": "double"
22005
22125
  },
22006
- "eventsJson": {
22007
- "type": "string",
22008
- "description": "Incident event references for this day as raw JSON",
22009
- "nullable": true
22010
- },
22011
- "source": {
22012
- "type": "string",
22013
- "description": "Data source: vendor_reported or incident_derived"
22126
+ "incidents": {
22127
+ "type": "array",
22128
+ "description": "Incidents that overlapped this day, in display order",
22129
+ "nullable": true,
22130
+ "items": {
22131
+ "$ref": "#/components/schemas/IncidentRef"
22132
+ }
22014
22133
  }
22015
22134
  },
22016
22135
  "description": "Daily uptime data for a component"
@@ -24355,14 +24474,12 @@
24355
24474
  ]
24356
24475
  },
24357
24476
  "timing": {
24358
- "type": "object",
24359
- "additionalProperties": {
24360
- "type": "object",
24361
- "description": "Request phase timing breakdown",
24362
- "nullable": true
24363
- },
24364
- "description": "Request phase timing breakdown",
24365
- "nullable": true
24477
+ "nullable": true,
24478
+ "allOf": [
24479
+ {
24480
+ "$ref": "#/components/schemas/TimingPhasesDto"
24481
+ }
24482
+ ]
24366
24483
  },
24367
24484
  "bodyTruncated": {
24368
24485
  "type": "boolean",
@@ -24991,19 +25108,19 @@
24991
25108
  "properties": {
24992
25109
  "id": {
24993
25110
  "type": "string",
24994
- "description": "Status page incident ID",
25111
+ "description": "Internal incident ID — UUID for status-page incidents, service incident UUID for catalog",
24995
25112
  "format": "uuid"
24996
25113
  },
24997
25114
  "title": {
24998
25115
  "type": "string",
24999
- "description": "Incident title"
25116
+ "description": "Incident title at the time of the overlap"
25000
25117
  },
25001
25118
  "impact": {
25002
25119
  "type": "string",
25003
- "description": "Incident impact level"
25120
+ "description": "Incident impact level (e.g. minor, major, critical for catalog; NONE/MINOR/MAJOR/CRITICAL for status pages)"
25004
25121
  }
25005
25122
  },
25006
- "description": "Lightweight reference to an incident overlapping this day"
25123
+ "description": "Lightweight reference to an incident overlapping a given uptime day"
25007
25124
  },
25008
25125
  "IncidentsSummaryDto": {
25009
25126
  "type": "object",
@@ -29706,46 +29823,6 @@
29706
29823
  }
29707
29824
  }
29708
29825
  },
29709
- "StatusPageComponentUptimeDayDto": {
29710
- "required": [
29711
- "date",
29712
- "partialOutageSeconds",
29713
- "majorOutageSeconds",
29714
- "uptimePercentage"
29715
- ],
29716
- "type": "object",
29717
- "properties": {
29718
- "date": {
29719
- "type": "string",
29720
- "description": "Start-of-day timestamp for this bucket (UTC midnight)",
29721
- "format": "date-time"
29722
- },
29723
- "partialOutageSeconds": {
29724
- "type": "integer",
29725
- "description": "Seconds of partial outage on this day",
29726
- "format": "int32"
29727
- },
29728
- "majorOutageSeconds": {
29729
- "type": "integer",
29730
- "description": "Seconds of major outage on this day",
29731
- "format": "int32"
29732
- },
29733
- "uptimePercentage": {
29734
- "type": "number",
29735
- "description": "Computed uptime percentage using weighted formula",
29736
- "format": "double"
29737
- },
29738
- "incidents": {
29739
- "type": "array",
29740
- "description": "Incidents that overlapped this day",
29741
- "nullable": true,
29742
- "items": {
29743
- "$ref": "#/components/schemas/IncidentRef"
29744
- }
29745
- }
29746
- },
29747
- "description": "Daily uptime data for a status page component"
29748
- },
29749
29826
  "StatusPageCustomDomainDto": {
29750
29827
  "required": [
29751
29828
  "createdAt",
@@ -29801,6 +29878,19 @@
29801
29878
  "type": "string",
29802
29879
  "nullable": true
29803
29880
  },
29881
+ "cfCustomHostnameId": {
29882
+ "type": "string",
29883
+ "nullable": true
29884
+ },
29885
+ "cfSslStatus": {
29886
+ "type": "string",
29887
+ "nullable": true
29888
+ },
29889
+ "sslActiveAt": {
29890
+ "type": "string",
29891
+ "format": "date-time",
29892
+ "nullable": true
29893
+ },
29804
29894
  "createdAt": {
29805
29895
  "type": "string",
29806
29896
  "format": "date-time"
@@ -30979,38 +31069,6 @@
30979
31069
  }
30980
31070
  }
30981
31071
  },
30982
- "TableValueResultStatusPageComponentUptimeDayDto": {
30983
- "required": [
30984
- "data",
30985
- "hasNext",
30986
- "hasPrev"
30987
- ],
30988
- "type": "object",
30989
- "properties": {
30990
- "data": {
30991
- "type": "array",
30992
- "items": {
30993
- "$ref": "#/components/schemas/StatusPageComponentUptimeDayDto"
30994
- }
30995
- },
30996
- "hasNext": {
30997
- "type": "boolean"
30998
- },
30999
- "hasPrev": {
31000
- "type": "boolean"
31001
- },
31002
- "totalElements": {
31003
- "type": "integer",
31004
- "format": "int64",
31005
- "nullable": true
31006
- },
31007
- "totalPages": {
31008
- "type": "integer",
31009
- "format": "int32",
31010
- "nullable": true
31011
- }
31012
- }
31013
- },
31014
31072
  "TableValueResultStatusPageCustomDomainDto": {
31015
31073
  "required": [
31016
31074
  "data",
@@ -31593,6 +31651,54 @@
31593
31651
  },
31594
31652
  "description": "Event type to use for a test webhook delivery"
31595
31653
  },
31654
+ "TimingPhasesDto": {
31655
+ "type": "object",
31656
+ "properties": {
31657
+ "dns_ms": {
31658
+ "type": "integer",
31659
+ "description": "DNS resolution time in milliseconds",
31660
+ "format": "int32",
31661
+ "nullable": true,
31662
+ "example": 12
31663
+ },
31664
+ "tcp_ms": {
31665
+ "type": "integer",
31666
+ "description": "TCP connect time in milliseconds",
31667
+ "format": "int32",
31668
+ "nullable": true,
31669
+ "example": 18
31670
+ },
31671
+ "tls_ms": {
31672
+ "type": "integer",
31673
+ "description": "TLS handshake time in milliseconds (null for plain HTTP)",
31674
+ "format": "int32",
31675
+ "nullable": true,
31676
+ "example": 34
31677
+ },
31678
+ "ttfb_ms": {
31679
+ "type": "integer",
31680
+ "description": "Time to first response byte in milliseconds",
31681
+ "format": "int32",
31682
+ "nullable": true,
31683
+ "example": 42
31684
+ },
31685
+ "download_ms": {
31686
+ "type": "integer",
31687
+ "description": "Response body download time in milliseconds",
31688
+ "format": "int32",
31689
+ "nullable": true,
31690
+ "example": 8
31691
+ },
31692
+ "total_ms": {
31693
+ "type": "integer",
31694
+ "description": "Total wall-clock request time in milliseconds",
31695
+ "format": "int32",
31696
+ "nullable": true,
31697
+ "example": 114
31698
+ }
31699
+ },
31700
+ "description": "Per-phase HTTP request timing breakdown (milliseconds)"
31701
+ },
31596
31702
  "TlsInfoDto": {
31597
31703
  "type": "object",
31598
31704
  "properties": {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "devhelm-mcp-server"
3
- version = "0.3.0"
3
+ version = "0.4.0"
4
4
  description = "DevHelm MCP server — AI agent access to monitors, incidents, alerting, and more"
5
5
  authors = [{ name = "DevHelm", email = "hello@devhelm.io" }]
6
6
  license = "MIT"
@@ -19,10 +19,9 @@ classifiers = [
19
19
  ]
20
20
 
21
21
  dependencies = [
22
- # Floor bumped to 0.2.1 for `StatusPages.reorder_layout` and the
23
- # `Incidents.delete` removal (which the `reorder_status_page_layout`
24
- # tool below depends on, and which the parity check requires).
25
- "devhelm>=0.3.0",
22
+ # Floor bumped to 0.4.0 for typed TimingPhasesDto in HTTP check details
23
+ # and the unified ComponentUptimeDayDto across catalog + status pages.
24
+ "devhelm>=0.4.0",
26
25
  "fastmcp>=2.0.0",
27
26
  ]
28
27
 
@@ -388,20 +388,20 @@ wheels = [
388
388
 
389
389
  [[package]]
390
390
  name = "devhelm"
391
- version = "0.3.0"
391
+ version = "0.4.0"
392
392
  source = { registry = "https://pypi.org/simple" }
393
393
  dependencies = [
394
394
  { name = "httpx" },
395
395
  { name = "pydantic", extra = ["email"] },
396
396
  ]
397
- sdist = { url = "https://files.pythonhosted.org/packages/7d/e0/5e2f56bb128fa312311ceac5de96b71db7ac6a354bebe4439999ebd46a7c/devhelm-0.3.0.tar.gz", hash = "sha256:cabad8c888e73e26ecf5fe1243cbd96d13368193453d437db60e3ab611f3e46b", size = 223980, upload-time = "2026-04-22T15:28:53.364Z" }
397
+ sdist = { url = "https://files.pythonhosted.org/packages/61/e6/7a84400eb91778574466d92d9212113e9cc9c09435dbc99ad82839e9ebf7/devhelm-0.4.0.tar.gz", hash = "sha256:2f02ae1ac6616b675513c72459f8c60c5c155402f6aee064abb357016e06d178", size = 224545, upload-time = "2026-04-25T16:51:24.602Z" }
398
398
  wheels = [
399
- { url = "https://files.pythonhosted.org/packages/48/18/43ae849559fb68b524b06a840751a12233e4237aa27e44184d1a45106521/devhelm-0.3.0-py3-none-any.whl", hash = "sha256:da4053b7f8a6016182beae57038870d0dd490ed5e57ffc0158c3724d01e70c82", size = 67920, upload-time = "2026-04-22T15:28:52.13Z" },
399
+ { url = "https://files.pythonhosted.org/packages/b9/58/ffdf69f810466a139b5672d205860dd7e074e95479991f50403b8b166ad2/devhelm-0.4.0-py3-none-any.whl", hash = "sha256:be9d31766146122216f3f4f886ce1f820346c0e20cb54ffb0e65a5219b089c37", size = 67741, upload-time = "2026-04-25T16:51:23.453Z" },
400
400
  ]
401
401
 
402
402
  [[package]]
403
403
  name = "devhelm-mcp-server"
404
- version = "0.3.0"
404
+ version = "0.4.0"
405
405
  source = { editable = "." }
406
406
  dependencies = [
407
407
  { name = "devhelm" },
@@ -419,7 +419,7 @@ dev = [
419
419
 
420
420
  [package.metadata]
421
421
  requires-dist = [
422
- { name = "devhelm", specifier = ">=0.3.0" },
422
+ { name = "devhelm", specifier = ">=0.4.0" },
423
423
  { name = "fastmcp", specifier = ">=2.0.0" },
424
424
  ]
425
425