Bug: [FEATURE]: Add ability to add connectors without any auth details



### Feature Description

Ability to integrate a connector without any auth details. But it need not be used for routing until we get the auth details.

### Possible Implementation

Create a new auth_type, which doesn't need any details and use the disabled field in the mca table to disable it in routing.

### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!
diff --git a/crates/api_models/src/admin.rs b/crates/api_models/src/admin.rs
index 6b9928734ce..efde4a04832 100644
--- a/crates/api_models/src/admin.rs
+++ b/crates/api_models/src/admin.rs
@@ -609,6 +609,9 @@ pub struct MerchantConnectorCreate {
     pub profile_id: Option<String>,
 
     pub pm_auth_config: Option<serde_json::Value>,
+
+    #[schema(value_type = ConnectorStatus, example = "inactive")]
+    pub status: Option<api_enums::ConnectorStatus>,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
@@ -714,6 +717,9 @@ pub struct MerchantConnectorResponse {
     pub applepay_verified_domains: Option<Vec<String>>,
 
     pub pm_auth_config: Option<serde_json::Value>,
+
+    #[schema(value_type = ConnectorStatus, example = "inactive")]
+    pub status: api_enums::ConnectorStatus,
 }
 
 /// Create a new Merchant Connector for the merchant account. The connector could be a payment processor / facilitator / acquirer or specialized services like Fraud / Accounting etc."
@@ -788,6 +794,9 @@ pub struct MerchantConnectorUpdate {
     pub connector_webhook_details: Option<MerchantConnectorWebhookDetails>,
 
     pub pm_auth_config: Option<serde_json::Value>,
+
+    #[schema(value_type = ConnectorStatus, example = "inactive")]
+    pub status: Option<api_enums::ConnectorStatus>,
 }
 
 ///Details of FrmConfigs are mentioned here... it should be passed in payment connector create api call, and stored in merchant_connector_table
diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs
index 8b1437fa892..cf3c398f8f4 100644
--- a/crates/common_enums/src/enums.rs
+++ b/crates/common_enums/src/enums.rs
@@ -1857,3 +1857,25 @@ pub enum ApplePayFlow {
     Simplified,
     Manual,
 }
+
+#[derive(
+    Clone,
+    Copy,
+    Debug,
+    Eq,
+    PartialEq,
+    strum::Display,
+    strum::EnumString,
+    serde::Deserialize,
+    serde::Serialize,
+    ToSchema,
+    Default,
+)]
+#[router_derive::diesel_enum(storage_type = "pg_enum")]
+#[strum(serialize_all = "snake_case")]
+#[serde(rename_all = "snake_case")]
+pub enum ConnectorStatus {
+    #[default]
+    Inactive,
+    Active,
+}
diff --git a/crates/diesel_models/src/enums.rs b/crates/diesel_models/src/enums.rs
index ec021f0f51a..817fee63319 100644
--- a/crates/diesel_models/src/enums.rs
+++ b/crates/diesel_models/src/enums.rs
@@ -3,9 +3,10 @@ pub mod diesel_exports {
     pub use super::{
         DbAttemptStatus as AttemptStatus, DbAuthenticationType as AuthenticationType,
         DbCaptureMethod as CaptureMethod, DbCaptureStatus as CaptureStatus,
-        DbConnectorType as ConnectorType, DbCountryAlpha2 as CountryAlpha2, DbCurrency as Currency,
-        DbDisputeStage as DisputeStage, DbDisputeStatus as DisputeStatus,
-        DbEventClass as EventClass, DbEventObjectType as EventObjectType, DbEventType as EventType,
+        DbConnectorStatus as ConnectorStatus, DbConnectorType as ConnectorType,
+        DbCountryAlpha2 as CountryAlpha2, DbCurrency as Currency, DbDisputeStage as DisputeStage,
+        DbDisputeStatus as DisputeStatus, DbEventClass as EventClass,
+        DbEventObjectType as EventObjectType, DbEventType as EventType,
         DbFraudCheckStatus as FraudCheckStatus, DbFraudCheckType as FraudCheckType,
         DbFutureUsage as FutureUsage, DbIntentStatus as IntentStatus,
         DbMandateStatus as MandateStatus, DbMandateType as MandateType,
diff --git a/crates/diesel_models/src/merchant_connector_account.rs b/crates/diesel_models/src/merchant_connector_account.rs
index a4faa45ce4b..e45ef002626 100644
--- a/crates/diesel_models/src/merchant_connector_account.rs
+++ b/crates/diesel_models/src/merchant_connector_account.rs
@@ -42,6 +42,7 @@ pub struct MerchantConnectorAccount {
     #[diesel(deserialize_as = super::OptionalDieselArray<String>)]
     pub applepay_verified_domains: Option<Vec<String>>,
     pub pm_auth_config: Option<serde_json::Value>,
+    pub status: storage_enums::ConnectorStatus,
 }
 
 #[derive(Clone, Debug, Insertable, router_derive::DebugAsDisplay)]
@@ -70,6 +71,7 @@ pub struct MerchantConnectorAccountNew {
     #[diesel(deserialize_as = super::OptionalDieselArray<String>)]
     pub applepay_verified_domains: Option<Vec<String>>,
     pub pm_auth_config: Option<serde_json::Value>,
+    pub status: storage_enums::ConnectorStatus,
 }
 
 #[derive(Clone, Debug, AsChangeset, router_derive::DebugAsDisplay)]
@@ -93,6 +95,7 @@ pub struct MerchantConnectorAccountUpdateInternal {
     #[diesel(deserialize_as = super::OptionalDieselArray<String>)]
     pub applepay_verified_domains: Option<Vec<String>>,
     pub pm_auth_config: Option<serde_json::Value>,
+    pub status: Option<storage_enums::ConnectorStatus>,
 }
 
 impl MerchantConnectorAccountUpdateInternal {
@@ -115,6 +118,7 @@ impl MerchantConnectorAccountUpdateInternal {
             frm_config: self.frm_config,
             modified_at: self.modified_at.unwrap_or(source.modified_at),
             pm_auth_config: self.pm_auth_config,
+            status: self.status.unwrap_or(source.status),
 
             ..source
         }
diff --git a/crates/diesel_models/src/schema.rs b/crates/diesel_models/src/schema.rs
index e9db5714bed..190a123185e 100644
--- a/crates/diesel_models/src/schema.rs
+++ b/crates/diesel_models/src/schema.rs
@@ -492,6 +492,7 @@ diesel::table! {
         profile_id -> Nullable<Varchar>,
         applepay_verified_domains -> Nullable<Array<Nullable<Text>>>,
         pm_auth_config -> Nullable<Jsonb>,
+        status -> ConnectorStatus,
     }
 }
 
diff --git a/crates/kgraph_utils/benches/evaluation.rs b/crates/kgraph_utils/benches/evaluation.rs
index ecea12203f8..6105dc85d7e 100644
--- a/crates/kgraph_utils/benches/evaluation.rs
+++ b/crates/kgraph_utils/benches/evaluation.rs
@@ -65,6 +65,7 @@ fn build_test_data<'a>(total_enabled: usize, total_pm_types: usize) -> graph::Kn
         profile_id: None,
         applepay_verified_domains: None,
         pm_auth_config: None,
+        status: api_enums::ConnectorStatus::Inactive,
     };
 
     kgraph_utils::mca::make_mca_graph(vec![stripe_account]).expect("Failed graph construction")
diff --git a/crates/kgraph_utils/src/mca.rs b/crates/kgraph_utils/src/mca.rs
index 34babd7a02b..deea51bd880 100644
--- a/crates/kgraph_utils/src/mca.rs
+++ b/crates/kgraph_utils/src/mca.rs
@@ -410,6 +410,7 @@ mod tests {
             profile_id: None,
             applepay_verified_domains: None,
             pm_auth_config: None,
+            status: api_enums::ConnectorStatus::Inactive,
         };
 
         make_mca_graph(vec![stripe_account]).expect("Failed graph construction")
diff --git a/crates/router/src/connector/square/transformers.rs b/crates/router/src/connector/square/transformers.rs
index 54a7c461dbf..dfb49e8e677 100644
--- a/crates/router/src/connector/square/transformers.rs
+++ b/crates/router/src/connector/square/transformers.rs
@@ -334,6 +334,7 @@ impl TryFrom<&types::ConnectorAuthType> for SquareAuthType {
             | types::ConnectorAuthType::SignatureKey { .. }
             | types::ConnectorAuthType::MultiAuthKey { .. }
             | types::ConnectorAuthType::CurrencyAuthKey { .. }
+            | types::ConnectorAuthType::TemporaryAuth { .. }
             | types::ConnectorAuthType::NoKey { .. } => {
                 Err(errors::ConnectorError::FailedToObtainAuthType.into())
             }
diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs
index 39b4749535b..c921a9164cb 100644
--- a/crates/router/src/core/admin.rs
+++ b/crates/router/src/core/admin.rs
@@ -868,6 +868,15 @@ pub async fn create_payment_connector(
         .change_context(errors::ApiErrorResponse::InternalServerError)
         .attach_printable("error updating the merchant account when creating payment connector")?;
 
+    let (connector_status, disabled) = validate_status_and_disabled(
+        req.status,
+        req.disabled,
+        auth,
+        // The validate_status_and_disabled function will use this value only
+        // when the status can be active. So we are passing this as fallback.
+        api_enums::ConnectorStatus::Active,
+    )?;
+
     let merchant_connector_account = domain::MerchantConnectorAccount {
         merchant_id: merchant_id.to_string(),
         connector_type: req.connector_type,
@@ -886,7 +895,7 @@ pub async fn create_payment_connector(
         .attach_printable("Unable to encrypt connector account details")?,
         payment_methods_enabled,
         test_mode: req.test_mode,
-        disabled: req.disabled,
+        disabled,
         metadata: req.metadata,
         frm_configs,
         connector_label: Some(connector_label),
@@ -911,6 +920,7 @@ pub async fn create_payment_connector(
         profile_id: Some(profile_id.clone()),
         applepay_verified_domains: None,
         pm_auth_config: req.pm_auth_config.clone(),
+        status: connector_status,
     };
 
     let mut default_routing_config =
@@ -1083,6 +1093,19 @@ pub async fn update_payment_connector(
 
     let frm_configs = get_frm_config_as_secret(req.frm_configs);
 
+    let auth: types::ConnectorAuthType = req
+        .connector_account_details
+        .clone()
+        .unwrap_or(mca.connector_account_details.clone().into_inner())
+        .parse_value("ConnectorAuthType")
+        .change_context(errors::ApiErrorResponse::InvalidDataFormat {
+            field_name: "connector_account_details".to_string(),
+            expected_format: "auth_type and api_key".to_string(),
+        })?;
+
+    let (connector_status, disabled) =
+        validate_status_and_disabled(req.status, req.disabled, auth, mca.status)?;
+
     let payment_connector = storage::MerchantConnectorAccountUpdate::Update {
         merchant_id: None,
         connector_type: Some(req.connector_type),
@@ -1098,7 +1121,7 @@ pub async fn update_payment_connector(
             .change_context(errors::ApiErrorResponse::InternalServerError)
             .attach_printable("Failed while encrypting data")?,
         test_mode: req.test_mode,
-        disabled: req.disabled,
+        disabled,
         payment_methods_enabled,
         metadata: req.metadata,
         frm_configs,
@@ -1115,6 +1138,7 @@ pub async fn update_payment_connector(
         },
         applepay_verified_domains: None,
         pm_auth_config: req.pm_auth_config,
+        status: Some(connector_status),
     };
 
     let updated_mca = db
@@ -1722,3 +1746,37 @@ pub async fn validate_dummy_connector_enabled(
         Ok(())
     }
 }
+
+pub fn validate_status_and_disabled(
+    status: Option<api_enums::ConnectorStatus>,
+    disabled: Option<bool>,
+    auth: types::ConnectorAuthType,
+    current_status: api_enums::ConnectorStatus,
+) -> RouterResult<(api_enums::ConnectorStatus, Option<bool>)> {
+    let connector_status = match (status, auth) {
+        (Some(common_enums::ConnectorStatus::Active), types::ConnectorAuthType::TemporaryAuth) => {
+            return Err(errors::ApiErrorResponse::InvalidRequestData {
+                message: "Connector status cannot be active when using TemporaryAuth".to_string(),
+            }
+            .into());
+        }
+        (Some(status), _) => status,
+        (None, types::ConnectorAuthType::TemporaryAuth) => common_enums::ConnectorStatus::Inactive,
+        (None, _) => current_status,
+    };
+
+    let disabled = match (disabled, connector_status) {
+        (Some(true), common_enums::ConnectorStatus::Inactive) => {
+            return Err(errors::ApiErrorResponse::InvalidRequestData {
+                message: "Connector cannot be enabled when connector_status is inactive or when using TemporaryAuth"
+                    .to_string(),
+            }
+            .into());
+        }
+        (Some(disabled), _) => Some(disabled),
+        (None, common_enums::ConnectorStatus::Inactive) => Some(true),
+        (None, _) => None,
+    };
+
+    Ok((connector_status, disabled))
+}
diff --git a/crates/router/src/core/verification/utils.rs b/crates/router/src/core/verification/utils.rs
index 433430507fb..56960d3cb48 100644
--- a/crates/router/src/core/verification/utils.rs
+++ b/crates/router/src/core/verification/utils.rs
@@ -60,6 +60,7 @@ pub async fn check_existence_and_add_domain_to_db(
         applepay_verified_domains: Some(already_verified_domains.clone()),
         pm_auth_config: None,
         connector_label: None,
+        status: None,
     };
     state
         .store
diff --git a/crates/router/src/db/merchant_connector_account.rs b/crates/router/src/db/merchant_connector_account.rs
index ecf52531f28..4fbb8f19ccf 100644
--- a/crates/router/src/db/merchant_connector_account.rs
+++ b/crates/router/src/db/merchant_connector_account.rs
@@ -643,6 +643,7 @@ impl MerchantConnectorAccountInterface for MockDb {
             profile_id: t.profile_id,
             applepay_verified_domains: t.applepay_verified_domains,
             pm_auth_config: t.pm_auth_config,
+            status: t.status,
         };
         accounts.push(account.clone());
         account
@@ -839,6 +840,7 @@ mod merchant_connector_account_cache_tests {
             profile_id: Some(profile_id.to_string()),
             applepay_verified_domains: None,
             pm_auth_config: None,
+            status: common_enums::ConnectorStatus::Inactive,
         };
 
         db.insert_merchant_connector_account(mca.clone(), &merchant_key)
diff --git a/crates/router/src/openapi.rs b/crates/router/src/openapi.rs
index 095e1f45f93..04ef90546cf 100644
--- a/crates/router/src/openapi.rs
+++ b/crates/router/src/openapi.rs
@@ -174,6 +174,7 @@ Never share your secret api keys. Keep them guarded and secure.
         api_models::enums::AttemptStatus,
         api_models::enums::CaptureStatus,
         api_models::enums::ReconStatus,
+        api_models::enums::ConnectorStatus,
         api_models::admin::MerchantConnectorCreate,
         api_models::admin::MerchantConnectorUpdate,
         api_models::admin::PrimaryBusinessDetails,
diff --git a/crates/router/src/types.rs b/crates/router/src/types.rs
index 7cf8f6b71fa..ceeb93f6976 100644
--- a/crates/router/src/types.rs
+++ b/crates/router/src/types.rs
@@ -900,6 +900,7 @@ pub struct ResponseRouterData<Flow, R, Request, Response> {
 #[derive(Default, Debug, Clone, serde::Deserialize)]
 #[serde(tag = "auth_type")]
 pub enum ConnectorAuthType {
+    TemporaryAuth,
     HeaderKey {
         api_key: Secret<String>,
     },
diff --git a/crates/router/src/types/domain/merchant_connector_account.rs b/crates/router/src/types/domain/merchant_connector_account.rs
index 58c2e018316..c84abbefc38 100644
--- a/crates/router/src/types/domain/merchant_connector_account.rs
+++ b/crates/router/src/types/domain/merchant_connector_account.rs
@@ -35,6 +35,7 @@ pub struct MerchantConnectorAccount {
     pub profile_id: Option<String>,
     pub applepay_verified_domains: Option<Vec<String>>,
     pub pm_auth_config: Option<serde_json::Value>,
+    pub status: enums::ConnectorStatus,
 }
 
 #[derive(Debug)]
@@ -54,6 +55,7 @@ pub enum MerchantConnectorAccountUpdate {
         applepay_verified_domains: Option<Vec<String>>,
         pm_auth_config: Option<serde_json::Value>,
         connector_label: Option<String>,
+        status: Option<enums::ConnectorStatus>,
     },
 }
 
@@ -89,6 +91,7 @@ impl behaviour::Conversion for MerchantConnectorAccount {
                 profile_id: self.profile_id,
                 applepay_verified_domains: self.applepay_verified_domains,
                 pm_auth_config: self.pm_auth_config,
+                status: self.status,
             },
         )
     }
@@ -128,6 +131,7 @@ impl behaviour::Conversion for MerchantConnectorAccount {
             profile_id: other.profile_id,
             applepay_verified_domains: other.applepay_verified_domains,
             pm_auth_config: other.pm_auth_config,
+            status: other.status,
         })
     }
 
@@ -155,6 +159,7 @@ impl behaviour::Conversion for MerchantConnectorAccount {
             profile_id: self.profile_id,
             applepay_verified_domains: self.applepay_verified_domains,
             pm_auth_config: self.pm_auth_config,
+            status: self.status,
         })
     }
 }
@@ -177,6 +182,7 @@ impl From<MerchantConnectorAccountUpdate> for MerchantConnectorAccountUpdateInte
                 applepay_verified_domains,
                 pm_auth_config,
                 connector_label,
+                status,
             } => Self {
                 merchant_id,
                 connector_type,
@@ -194,6 +200,7 @@ impl From<MerchantConnectorAccountUpdate> for MerchantConnectorAccountUpdateInte
                 applepay_verified_domains,
                 pm_auth_config,
                 connector_label,
+                status,
             },
         }
     }
diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs
index 3ffba5aff50..2b7ea86cf51 100644
--- a/crates/router/src/types/transformers.rs
+++ b/crates/router/src/types/transformers.rs
@@ -852,6 +852,7 @@ impl TryFrom<domain::MerchantConnectorAccount> for api_models::admin::MerchantCo
             profile_id: item.profile_id,
             applepay_verified_domains: item.applepay_verified_domains,
             pm_auth_config: item.pm_auth_config,
+            status: item.status,
         })
     }
 }
diff --git a/migrations/2023-11-12-131143_connector-status-column/down.sql b/migrations/2023-11-12-131143_connector-status-column/down.sql
new file mode 100644
index 00000000000..9463f4d7713
--- /dev/null
+++ b/migrations/2023-11-12-131143_connector-status-column/down.sql
@@ -0,0 +1,3 @@
+-- This file should undo anything in `up.sql`
+ALTER TABLE merchant_connector_account DROP COLUMN IF EXISTS status;
+DROP TYPE IF EXISTS "ConnectorStatus";
diff --git a/migrations/2023-11-12-131143_connector-status-column/up.sql b/migrations/2023-11-12-131143_connector-status-column/up.sql
new file mode 100644
index 00000000000..7a992d142d6
--- /dev/null
+++ b/migrations/2023-11-12-131143_connector-status-column/up.sql
@@ -0,0 +1,11 @@
+-- Your SQL goes here
+CREATE TYPE "ConnectorStatus" AS ENUM ('active', 'inactive');
+
+ALTER TABLE merchant_connector_account
+ADD COLUMN status "ConnectorStatus";
+
+UPDATE merchant_connector_account SET status='active';
+
+ALTER TABLE merchant_connector_account
+ALTER COLUMN status SET NOT NULL,
+ALTER COLUMN status SET DEFAULT 'inactive';
diff --git a/openapi/openapi_spec.json b/openapi/openapi_spec.json
index be66a1bff92..7d94f13dd12 100644
--- a/openapi/openapi_spec.json
+++ b/openapi/openapi_spec.json
@@ -4147,6 +4147,13 @@
           }
         }
       },
+      "ConnectorStatus": {
+        "type": "string",
+        "enum": [
+          "inactive",
+          "active"
+        ]
+      },
       "ConnectorType": {
         "type": "string",
         "enum": [
@@ -6871,7 +6878,8 @@
         "description": "Create a new Merchant Connector for the merchant account. The connector could be a payment processor / facilitator / acquirer or specialized services like Fraud / Accounting etc.\"",
         "required": [
           "connector_type",
-          "connector_name"
+          "connector_name",
+          "status"
         ],
         "properties": {
           "connector_type": {
@@ -7002,6 +7010,9 @@
           },
           "pm_auth_config": {
             "nullable": true
+          },
+          "status": {
+            "$ref": "#/components/schemas/ConnectorStatus"
           }
         }
       },
@@ -7087,7 +7098,8 @@
         "required": [
           "connector_type",
           "connector_name",
-          "merchant_connector_id"
+          "merchant_connector_id",
+          "status"
         ],
         "properties": {
           "connector_type": {
@@ -7230,6 +7242,9 @@
           },
           "pm_auth_config": {
             "nullable": true
+          },
+          "status": {
+            "$ref": "#/components/schemas/ConnectorStatus"
           }
         }
       },
@@ -7237,7 +7252,8 @@
         "type": "object",
         "description": "Create a new Merchant Connector for the merchant account. The connector could be a payment processor / facilitator / acquirer or specialized services like Fraud / Accounting etc.\"",
         "required": [
-          "connector_type"
+          "connector_type",
+          "status"
         ],
         "properties": {
           "connector_type": {
@@ -7335,6 +7351,9 @@
           },
           "pm_auth_config": {
             "nullable": true
+          },
+          "status": {
+            "$ref": "#/components/schemas/ConnectorStatus"
           }
         }
       },

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
Add a new `auth_type` called `TemporaryAuth` which describes that auth details are not yet received. When using this `auth_type` the connector status will be `inactive` and mca will be disabled.

### Additional Changes

- [x] This PR modifies the API contract
- [x] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->
To support connector integration without auth details.
Closes #2895 

## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
Postman.
Payment Connector - Create and Payment Connector - Update now supports a new auth type called `TemporaryAuth` and a new field `status`.
```
curl --location 'http://localhost:8080/account/merchant_1700133263/connectors' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: test_admin' \
--data '{
  "connector_type": "fiz_operations",
  "connector_name": "paypal",
  "connector_account_details": {
    "auth_type": "TemporaryAuth"
  },
  "status": "inactive",
  "disabled": true
}'
```
If `TemporaryAuth` is used in the request, the status field cannot be `active` and disabled cannot be `false`. This is applied for update mca as well. If a connector is inactive it cannot be enabled without changing the status to active.

There are the following error messages that will be thrown if incorrect request is used.
| auth_type     | status   | disabled | error_message                                                                             |
|---------------|----------|----------|-------------------------------------------------------------------------------------------|
| TemoraryAuth  | active   | *        | Connector status cannot be active when using TemporaryAuth                                |
| TemporaryAuth | inactive | false    | Connector cannot be enabled when connector_status is inactive or when using TemporaryAuth |
| ValidAuth     | inactive | false    | Connector cannot be enabled when connector_status is inactive or when using TemporaryAuth |

If all the fields are passed correctly you will a normal mca response.

## Checklist
<!-- Put an `x` in the boxes that apply -->

- [x] I formatted the code `cargo +nightly fmt --all`
- [x] I addressed lints thrown by `cargo clippy`
- [x] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
- [ ] I added a [CHANGELOG](/CHANGELOG.md) entry if applicable
