{
  "schemaVersion": "1.0",
  "item": {
    "slug": "mantis-manager",
    "name": "MantisBT Manager",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/willykinfoussia/mantis-manager",
    "canonicalUrl": "https://clawhub.ai/willykinfoussia/mantis-manager",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/mantis-manager",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mantis-manager",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/mantis-manager"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/mantis-manager",
    "agentPageUrl": "https://openagent3.xyz/skills/mantis-manager/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mantis-manager/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mantis-manager/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Base URL Resolution",
        "body": "Base URL precedence (highest to lowest):\n\ntemporary_base_url — one-time use URL for specific operations\nuser_base_url — user-defined URL for the current session\nMANTIS_BASE_URL — environment default URL\n\nThis allows you to:\n\nSwitch between multiple Mantis instances dynamically\nTest against staging/production environments\nWork with different client instances without changing config\n\nExample:\n\n// Default: uses MANTIS_BASE_URL from environment\nGET {{resolved_base_url}}/issues\n\n// Override for one operation:\ntemporary_base_url = \"https://mantis-staging.example.com/api/rest\"\nGET {{resolved_base_url}}/issues\n\n// Override for session:\nuser_base_url = \"https://client-mantis.example.com/api/rest\"\nGET {{resolved_base_url}}/issues"
      },
      {
        "title": "Token Resolution",
        "body": "Token precedence (highest to lowest):\n\ntemporary_token — one-time use token for specific operations\nuser_token — user-defined token for the current session\nMANTIS_API_TOKEN — environment default token\n\nEnvironment variables are handled via standard OpenClaw metadata: requires.env declares required variables (MANTIS_BASE_URL, MANTIS_API_TOKEN). Any other environment variables you use for Mantis should be treated as normal process env vars and are not modeled as special OpenClaw metadata fields."
      },
      {
        "title": "Authentication Headers",
        "body": "All API requests must include:\n\nAuthorization: Bearer {{resolved_token}}\nContent-Type: application/json\n\nNote: The {{resolved_base_url}} and {{resolved_token}} are determined at runtime based on the precedence rules above."
      },
      {
        "title": "📌 Notation Used in Examples",
        "body": "Throughout this documentation:\n\n{{MANTIS_BASE_URL}} refers to the resolved base URL (could be temporary_base_url, user_base_url, or env MANTIS_BASE_URL)\n{{resolved_token}} refers to the resolved token (could be temporary_token, user_token, or env MANTIS_API_TOKEN)\nAll endpoints use the pattern: {{MANTIS_BASE_URL}}/resource/path\n\nImportant: Always use the resolution logic to determine the actual URL and token at runtime."
      },
      {
        "title": "🔄 Context Management",
        "body": "The temporary_* and user_* names here are runtime context variables used by the skill logic, not OpenClaw metadata fields. OpenClaw does not define an optional.context metadata key; context is resolved dynamically at runtime as described below."
      },
      {
        "title": "Setting Temporary Values (One-Time Use)",
        "body": "User queries:\n\n\"Use https://staging.mantis.com/api/rest for this request\"\n\"Connect to production instance for this operation\"\n\"Use token ABC123 just this once\"\n\nAction:\n\nSet temporary_base_url = \"https://staging.mantis.com/api/rest\"\nSet temporary_token = \"ABC123\"\n... perform operation ...\nClear temporary_base_url\nClear temporary_token\n\nBehavior: Temporary values are automatically cleared after one use."
      },
      {
        "title": "Setting Session Values (Current Session)",
        "body": "User queries:\n\n\"Switch to client XYZ's Mantis instance\"\n\"Use my personal API token for all requests\"\n\"Connect to staging environment\"\n\nAction:\n\nSet user_base_url = \"https://client-xyz.mantis.com/api/rest\"\nSet user_token = \"personal_token_123\"\n... perform multiple operations ...\n// Values persist for the entire session\n\nBehavior: Session values persist until explicitly cleared or session ends."
      },
      {
        "title": "Clearing Context Values",
        "body": "User queries:\n\n\"Reset to default Mantis instance\"\n\"Clear my custom token\"\n\"Go back to environment defaults\"\n\nAction:\n\nClear user_base_url\nClear user_token\n// Now uses MANTIS_BASE_URL and MANTIS_API_TOKEN from environment"
      },
      {
        "title": "Viewing Current Context",
        "body": "User queries:\n\n\"What Mantis instance am I connected to?\"\n\"Show current API configuration\"\n\"Which token am I using?\"\n\nResponse should show:\n\nCurrent Context:\n- Base URL: https://client-xyz.mantis.com/api/rest (user_base_url)\n- Token: user_t***123 (user_token)\n- Fallback Base URL: https://default.mantis.com/api/rest (MANTIS_BASE_URL)\n- Fallback Token: env_t***789 (MANTIS_API_TOKEN)"
      },
      {
        "title": "Use Cases",
        "body": "Multi-Instance Management\n\n// Check production issue\nSet temporary_base_url = \"https://prod.mantis.com/api/rest\"\nGet issue 123\n\n// Check staging issue  \nSet temporary_base_url = \"https://staging.mantis.com/api/rest\"\nGet issue 123\n\n// Compare results\n\nClient Switching\n\n// Switch to Client A\nSet user_base_url = \"https://clienta.mantis.com/api/rest\"\nSet user_token = \"clienta_token\"\nList all projects\nGet issues for project 5\n\n// Switch to Client B\nSet user_base_url = \"https://clientb.mantis.com/api/rest\"\nSet user_token = \"clientb_token\"\nList all projects\nGet issues for project 3\n\nAdmin Operations with Impersonation\n\n// Connect to main instance as admin\nSet user_token = \"admin_token\"\n\n// Perform operation as specific user\nSet temporary header: X-Impersonate-User = \"john.doe\"\nGet user issues\n\n// Back to admin\nClear temporary header"
      },
      {
        "title": "List Issues",
        "body": "User queries:\n\n\"List all issues\"\n\"Get issues for project 5\"\n\"Get issues matching filter 10\"\n\"Show issues assigned to me\"\n\"Get unassigned issues\"\n\nActions:\n\nGET {{MANTIS_BASE_URL}}/issues\n\nQuery Parameters:\n\npage_size — number of issues per page (default: 50)\npage — page number (1-indexed)\nfilter_id — ID of saved filter to apply\nproject_id — filter by specific project\nselect — comma-separated fields to return (e.g., \"id,summary,status\")\n\nSpecial endpoints:\n\nGET {{MANTIS_BASE_URL}}/issues?filter_id={{filter_id}}\nGET {{MANTIS_BASE_URL}}/projects/{{project_id}}/issues"
      },
      {
        "title": "Get Single Issue",
        "body": "User queries:\n\n\"Show issue 123\"\n\"Get details for bug 456\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/issues/{{id}}"
      },
      {
        "title": "Create Issue",
        "body": "User queries:\n\n\"Create issue with summary 'Login bug' and description 'Cannot login'\"\n\"Create bug in project 5 with priority high\"\n\"Create issue with attachments\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues\n\nMinimal body:\n\n{\n  \"summary\": \"Issue summary\",\n  \"description\": \"Detailed description\",\n  \"category\": {\"name\": \"General\"},\n  \"project\": {\"id\": 1}\n}\n\nFull body (optional fields):\n\n{\n  \"summary\": \"Issue summary\",\n  \"description\": \"Detailed description\",\n  \"steps_to_reproduce\": \"1. Do this\\n2. Do that\",\n  \"additional_information\": \"Extra info\",\n  \"category\": {\"id\": 1, \"name\": \"General\"},\n  \"project\": {\"id\": 1},\n  \"priority\": {\"id\": 30, \"name\": \"normal\"},\n  \"severity\": {\"id\": 50, \"name\": \"minor\"},\n  \"status\": {\"id\": 10, \"name\": \"new\"},\n  \"reproducibility\": {\"id\": 10, \"name\": \"always\"},\n  \"handler\": {\"id\": 5},\n  \"tags\": [{\"name\": \"bug\"}, {\"name\": \"ui\"}],\n  \"custom_fields\": [{\"field\": {\"id\": 1}, \"value\": \"custom value\"}],\n  \"due_date\": \"2026-12-31T23:59:59+00:00\",\n  \"version\": {\"name\": \"1.0\"},\n  \"target_version\": {\"name\": \"2.0\"}\n}\n\nCreate with attachments:\n\nPOST {{MANTIS_BASE_URL}}/issues\n\nInclude files array in body with base64-encoded content."
      },
      {
        "title": "Update Issue",
        "body": "User queries:\n\n\"Update issue 123 status to resolved\"\n\"Change priority of bug 456 to high\"\n\"Assign issue 789 to user 10\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/issues/{{id}}\n\nExample body:\n\n{\n  \"status\": {\"name\": \"resolved\"},\n  \"handler\": {\"id\": 10},\n  \"priority\": {\"name\": \"high\"},\n  \"summary\": \"Updated summary\"\n}"
      },
      {
        "title": "Delete Issue",
        "body": "User queries:\n\n\"Delete issue 123\"\n\"Remove bug 456\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/issues/{{id}}"
      },
      {
        "title": "Monitor/Unmonitor Issue",
        "body": "User queries:\n\n\"Monitor issue 123\"\n\"Stop monitoring bug 456\"\n\"Add user 10 as monitor on issue 789\"\n\nActions:\n\nPOST   {{MANTIS_BASE_URL}}/issues/{{id}}/monitors\nDELETE {{MANTIS_BASE_URL}}/issues/{{id}}/monitors\n\nBody (for specific user):\n\n{\n  \"user\": {\"id\": 10}\n}"
      },
      {
        "title": "Attach/Detach Tags",
        "body": "User queries:\n\n\"Add tag 'critical' to issue 123\"\n\"Remove tag 'bug' from issue 456\"\n\nActions:\n\nPOST   {{MANTIS_BASE_URL}}/issues/{{id}}/tags\nPATCH  {{MANTIS_BASE_URL}}/issues/{{id}}/tags\nDELETE {{MANTIS_BASE_URL}}/issues/{{id}}/tags\n\nBody:\n\n{\n  \"tags\": [\n    {\"name\": \"bug\"},\n    {\"name\": \"critical\"}\n  ]\n}"
      },
      {
        "title": "Add Issue Relationship",
        "body": "User queries:\n\n\"Link issue 123 to issue 456 as duplicate\"\n\"Add parent relationship from 789 to 101\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues/{{id}}/relationships\n\nBody:\n\n{\n  \"type\": {\"name\": \"duplicate-of\"},\n  \"target_issue\": {\"id\": 456}\n}\n\nRelationship types:\n\nduplicate-of\nrelated-to\nparent-of\nchild-of\nhas-duplicate"
      },
      {
        "title": "Attach Files",
        "body": "User queries:\n\n\"Attach file to issue 123\"\n\"Add screenshot to bug 456\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues/{{id}}/files\n\nBody:\n\n{\n  \"files\": [\n    {\n      \"name\": \"screenshot.png\",\n      \"content\": \"base64_encoded_content_here\"\n    }\n  ]\n}"
      },
      {
        "title": "Delete Attachment",
        "body": "User queries:\n\n\"Delete attachment 789 from issue 123\"\n\"Remove file 101 from bug 456\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/issues/{{issue_id}}/files/{{file_id}}"
      },
      {
        "title": "Issue Notes",
        "body": "Add Note\n\nUser queries:\n\n\"Add note to issue 123: 'This is fixed now'\"\n\"Add note with time tracking 2 hours\"\n\"Add private note to bug 456\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues/{{id}}/notes\n\nBody:\n\n{\n  \"text\": \"Note content here\",\n  \"view_state\": {\"name\": \"public\"},\n  \"time_tracking\": \"PT2H30M\"\n}\n\nWith attachment:\n\n{\n  \"text\": \"Note with file\",\n  \"files\": [\n    {\n      \"name\": \"log.txt\",\n      \"content\": \"base64_content\"\n    }\n  ]\n}\n\nDelete Note\n\nUser queries:\n\n\"Delete note 55 from issue 123\"\n\"Remove comment 99 from bug 456\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/issues/{{issue_id}}/notes/{{note_id}}"
      },
      {
        "title": "List All Projects",
        "body": "User queries:\n\n\"List all projects\"\n\"Show all projects\"\n\"Get projects\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects"
      },
      {
        "title": "Get Project by ID",
        "body": "User queries:\n\n\"Show project 5\"\n\"Get details for project 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}"
      },
      {
        "title": "Create Project",
        "body": "User queries:\n\n\"Create project named 'New Product'\"\n\"Add project with description 'Internal tools'\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects\n\nBody:\n\n{\n  \"name\": \"Project Name\",\n  \"description\": \"Project description\",\n  \"enabled\": true,\n  \"inherit_global\": true,\n  \"view_state\": {\"name\": \"public\"},\n  \"status\": {\"name\": \"development\"}\n}"
      },
      {
        "title": "Update Project",
        "body": "User queries:\n\n\"Update project 5 description\"\n\"Change project 10 status to stable\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/projects/{{id}}"
      },
      {
        "title": "Delete Project",
        "body": "User queries:\n\n\"Delete project 5\"\n\"Remove project 10\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{id}}"
      },
      {
        "title": "Sub-Projects",
        "body": "Get Sub-Projects\n\nUser queries:\n\n\"Show sub-projects of project 5\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}/subprojects\n\nCreate Sub-Project\n\nUser queries:\n\n\"Create sub-project under project 5\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects/{{id}}/subprojects\n\nBody:\n\n{\n  \"subproject\": {\"id\": 10}\n}\n\nDelete Sub-Project\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{id}}/subprojects/{{subproject_id}}"
      },
      {
        "title": "Project Users",
        "body": "Get Project Users\n\nUser queries:\n\n\"Show users in project 5\"\n\"List members of project 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}/users\n\nAdd User to Project\n\nUser queries:\n\n\"Add user 20 to project 5 as developer\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects/{{id}}/users\n\nBody:\n\n{\n  \"user\": {\"id\": 20},\n  \"access_level\": {\"name\": \"developer\"}\n}\n\nAccess levels:\n\nviewer (10)\nreporter (25)\nupdater (40)\ndeveloper (55)\nmanager (70)\nadministrator (90)\n\nDelete User from Project\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{project_id}}/users/{{user_id}}"
      },
      {
        "title": "Project Versions",
        "body": "Get Versions\n\nUser queries:\n\n\"Show versions of project 5\"\n\"List releases for project 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}/versions\n\nCreate Version\n\nUser queries:\n\n\"Create version 2.0 for project 5\"\n\"Add release 1.5 to project 10\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects/{{id}}/versions\n\nBody:\n\n{\n  \"name\": \"2.0\",\n  \"description\": \"Major release\",\n  \"released\": true,\n  \"obsolete\": false,\n  \"timestamp\": \"2026-06-01T00:00:00+00:00\"\n}\n\nUpdate Version\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/projects/{{project_id}}/versions/{{version_id}}\n\nDelete Version\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{project_id}}/versions/{{version_id}}"
      },
      {
        "title": "Get My User Info",
        "body": "User queries:\n\n\"Show my user info\"\n\"Get my profile\"\n\"Who am I?\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users/me"
      },
      {
        "title": "Get User by ID",
        "body": "User queries:\n\n\"Show user 10\"\n\"Get info for user 25\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users/{{id}}"
      },
      {
        "title": "Get User by Username",
        "body": "User queries:\n\n\"Find user 'john.doe'\"\n\"Get user with username 'admin'\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users?name={{username}}"
      },
      {
        "title": "Create User",
        "body": "User queries:\n\n\"Create user 'jane.smith' with email 'jane@example.com'\"\n\"Add new user\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/users\n\nMinimal body:\n\n{\n  \"username\": \"jane.smith\",\n  \"email\": \"jane@example.com\",\n  \"access_level\": {\"name\": \"reporter\"}\n}\n\nFull body:\n\n{\n  \"username\": \"jane.smith\",\n  \"password\": \"SecurePass123!\",\n  \"real_name\": \"Jane Smith\",\n  \"email\": \"jane@example.com\",\n  \"access_level\": {\"name\": \"developer\"},\n  \"enabled\": true,\n  \"protected\": false\n}"
      },
      {
        "title": "Update User",
        "body": "User queries:\n\n\"Update user 10 email to 'new@example.com'\"\n\"Change user 25 access level to developer\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/users/{{id}}\n\nBody:\n\n{\n  \"real_name\": \"Updated Name\",\n  \"email\": \"new@example.com\",\n  \"access_level\": {\"name\": \"developer\"},\n  \"enabled\": false\n}"
      },
      {
        "title": "Reset User Password",
        "body": "User queries:\n\n\"Reset password for user 10\"\n\nAction:\n\nPUT {{MANTIS_BASE_URL}}/users/{{id}}/reset-password\n\nBody:\n\n{\n  \"password\": \"NewSecurePassword123!\"\n}"
      },
      {
        "title": "Delete User",
        "body": "User queries:\n\n\"Delete user 10\"\n\"Remove user 'john.doe'\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/users/{{id}}"
      },
      {
        "title": "Get All Filters",
        "body": "User queries:\n\n\"List all filters\"\n\"Show my saved filters\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/filters"
      },
      {
        "title": "Get Filter by ID",
        "body": "User queries:\n\n\"Show filter 5\"\n\"Get details for filter 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/filters/{{id}}"
      },
      {
        "title": "Delete Filter",
        "body": "User queries:\n\n\"Delete filter 5\"\n\"Remove saved filter 10\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/filters/{{id}}"
      },
      {
        "title": "Create Token for Self",
        "body": "User queries:\n\n\"Create my API token\"\n\"Generate token for me\"\n\"Create new token named 'automation'\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/user_tokens\n\nBody:\n\n{\n  \"name\": \"automation_token\",\n  \"date_expiry\": \"2027-12-31T23:59:59+00:00\"\n}"
      },
      {
        "title": "Delete Token for Self",
        "body": "User queries:\n\n\"Delete my token\"\n\"Revoke my API token\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/user_tokens/{{token_id}}"
      },
      {
        "title": "Create Token for Another User",
        "body": "User queries:\n\n\"Create token for user 10\"\n\"Generate API token for user 'john.doe'\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/users/{{user_id}}/tokens\n\nBody:\n\n{\n  \"name\": \"user_token\",\n  \"date_expiry\": \"2027-12-31T23:59:59+00:00\"\n}"
      },
      {
        "title": "Delete Token for Another User",
        "body": "Action:\n\nDELETE {{MANTIS_BASE_URL}}/users/{{user_id}}/tokens/{{token_id}}"
      },
      {
        "title": "Get Single Configuration Option",
        "body": "User queries:\n\n\"Get config option 'bug_report_page_fields'\"\n\"Show configuration for 'default_category_for_moves'\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/config/{{option}}"
      },
      {
        "title": "Get Multiple Configuration Options",
        "body": "User queries:\n\n\"Get configs for project 5\"\n\"Show all config options\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/config\n\nQuery parameters:\n\noption — specific option name\nproject_id — filter by project\nuser_id — filter by user"
      },
      {
        "title": "Set Configuration Option",
        "body": "User queries:\n\n\"Set config 'allow_signup' to true\"\n\"Update config option\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/config\n\nBody:\n\n{\n  \"configs\": [\n    {\n      \"option\": \"allow_signup\",\n      \"value\": \"1\"\n    }\n  ]\n}"
      },
      {
        "title": "Get Localized String",
        "body": "User queries:\n\n\"Get localized string 'status_new'\"\n\"Translate 'priority_high' to French\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/lang/{{string}}\n\nQuery parameter:\n\nlanguage — language code (e.g., 'fr', 'en', 'de')"
      },
      {
        "title": "Get Multiple Localized Strings",
        "body": "User queries:\n\n\"Get all status translations\"\n\"Get localized strings for priorities\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/lang\n\nQuery parameters:\n\nstrings — comma-separated list of string keys\nlanguage — language code"
      },
      {
        "title": "Get User Info with Impersonation",
        "body": "User queries:\n\n\"Impersonate user 10 and get their info\"\n\"Get info as user 'john.doe'\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users/me\n\nHeader:\n\nX-Impersonate-User: {{username_or_id}}"
      },
      {
        "title": "⚠️ Error Handling",
        "body": "Handle HTTP errors gracefully:\n\n401 Unauthorized:\n\nToken is invalid or expired\nAction: Inform user to check MANTIS_API_TOKEN or provide valid temporary_token\n\n403 Forbidden:\n\nUser doesn't have permission for this operation\nAction: Inform user about insufficient permissions\n\n404 Not Found:\n\nResource (issue, project, user, etc.) doesn't exist\nAction: Inform user that the requested resource was not found\n\n422 Unprocessable Entity:\n\nValidation error in request body\nAction: Show validation errors from response and guide user\n\n500 Internal Server Error:\n\nServer-side error\nAction: Inform user of server error and suggest retrying later\n\nGeneral error response format:\n\n{\n  \"message\": \"Error description\",\n  \"code\": 1234,\n  \"localized\": \"Localized error message\"\n}"
      },
      {
        "title": "Pagination",
        "body": "Always support page_size and page parameters for list operations\nDefault page size: 50\nInform user when results are paginated"
      },
      {
        "title": "Field Selection",
        "body": "Use select parameter to return only needed fields\nExample: select=id,summary,status,priority\nReduces bandwidth and improves performance"
      },
      {
        "title": "Filtering",
        "body": "Use filter_id to apply saved filters\nCombine with pagination for large datasets\nConsider project-specific filtering with project_id"
      },
      {
        "title": "Attachments",
        "body": "Files must be base64-encoded\nInclude filename and content in request\nVerify file size limits (check Mantis config)"
      },
      {
        "title": "Time Tracking",
        "body": "Use ISO 8601 duration format: PT2H30M (2 hours 30 minutes)\nCan be added to notes for time tracking"
      },
      {
        "title": "Date Formats",
        "body": "Use ISO 8601: 2026-12-31T23:59:59+00:00\nInclude timezone for accuracy"
      },
      {
        "title": "Custom Fields",
        "body": "Check project configuration for available custom fields\nReference by field ID in requests"
      },
      {
        "title": "Relationships",
        "body": "Verify relationship types supported by your Mantis version\nSome relationships auto-create reciprocal links"
      },
      {
        "title": "Create and Monitor Issue",
        "body": "1. POST /issues with summary and description\n2. POST /issues/{{new_id}}/monitors to monitor"
      },
      {
        "title": "Assign Issue and Add Note",
        "body": "1. PATCH /issues/{{id}} with handler\n2. POST /issues/{{id}}/notes with assignment comment"
      },
      {
        "title": "Create Project with Version",
        "body": "1. POST /projects with project details\n2. POST /projects/{{id}}/versions with version info"
      },
      {
        "title": "User Management Flow",
        "body": "1. POST /users to create user\n2. POST /projects/{{id}}/users to add to project\n3. POST /users/{{id}}/tokens to create API token"
      },
      {
        "title": "Bulk Issue Updates",
        "body": "When updating multiple issues:\n\nLoop through issue IDs\nUse PATCH for each issue\nCollect results and report summary"
      },
      {
        "title": "Filter-Based Operations",
        "body": "Get all high-priority bugs:\n\n1. GET /filters to find priority filter ID\n2. GET /issues?filter_id={{filter_id}}&page_size=100\n3. Process paginated results"
      },
      {
        "title": "Project Migration",
        "body": "Copy project structure:\n\n1. GET /projects/{{source_id}} to get project details\n2. GET /projects/{{source_id}}/versions for versions\n3. POST /projects to create new project\n4. POST /projects/{{new_id}}/versions for each version"
      },
      {
        "title": "User Audit",
        "body": "Track user activity:\n\n1. GET /issues?reporter_id={{user_id}}\n2. GET /issues?handler_id={{user_id}}\n3. GET /issues?monitor_id={{user_id}}\n4. Compile activity report"
      },
      {
        "title": "Multi-Instance Management",
        "body": "Work with multiple Mantis instances:\n\n// Scenario: Compare issue status across environments\n\n1. Check production:\n   Set temporary_base_url = \"https://prod.mantis.com/api/rest\"\n   Set temporary_token = \"prod_token\"\n   GET /issues/123\n   Record status\n\n2. Check staging:\n   Set temporary_base_url = \"https://staging.mantis.com/api/rest\"\n   Set temporary_token = \"staging_token\"\n   GET /issues/123\n   Record status\n\n3. Compare and report differences"
      },
      {
        "title": "Cross-Instance Synchronization",
        "body": "Sync data between instances:\n\n// Scenario: Clone project from one instance to another\n\n1. Connect to source instance:\n   Set user_base_url = \"https://source.mantis.com/api/rest\"\n   Set user_token = \"source_token\"\n   GET /projects/5 (get project details)\n   GET /projects/5/versions (get versions)\n   GET /projects/5/users (get users)\n\n2. Connect to target instance:\n   Set user_base_url = \"https://target.mantis.com/api/rest\"\n   Set user_token = \"target_token\"\n   POST /projects (create project)\n   POST /projects/{{new_id}}/versions (create versions)\n   POST /projects/{{new_id}}/users (add users)\n\n3. Report sync results"
      },
      {
        "title": "Client-Specific Operations",
        "body": "Manage multiple client instances:\n\n// Scenario: Daily status report for all clients\n\nFor each client in [ClientA, ClientB, ClientC]:\n  1. Set user_base_url = client.mantis_url\n  2. Set user_token = client.api_token\n  3. GET /issues?filter_id=1 (get today's issues)\n  4. Collect statistics\n  5. Clear context\n\nGenerate consolidated report"
      },
      {
        "title": "📚 Resources",
        "body": "Mantis API Documentation: Check your Mantis instance at {{MANTIS_BASE_URL}}/api/rest/swagger.yaml\nIssue Statuses: new, feedback, acknowledged, confirmed, assigned, resolved, closed\nPriorities: none, low, normal, high, urgent, immediate\nSeverities: feature, trivial, text, tweak, minor, major, crash, block\nAccess Levels: 10=viewer, 25=reporter, 40=updater, 55=developer, 70=manager, 90=administrator"
      },
      {
        "title": "✅ Skill Capabilities Summary",
        "body": "This skill enables you to:"
      },
      {
        "title": "Core Operations",
        "body": "✅ Full CRUD operations on issues\n✅ Manage issue relationships, tags, monitors\n✅ Add notes with time tracking and attachments\n✅ Full project management (create, update, delete)\n✅ Manage sub-projects, versions, and project users\n✅ User management (CRUD, password reset)\n✅ API token management (create, delete for self and others)\n✅ Filter management and filtered queries\n✅ Configuration management\n✅ Localization support\n✅ Impersonation capabilities"
      },
      {
        "title": "Advanced Features",
        "body": "✅ Dynamic instance switching — Switch between multiple Mantis instances on-the-fly\n✅ Context-aware URL resolution — temporary_base_url → user_base_url → MANTIS_BASE_URL\n✅ Context-aware token resolution — temporary_token → user_token → MANTIS_API_TOKEN\n✅ Multi-instance management — Manage multiple clients/environments simultaneously\n✅ Cross-instance operations — Compare, sync, and migrate data between instances\n✅ Comprehensive error handling\n✅ Pagination and field selection\n✅ Advanced workflows and bulk operations"
      }
    ],
    "body": "Mantis Manager Skill (Enhanced)\n🔐 Base URL & Token Resolution\nBase URL Resolution\n\nBase URL precedence (highest to lowest):\n\ntemporary_base_url — one-time use URL for specific operations\nuser_base_url — user-defined URL for the current session\nMANTIS_BASE_URL — environment default URL\n\nThis allows you to:\n\nSwitch between multiple Mantis instances dynamically\nTest against staging/production environments\nWork with different client instances without changing config\n\nExample:\n\n// Default: uses MANTIS_BASE_URL from environment\nGET {{resolved_base_url}}/issues\n\n// Override for one operation:\ntemporary_base_url = \"https://mantis-staging.example.com/api/rest\"\nGET {{resolved_base_url}}/issues\n\n// Override for session:\nuser_base_url = \"https://client-mantis.example.com/api/rest\"\nGET {{resolved_base_url}}/issues\n\nToken Resolution\n\nToken precedence (highest to lowest):\n\ntemporary_token — one-time use token for specific operations\nuser_token — user-defined token for the current session\nMANTIS_API_TOKEN — environment default token\n\nEnvironment variables are handled via standard OpenClaw metadata: requires.env declares required variables (MANTIS_BASE_URL, MANTIS_API_TOKEN). Any other environment variables you use for Mantis should be treated as normal process env vars and are not modeled as special OpenClaw metadata fields.\n\nAuthentication Headers\n\nAll API requests must include:\n\nAuthorization: Bearer {{resolved_token}}\nContent-Type: application/json\n\n\nNote: The {{resolved_base_url}} and {{resolved_token}} are determined at runtime based on the precedence rules above.\n\n📌 Notation Used in Examples\n\nThroughout this documentation:\n\n{{MANTIS_BASE_URL}} refers to the resolved base URL (could be temporary_base_url, user_base_url, or env MANTIS_BASE_URL)\n{{resolved_token}} refers to the resolved token (could be temporary_token, user_token, or env MANTIS_API_TOKEN)\nAll endpoints use the pattern: {{MANTIS_BASE_URL}}/resource/path\n\nImportant: Always use the resolution logic to determine the actual URL and token at runtime.\n\n🔄 Context Management\n\nThe temporary_* and user_* names here are runtime context variables used by the skill logic, not OpenClaw metadata fields. OpenClaw does not define an optional.context metadata key; context is resolved dynamically at runtime as described below.\n\nSetting Temporary Values (One-Time Use)\n\nUser queries:\n\n\"Use https://staging.mantis.com/api/rest for this request\"\n\"Connect to production instance for this operation\"\n\"Use token ABC123 just this once\"\n\nAction:\n\nSet temporary_base_url = \"https://staging.mantis.com/api/rest\"\nSet temporary_token = \"ABC123\"\n... perform operation ...\nClear temporary_base_url\nClear temporary_token\n\n\nBehavior: Temporary values are automatically cleared after one use.\n\nSetting Session Values (Current Session)\n\nUser queries:\n\n\"Switch to client XYZ's Mantis instance\"\n\"Use my personal API token for all requests\"\n\"Connect to staging environment\"\n\nAction:\n\nSet user_base_url = \"https://client-xyz.mantis.com/api/rest\"\nSet user_token = \"personal_token_123\"\n... perform multiple operations ...\n// Values persist for the entire session\n\n\nBehavior: Session values persist until explicitly cleared or session ends.\n\nClearing Context Values\n\nUser queries:\n\n\"Reset to default Mantis instance\"\n\"Clear my custom token\"\n\"Go back to environment defaults\"\n\nAction:\n\nClear user_base_url\nClear user_token\n// Now uses MANTIS_BASE_URL and MANTIS_API_TOKEN from environment\n\nViewing Current Context\n\nUser queries:\n\n\"What Mantis instance am I connected to?\"\n\"Show current API configuration\"\n\"Which token am I using?\"\n\nResponse should show:\n\nCurrent Context:\n- Base URL: https://client-xyz.mantis.com/api/rest (user_base_url)\n- Token: user_t***123 (user_token)\n- Fallback Base URL: https://default.mantis.com/api/rest (MANTIS_BASE_URL)\n- Fallback Token: env_t***789 (MANTIS_API_TOKEN)\n\nUse Cases\nMulti-Instance Management\n// Check production issue\nSet temporary_base_url = \"https://prod.mantis.com/api/rest\"\nGet issue 123\n\n// Check staging issue  \nSet temporary_base_url = \"https://staging.mantis.com/api/rest\"\nGet issue 123\n\n// Compare results\n\nClient Switching\n// Switch to Client A\nSet user_base_url = \"https://clienta.mantis.com/api/rest\"\nSet user_token = \"clienta_token\"\nList all projects\nGet issues for project 5\n\n// Switch to Client B\nSet user_base_url = \"https://clientb.mantis.com/api/rest\"\nSet user_token = \"clientb_token\"\nList all projects\nGet issues for project 3\n\nAdmin Operations with Impersonation\n// Connect to main instance as admin\nSet user_token = \"admin_token\"\n\n// Perform operation as specific user\nSet temporary header: X-Impersonate-User = \"john.doe\"\nGet user issues\n\n// Back to admin\nClear temporary header\n\n🐞 ISSUES Operations\nList Issues\n\nUser queries:\n\n\"List all issues\"\n\"Get issues for project 5\"\n\"Get issues matching filter 10\"\n\"Show issues assigned to me\"\n\"Get unassigned issues\"\n\nActions:\n\nGET {{MANTIS_BASE_URL}}/issues\n\n\nQuery Parameters:\n\npage_size — number of issues per page (default: 50)\npage — page number (1-indexed)\nfilter_id — ID of saved filter to apply\nproject_id — filter by specific project\nselect — comma-separated fields to return (e.g., \"id,summary,status\")\n\nSpecial endpoints:\n\nGET {{MANTIS_BASE_URL}}/issues?filter_id={{filter_id}}\nGET {{MANTIS_BASE_URL}}/projects/{{project_id}}/issues\n\nGet Single Issue\n\nUser queries:\n\n\"Show issue 123\"\n\"Get details for bug 456\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/issues/{{id}}\n\nCreate Issue\n\nUser queries:\n\n\"Create issue with summary 'Login bug' and description 'Cannot login'\"\n\"Create bug in project 5 with priority high\"\n\"Create issue with attachments\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues\n\n\nMinimal body:\n\n{\n  \"summary\": \"Issue summary\",\n  \"description\": \"Detailed description\",\n  \"category\": {\"name\": \"General\"},\n  \"project\": {\"id\": 1}\n}\n\n\nFull body (optional fields):\n\n{\n  \"summary\": \"Issue summary\",\n  \"description\": \"Detailed description\",\n  \"steps_to_reproduce\": \"1. Do this\\n2. Do that\",\n  \"additional_information\": \"Extra info\",\n  \"category\": {\"id\": 1, \"name\": \"General\"},\n  \"project\": {\"id\": 1},\n  \"priority\": {\"id\": 30, \"name\": \"normal\"},\n  \"severity\": {\"id\": 50, \"name\": \"minor\"},\n  \"status\": {\"id\": 10, \"name\": \"new\"},\n  \"reproducibility\": {\"id\": 10, \"name\": \"always\"},\n  \"handler\": {\"id\": 5},\n  \"tags\": [{\"name\": \"bug\"}, {\"name\": \"ui\"}],\n  \"custom_fields\": [{\"field\": {\"id\": 1}, \"value\": \"custom value\"}],\n  \"due_date\": \"2026-12-31T23:59:59+00:00\",\n  \"version\": {\"name\": \"1.0\"},\n  \"target_version\": {\"name\": \"2.0\"}\n}\n\n\nCreate with attachments:\n\nPOST {{MANTIS_BASE_URL}}/issues\n\n\nInclude files array in body with base64-encoded content.\n\nUpdate Issue\n\nUser queries:\n\n\"Update issue 123 status to resolved\"\n\"Change priority of bug 456 to high\"\n\"Assign issue 789 to user 10\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/issues/{{id}}\n\n\nExample body:\n\n{\n  \"status\": {\"name\": \"resolved\"},\n  \"handler\": {\"id\": 10},\n  \"priority\": {\"name\": \"high\"},\n  \"summary\": \"Updated summary\"\n}\n\nDelete Issue\n\nUser queries:\n\n\"Delete issue 123\"\n\"Remove bug 456\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/issues/{{id}}\n\nMonitor/Unmonitor Issue\n\nUser queries:\n\n\"Monitor issue 123\"\n\"Stop monitoring bug 456\"\n\"Add user 10 as monitor on issue 789\"\n\nActions:\n\nPOST   {{MANTIS_BASE_URL}}/issues/{{id}}/monitors\nDELETE {{MANTIS_BASE_URL}}/issues/{{id}}/monitors\n\n\nBody (for specific user):\n\n{\n  \"user\": {\"id\": 10}\n}\n\nAttach/Detach Tags\n\nUser queries:\n\n\"Add tag 'critical' to issue 123\"\n\"Remove tag 'bug' from issue 456\"\n\nActions:\n\nPOST   {{MANTIS_BASE_URL}}/issues/{{id}}/tags\nPATCH  {{MANTIS_BASE_URL}}/issues/{{id}}/tags\nDELETE {{MANTIS_BASE_URL}}/issues/{{id}}/tags\n\n\nBody:\n\n{\n  \"tags\": [\n    {\"name\": \"bug\"},\n    {\"name\": \"critical\"}\n  ]\n}\n\nAdd Issue Relationship\n\nUser queries:\n\n\"Link issue 123 to issue 456 as duplicate\"\n\"Add parent relationship from 789 to 101\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues/{{id}}/relationships\n\n\nBody:\n\n{\n  \"type\": {\"name\": \"duplicate-of\"},\n  \"target_issue\": {\"id\": 456}\n}\n\n\nRelationship types:\n\nduplicate-of\nrelated-to\nparent-of\nchild-of\nhas-duplicate\nAttach Files\n\nUser queries:\n\n\"Attach file to issue 123\"\n\"Add screenshot to bug 456\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues/{{id}}/files\n\n\nBody:\n\n{\n  \"files\": [\n    {\n      \"name\": \"screenshot.png\",\n      \"content\": \"base64_encoded_content_here\"\n    }\n  ]\n}\n\nDelete Attachment\n\nUser queries:\n\n\"Delete attachment 789 from issue 123\"\n\"Remove file 101 from bug 456\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/issues/{{issue_id}}/files/{{file_id}}\n\nIssue Notes\nAdd Note\n\nUser queries:\n\n\"Add note to issue 123: 'This is fixed now'\"\n\"Add note with time tracking 2 hours\"\n\"Add private note to bug 456\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/issues/{{id}}/notes\n\n\nBody:\n\n{\n  \"text\": \"Note content here\",\n  \"view_state\": {\"name\": \"public\"},\n  \"time_tracking\": \"PT2H30M\"\n}\n\n\nWith attachment:\n\n{\n  \"text\": \"Note with file\",\n  \"files\": [\n    {\n      \"name\": \"log.txt\",\n      \"content\": \"base64_content\"\n    }\n  ]\n}\n\nDelete Note\n\nUser queries:\n\n\"Delete note 55 from issue 123\"\n\"Remove comment 99 from bug 456\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/issues/{{issue_id}}/notes/{{note_id}}\n\n📁 PROJECTS Operations\nList All Projects\n\nUser queries:\n\n\"List all projects\"\n\"Show all projects\"\n\"Get projects\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects\n\nGet Project by ID\n\nUser queries:\n\n\"Show project 5\"\n\"Get details for project 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}\n\nCreate Project\n\nUser queries:\n\n\"Create project named 'New Product'\"\n\"Add project with description 'Internal tools'\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects\n\n\nBody:\n\n{\n  \"name\": \"Project Name\",\n  \"description\": \"Project description\",\n  \"enabled\": true,\n  \"inherit_global\": true,\n  \"view_state\": {\"name\": \"public\"},\n  \"status\": {\"name\": \"development\"}\n}\n\nUpdate Project\n\nUser queries:\n\n\"Update project 5 description\"\n\"Change project 10 status to stable\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/projects/{{id}}\n\nDelete Project\n\nUser queries:\n\n\"Delete project 5\"\n\"Remove project 10\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{id}}\n\nSub-Projects\nGet Sub-Projects\n\nUser queries:\n\n\"Show sub-projects of project 5\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}/subprojects\n\nCreate Sub-Project\n\nUser queries:\n\n\"Create sub-project under project 5\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects/{{id}}/subprojects\n\n\nBody:\n\n{\n  \"subproject\": {\"id\": 10}\n}\n\nDelete Sub-Project\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{id}}/subprojects/{{subproject_id}}\n\nProject Users\nGet Project Users\n\nUser queries:\n\n\"Show users in project 5\"\n\"List members of project 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}/users\n\nAdd User to Project\n\nUser queries:\n\n\"Add user 20 to project 5 as developer\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects/{{id}}/users\n\n\nBody:\n\n{\n  \"user\": {\"id\": 20},\n  \"access_level\": {\"name\": \"developer\"}\n}\n\n\nAccess levels:\n\nviewer (10)\nreporter (25)\nupdater (40)\ndeveloper (55)\nmanager (70)\nadministrator (90)\nDelete User from Project\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{project_id}}/users/{{user_id}}\n\nProject Versions\nGet Versions\n\nUser queries:\n\n\"Show versions of project 5\"\n\"List releases for project 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/projects/{{id}}/versions\n\nCreate Version\n\nUser queries:\n\n\"Create version 2.0 for project 5\"\n\"Add release 1.5 to project 10\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/projects/{{id}}/versions\n\n\nBody:\n\n{\n  \"name\": \"2.0\",\n  \"description\": \"Major release\",\n  \"released\": true,\n  \"obsolete\": false,\n  \"timestamp\": \"2026-06-01T00:00:00+00:00\"\n}\n\nUpdate Version\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/projects/{{project_id}}/versions/{{version_id}}\n\nDelete Version\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/projects/{{project_id}}/versions/{{version_id}}\n\n👥 USERS Operations\nGet My User Info\n\nUser queries:\n\n\"Show my user info\"\n\"Get my profile\"\n\"Who am I?\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users/me\n\nGet User by ID\n\nUser queries:\n\n\"Show user 10\"\n\"Get info for user 25\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users/{{id}}\n\nGet User by Username\n\nUser queries:\n\n\"Find user 'john.doe'\"\n\"Get user with username 'admin'\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users?name={{username}}\n\nCreate User\n\nUser queries:\n\n\"Create user 'jane.smith' with email 'jane@example.com'\"\n\"Add new user\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/users\n\n\nMinimal body:\n\n{\n  \"username\": \"jane.smith\",\n  \"email\": \"jane@example.com\",\n  \"access_level\": {\"name\": \"reporter\"}\n}\n\n\nFull body:\n\n{\n  \"username\": \"jane.smith\",\n  \"password\": \"SecurePass123!\",\n  \"real_name\": \"Jane Smith\",\n  \"email\": \"jane@example.com\",\n  \"access_level\": {\"name\": \"developer\"},\n  \"enabled\": true,\n  \"protected\": false\n}\n\nUpdate User\n\nUser queries:\n\n\"Update user 10 email to 'new@example.com'\"\n\"Change user 25 access level to developer\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/users/{{id}}\n\n\nBody:\n\n{\n  \"real_name\": \"Updated Name\",\n  \"email\": \"new@example.com\",\n  \"access_level\": {\"name\": \"developer\"},\n  \"enabled\": false\n}\n\nReset User Password\n\nUser queries:\n\n\"Reset password for user 10\"\n\nAction:\n\nPUT {{MANTIS_BASE_URL}}/users/{{id}}/reset-password\n\n\nBody:\n\n{\n  \"password\": \"NewSecurePassword123!\"\n}\n\nDelete User\n\nUser queries:\n\n\"Delete user 10\"\n\"Remove user 'john.doe'\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/users/{{id}}\n\n🔍 FILTERS Operations\nGet All Filters\n\nUser queries:\n\n\"List all filters\"\n\"Show my saved filters\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/filters\n\nGet Filter by ID\n\nUser queries:\n\n\"Show filter 5\"\n\"Get details for filter 10\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/filters/{{id}}\n\nDelete Filter\n\nUser queries:\n\n\"Delete filter 5\"\n\"Remove saved filter 10\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/filters/{{id}}\n\n🔐 TOKEN MANAGEMENT\nCreate Token for Self\n\nUser queries:\n\n\"Create my API token\"\n\"Generate token for me\"\n\"Create new token named 'automation'\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/user_tokens\n\n\nBody:\n\n{\n  \"name\": \"automation_token\",\n  \"date_expiry\": \"2027-12-31T23:59:59+00:00\"\n}\n\nDelete Token for Self\n\nUser queries:\n\n\"Delete my token\"\n\"Revoke my API token\"\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/user_tokens/{{token_id}}\n\nCreate Token for Another User\n\nUser queries:\n\n\"Create token for user 10\"\n\"Generate API token for user 'john.doe'\"\n\nAction:\n\nPOST {{MANTIS_BASE_URL}}/users/{{user_id}}/tokens\n\n\nBody:\n\n{\n  \"name\": \"user_token\",\n  \"date_expiry\": \"2027-12-31T23:59:59+00:00\"\n}\n\nDelete Token for Another User\n\nAction:\n\nDELETE {{MANTIS_BASE_URL}}/users/{{user_id}}/tokens/{{token_id}}\n\n⚙️ CONFIG Operations\nGet Single Configuration Option\n\nUser queries:\n\n\"Get config option 'bug_report_page_fields'\"\n\"Show configuration for 'default_category_for_moves'\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/config/{{option}}\n\nGet Multiple Configuration Options\n\nUser queries:\n\n\"Get configs for project 5\"\n\"Show all config options\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/config\n\n\nQuery parameters:\n\noption — specific option name\nproject_id — filter by project\nuser_id — filter by user\nSet Configuration Option\n\nUser queries:\n\n\"Set config 'allow_signup' to true\"\n\"Update config option\"\n\nAction:\n\nPATCH {{MANTIS_BASE_URL}}/config\n\n\nBody:\n\n{\n  \"configs\": [\n    {\n      \"option\": \"allow_signup\",\n      \"value\": \"1\"\n    }\n  ]\n}\n\n🌍 LOCALIZATION Operations\nGet Localized String\n\nUser queries:\n\n\"Get localized string 'status_new'\"\n\"Translate 'priority_high' to French\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/lang/{{string}}\n\n\nQuery parameter:\n\nlanguage — language code (e.g., 'fr', 'en', 'de')\nGet Multiple Localized Strings\n\nUser queries:\n\n\"Get all status translations\"\n\"Get localized strings for priorities\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/lang\n\n\nQuery parameters:\n\nstrings — comma-separated list of string keys\nlanguage — language code\n🔒 IMPERSONATION\nGet User Info with Impersonation\n\nUser queries:\n\n\"Impersonate user 10 and get their info\"\n\"Get info as user 'john.doe'\"\n\nAction:\n\nGET {{MANTIS_BASE_URL}}/users/me\n\n\nHeader:\n\nX-Impersonate-User: {{username_or_id}}\n\n⚠️ Error Handling\n\nHandle HTTP errors gracefully:\n\n401 Unauthorized:\n\nToken is invalid or expired\nAction: Inform user to check MANTIS_API_TOKEN or provide valid temporary_token\n\n403 Forbidden:\n\nUser doesn't have permission for this operation\nAction: Inform user about insufficient permissions\n\n404 Not Found:\n\nResource (issue, project, user, etc.) doesn't exist\nAction: Inform user that the requested resource was not found\n\n422 Unprocessable Entity:\n\nValidation error in request body\nAction: Show validation errors from response and guide user\n\n500 Internal Server Error:\n\nServer-side error\nAction: Inform user of server error and suggest retrying later\n\nGeneral error response format:\n\n{\n  \"message\": \"Error description\",\n  \"code\": 1234,\n  \"localized\": \"Localized error message\"\n}\n\n📋 Best Practices\nPagination\nAlways support page_size and page parameters for list operations\nDefault page size: 50\nInform user when results are paginated\nField Selection\nUse select parameter to return only needed fields\nExample: select=id,summary,status,priority\nReduces bandwidth and improves performance\nFiltering\nUse filter_id to apply saved filters\nCombine with pagination for large datasets\nConsider project-specific filtering with project_id\nAttachments\nFiles must be base64-encoded\nInclude filename and content in request\nVerify file size limits (check Mantis config)\nTime Tracking\nUse ISO 8601 duration format: PT2H30M (2 hours 30 minutes)\nCan be added to notes for time tracking\nDate Formats\nUse ISO 8601: 2026-12-31T23:59:59+00:00\nInclude timezone for accuracy\nCustom Fields\nCheck project configuration for available custom fields\nReference by field ID in requests\nRelationships\nVerify relationship types supported by your Mantis version\nSome relationships auto-create reciprocal links\n🚀 Quick Examples\nCreate and Monitor Issue\n1. POST /issues with summary and description\n2. POST /issues/{{new_id}}/monitors to monitor\n\nAssign Issue and Add Note\n1. PATCH /issues/{{id}} with handler\n2. POST /issues/{{id}}/notes with assignment comment\n\nCreate Project with Version\n1. POST /projects with project details\n2. POST /projects/{{id}}/versions with version info\n\nUser Management Flow\n1. POST /users to create user\n2. POST /projects/{{id}}/users to add to project\n3. POST /users/{{id}}/tokens to create API token\n\n🎯 Advanced Use Cases\nBulk Issue Updates\n\nWhen updating multiple issues:\n\nLoop through issue IDs\nUse PATCH for each issue\nCollect results and report summary\nFilter-Based Operations\n\nGet all high-priority bugs:\n\n1. GET /filters to find priority filter ID\n2. GET /issues?filter_id={{filter_id}}&page_size=100\n3. Process paginated results\n\nProject Migration\n\nCopy project structure:\n\n1. GET /projects/{{source_id}} to get project details\n2. GET /projects/{{source_id}}/versions for versions\n3. POST /projects to create new project\n4. POST /projects/{{new_id}}/versions for each version\n\nUser Audit\n\nTrack user activity:\n\n1. GET /issues?reporter_id={{user_id}}\n2. GET /issues?handler_id={{user_id}}\n3. GET /issues?monitor_id={{user_id}}\n4. Compile activity report\n\nMulti-Instance Management\n\nWork with multiple Mantis instances:\n\n// Scenario: Compare issue status across environments\n\n1. Check production:\n   Set temporary_base_url = \"https://prod.mantis.com/api/rest\"\n   Set temporary_token = \"prod_token\"\n   GET /issues/123\n   Record status\n\n2. Check staging:\n   Set temporary_base_url = \"https://staging.mantis.com/api/rest\"\n   Set temporary_token = \"staging_token\"\n   GET /issues/123\n   Record status\n\n3. Compare and report differences\n\nCross-Instance Synchronization\n\nSync data between instances:\n\n// Scenario: Clone project from one instance to another\n\n1. Connect to source instance:\n   Set user_base_url = \"https://source.mantis.com/api/rest\"\n   Set user_token = \"source_token\"\n   GET /projects/5 (get project details)\n   GET /projects/5/versions (get versions)\n   GET /projects/5/users (get users)\n\n2. Connect to target instance:\n   Set user_base_url = \"https://target.mantis.com/api/rest\"\n   Set user_token = \"target_token\"\n   POST /projects (create project)\n   POST /projects/{{new_id}}/versions (create versions)\n   POST /projects/{{new_id}}/users (add users)\n\n3. Report sync results\n\nClient-Specific Operations\n\nManage multiple client instances:\n\n// Scenario: Daily status report for all clients\n\nFor each client in [ClientA, ClientB, ClientC]:\n  1. Set user_base_url = client.mantis_url\n  2. Set user_token = client.api_token\n  3. GET /issues?filter_id=1 (get today's issues)\n  4. Collect statistics\n  5. Clear context\n\nGenerate consolidated report\n\n📚 Resources\nMantis API Documentation: Check your Mantis instance at {{MANTIS_BASE_URL}}/api/rest/swagger.yaml\nIssue Statuses: new, feedback, acknowledged, confirmed, assigned, resolved, closed\nPriorities: none, low, normal, high, urgent, immediate\nSeverities: feature, trivial, text, tweak, minor, major, crash, block\nAccess Levels: 10=viewer, 25=reporter, 40=updater, 55=developer, 70=manager, 90=administrator\n✅ Skill Capabilities Summary\n\nThis skill enables you to:\n\nCore Operations\n✅ Full CRUD operations on issues\n✅ Manage issue relationships, tags, monitors\n✅ Add notes with time tracking and attachments\n✅ Full project management (create, update, delete)\n✅ Manage sub-projects, versions, and project users\n✅ User management (CRUD, password reset)\n✅ API token management (create, delete for self and others)\n✅ Filter management and filtered queries\n✅ Configuration management\n✅ Localization support\n✅ Impersonation capabilities\nAdvanced Features\n✅ Dynamic instance switching — Switch between multiple Mantis instances on-the-fly\n✅ Context-aware URL resolution — temporary_base_url → user_base_url → MANTIS_BASE_URL\n✅ Context-aware token resolution — temporary_token → user_token → MANTIS_API_TOKEN\n✅ Multi-instance management — Manage multiple clients/environments simultaneously\n✅ Cross-instance operations — Compare, sync, and migrate data between instances\n✅ Comprehensive error handling\n✅ Pagination and field selection\n✅ Advanced workflows and bulk operations"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/willykinfoussia/mantis-manager",
    "publisherUrl": "https://clawhub.ai/willykinfoussia/mantis-manager",
    "owner": "willykinfoussia",
    "version": "0.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/mantis-manager",
    "downloadUrl": "https://openagent3.xyz/downloads/mantis-manager",
    "agentUrl": "https://openagent3.xyz/skills/mantis-manager/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mantis-manager/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mantis-manager/agent.md"
  }
}