devhelm-mcp-server 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.
Files changed (31) hide show
  1. devhelm_mcp_server-0.1.0/.github/workflows/ci.yml +53 -0
  2. devhelm_mcp_server-0.1.0/.github/workflows/release.yml +164 -0
  3. devhelm_mcp_server-0.1.0/.github/workflows/spec-check.yml +41 -0
  4. devhelm_mcp_server-0.1.0/.gitignore +40 -0
  5. devhelm_mcp_server-0.1.0/LICENSE +21 -0
  6. devhelm_mcp_server-0.1.0/Makefile +33 -0
  7. devhelm_mcp_server-0.1.0/PKG-INFO +99 -0
  8. devhelm_mcp_server-0.1.0/README.md +75 -0
  9. devhelm_mcp_server-0.1.0/docker/Dockerfile +28 -0
  10. devhelm_mcp_server-0.1.0/pyproject.toml +72 -0
  11. devhelm_mcp_server-0.1.0/scripts/release.sh +125 -0
  12. devhelm_mcp_server-0.1.0/src/devhelm_mcp/__init__.py +1 -0
  13. devhelm_mcp_server-0.1.0/src/devhelm_mcp/client.py +34 -0
  14. devhelm_mcp_server-0.1.0/src/devhelm_mcp/server.py +150 -0
  15. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/__init__.py +0 -0
  16. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/alert_channels.py +70 -0
  17. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/api_keys.py +49 -0
  18. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/dependencies.py +45 -0
  19. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/deploy_lock.py +50 -0
  20. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/environments.py +56 -0
  21. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/incidents.py +61 -0
  22. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/monitors.py +112 -0
  23. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/notification_policies.py +69 -0
  24. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/resource_groups.py +86 -0
  25. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/secrets.py +49 -0
  26. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/status.py +21 -0
  27. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/tags.py +56 -0
  28. devhelm_mcp_server-0.1.0/src/devhelm_mcp/tools/webhooks.py +64 -0
  29. devhelm_mcp_server-0.1.0/tests/__init__.py +0 -0
  30. devhelm_mcp_server-0.1.0/tests/test_tools.py +113 -0
  31. devhelm_mcp_server-0.1.0/uv.lock +1821 -0
@@ -0,0 +1,53 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ lint:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: astral-sh/setup-uv@v4
17
+ with:
18
+ enable-cache: true
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: '3.13'
22
+ - run: uv sync
23
+ - run: uv run ruff check src/ tests/
24
+ - run: uv run ruff format --check src/ tests/
25
+
26
+ typecheck:
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+ - uses: astral-sh/setup-uv@v4
31
+ with:
32
+ enable-cache: true
33
+ - uses: actions/setup-python@v5
34
+ with:
35
+ python-version: '3.13'
36
+ - run: uv sync
37
+ - run: uv run mypy src/
38
+
39
+ test:
40
+ runs-on: ubuntu-latest
41
+ strategy:
42
+ matrix:
43
+ python-version: ['3.11', '3.13']
44
+ steps:
45
+ - uses: actions/checkout@v4
46
+ - uses: astral-sh/setup-uv@v4
47
+ with:
48
+ enable-cache: true
49
+ - uses: actions/setup-python@v5
50
+ with:
51
+ python-version: ${{ matrix.python-version }}
52
+ - run: uv sync
53
+ - run: uv run pytest -v
@@ -0,0 +1,164 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ['v*']
6
+
7
+ permissions:
8
+ contents: write
9
+ packages: write
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: astral-sh/setup-uv@v4
17
+ with:
18
+ enable-cache: true
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: '3.13'
22
+ - run: uv sync
23
+ - run: uv run pytest -v
24
+ - run: uv run ruff check src/ tests/
25
+ - run: uv run python -m build
26
+ - uses: actions/upload-artifact@v4
27
+ with:
28
+ name: dist
29
+ path: dist/
30
+
31
+ docker:
32
+ runs-on: ubuntu-latest
33
+ needs: build
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+ - uses: digitalocean/action-doctl@v2
37
+ with:
38
+ token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
39
+ - run: doctl registry login --expiry-seconds 600
40
+ - name: Build and push Docker image
41
+ run: |
42
+ TAG="${{ github.ref_name }}"
43
+ VERSION="${TAG#v}"
44
+ docker build -f docker/Dockerfile \
45
+ -t registry.digitalocean.com/devhelm/mcp-server:${VERSION} \
46
+ -t registry.digitalocean.com/devhelm/mcp-server:latest .
47
+ docker push registry.digitalocean.com/devhelm/mcp-server:${VERSION}
48
+ docker push registry.digitalocean.com/devhelm/mcp-server:latest
49
+
50
+ notify-monorepo:
51
+ runs-on: ubuntu-latest
52
+ needs: build
53
+ steps:
54
+ - name: Trigger integration tests in monorepo
55
+ run: |
56
+ gh api repos/devhelmhq/mono/dispatches \
57
+ -f event_type=surface_release \
58
+ -f "client_payload[repo]=${{ github.repository }}" \
59
+ -f "client_payload[tag]=${{ github.ref_name }}" \
60
+ -f "client_payload[sha]=${{ github.sha }}"
61
+ env:
62
+ GH_TOKEN: ${{ secrets.MONOREPO_DISPATCH_TOKEN }}
63
+
64
+ publish:
65
+ runs-on: ubuntu-latest
66
+ needs: [build, docker, notify-monorepo]
67
+ environment: production
68
+ steps:
69
+ - uses: actions/checkout@v4
70
+ - uses: astral-sh/setup-uv@v4
71
+ with:
72
+ enable-cache: true
73
+ - uses: actions/setup-python@v5
74
+ with:
75
+ python-version: '3.13'
76
+ - run: uv sync
77
+ - run: uv run python -m build
78
+ - name: Publish to PyPI
79
+ run: uv run twine upload dist/*
80
+ env:
81
+ TWINE_USERNAME: __token__
82
+ TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
83
+ - name: Trigger deploy + verification in monorepo
84
+ run: |
85
+ gh api repos/devhelmhq/mono/dispatches \
86
+ -f event_type=surface_published \
87
+ -f "client_payload[repo]=${{ github.repository }}" \
88
+ -f "client_payload[tag]=${{ github.ref_name }}" \
89
+ -f "client_payload[sha]=${{ github.sha }}"
90
+ env:
91
+ GH_TOKEN: ${{ secrets.MONOREPO_DISPATCH_TOKEN }}
92
+
93
+ github-release:
94
+ runs-on: ubuntu-latest
95
+ needs: publish
96
+ steps:
97
+ - uses: actions/checkout@v4
98
+ with:
99
+ fetch-depth: 0
100
+ - name: Create GitHub Release
101
+ run: |
102
+ gh release create "${{ github.ref_name }}" \
103
+ --title "${{ github.ref_name }}" \
104
+ --generate-notes
105
+ env:
106
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
107
+
108
+ post-publish:
109
+ runs-on: ubuntu-latest
110
+ needs: [publish, github-release]
111
+ if: always() && needs.publish.result == 'success'
112
+ steps:
113
+ - name: Extract version info
114
+ id: version
115
+ run: |
116
+ TAG="${{ github.ref_name }}"
117
+ VERSION="${TAG#v}"
118
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
119
+
120
+ IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
121
+ if [[ "$MINOR" != "0" || "$MAJOR" != "0" ]] && [[ "$PATCH" == "0" ]]; then
122
+ echo "is_minor_plus=true" >> "$GITHUB_OUTPUT"
123
+ else
124
+ echo "is_minor_plus=false" >> "$GITHUB_OUTPUT"
125
+ fi
126
+
127
+ - name: Create Linear release ticket
128
+ if: env.LINEAR_API_KEY != ''
129
+ run: |
130
+ curl -s -X POST https://api.linear.app/graphql \
131
+ -H "Content-Type: application/json" \
132
+ -H "Authorization: ${{ secrets.LINEAR_API_KEY }}" \
133
+ -d '{
134
+ "query": "mutation($input: IssueCreateInput!) { issueCreate(input: $input) { success issue { identifier url } } }",
135
+ "variables": {
136
+ "input": {
137
+ "teamId": "${{ vars.LINEAR_RELEASES_TEAM_ID }}",
138
+ "projectId": "${{ vars.LINEAR_RELEASES_PROJECT_ID }}",
139
+ "title": "Released: MCP Server v${{ steps.version.outputs.version }}",
140
+ "description": "**Release:** https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}\n**CI run:** https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n**Commit:** ${{ github.sha }}"
141
+ }
142
+ }
143
+ }'
144
+ env:
145
+ LINEAR_API_KEY: ${{ secrets.LINEAR_API_KEY }}
146
+
147
+ - name: Create Linear changelog ticket (minor+ only)
148
+ if: steps.version.outputs.is_minor_plus == 'true' && env.LINEAR_API_KEY != ''
149
+ run: |
150
+ curl -s -X POST https://api.linear.app/graphql \
151
+ -H "Content-Type: application/json" \
152
+ -H "Authorization: ${{ secrets.LINEAR_API_KEY }}" \
153
+ -d '{
154
+ "query": "mutation($input: IssueCreateInput!) { issueCreate(input: $input) { success issue { identifier url } } }",
155
+ "variables": {
156
+ "input": {
157
+ "teamId": "${{ vars.LINEAR_CONTENT_TEAM_ID }}",
158
+ "title": "Changelog entry: MCP Server v${{ steps.version.outputs.version }}",
159
+ "description": "Write changelog entry for https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}"
160
+ }
161
+ }
162
+ }'
163
+ env:
164
+ LINEAR_API_KEY: ${{ secrets.LINEAR_API_KEY }}
@@ -0,0 +1,41 @@
1
+ name: Spec Check
2
+
3
+ on:
4
+ repository_dispatch:
5
+ types: [spec_updated]
6
+
7
+ permissions:
8
+ contents: write
9
+ issues: write
10
+
11
+ jobs:
12
+ check-compatibility:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: astral-sh/setup-uv@v4
17
+ with:
18
+ enable-cache: true
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: '3.13'
22
+
23
+ - name: Download latest OpenAPI spec from monorepo
24
+ run: |
25
+ gh api repos/devhelmhq/mono/contents/docs/openapi/monitoring-api.yaml \
26
+ -H "Accept: application/vnd.github.raw+json" \
27
+ -o docs/openapi/monitoring-api.json
28
+ env:
29
+ GH_TOKEN: ${{ secrets.MONOREPO_DISPATCH_TOKEN }}
30
+
31
+ - run: uv sync
32
+ - run: uv run pytest -v
33
+
34
+ - name: Report failure
35
+ if: failure()
36
+ run: |
37
+ gh issue create \
38
+ --title "API spec change broke MCP server build" \
39
+ --body "The monorepo pushed a spec update that caused CI failures.\n\nWorkflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
40
+ env:
41
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,40 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ dist/
7
+ build/
8
+ *.egg
9
+
10
+ # Virtual environments
11
+ .venv/
12
+ venv/
13
+
14
+ # Testing
15
+ .pytest_cache/
16
+ htmlcov/
17
+ .coverage
18
+ .coverage.*
19
+
20
+ # Linting / formatting
21
+ .ruff_cache/
22
+ .mypy_cache/
23
+
24
+ # IDE
25
+ .idea/
26
+ .vscode/
27
+ *.swp
28
+ *.swo
29
+
30
+ # Environment
31
+ .env
32
+ .env.*
33
+ !.env.example
34
+
35
+ # OS
36
+ .DS_Store
37
+ Thumbs.db
38
+
39
+ # UV lock is committed for reproducible builds
40
+ # uv.lock
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DevHelm
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,33 @@
1
+ .PHONY: dev test lint lint-fix typecheck clean release help
2
+
3
+ dev: ## Run the MCP server in dev mode (stdio)
4
+ uv run fastmcp dev src/devhelm_mcp/server.py
5
+
6
+ serve: ## Run the MCP server over HTTP (production mode)
7
+ uv run python -m devhelm_mcp.server
8
+
9
+ test: ## Run unit tests
10
+ uv run pytest -v
11
+
12
+ lint: ## Run ruff linter + formatter check
13
+ uv run ruff check src/ tests/
14
+ uv run ruff format --check src/ tests/
15
+
16
+ lint-fix: ## Auto-fix lint and format issues
17
+ uv run ruff check --fix src/ tests/
18
+ uv run ruff format src/ tests/
19
+
20
+ typecheck: ## Run mypy strict type checking
21
+ uv run mypy src/
22
+
23
+ clean: ## Remove build artifacts
24
+ rm -rf dist build *.egg-info src/*.egg-info
25
+
26
+ release: ## Release a new version: make release VERSION=0.1.0
27
+ @test -n "$(VERSION)" || (echo "Usage: make release VERSION=x.y.z" && exit 1)
28
+ ./scripts/release.sh $(VERSION)
29
+
30
+ help: ## Show this help
31
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
32
+
33
+ .DEFAULT_GOAL := help
@@ -0,0 +1,99 @@
1
+ Metadata-Version: 2.4
2
+ Name: devhelm-mcp-server
3
+ Version: 0.1.0
4
+ Summary: DevHelm MCP server — AI agent access to monitors, incidents, alerting, and more
5
+ Project-URL: Homepage, https://devhelm.io
6
+ Project-URL: Repository, https://github.com/devhelmhq/mcp-server
7
+ Project-URL: Documentation, https://docs.devhelm.io
8
+ Author-email: DevHelm <hello@devhelm.io>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: ai-agent,devhelm,mcp,model-context-protocol,monitoring
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Software Development :: Libraries
20
+ Requires-Python: >=3.11
21
+ Requires-Dist: devhelm>=0.1.0
22
+ Requires-Dist: fastmcp>=2.0.0
23
+ Description-Content-Type: text/markdown
24
+
25
+ # DevHelm MCP Server
26
+
27
+ [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server for [DevHelm](https://devhelm.io) — gives AI coding assistants (Cursor, Claude Desktop, Windsurf, etc.) access to your uptime monitors, incidents, alerting, and more.
28
+
29
+ ## Quick Start
30
+
31
+ ### Hosted (recommended)
32
+
33
+ Use the hosted server at `mcp.devhelm.io`. Two connection modes:
34
+
35
+ **Bearer auth:**
36
+ ```
37
+ URL: https://mcp.devhelm.io/mcp
38
+ Authorization: Bearer <your-api-token>
39
+ ```
40
+
41
+ **API key in URL** (for clients that only accept a URL):
42
+ ```
43
+ URL: https://mcp.devhelm.io/<your-api-token>/mcp
44
+ ```
45
+
46
+ ### Local (stdio)
47
+
48
+ ```bash
49
+ pip install devhelm-mcp-server
50
+ export DEVHELM_API_TOKEN=your-token
51
+ devhelm-mcp
52
+ ```
53
+
54
+ ### Cursor / Claude Desktop
55
+
56
+ Add to your MCP config:
57
+
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "devhelm": {
62
+ "url": "https://mcp.devhelm.io/<your-api-token>/mcp"
63
+ }
64
+ }
65
+ }
66
+ ```
67
+
68
+ ## Available Tools
69
+
70
+ | Category | Tools |
71
+ |----------|-------|
72
+ | **Monitors** | list, get, create, update, delete, pause, resume, test, results, versions |
73
+ | **Incidents** | list, get, create, resolve, delete |
74
+ | **Alert Channels** | list, get, create, update, delete, test |
75
+ | **Notification Policies** | list, get, create, update, delete, test |
76
+ | **Environments** | list, get, create, update, delete |
77
+ | **Secrets** | list, create, update, delete |
78
+ | **Tags** | list, get, create, update, delete |
79
+ | **Resource Groups** | list, get, create, update, delete, add member, remove member |
80
+ | **Webhooks** | list, get, create, update, delete, test |
81
+ | **API Keys** | list, create, revoke, delete |
82
+ | **Dependencies** | list, get, track, delete |
83
+ | **Deploy Lock** | acquire, current, release, force-release |
84
+ | **Status** | overview |
85
+
86
+ ## Development
87
+
88
+ ```bash
89
+ uv sync
90
+ make dev # Start with MCP Inspector (stdio)
91
+ make serve # Start HTTP server on :8000
92
+ make test # Run unit tests
93
+ make lint # Check formatting
94
+ make typecheck # Run mypy
95
+ ```
96
+
97
+ ## License
98
+
99
+ MIT
@@ -0,0 +1,75 @@
1
+ # DevHelm MCP Server
2
+
3
+ [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server for [DevHelm](https://devhelm.io) — gives AI coding assistants (Cursor, Claude Desktop, Windsurf, etc.) access to your uptime monitors, incidents, alerting, and more.
4
+
5
+ ## Quick Start
6
+
7
+ ### Hosted (recommended)
8
+
9
+ Use the hosted server at `mcp.devhelm.io`. Two connection modes:
10
+
11
+ **Bearer auth:**
12
+ ```
13
+ URL: https://mcp.devhelm.io/mcp
14
+ Authorization: Bearer <your-api-token>
15
+ ```
16
+
17
+ **API key in URL** (for clients that only accept a URL):
18
+ ```
19
+ URL: https://mcp.devhelm.io/<your-api-token>/mcp
20
+ ```
21
+
22
+ ### Local (stdio)
23
+
24
+ ```bash
25
+ pip install devhelm-mcp-server
26
+ export DEVHELM_API_TOKEN=your-token
27
+ devhelm-mcp
28
+ ```
29
+
30
+ ### Cursor / Claude Desktop
31
+
32
+ Add to your MCP config:
33
+
34
+ ```json
35
+ {
36
+ "mcpServers": {
37
+ "devhelm": {
38
+ "url": "https://mcp.devhelm.io/<your-api-token>/mcp"
39
+ }
40
+ }
41
+ }
42
+ ```
43
+
44
+ ## Available Tools
45
+
46
+ | Category | Tools |
47
+ |----------|-------|
48
+ | **Monitors** | list, get, create, update, delete, pause, resume, test, results, versions |
49
+ | **Incidents** | list, get, create, resolve, delete |
50
+ | **Alert Channels** | list, get, create, update, delete, test |
51
+ | **Notification Policies** | list, get, create, update, delete, test |
52
+ | **Environments** | list, get, create, update, delete |
53
+ | **Secrets** | list, create, update, delete |
54
+ | **Tags** | list, get, create, update, delete |
55
+ | **Resource Groups** | list, get, create, update, delete, add member, remove member |
56
+ | **Webhooks** | list, get, create, update, delete, test |
57
+ | **API Keys** | list, create, revoke, delete |
58
+ | **Dependencies** | list, get, track, delete |
59
+ | **Deploy Lock** | acquire, current, release, force-release |
60
+ | **Status** | overview |
61
+
62
+ ## Development
63
+
64
+ ```bash
65
+ uv sync
66
+ make dev # Start with MCP Inspector (stdio)
67
+ make serve # Start HTTP server on :8000
68
+ make test # Run unit tests
69
+ make lint # Check formatting
70
+ make typecheck # Run mypy
71
+ ```
72
+
73
+ ## License
74
+
75
+ MIT
@@ -0,0 +1,28 @@
1
+ FROM python:3.13-slim AS builder
2
+
3
+ WORKDIR /app
4
+ COPY pyproject.toml README.md ./
5
+ COPY src/ src/
6
+
7
+ RUN pip install --no-cache-dir uv && \
8
+ uv pip install --system --no-cache .
9
+
10
+ FROM python:3.13-slim
11
+
12
+ WORKDIR /app
13
+ COPY --from=builder /usr/local/lib/python3.13/site-packages /usr/local/lib/python3.13/site-packages
14
+ COPY --from=builder /usr/local/bin /usr/local/bin
15
+ COPY src/ src/
16
+
17
+ RUN useradd --create-home --shell /bin/bash app
18
+ USER app
19
+
20
+ ENV HOST=0.0.0.0
21
+ ENV PORT=8000
22
+
23
+ EXPOSE 8000
24
+
25
+ HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
26
+ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1
27
+
28
+ CMD ["python", "-m", "devhelm_mcp.server"]
@@ -0,0 +1,72 @@
1
+ [project]
2
+ name = "devhelm-mcp-server"
3
+ version = "0.1.0"
4
+ description = "DevHelm MCP server — AI agent access to monitors, incidents, alerting, and more"
5
+ authors = [{ name = "DevHelm", email = "hello@devhelm.io" }]
6
+ license = "MIT"
7
+ readme = "README.md"
8
+ requires-python = ">=3.11"
9
+ keywords = ["devhelm", "mcp", "monitoring", "ai-agent", "model-context-protocol"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Intended Audience :: Developers",
13
+ "License :: OSI Approved :: MIT License",
14
+ "Programming Language :: Python :: 3",
15
+ "Programming Language :: Python :: 3.11",
16
+ "Programming Language :: Python :: 3.12",
17
+ "Programming Language :: Python :: 3.13",
18
+ "Topic :: Software Development :: Libraries",
19
+ ]
20
+
21
+ dependencies = [
22
+ "devhelm>=0.1.0",
23
+ "fastmcp>=2.0.0",
24
+ ]
25
+
26
+ [project.urls]
27
+ Homepage = "https://devhelm.io"
28
+ Repository = "https://github.com/devhelmhq/mcp-server"
29
+ Documentation = "https://docs.devhelm.io"
30
+
31
+ [project.scripts]
32
+ devhelm-mcp = "devhelm_mcp.server:main"
33
+
34
+ [build-system]
35
+ requires = ["hatchling"]
36
+ build-backend = "hatchling.build"
37
+
38
+ [tool.hatch.build.targets.wheel]
39
+ packages = ["src/devhelm_mcp"]
40
+
41
+ [tool.ruff]
42
+ target-version = "py311"
43
+ src = ["src", "tests"]
44
+
45
+ [tool.ruff.lint]
46
+ select = ["E", "F", "I", "UP", "B", "SIM"]
47
+
48
+ [tool.mypy]
49
+ python_version = "3.11"
50
+ strict = true
51
+ warn_return_any = true
52
+ warn_unused_configs = true
53
+
54
+ [[tool.mypy.overrides]]
55
+ module = "devhelm.*"
56
+ ignore_missing_imports = true
57
+
58
+ [[tool.mypy.overrides]]
59
+ module = "fastmcp.*"
60
+ ignore_missing_imports = true
61
+
62
+ [tool.pytest.ini_options]
63
+ testpaths = ["tests"]
64
+
65
+ [dependency-groups]
66
+ dev = [
67
+ "build>=1.0",
68
+ "mypy>=1.10",
69
+ "pytest>=8.0",
70
+ "ruff>=0.8",
71
+ "twine>=5.0",
72
+ ]