{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/dust-tt/main/json-schema/dust-skill-schema.json",
  "title": "Dust Skill",
  "description": "A reusable Skill bundle that can be imported into a Dust workspace and called by agents.",
  "type": "object",
  "properties": {
    "sId": {
      "type": "string",
      "description": "Unique string identifier for the skill",
      "example": "skill_abc123"
    },
    "createdAt": {
      "type": "number",
      "nullable": true,
      "description": "Timestamp of when the skill was created"
    },
    "updatedAt": {
      "type": "number",
      "nullable": true,
      "description": "Timestamp of when the skill was last updated"
    },
    "editedBy": {
      "type": "integer",
      "nullable": true,
      "description": "Numeric identifier of the last editor"
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "archived",
        "suggested"
      ],
      "description": "Current status of the skill",
      "example": "active"
    },
    "name": {
      "type": "string",
      "description": "Name of the skill",
      "example": "Customer Support"
    },
    "agentFacingDescription": {
      "type": "string",
      "description": "Description shown to agents when selecting or using the skill",
      "example": "Use this skill to answer customer support questions."
    },
    "userFacingDescription": {
      "type": "string",
      "description": "Description shown to workspace users",
      "example": "Answers support questions with the right workspace context."
    },
    "icon": {
      "type": "string",
      "nullable": true,
      "description": "Icon identifier for the skill",
      "example": "ActionRobotIcon"
    },
    "source": {
      "type": "string",
      "nullable": true,
      "enum": [
        "web_app",
        "github",
        "api",
        "local_file"
      ],
      "description": "Source used to create or import the skill"
    },
    "sourceMetadata": {
      "type": "object",
      "nullable": true,
      "allOf": [
        {
          "$ref": "#/$defs/SkillSourceMetadata"
        }
      ]
    },
    "reinforcement": {
      "type": "string",
      "enum": [
        "auto",
        "on",
        "off"
      ],
      "description": "Reinforcement setting for the skill"
    },
    "lastReinforcementAnalysisAt": {
      "type": "string",
      "nullable": true,
      "description": "Timestamp of the last reinforcement analysis, when available"
    },
    "requestedSpaceIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Space identifiers the skill needs access to"
    },
    "fileAttachments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Unique string identifier for the attached file"
          },
          "fileName": {
            "type": "string",
            "description": "Name of the attached file"
          }
        }
      }
    },
    "canWrite": {
      "type": "boolean",
      "description": "Whether the authenticated actor can edit the skill"
    },
    "isExtendable": {
      "type": "boolean",
      "description": "Whether this skill can be extended by another skill"
    },
    "isDefault": {
      "type": "boolean",
      "description": "Whether this skill is enabled by default"
    },
    "extendedSkillId": {
      "type": "string",
      "nullable": true,
      "description": "Identifier of the extended skill, when applicable"
    },
    "instructions": {
      "type": "string",
      "nullable": true,
      "description": "Instructions used by the agent when running the skill"
    },
    "instructionsHtml": {
      "type": "string",
      "nullable": true,
      "description": "HTML representation of the skill instructions"
    },
    "tools": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/MCPServerView"
      }
    }
  },
  "$defs": {
    "MCPServerView": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "Unique identifier for the MCP server view",
          "example": 123
        },
        "sId": {
          "type": "string",
          "description": "Unique string identifier for the MCP server view",
          "example": "mcp_sv_abc123"
        },
        "name": {
          "type": "string",
          "nullable": true,
          "description": "Custom name for the MCP server view (null if not set)",
          "example": "My Custom MCP Server"
        },
        "description": {
          "type": "string",
          "nullable": true,
          "description": "Custom description for the MCP server view (null if not set)",
          "example": "This MCP server handles customer data operations"
        },
        "createdAt": {
          "type": "number",
          "description": "Unix timestamp of when the MCP server view was created",
          "example": 1625097600
        },
        "updatedAt": {
          "type": "number",
          "description": "Unix timestamp of when the MCP server view was last updated",
          "example": 1625184000
        },
        "spaceId": {
          "type": "string",
          "description": "ID of the space containing the MCP server view",
          "example": "spc_xyz789"
        },
        "serverType": {
          "type": "string",
          "enum": [
            "remote",
            "internal"
          ],
          "description": "Type of the MCP server",
          "example": "remote"
        },
        "server": {
          "type": "object",
          "properties": {
            "sId": {
              "type": "string",
              "description": "Unique string identifier for the MCP server",
              "example": "mcp_srv_def456"
            },
            "name": {
              "type": "string",
              "description": "Name of the MCP server",
              "example": "Customer Data Server"
            },
            "version": {
              "type": "string",
              "description": "Version of the MCP server",
              "example": "1.0.0"
            },
            "description": {
              "type": "string",
              "description": "Description of the MCP server",
              "example": "Handles customer data operations and queries"
            },
            "icon": {
              "type": "string",
              "description": "Icon identifier for the MCP server",
              "example": "database"
            },
            "authorization": {
              "type": "object",
              "nullable": true,
              "properties": {
                "provider": {
                  "type": "string",
                  "description": "OAuth provider for authorization",
                  "example": "github"
                },
                "supported_use_cases": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "platform_actions",
                      "personal_actions"
                    ]
                  },
                  "description": "Supported use cases for the authorization",
                  "example": [
                    "platform_actions"
                  ]
                },
                "scope": {
                  "type": "string",
                  "description": "OAuth scope required",
                  "example": "repo:read"
                }
              }
            },
            "tools": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the tool",
                    "example": "query_customers"
                  },
                  "description": {
                    "type": "string",
                    "description": "Description of what the tool does",
                    "example": "Query customer database for information"
                  },
                  "inputSchema": {
                    "type": "object",
                    "description": "JSON Schema for the tool's input parameters",
                    "example": {
                      "type": "object",
                      "properties": {
                        "customerId": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            },
            "availability": {
              "type": "string",
              "description": "Availability status of the MCP server",
              "example": "production"
            },
            "allowMultipleInstances": {
              "type": "boolean",
              "description": "Whether multiple instances of this server can be created",
              "example": false
            },
            "documentationUrl": {
              "type": "string",
              "nullable": true,
              "description": "URL to the server's documentation",
              "example": "https://docs.example.com/mcp-server"
            }
          }
        },
        "oAuthUseCase": {
          "type": "string",
          "nullable": true,
          "enum": [
            "platform_actions",
            "personal_actions"
          ],
          "description": "OAuth use case for the MCP server view",
          "example": "platform_actions"
        },
        "editedByUser": {
          "type": "object",
          "nullable": true,
          "description": "Information about the user who last edited the MCP server view",
          "properties": {
            "editedAt": {
              "type": "number",
              "nullable": true,
              "description": "Unix timestamp of when the edit occurred",
              "example": 1625184000
            },
            "fullName": {
              "type": "string",
              "nullable": true,
              "description": "Full name of the editor",
              "example": "John Doe"
            },
            "imageUrl": {
              "type": "string",
              "nullable": true,
              "description": "Profile image URL of the editor",
              "example": "https://example.com/profile/johndoe.jpg"
            }
          }
        }
      }
    },
    "SkillSourceMetadata": {
      "type": "object",
      "properties": {
        "repoUrl": {
          "type": "string",
          "description": "URL of the source repository, when applicable",
          "example": "https://github.com/dust-tt/skills"
        },
        "filePath": {
          "type": "string",
          "description": "Path to the source skill file",
          "example": "support/SKILL.md"
        }
      }
    }
  }
}