Certus MCP
MCP server that exposes the Certus Certificate Management Service to agents (Claude / Cursor). Talks only to Certus. Use ServiceNEX MCP separately for tickets/incidents.
| Item | Value |
|---|---|
| PyPI | mcp-certus |
| Console script | mcp-certus |
| Python | >=3.10 |
Install
pip install mcp-certus
Configure and run
export CERTUS_API_BASE="http://127.0.0.1:8080"
export LOG_LEVEL="INFO"
mcp-certus
(CMS_BASE is accepted as an alias for CERTUS_API_BASE.)
Cursor / Claude Desktop
{
"mcpServers": {
"certus": {
"command": "mcp-certus",
"env": {
"CERTUS_API_BASE": "http://127.0.0.1:8080",
"LOG_LEVEL": "INFO"
}
}
}
}
Development setup
cd certus-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
# or: pip install -r requirements.txt
.env:
CERTUS_API_BASE=http://127.0.0.1:8080
LOG_LEVEL=INFO
Start Certus first, then:
mcp-certus
# or: python -m app.server
Tools (by Certus domain)
| Module | Tools |
|---|---|
| certificates | list_cert_inventory, get_cert |
| ca | create_ca_order, get_ca_order, get_ca_certificate |
| secrets | put_secret, get_secret |
| runbooks | find_runbook, list_runbook_runs |
| deployments | create_deployment, get_deployment, get_deployment_logs |
| verify | verify_endpoint |
| scenario | certus_health, get_scenario, set_scenario, reset_mock |
| playbook | get_cert_renewal_playbook, render_renewal_pipeline |
Prompts
| Prompt | Purpose |
|---|---|
cert_renewal_flow |
Full renewal loop with ServiceNEX parent/child tickets |
For natural language (e.g. “Run cert renewal”), Claude should call
get_cert_renewal_playbook first — same content and ServiceNEX templates as the
Connector prompt — then execute the flow. During the run it should call
render_renewal_pipeline at each stage and show the returned board/mermaid in chat.
Agent flow (cert_renewal_flow / get_cert_renewal_playbook)
Requires Certus MCP + ServiceNEX MCP. For each inventory cert with status: "expiring":
- DETECT —
list_cert_inventory, filterexpiring - Parent ticket — ServiceNEX
create_ticketfrom the cert object - RENEW —
create_ca_order→ pollget_ca_order→get_ca_certificate- success → comment parent
- fail → child ticket → stop this cert
- RUNBOOK —
find_runbook(tls-server, target)→list_runbook_runs- success history → comment parent
- else → child ticket → stop this cert
- EXECUTE —
create_deploymentwithcertRef=certs/<cn>→ pollget_deployment→get_deployment_logs- success → comment parent (include logs)
- fail → child ticket with remediation from logs → stop this cert
Then continue with the next expiring cert. Skip put_secret and verify_endpoint unless asked.
Polling advances Certus mocks — call get_* again; do not sleep on wall clock.
Publish to PyPI
See the sibling guide pattern in lmsnex-mcp-server/docs/PUBLISH_PYPI.md. Short version:
python3 -m venv .venv && source .venv/bin/activate
pip install -U build twine
rm -rf dist/ build/ *.egg-info
python -m build && twine check dist/*
# TestPyPI first, then:
python -m twine upload --repository testpypi dist/*
python -m twine upload dist/*
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_certus-0.1.1.tar.gz.
File metadata
- Download URL: mcp_certus-0.1.1.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c0fdcdbac22e6740057c44bc41c71cd6a505efe8d47dbc47d54c0c09e3f6f80
|
|
| MD5 |
e46ef2a43656e2aac5af81ea86462e1f
|
|
| BLAKE2b-256 |
5760d144386fb8215ec5928a32355bdf1984a2d5c64028136238514da92839df
|
File details
Details for the file mcp_certus-0.1.1-py3-none-any.whl.
File metadata
- Download URL: mcp_certus-0.1.1-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9f262ec2557d721fdae6e90d9cf6762c80c5dd0242efa4423a3b45d703e66e6
|
|
| MD5 |
f66037f188c8f4fe9e120ada43f0ba8a
|
|
| BLAKE2b-256 |
8b0a0b7de1f936b214056a3841ae13e974c4d807ef97d557d9c3c95d6c43dd3c
|