MCP server exposing the Subreg.cz domain registrar SOAP API as tools
Find a file
CyberVitexus 700b7d3b52 Fail-closed empty SUBREG_READONLY.
Empty or whitespace SUBREG_READONLY no longer enables mutating tools.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 11:44:31 +02:00
debian Fail-closed empty SUBREG_READONLY. 2026-09-21 11:44:31 +02:00
src/mcp_server_subreg Fail-closed empty SUBREG_READONLY. 2026-09-21 11:44:31 +02:00
tests Fail-closed empty SUBREG_READONLY. 2026-09-21 11:44:31 +02:00
.env.example Fix info_user, add users_list, and live Subreg capability scenario. 2026-09-21 11:37:14 +02:00
.gitignore Fix info_user, add users_list, and live Subreg capability scenario. 2026-09-21 11:37:14 +02:00
LICENSE docs: add MIT LICENSE file for clarity and consistency 2026-08-31 19:56:13 +02:00
mcp-server-subreg.svg docs: add project SVG icon and update README 2026-08-31 19:48:19 +02:00
pyproject.toml Fail-closed empty SUBREG_READONLY. 2026-09-21 11:44:31 +02:00
README.md Fix info_user, add users_list, and live Subreg capability scenario. 2026-09-21 11:37:14 +02:00

mcp-server-subreg

mcp-server-subreg

M8ven Verified

MCP server exposing the Subreg.cz domain registrar SOAP API — via the subreg-client library — as tools for LLM agents built with FastMCP.

Configuration

Credentials are read from the environment only, never accepted as tool parameters. Copy the template and fill in real values:

cp .env.example .env
# edit .env — never commit .env
Variable Required Description
SUBREG_LOCATION yes SOAP endpoint, e.g. https://soap.subreg.cz/cmd.php
SUBREG_URI yes SOAP namespace URI, e.g. https://soap.subreg.cz/soap
SUBREG_LOGIN yes Subreg account login
SUBREG_PASSWORD yes Subreg account password
SUBREG_READONLY no true (default) blocks mutating tools; set to false to allow domain/DNS/contact/billing writes

Use https://ote-soap.subreg.cz/... endpoints for Subreg's OTE sandbox environment while testing writes. Prefer OTE (or a disposable account) for any SUBREG_READONLY=false session — never mutate production domains from an agent.

Tools

Read-only: check_domain, info_domain, domains_list, pricelist, get_pricelist, get_credit, users_list, info_user, get_dns_zone, info_contact, contacts_list, info_order, get_tld_info.

Mutating (require SUBREG_READONLY=false): register_domain, renew_domain, delete_domain, add_dns_record, delete_dns_record, create_contact, update_contact, credit_correction.

info_user requires a numeric sub-user id (discover via users_list). Subreg's Info_User rejects an empty payload.

Usage

pip install -e .
export SUBREG_LOCATION=https://soap.subreg.cz/cmd.php
export SUBREG_URI=https://soap.subreg.cz/soap
export SUBREG_LOGIN=...
export SUBREG_PASSWORD=...
export SUBREG_READONLY=true
mcp-server-subreg

Development

pytest

Live capability scenario

Exercises every read tool against a real Subreg SOAP account and verifies that mutating tools refuse under SUBREG_READONLY=true:

export SUBREG_LOCATION=https://soap.subreg.cz/cmd.php
export SUBREG_URI=https://soap.subreg.cz/soap
export SUBREG_LOGIN=...
export SUBREG_PASSWORD=...
export SUBREG_READONLY=true
python tests/live_capability_scenario.py --json-out /tmp/subreg-live.json

--allow-writes is refused against production soap.subreg.cz (use OTE).