devrev-Python-SDK 2.4.1__tar.gz → 2.7.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.
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/Dockerfile +2 -2
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/PKG-INFO +11 -1
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/README.md +10 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/deploy/README.md +88 -1
- devrev_python_sdk-2.7.0/deploy/audit-logging-setup.sh +270 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/deploy/cloudbuild.yaml +3 -7
- devrev_python_sdk-2.7.0/deploy/monitoring/README.md +230 -0
- devrev_python_sdk-2.7.0/deploy/monitoring/alert-policies.yaml +180 -0
- devrev_python_sdk-2.7.0/deploy/monitoring/dashboard.json +69 -0
- devrev_python_sdk-2.7.0/deploy/monitoring/validate-config.sh +142 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/changelog.md +57 -0
- devrev_python_sdk-2.7.0/docs/hooks/copy_llms.py +44 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/index.md +64 -17
- devrev_python_sdk-2.7.0/docs/mcp/deployment.md +143 -0
- devrev_python_sdk-2.7.0/docs/mcp/index.md +127 -0
- devrev_python_sdk-2.7.0/docs/mcp/quickstart.md +171 -0
- devrev_python_sdk-2.7.0/docs/mcp/tools-reference.md +166 -0
- devrev_python_sdk-2.7.0/docs/stylesheets/extra.css +300 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/llms-ctx-full.txt +163 -3
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/llms-ctx.txt +54 -7
- devrev_python_sdk-2.7.0/llms-mcp.txt +209 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/llms.txt +17 -5
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/mkdocs.yml +21 -5
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/pyproject.toml +1 -1
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/__init__.py +1 -1
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/__init__.py +1 -1
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/config.py +6 -0
- devrev_python_sdk-2.7.0/src/devrev_mcp/middleware/audit.py +416 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/middleware/auth.py +120 -4
- devrev_python_sdk-2.7.0/src/devrev_mcp/resources/server_info.py +42 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/server.py +152 -0
- devrev_python_sdk-2.7.0/src/devrev_mcp/tools/server_info.py +108 -0
- devrev_python_sdk-2.7.0/tests/unit/mcp/test_audit.py +656 -0
- devrev_python_sdk-2.7.0/tests/unit/mcp/test_server_info.py +336 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/uv.lock +55 -58
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/bug-fixer.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/builder.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/documentation.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/foreman.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/pr-review-boss.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/release-manager.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/simplifier.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/agents/tester.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/commands/foreman-work.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/commands/release-prepare.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/commands/review-start.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/commands/simplify-code.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/code-quality.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/data-modeling.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/devrev-sdk.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/git-workflow.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/pull-requests.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/python-development.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/security.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.augment/rules/testing.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.dockerignore +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.env.sample +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/dependabot.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/pull_request_template.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/api-check.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/ci.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/claude-code-review.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/claude.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/deploy.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/docs.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/integration-tests.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/release.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.github/workflows/sync-openapi.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.gitignore +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/.pre-commit-config.yaml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/CODE_OF_CONDUCT.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/CONTRIBUTING.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/DEPRECATIONS.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/KNOWN_ISSUES.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/SECURITY.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/augment-mcp-config-remote.json +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/augment-mcp-config.json +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/augment-settings.json +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/benchmarks/README.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/benchmarks/bench_http_client.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/benchmarks/bench_models.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/benchmarks/bench_pagination.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/benchmarks/conftest.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/context7.json +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/deploy/service.yaml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docker-compose.yml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/brands.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/engagements.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/incidents.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/index.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/question-answers.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/recommendations.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/search.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta/uoms.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/beta-api-differences.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/client.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/config.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/exceptions.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/index.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/models/accounts.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/models/base.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/models/index.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/models/users.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/models/works.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/accounts.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/articles.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/code-changes.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/conversations.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/dev-users.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/groups.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/index.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/links.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/parts.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/rev-users.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/slas.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/tags.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/timeline-entries.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/webhooks.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/api/services/works.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/examples/advanced.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/examples/basic.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/examples/beta-features.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/examples/index.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/examples/integrations.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/getting-started/authentication.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/getting-started/index.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/getting-started/installation.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/getting-started/quickstart.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/beta-api.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/compatibility.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/configuration.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/error-handling.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/github-actions-setup.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/index.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/logging.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/pagination.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/sync-vs-async.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/testing.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/version-support.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/docs/guides/write-integration-testing-strategy.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/README.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/basic/README.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/basic/async_example.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/basic/create_work.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/basic/error_handling.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/basic/list_accounts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/basic/pagination.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/basic/search_users.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/cloud_functions/README.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/cloud_functions/main.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/cloud_functions/requirements.txt +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/fastapi/README.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/fastapi/main.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/fastapi/requirements.txt +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/flask/README.md +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/flask/app.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/examples/integrations/flask/requirements.txt +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/openapi-beta.yaml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/openapi-public.yaml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/openapi-spec-corrections.yaml +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/scripts/build_ai_docs.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/scripts/setup-github-secrets.sh +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/client.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/config.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/exceptions.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/accounts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/articles.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/base.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/brands.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/code_changes.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/conversations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/dev_users.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/engagements.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/groups.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/incidents.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/links.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/notifications.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/parts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/preferences.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/question_answers.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/recommendations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/rev_users.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/search.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/slas.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/sync.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/tags.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/tasks.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/timeline_entries.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/timeline_events.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/track_events.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/uoms.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/webhooks.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/widgets.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/models/works.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/py.typed +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/accounts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/articles.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/base.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/brands.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/code_changes.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/conversations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/dev_users.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/engagements.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/groups.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/incidents.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/links.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/notifications.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/parts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/preferences.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/question_answers.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/recommendations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/rev_users.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/search.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/slas.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/tags.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/timeline_entries.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/track_events.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/uoms.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/webhooks.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/services/works.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/utils/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/utils/deprecation.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/utils/http.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/utils/logging.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev/utils/pagination.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/__main__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/middleware/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/middleware/health.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/middleware/rate_limit.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/prompts/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/prompts/escalation.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/prompts/investigate.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/prompts/response.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/prompts/summarize.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/prompts/triage.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/resources/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/resources/account.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/resources/article.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/resources/conversation.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/resources/part.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/resources/ticket.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/resources/user.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/accounts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/articles.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/conversations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/engagements.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/groups.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/incidents.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/links.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/parts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/recommendations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/search.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/slas.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/tags.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/timeline.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/users.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/tools/works.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/utils/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/utils/errors.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/utils/formatting.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/src/devrev_mcp/utils/pagination.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/conftest.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/conftest.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_accounts_e2e.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_all_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_backwards_compatibility.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_contacts_e2e.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_core_services_phase1.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_extended_services_phase2.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_get_endpoints.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_issues_e2e.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_kb_articles_e2e.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_ping.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_question_answers_e2e.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_specialized_services_phase3.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_tickets_e2e.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/test_write_operations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/utils/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/utils/cleanup.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/utils/constants.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/integration/utils/data_manager.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/conftest.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_config.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_phase4_transport.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_prompts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_resources.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_accounts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_articles.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_conversations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_engagements.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_groups.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_incidents.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_links.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_parts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_recommendations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_search.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_slas.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_tags.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_timeline.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_users.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_tools_works.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/mcp/test_utils.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/models/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/models/test_user_state_regression.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/__init__.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/conftest.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_articles.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_async_services.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_brands.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_code_changes.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_conversations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_engagements.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_groups.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_incidents.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_links.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_notifications.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_parts.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_preferences.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_question_answers.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_recommendations.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_search.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_slas.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_tags.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_timeline_entries.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_track_events.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_uoms.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_webhooks.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/services/test_works.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_base_service.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_client.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_config.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_deprecation.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_exceptions.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_http.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_logging.py +0 -0
- {devrev_python_sdk-2.4.1 → devrev_python_sdk-2.7.0}/tests/unit/test_pagination.py +0 -0
|
@@ -39,11 +39,11 @@ FROM python:3.11-slim AS runtime
|
|
|
39
39
|
# Metadata labels
|
|
40
40
|
LABEL maintainer="Matthew G. Monteleone <matthewm@augmentcode.com>" \
|
|
41
41
|
description="DevRev MCP Server - A Model Context Protocol server for the DevRev platform" \
|
|
42
|
-
version="2.
|
|
42
|
+
version="2.6.0" \
|
|
43
43
|
org.opencontainers.image.source="https://github.com/mgmonteleone/py-dev-rev" \
|
|
44
44
|
org.opencontainers.image.title="DevRev MCP Server" \
|
|
45
45
|
org.opencontainers.image.description="Production-ready MCP server for DevRev API integration" \
|
|
46
|
-
org.opencontainers.image.version="2.
|
|
46
|
+
org.opencontainers.image.version="2.6.0" \
|
|
47
47
|
org.opencontainers.image.licenses="MIT"
|
|
48
48
|
|
|
49
49
|
# Set environment variables for Python
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devrev-Python-SDK
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.0
|
|
4
4
|
Summary: A modern, type-safe Python SDK for the DevRev API
|
|
5
5
|
Project-URL: Homepage, https://github.com/mgmonteleone/py-dev-rev
|
|
6
6
|
Project-URL: Documentation, https://github.com/mgmonteleone/py-dev-rev
|
|
@@ -97,6 +97,7 @@ A modern, type-safe Python SDK for the DevRev API.
|
|
|
97
97
|
- [Configuration](#configuration)
|
|
98
98
|
- [Error Handling](#error-handling)
|
|
99
99
|
- [Logging](#logging)
|
|
100
|
+
- [MCP Server](#mcp-server)
|
|
100
101
|
- [Development](#development)
|
|
101
102
|
- [Testing Strategy](#testing-strategy)
|
|
102
103
|
- [CI/CD Pipeline](#cicd-pipeline)
|
|
@@ -153,6 +154,15 @@ This SDK is generated and maintained from the official DevRev OpenAPI specificat
|
|
|
153
154
|
- ✅ **Health Checks** - Built-in health check endpoints for monitoring
|
|
154
155
|
- ✅ **High Test Coverage** - 80%+ code coverage with unit and integration tests
|
|
155
156
|
|
|
157
|
+
### MCP Server (AI Integration)
|
|
158
|
+
|
|
159
|
+
- ✅ **78+ MCP Tools** — Full CRUD for tickets, accounts, users, articles, and all DevRev resources
|
|
160
|
+
- ✅ **7 Resource Templates** — `devrev://` URI scheme for AI-accessible data browsing
|
|
161
|
+
- ✅ **8 Workflow Prompts** — Pre-built triage, escalation, investigation, and reporting workflows
|
|
162
|
+
- ✅ **3 Transport Modes** — stdio (local), Streamable HTTP (production), SSE (legacy)
|
|
163
|
+
- ✅ **Per-User Authentication** — DevRev PAT auth mode for team deployments
|
|
164
|
+
- ✅ **Cloud Run Deployment** — One-command deploy to Google Cloud Run with auto-scaling
|
|
165
|
+
|
|
156
166
|
---
|
|
157
167
|
|
|
158
168
|
## Installation
|
|
@@ -25,6 +25,7 @@ A modern, type-safe Python SDK for the DevRev API.
|
|
|
25
25
|
- [Configuration](#configuration)
|
|
26
26
|
- [Error Handling](#error-handling)
|
|
27
27
|
- [Logging](#logging)
|
|
28
|
+
- [MCP Server](#mcp-server)
|
|
28
29
|
- [Development](#development)
|
|
29
30
|
- [Testing Strategy](#testing-strategy)
|
|
30
31
|
- [CI/CD Pipeline](#cicd-pipeline)
|
|
@@ -81,6 +82,15 @@ This SDK is generated and maintained from the official DevRev OpenAPI specificat
|
|
|
81
82
|
- ✅ **Health Checks** - Built-in health check endpoints for monitoring
|
|
82
83
|
- ✅ **High Test Coverage** - 80%+ code coverage with unit and integration tests
|
|
83
84
|
|
|
85
|
+
### MCP Server (AI Integration)
|
|
86
|
+
|
|
87
|
+
- ✅ **78+ MCP Tools** — Full CRUD for tickets, accounts, users, articles, and all DevRev resources
|
|
88
|
+
- ✅ **7 Resource Templates** — `devrev://` URI scheme for AI-accessible data browsing
|
|
89
|
+
- ✅ **8 Workflow Prompts** — Pre-built triage, escalation, investigation, and reporting workflows
|
|
90
|
+
- ✅ **3 Transport Modes** — stdio (local), Streamable HTTP (production), SSE (legacy)
|
|
91
|
+
- ✅ **Per-User Authentication** — DevRev PAT auth mode for team deployments
|
|
92
|
+
- ✅ **Cloud Run Deployment** — One-command deploy to Google Cloud Run with auto-scaling
|
|
93
|
+
|
|
84
94
|
---
|
|
85
95
|
|
|
86
96
|
## Installation
|
|
@@ -461,7 +461,94 @@ curl -X POST https://devrev-mcp-server-xxx.run.app/mcp/v1/initialize \
|
|
|
461
461
|
|
|
462
462
|
### Audit and Monitoring
|
|
463
463
|
|
|
464
|
-
|
|
464
|
+
#### Application-Level Audit Logging
|
|
465
|
+
|
|
466
|
+
The MCP server includes built-in structured audit logging for compliance. When enabled (default), every authentication event and tool invocation is logged with structured JSON fields.
|
|
467
|
+
|
|
468
|
+
**Audit Event Schema:**
|
|
469
|
+
```json
|
|
470
|
+
{
|
|
471
|
+
"event_type": "audit",
|
|
472
|
+
"action": "tool_invocation",
|
|
473
|
+
"user": {"id": "don:...", "email": "user@example.com", "pat_hash": "sha256:..."},
|
|
474
|
+
"tool": {"name": "devrev_works_list", "category": "read"},
|
|
475
|
+
"request": {"client_ip": "203.0.113.42"},
|
|
476
|
+
"outcome": "success",
|
|
477
|
+
"duration_ms": 142
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
**Configuration:**
|
|
482
|
+
```bash
|
|
483
|
+
# Enable/disable audit logging (default: true)
|
|
484
|
+
MCP_AUDIT_LOG_ENABLED=true
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
**Querying audit logs:**
|
|
488
|
+
```bash
|
|
489
|
+
# View recent audit events
|
|
490
|
+
gcloud logging read 'resource.type="cloud_run_revision" AND jsonPayload.event_type="audit"' \
|
|
491
|
+
--project=PROJECT_ID --limit=50 --format=json
|
|
492
|
+
|
|
493
|
+
# View auth failures only
|
|
494
|
+
gcloud logging read 'jsonPayload.event_type="audit" AND jsonPayload.action="auth_failure"' \
|
|
495
|
+
--project=PROJECT_ID --limit=50
|
|
496
|
+
|
|
497
|
+
# View tool invocations for a specific user
|
|
498
|
+
gcloud logging read 'jsonPayload.event_type="audit" AND jsonPayload.user.email="user@example.com"' \
|
|
499
|
+
--project=PROJECT_ID --limit=50
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
#### Immutable Audit Log Storage
|
|
503
|
+
|
|
504
|
+
For compliance with immutable log requirements, set up a WORM-compliant Cloud Storage bucket with a Cloud Logging sink:
|
|
505
|
+
|
|
506
|
+
```bash
|
|
507
|
+
# Run the setup script
|
|
508
|
+
./deploy/audit-logging-setup.sh --project=YOUR_PROJECT_ID
|
|
509
|
+
|
|
510
|
+
# With WORM lock (IRREVERSIBLE — enables permanent retention):
|
|
511
|
+
./deploy/audit-logging-setup.sh --project=YOUR_PROJECT_ID --lock
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
This creates:
|
|
515
|
+
1. A GCS bucket with a 365-day retention policy
|
|
516
|
+
2. A Cloud Logging sink that exports `event_type="audit"` entries
|
|
517
|
+
3. IAM bindings for the sink's service account
|
|
518
|
+
|
|
519
|
+
See `deploy/audit-logging-setup.sh --help` for all options.
|
|
520
|
+
|
|
521
|
+
#### Monitoring and Alerting
|
|
522
|
+
|
|
523
|
+
Alert policies and a dashboard are provided in `deploy/monitoring/`:
|
|
524
|
+
|
|
525
|
+
```bash
|
|
526
|
+
# Validate prerequisites
|
|
527
|
+
./deploy/monitoring/validate-config.sh YOUR_PROJECT_ID
|
|
528
|
+
|
|
529
|
+
# Create a notification channel
|
|
530
|
+
gcloud alpha monitoring channels create \
|
|
531
|
+
--display-name="MCP Audit Alerts" \
|
|
532
|
+
--type=email \
|
|
533
|
+
--channel-labels=email_address=alerts@yourcompany.com
|
|
534
|
+
|
|
535
|
+
# Apply alert policies (edit alert-policies.yaml first with your project/channel IDs)
|
|
536
|
+
gcloud alpha monitoring policies create \
|
|
537
|
+
--policy-from-file=deploy/monitoring/alert-policies.yaml
|
|
538
|
+
|
|
539
|
+
# Import dashboard
|
|
540
|
+
gcloud monitoring dashboards create \
|
|
541
|
+
--config-from-file=deploy/monitoring/dashboard.json
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
**Alert policies include:**
|
|
545
|
+
- High auth failure rate (>10 failures in 5 min)
|
|
546
|
+
- High destructive operation rate (>20 deletes in 10 min)
|
|
547
|
+
- Elevated tool error rate (>20% failure over 5 min)
|
|
548
|
+
|
|
549
|
+
See `deploy/monitoring/README.md` for full details.
|
|
550
|
+
|
|
551
|
+
1. **Cloud Logging**: All requests and audit events logged in JSON format
|
|
465
552
|
```bash
|
|
466
553
|
gcloud run services logs read devrev-mcp-server --region=us-central1
|
|
467
554
|
```
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Audit Logging Infrastructure Setup for DevRev MCP Server
|
|
3
|
+
# Sets up immutable audit log storage for compliance.
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# ./deploy/audit-logging-setup.sh --project=my-project
|
|
7
|
+
# ./deploy/audit-logging-setup.sh --project=my-project --retention=730 --lock
|
|
8
|
+
#
|
|
9
|
+
# This script creates:
|
|
10
|
+
# 1. A GCS bucket with a retention policy for audit log storage
|
|
11
|
+
# 2. A Cloud Logging sink that exports audit events to the bucket
|
|
12
|
+
# 3. IAM bindings for the sink's service account
|
|
13
|
+
#
|
|
14
|
+
# The --lock flag enables WORM (Write Once Read Many) compliance by
|
|
15
|
+
# permanently locking the bucket retention policy. THIS IS IRREVERSIBLE.
|
|
16
|
+
|
|
17
|
+
set -euo pipefail
|
|
18
|
+
|
|
19
|
+
# Color codes for output
|
|
20
|
+
RED='\033[0;31m'
|
|
21
|
+
GREEN='\033[0;32m'
|
|
22
|
+
YELLOW='\033[1;33m'
|
|
23
|
+
BLUE='\033[0;34m'
|
|
24
|
+
NC='\033[0m' # No Color
|
|
25
|
+
|
|
26
|
+
# Default values
|
|
27
|
+
REGION="${REGION:-us-central1}"
|
|
28
|
+
RETENTION_DAYS="${RETENTION_DAYS:-365}"
|
|
29
|
+
BUCKET_NAME=""
|
|
30
|
+
SINK_NAME="${SINK_NAME:-mcp-audit-log-sink}"
|
|
31
|
+
SERVICE_NAME="${SERVICE_NAME:-devrev-mcp-server}"
|
|
32
|
+
PROJECT_ID="${PROJECT_ID:-}"
|
|
33
|
+
LOCK_BUCKET=false
|
|
34
|
+
|
|
35
|
+
# Helper functions
|
|
36
|
+
log_info() {
|
|
37
|
+
echo -e "${BLUE}[INFO]${NC} $1"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
log_success() {
|
|
41
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
log_warning() {
|
|
45
|
+
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
log_error() {
|
|
49
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
show_usage() {
|
|
53
|
+
cat << EOF
|
|
54
|
+
Usage: $0 [OPTIONS]
|
|
55
|
+
|
|
56
|
+
Required:
|
|
57
|
+
--project=PROJECT_ID GCP project ID
|
|
58
|
+
|
|
59
|
+
Optional:
|
|
60
|
+
--region=REGION GCS bucket region (default: us-central1)
|
|
61
|
+
--retention=DAYS Retention period in days (default: 365)
|
|
62
|
+
--bucket=BUCKET_NAME GCS bucket name (default: PROJECT_ID-mcp-audit-logs)
|
|
63
|
+
--sink=SINK_NAME Cloud Logging sink name (default: mcp-audit-log-sink)
|
|
64
|
+
--service=SERVICE_NAME Cloud Run service name (default: devrev-mcp-server)
|
|
65
|
+
--lock Lock bucket retention policy (IRREVERSIBLE!)
|
|
66
|
+
-h, --help Show this help message
|
|
67
|
+
|
|
68
|
+
Examples:
|
|
69
|
+
$0 --project=my-project
|
|
70
|
+
$0 --project=my-project --retention=730 --lock
|
|
71
|
+
|
|
72
|
+
EOF
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Parse command line arguments
|
|
76
|
+
for arg in "$@"; do
|
|
77
|
+
case $arg in
|
|
78
|
+
--project=*)
|
|
79
|
+
PROJECT_ID="${arg#*=}"
|
|
80
|
+
shift
|
|
81
|
+
;;
|
|
82
|
+
--region=*)
|
|
83
|
+
REGION="${arg#*=}"
|
|
84
|
+
shift
|
|
85
|
+
;;
|
|
86
|
+
--retention=*)
|
|
87
|
+
RETENTION_DAYS="${arg#*=}"
|
|
88
|
+
shift
|
|
89
|
+
;;
|
|
90
|
+
--bucket=*)
|
|
91
|
+
BUCKET_NAME="${arg#*=}"
|
|
92
|
+
shift
|
|
93
|
+
;;
|
|
94
|
+
--sink=*)
|
|
95
|
+
SINK_NAME="${arg#*=}"
|
|
96
|
+
shift
|
|
97
|
+
;;
|
|
98
|
+
--service=*)
|
|
99
|
+
SERVICE_NAME="${arg#*=}"
|
|
100
|
+
shift
|
|
101
|
+
;;
|
|
102
|
+
--lock)
|
|
103
|
+
LOCK_BUCKET=true
|
|
104
|
+
shift
|
|
105
|
+
;;
|
|
106
|
+
-h|--help)
|
|
107
|
+
show_usage
|
|
108
|
+
exit 0
|
|
109
|
+
;;
|
|
110
|
+
*)
|
|
111
|
+
log_error "Unknown option: $arg"
|
|
112
|
+
show_usage
|
|
113
|
+
exit 1
|
|
114
|
+
;;
|
|
115
|
+
esac
|
|
116
|
+
done
|
|
117
|
+
|
|
118
|
+
# Validate required parameters
|
|
119
|
+
if [ -z "$PROJECT_ID" ]; then
|
|
120
|
+
log_error "PROJECT_ID is required"
|
|
121
|
+
show_usage
|
|
122
|
+
exit 1
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# Set default bucket name if not provided
|
|
126
|
+
if [ -z "$BUCKET_NAME" ]; then
|
|
127
|
+
BUCKET_NAME="${PROJECT_ID}-mcp-audit-logs"
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
log_info "Starting audit logging infrastructure setup"
|
|
131
|
+
log_info "Project: $PROJECT_ID"
|
|
132
|
+
log_info "Region: $REGION"
|
|
133
|
+
log_info "Bucket: $BUCKET_NAME"
|
|
134
|
+
log_info "Retention: $RETENTION_DAYS days"
|
|
135
|
+
log_info "Sink: $SINK_NAME"
|
|
136
|
+
log_info "Service: $SERVICE_NAME"
|
|
137
|
+
log_info "Lock bucket: $LOCK_BUCKET"
|
|
138
|
+
echo ""
|
|
139
|
+
|
|
140
|
+
# Step 1: Create GCS bucket with retention policy
|
|
141
|
+
log_info "Step 1: Creating GCS bucket with retention policy..."
|
|
142
|
+
if gsutil ls -b "gs://$BUCKET_NAME" &>/dev/null; then
|
|
143
|
+
log_warning "Bucket gs://$BUCKET_NAME already exists, skipping creation"
|
|
144
|
+
else
|
|
145
|
+
log_info "Creating bucket gs://$BUCKET_NAME..."
|
|
146
|
+
gsutil mb -p "$PROJECT_ID" -l "$REGION" -b on "gs://$BUCKET_NAME"
|
|
147
|
+
log_success "Bucket created"
|
|
148
|
+
fi
|
|
149
|
+
|
|
150
|
+
# Set retention policy (skip if bucket is already locked)
|
|
151
|
+
LOCK_STATUS=$(gsutil retention get "gs://$BUCKET_NAME" 2>/dev/null | grep -i "Locked" || echo "")
|
|
152
|
+
if echo "$LOCK_STATUS" | grep -qi "true"; then
|
|
153
|
+
log_warning "Bucket retention policy is locked; skipping retention update"
|
|
154
|
+
else
|
|
155
|
+
log_info "Setting retention policy to $RETENTION_DAYS days..."
|
|
156
|
+
gsutil retention set "${RETENTION_DAYS}d" "gs://$BUCKET_NAME"
|
|
157
|
+
log_success "Retention policy set"
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
# Step 2: Lock the bucket (optional, IRREVERSIBLE)
|
|
161
|
+
if [ "$LOCK_BUCKET" = true ]; then
|
|
162
|
+
log_warning "Checking if bucket retention policy is already locked..."
|
|
163
|
+
|
|
164
|
+
# Check if already locked
|
|
165
|
+
LOCK_STATUS=$(gsutil retention get "gs://$BUCKET_NAME" | grep -i "Retention Policy Locked" || echo "")
|
|
166
|
+
|
|
167
|
+
if echo "$LOCK_STATUS" | grep -qi "true"; then
|
|
168
|
+
log_warning "Bucket retention policy is already locked"
|
|
169
|
+
else
|
|
170
|
+
echo ""
|
|
171
|
+
log_warning "⚠️ WARNING: You are about to PERMANENTLY LOCK the bucket retention policy!"
|
|
172
|
+
log_warning "This action is IRREVERSIBLE and enforces WORM (Write Once Read Many) compliance."
|
|
173
|
+
log_warning "Once locked, you CANNOT:"
|
|
174
|
+
log_warning " - Reduce the retention period"
|
|
175
|
+
log_warning " - Delete the bucket until all objects expire"
|
|
176
|
+
log_warning " - Remove the retention policy"
|
|
177
|
+
echo ""
|
|
178
|
+
read -p "Type 'LOCK' to confirm: " confirmation
|
|
179
|
+
|
|
180
|
+
if [ "$confirmation" = "LOCK" ]; then
|
|
181
|
+
log_info "Locking bucket retention policy..."
|
|
182
|
+
gsutil retention lock "gs://$BUCKET_NAME"
|
|
183
|
+
log_success "Bucket retention policy locked (WORM compliance enabled)"
|
|
184
|
+
else
|
|
185
|
+
log_warning "Bucket lock cancelled"
|
|
186
|
+
fi
|
|
187
|
+
fi
|
|
188
|
+
else
|
|
189
|
+
log_info "Skipping bucket lock (use --lock flag to enable WORM compliance)"
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
# Step 3: Create Cloud Logging sink
|
|
193
|
+
log_info "Step 3: Creating Cloud Logging sink..."
|
|
194
|
+
if gcloud logging sinks describe "$SINK_NAME" --project="$PROJECT_ID" &>/dev/null; then
|
|
195
|
+
log_warning "Sink $SINK_NAME already exists, skipping creation"
|
|
196
|
+
else
|
|
197
|
+
log_info "Creating sink $SINK_NAME..."
|
|
198
|
+
|
|
199
|
+
# Create the sink with filter for audit events
|
|
200
|
+
gcloud logging sinks create "$SINK_NAME" \
|
|
201
|
+
"storage.googleapis.com/$BUCKET_NAME" \
|
|
202
|
+
--project="$PROJECT_ID" \
|
|
203
|
+
--log-filter="resource.type=\"cloud_run_revision\" AND resource.labels.service_name=\"$SERVICE_NAME\" AND jsonPayload.event_type=\"audit\""
|
|
204
|
+
|
|
205
|
+
log_success "Sink created"
|
|
206
|
+
fi
|
|
207
|
+
|
|
208
|
+
# Step 4: Grant sink service account write access to bucket
|
|
209
|
+
log_info "Step 4: Granting sink service account write access..."
|
|
210
|
+
|
|
211
|
+
# Get the sink's writer identity
|
|
212
|
+
SINK_SA=$(gcloud logging sinks describe "$SINK_NAME" --project="$PROJECT_ID" --format='value(writerIdentity)')
|
|
213
|
+
|
|
214
|
+
if [ -z "$SINK_SA" ]; then
|
|
215
|
+
log_error "Failed to get sink service account"
|
|
216
|
+
exit 1
|
|
217
|
+
fi
|
|
218
|
+
|
|
219
|
+
log_info "Sink service account: $SINK_SA"
|
|
220
|
+
|
|
221
|
+
# Grant objectCreator role
|
|
222
|
+
log_info "Granting objectCreator role to sink service account..."
|
|
223
|
+
gsutil iam ch "${SINK_SA}:objectCreator" "gs://$BUCKET_NAME"
|
|
224
|
+
log_success "IAM binding created"
|
|
225
|
+
|
|
226
|
+
# Step 5: Enable Data Access Audit Logs
|
|
227
|
+
log_info "Step 5: Data Access Audit Logs configuration..."
|
|
228
|
+
echo ""
|
|
229
|
+
log_warning "MANUAL STEP REQUIRED:"
|
|
230
|
+
log_warning "Enable Data Access audit logs in Cloud Console for:"
|
|
231
|
+
log_warning " 1. Cloud Run API:"
|
|
232
|
+
log_warning " IAM & Admin > Audit Logs > Cloud Run API"
|
|
233
|
+
log_warning " ✓ Enable 'Data Read'"
|
|
234
|
+
log_warning " ✓ Enable 'Data Write'"
|
|
235
|
+
log_warning ""
|
|
236
|
+
log_warning " 2. Secret Manager API:"
|
|
237
|
+
log_warning " IAM & Admin > Audit Logs > Secret Manager API"
|
|
238
|
+
log_warning " ✓ Enable 'Data Read'"
|
|
239
|
+
log_warning ""
|
|
240
|
+
log_warning "Or use gcloud to update the IAM policy:"
|
|
241
|
+
log_warning " gcloud projects get-iam-policy $PROJECT_ID > policy.yaml"
|
|
242
|
+
log_warning " # Edit policy.yaml to add auditConfigs"
|
|
243
|
+
log_warning " gcloud projects set-iam-policy $PROJECT_ID policy.yaml"
|
|
244
|
+
echo ""
|
|
245
|
+
|
|
246
|
+
# Step 6: Verify setup
|
|
247
|
+
log_info "Step 6: Verifying setup..."
|
|
248
|
+
echo ""
|
|
249
|
+
log_info "=== Sink Configuration ==="
|
|
250
|
+
gcloud logging sinks describe "$SINK_NAME" --project="$PROJECT_ID"
|
|
251
|
+
echo ""
|
|
252
|
+
log_info "=== Bucket Configuration ==="
|
|
253
|
+
gsutil ls -L -b "gs://$BUCKET_NAME"
|
|
254
|
+
echo ""
|
|
255
|
+
|
|
256
|
+
log_success "✅ Audit logging infrastructure setup complete!"
|
|
257
|
+
echo ""
|
|
258
|
+
log_info "Summary:"
|
|
259
|
+
log_info " • Bucket: gs://$BUCKET_NAME"
|
|
260
|
+
log_info " • Retention: $RETENTION_DAYS days"
|
|
261
|
+
log_info " • Sink: $SINK_NAME"
|
|
262
|
+
log_info " • Service: $SERVICE_NAME"
|
|
263
|
+
log_info " • Locked: $LOCK_BUCKET"
|
|
264
|
+
echo ""
|
|
265
|
+
log_info "Next steps:"
|
|
266
|
+
log_info " 1. Enable Data Access audit logs (see manual step above)"
|
|
267
|
+
log_info " 2. Deploy your Cloud Run service with audit logging enabled"
|
|
268
|
+
log_info " 3. Verify logs are being exported: gsutil ls gs://$BUCKET_NAME"
|
|
269
|
+
echo ""
|
|
270
|
+
|
|
@@ -17,8 +17,6 @@ steps:
|
|
|
17
17
|
args:
|
|
18
18
|
- 'build'
|
|
19
19
|
- '-t'
|
|
20
|
-
- '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:$COMMIT_SHA'
|
|
21
|
-
- '-t'
|
|
22
20
|
- '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:latest'
|
|
23
21
|
- '-t'
|
|
24
22
|
- '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:${_TAG_NAME}'
|
|
@@ -45,18 +43,18 @@ steps:
|
|
|
45
43
|
- 'run'
|
|
46
44
|
- 'deploy'
|
|
47
45
|
- '${_SERVICE_NAME}'
|
|
48
|
-
- '--image=${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:$
|
|
46
|
+
- '--image=${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:${_TAG_NAME}'
|
|
49
47
|
- '--region=${_REGION}'
|
|
50
48
|
- '--platform=managed'
|
|
51
49
|
- '--allow-unauthenticated'
|
|
52
50
|
- '--port=8080'
|
|
53
51
|
- '--memory=${_MEMORY}'
|
|
54
52
|
- '--cpu=${_CPU}'
|
|
55
|
-
- '--min-instances=
|
|
53
|
+
- '--min-instances=1'
|
|
56
54
|
- '--max-instances=10'
|
|
57
55
|
- '--timeout=300s'
|
|
58
56
|
- '--concurrency=80'
|
|
59
|
-
- '--set-env-vars=MCP_TRANSPORT=streamable-http,MCP_HOST=0.0.0.0,MCP_PORT=8080,MCP_LOG_FORMAT=json,MCP_LOG_LEVEL=INFO,MCP_AUTH_MODE=devrev-pat,MCP_AUTH_ALLOWED_DOMAINS=["augmentcode.com"]'
|
|
57
|
+
- '--set-env-vars=MCP_TRANSPORT=streamable-http,MCP_HOST=0.0.0.0,MCP_PORT=8080,MCP_LOG_FORMAT=json,MCP_LOG_LEVEL=INFO,MCP_AUTH_MODE=devrev-pat,MCP_AUTH_ALLOWED_DOMAINS=["augmentcode.com"],MCP_ENABLE_DNS_REBINDING_PROTECTION=true,MCP_ALLOWED_HOSTS=["devrev-mcp-server-ucpy26yrfa-uc.a.run.app"]'
|
|
60
58
|
# Uncomment the next line if you need DEVREV_API_TOKEN for stdio/testing fallback
|
|
61
59
|
# - '--set-secrets=DEVREV_API_TOKEN=devrev-api-token:latest'
|
|
62
60
|
waitFor: ['push']
|
|
@@ -66,7 +64,6 @@ substitutions:
|
|
|
66
64
|
_REGION: 'us-central1'
|
|
67
65
|
_SERVICE_NAME: 'devrev-mcp-server'
|
|
68
66
|
_REPO: 'devrev-mcp'
|
|
69
|
-
_IMAGE: 'devrev-mcp-server'
|
|
70
67
|
_CPU: '1'
|
|
71
68
|
_MEMORY: '512Mi'
|
|
72
69
|
_TAG_NAME: 'latest'
|
|
@@ -81,7 +78,6 @@ timeout: '1200s'
|
|
|
81
78
|
|
|
82
79
|
# Images to be pushed to Artifact Registry
|
|
83
80
|
images:
|
|
84
|
-
- '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:$COMMIT_SHA'
|
|
85
81
|
- '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:latest'
|
|
86
82
|
- '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO}/devrev-mcp-server:${_TAG_NAME}'
|
|
87
83
|
|