A public API and MCP server for the Ex2 catalogue
Plans, prices, domain names and their availability, in JSON for your code or as tools for AI assistants: free, read-only, no key. Ex2 customers can also connect their own account.
Catalogue API
Every plan with its prices, features and order link, in CAD, EUR or USD, in English or French./api/v1
MCP server
The same catalogue as tools for Claude, ChatGPT, Cursor and other assistants, and your own account once you sign in./mcp
Domain availability
Whether a name is free right now, with its one-year price and the link to register it./api/v1/domains/availability
llms.txt
An index of the site for language models: the pages that matter and where the live data is./llms.txt
Connect an AI assistant
With the MCP server (Model Context Protocol), an assistant answers with today’s plans and prices and real order links, instead of figures it remembers.
Claude Code
In a terminal:
claude mcp add --transport http ex2 https://www.ex2.com/mcpClaude, ChatGPT and other apps
Add a custom connector (a remote MCP server) with this URL, without authentication:
https://www.ex2.com/mcpCursor, VS Code and other editors
In the editor’s MCP configuration, for example Cursor’s .cursor/mcp.json:
{
"mcpServers": {
"ex2": { "url": "https://www.ex2.com/mcp" }
}
}The tools
All read-only: they cannot order or change anything.
list_product_lines- The product lines (green hosting, WordPress, email, VPS…) with their pages and plan ids.
list_plans- Plans with their prices per billing cycle, first-year discount and main features; all of them or one product line.
get_plan- One plan with its full specification table.
compare_plans- Two to ten plans side by side, one row per specification.
get_domain_pricing- One-year register, transfer and renewal prices per domain extension.
check_domain- Whether a domain name can be registered now, its prices and the link to order it (or to transfer it, when taken).
Streamable HTTP, no session, no authentication. Protocol versions 2025-03-26, 2025-06-18, 2025-11-25, 2026-07-28.
Your Ex2 account in your AI assistant
A second MCP server, for Ex2 customers: once you sign in, your assistant can read your services, domain names, invoices and support tickets and answer your questions about them, and act for you only where you allow it when connecting (the tools below say what each one does). You can disconnect it at any time.
Claude, ChatGPT and other apps
Add a custom connector with this URL. The first time, the app opens Ex2’s sign-in page:
https://api.ex2.com/mcp/accountClaude Code
In a terminal, then /mcp in Claude Code to sign in:
claude mcp add --transport http ex2-account https://api.ex2.com/mcp/accountCursor, VS Code and other editors
In the editor’s MCP configuration; the editor asks you to sign in:
{
"mcpServers": {
"ex2-account": { "url": "https://api.ex2.com/mcp/account" }
}
}Your account’s tools
On top of the catalogue tools above. The first five read your account, and the quotes change nothing. The ones that order, renew, change a plan or cancel work only if you allowed billing actions when connecting, and the ones that change a domain's nameservers, lock or registrar only if you allowed domain actions. An order, a renewal or a plan change makes an invoice you pay as usual. None can pay, see your payment details or get a domain's transfer code.
get_my_account- Your client account: name, company, email, country, currency and credit balance.
list_my_services- Your hosting plans and other services: status, billing cycle, next due date and price, with the link to manage each one.
list_my_domains- Your domain names: status, expiry date, renewal price and whether they renew automatically.
list_my_invoices- Your invoices, the unpaid ones by default (or paid, or all), most recent first: number, dates, total, whether one is overdue, and the link to pay it.
list_my_tickets- Your support tickets: subject, department, status and date of the last reply. Never the messages themselves.
quote_domain_order- Whether a domain name can be registered or transferred in, its price, the registry's rules (.ca, .fr) and the terms to accept. Changes nothing.
order_domain- Orders a domain name, registration or transfer in: an order and its invoice, once you accept the price and the terms.
quote_plan_order- The price of a plan for your site, first payment and renewal, and the terms to accept. Changes nothing.
order_plan- Orders a plan for your site: an order and its invoice; Ex2 sets it up once it is paid.
set_domain_auto_renew- Turns the automatic renewal of one of your domain names on or off.
renew_domain- Renews a domain name for 1 to 10 years: an order and its invoice, which you pay as usual.
quote_plan_change- What moving a service to another plan would cost now and at renewal. Changes nothing.
change_plan- Moves a service to another plan; an amount due makes an invoice.
cancel_service- Cancels a service, at the end of its billing period or immediately, after saying what would happen.
get_payment_methods_link- The client area page where you add or change a payment method.
get_domain_registrar_settings- A domain name's nameservers and whether it is locked against transfers.
set_domain_nameservers- Points a domain name to other nameservers.
set_domain_lock- Locks or unlocks a domain name at its registrar.
list_dns_zones- The DNS zones of a hosting service on Ex2's servers.
get_dns_zone- The records of a DNS zone: MX, SPF, DKIM and DMARC among them.
change_dns_records- Adds, changes and removes DNS records of a zone, in one go (not those carrying the mail of the account's addresses).
export_dns_zone- A DNS zone as a zone file, to keep or move elsewhere.
get_service_ssl- The SSL certificates of a service's sites and when they expire.
get_service_usage- What a service uses of its plan: disk, bandwidth, databases, mailboxes.
get_site_errors- The latest errors of a site, from the web server's log.
get_php_errors- The latest lines of a site's PHP error log.
list_mailboxes- The mailboxes of a hosting service: address, space used and limit.
create_mailbox- Creates a mailbox; its password, made by Ex2, is answered once.
change_mailbox- Gives a mailbox a new password or size limit.
delete_mailbox- Deletes a mailbox and its messages, after a preview.
list_forwarders- The forwarders of a hosting service's domains.
add_forwarder- Sends an address's mail on to another address.
remove_forwarder- Stops a forwarder.
list_wordpress_sites- The WordPress sites of a hosting service, with their versions.
get_wordpress_status- A site's WordPress, plugins and themes, with the updates offered.
update_wordpress- Updates WordPress, plugins or themes as a job, after a copy of the database.
install_wordpress- Installs WordPress on a site whose folder is empty, as a job, with its database; the administrator's password is shown once, or set by the customer where the service holds the account's mail.
list_wordpress_copies- The copies of a WordPress site's database made before an update or a restore.
restore_wordpress_database- Puts a WordPress site's database back as one of its copies was, after a new copy.
list_stagings- The staging copies of your WordPress sites, each with its live site, its address and its database.
create_staging- Copies a WordPress site to a staging subdomain, as a job, with a database of its own, to try changes away from the live site; search engines are asked not to index it. On Ex2's recent servers.
push_staging- Puts a staging copy's files, database or both live, as a job, after a copy of the live database; with the database, what changed on the live site since the copy is lost. On Ex2's recent servers.
delete_staging- Deletes a staging copy's files and database; its subdomain stays.
export_site- Archives a site's folder and WordPress database as a job, to download for a week.
export_account- Archives a whole hosting account as a job (files, databases, DNS zones; never the mail), to move it elsewhere.
list_site_exports- The archives of a hosting service's sites, with their download address.
get_job- Where a job stands, step by step.
list_databases- The databases of a hosting service, with their users.
create_database- Creates a database and its user; the password is answered once.
change_database_password- Gives a database user a new password, answered once.
list_subdomains- The subdomains of a hosting service.
create_subdomain- Creates a subdomain with its folder and DNS record.
list_addon_domains- The addon domains of a hosting service, with their folders.
add_addon_domain- Adds one of your domain names at Ex2 to a hosting service as a site of its own.
list_domain_aliases- The aliases (parked domains) of a hosting service.
add_domain_alias- Makes one of your domain names at Ex2 show a hosting service's main site.
list_ssh_keys- The SSH keys of a hosting service, with their fingerprints.
add_ssh_key- Authorizes a public key to log in to a hosting service over SSH.
remove_ssh_key- Takes an SSH key away from a hosting service.
list_backups- The backups of a hosting service, newest first, and what each holds.
get_backup- The parts of one backup: the home folder, each database, the mail and the others.
backup_now- Makes a backup of a hosting service now, as a job.
restore_backup- Puts files of a hosting service, or one of its databases, back as they were in a backup, as a job.
list_php_versions- The PHP versions installed, and each site's.
set_php_version- Moves a site to another PHP version.
get_php_settings- The PHP settings of a hosting service (memory, upload size, time limit...) and the values allowed.
set_php_settings- Changes PHP settings of a hosting service, for all its sites.
list_cron_jobs- The cron jobs of a hosting service, and what those made through the API run.
add_cron_job- Schedules a PHP script or a call to one of the site's addresses (every 5 minutes at most).
remove_cron_job- Removes a cron job made through the API.
get_mail_authentication- Whether each domain's SPF, DKIM and DMARC are in place.
list_support_departments- The departments of Ex2's support a ticket can go to.
open_ticket- Opens a support ticket in your name, about a service or a domain name, with a note naming the assistant and what it last did.
reply_to_ticket- Adds your reply to one of your tickets. The answers come by email and in the client area.
transfer_domain_out- Prepares a domain name's move to another registrar: unlocks it and emails its transfer code to you, never to the assistant.
Also as an HTTP API for agents and scripts, behind the same sign-in (OAuth 2.1, with this address as the resource): https://api.ex2.com/api/v1/account. Its OpenAPI description lists the endpoints: the account, services, domain names, invoices, tickets, the same actions as the tools, and the audit log of what each connection did. For your own scripts, make an API token on the connected assistants page, ticking only the actions it needs.
You decide
Before you log in, Ex2’s own page names the application and lists what it will read. You log in with your Ex2 client area login, and choose the account if your login manages several.
Your permissions apply
A contact of an account only sees what their client area permissions allow, checked again at every request. Passwords, payment details and ticket messages are never shared.
Disconnect at any time
See the assistants connected to your account and disconnect any of them on the connected assistants page. Access lasts an hour and is renewed only while the connection exists.
The catalogue API
JSON over HTTPS, GET only, open to any origin (CORS). Every answer names its currency; amounts exclude taxes.
| Endpoint | Answer | Try it |
|---|---|---|
GET /api/v1 | What the API offers, its parameters and the product lines with their plan ids. | Try it |
GET /api/v1/plans | Every plan with its prices, first-year discount, features and order link. line=email keeps one product line. | Try it |
GET /api/v1/plans/{id} | One plan, with its specification table. | Try it |
GET /api/v1/compare | Two to ten plans side by side: plans=id1,id2. | Try it |
GET /api/v1/domains/pricing | One-year register, transfer and renewal price per extension: tld=com,ca or all of them. | Try it |
GET /api/v1/domains/availability | Whether domain=… can be registered now, its prices and the cart link. | Try it |
Parameters on every endpoint: currency (CAD, EUR or USD; USD by default) and lang (en or fr; en by default).
The OpenAPI 3.1 description of the API, to import into a custom GPT (Actions), Postman or a code generator:
https://www.ex2.com/api/v1/openapi.jsonExample
The price of a .com, in your currency (a live answer):
curl "https://www.ex2.com/api/v1/domains/pricing?tld=com¤cy=CAD"{
"currency": "CAD",
"period_years": 1,
"order_url": "https://www.ex2.com/clients/cart.php?a=add&domain=register¤cy=6&language=english",
"domains": [
{
"tld": ".com",
"register": 18.9200000000000017053025658242404460906982421875,
"transfer": 18.9200000000000017053025658242404460906982421875,
"renew": 22.07000000000000028421709430404007434844970703125
}
]
}Good to know
No key for the catalogue
The catalogue is public: no key, no account. Your own account needs your Ex2 login, through the sign-in page, and an assistant or a token acts on it only where you ticked a box. Nothing is paid through either: an order or a renewal makes an invoice you pay in the client area.
Live prices
Read from Ex2’s billing system and kept 10 minutes at most (5 for a domain check). Cache them on your side too.
Fair use
Domain availability: 30 checks per 10 minutes per address, 120 through the MCP server. Your account: 120 requests a minute per connection, and limits per hour or per day on actions, given in its OpenAPI description. Over a limit, HTTP 429 with Retry-After. Whether everything works: /api/v1/status.
Stable
Fields are added, never renamed or removed. A breaking change comes as a new version (/api/v2); the old one keeps answering for at least 12 months, with Deprecation and Sunset headers and a notice here. Errors are RFC 9457 problem details.
Two languages, three currencies
Names, features and links in English or French; prices in CAD, EUR or USD, as the product pages show them.
For language models
/llms.txt describes the site and its products for AI agents, and points them to the API and the MCP server.
Questions
About the API and the MCP servers.
Do I need an account or an API key?
Not for the catalogue: the API, the public MCP server and llms.txt are open to all. The account server asks you to sign in with your Ex2 login, and needs no API key either.
Can an assistant order a plan or manage my services through it?
No. Once you connect the account server it can read your services, invoices and tickets, but not order, pay or change anything: it gives you the link to the cart or to the client area instead.
Is a domain shown as available sure to be mine?
Not quite: the check is a live WHOIS lookup, kept 5 minutes. Someone else can register the name in the meantime, and a premium or reserved name can still be refused at checkout.
Are the prices the ones on the site?
Yes: the same billing system and the same first-year discounts as the product pages. Prices exclude taxes.
Which AI assistants work with the MCP server?
Any client that supports remote MCP servers over Streamable HTTP: Claude, Claude Code, ChatGPT, Cursor, VS Code and others. The public server needs no authentication; the account server uses the sign-in these apps support (OAuth).
Something does not work as described?
Open a support ticket with the URL you called and the answer you got.