Product Admin by Nova (CIVAI)

I manage your Nova products, create/update/delete, payment & logistics config, icons, webhook secre…

Should I use this

Quality & Safety

A
Description quality
88%
Schema completeness
74%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (6)

  • LOWTool 'get_webhook_secret' description lacks action verbin get_webhook_secret
  • LOWTool 'rotate_webhook_secret' description lacks action verbin rotate_webhook_secret
  • LOWTool 'assign_bank_credit' description lacks action verbin assign_bank_credit
  • LOWTool 'dismiss_bank_credit' description lacks action verbin dismiss_bank_credit
  • LOWTool 'list_audience_resolver_projects' name length outside 3-30 rangein list_audience_resolver_projects
  • LOWTool 'list_audience_resolver_calendars' name length outside 3-30 rangein list_audience_resolver_calendars

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,653Tokens (tool definitions)
~822 BTypical response size
Significant attention impact (2.07% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "product-admin": {
      "url": "https://nova.civai.co/mcp/agents/product-admin"
    }
  }
}

Remote endpoints

https://nova.civai.co/mcp/agents/product-adminstreamable-http

What it can do

Tool inventory

Tools (30)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_products

List all products for the signed-in owner.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_product(product_id)

Return full product detail including payment/logistics/mobile-push config.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id"
  ]
}
🟡list_twitter_accounts

List connected X/Twitter accounts available to use as an x_post publish destination.

Input Schema

{
  "type": "object",
  "properties": {}
}
⚪connect_audience_resolver(product_id, publisher_token)

Connect an Audience Resolver publisher token to this product, so it can push content to an AR project's calendar. The token must be minted by hand from the Audience Resolver dashboard first — there's no way to generate one here.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "publisher_token": {
      "type": "string"
    }
  },
  "required": [
    "product_id",
    "publisher_token"
  ]
}
🟢list_audience_resolver_projects(product_id)

List the Audience Resolver projects reachable by this product's connected publisher token.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id"
  ]
}
🟢list_audience_resolver_calendars(product_id, project_id)

List the content calendars within an Audience Resolver project.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "project_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id",
    "project_id"
  ]
}
🟡create_product(id, name, site_url, default_country, content_enabled, ...)

Create a new product.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Lowercase product id (letters, digits, hyphen, underscore)."
    },
    "name": {
      "type": "string"
    },
    "site_url": {
      "type": "string"
    },
    "default_country": {
      "type": "string"
    },
    "content_enabled": {
      "type": "boolean",
      "description": "Enable/disable the content pipeline for this product."
    },
    "pipeline_type": {
      "type": "string",
      "enum": [
        "seo_intent",
        "reward_intent"
      ]
    },
    "opportunity_system": {
      "type": "string",
      "description": "System context for generation prompts: what this product is, in the product's own voice."
    },
    "opportunity_rules": {
      "type": "string",
      "description": "What counts as a worthwhile trend/opportunity for this product — used when picking seeds and expanding opportunities."
    },
    "article_intent_rules": {
      "type": "string",
      "description": "Structure/intent guidance for generated articles."
    },
    "intent_creative_direction": {
      "type": "string",
      "description": "Free-form style/voice guidance for generated content."
    },
    "seed_picker_rules": {
      "type": "string",
      "description": "Guidance for the seed-selection step specifically."
    },
    "content_posting_frequency": {
      "type": "string",
      "enum": [
        "daily",
        "3x_week",
        "weekly",
        "off"
      ],
      "description": "How often this product's connected X account posts autonomous trend tweets. Defaults to 3x_week (Mon/Wed/Fri)."
    },
    "publish_destinations": {
      "type": "array",
      "description": "Where generated content publishes to. Each entry is one of {type: 'webhook', webhook_url, webhook_secret?}, {type: 'x_post', twitter_account_id}, or {type: 'ar_calendar', audience_resolver_project_id, audience_resolver_calendar_id} (requires audience_resolver_publisher_token to be connected first).",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "webhook",
              "x_post",
              "ar_calendar"
            ]
          },
          "webhook_url": {
            "type": "string"
          },
          "webhook_secret": {
            "type": "string"
          },
          "twitter_account_id": {
            "type": "string"
          },
          "audience_resolver_project_id": {
            "type": "string"
          },
          "audience_resolver_calendar_id": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ]
      }
    },
    "audience_resolver_publisher_token": {
      "type": "string",
      "description": "Publisher JWT minted from the Audience Resolver dashboard, connecting this product to an AR account so content can be pushed to its calendars. Set via connect_audience_resolver, not directly."
    },
    "payment_config": {
      "type": "object"
    },
    "logistics_config": {
      "type": "object"
    },
    "mobile_push": {
      "type": "object"
    }
  },
  "required": [
    "id",
    "name",
    "site_url"
  ]
}
🟡update_product(id, name, site_url, default_country, content_enabled, ...)

Update product fields (partial patch — only send fields to change).

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Lowercase product id (letters, digits, hyphen, underscore)."
    },
    "name": {
      "type": "string"
    },
    "site_url": {
      "type": "string"
    },
    "default_country": {
      "type": "string"
    },
    "content_enabled": {
      "type": "boolean",
      "description": "Enable/disable the content pipeline for this product."
    },
    "pipeline_type": {
      "type": "string",
      "enum": [
        "seo_intent",
        "reward_intent"
      ]
    },
    "opportunity_system": {
      "type": "string",
      "description": "System context for generation prompts: what this product is, in the product's own voice."
    },
    "opportunity_rules": {
      "type": "string",
      "description": "What counts as a worthwhile trend/opportunity for this product — used when picking seeds and expanding opportunities."
    },
    "article_intent_rules": {
      "type": "string",
      "description": "Structure/intent guidance for generated articles."
    },
    "intent_creative_direction": {
      "type": "string",
      "description": "Free-form style/voice guidance for generated content."
    },
    "seed_picker_rules": {
      "type": "string",
      "description": "Guidance for the seed-selection step specifically."
    },
    "content_posting_frequency": {
      "type": "string",
      "enum": [
        "daily",
        "3x_week",
        "weekly",
        "off"
      ],
      "description": "How often this product's connected X account posts autonomous trend tweets. Defaults to 3x_week (Mon/Wed/Fri)."
    },
    "publish_destinations": {
      "type": "array",
      "description": "Where generated content publishes to. Each entry is one of {type: 'webhook', webhook_url, webhook_secret?}, {type: 'x_post', twitter_account_id}, or {type: 'ar_calendar', audience_resolver_project_id, audience_resolver_calendar_id} (requires audience_resolver_publisher_token to be connected first).",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "webhook",
              "x_post",
              "ar_calendar"
            ]
          },
          "webhook_url": {
            "type": "string"
          },
          "webhook_secret": {
            "type": "string"
          },
          "twitter_account_id": {
            "type": "string"
          },
          "audience_resolver_project_id": {
            "type": "string"
          },
          "audience_resolver_calendar_id": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ]
      }
    },
    "audience_resolver_publisher_token": {
      "type": "string",
      "description": "Publisher JWT minted from the Audience Resolver dashboard, connecting this product to an AR account so content can be pushed to its calendars. Set via connect_audience_resolver, not directly."
    },
    "payment_config": {
      "type": "object"
    },
    "logistics_config": {
      "type": "object"
    },
    "mobile_push": {
      "type": "object"
    }
  },
  "required": [
    "product_id"
  ]
}
🔴delete_product(product_id)

Permanently delete a product.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id"
  ]
}
🟡set_payment_config(product_id, payment_config)

Set/merge the product's payment_config (enable payments, catalog_mode, skus, discount, custom_fields, webhook URLs, return URLs, sandbox).

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "payment_config": {
      "type": "object"
    }
  },
  "required": [
    "product_id",
    "payment_config"
  ]
}
🟡set_logistics_config(product_id, logistics_config)

Set the product's logistics_config.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "logistics_config": {
      "type": "object"
    }
  },
  "required": [
    "product_id",
    "logistics_config"
  ]
}
🟡set_mobile_push_config(product_id, mobile_push)

Set the product's mobile_push config.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "mobile_push": {
      "type": "object"
    }
  },
  "required": [
    "product_id",
    "mobile_push"
  ]
}
🟡upload_product_icon(product_id, image_base64, content_type)

Upload a product icon/logo (base64-encoded JPEG/PNG/WebP, max 2MB).

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "image_base64": {
      "type": "string"
    },
    "content_type": {
      "type": "string",
      "enum": [
        "image/jpeg",
        "image/jpg",
        "image/png",
        "image/webp"
      ]
    }
  },
  "required": [
    "product_id",
    "image_base64",
    "content_type"
  ]
}
🔴remove_product_icon(product_id)

Remove the product's icon/logo.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id"
  ]
}
🟢get_webhook_secret(product_id)

Return the product's fulfillment webhook signing secret.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id"
  ]
}
⚪rotate_webhook_secret(product_id)

Rotate the product's fulfillment webhook signing secret.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id"
  ]
}
🟢get_onboarding_status(product_id)

Bank-transfer onboarding status (merchant bank, alert inbox, auto-approve).

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    }
  }
}
🟡save_merchant_bank(bank_name, account_name, account_number, auto_approve_enabled, product_id, ...)

Save the merchant bank account used to receive bank-transfer payments.

Input Schema

{
  "type": "object",
  "properties": {
    "bank_name": {
      "type": "string"
    },
    "account_name": {
      "type": "string"
    },
    "account_number": {
      "type": "string",
      "description": "10-digit NUBAN account number."
    },
    "auto_approve_enabled": {
      "type": "boolean"
    },
    "product_id": {
      "type": "string"
    },
    "alert_source_emails": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "bank_name",
    "account_name",
    "account_number"
  ]
}
🟡save_alert_sources(alert_source_emails)

Save the allowlist of bank-alert source email addresses.

Input Schema

{
  "type": "object",
  "properties": {
    "alert_source_emails": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "alert_source_emails"
  ]
}
⚪rotate_inbox

Rotate the bank-alert forwarding inbox address.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢list_bank_alert_guides

List supported banks and their alert-forwarding setup guides.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢test_parse_bank_alert(from_addr, subject, text, html)

Test-parse a bank alert email (debug the alert parser).

Input Schema

{
  "type": "object",
  "properties": {
    "from_addr": {
      "type": "string"
    },
    "subject": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "html": {
      "type": "string"
    }
  },
  "required": [
    "from_addr",
    "text"
  ]
}
🟢list_deposits(product_id, status, limit, offset)

List payment deposits for a product.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "approved",
        "rejected",
        "expired"
      ]
    },
    "limit": {
      "type": "integer"
    },
    "offset": {
      "type": "integer"
    }
  },
  "required": [
    "product_id"
  ]
}
⚪approve_deposit(product_id, deposit_id)

Approve a pending/expired deposit and run fulfillment.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "deposit_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id",
    "deposit_id"
  ]
}
⚪reject_deposit(product_id, deposit_id, reason)

Reject a deposit.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "deposit_id": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "product_id",
    "deposit_id"
  ]
}
🟡set_deposit_refund_status(product_id, deposit_id, refund_status, note)

Set the refund_status on an approved deposit.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "deposit_id": {
      "type": "string"
    },
    "refund_status": {
      "type": "string"
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "product_id",
    "deposit_id",
    "refund_status"
  ]
}
⚪resend_deposit_fulfillment(product_id, deposit_id)

Resend/retry fulfillment for an approved deposit.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string"
    },
    "deposit_id": {
      "type": "string"
    }
  },
  "required": [
    "product_id",
    "deposit_id"
  ]
}
🟢list_bank_credits(status)

List unmatched/review bank credits for reconciliation.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "unmatched",
        "review",
        "matched",
        "dismissed"
      ]
    }
  }
}
⚪assign_bank_credit(credit_id, deposit_id)

Assign an unmatched bank credit to a pending deposit.

Input Schema

{
  "type": "object",
  "properties": {
    "credit_id": {
      "type": "string"
    },
    "deposit_id": {
      "type": "string"
    }
  },
  "required": [
    "credit_id",
    "deposit_id"
  ]
}
⚪dismiss_bank_credit(credit_id)

Dismiss a bank credit as not a sale.

Input Schema

{
  "type": "object",
  "properties": {
    "credit_id": {
      "type": "string"
    }
  },
  "required": [
    "credit_id"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded30 tools