Let's describe creating a script in an example. We will create a script showing a message on a program startup. The creation process consists of three steps:
- Creating a directory
 - Writing a script descriptor
 - Writing a script code
 
Step #1: Create Directory
In the plugins/com.nomagic.magicdraw.jpython folder, create a scripts sub-folder, and then a folder for the particular script. For example, plugins/com.nomagic.magicdraw.jpython/scripts/example
Step #2: Write Script Descriptor
A script descriptor is a file written in XML and named script.xml. The script descriptor provides information about a script file to run, version of script, ID, and other.
In the created directory, create a script.xml file:
    <?xml version="1.0" encoding="UTF-8"?>
    <script
        id="example 1"
        name="Simple menu item"
        version="1.0"
        provider-name="No Magic"
        script-file="main.py"
        requiresApi="1.0">
    </script>
The following table describes the script.xml file structure:
| Element | Description | |
|---|---|---|
| script | Attributes | |
| Name | Description | |
| id | A scrip ID, should be unique. Used to identify a script. Example: “my.first.script.0” | |
| name | A script name. No strict rules applied to this attribute. Example: “Example script” | |
| version | A script version. Allows numbers separated with one dot value. Examples: “1.0”, “0.1” | |
| provider-name | A script provider name. A company or an author name. Example: "No Magic" | |
| script-file | A relative path to a script file. This file will be executed. Example:”main.py” | |
| requires-api | A program API version required by a script. Example:”1.0” | |
Step #3: Write Script Code
Then in the same directory, create the main.py file:
from javax.swing import JOptionPane # Script starts here print "Starting script, descriptor", pluginDescriptor JOptionPane.showMessageDialog( None, "I am a script!!!")
After saving files, restart your modeling tool. On a program startup, a message dialog should appear.

Variables Passed to Script
The program passes the one variable to the script pluginDescriptor. This variable contains information from the parsed script.xml file. A variable is an instance of a com.nomagic.magicdraw.jpython.PythonPluginDescriptor class.
A script can retrieve the script directory and other necessary information from the pluginDescriptor variable. There is no need to change any other fields for this variable.