{
  "name": "sugarvet-mcp",
  "version": "v1",
  "protocolVersion": "2024-11-05",
  "baseUrl": "https://ark6.sugarvet.com",
  "endpoint": "/mcp/",
  "scopeNote": "This public Sugarvet MCP surface is intended for registration and registration-related geolocation assistance only.",
  "documentationUrl": "https://ark6.sugarvet.com/.well-known/agent-docs.json",
  "examples": [
    {
      "name": "jsonrpc_register_start_core",
      "description": "Start a core registration over the MCP JSON-RPC transport.",
      "transport": "jsonrpc",
      "path": "/mcp/",
      "method": "POST",
      "payload": {
        "id": 1,
        "jsonrpc": "2.0",
        "method": "tools/call",
        "params": {
          "arguments": {
            "dob": "1990-01-31",
            "email": "user@example.com",
            "personaType": "core",
            "userAgent": "mcp-client"
          },
          "name": "register_start"
        }
      }
    },
    {
      "name": "http_register_start_affiliate",
      "description": "Start an affiliate registration over the direct HTTP endpoint.",
      "transport": "http",
      "path": "/mcp/register/start",
      "method": "POST",
      "payload": {
        "affiliateTrackingCode": "AFF123",
        "dob": "1990-01-01",
        "email": "affiliate@example.com",
        "metadata": {
          "path": "/mcp/register/start"
        },
        "personaType": "affiliate",
        "userAgent": "mcp-client"
      }
    },
    {
      "name": "http_register_complete_core",
      "description": "Complete a verified core registration with registration-ready location fields.",
      "transport": "http",
      "path": "/mcp/register/complete",
      "method": "POST",
      "payload": {
        "form": {
          "cityName": "New York",
          "countryCode": "US",
          "email": "user@example.com",
          "howHeardAboutUs": "search_engine",
          "howHeardAboutUsDetail": "sugar dating app search",
          "latitude": "40.7128",
          "longitude": "-74.0060",
          "password": "Str0ng!Pass",
          "passwordConfirmation": "Str0ng!Pass",
          "personaType": "core",
          "role": "sugarbaby",
          "sex": "female",
          "stateCode": "NY"
        },
        "registrationID": "pending-registration-id",
        "userAgent": "mcp-client"
      }
    }
  ],
  "errors": [
    {
      "code": "invalid_dob",
      "message": "invalid date of birth",
      "cause": "DOB is missing or not in strict YYYY-MM-DD format.",
      "resolution": "Send DOB as a zero-padded date string such as 1990-01-31."
    },
    {
      "code": "underage",
      "message": "must be at least 18 years old",
      "cause": "Core registrations require an adult DOB.",
      "resolution": "Provide a DOB proving the applicant is at least 18 years old."
    },
    {
      "code": "weak_password",
      "message": "password does not meet requirements",
      "cause": "Password is too short or missing uppercase, lowercase, number, or symbol.",
      "resolution": "Use a password with at least 8 characters including upper, lower, number, and symbol, for example Str0ng!Pass."
    },
    {
      "code": "password_mismatch",
      "message": "passwords do not match",
      "cause": "passwordConfirmation differs from password.",
      "resolution": "Send an identical passwordConfirmation value."
    },
    {
      "code": "missing_location",
      "message": "location is required",
      "cause": "Core completion is missing latitude, longitude, cityName, or countryCode.",
      "resolution": "Resolve the location through geo_suggest_locations or geo_reverse_lookup and copy the returned values directly."
    },
    {
      "code": "missing_attribution_source",
      "message": "how did you hear about us is required",
      "cause": "howHeardAboutUs was not provided.",
      "resolution": "Always send howHeardAboutUs and howHeardAboutUsDetail."
    },
    {
      "code": "missing_attribution_detail",
      "message": "attribution detail is required",
      "cause": "Selected attribution source requires custom detail text.",
      "resolution": "Provide howHeardAboutUsDetail, for example sugar dating app search or friend shared a link."
    },
    {
      "code": "invalid_registration_session",
      "message": "invalid or incomplete registration session",
      "cause": "registrationID is missing, unverified, expired, or already completed.",
      "resolution": "Use the pending registration returned by register_start and complete verification before register_complete."
    }
  ],
  "tools": [
    {
      "name": "register_start",
      "description": "Start a Sugarvet registration via MCP. `dob` must use `YYYY-MM-DD`. Supported personas are `core` and `affiliate`.",
      "inputSchema": {
        "properties": {
          "affiliateTrackingCode": {
            "description": "Optional affiliate tracking code to bind attribution during registration.",
            "type": "string"
          },
          "dob": {
            "description": "Date of birth in `YYYY-MM-DD` format, for example `1990-01-31`.",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "email": {
            "description": "Applicant email address.",
            "format": "email",
            "type": "string"
          },
          "ip": {
            "description": "Optional client IP for analytics.",
            "type": "string"
          },
          "metadata": {
            "description": "Optional analytics and routing metadata. Use `affiliateTrackingCode` here again on completion if attribution must persist across steps.",
            "type": "object"
          },
          "personaType": {
            "description": "Registration persona. Only `core` and `affiliate` are accepted.",
            "enum": [
              "core",
              "affiliate"
            ],
            "type": "string"
          },
          "referralUserID": {
            "description": "Optional referring Sugarvet user ID.",
            "type": "string"
          },
          "userAgent": {
            "description": "Optional client user agent string for analytics.",
            "type": "string"
          }
        },
        "required": [
          "personaType",
          "email",
          "dob"
        ],
        "type": "object"
      }
    },
    {
      "name": "register_verify_pending",
      "description": "Verify a pending Sugarvet registration via MCP",
      "inputSchema": {
        "properties": {
          "code": {
            "description": "Verification code delivered by Sugarvet.",
            "type": "string"
          },
          "pendingRegistrationID": {
            "description": "Pending registration ID returned by `register_start`.",
            "type": "string"
          }
        },
        "required": [
          "pendingRegistrationID",
          "code"
        ],
        "type": "object"
      }
    },
    {
      "name": "register_complete",
      "description": "Complete a Sugarvet registration via MCP. Passwords must be at least 8 characters and include upper, lower, number, and symbol. Core registrations require registration-ready location fields.",
      "inputSchema": {
        "properties": {
          "form": {
            "properties": {
              "cityName": {
                "description": "Required for `core`. Use the exact city returned by geo lookup tools when possible.",
                "type": "string"
              },
              "countryCode": {
                "description": "Required for `core`. Two-letter uppercase country code such as `US`.",
                "type": "string"
              },
              "dob": {
                "description": "Required for `core` only when no verified pending registration exists. Format must be `YYYY-MM-DD`. Must represent an adult age 18+.",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              "email": {
                "description": "Applicant email. Must match the pending registration when a verified registration session is used.",
                "format": "email",
                "type": "string"
              },
              "emailConfirmation": {
                "description": "Optional email confirmation. Used when email confirmation is required and no verified pending registration is supplied.",
                "format": "email",
                "type": "string"
              },
              "firstName": {
                "description": "Required for affiliate. Optional for core; defaults are applied if omitted.",
                "type": "string"
              },
              "howHeardAboutUs": {
                "description": "Required attribution source key, for example `search_engine` or `other`.",
                "type": "string"
              },
              "howHeardAboutUsDetail": {
                "description": "Required when the attribution source allows custom text. In practice, clients should always send this field.",
                "type": "string"
              },
              "lastName": {
                "description": "Required for affiliate. Optional for core; defaults are applied if omitted.",
                "type": "string"
              },
              "latitude": {
                "description": "Required for `core`. Decimal latitude string, for example `40.7128`.",
                "type": "string"
              },
              "longitude": {
                "description": "Required for `core`. Decimal longitude string, for example `-74.0060`.",
                "type": "string"
              },
              "password": {
                "description": "Must contain at least one uppercase letter, one lowercase letter, one number, and one symbol.",
                "minLength": 8,
                "type": "string"
              },
              "passwordConfirmation": {
                "description": "Must exactly match `password`.",
                "type": "string"
              },
              "personaType": {
                "description": "Must be `core` or `affiliate`.",
                "enum": [
                  "core",
                  "affiliate"
                ],
                "type": "string"
              },
              "role": {
                "description": "Required for `core`. `sugarbaby` is the default browser value; `sugarprovider` is also accepted.",
                "enum": [
                  "sugarbaby",
                  "sugarprovider"
                ],
                "type": "string"
              },
              "sex": {
                "description": "Required for `core`. Only `male` and `female` are accepted.",
                "enum": [
                  "male",
                  "female"
                ],
                "type": "string"
              },
              "stateCode": {
                "description": "Recommended for `core`. Regional code such as `NY`.",
                "type": "string"
              }
            },
            "required": [
              "email",
              "password",
              "passwordConfirmation",
              "personaType",
              "howHeardAboutUs"
            ],
            "type": "object"
          },
          "ip": {
            "description": "Optional client IP for analytics.",
            "type": "string"
          },
          "metadata": {
            "description": "Optional analytics and routing metadata. Re-send `affiliateTrackingCode` here when continuing an affiliate-attributed flow.",
            "type": "object"
          },
          "registrationID": {
            "description": "Verified registration session ID returned from start/verify steps.",
            "type": "string"
          },
          "userAgent": {
            "description": "Optional client user agent string for analytics.",
            "type": "string"
          }
        },
        "required": [
          "registrationID",
          "form"
        ],
        "type": "object"
      }
    },
    {
      "name": "geo_suggest_locations",
      "description": "Search location suggestions for MCP registration. Use this to get city/state/country plus latitude/longitude values that satisfy core registration requirements.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Optional max suggestions, default 5.",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "query": {
            "description": "User-entered city or region query such as `New York` or `London`.",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      }
    },
    {
      "name": "geo_reverse_lookup",
      "description": "Resolve latitude and longitude into the nearest registration-friendly city/state/country record.",
      "inputSchema": {
        "properties": {
          "latitude": {
            "description": "Decimal latitude string, for example `40.7128`.",
            "type": "string"
          },
          "longitude": {
            "description": "Decimal longitude string, for example `-74.0060`.",
            "type": "string"
          }
        },
        "required": [
          "latitude",
          "longitude"
        ],
        "type": "object"
      }
    }
  ],
  "apiDoc": {
    "initializePath": "/mcp/",
    "methods": [
      "initialize",
      "tools/list",
      "tools/call"
    ],
    "toolNames": [
      "register_start",
      "register_verify_pending",
      "register_complete",
      "geo_suggest_locations",
      "geo_reverse_lookup"
    ]
  }
}
