https://www.ctrify.com/mcp
Streamable HTTP endpoint for compatible AI clients. The client sends JSON-RPC over POST and discovers OAuth automatically.
Connect Cursor, ChatGPT and other compatible agents through MCP, or call the same reviewed CTRify operations through a conventional OAuth REST API.
These are service endpoints, not web pages. Configure or call the specific interface as documented below.
https://www.ctrify.com/mcp
Streamable HTTP endpoint for compatible AI clients. The client sends JSON-RPC over POST and discovers OAuth automatically.
https://www.ctrify.com/api/ctrify/v1
Base URL for conventional HTTPS/JSON calls. Append a documented resource path such as /account or /capabilities.
GET /mcp correctly returns HTTP 405 because the MCP transport uses JSON POST, not standalone SSE. GET /api/ctrify/v1 correctly returns HTTP 404 because the base is a namespace, not a resource. Use /openapi.json to inspect the API contract.
Best when a person wants to ask Cursor, ChatGPT or another agent to inspect or operate their CTRify account in natural language.
The agent discovers a small set of safe tools, then searches CTRify's allowlisted operation catalog as needed.
Best for dashboards, scheduled integrations, internal tools and deterministic server or desktop workflows.
The API uses the same permissions, ownership checks, metering, native product behavior and operation catalog as MCP.
Both interfaces act on CTRify's hosted infrastructure. Customers do not install CTRify, PHP, Python or a database on their computer or server.
Use the exact server URL below in a client that supports remote MCP over Streamable HTTP and OAuth:
https://www.ctrify.com/mcp
CTRify publishes OAuth discovery, supports dynamic public-client registration and requires authorization code with PKCE S256. A compatible client should open the CTRify login and consent flow automatically. Do not paste a CTRify password or bearer token into the client configuration.
Add CTRify to the project in .cursor/mcp.json, or use the same entry in Cursor's global MCP configuration:
{
"mcpServers": {
"ctrify": {
"url": "https://www.ctrify.com/mcp"
}
}
}
Cursor Agent CLI users can inspect the connection with cursor-agent mcp list, authenticate with cursor-agent mcp login ctrify, and inspect exposed tools with cursor-agent mcp list-tools ctrify. Cursor's UI and commands may change; see the current Cursor MCP documentation.
https://www.ctrify.com/mcp, and use OAuth authentication.Developer mode availability depends on the ChatGPT account and workspace policy. OpenAI's interface and eligibility can change; verify the current official OpenAI developer-mode documentation.
A compatible client needs Streamable HTTP, OAuth protected-resource discovery, authorization code with PKCE S256, and either dynamic client registration or a previously registered public client. Start with:
| Purpose | URL |
|---|---|
| MCP server | https://www.ctrify.com/mcp |
| Protected-resource metadata | https://www.ctrify.com/.well-known/oauth-protected-resource/mcp |
| Authorization-server metadata | https://www.ctrify.com/.well-known/oauth-authorization-server |
| Dynamic client registration | https://www.ctrify.com/oauth/register |
CTRify exposes a bounded catalog of 504 reviewed operations across 25 product modules without exposing arbitrary PHP methods, SQL, cron controls, filesystem paths or internal credentials.
ctrify_capabilities_search with a specific goal or product module.ctrify_capability_get for one exact operation_id and inspect its arguments, permissions, cost behavior and side effects.ctrify_action_execute with contract-valid arguments. Every mutation also needs a new, stable idempotency_key.The REST API is for applications that want predictable HTTPS/JSON routes instead of an MCP conversation.
Open the complete OpenAPI 3.0 contract →
| Method | Path | Purpose |
|---|---|---|
GET | /openapi.json | Public machine-readable contract; no token or usage charge. |
GET | /account | Authenticated CTRify account snapshot. |
GET | /usage | Activation, included usage and reusable paid points. |
GET | /websites | Paginated list of owned CTRify websites. |
GET | /websites/{site_id} | Status and metrics for one owned website. |
POST | /seo/audits | Read-only SEO opportunity audit. |
GET | /capabilities | Bounded operation-catalog search. Supply a query, module or kind. |
GET | /capabilities/{operation_id} | Exact input contract, permissions, cost and side effects. |
POST | /operations/{operation_id} | Execute one exact allowlisted operation. |
List websites:
curl -sS \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ 'https://www.ctrify.com/api/ctrify/v1/websites?limit=25'
Search the catalog and read the exact contract before executing anything:
curl -sS \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ 'https://www.ctrify.com/api/ctrify/v1/capabilities?query=author&kind=read&limit=10' curl -sS \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ 'https://www.ctrify.com/api/ctrify/v1/capabilities/authors.list'
Execute a read operation:
curl -sS -X POST \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
--data '{"limit":20,"status":"active"}' \
'https://www.ctrify.com/api/ctrify/v1/operations/authors.list'
Execute a mutation with retry protection:
curl -sS -X POST \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: author-create-20260815-0001' \
--data '{"firstname":"Ada","lastname":"Example"}' \
'https://www.ctrify.com/api/ctrify/v1/operations/authors.create'
The JSON body of /operations/{operation_id} contains only that operation's arguments. The caller never sends customer_id; CTRify derives account ownership from the bearer token.
CTRify uses authorization code OAuth with PKCE S256. It supports public desktop, CLI and web clients without a reusable client secret. Access tokens last one hour; rotating refresh tokens last up to 30 days.
Use a maintained OAuth library where possible. The exact sequence is:
Authorization: Bearer …. Rotate the refresh token whenever it is used.curl -sS -X POST \
-H 'Content-Type: application/json' \
--data '{
"client_name":"Your CTRify integration",
"redirect_uris":["http://127.0.0.1:8765/callback"],
"application_type":"native",
"grant_types":["authorization_code","refresh_token"],
"response_types":["code"],
"token_endpoint_auth_method":"none"
}' \
'https://www.ctrify.com/oauth/register'
https://www.ctrify.com/oauth/authorize ?response_type=code &client_id=YOUR_CLIENT_ID &redirect_uri=YOUR_URL_ENCODED_REDIRECT_URI &scope=account%3Aread%20websites%3Aread%20assets%3Aread%20seo%3Aanalyze &state=YOUR_RANDOM_STATE &code_challenge=YOUR_BASE64URL_SHA256_CHALLENGE &code_challenge_method=S256 &resource=https%3A%2F%2Fwww.ctrify.com%2Fmcp
curl -sS -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'client_id=YOUR_CLIENT_ID' \ --data-urlencode 'code=THE_RETURNED_CODE' \ --data-urlencode 'redirect_uri=http://127.0.0.1:8765/callback' \ --data-urlencode 'code_verifier=YOUR_ORIGINAL_PKCE_VERIFIER' \ --data-urlencode 'resource=https://www.ctrify.com/mcp' \ 'https://www.ctrify.com/oauth/token'
curl -sS -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=refresh_token' \ --data-urlencode 'client_id=YOUR_CLIENT_ID' \ --data-urlencode 'refresh_token=YOUR_CURRENT_REFRESH_TOKEN' \ --data-urlencode 'resource=https://www.ctrify.com/mcp' \ 'https://www.ctrify.com/oauth/token'
When a client omits scope, CTRify grants only account:read websites:read assets:read seo:analyze. Any edit, execution, connection, billing, domain, outreach or destructive permission must be requested explicitly and appears on the consent screen.
| Scope | Allows |
|---|---|
account:read | Read account status and setup. |
websites:read | Read owned website inventory and metrics. |
seo:audit | Run the dedicated read-only SEO audit. |
assets:read | Read owned content, campaigns, assets, jobs and reports. |
assets:write | Edit or publish supported owned assets. |
seo:analyze | Run analyses and plans that do not mutate assets. |
seo:execute | Run SEO workflows, queues and native credit-using actions. |
connections:manage | Add, test, update or remove supported connections. |
billing:read | Read plan, credit and invoice information. |
billing:manage | Run explicitly supported billing-management operations. |
domains:manage | Run domain registration, DNS and nameserver workflows. |
outreach:send | Connect delivery providers and send or schedule outreach. |
destructive:execute | Delete, stop or irreversibly roll back supported assets. |
MCP and the REST API are available to active CTRify customers regardless of subscription type. Subscription plans continue to determine the normal price at which the customer buys CTRify credits.
Every successful result includes enforced usage metadata. Use the MCP tool ctrify_mcp_usage_get or API route GET /usage to inspect the current allowance, reusable points and external-access credit consumption.
customer_id.api.php methods, SQL, cron callbacks or filesystem access.REST successes use data and meta. Errors keep a stable machine-readable code and a request ID:
{
"error": {
"code": "invalid_arguments",
"message": "The request or operation arguments are invalid."
},
"request_id": "..."
}
| Status | Meaning |
|---|---|
400 | Malformed request, path or protocol input. |
401 | Missing, expired or invalid bearer token. |
402 | Additional CTRify credits are required for external usage. |
403 | The grant lacks a required permission or access is inactive. |
404 | The resource, owned object or exact route does not exist. |
405 | The route exists but the HTTP method is not supported. |
409 | An idempotency key conflicts with an earlier request. |
422 | Query fields, JSON body or operation arguments do not match the contract. |
429 | A request, heavy-operation or enumeration rate limit was reached. |
503 | CTRify failed closed because metering or a required runtime was unavailable. |
| Response | What it means | Correct action |
|---|---|---|
Standalone SSE is not enabled | A browser or caller sent GET to the MCP endpoint. | Configure https://www.ctrify.com/mcp in a Streamable HTTP MCP client; do not browse to it. |
route_not_found at the API base | The base URL was called without a resource path. | Use /openapi.json, /account, /websites or another documented route. |
Agents, code generators and integration tools should prefer these canonical resources:
| Resource | URL |
|---|---|
| AI-readable index | https://www.ctrify.com/llms.txt |
| Documentation in Markdown | https://www.ctrify.com/developers.md |
| OpenAPI 3.0 contract | https://www.ctrify.com/api/ctrify/v1/openapi.json |
| OAuth protected-resource metadata | https://www.ctrify.com/.well-known/oauth-protected-resource/mcp |
| OAuth authorization-server metadata | https://www.ctrify.com/.well-known/oauth-authorization-server |
Documentation version: 2026-08-15. The live OpenAPI and OAuth metadata are authoritative for route and authorization discovery.