suno_delete_persona
Permanently deletes a saved artist persona to remove unused or outdated voice profiles. This action is irreversible.
Instructions
Delete a saved artist persona.
Permanently removes a previously created persona. This action cannot be undone.
Use this when:
- You want to remove an unused voice persona
- You need to clean up old personas
- You want to delete a persona you no longer need
Returns:
Confirmation of the deletion.Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| persona_id | Yes | The persona ID to delete. | |
| user_id | No | The user ID for ownership verification (optional). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- tools/persona_tools.py:122-150 (handler)The main handler function for the suno_delete_persona tool. Decorated with @mcp.tool(), it accepts persona_id (required) and user_id (optional), calls client.delete_persona(), and returns the result as JSON.
@mcp.tool() async def suno_delete_persona( persona_id: Annotated[ str, Field(description="The persona ID to delete."), ], user_id: Annotated[ str | None, Field(description="The user ID for ownership verification (optional)."), ] = None, ) -> str: """Delete a saved artist persona. Permanently removes a previously created persona. This action cannot be undone. Use this when: - You want to remove an unused voice persona - You need to clean up old personas - You want to delete a persona you no longer need Returns: Confirmation of the deletion. """ payload: dict = {"persona_id": persona_id} if user_id: payload["user_id"] = user_id result = await client.delete_persona(**payload) return json.dumps(result, ensure_ascii=False, indent=2) - core/client.py:256-277 (helper)The HTTP client method that performs the actual API call. Sends a DELETE request to /suno/persona with persona_id (and optional user_id) as query parameters.
async def delete_persona(self, **kwargs: Any) -> dict[str, Any]: """Delete a persona.""" persona_id = kwargs.get("persona_id", "") logger.info(f"🗑️ Deleting persona: {persona_id}") url = f"{self.base_url}/suno/persona" params = {k: v for k, v in kwargs.items() if v is not None} async with httpx.AsyncClient() as http_client: try: response = await http_client.delete( url, params=params, headers=self._get_headers(), timeout=self.timeout, ) if response.status_code >= 400: self._handle_error_response(response) return response.json() # type: ignore[no-any-return] except SunoError: raise except Exception as e: logger.error(f"❌ Request error: {e}") raise SunoAPIError(message=str(e)) from e - main.py:278-281 (registration)Registration of suno_delete_persona in the tools list within the server card response (used for MCP discovery/handbook registration).
{ "name": "suno_delete_persona", "description": "Delete a saved voice persona", }, - main.py:131-131 (registration)The tool name is printed in the CLI help/tool listing (the 'safe_print' listing of available tools).
safe_print(" - suno_delete_persona") - tools/persona_tools.py:123-131 (schema)The input schema is defined inline via Pydantic Field annotations on the function parameters: persona_id (required str) and user_id (optional str).
async def suno_delete_persona( persona_id: Annotated[ str, Field(description="The persona ID to delete."), ], user_id: Annotated[ str | None, Field(description="The user ID for ownership verification (optional)."), ] = None,