diff --git a/rpc/commands/commands.pb.go b/rpc/commands/commands.pb.go
index 5f589b1fc9c..710ddaf85ca 100644
--- a/rpc/commands/commands.pb.go
+++ b/rpc/commands/commands.pb.go
@@ -661,6 +661,7 @@ type ArduinoCoreClient interface {
 	PlatformUninstall(ctx context.Context, in *PlatformUninstallReq, opts ...grpc.CallOption) (ArduinoCore_PlatformUninstallClient, error)
 	// Upgrade an installed platform to the latest version.
 	PlatformUpgrade(ctx context.Context, in *PlatformUpgradeReq, opts ...grpc.CallOption) (ArduinoCore_PlatformUpgradeClient, error)
+	// Upload a compiled sketch to an Arduino board.
 	Upload(ctx context.Context, in *UploadReq, opts ...grpc.CallOption) (ArduinoCore_UploadClient, error)
 	// Search for a platform in the platforms indexes.
 	PlatformSearch(ctx context.Context, in *PlatformSearchReq, opts ...grpc.CallOption) (*PlatformSearchResp, error)
@@ -1264,6 +1265,7 @@ type ArduinoCoreServer interface {
 	PlatformUninstall(*PlatformUninstallReq, ArduinoCore_PlatformUninstallServer) error
 	// Upgrade an installed platform to the latest version.
 	PlatformUpgrade(*PlatformUpgradeReq, ArduinoCore_PlatformUpgradeServer) error
+	// Upload a compiled sketch to an Arduino board.
 	Upload(*UploadReq, ArduinoCore_UploadServer) error
 	// Search for a platform in the platforms indexes.
 	PlatformSearch(context.Context, *PlatformSearchReq) (*PlatformSearchResp, error)
diff --git a/rpc/commands/commands.proto b/rpc/commands/commands.proto
index f2201d0f4f3..25d7818b1cb 100644
--- a/rpc/commands/commands.proto
+++ b/rpc/commands/commands.proto
@@ -81,6 +81,7 @@ service ArduinoCore {
   // Upgrade an installed platform to the latest version.
   rpc PlatformUpgrade(PlatformUpgradeReq) returns (stream PlatformUpgradeResp);
 
+  // Upload a compiled sketch to an Arduino board.
   rpc Upload(UploadReq) returns (stream UploadResp);
 
   // Search for a platform in the platforms indexes.
diff --git a/rpc/commands/upload.pb.go b/rpc/commands/upload.pb.go
index 242b8bacb65..a7606d4695b 100644
--- a/rpc/commands/upload.pb.go
+++ b/rpc/commands/upload.pb.go
@@ -21,17 +21,30 @@ var _ = math.Inf
 const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
 type UploadReq struct {
-	Instance             *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"`
-	Fqbn                 string    `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"`
-	SketchPath           string    `protobuf:"bytes,3,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"`
-	Port                 string    `protobuf:"bytes,4,opt,name=port,proto3" json:"port,omitempty"`
-	Verbose              bool      `protobuf:"varint,5,opt,name=verbose,proto3" json:"verbose,omitempty"`
-	Verify               bool      `protobuf:"varint,6,opt,name=verify,proto3" json:"verify,omitempty"`
-	ImportFile           string    `protobuf:"bytes,7,opt,name=import_file,json=importFile,proto3" json:"import_file,omitempty"` // Deprecated: Do not use.
-	ImportDir            string    `protobuf:"bytes,8,opt,name=import_dir,json=importDir,proto3" json:"import_dir,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
-	XXX_unrecognized     []byte    `json:"-"`
-	XXX_sizecache        int32     `json:"-"`
+	// Arduino Core Service instance from the `Init` response.
+	Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"`
+	// Fully qualified board name of the target board (e.g., `arduino:avr:uno`).
+	// If this field is not defined, the FQBN of the board attached to the sketch
+	// via the `BoardAttach` method is used.
+	Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"`
+	// Path where the sketch to be uploaded is stored. Unless the `import_file`
+	// field is defined, the compiled binary is assumed to be at the location and
+	// filename under this path where it is saved by the `Compile` method.
+	SketchPath string `protobuf:"bytes,3,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"`
+	// The port of the board.
+	Port string `protobuf:"bytes,4,opt,name=port,proto3" json:"port,omitempty"`
+	// Whether to turn on verbose output during the upload.
+	Verbose bool `protobuf:"varint,5,opt,name=verbose,proto3" json:"verbose,omitempty"`
+	// After upload, verify that the contents of the memory on the board match the
+	// uploaded binary.
+	Verify     bool   `protobuf:"varint,6,opt,name=verify,proto3" json:"verify,omitempty"`
+	ImportFile string `protobuf:"bytes,7,opt,name=import_file,json=importFile,proto3" json:"import_file,omitempty"` // Deprecated: Do not use.
+	// Custom path to a directory containing compiled files. When `import_dir` is
+	// not specified, the standard build directory under `sketch_path` is used.
+	ImportDir            string   `protobuf:"bytes,8,opt,name=import_dir,json=importDir,proto3" json:"import_dir,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *UploadReq) Reset()         { *m = UploadReq{} }
@@ -117,7 +130,9 @@ func (m *UploadReq) GetImportDir() string {
 }
 
 type UploadResp struct {
-	OutStream            []byte   `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"`
+	// The output of the upload process.
+	OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"`
+	// The error output of the upload process.
 	ErrStream            []byte   `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
diff --git a/rpc/commands/upload.proto b/rpc/commands/upload.proto
index 1efe2789504..82b936eb293 100644
--- a/rpc/commands/upload.proto
+++ b/rpc/commands/upload.proto
@@ -22,17 +22,32 @@ option go_package = "github.com/arduino/arduino-cli/rpc/commands";
 import "commands/common.proto";
 
 message UploadReq {
+	// Arduino Core Service instance from the `Init` response.
     Instance instance = 1;
+	// Fully qualified board name of the target board (e.g., `arduino:avr:uno`).
+	// If this field is not defined, the FQBN of the board attached to the sketch
+	// via the `BoardAttach` method is used.
     string fqbn = 2;
+	// Path where the sketch to be uploaded is stored. Unless the `import_file`
+	// field is defined, the compiled binary is assumed to be at the location and
+	// filename under this path where it is saved by the `Compile` method.
     string sketch_path = 3;
+	// The port of the board.
 	string port = 4;
+	// Whether to turn on verbose output during the upload.
 	bool verbose = 5;
+	// After upload, verify that the contents of the memory on the board match the
+	// uploaded binary.
 	bool verify = 6;
-	string import_file = 7 [deprecated = true]; // DEPRECTAED: Use import_dir instead
+	string import_file = 7 [deprecated = true]; // DEPRECATED: Use import_dir instead
+	// Custom path to a directory containing compiled files. When `import_dir` is
+	// not specified, the standard build directory under `sketch_path` is used.
 	string import_dir = 8;
 }
 
 message UploadResp {
+	// The output of the upload process.
 	bytes out_stream = 1;
+	// The error output of the upload process.
 	bytes err_stream = 2;
 }
\ No newline at end of file