Metadata-Version: 2.5
Name: ct-jsm-ops-mcp-server
Version: 0.1.1
Summary: CloudThinker MCP server for Jira Service Management Operations: reads JSM_* env at startup, auto-connects to the JSM ops REST API, and serves alert, on-call, and idempotent alert-lifecycle tools over stdio.
Project-URL: Homepage, https://gitlab.com/builder-studio/cloud-cost-optimization/-/tree/develop/tooling/connector-runtimes/jsm
Author: CloudThinker
License: Apache-2.0
License-File: LICENSE
Keywords: cloudthinker,incidents,jira,jira-service-management,jsm,llm,mcp,on-call,opsgenie
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Requires-Dist: fastmcp<3,>=2.0
Requires-Dist: httpx>=0.27
Description-Content-Type: text/markdown

# JSM Operations MCP server

Maintained source for the CloudThinker-owned `ct-jsm-ops-mcp-server` package.
The original source was extracted from the PyPI 0.1.0 source distribution,
SHA-256 `72b8c6a8737a523d970a3a6591ba352b6539dcdb024b561a093a7523f31ad784`.
Its advertised GitHub repository was unavailable during recovery. This is
extracted source, not recovered authoring history. Existing tests and dependency
lock are retained from that distribution.

## Build and release

Run `uv sync --locked`, `uv run pytest -q tests`, then
`uv run python tests/smoke_listtools.py` in this directory. Build with `uv build`.
Publish a new immutable version only after its source merges into `develop`.
Tag the source revision with `connector-jsm-v<VERSION>` and record the built
wheel SHA-256 in the annotated tag. Publish through `infisical run -- uv publish`.
Update the app's JSM catalog pin and its simulation preparation together.
Never overwrite a published version.

## Action completion

Most alert writes return a request ID and are polled until settled. Adding a note
can instead return the saved note directly. That response is successful only when
the same note ID and text can be read back from the alert's notes. No request ID
is fabricated, and other action types still reject responses without one.
A repeated identical note remains a no-op. Unconfirmed writes must not be retried
blindly because the provider may already have applied them.

Credentials are read from `JSM_SITE_URL`, `JSM_SITE_EMAIL`, and `JSM_API_TOKEN` at
runtime; never put their values in release files or logs.
