diff --git a/dodo_tools/dodo.go b/dodo_tools/dodo.go
index 41127df..fdb7c8f 100644
--- a/dodo_tools/dodo.go
+++ b/dodo_tools/dodo.go
@@ -1,8 +1,8 @@
 package dodo_tools
 
 import (
-	"context"
 	"bytes"
+	"context"
 	"encoding/json"
 	"fmt"
 	"io"
@@ -16,7 +16,6 @@
 	projectId      string
 }
 
-
 func NewGetProjectConfigTool(apiBaseAddress string, projectId string) *llm.Tool {
 	tool := &GetProjectConfigTool{
 		apiBaseAddress: apiBaseAddress,
@@ -99,11 +98,10 @@
 
 type ValidateConfigOutput struct {
 	Success bool `json:"success"`
-	Errors  any `json:"errors,omitempty"`
+	Errors  any  `json:"errors,omitempty"`
 }
 
 func (d *ValidateConfigTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
-	fmt.Printf("%s\n", string(m))
 	var input ValidateConfigInput
 	if err := json.Unmarshal(m, &input); err != nil {
 		return nil, err
@@ -171,7 +169,7 @@
 
 type DeployProjectOutput struct {
 	Success bool `json:"success"`
-	Errors  any `json:"errors,omitempty"`
+	Errors  any  `json:"errors,omitempty"`
 }
 
 type deployProjectReq struct {
@@ -187,7 +185,6 @@
 	if err := json.Unmarshal([]byte(input.Config), &req.Config); err != nil {
 		return nil, err
 	}
-	fmt.Printf("### %+v\n", req)
 	jsonReq, err := json.Marshal(req)
 	if err != nil {
 		return nil, err
@@ -207,10 +204,91 @@
 	return llm.TextContent(string("Project deployed successfully")), nil
 }
 
+// Save
+
+type SaveProjectTool struct {
+	apiBaseAddress string
+	projectId      string
+}
+
+const (
+	saveProjectSchemaInputSchema = `
+{
+	"type": "object",
+	"properties": {
+		"config": {
+			"type": "string",
+			"description": "Serialized dodo-app configuration to save"
+		}
+	}
+}
+`
+)
+
+func NewSaveProjectTool(apiBaseAddress string, projectId string) *llm.Tool {
+	tool := &SaveProjectTool{
+		apiBaseAddress: apiBaseAddress,
+		projectId:      projectId,
+	}
+
+	return &llm.Tool{
+		Name:        "dodo_save_config",
+		Description: "A tool for saving the dodo-app configuration",
+		InputSchema: llm.MustSchema(saveProjectSchemaInputSchema),
+		Run:         tool.Run,
+		EndsTurn:    true,
+	}
+}
+
+type SaveProjectInput struct {
+	Config string `json:"config"`
+}
+
+type SaveProjectOutput struct {
+	Success bool `json:"success"`
+	Errors  any  `json:"errors,omitempty"`
+}
+
+type saveProjectReq struct {
+	Type   string         `json:"type"`
+	Config map[string]any `json:"config"`
+}
+
+func (d *SaveProjectTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+	var input SaveProjectInput
+	if err := json.Unmarshal(m, &input); err != nil {
+		return nil, err
+	}
+	req := saveProjectReq{
+		Type: "config",
+	}
+	if err := json.Unmarshal([]byte(input.Config), &req.Config); err != nil {
+		return nil, err
+	}
+	jsonReq, err := json.Marshal(req)
+	if err != nil {
+		return nil, err
+	}
+	resp, err := http.Post(fmt.Sprintf("%s/api/project/%s/saved", d.apiBaseAddress, d.projectId), "application/json", bytes.NewBuffer(jsonReq))
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	body, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return nil, err
+	}
+	if resp.StatusCode != http.StatusOK {
+		return nil, fmt.Errorf("failed to save project: %s", string(body))
+	}
+	return llm.TextContent(string("Project saved successfully")), nil
+}
+
 func NewDodoTools(apiBaseAddress string, projectId string) []*llm.Tool {
 	return []*llm.Tool{
 		NewGetProjectConfigTool(apiBaseAddress, projectId),
 		NewValidateConfigTool(apiBaseAddress),
 		NewDeployProjectTool(apiBaseAddress, projectId),
+		NewSaveProjectTool(apiBaseAddress, projectId),
 	}
-}
\ No newline at end of file
+}
