diff --git a/sqlcl-mcp-server-intro.zip b/sqlcl-mcp-server-intro.zip
new file mode 100644
index 00000000..dd7739c9
Binary files /dev/null and b/sqlcl-mcp-server-intro.zip differ
diff --git a/sqlcl-mcp-server-intro/1-introduction.md b/sqlcl-mcp-server-intro/1-introduction.md
index 8710e0d9..7eed4c21 100644
--- a/sqlcl-mcp-server-intro/1-introduction.md
+++ b/sqlcl-mcp-server-intro/1-introduction.md
@@ -2,6 +2,190 @@
## About this Workshop
+In this workshop you will learn how to use the SQLcl MCP Server with an AI Agents. You'll discover how the SQLcl MCP Server can safely and securely compliment AI Agents to create the next generation of GenAI: Agentic Workflows.
+
+Estimated Time: 1 hours 10 minutes
+
+### Objectives
+
+In this workshop, you will:
+* Learn about the Model Context Protocol (MCP) and the SQLcl MCP Server
+* Configure an AI Agent
+* Register a SQLcl MCP Server
+* Explore SQLcl MCP Server "Tools"
+* Rely on sample prompts to accelerate your understanding of the SQLcp MC Server's capabilities
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud, LiveSQL, or FreeSQL account
+* Access to a currently supported Oracle database (or LiveSQL/FreeSQL account if participating in an instructor-led workshop)
+* Organizational Roles/Privileges to install the following software on your employer-provided work station:
+ * MS Visual Studio Code
+
+### About
+
+#### MCP
+
+The Model Context Protocol (MCP) is a proposed standard for how AI Agents might communicating with you and your information, applications, and data, through an intermediary called an MCP Server.
+
+An MCP Server allows you to take your core tech, like SQLcl, and "connect" it to an AI Agent. Once the Agent is "aware" of an MCP Server, it can then use whatever MCP Server "Tools" are available to it to create highly-developed workflows. This workflows would focus on the context you are in, like in this workshop: database object creation, simple web applictions driven by your data, simple monitoring dashboards, and more.
+
+**What does this mean for you?** You can ask the Agent to perform certain functions in and around your database, its objects, or data while simultaneously being "connected" to the Large-language Model (LLM) of your choice. Communicate using natural, plain-language; in what feels more like a collaboration with you and an AI Agent. This makes working with AI Agents less question-and-answer (Single-shot), and more continuous and iterative (Agentic Workflow).
+
+**Single-shot GenAI vs Agentic Workflows**
+
+Single-Shot AIs rely on constant user intervention; very manual. Whereas Agentic Workflows enable an Agent to orchestrate a complete workflow. But the user is still in control. These workflows are not only fully-fleshed out plans, but they are persistent, observable, and safe.
+
+ 
+
+
+
+ | | |
+ | -- | -- |
+ | **Single-Shot GenAI** | Issue a request/prompt → LLM performs task → Done |
+ | **Agentic Workflow** | User issues prompt → Agent builds a plan → User approves/declines/amends plan → Agent uses available tools to achieve goals → Agent delivers results → User iterates on existing/new plan|
+ {: title="Single-shot vs Agentic"}
+
+**An example Agentic Workflow:**
+
+Here is a sample use case involving the Oracle database, an AI Agent, and the SQLcl MCP Server:
+
+
+
+
+
+ 1. A user sets a task in natural language. Something like, "Find the top 10 most expensive queries from last week and recommend an index.”
+ 2. The Agent responds; building or showing a plan, and selecting the best MCP Server Tools to achieve the goal.
+ 3. The LLM (that underpins an AI Agent) might generate SQL or perhaps choose a prebuilt Tool from available MCP Servers. In this case it might call upon SQLcl to aid in performing a task.
+ 4. One of the SQLcl MCP Server's Tools is `connect`1. An Agent would know of this ahead of time, and use the `connect` Tool to connect to your Oracle database via JDBC using your stored credentials (an LLM never sees your passwords).
+ 5. Once connected, all of your standard security settings and rules will be enforced since your Agent is actually relying on the SQLcl MCP Server to interact with the Oracle database.
+ 6. Once SQLcl has delivered results to the Agent, the underlying LLM would summarize, validate, and propose next steps.
+ 7. The user might then approve, decline, or modify the revised action plan, at each step.
+
+#### Protocols
+
+Typically you'll interact with your MCP server through an AI Agent, using natural language queries. You can indicate which "Tools" to use from an MCP Server. Or, your Agent might suggest using them with zero prompting (depending on the Agent, and what "guardrails" you have in place). This communication between you, the AI Agent, and MCP Servers is "the Protocol."
+
+
+
+#### Capabilities
+
+Also known as "Primitives," these are the key capabilities of every MCP Server:
+
+| | |
+| -- | -- |
+| **Tools** | Executable functions that AI applications can invoke to perform actions (e.g., file operations, API calls, database queries) |
+|**Resources**| Data sources that provide contextual information to AI applications (e.g., file contents, database records, API responses)|
+|**Prompts**| Reusable templates that help structure interactions with language models (e.g., system prompts, few-shot examples)|
+{: title="MCP Server Primitives"}
+
+> ⚠ **Important:** You'll use SQLcl MCP Server's "Tools" in this LiveLab.
+
+
+
+### The SQLcl MCP server
+
+Since SQLcl is an already existing, and powerful command line tool for the Oracle database, it makes sense to "extend" its capabilitites with an MCP server.
+
+For many users, and scripting tools, SQLcl is the preferred way to interact with an Oracle database.
+
+
+
+But as an end-user, you probably want to know what you can do with this SQLcl MCP Server.
+
+#### Tools
+
+The SQLcl MCP server, like other MCP Servers provides you with contextual "Tools." In the case of SQLcl, your MCP server "comes alive" after you've configured your database credentials (Connect String, and/or Cloud Wallet).
+
+And once saved connections have been configured you can securely explore your Oracle database using natural language with an AI Agent (relying on the SQLcl MCP Sever Tools). If you are just beginning your database journey this means your queries become more of a conversation. The AI Agent, with the right MCP Server, ends up becomming more of a soundboard to bounce your ideas and intents off of.
+
+And if you are an experienced user, you can use a combination of natural language, *and* Oracle SQL and PL/SQL to achieve your goals with ease and even more speed.
+
+#### SQLcl MCP Server Tools
+
+|Tool | Parameters | Definition |
+| --- | ---------- | ---------- |
+| `list-connections` |
`filter`
`mcp_client`
`model`
|
This is the filter that will be used to refine the list of connections
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+| `connect` |
`connection_name`
`mcp_client`
`model`
|
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+| `disconnect` |
`mcp_client`
`model`
|
The name of the saved connection you want to connect to
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+| `run-sqlcl` |
`sqlcl`
`mcp_client`
`model`
|
The SQLcl command to execute
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+| `sql` |
`sql`
`mcp_client`
`model`
|
The SQL query to execute
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+{: title="SQLcl MCP Server Tools"}
+
+#### Security Considerations
+
+Let's talk about security; here is what and how SQLcl enforces security:
+
+ 
+
+Some things to consider when working with *any* AI Agent and/or MCP Server:
+
+- **Least Privileges:** Use read-only accounts for analytic/reporting tasks.
+- **Segregation of Duties:** Separate querying from DDL/DML (use different connections).
+- **Policies:** Apply existing AI data use policies; add Agent specific rules (e.g., “no PII extraction,” “no mass updates”).
+- **Avoid Tool Overlap:** Do not ship multiple MCP servers that claim the same capability (e.g., multiple “run SQL” tools) — Agents will get confused.
+- **Approval Workflow:** Require per step approval for anything that changes data, schema, security, or performance posture.
+- **Monitoring:**
+ - Tag queries (model + Agent) via SQL comments or logs (SQLcl MCP Server does this by default).
+ - Store Agent actions (who/what/when/db/plan) in an audit table.
+- **Defense in Depth:** Consider using:
+ - SQL Firewall patterns to block risky statements.
+ - Data Vault for privileged access management.
+ - Resource Manager for runaway queries.
+ - Row level security for least data exposure.
+
+
+
+> ⚠ **REMEMBER:** When an AI Agent uses the SQLcl MCP Server, credentials are never shown to the LLM/Agent--its all managed in an Oracle Wallet. Therefore the Agent *must* honor database Roles, Privileges, and security safeguards (VPD/Row Level Security, Data Vault, SQL Firewall, Resource Manager).
+
+#### MCP Best Practices
+| | |
+| :--: | -- |
+|***Do...***|
use read only connections by default.
keep MCP servers "focused" (no overlapping “run SQL” from multiple servers).
deploy Agents into production without strict database controls (Firewall, Vault, RLS, Resource Manager).
assume the LLM is always correct—review SQL, PL/SQL, plans, and results.
|
+{: title="MCP Server Best Practices"}
+
+### Summary
+
+| | |
+| -- | -- |
+| **What** | MCP Servers aide AI Agents in creating plans and executing workflows and tasks on the Oracle Database. |
+| **How** | The SQLcl MCP server provides tools (connect, run sql, awr, etc.) to your preferred AI Agent, using wallet-based credentials and Oracle’s enterprise-grade security features. |
+| **Why** | Huge productivity gains (database exploration, reporting, performance triage, etc.) while users remain in control. All while respecting security controls. |
+{: title="MCP Server Wrap-up"}
+
+
+
+**Footnotes**
+
+
+ An MCP Server will have been developed to have certain capabilities. These capabilites (technically known as Primitives) can be used or called upon by the AI Agent in the *Context* you are currently in. The "context" in the above example involved connecting to and interacting with an Oracle database via the SQLcl command line interface. You'll learn more about these Primitives in a later section.
+ ↑
+
+
+
+## Learn More
+
+* [MCP Server Introduction](https://blogs.oracle.com/database/post/introducing-mcp-server-for-oracle-database)
+* [Oracle official MCP Server repository](https://github.com/oracle/mcp/tree/main)
+* [SQLcl MCP Server Docs](https://docs.oracle.com/en/database/oracle/sql-developer-command-line/25.2/sqcug/using-oracle-sqlcl-mcp-server.html)
+
+## Acknowledgements
+
+* **Author**
Chris Hoina, Senior Product Manager, Database Tools
+* **Contributors**
Jeff Smith, Distinguished Product Manager, Database Tools
Linda Foindling
+* **Last Updated By/Date**
Chris Hoina, September 2025
+
+# Introduction
+
+## About this Workshop
+

```mermaid
diff --git a/sqlcl-mcp-server-intro/2-environment-set-up.md b/sqlcl-mcp-server-intro/2-environment-set-up.md
index acd8c42d..fdaf6af2 100644
--- a/sqlcl-mcp-server-intro/2-environment-set-up.md
+++ b/sqlcl-mcp-server-intro/2-environment-set-up.md
@@ -2,59 +2,57 @@
## Introduction
-
-### About Product/Technology (Optional)
-Enter background information here about the technology/feature or product used in this lab - no need to repeat what you covered in the introduction.
+In this Lab, you will install SQL Developer Extension for VS Code and SQLcl. You will also install Cline for VS Code.
### Objectives
-*List objectives for this lab*
-
In this lab, you will:
-* Create a FreeSQL account (or login if you have an already existing account)
-* Install, or modify a current VS Code IDE
-* Install and configure the Oracle SQL Developer for VS Code extension
+* Install SQL Developer Extension for VS Code
+* Install SQlcl
* Install the Cline for VS Code extension
-* Install and configure SQlcl
-
-### Prerequisites (Optional)
+* Configure the SQLcl MCP server
-*List the prerequisites for this lab using the format below. Fill in whatever knowledge, accounts, etc. is needed to complete the lab. **Do NOT list** each previous lab as a prerequisite.*
+### Prerequisites
This lab assumes you have:
-* An Oracle account
-* All previous labs successfully completed
+* Oracle Java 17 or 21 (*recommended*) installed
+* A personal computer or access to a workshop-provided workstation
+* Oracle SSO credentials (existing or workshop provided)
+* Reviewed the prerequisites of the Introduction lab
-*This is the "fold" - below items are collapsed by default*
-
-Highlighting indicates To-Do/Pending
## Task 1: Create a FreeSQL account
-1. In a separate tab, navigate to [freesql.com](https://www.freesql.com).
+1. From a new browser window/tab, navigate to [freesql.com](https://www.freesql.com).
2. Sign in with your existing Oracle account, or create a new account.
-3. Log in to [freesql.com](https://www.freesql.com) and click the
+3. Log in to [freesql.com](https://www.freesql.com) and click the Connect with [rotating language option]

+
+ 
+
+
-4. Take note of your FreeSQL credentials. You will need the following:
+4. Take note of your FreeSQL (or LiveSQL) credentials. You will need the following values:
- - Hostname
- - Port
- - Service Name
- - Username
- - Password
+ - Hostname
+ - Port
+ - Service Name
+ - Username
+ - Password
- 
+
-:memo: **Note:** You must click the Regenerate button to create a new password. Please save this password, as it will only be displayed once. It will not be saved or displayed across sessions.
+> ⚐ **NOTE:** You must click the ↺ Regenerate button to create a new password. Please save this password, as it will only be displayed once.
+>
+> *Your password will **NOT** be saved or displayed across sessions!*
-## Task 2: Oracle SQL Developer for VS Code
+## Task 2: Install SQL Developer Extension for VS Code
-1. Install Oracle the SQL Develeoper for VS Code extension. There are two installation options:
+1. Install SQL Developer Extension for VS Code; there are two installation options:
- 1. [Install](https://marketplace.visualstudio.com/items?itemName=Oracle.sql-developer) the latest Oracle SQL Developer for VS Code Extension.[^1]
- 2. From within VS Code, navigate to **Extensions**, search for "Oracle" and choose Install
+ - VS Code [Marketplace](https://marketplace.visualstudio.com/items?itemName=Oracle.sql-developer)1
+ - From within VS Code, navigate to **Extensions**, search for "Oracle" and choose Install

@@ -62,103 +60,135 @@ This lab assumes you have:

-[^1]: Visit the [Setting up Visual Studio Code](https://code.visualstudio.com/docs/setup/setup-overview) reference page for available configuration options and features of VS Code.
+
-2. Restart your VS Code session
-3. Navigate to the Oracle SQL Developer for VS Code extension (located in your Activity Bar)
+2. Once installed, navigate to SQL Developer Extension for VS Code(located in your Activity Bar)
- 
+ 
-4. Click the Create Connection button, begin entering in your FreeSQL connection details.
+3. Click the Create Connection button. Enter your database connection details.

-:warning: **Important:** Make sure you click the checkbox to "Save Password." The MCP server requires this saved password to establish a SQLcl connection on your behalf.
+
+
+> ⚠ **Important:** Make sure you click the checkbox (✓ Save Password) to save your password. Your SQLcl MCP Server relies on this securly saved password to establish a database connection.
-5. Choose **Basic** as the Connection Type, enter in your details.
+4. Choose **Basic** as the Connection Type. Enter in your details.
-6. Click the Test button to test your connection. When the test succeeds, click the Save button. This will save your connection, but not connect.
+5. Click the **Test** button to test your connection. When the test succeeds, click the **Save** button. This will save your connection, but not connect.

-7. Your new connection will appear in the Primary Side Bar. Click the connection name.
+6. Your new connection will appear in the Primary Side Bar. Click the connection name.

- Clicking the connnection name will do two things:[^2]
+ Clicking a connnection name does two things:2
- 1. Establish a connection to the FreeSQL database
- 2. Reveal the various database objects, links, directories, and other categories
+ - Establishes a connection to the the target database
+ - Reveals the various database objects, links, directories, and other categories in a schema

-[^2]: You can also right-click on a connection name to reveal the context menu. You can connect, disconnect, and edit connections as well as perform other common actions.
+7. Continue to the next task to install SQLcl.
-8. Continue to the next task to install SQLcl.
+
+**Footnotes**
+
+
+ Visit the Setting up Visual Studio Code reference page for available configuration options and features of VS Code.
+ ↑
+
+
+ You can also right-click on a connection name to reveal the context menu. You can connect, disconnect, and edit connections as well as perform other common actions.
+ ↑
+
+
+
+
## Task 4: Installing SQLcl
-1. Download and install SQLcl. Two possible options include:
+1. Download and install SQLcl. Download two ways:
- 1. With a package manager such as Homebrew (Mac)
- 2. Directly from the [SQLcl download page](https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/)
-
-2. Whether downloading from a package manager, or via a manual download, you must set the SQLcl `/bin` directory to your `$PATH`.
+ - With a package manager such as Homebrew (Mac):
+
+ **Homebrew command:**
+
+ ```shell
+
+ brew install --cask sqlcl
+
+ ```
+
+ - *or*, directly from the [SQLcl download page](https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/)
+
+> ⚐ **NOTE:** You must install SQLcl version 25.2 *or later* in order to use the SQLcl MCP Server.
+
+2. Whether downloading from a package manager, or via a manual download, a good practice is to set the SQLcl `/bin` directory to your `$PATH`. Here are some examples of how to achieve this:
**macOS**
*Homebrew installation*
- ```sh
- cat << EOF >> ~/.zprofile
- # Add SQLcl via Homebrew
- export PATH="$PATH:/opt/homebrew/Caskroom/sqlcl/[your SQLcl version]/sqlcl/bin"
- EOF
- ```
+ ```sh
+
+ cat << EOF >> ~/.zprofile
+ # Add SQLcl via Homebrew
+ export PATH="$PATH:/opt/homebrew/Caskroom/sqlcl/[your SQLcl version]/sqlcl/bin"
+ EOF
+
+ ```
*Manual installation*
- ```sh
- cat << EOF >> ~/.zprofile
- # Add SQLcl via manual installation
- export PATH="$PATH:/complete_file_path_to_your_sqlcldirectory/bin"
- EOF
- ```
+ ```sh
+
+ cat << EOF >> ~/.zprofile
+ # Add SQLcl via manual installation
+ export PATH="$PATH:/complete_file_path_to_your_sqlcldirectory/bin"
+ EOF
+
+ ```
**Windows**
- 1. In Search, search for and then select: System (Control Panel)
- 2. Click the Advanced system settings link.
- 3. Click Environment Variables.
- 4. In the section System Variables find the PATH environment variable and select it.
- 5. Click Edit.
- 6. If the PATH environment variable does not exist, click New.
- 7. In the Edit System Variable (or New System Variable) window, specify the value of the PATH environment variable.
-
- - *Example:* `/complete_file_path_to_your_sqlcl_directory/bin`
+ ```txt
+ 1. In Search, search for and then select: System (Control Panel)
+ 2. Click the Advanced system settings link.
+ 3. Click Environment Variables.
+ 4. In the section System Variables find the PATH environment variable and select it.
+ 5. Click Edit.
+ 6. If the PATH environment variable does not exist, click New.
+ 7. In the Edit System Variable (or New System Variable) window, specify the value of the PATH environment variable.
+
+ - *Example:* `/complete_file_path_to_your_sqlcl_directory/bin`
- 8. Click OK.
- 9. Close all remaining windows by clicking OK.
+ 8. Click OK.
+ 9. Close all remaining windows by clicking OK.
+ ```
+
-:memo: **Note:** Take note of this path, as you will need it for a later step.
+> ⚐ **NOTE:** Take note of this path, as you will need it for a later step.
-3. Close out any shell sessions, to pick up your changes.
+3. Close out any shell/terminal sessions to pick up these environment changes.
## Task 5: Installing the Cline for VS Code Extension
-1. Return to the Extensions tab. And search for the Cline extension.
+1. Return to the VS Code Extensions tab and search for the Cline extension.

-2. Install the extension. Once installed, navigate to the Cline extension (found in the Activity bar)
+2. Install the extension and navigate to the Cline extension (found in the Activity bar)
-3. Click the "Scale" icon to select an API provider.
+3. Click the ⚖ scale icon to select an API provider.


-4. Follow the prompts to enter in a valid API key. In this example Oracle Code Assist is used. A user authenticates with a valid Oracle SSO instead of an API key.
+4. Follow the prompts to enter in a valid API key. In this example Oracle Code Assist is used. In this example the user authenticates with a valid Oracle SSO instead of an API key.

@@ -166,29 +196,29 @@ This lab assumes you have:

-5. Next, you'll configure the SQLcl MCP Server.
-
-## Task 6: Configuring the SQLcl MCP server
+5. You'll configure the SQLcl MCP Server next.
-1. Click the MCP Servers icon, then on the Installed tab.
+## Task 6: SQLcl MCP server
-
+1. Click the ≡ MCP Servers icon, then on the "Installed" tab.
- 
+ 

-2. Click the botton. The `cline_mcp_settings.json` MCP Server configuration file will appear.
+2. Click the Configure MCP Servers botton. An empty `cline_mcp_settings.json` MCP Server configuration file will appear.

3. You will replace the empty JSON object with that of your SQLcl `/bin/sql` directory
-In this example, we have chosen to install SQLcl via Homebrew. Thus our SQLcl's `/bin` directory is located at:
+ In this example, we have chosen to install SQLcl via Homebrew. Thus our SQLcl's `/bin` directory is located at (yours may differ, only use this as a reference):
- ```sh
- opt/homebrew/Caskroom/sqlcl/25.2.2.199.0918/sqlcl/bin/sql
- ```
+ ```sh
+
+ opt/homebrew/Caskroom/sqlcl/25.2.2.199.0918/sqlcl/bin/sql
+
+ ```
4. Update your `cline_mcp_settings.json` so it points to the correct location. Use the following `JSON` as template:
@@ -207,49 +237,63 @@ In this example, we have chosen to install SQLcl via Homebrew. Thus our SQLcl's
```
-5. Save your configuration settings. In doing so, you may notice an "Updating MCP Servers..." message following by a "MCP Servers updated..." message.
+5. Save your configuration settings. You may notice an "Updating MCP Servers..." message followed by a "MCP Servers updated..." message. This is expected.

- You should now see `sqlcl` listed under the Installed MCP Servers tab.
+ You should now see `sqlcl` listed under the Installed MCP Servers tab.3

-6. Click the anywhere in the SQLcl bar to expand it. You'll see a list of SQLcl MCP Sever "Tools", their parameters, and definitions.
+6. Click anywhere in the SQLcl bar to expand it. You'll see a list of SQLcl MCP Sever "Tools", their parameters, and definitions. The contents of this LiveLab will focus primarily on the available SQLcl MCP Server Tools.

- Available tools summary:
+
- |Tool | Parameters | Definition |
- | --- | ---------- | ---------- |
- | `list-connections` |
`filter`
`mcp_client`
`model`
|
This is the filter that will be used to refine the list of connections
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
- | `connect` |
`connection_name`
`mcp_client`
`model`
|
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
- | `disconnect` |
`mcp_client`
`model`
|
The name of the saved connection you want to connect to
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
- | `run-sqlcl` |
`sqlcl`
`mcp_client`
`model`
|
The SQLcl command to execute
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
- | `sql` |
`sql`
`mcp_client`
`model`
|
The SQL query to execute
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
This is the filter that will be used to refine the list of connections
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+ | `connect` |
`connection_name`
`mcp_client`
`model`
|
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+ | `disconnect` |
`mcp_client`
`model`
|
The name of the saved connection you want to connect to
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+ | `run-sqlcl` |
`sqlcl`
`mcp_client`
`model`
|
The SQLcl command to execute
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+ | `sql` |
`sql`
`mcp_client`
`model`
|
The SQL query to execute
Specify the name and version of the MCP client implementation being used (e.g. Copilot, Claude, Cline...)
The name (and version) of the language model being used by the MCP client to process requests (e.g. gpt-4.1, claude-sonnet-4, llama4...
|
+ {: title="SQLcl MCP Server Tools"}
7. With your SQLcl MCP Server configured, you may now proceed to the next lab.
+
+
+**Footnotes**
+
+
+ We recommend naming your SQLcl MCP server with characters of the Latin-script alphabet, in lower case. Some AI Agents may have trouble with mixed-cases.
+ ↑
+
+
+
## Troubleshooting
-• MCP server not visible: Check JSON registration path/quotes; confirm sql --mcp runs locally.
-• No connections found: Define named connections in VS Code/SQLcl; verify wallet path/tnsnames.
-• Agent keeps choosing the wrong tool: Rename tools for clarity; remove overlapping servers; provide stronger tool prompts.
-• LLM hallucinating SQL: Prefer structured tools (schema explorer, awr); add examples in resources; enforce read only.
-• Long running queries: Add timeouts, row limits, and place agent sessions into a restricted consumer group.
+Some helpful tips if you run into trouble:
+| | |
+| -- | -- |
+| ***MCP server not visible*** | Check JSON registration path/quotes; confirm sql --mcp runs locally. |
+| ***No connections found*** | Define named connections in VS Code/SQLcl; verify wallet path/tnsnames. |
+{: title="Troubleshooting tips"}
## Learn More
-*(optional - include links to docs, white papers, blogs, etc)*
-
-* [URL text 1](http://docs.oracle.com)
-* [URL text 2](http://docs.oracle.com)
+* [Introducing the Model Context Protocol](https://www.anthropic.com/news/model-context-protocol)
+* [MCP Server Introduction](https://blogs.oracle.com/database/post/introducing-mcp-server-for-oracle-database)
+* [Oracle official MCP Server repository](https://github.com/oracle/mcp/tree/main)
+* [SQLcl MCP Server Docs](https://docs.oracle.com/en/database/oracle/sql-developer-command-line/25.2/sqcug/using-oracle-sqlcl-mcp-server.html)
## Acknowledgements
-* **Author** -
-* **Contributors** - -- optional
-* **Last Updated By/Date** - -->
+
+* **Author**
Chris Hoina, Senior Product Manager, Database Tools
+* **Contributors**
Jeff Smith, Distinguished Product Manager, Database Tools
+* **Last Updated By/Date**
Chris Hoina, September 2025
+
diff --git a/sqlcl-mcp-server-intro/3-using-the-mcp-server.md b/sqlcl-mcp-server-intro/3-using-the-mcp-server.md
index e221fc79..e671f120 100644
--- a/sqlcl-mcp-server-intro/3-using-the-mcp-server.md
+++ b/sqlcl-mcp-server-intro/3-using-the-mcp-server.md
@@ -2,106 +2,168 @@
## Introduction
-*Describe the lab in one or two sentences, for example:* This lab walks you through the steps to ...
+In this lab you will become acquainted with Cline, an open-source AI coding Agent, and the SQLcl MCP server.
-Estimated Time: n minutes
+The scenarios in this LiveLab consider Cline be the interpreter to your plain language requests and prompts. Those requests and any prompts are then "translated" and sent to the SQLcl MCP server.
-### About Product/Technology (Optional)
-Enter background information here about the technology/feature or product used in this lab - no need to repeat what you covered in the introduction.
+The SQLcl MCP server recieves its directives from the AI Agent, acting upon your requests and intents, communicating with the database on your behalf. This new way of working with your Oracle database allows for a more natural/plain language, conversation-based interaction.
-### Objectives
+Estimated Time: 10 minutes
-*List objectives for this lab*
+### Objectives
In this lab, you will:
-* Objective 1
-* Objective 2
-* Objective 3
+* Learn how to:
+ - request MCP Server "Tools"
+ - review and approve Tool requests
+* Observe how the your responses inform an AI Agent's behavior
+* Discover how an LLM generates SQL and presents it to the SQLcl MCP Server for execution
+* Review the the LLM's results and summaries of findings
+* Review the SQLcl MCP Server's task log in your schema
-### Prerequisites (Optional)
-
-*List the prerequisites for this lab using the format below. Fill in whatever knowledge, accounts, etc. is needed to complete the lab. **Do NOT list** each previous lab as a prerequisite.*
+### Prerequisites
This lab assumes you have:
-* An Oracle account
-* All previous labs successfully completed
+* VS Code installed
+* Installed the Cline for VS Code Extension
+* Configured an Oracle Database connection using the SQL Developer Extension for VS Code
+
+
-*This is the "fold" - below items are collapsed by default*
+> ⚐ **NOTE:** If participating in a workshop, you may optionally use your the credentials provided to you.
-## Task 1: MCP introspects schema
+## Task 1: Testing your configuration
-(optional) Step 1 opening paragraph.
+1. Is the MCP Server working?
-1. Allow the MCP server to gather insights from your schema
+ You will need to confirm that the SQLcl MCP Server is working *before* you can begin interacting with it.
-2.
+2. Locate the Cline extension. Ensure you see the Agent prompt. Notice the **Plan** and **Act** modes. You will toggle between these two modes depending on your intent or the prompts used.
-
+
+3. Enable **Plan** mode. Then, in the Task input area of Cline, enter the following prompt:
-2. Sub step 2
+ ```txt
+
+ connect to my database and run a test query to make sure everything is working as expected
+
+ ```
+
+4. Cline will create a plan and respond by asking permission to use your SQLcl MCP Server via the `list-connections` tool. You should see something like this:
- 
+ 
-4. Example with inline navigation icon  click **Navigation**.
+> ⚐ **NOTE:** Note the tool name, followed by the arguments. In this case, Cline wants to "see" what database connections are available.
-5. Example with bold **text**.
+5. Select the **Approve** button to allow the Agent to continue its plan.
- If you add another paragraph, add 3 spaces before the line.
+ The Agent will use your Oracle Database connection, and ask to connect to it, via the `connect` tool.
-## Task 2:
+6. You will again be prompted to approve a request. The message will look something like this:
-1. Sub step 1 - tables sample
+ ```json
+ {
+ "connection_name": "your connection name",
+ "mcp_client": "Cline",
+ "model": "claude-3-5-sonnet-20241022"
+ }
+ ```
- Use tables sparingly:
+7. Approve the request to advance the Agent's plan to the next step.
- | Column 1 | Column 2 | Column 3 |
- | --- | --- | --- |
- | 1 | Some text or a link | More text |
- | 2 |Some text or a link | More text |
- | 3 | Some text or a link | More text |
+8. If the connection is successful, you will see two things:
-2. You can also include bulleted lists - make sure to indent 4 spaces:
+ - the raw feedback from the `connect` tool
+ - an LLM-generated summary
- - List item 1
- - List item 2
+ *Example:*
-3. Code examples
+ ```txt
+ Excellent! The connection to your database was successful. I can see we're connected to Oracle Database 23.0.0.0.0 in READ WRITE mode with AL32UTF8 character set.
+
+ Now let me run a test query to verify everything is working properly. I'll start with a simple query to check the current database time:
+ ```
- ```
- Adding code examples
- Indentation is important for the code example to appear inside the step
- Multiple lines of code
- Enclose the text you want to copy in .
+> ⚐ **NOTE:** LLM training data can vary widely among versions and vendors. Thus, an LLM may generate one of several different types of queries to satisfy our request to 'test' the connection and system.
+
+⚠ **Warning:** It is very important that you review the SQL, or update your prompt to include the exact SQL you want the Agent to use.
+
+
+
+9. Scroll through the "sql" attribute to review the SQL statement.
+
+ 
+
+ In the example the complete SQL statement will resemble the following:
+
+ ```sql
+ SELECT /* LLM in use is claude-3-5-sonnet-20241022 */
+ SYSDATE as current_time,
+ USER as connected_user
+ FROM DUAL
```
-4. Code examples that include variables
+10. Once you've confirmed that the generated SQL is correct, click **Approve** to execute the next task request. The Agent will continue with it's plan.
- ```
- ssh -i
- ```
+
-## Learn More
+
+
+ 
-*(optional - include links to docs, white papers, blogs, etc)*
+> ⚐ **NOTE:** "Connected_User" will be the username you provided in the previous lab.
-* [URL text 1](http://docs.oracle.com)
-* [URL text 2](http://docs.oracle.com)
+## Task 2: Closing the connection
+
+1. As a best practice, you should prompt Cline to close your database connection when you are finished. Cline will prompt you for permission to use the `disconnect` tool. Click **Approve**.
+
+2. The Cline Agent will finish its task and provide you with a summary steps used to achieve your original task or prompts.
+
+> ⚐ **NOTE:** The Agent may wish to continue running more queries, in an attempt to provide you with more information about your database. It is up to **YOU** to decide. *What do you do?*
+> - allow it to continue
+> - deny any follow-up requests, or
+> - provide it with a follow-up prompt to cease operations
+
+
+
+3. Before you finish this lab, you can review a log of the queries performed by the SQLcl MCP Server on behalf of the AI Agent. Locate SQL Developer Extension for VS Code in the Activity Panel.
+
+4. Click the connection that the SQLcl MCP Server used to connect to your database.
+
+5. Click the `Tables` object to expand it. Locate the `DBTOOLS$MCP_LOG` table, and click it to open up a new panel.
+
+6. Click the Data tab to review the interactions from your previous Cline tasks. These logs will capture the SQL, PLSQL, and SQL scripts that were executed on your behalf (via Cline), by the SQLcl MCP Server.
+
+ 
+
+7. That's it! You are now ready to start exploring the power of your AI Agent, it's LLMs, and your Oracle Database via the SQLcl MCP Server!
+
+## Learn More
+
+* [MCP Server Introduction](https://blogs.oracle.com/database/post/introducing-mcp-server-for-oracle-database)
+* [Oracle official MCP Server repository](https://github.com/oracle/mcp/tree/main)
+* [SQLcl MCP Server Docs](https://docs.oracle.com/en/database/oracle/sql-developer-command-line/25.2/sqcug/using-oracle-sqlcl-mcp-server.html)
## Acknowledgements
-* **Author** -
-* **Contributors** - -- optional
-* **Last Updated By/Date** - -->
+
+* **Author**
Chris Hoina, Senior Product Manager, Database Tools
+* **Contributors**
Jeff Smith, Distinguished Product Manager, Database Tools
+* **Last Updated By/Date**
Chris Hoina, September 2025
+
diff --git a/sqlcl-mcp-server-intro/4-build-database-objects.md b/sqlcl-mcp-server-intro/4-build-database-objects.md
new file mode 100644
index 00000000..1bb63e41
--- /dev/null
+++ b/sqlcl-mcp-server-intro/4-build-database-objects.md
@@ -0,0 +1,276 @@
+# Build a schema: tables, data, and views
+
+## Introduction
+
+In this lab you will use the SQLcl MCP server to create new database tables and objects. You will then populate these tables with sample data, and then ask your AI Agent to call upon the SQLcl MCP Server to create several views of these tables (perhaps to use for future projects).
+
+
+
+> ⚐ **NOTE:** A sample prompt has been provided for you. This Lab, screenshots, and expected output are based on the instructions provided in the sample prompt.
+
+
+
+Estimated Time: 10 minutes
+
+### Objectives
+
+In this lab, you will:
+* Review the provided sample prompt
+* Execute the prompt using the available tools of the SQLcl MCP server in:
+ * Plan mode and review output
+ * Act mode (where needed) and review the output
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud, LiveSQL, or FreeSQL account
+* Access to a currently supported Oracle database (or LiveSQL/FreeSQL account if participating in an instructor-led workshop)
+* Organizational Roles/Privileges to install the following software on your employer-provided work station:
+ * MS Visual Studio Code
+
+## Task 1: Locate the create data and views prompt
+
+1. A sample prompt has been provided for you (see below). This prompt can be used as-is with your Agent while in "Plan" mode. Alternatively you may use it as a reference, while creating your own scenario.
+
+
+ (click) Sample prompt
+
+
+
+
+
+ ```txt
+
+ Title: Creating mock Schema data, and relevant views
+
+ Task 1: Connecting and creating database objects
+
+ 1. Connect as the SQL_FREESQL_01 user
+ 2. Create four tables named car, truck, motorcycle, and manufacturer in the SQL_FREESQL_01 schema with the following characteristics (please review the three "NOTE" notes in this section before creating the tables):
+
+ The car, truck, motorcycle tables should include colums such as:
+ - make
+ - model
+ - year of manufacture
+ - engine displacement
+ - wheelbase
+
+ The manufacturer table should include details such as:
+ - Doing business as (dba) name
+ - Headquarters location city
+ - Headquarters location country
+ - Year manufacturer was established/incorporated
+ - Privately held or publiclly held company
+
+ Create, where applicable for the tables:
+ - indexes
+ - comments
+ - tags
+ - references
+ - primary and foreign keys
+
+ NOTE: For all tables, recommend any other additional columns you think may be relevant.
+
+ NOTE: Ensure that no integrity constraints will be violated. Parent keys, in referred tables, should be verified of their existence before being used in any fictitous data. As an example, make sure the manufacturer_id exists across the various tables.
+
+ NOTE: For simplicity, include Internal Combustion Engine (ICE) vehicles only.
+
+ Task 2: Inserting data
+
+ 1. Create 50 unique entries each (in each table) of fictitious, but plausible data for the following tables(please review the two "NOTE" notes in this section before inserting the table data):
+ - car
+ - truck
+ - motorcycle
+
+ NOTE: When performing the inserts, bulk insert the data with syntax such as this:
+
+ INSERT INTO t(col1, col2, col3) VALUES
+ ('val1_1', 'val1_2', 'val1_3'),
+ ('val2_1', 'val2_2', 'val2_3'),
+ ('val3_1', 'val3_2', 'val3_3');
+
+
+ NOTE: Take care to not create duplicate data in any of the tables.
+
+ 2. Create 25 unique entries of fictitious, but plausible data for the following table (please review the two "NOTE" notes in this section before inserting the table data):
+ - manufacturer
+
+ NOTE: When performing the inserts, bulk insert the data with syntax such as this:
+
+ INSERT INTO t(col1, col2, col3) VALUES
+ ('val1_1', 'val1_2', 'val1_3'),
+ ('val2_1', 'val2_2', 'val2_3'),
+ ('val3_1', 'val3_2', 'val3_3');
+
+ NOTE: Take care to not create duplicate data in this table.
+
+ 3. After inserting the data show me the first 5 rows of each table individually. If no data exists, then:
+ - reattempt the inserting of the data in the empty tables, then:
+ - show the first 5 rows of the table, and:
+ - continue this until we are certain that table data exists in all the tables
+
+ Task 3: Create four unique views
+
+ 1. Create the following views for me, according to these specifications:
+
+ Vehicle Count by Manufacturer: The view shows the count of vehicles (cars, trucks, motorcycles) for each manufacturer. For example, Toyota, Ford, Honda, and Rivian have entries in all three vehicle categories, while Yamaha, Ram, Kawasaki, Harley-Davidson, GMC, and Ducati have entries in one or two categories.
+
+ Average Engine Displacement by Vehicle Type: The average engine displacement for cars is approximately 1.87 liters, for trucks it's about 4.07 liters, and for motorcycles, it's significantly higher at 43.74 liters.
+
+ Vehicles by Year of Manufacture: The view shows the count of vehicles manufactured each year. The years 2020, 2021, and 2022 have 7, 9, and 10 vehicles respectively.
+
+ Manufacturer Details with Vehicle Counts: This view provides detailed information about each manufacturer along with the count of vehicles they manufacture. For instance, Toyota, Ford, Honda, and Rivian are listed with their respective vehicle counts.
+
+ 2. Recommend to me, two additional unique views. These views should:
+ - provide me with unique and/or intersting insights
+ - be useful enough to include in a dashboard, should I want to do this in the future
+ - Feature in-line commenting, so future users can understand what the view is doing
+ 3. After reviewing the views you propose I will either approve or ask you to reiterate.
+ 4. Once I am satisfied, I will approve, and you will create these views.
+
+ Task 4: Disconnect
+
+ 1. Once we are complete, you will disconnect from the Oracle database.
+
+ ```
+
+
+
+
+
+> ⚐ **NOTE:** This Lab is designed to be open-ended, accordingly, your individual results will vary. Feel free to "go off-script" ☺!
+
+
+2. Review the provided prompt in your IDE, browser, or above. You will notice a single heading and several sub-headings. Each sub-heading will serve as a phase or step for this scenario:
+
+ ```md
+ # Creating mock Schema data, and relevant views
+ ## Connecting and creating database objects
+ ## Inserting data
+ ## Create four unique views
+ ## Disconnect
+ ```
+
+3. Next, familiarize yourself with the details the sub-tasks in the included prompt. Notice the descriptive and prescriptive tone. If you decide to improvise, ensure you provide sufficient instruction for your AI Agent. Doing so will help you achieve better, more improved, and predictable outcomes.
+
+4. Once you have reviewed the prompt, navigate to the Cline extension in VS Code.
+
+5. Make sure you are in **Plan** mode. As a best practice, remaining in **Plan** mode will allow you to "step through" Cline's execution. Should an AI Agent deviate from your agreed upon plan, you can periodically "nudge" it back on course.
+
+6. If you decide to use the prepared `.md` file, click the `+` icon (i.e., Add Files & Images icon) and select the file.
+
+7. Before continuing, consider adding in some prepatory text to help guide the Agent. An example:
+
+ ```txt
+
+ Review the steps in the included markdown file. Detail the steps you intend to take to achieve the desired outcome. And await for my approval before proceeding.
+
+ ```
+
+8. Once satisfied, press Enter or the arrow icon.
+
+9. An Agent will likely provide you with its plan and request your consent to proceed. When a plan is acceptable can click the `Approve` button.
+
+ 
+
+## Task 2: Database tasks
+
+1. Your Agent will establish a collection using the SQLcl MCP Server's `connect` tool. You may also see an accompanying execution plan. If everything looks good proceed to the next step.
+
+
+
+2. You will then probably notice Agent using the `run-sql` tool to create four new tables in your schema:
+
+ 
+
+3. If prompted, select `Approve` to allow the creation of these objects.
+
+4. Once the tables have been created for you, the Agent will suggest "fictitious, but plausible data" for populating your tables (should you decide to use the provided prompt as-is). You can review the data suggested, and once satisifed, `Approve` the proposed `INSERT` statements.
+
+5. At times, your Agent may exhibit unexpected behavior. Take this example, where a user is asked to enable **Act** mode to complete a task. Review requests carefully and respond appropriately.
+
+ 
+
+
+
+> ⚐ **NOTE:** The LLM model used, network latency, the workstation processor, other ongoing processes might impact your Agent's behavior. You will need to review the request and proceed cautiously. In this example, the request is relatively simple:
+
+6. You may even notice odd behavior such as is illustrated when executing these `INSERT` statements (e.g., only a few rows inserted at a time). Review the Agent's summaries and requests, and if you agree, proceed with any proposed actions/plans.
+
+ 
+
+## Task 3: Reviewing the new objects
+
+1. When your new objects have been created and populated, refer again to the included prompt. You'll find there is a task to fetch the first five rows of each of your tables. Your tables might return information similar to those in the images below.
+
+ 
+
+2. If your objects are created and populated as expected (everything checks the "reasonableness test"), allow the Agent to continue.
+
+> ⚐ **NOTE:** You might also choose to review the tables from the SQL Developer Extension for VS Code.
+
+## Task 4: Creating new views
+
+1. The included prompt contains a task for creating views for these new tables. The steps of that prompt section are designed to emulate actions that you might use on your own. The included prompt will have the SQLcl MCP server create four views, and recommend two additional.
+
+2. This prompt will rely on the SQLcl MCP Server to create the following views:
+
+ | View Name | Descriptions |
+ | --- | --- |
+ | Vehicle Count by Manufacturer | The view shows the count of vehicles (cars, trucks, motorcycles) for each manufacturer. For example, Toyota, Ford, Honda, and Rivian have entries in all three vehicle categories, while Yamaha, Ram, Kawasaki, Harley-Davidson, GMC, and Ducati have entries in one or two categories.|
+ | Average Engine Displacement by Vehicle Type | The average engine displacement for cars is approximately 1.87 liters, for trucks it's about 4.07 liters, and for motorcycles, it's significantly higher at 43.74 liters. |
+ |Vehicles by Year of Manufacture| The view shows the count of vehicles manufactured each year. The years 2020, 2021, and 2022 have 7, 9, and 10 vehicles respectively.|
+ |Manufacturer Details with Vehicle Counts| This view provides detailed information about each manufacturer along with the count of vehicles they manufacture. For instance, Toyota, Ford, Honda, and Rivian are listed with their respective vehicle counts |
+ {: title="Views from provided prompt"}
+
+
+3. If you agree with the proposed views, use them. Otherwise, you can suggest edits to the views and then approve.
+
+4. Your prompt includes a request to propose two additional, unique views. Yours may be the same, they may even differ. A possible example:
+
+ 
+
+5. Compare your results. What did you come up with?
+
+## Task 5: Disconnecting
+
+1. At the end of your prompt, your Agent will request to disconnect from the database using SQLcl's MCP server `disconnect` tool.
+
+2. You might see a summary of the actions performed once you disconnect. Compare your results. What did you end up with?
+
+ 
+
+3. And that's it, you're done!
+
+## Task 6: Wrap-up
+
+1. Like the previous labs, you may have used the included prompt to guide the AI Agent. While not mandatory, it is a good practice to use a prompt as it allows you to iteratively refine your workflows, resulting in a more predictable outcome.
+
+2. When using the provided prompt as a reference tool, you'll notice certain patterns and characteristics of these prompts. Remember these characteristics and integrate then into your future workflows:
+
+ - A "preamble" that defines certain global assumptions, limitations, and actions
+ - Tasks are clearly defined and broken into sub-tasks
+ - Idiosyncracies are addressed throughout the prompt
+ - For edge cases, or for where training data may not exist, examples are provided to help guide the Agent
+ - SQLcl's MCP Tools are explicitly mentioned
+ - There is a clear delineation between your schema and that belonging to another user
+
+3. Once you are satisfied with this Lab, continue to the next one.
+
+## Learn More
+
+* [MCP Server Introduction](https://blogs.oracle.com/database/post/introducing-mcp-server-for-oracle-database)
+* [Oracle official MCP Server repository](https://github.com/oracle/mcp/tree/main)
+* [SQLcl MCP Server Docs](https://docs.oracle.com/en/database/oracle/sql-developer-command-line/25.2/sqcug/using-oracle-sqlcl-mcp-server.html)
+
+## Acknowledgements
+
+* **Author**
Chris Hoina, Senior Product Manager, Database Tools
+* **Contributors**
Jeff Smith, Distinguished Product Manager, Database Tools
+* **Last Updated By/Date**
Chris Hoina, September 2025
+
diff --git a/sqlcl-mcp-server-intro/5-build-a-react-app.md b/sqlcl-mcp-server-intro/5-build-a-react-app.md
new file mode 100644
index 00000000..0e055ef6
--- /dev/null
+++ b/sqlcl-mcp-server-intro/5-build-a-react-app.md
@@ -0,0 +1,178 @@
+# Build a React app
+
+## Introduction
+
+In this Lab you will use Cline and the SQLcl MCP Server to create a starter web application. This lab's prompt will generate a React-based application. However, should you decide, you can opt to use the framework/library of your choosing.
+
+Estimated Time: 12 minutes
+
+### Objectives
+
+In this lab, you will:
+* Review the included prompt
+* Use the provided prompt:
+ * to guide you through the creation process, *or*
+ * as a reference guide while you improvise your own app
+
+### Prerequisites
+
+This lab assumes you have:
+* All previous labs successfully completed
+* VS Code installed
+* Installed the Cline for VS Code Extension
+* Configured an Oracle Database connection using the Oracle SQL Developer for VS Code extension
+
+
+
+> ⚐ **NOTE:** In this lab you must allow your AI Agent to create a new project folder, scaffold a sample React application, and if required, install project dependencies (e.g., npm, Node, Express, React, etc. ).
+
+
+
+> ⚐ **NOTE:** If participating in a workshop, you may optionally use your the credentials and workstation provided to you.
+
+
+
+## Task 1: Review the prompt
+
+1. A sample prompt has been provided for you. You may review it here, open the `.md` file in a new tab, or download the file locally.
+
+
+ (click) Sample prompt
+
+
+
+
+
+ ```txt
+
+ Title: Single Web Page Application example
+
+ Task 1: Overview
+
+ 1. You will create a sample single page React application using available information in the SQL_FREESQL_01 schema.
+ 2. You have access to view the table data in the CO schema. The sample application will use data from these CO tables.
+ 3. You will make provisions for dynamically fetching data from the database, but the version 1 of this application will use hard-coded values from the CO table data.
+ 4. You will follow the instructions in the following steps
+
+ Task 2: CO schema exploration
+
+ 1. Connect as the SQL_FREESQL_01 user and explore the CO tables
+ 2. Provide me with a summary of insights on the CO tables
+ 3. Recommend to me some potential statistics/metrics in this CO schema that would be interesting for the single page web application.
+ 4. Allow me to choose one of these statistics/metrics to use for the single page web application.
+
+ Task 3: Creating the web application
+
+ 1. Create a project directory before scaffolding a project.
+ 2. Once the directory is created, scaffold the single page React application.
+ 3. Using what you learned about the CO schema, and the selection I made in the CO schema exploration section, reconnect as the SQL_FREESQL_01 user and query the values you need to populate the React application.
+ 4. The React application should include a graph or chart to visualize the data. And there should be a table underneath, or next to the visualization that shows the values.
+ 5. Share with me what you intend to display on the React page before altering the app source files.
+
+ Task 4: Provide some helpful inight
+ 1. Once complete, provide me with a list of next steps, or recommended actions for making this more dynamic.
+ 2. Answer the following questions:
+ - What options do I have for establishing an Oracle database connection so my app can update in real time?
+ - What options do I have if a user wants to update one of these underlying tables?
+ - What other functions do you recommend this app should have?
+ - What other Oracle database technologies could I use in/with this React application?
+
+ Task 5: Launch the web application
+
+ 1. Launch the web application and review it for accuracy and expected outcome
+ 2. If the data and visualization are not visible on screen, please debug as needed.
+
+ ```
+
+
+
+
+> ⚐ **NOTE:** This Lab is designed to be open-ended, accordingly, your individual results will vary. Feel free to improvise ☺ !
+
+
+2. After reviewing the prompt, you may wish to save it locally. But, before you begin, review the various sections of the prompt:
+
+ - Overview
+ - CO Schema exploration
+ - Create the web application
+ - Provide helpful insight
+ - Disconnect from the database
+ - Launch the web application
+
+3. If you decide to improvise, may use the prompt as a reference. Know that your results may differ from the lab's expected output. If you get stuck, start over with the provided prompt and let the LLM and the SQLcl MCP server do much of the work for you.
+
+## Task 2: Observing the prompt execution
+
+1. The prompt that you have been provided is the result of iterative testing. The prompt is provided to teach you how to guide your LLM to best utilize the SQLcl MCP Server. Following along with the prompt should result in a repeatable and predictable outcome.
+
+> ⚐ **NOTE:** You should expect to complete this lab with a version of the application that is unique to you; but that still closesly resembles any examples and images in this Lab.
+
+2. When ready, navigate to your Cline extension. Toggle the Agent to **Plan** mode.
+
+3. Click the `+` icon to add files and images to the task. Select the file name you chose for the prompt.
+
+4. If you decide to use the prompt in its entirety, include some prepatory instructions in additon to the prompt file; something like this:
+
+ ```txt
+ Review the steps in the included markdown file. Detail the steps you intend to take to achieve the desired outcome. And await for my approval before proceeding.
+ ```
+
+5. Carefully follow along with the Agent's actions, providing feedback and coaching as needed.
+
+ 
+
+6. Should the Agent request to transition to **Act** mode, proceed carefully. Only approve actions you know to be safe, and reject those actions which you deem unecessary or risky.
+
+ 
+
+7. Continue building out your application and review the next task once you have successfully launched your application.
+
+## Task 3: Comparing notes
+
+1. Compare the sample application to your own:
+
+ 
+
+ 
+
+2. By now you should have a sample React application. While your values are hard-coded, you might ask the Agent to build the app out further.
+
+## Task 4: Troubleshooting
+
+1. Issues? Review these following steps and attempt to resolve the problem.
+
+2. Merge conflict markers (e.g. `>>>>>>> REPLACE`)? LLMs can sometimes have issues with advanced file creation, preparation, and updating. One common issue is their inability to remove merge conflict markers, you may need to manually remove and save a file every now and again.
+
+ 
+
+3. The Agent may forget, or narrow its focus too much. The Agent may require periodic prompting. For instance, in this example, we reiterated the request to connect as a specific user:
+
+ 
+
+4. An Agent might *convincingly* tell you a task has been accomlished, when in fact it has not. In cases such as these, you may need to provide the Agent with quality feedback markers, or actual errors from your application's console log.
+
+ 
+
+## Task 5: Wraping up
+
+1. By now you should have a starter React web application.
+
+2. If you attempted to create one on your own, try this Lab again but use the provided prompt verbatim. Compare the results; what worked, what didn't work?
+
+3. Need more help? Review the **Learn More** section of this Lab for helpful blog posts and tutorials.
+
+## Learn More
+
+* [MCP Server Introduction](https://blogs.oracle.com/database/post/introducing-mcp-server-for-oracle-database)
+* [Oracle official MCP Server repository](https://github.com/oracle/mcp/tree/main)
+* [SQLcl MCP Server Docs](https://docs.oracle.com/en/database/oracle/sql-developer-command-line/25.2/sqcug/using-oracle-sqlcl-mcp-server.html)
+
+## Acknowledgements
+
+* **Author**
Chris Hoina, Senior Product Manager, Database Tools
+* **Contributors**
Jeff Smith, Distinguished Product Manager, Database Tools
+* **Last Updated By/Date**
Chris Hoina, September 2025
diff --git a/sqlcl-mcp-server-intro/6-build-a-html-dashboard.md b/sqlcl-mcp-server-intro/6-build-a-html-dashboard.md
new file mode 100644
index 00000000..cde02d9a
--- /dev/null
+++ b/sqlcl-mcp-server-intro/6-build-a-html-dashboard.md
@@ -0,0 +1,140 @@
+# Build an HTML Dashboard
+
+## Introduction
+
+In this lab, you'll discover how easy it is to instruct an LLM to create a basic HTML dashboard with the help of the SQLcl MCP server.
+
+Estimated Time: 10 minutes
+
+### Objectives
+
+In this lab, you will:
+* Review the included prompt
+* Use the provided prompt:
+ * to guide you through the creation process, *or*
+ * as a reference guide while you improvise your own HTML dashboard
+
+### Prerequisites
+
+This lab assumes you have:
+* All previous labs successfully completed
+* VS Code installed
+* Installed the Cline for VS Code Extension
+* Configured an Oracle Database connection using the Oracle SQL Developer for VS Code extension
+
+
+
+> ⚐ **NOTE:** In this lab you must allow your AI Agent to create a new project folder, scaffold an HTML page, and if required, install dependencies (e.g., npm, Node, Express, etc.).
+
+
+
+## Task 1: Review the sample prompt
+
+1. A sample prompt has been provided for you. It can be used as-is in **Plan** mode with your Agent. Or, can use the prompt as a reference while you create your own dashboard.
+
+
+ (click) Sample prompt
+
+
+
+
+
+ ```txt
+
+ Title: Build a dashboard
+
+ Overview
+
+ 1. You will be creating a dynamic and visually stunning html-based dashboard for me. I want to be able to view this dashboard quickly and close it when I'm finished. It doesn't need to "run" all the time.
+
+ Task 1: Connect, familiarize
+
+ 1. Connect as the SQL_FREESQL_01 user and describe the HR schema tables and views
+
+ 2. Familiarize yourself with their relationships.
+
+ Task 2: Build the dashboard, my requests
+
+ 1. I want you to add tool tips to my charts: https://www.chartjs.org/docs/latest/samples/tooltip/content.html
+
+ 2. I want you to use table data from the HR schema to create a radar chart https://www.chartjs.org/docs/latest/samples/other-charts/radar.html. I want to be able to select two different employees from two drop down lists, so that I can compare their attributes.
+
+ 3. I want a bubble chart to display the count of countries employees reside in. The bubble size should be relative to the number of employees in that country. I want you to create something like in this example: https://www.chartjs.org/docs/latest/samples/other-charts/bubble.html
+
+ 4. I want you to show me a breakdown of the employees by their Job ID, on a doughnut chart like this: https://www.chartjs.org/docs/latest/samples/other-charts/doughnut.html
+
+ ```
+
+
+
+
+> ⚐ **NOTE:** This Lab is designed to be open-ended, accordingly, your individual results will vary. Feel free to "go off-script" ☺ !
+
+2. Whether you use the prompt as-is or use it as a reference; you decide. Make sure to begin your workflow in **Plan** mode in order to have better control and oversight over the entire process. Let the Agent summarize its intent.
+
+ 
+
+3. In other labs, you might approve actions in stages. But if you decide to share with the Agent the *entire* prompt, the Agent will review the tasks all at once and execute its plan with minimal intervention. You can of course add suggestions or changes to the proposed plan. And when you are satisfied, allow the Agent to continue.
+
+4. There are other schemas that have granted access to `PUBLIC` (i.e., all other users); so, you do not need to be connected as the `HR` user (which is what the provided prompt references). You also have access to other schemas: `CO` and `SH`~. You might improvise and create a dashboard using these schemas instead.
+
+5. Whatever you decide, observe what SQLcl MCP **tools** are used, as well as the SQL or PL/SQL that is executed. In some cases, the Agent may need additonal direction. And the Agent may request switching the mode to **Act**.
+
+
+
+ 
+
+6. Your scenario may differ slightly, depending on the LLM used, but you should continue to see the Agent's intent and summary of intended actions.
+
+
+
+## Task 2: Creating the dashboard files
+
+1. Over the course of this scenario, the Agent will create a new project folder, and begin scaffolding `HTML` and `JavaScript` components. Pay close attention, and guide the Agent should it deviate from this plan.
+
+
+
+
+
+
+
+2. The Agent may request your approval to use the **connect** and **run-sql** tools of the SQLcl MCP server. You should approve, and watch as the dashboard is populated with real data from your target schema.
+
+
+
+3. Even now, LLMs find merge conflict markers difficult to troubleshoot. So, if manual intervention is required, assist the Agent with removing any of these markers (e.g. `>>>>>>> REPLACE`).
+
+ 
+
+4. If you are able, review your project files before proceeding. Does everything look correct?
+
+## Task 3: Review the HTML dashboard
+
+1. By now, you probably have something that will resemble the example shown below. Allow the Agent to open the newly created dashboard, and compare your output to the example.
+
+
+
+2. You may have chosen different charts or visualizations. You may have chosen a different schema too. But if you've monitored the Agent, and ensured that its using the correct SQLcl MCP server tools, your end result probably looks very close to what you see here:
+
+
+
+
+
+ 
+
+
+## Learn More
+
+* [MCP Server Introduction](https://blogs.oracle.com/database/post/introducing-mcp-server-for-oracle-database)
+* [Oracle official MCP Server repository](https://github.com/oracle/mcp/tree/main)
+* [SQLcl MCP Server Docs](https://docs.oracle.com/en/database/oracle/sql-developer-command-line/25.2/sqcug/using-oracle-sqlcl-mcp-server.html)
+
+## Acknowledgements
+
+* **Author**
Chris Hoina, Senior Product Manager, Database Tools
+* **Contributors**
Jeff Smith, Distinguished Product Manager, Database Tools
+* **Last Updated By/Date**
Chris Hoina, September 2025
diff --git a/sqlcl-mcp-server-intro/do-not-use-7-build-a-sql-notebook.md b/sqlcl-mcp-server-intro/do-not-use-7-build-a-sql-notebook.md
new file mode 100644
index 00000000..3025dfed
--- /dev/null
+++ b/sqlcl-mcp-server-intro/do-not-use-7-build-a-sql-notebook.md
@@ -0,0 +1,281 @@
+**NOT A CANDIDATE FOR THE FINAL LIVE LAB.**
+
+# Build a SQL Notebook
+
+## Introduction
+
+The following scenario explores one of the most compelling features of MCP servers: Training an LLM on a unique context or use case. In this scenario, you'll see how we use prompts to save as a SQL Notebook (.sqlnb): the actions of your Agent, the SQLcl MCP Server tools it used, the SQL and any PL/SQL that was executed, along with the results (represented in Markdown).
+
+Estimated Time: 5 minutes
+
+### Objectives
+
+In this lab, you will:
+* Review the provided prompt
+* Execute the prompt to create a sample SQL Notebook (`.sqlnb`)
+* Alter the provided script to create a unique SQL Notebook
+
+
+### Prerequisites
+
+Pending
+
+This lab assumes you have:
+
+* An Oracle account
+* All previous labs successfully completed
+
+## Task 1: Review the provided prompt
+
+1. You again have been provided with a sample prompt. In other scenarios the prompts were relatively straightforward. And depending on the LLM used, the results in the other Lab scenarios probably matched the expected output.
+
+ Your results are largely due to the fact that your LLMs have quite a bit of training on the various topics we've covered. However, there may not be a lot of publically-accessible training data related to new or novel technologies and features: in this case asking our Agent to use the SQLcl MCP server to help design a SQL Notebook file (`.sqlnb`)!
+
+2. Let's begin by reviewing prompt.
+
+ Notice the helpful hints and guidance that has been included in this prompt. We do this to provide some additional context and rules for your agent. With this additional context, the agent should have no problem recording the SQL and PL/SQL that was executed (in the prompt), and the results in a SQL Notebook (`.sqlnb`) friendly format.
+
+> NOTE: The `## Your task list` section can be looked at as the "action" steps in the prompt. All the tasks there are what populate your SQL Notebook file (as you'll see later on).
+
+Expand to reveal the full prompt
+ ~~~
+ # Create a SQL Notebook
+
+ ## Create an empty .sqlnb file
+
+ Create a file named "consumer_profile.sqlnb" and set it aside for appending. You will use this file periodically to summarize your findings, obeservations, and SQL and any PL/SQL used to gather results. The tasks list (known as "Your task list") in the following steps will provide you with the content for this .sqlnb file.
+
+ ### Guidelines, structure, syntax of .sqlnb files
+
+ #### Example .sqlnb file
+
+ Here is an example .sqlnb file. Note the syntax, structure, and its elements/properties. It is similar to a .YAML file:
+
+ ```markdown
+ cells:
+ - kind: 1
+ value: ""
+ languageId: markdown
+ - kind: 1
+ value: "# Heading level 1"
+ languageId: markdown
+ - kind: 1
+ value: "## Heading level 2"
+ languageId: markdown
+ - kind: 1
+ value: "### Heading level 3"
+ languageId: markdown
+ - kind: 1
+ value: |-
+ 1. First item
+ 2. Second item
+ 3. Third item
+ 4. Fourth item
+ languageId: markdown
+ - kind: 1
+ value: An inline code example, where `nano` is the inline code.
+ languageId: markdown
+ - kind: 2
+ value: |-
+ create or replace function mytest return number is
+ begin
+ return 1;
+ end;
+ languageId: oracle-sql
+ - kind: 2
+ value: describe sh.costs;
+ languageId: oracle-sql
+ - kind: 2
+ value: |-
+ CREATE OR REPLACE PROCEDURE get_employee
+ (p_empid in employees.employee_id%TYPE,
+ p_sal OUT employees.salary%TYPE,
+ p_job OUT employees.job_id%TYPE) IS
+ BEGIN
+ SELECT salary,job_id
+ INTO p_sal, p_job
+ FROM employees
+ WHERE employee_id = p_empid;
+ END;
+ languageId: oracle-sql
+ - kind: 1
+ value: |-
+ | Column 1 | Column 2 |
+ | -- | -- |
+ | Row Value 1 | Row Value 2 |
+ languageId: markdown
+ - kind: 1
+ value: ""
+ languageId: markdown
+ ```
+
+ ### Detailed guidelines for structing a .sqlnb file:
+
+ - A .sqlnb file begins with "cells:"
+ - Markdown
+ - Markdown blocks are identified as "kind: 1"
+ - A markdown block consists of a kind, value, and languageId key.
+ - The keys are indented two columns, and begin with a dash (hyphen), followed by the key name and colon, a whitespace, followed by the value of that key, followed by the languageId.
+ - The markdown value's contents are encapsulated in double quotes.
+ - The value will be either:
+ - A markdown subheading (double hash ## or triple hash ###, where applicable), or
+ - The summary that was requested in the prompt (as seen in the #Your task list section)
+ - The syntax for the markdown languageId is "languageId: markdown"
+ - Notice how lists and table are structured like this:
+
+ *List example*
+
+ - kind: 1
+ value: |-
+ 1. First item
+ 2. Second item
+ 3. Third item
+ 4. Fourth item
+ languageId: markdown
+
+ *Table example*
+
+ - kind: 1
+ value: |-
+ | Column 1 | Column 2 |
+ | -- | -- |
+ | Row Value 1 | Row Value 2 |
+ languageId: markdown
+
+ - SQL and PL/SQL
+ - Oracle SQL and PL/SQL blocks are identified by "kind: 2"
+ - A SQL or PL/SQL markdown block consists of a kind, value, and languageId key.
+ - The keys are indented two columns, and begin with a dash (hyphen), followed by the key name and colon, a whitespace, followed by the value of that key, followed by the languageId.
+ - The syntax for the SQL and PL/SQL languageId is "languageId: oracle-sql"
+ - Notice how the PL/SQL blocks are structured, always beginning with the "|-" characters:
+
+ *PL/SQL Example*
+
+ - kind: 2
+ value: |-
+ CREATE OR REPLACE PROCEDURE get_employee
+ (p_empid in employees.employee_id%TYPE,
+ p_sal OUT employees.salary%TYPE,
+ p_job OUT employees.job_id%TYPE) IS
+ BEGIN
+ SELECT salary,job_id
+ INTO p_sal, p_job
+ FROM employees
+ WHERE employee_id = p_empid;
+ END;
+ languageId: oracle-sql
+
+ - Only one SQL statment per code block is permitted
+ - Only one PL/SQL procedure (or function, or trigger, etc.) per code block is permitted.
+
+ ## Your task list
+
+ 1. Connect as the SQL_FREESQL_01 user
+
+ 2. Describe the Costs, Products, and Sales tables of the SH schema.
+ - Create a new .sqlnb compliant markdown heading, followed by three .sqlnb-compliant sql code blocks and append to the consumer_profile.sqlnb" file the SQL and any PL/SQL used to Describe these tables.
+ - Do not include the actual results, just the SQL or PL/SQL used.
+
+ > NOTE: you cannot perform a "bulk" DESCRIBE on tables. You must use DESCRIBE on one table or object at a time.
+
+ 3. Display in a markdown list format, a 1-3 sentence summary for each table, explaining the purpose or what the table is used for. Use a markdown list format for this new sqlb cell block.
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section and append to the "consumer_profile.sqlnb" file these summaries.
+ - Make the table names bold.
+
+ 4. Using the Costs, Products, and Sales tables, display the top 20 products that have the highest margins (i.e., lowest Cost-of-Goods). Display the results by Product ID, in order of least sales revenue to highest sales revenue. The margins should be represented as whole numbers, followed by the % character. Use normal spelling for the table column names.
+ - Create a new .sqlnb compliant markdown heading or sub-heading for this task and append to the consumer_profile.sqlnb" file these results in a separate .sqlnb compliant markdown block.
+ - The results should be displayed in a markdown table where Product_ID and Product_Name are in separate columns.
+ - Create a new .sqlnb compliant markdown sub-heading to title the code block, followed by the SQL and any PL/SQL used to produce the results in a .sqlnb-compliant code block.
+
+ 5. Using the results from the previous operation, display in a markdown table, the Product IDs in one column and their associated Product Names in another column.
+ - Create a new .sqlnb compliant markdown heading or sub-heading and append these results to the consumer_profile.sqlnb" file as a .sqlnb compliant markdown block in a markdown table.
+ - Create a new .sqlnb compliant markdown heading or sub-heading and include in the consumer_profile.sqlnb" file the SQL and any PL/SQL used to produce these results as a .sqlnb compliant oracle-sql code block.
+
+ 5. Describe the Customers, Supplementary_Demographics, Products, and Countries tables of the SH schema.
+
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this code block
+ - Create and append to the "consumer_profile.sqlnb" file the SQL and any PL/SQL used to Describe these tables as three separate .sqlnb compliant oracle-sql code blocks; one for each table.
+ - Do not include the actual results, simply the SQL or PL/SQL used.
+
+ > NOTE: you cannot perform a "bulk" DESCRIBE on tables. You must use DESCRIBE on one table or object at a time.
+
+ 7. Display in a markdown list format, a 1-3 sentence summary for each table, explaining the purpose or what the table is used for. Use a markdown list format for this new sqlb cell block.
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section and append to the "consumer_profile.sqlnb" file these summaries.
+ - Make the table names bold.
+
+ 8. Using the Country ID and the Country ISO Code of the Country and Customers tables, display the distinct customer income levels.
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section
+ - Create a new .sqlnb compliant markdown code block to display these results in a markdown table.
+ - Create and append to the consumer_profile.sqlnb" the SQL and any PL/SQL used to display these distinct income levels as a .sqlnb compliant oracle-sql code block.
+
+ 9. Display the values (assume they are in Euros) in an ASCII-based histogram. Follow these guidelines:
+
+ - Use the `#` character to represent 10,000 Euro.
+ - Use as many `#` characters are needed to represent the magnitude for each of the bins in the histogram (do not include the actual Euro total, just the equivalent number of `#` charactres, where one `#` = 10000 Euro):
+ - Include a legend, which must include: the total number of Euros equal to one `#`.
+ - The ASCII-based histogram should be contained as a fenced code block, an example can be seen here: https://www.markdownguide.org/extended-syntax/#fenced-code-blocks
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section.
+ - Create and append the Legend, and the ASCII-based histogram into a .sqlnb compliant markdown block.
+
+ 10. If not completed already, review each cell you have created in the .sqlnb file, ensure that all SQL and any PL/SQL code has been included. Verify that the markdown headings and results are present and correctly formatted (for instance if the markdown calls for a list, table, or fenced code block).
+
+ 11. After you have verified that everything is correct, then confirm with me and stop.
+ ~~~
+
+
+
+
+> NOTE: As SQL Notebooks become more popular, and as more context becomes publically availale, user-provided context such as what is in the included prompt may be unecessary!
+
+## Task 2: Execute the prompt
+
+1. You may use the prompt as-is, or a subset of the prompt. For instance, you might try creating your own unique SQL Notebook. To do so, remove the `## Your task list` in the provided prompt. Execute the prompt in **Plan** mode, and as you perform your own queries, ask you agent to add any SQL, PL/SQL, and results to your SQL Notebook file!
+
+2. In this example, we ran the prompt in **Plan** mode, adding minimal additional guidance for the agent. The agent did most of the communicating with the SQLcl MCP server, and between the two we arrived at usable `.sqlnb` file.
+
+ 
+
+ 
+
+ 
+
+ 
+
+## Task 3: Reviewing your SQL Notebook file
+
+1. If you've made it this far, then head back to over to your SQL Developer for VS Code connections, and click on your connection to restablish a database connection.
+
+ 
+
+2. Locate your saved SQL Notebook, click it. SQL Developer will recognize it, and open the notebook.
+
+ 
+
+3. Congrats, you've just discovered a new use case: Using an AI agent to create a SQL notebook using the available **Tools** in the SQLcl MCP Server.
+
+ 
+
+ 
+
+ 
+
+## Task 4: Wrapping up
+
+1. You should now have a better understanding of not only *what* an MCP Server is, but what *our* SQLcl MCP Server can do for you.
+
+2. Now take the sample prompts, use them as a reference guide, and start testing the limits. Really push the boundaries.
+
+## Learn More
+
+Pending
+
+* [URL text 1](http://docs.oracle.com)
+* [URL text 2](http://docs.oracle.com)
+
+## Acknowledgements
+
+Pending
+
+* **Author** -
+* **Contributors** - (optional)
+* **Last Updated By/Date** -
diff --git a/sqlcl-mcp-server-intro/files/create_a_react_app_prompt.md b/sqlcl-mcp-server-intro/files/create_a_react_app_prompt.md
new file mode 100644
index 00000000..628b8858
--- /dev/null
+++ b/sqlcl-mcp-server-intro/files/create_a_react_app_prompt.md
@@ -0,0 +1,36 @@
+# Single Web Page Application example
+
+## Overview
+
+1. You will create a sample single page React application using available information in the SQL_FREESQL_01 schema.
+2. You have access to view the table data in the CO schema. The sample application will use data from these CO tables.
+3. You will make provisions for dynamically fetching data from the database, but the version 1 of this application will use hard-coded values from the CO table data.
+4. You will follow the instructions in the following steps
+
+## CO schema exploration
+
+1. Connect as the SQL_FREESQL_01 user and explore the CO tables
+2. Provide me with a summary of insights on the CO tables
+3. Recommend to me some potential statistics/metrics in this CO schema that would be interesting for the single page web application.
+4. Allow me to choose one of these statistics/metrics to use for the single page web application.
+
+## Creating the web application
+
+1. Create a project directory before scaffolding a project.
+2. Once the directory is created, scaffold the single page React application.
+3. Using what you learned about the CO schema, and the selection I made in the CO schema exploration section, reconnect as the SQL_FREESQL_01 user and query the values you need to populate the React application.
+4. The React application should include a graph or chart to visualize the data. And there should be a table underneath, or next to the visualization that shows the values.
+5. Share with me what you intend to display on the React page before altering the app source files.
+
+## Provide some helpful inight
+1. Once complete, provide me with a list of next steps, or recommended actions for making this more dynamic.
+2. Answer the following questions:
+ - What options do I have for establishing an Oracle database connection so my app can update in real time?
+ - What options do I have if a user wants to update one of these underlying tables?
+ - What other functions do you recommend this app should have?
+ - What other Oracle database technologies could I use in/with this React application?
+
+## Launch the web application
+
+1. Launch the web application and review it for accuracy and expected outcome
+2. If the data and visualization are not visible on screen, please debug as needed.
diff --git a/sqlcl-mcp-server-intro/files/create_an_html_dashboard_prompt.md b/sqlcl-mcp-server-intro/files/create_an_html_dashboard_prompt.md
new file mode 100644
index 00000000..b5ad4250
--- /dev/null
+++ b/sqlcl-mcp-server-intro/files/create_an_html_dashboard_prompt.md
@@ -0,0 +1,18 @@
+# Build a dashboard
+
+## Overview
+
+1. You will be creating a dynamic and visually stunning html-based dashboard for me. I want to be able to view this dashboard quickly and close it when I'm finished. It doesn't need to "run" all the time.
+
+## Task 1: Connect, familiarize
+
+1. Connect as the SQL_FREESQL_01 user and describe the HR schema tables and views
+2. Familiarize yourself with their relationships.
+
+## Task 2: Build the dashboard, my requests
+
+1. I want you to add tool tips to my charts: https://www.chartjs.org/docs/latest/samples/tooltip/content.html
+2. I want you to use table data from the HR schema to create a radar chart https://www.chartjs.org/docs/latest/samples/other-charts/radar.html. I want to be able to select two different employees from two drop down lists, so that I can compare their attributes.
+
+3. I want a bubble chart to display the count of countries employees reside in. The bubble size should be relative to the number of employees in that country. I want you to create something like in this example: https://www.chartjs.org/docs/latest/samples/other-charts/bubble.html
+4. I want you to show me a breakdown of the employees by their Job ID, on a doughnut chart like this: https://www.chartjs.org/docs/latest/samples/other-charts/doughnut.html
\ No newline at end of file
diff --git a/sqlcl-mcp-server-intro/files/create_data_and_views_prompt.md b/sqlcl-mcp-server-intro/files/create_data_and_views_prompt.md
new file mode 100644
index 00000000..16607b06
--- /dev/null
+++ b/sqlcl-mcp-server-intro/files/create_data_and_views_prompt.md
@@ -0,0 +1,92 @@
+# Creating mock Schema data, and relevant views
+
+## Connecting and creating database objects
+
+1. Connect as the SQL_FREESQL_01 user
+2. Create four tables named car, truck, motorcycle, and manufacturer in the SQL_FREESQL_01 schema with the following characteristics (please review the three "NOTE" notes in this section before creating the tables):
+
+ The car, truck, motorcycle tables should include colums such as:
+ - make
+ - model
+ - year of manufacture
+ - engine displacement
+ - wheelbase
+
+ The manufacturer table should include details such as:
+ - Doing business as (dba) name
+ - Headquarters location city
+ - Headquarters location country
+ - Year manufacturer was established/incorporated
+ - Privately held or publiclly held company
+
+ Create, where applicable for the tables:
+ - indexes
+ - comments
+ - tags
+ - references
+ - primary and foreign keys
+
+> NOTE: For all tables, recommend any other additional columns you think may be relevant.
+
+> NOTE: Ensure that no integrity constraints will be violated. Parent keys, in referred tables, should be verified of their existence before being used in any fictitous data. As an example, make sure the manufacturer_id exists across the various tables.
+
+> NOTE: For simplicity, include Internal Combustion Engine (ICE) vehicles only.
+
+## Inserting data
+
+1. Create 50 unique entries each (in each table) of fictitious, but plausible data for the following tables(please review the two "NOTE" notes in this section before inserting the table data):
+ - car
+ - truck
+ - motorcycle
+
+ > NOTE: When performing the inserts, bulk insert the data with syntax such as this:
+ >
+ > ```sql
+ > INSERT INTO t(col1, col2, col3) VALUES
+ > ('val1_1', 'val1_2', 'val1_3'),
+ > ('val2_1', 'val2_2', 'val2_3'),
+ > ('val3_1', 'val3_2', 'val3_3');
+ > ```
+
+ > NOTE: Take care to not create duplicate data in any of the tables.
+
+2. Create 25 unique entries of fictitious, but plausible data for the following table (please review the two "NOTE" notes in this section before inserting the table data):
+ - manufacturer
+
+ > NOTE: When performing the inserts, bulk insert the data with syntax such as this:
+ >
+ > ```sql
+ > INSERT INTO t(col1, col2, col3) VALUES
+ > ('val1_1', 'val1_2', 'val1_3'),
+ > ('val2_1', 'val2_2', 'val2_3'),
+ > ('val3_1', 'val3_2', 'val3_3');
+ > ```
+
+ > NOTE: Take care to not create duplicate data in this table.
+
+2. After inserting the data show me the first 5 rows of each table individually. If no data exists, then:
+ - reattempt the inserting of the data in the empty tables, then:
+ - show the first 5 rows of the table, and:
+ - continue this until we are certain that table data exists in all the tables
+
+## Create four unique views
+
+1. Create the following views for me, according to these specifications:
+
+| View Name | Descriptions |
+| --- | --- |
+| Vehicle Count by Manufacturer | The view shows the count of vehicles (cars, trucks, motorcycles) for each manufacturer. For example, Toyota, Ford, Honda, and Rivian have entries in all three vehicle categories, while Yamaha, Ram, Kawasaki, Harley-Davidson, GMC, and Ducati have entries in one or two categories.|
+| Average Engine Displacement by Vehicle Type | The average engine displacement for cars is approximately 1.87 liters, for trucks it's about 4.07 liters, and for motorcycles, it's significantly higher at 43.74 liters. |
+|Vehicles by Year of Manufacture| The view shows the count of vehicles manufactured each year. The years 2020, 2021, and 2022 have 7, 9, and 10 vehicles respectively.|
+|Manufacturer Details with Vehicle Counts| This view provides detailed information about each manufacturer along with the count of vehicles they manufacture. For instance, Toyota, Ford, Honda, and Rivian are listed with their respective vehicle counts |
+
+2. Recommend to me, two additional unique views. These views should:
+ - provide me with unique and/or intersting insights
+ - be useful enough to include in a dashboard, should I want to do this in the future
+ - Feature in-line commenting, so future users can understand what the view is doing
+2. After reviewing the views you propose I will either approve or ask you to reiterate.
+3. Once I am satisfied, I will approve, and you will create these views.
+
+## Disconnect
+
+1. Once we are complete, you will disconnect from the Oracle database.
\ No newline at end of file
diff --git a/sqlcl-mcp-server-intro/files/do_not_use_create-a-sql-notebook_prompt.md b/sqlcl-mcp-server-intro/files/do_not_use_create-a-sql-notebook_prompt.md
new file mode 100644
index 00000000..c9e82d77
--- /dev/null
+++ b/sqlcl-mcp-server-intro/files/do_not_use_create-a-sql-notebook_prompt.md
@@ -0,0 +1,184 @@
+# Create a SQL Notebook
+
+## Create an empty .sqlnb file
+
+Create a file named "consumer_profile.sqlnb" and set it aside for appending. You will use this file periodically to summarize your findings, obeservations, and SQL and any PL/SQL used to gather results. The tasks list (known as "Your task list") in the following steps will provide you with the content for this .sqlnb file.
+
+### Guidelines, structure, syntax of .sqlnb files
+
+#### Example .sqlnb file
+
+Here is an example .sqlnb file. Note the syntax, structure, and its elements/properties. It is similar to a .YAML file:
+
+```markdown
+cells:
+ - kind: 1
+ value: ""
+ languageId: markdown
+ - kind: 1
+ value: "# Heading level 1"
+ languageId: markdown
+ - kind: 1
+ value: "## Heading level 2"
+ languageId: markdown
+ - kind: 1
+ value: "### Heading level 3"
+ languageId: markdown
+ - kind: 1
+ value: |-
+ 1. First item
+ 2. Second item
+ 3. Third item
+ 4. Fourth item
+ languageId: markdown
+ - kind: 1
+ value: An inline code example, where `nano` is the inline code.
+ languageId: markdown
+ - kind: 2
+ value: |-
+ create or replace function mytest return number is
+ begin
+ return 1;
+ end;
+ languageId: oracle-sql
+ - kind: 2
+ value: describe sh.costs;
+ languageId: oracle-sql
+ - kind: 2
+ value: |-
+ CREATE OR REPLACE PROCEDURE get_employee
+ (p_empid in employees.employee_id%TYPE,
+ p_sal OUT employees.salary%TYPE,
+ p_job OUT employees.job_id%TYPE) IS
+ BEGIN
+ SELECT salary,job_id
+ INTO p_sal, p_job
+ FROM employees
+ WHERE employee_id = p_empid;
+ END;
+ languageId: oracle-sql
+ - kind: 1
+ value: |-
+ | Column 1 | Column 2 |
+ | -- | -- |
+ | Row Value 1 | Row Value 2 |
+ languageId: markdown
+ - kind: 1
+ value: ""
+ languageId: markdown
+```
+
+### Detailed guidelines for structing a .sqlnb file:
+
+- A .sqlnb file begins with "cells:"
+- Markdown
+ - Markdown blocks are identified as "kind: 1"
+ - A markdown block consists of a kind, value, and languageId key.
+ - The keys are indented two columns, and begin with a dash (hyphen), followed by the key name and colon, a whitespace, followed by the value of that key, followed by the languageId.
+ - The markdown value's contents are encapsulated in double quotes.
+ - The value will be either:
+ - A markdown subheading (double hash ## or triple hash ###, where applicable), or
+ - The summary that was requested in the prompt (as seen in the #Your task list section)
+ - The syntax for the markdown languageId is "languageId: markdown"
+ - Notice how lists and table are structured like this:
+
+ *List example*
+
+ - kind: 1
+ value: |-
+ 1. First item
+ 2. Second item
+ 3. Third item
+ 4. Fourth item
+ languageId: markdown
+
+ *Table example*
+
+ - kind: 1
+ value: |-
+ | Column 1 | Column 2 |
+ | -- | -- |
+ | Row Value 1 | Row Value 2 |
+ languageId: markdown
+
+- SQL and PL/SQL
+ - Oracle SQL and PL/SQL blocks are identified by "kind: 2"
+ - A SQL or PL/SQL markdown block consists of a kind, value, and languageId key.
+ - The keys are indented two columns, and begin with a dash (hyphen), followed by the key name and colon, a whitespace, followed by the value of that key, followed by the languageId.
+ - The syntax for the SQL and PL/SQL languageId is "languageId: oracle-sql"
+ - Notice how the PL/SQL blocks are structured, always beginning with the "|-" characters:
+
+ *PL/SQL Example*
+
+ - kind: 2
+ value: |-
+ CREATE OR REPLACE PROCEDURE get_employee
+ (p_empid in employees.employee_id%TYPE,
+ p_sal OUT employees.salary%TYPE,
+ p_job OUT employees.job_id%TYPE) IS
+ BEGIN
+ SELECT salary,job_id
+ INTO p_sal, p_job
+ FROM employees
+ WHERE employee_id = p_empid;
+ END;
+ languageId: oracle-sql
+
+ - Only one SQL statment per code block is permitted
+ - Only one PL/SQL procedure (or function, or trigger, etc.) per code block is permitted.
+
+## Your task list
+
+1. Connect as the SQL_FREESQL_01 user
+
+2. Describe the Costs, Products, and Sales tables of the SH schema.
+ - Create a new .sqlnb compliant markdown heading, followed by three .sqlnb-compliant sql code blocks and append to the consumer_profile.sqlnb" file the SQL and any PL/SQL used to Describe these tables.
+ - Do not include the actual results, just the SQL or PL/SQL used.
+
+> NOTE: you cannot perform a "bulk" DESCRIBE on tables. You must use DESCRIBE on one table or object at a time.
+
+3. Display in a markdown list format, a 1-3 sentence summary for each table, explaining the purpose or what the table is used for. Use a markdown list format for this new sqlb cell block.
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section and append to the "consumer_profile.sqlnb" file these summaries.
+ - Make the table names bold.
+
+4. Using the Costs, Products, and Sales tables, display the top 20 products that have the highest margins (i.e., lowest Cost-of-Goods). Display the results by Product ID, in order of least sales revenue to highest sales revenue. The margins should be represented as whole numbers, followed by the % character. Use normal spelling for the table column names.
+ - Create a new .sqlnb compliant markdown heading or sub-heading for this task and append to the consumer_profile.sqlnb" file these results in a separate .sqlnb compliant markdown block.
+ - The results should be displayed in a markdown table where Product_ID and Product_Name are in separate columns.
+ - Create a new .sqlnb compliant markdown sub-heading to title the code block, followed by the SQL and any PL/SQL used to produce the results in a .sqlnb-compliant code block.
+
+5. Using the results from the previous operation, display in a markdown table, the Product IDs in one column and their associated Product Names in another column.
+ - Create a new .sqlnb compliant markdown heading or sub-heading and append these results to the consumer_profile.sqlnb" file as a .sqlnb compliant markdown block in a markdown table.
+ - Create a new .sqlnb compliant markdown heading or sub-heading and include in the consumer_profile.sqlnb" file the SQL and any PL/SQL used to produce these results as a .sqlnb compliant oracle-sql code block.
+
+5. Describe the Customers, Supplementary_Demographics, Products, and Countries tables of the SH schema.
+
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this code block
+ - Create and append to the "consumer_profile.sqlnb" file the SQL and any PL/SQL used to Describe these tables as three separate .sqlnb compliant oracle-sql code blocks; one for each table.
+ - Do not include the actual results, simply the SQL or PL/SQL used.
+
+> NOTE: you cannot perform a "bulk" DESCRIBE on tables. You must use DESCRIBE on one table or object at a time.
+
+7. Display in a markdown list format, a 1-3 sentence summary for each table, explaining the purpose or what the table is used for. Use a markdown list format for this new sqlb cell block.
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section and append to the "consumer_profile.sqlnb" file these summaries.
+ - Make the table names bold.
+
+8. Using the Country ID and the Country ISO Code of the Country and Customers tables, display the distinct customer income levels.
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section
+ - Create a new .sqlnb compliant markdown code block to display these results in a markdown table.
+ - Create and append to the consumer_profile.sqlnb" the SQL and any PL/SQL used to display these distinct income levels as a .sqlnb compliant oracle-sql code block.
+
+9. Display the values (assume they are in Euros) in an ASCII-based histogram. Follow these guidelines:
+
+ - Use the `#` character to represent 10,000 Euro.
+ - Use as many `#` characters are needed to represent the magnitude for each of the bins in the histogram (do not include the actual Euro total, just the equivalent number of `#` charactres, where one `#` = 10000 Euro):
+ - Include a legend, which must include: the total number of Euros equal to one `#`.
+ - The ASCII-based histogram should be contained as a fenced code block, an example can be seen here: https://www.markdownguide.org/extended-syntax/#fenced-code-blocks
+ - Create a new .sqlnb compliant markdown heading or sub-heading to title this section.
+ - Create and append the Legend, and the ASCII-based histogram into a .sqlnb compliant markdown block.
+
+10. If not completed already, review each cell you have created in the .sqlnb file, ensure that all SQL and any PL/SQL code has been included. Verify that the markdown headings and results are present and correctly formatted (for instance if the markdown calls for a list, table, or fenced code block).
+
+11. After you have verified that everything is correct, then confirm with me and stop.
+
+
+
diff --git a/sqlcl-mcp-server-intro/files/do_not_use_create_schema_objects_prompt.md b/sqlcl-mcp-server-intro/files/do_not_use_create_schema_objects_prompt.md
new file mode 100644
index 00000000..d273d6c7
--- /dev/null
+++ b/sqlcl-mcp-server-intro/files/do_not_use_create_schema_objects_prompt.md
@@ -0,0 +1,124 @@
+# Creating schemas and granting privileges to the SQL_FREESQL_01 user
+
+## Download and extract files
+1. The latest version of the Oracle database 23ai sample schemas and installation scripts are located here: https://github.com/oracle-samples/db-sample-schemas/archive/refs/tags/v23.3.zip
+
+2. Download the .zip file from GitHub, and save to my current working directory
+3. Unzip the .zip file
+4. Delete the .zip file once you have unzipped it
+
+## Creating the sample schemas
+
+### Create the Human Resources schema
+
+1. cd to into the human_resources folder
+2. Connect as SQL_FREESQL_01
+3. Use the sqlcl tool to execute the installation script with the @hr_install.sql command. Use the following values for the following prompts:
+ - Password12345 for the `ACCEPT pass PROMPT 'Enter a password for the user CO: ' HIDE` prompt.
+ - DEFAULT for the `ACCEPT tbs PROMPT 'Enter a tablespace for CO [&var_default_tablespace]: ' DEFAULT '&var_default_tablespace'` prompt.
+ - YES for the `ACCEPT overwrite_schema PROMPT 'Do you want to overwrite the schema, if it already exists? [YES|no]: ' DEFAULT 'YES'` prompt.
+ followed by required arguments, to create the CO schema
+4. Prompt me for the Password, tablespace, and if we should overwrite the schema
+5. Use the default tablespace for the schema
+6. Overwrite the existing schema if it exists
+7. Grant all privileges to the tables and views in the HR schema to the SQL_FREESQL_01 user.
+ - NOTE: You must describe the schema first, and then issue these grants one table and/or view at a time. You cannot perform a bulk grant on these tables and views. It is not a valid operation in the Oracle database
+
+### Create the Customer Orders schema
+
+1. cd to into the customer_orders folder
+2. Connect as SQL_FREESQL_01
+3. Use the sqlcl tool to execute the installation script with the @co_install.sql command. Use the following values for the following prompts:
+ - Password12345 for the `ACCEPT pass PROMPT 'Enter a password for the user CO: ' HIDE` prompt.
+ - DEFAULT for the `ACCEPT tbs PROMPT 'Enter a tablespace for CO [&var_default_tablespace]: ' DEFAULT '&var_default_tablespace'` prompt.
+ - YES for the `ACCEPT overwrite_schema PROMPT 'Do you want to overwrite the schema, if it already exists? [YES|no]: ' DEFAULT 'YES'` prompt.
+4. Prompt me for the Password, tablespace, and if we should overwrite the schema
+5. Use the default tablespace for the schema
+6. Overwrite the existing schema if it exists
+7. Grant all privileges to the tables and views in the CO schema to the SQL_FREESQL_01 user.
+ - NOTE: You must describe the schema first, and then issue these grants one table and/or view at a time. You cannot perform a bulk grant on these tables and views. It is not a valid operation in the Oracle database
+
+### Create the Sales History schema
+
+1. cd to into the sales_history folder
+2. Connect as SQL_FREESQL_01
+5. Use the sqlcl tool to execute the installation script with the @sh_install.sql command. Use the following values for the following prompts:
+ - Password12345 for the `ACCEPT pass PROMPT 'Enter a password for the user CO: ' HIDE` prompt.
+ - DEFAULT for the `ACCEPT tbs PROMPT 'Enter a tablespace for CO [&var_default_tablespace]: ' DEFAULT '&var_default_tablespace'` prompt.
+ - YES for the `ACCEPT overwrite_schema PROMPT 'Do you want to overwrite the schema, if it already exists? [YES|no]: ' DEFAULT 'YES'` prompt.
+4. Prompt me for the Password, tablespace, and if we should overwrite the schema
+5. Use the default tablespace for the schema
+6. Overwrite the existing schema if it exists
+9. Grant all privileges to the tables and views in the SH schema to the SQL_FREESQL_01 user.
+ - NOTE: You must describe the schema first, and then issue these grants one table and/or view at a time. You cannot perform a bulk grant on these tables and views. It is not a valid operation in the Oracle database
+
+## Granting ALL PRIVILEGES to the SQL_FREESQL_01 user
+
+### HR Schema
+
+1. The SQL_FREESQL_01 user will need to be able to view with and interact with the objects in the HR schema.
+2. Perform a Describe schema on the HR schema, and make a note of the available objects.
+3. Attempt the following statement, individually on each object in the HR schema:
+
+ ```sql
+ GRANT ALL PRIVILEGES on [database object] to SQL_FREESQL_01;
+ ```
+
+> NOTE: A [database object] is one of: table, view, procedure, trigger, type, sequence
+> NOTE: You cannot perform a bulk grant on these tables and views. It is not a valid operation in the Oracle database.
+> NOTE: Should a failure occur, attempt with the fully-qualified object name such as "SCHEMA.OBJECT"
+
+4. Report back with your results: Where the GRANTs successful or a failure? Specifically, what succeeded, and what failed?
+
+5. Await for my approval before proceeding to the next step.
+
+### CO Schema
+
+1. The SQL_FREESQL_01 user will need to be able to view with and interact with the objects in the CO schema.
+2. Perform a Describe schema on the CO schema, and make a note of the available objects.
+3. Attempt the following statement, individually on each object in the CO schema:
+
+ ```sql
+ GRANT ALL PRIVILEGES on [database object] to SQL_FREESQL_01;
+ ```
+
+> NOTE: A [database object] is one of: table, view, procedure, trigger, type, sequence
+> NOTE: You cannot perform a bulk grant on these tables and views. It is not a valid operation in the Oracle database.
+> NOTE: Should a failure occur, attempt with the fully-qualified object name such as "SCHEMA.OBJECT"
+
+4. Report back with your results: Where the GRANTs successful or a failure? Specifically, what succeeded, and what failed?
+
+5. Await for my approval before proceeding to the next step.
+
+### SH Schema
+
+1. The SQL_FREESQL_01 user will need to be able to view with and interact with the objects in the SH schema.
+2. Perform a Describe schema on the SH schema, and make a note of the available objects.
+3. Attempt the following statement, individually on each object in the SH schema:
+
+ ```sql
+ GRANT ALL PRIVILEGES on [database object] to SQL_FREESQL_01;
+ ```
+
+> NOTE: A [database object] is one of: table, view, procedure, trigger, type, sequence
+> NOTE: You cannot perform a bulk grant on these tables and views. It is not a valid operation in the Oracle database.
+> NOTE: Should a failure occur, attempt with the fully-qualified object name such as "SCHEMA.OBJECT"
+
+4. Report back with your results: Where the GRANTs successful or a failure? Specifically, what succeeded, and what failed?
+
+5. Await for my approval before proceeding to the next step.
+
+## Review as SQL_FREESQL_01 schema
+
+1. If not already connected as the SQL_FREESQL_01 schema, connect.
+2. Perform a query to describe the avaiable objects for each of the following schemas, WHERE
+USERNAME =
+ - 'HR'
+ - 'CO'
+ - 'SH'
+
+3. Display the results, one schema at a time.
+4. Once complete, disconnect from the database.
+
+
+
diff --git a/sqlcl-mcp-server-intro/files/do_not_use_explain_prompt.md b/sqlcl-mcp-server-intro/files/do_not_use_explain_prompt.md
new file mode 100644
index 00000000..ce6b0f17
--- /dev/null
+++ b/sqlcl-mcp-server-intro/files/do_not_use_explain_prompt.md
@@ -0,0 +1,32 @@
+# Optimize my PL/SQL
+
+1. Connect as the SQL_FREESQL_01 user
+2. Create three tables for me; please recommend the names, attributes, constraints, and indexes to me.
+3. Once I approve, populate these tables with 100 rows each of sample data
+
+## Create a PLSQL procedure
+
+1. Propose an extremely non-performant PL/SQL procedure to use on these tables.
+2. Explain what that PLSQL procedure does, and why it is not performant.
+3. Povide me instructions on how I should use it.
+4. Once I approve, create the procedure for me.
+
+## Executing the procedure
+
+1. Allow me to execute the procedure
+2. Provide me execution and performance statistics and metrics on the PL/SQL Procedure
+3. Show me the Explain Plan for this PLSQL Procedure
+
+## Make recommendations
+
+1. Provid me with recommendation on how I can optimize this PLSQL procedure.
+2. Once I approve, refactor the PLSQL procedure so it his highly performant
+3. Allow me to execute the new PLSQL procedure
+4. Provide me execution and performance statistics and metrics on the PL/SQL Procedure
+3. Show me the Explain Plan for this PLSQL Procedure
+
+## Visualize the difference
+
+1. Use the pre-optimzation and post-optimization results of the PLSQL procedure to create an html-based visualization of the performance difference among the two
+2. The html visualization should have a detailed list of the changes that were made to improve the performance
+
diff --git a/sqlcl-mcp-server-intro/images/lab-1/1-sqlcl-mcp-interaction-graphic-overview.png b/sqlcl-mcp-server-intro/images/lab-1/1-sqlcl-mcp-interaction-graphic-overview.png
index 3246af93..0a28900d 100644
Binary files a/sqlcl-mcp-server-intro/images/lab-1/1-sqlcl-mcp-interaction-graphic-overview.png and b/sqlcl-mcp-server-intro/images/lab-1/1-sqlcl-mcp-interaction-graphic-overview.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-1/2-trusted-execution-layer.jpeg b/sqlcl-mcp-server-intro/images/lab-1/2-trusted-execution-layer.jpeg
new file mode 100644
index 00000000..af50f253
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-1/2-trusted-execution-layer.jpeg differ
diff --git a/sqlcl-mcp-server-intro/images/lab-1/3-single-shot-vs-agentic-ai.jpeg b/sqlcl-mcp-server-intro/images/lab-1/3-single-shot-vs-agentic-ai.jpeg
new file mode 100644
index 00000000..16bca72a
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-1/3-single-shot-vs-agentic-ai.jpeg differ
diff --git a/sqlcl-mcp-server-intro/images/lab-3/cline-1.png b/sqlcl-mcp-server-intro/images/lab-3/cline-1.png
new file mode 100644
index 00000000..549b1d1f
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-3/cline-1.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-3/cline-2.png b/sqlcl-mcp-server-intro/images/lab-3/cline-2.png
new file mode 100644
index 00000000..a75015c1
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-3/cline-2.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-3/cline-3.png b/sqlcl-mcp-server-intro/images/lab-3/cline-3.png
new file mode 100644
index 00000000..f50c46af
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-3/cline-3.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-3/cline-4.png b/sqlcl-mcp-server-intro/images/lab-3/cline-4.png
new file mode 100644
index 00000000..04de67fc
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-3/cline-4.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-3/cline-5.png b/sqlcl-mcp-server-intro/images/lab-3/cline-5.png
new file mode 100644
index 00000000..07098733
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-3/cline-5.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/1-initial-plan.png b/sqlcl-mcp-server-intro/images/lab-4/1-initial-plan.png
new file mode 100644
index 00000000..8587655c
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/1-initial-plan.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/10-inserting-values-several-at-a-time.png b/sqlcl-mcp-server-intro/images/lab-4/10-inserting-values-several-at-a-time.png
new file mode 100644
index 00000000..42989081
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/10-inserting-values-several-at-a-time.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/11-fetch-first-five-car.png b/sqlcl-mcp-server-intro/images/lab-4/11-fetch-first-five-car.png
new file mode 100644
index 00000000..6f636d23
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/11-fetch-first-five-car.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/12-fetch-first-five-truck.png b/sqlcl-mcp-server-intro/images/lab-4/12-fetch-first-five-truck.png
new file mode 100644
index 00000000..d6fa03d7
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/12-fetch-first-five-truck.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/13-fetch-first-five-moto.png b/sqlcl-mcp-server-intro/images/lab-4/13-fetch-first-five-moto.png
new file mode 100644
index 00000000..fbb27d4b
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/13-fetch-first-five-moto.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/14-vehicle-count-by-manu-view.png b/sqlcl-mcp-server-intro/images/lab-4/14-vehicle-count-by-manu-view.png
new file mode 100644
index 00000000..df5d0460
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/14-vehicle-count-by-manu-view.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/15-approving-vehicle-count-by-manu-view.png b/sqlcl-mcp-server-intro/images/lab-4/15-approving-vehicle-count-by-manu-view.png
new file mode 100644
index 00000000..57b88eea
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/15-approving-vehicle-count-by-manu-view.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/16-avg-engine-displacement-view.png b/sqlcl-mcp-server-intro/images/lab-4/16-avg-engine-displacement-view.png
new file mode 100644
index 00000000..cf26a2bc
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/16-avg-engine-displacement-view.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/17-vehicles-by-year-view.png b/sqlcl-mcp-server-intro/images/lab-4/17-vehicles-by-year-view.png
new file mode 100644
index 00000000..20af9830
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/17-vehicles-by-year-view.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/18-recommended-additional-views.png b/sqlcl-mcp-server-intro/images/lab-4/18-recommended-additional-views.png
new file mode 100644
index 00000000..5539dfde
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/18-recommended-additional-views.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/19-avg-vehicle-age-by-manu-view.png b/sqlcl-mcp-server-intro/images/lab-4/19-avg-vehicle-age-by-manu-view.png
new file mode 100644
index 00000000..d3ca8105
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/19-avg-vehicle-age-by-manu-view.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/2-approve-proposed-plan.png b/sqlcl-mcp-server-intro/images/lab-4/2-approve-proposed-plan.png
new file mode 100644
index 00000000..7faef895
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/2-approve-proposed-plan.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/20-vehicle-dist-by-country-view.png b/sqlcl-mcp-server-intro/images/lab-4/20-vehicle-dist-by-country-view.png
new file mode 100644
index 00000000..463ba16e
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/20-vehicle-dist-by-country-view.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/21-request-approval-to-disconnect.png b/sqlcl-mcp-server-intro/images/lab-4/21-request-approval-to-disconnect.png
new file mode 100644
index 00000000..feb743b4
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/21-request-approval-to-disconnect.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/22-summary-of-actions-performed.png b/sqlcl-mcp-server-intro/images/lab-4/22-summary-of-actions-performed.png
new file mode 100644
index 00000000..25c4b0c8
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/22-summary-of-actions-performed.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/3-plan-when-in-the-database.png b/sqlcl-mcp-server-intro/images/lab-4/3-plan-when-in-the-database.png
new file mode 100644
index 00000000..dae44872
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/3-plan-when-in-the-database.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/4-creating-new-schemas.png b/sqlcl-mcp-server-intro/images/lab-4/4-creating-new-schemas.png
new file mode 100644
index 00000000..4cf3861a
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/4-creating-new-schemas.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/5-inserting-data-into-manufacturing-table.png b/sqlcl-mcp-server-intro/images/lab-4/5-inserting-data-into-manufacturing-table.png
new file mode 100644
index 00000000..8011e405
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/5-inserting-data-into-manufacturing-table.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/6-inserting-into-vehicle-tables.png b/sqlcl-mcp-server-intro/images/lab-4/6-inserting-into-vehicle-tables.png
new file mode 100644
index 00000000..e4939911
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/6-inserting-into-vehicle-tables.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/7-inserting-into-vehicle-table-test-insert.png b/sqlcl-mcp-server-intro/images/lab-4/7-inserting-into-vehicle-table-test-insert.png
new file mode 100644
index 00000000..61588e78
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/7-inserting-into-vehicle-table-test-insert.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/8-approving-the-insert-of-multiple-values.png b/sqlcl-mcp-server-intro/images/lab-4/8-approving-the-insert-of-multiple-values.png
new file mode 100644
index 00000000..6a1af4a4
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/8-approving-the-insert-of-multiple-values.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-4/9-experiencing-latency-or-networking-issues.png b/sqlcl-mcp-server-intro/images/lab-4/9-experiencing-latency-or-networking-issues.png
new file mode 100644
index 00000000..de984795
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-4/9-experiencing-latency-or-networking-issues.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/1-review-plan-in-overview-section.png b/sqlcl-mcp-server-intro/images/lab-5/1-review-plan-in-overview-section.png
new file mode 100644
index 00000000..16ada889
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/1-review-plan-in-overview-section.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/10-possible-next-steps-asking-to-build-out-app-for-dynamic-connections.png b/sqlcl-mcp-server-intro/images/lab-5/10-possible-next-steps-asking-to-build-out-app-for-dynamic-connections.png
new file mode 100644
index 00000000..31c43a95
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/10-possible-next-steps-asking-to-build-out-app-for-dynamic-connections.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/11-an-example-proposed-code-block-for-updating-react-application.png b/sqlcl-mcp-server-intro/images/lab-5/11-an-example-proposed-code-block-for-updating-react-application.png
new file mode 100644
index 00000000..faf1557d
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/11-an-example-proposed-code-block-for-updating-react-application.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/12-troubleshooting-merge-conflict-marker-errors.png b/sqlcl-mcp-server-intro/images/lab-5/12-troubleshooting-merge-conflict-marker-errors.png
new file mode 100644
index 00000000..f4dd3356
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/12-troubleshooting-merge-conflict-marker-errors.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/13-possible-intervention-of-prompting-to-connect-as-user.png b/sqlcl-mcp-server-intro/images/lab-5/13-possible-intervention-of-prompting-to-connect-as-user.png
new file mode 100644
index 00000000..7e221ee8
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/13-possible-intervention-of-prompting-to-connect-as-user.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/14-troubleshooting-application-networking-issues.png b/sqlcl-mcp-server-intro/images/lab-5/14-troubleshooting-application-networking-issues.png
new file mode 100644
index 00000000..4caf04c3
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/14-troubleshooting-application-networking-issues.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/15-user-prompt-for-exploring-co-schema.png b/sqlcl-mcp-server-intro/images/lab-5/15-user-prompt-for-exploring-co-schema.png
new file mode 100644
index 00000000..b523b98b
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/15-user-prompt-for-exploring-co-schema.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/2-agent-summary-plan-for-overview.png b/sqlcl-mcp-server-intro/images/lab-5/2-agent-summary-plan-for-overview.png
new file mode 100644
index 00000000..4c11814d
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/2-agent-summary-plan-for-overview.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/3-agent-response-for-exploring-co-schema.png b/sqlcl-mcp-server-intro/images/lab-5/3-agent-response-for-exploring-co-schema.png
new file mode 100644
index 00000000..ece222c6
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/3-agent-response-for-exploring-co-schema.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/4-example-of-agent-exploring-co-schema.png b/sqlcl-mcp-server-intro/images/lab-5/4-example-of-agent-exploring-co-schema.png
new file mode 100644
index 00000000..4392b05f
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/4-example-of-agent-exploring-co-schema.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/5-approve-make-directory-for-react-app.png b/sqlcl-mcp-server-intro/images/lab-5/5-approve-make-directory-for-react-app.png
new file mode 100644
index 00000000..68ceee8b
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/5-approve-make-directory-for-react-app.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/6-approve-to-create-app-jsx-file.png b/sqlcl-mcp-server-intro/images/lab-5/6-approve-to-create-app-jsx-file.png
new file mode 100644
index 00000000..7ca9941b
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/6-approve-to-create-app-jsx-file.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/7-opening-up-front-end-of-application.png b/sqlcl-mcp-server-intro/images/lab-5/7-opening-up-front-end-of-application.png
new file mode 100644
index 00000000..da3ff15c
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/7-opening-up-front-end-of-application.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/8-reviewing-the-sample-ui-with-hard-coded-values-above-fold.png b/sqlcl-mcp-server-intro/images/lab-5/8-reviewing-the-sample-ui-with-hard-coded-values-above-fold.png
new file mode 100644
index 00000000..68881d70
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/8-reviewing-the-sample-ui-with-hard-coded-values-above-fold.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/9-reviewing-the-sample-ui-with-hard-coded-values-below-fold.png b/sqlcl-mcp-server-intro/images/lab-5/9-reviewing-the-sample-ui-with-hard-coded-values-below-fold.png
new file mode 100644
index 00000000..fcdea23c
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/9-reviewing-the-sample-ui-with-hard-coded-values-below-fold.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-5/agent-updating-the-application-to-test-new-configuration.png b/sqlcl-mcp-server-intro/images/lab-5/agent-updating-the-application-to-test-new-configuration.png
new file mode 100644
index 00000000..a4762d65
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-5/agent-updating-the-application-to-test-new-configuration.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/1-entering-a-prompt-in-one-go.png b/sqlcl-mcp-server-intro/images/lab-6/1-entering-a-prompt-in-one-go.png
new file mode 100644
index 00000000..11b88e6c
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/1-entering-a-prompt-in-one-go.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/10-opening-the-html-file.png b/sqlcl-mcp-server-intro/images/lab-6/10-opening-the-html-file.png
new file mode 100644
index 00000000..f4be5ee9
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/10-opening-the-html-file.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/11-troubleshooting-replace-markers.png b/sqlcl-mcp-server-intro/images/lab-6/11-troubleshooting-replace-markers.png
new file mode 100644
index 00000000..1d47ecc4
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/11-troubleshooting-replace-markers.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/12-hr-dashboard-above-fold.png b/sqlcl-mcp-server-intro/images/lab-6/12-hr-dashboard-above-fold.png
new file mode 100644
index 00000000..5fed0485
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/12-hr-dashboard-above-fold.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/13-hr-dashboard-below-fold.png b/sqlcl-mcp-server-intro/images/lab-6/13-hr-dashboard-below-fold.png
new file mode 100644
index 00000000..7c81d072
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/13-hr-dashboard-below-fold.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/14-hr-dashboard-even-further-below-fold.png b/sqlcl-mcp-server-intro/images/lab-6/14-hr-dashboard-even-further-below-fold.png
new file mode 100644
index 00000000..8acf2557
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/14-hr-dashboard-even-further-below-fold.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/2-approving-the-agent-to-view-all-tables-in-hr.png b/sqlcl-mcp-server-intro/images/lab-6/2-approving-the-agent-to-view-all-tables-in-hr.png
new file mode 100644
index 00000000..a78ba780
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/2-approving-the-agent-to-view-all-tables-in-hr.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/3-results-of-the-agent-query-on-hr-schema.png b/sqlcl-mcp-server-intro/images/lab-6/3-results-of-the-agent-query-on-hr-schema.png
new file mode 100644
index 00000000..8e607028
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/3-results-of-the-agent-query-on-hr-schema.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/4-asking-to-transition-to-act-with-a-reminder.png b/sqlcl-mcp-server-intro/images/lab-6/4-asking-to-transition-to-act-with-a-reminder.png
new file mode 100644
index 00000000..2cf2c14d
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/4-asking-to-transition-to-act-with-a-reminder.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/5-a-review-of-the-proposed-dashboard.png b/sqlcl-mcp-server-intro/images/lab-6/5-a-review-of-the-proposed-dashboard.png
new file mode 100644
index 00000000..ade40327
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/5-a-review-of-the-proposed-dashboard.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/6-agent-creates-a-new-directory.png b/sqlcl-mcp-server-intro/images/lab-6/6-agent-creates-a-new-directory.png
new file mode 100644
index 00000000..65e07375
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/6-agent-creates-a-new-directory.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/7-agent-creates-a-new-html-file.png b/sqlcl-mcp-server-intro/images/lab-6/7-agent-creates-a-new-html-file.png
new file mode 100644
index 00000000..102be5f3
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/7-agent-creates-a-new-html-file.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/8-agent-creates-a-new-js-file.png b/sqlcl-mcp-server-intro/images/lab-6/8-agent-creates-a-new-js-file.png
new file mode 100644
index 00000000..b44f13f0
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/8-agent-creates-a-new-js-file.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-6/9-agent-using-sqlc-mcp-to-fetch-data.png b/sqlcl-mcp-server-intro/images/lab-6/9-agent-using-sqlc-mcp-to-fetch-data.png
new file mode 100644
index 00000000..2268528f
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-6/9-agent-using-sqlc-mcp-to-fetch-data.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/1-creating-the-sqlnb-file.png b/sqlcl-mcp-server-intro/images/lab-7/1-creating-the-sqlnb-file.png
new file mode 100644
index 00000000..a6458ad2
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/1-creating-the-sqlnb-file.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/10-review-sqlnb-two.png b/sqlcl-mcp-server-intro/images/lab-7/10-review-sqlnb-two.png
new file mode 100644
index 00000000..7997e341
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/10-review-sqlnb-two.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/11-review-sqlnb-three.png b/sqlcl-mcp-server-intro/images/lab-7/11-review-sqlnb-three.png
new file mode 100644
index 00000000..845a144f
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/11-review-sqlnb-three.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/2-cline-reviewing-the-task.png b/sqlcl-mcp-server-intro/images/lab-7/2-cline-reviewing-the-task.png
new file mode 100644
index 00000000..361b8336
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/2-cline-reviewing-the-task.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/3-example-results-from-cline-and-mcp.png b/sqlcl-mcp-server-intro/images/lab-7/3-example-results-from-cline-and-mcp.png
new file mode 100644
index 00000000..264c962c
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/3-example-results-from-cline-and-mcp.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/4-another-example-of-the-sqlnb-file.png b/sqlcl-mcp-server-intro/images/lab-7/4-another-example-of-the-sqlnb-file.png
new file mode 100644
index 00000000..a36c031a
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/4-another-example-of-the-sqlnb-file.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/5-switching-to-act-mode-to-complete-tasks.png b/sqlcl-mcp-server-intro/images/lab-7/5-switching-to-act-mode-to-complete-tasks.png
new file mode 100644
index 00000000..b52a44ea
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/5-switching-to-act-mode-to-complete-tasks.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/6-reviewing-the-finished-product.png b/sqlcl-mcp-server-intro/images/lab-7/6-reviewing-the-finished-product.png
new file mode 100644
index 00000000..038c646d
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/6-reviewing-the-finished-product.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/7-navigate-to-sql-connections.png b/sqlcl-mcp-server-intro/images/lab-7/7-navigate-to-sql-connections.png
new file mode 100644
index 00000000..cdf5f003
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/7-navigate-to-sql-connections.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/8-click-on-new-sql-notebook-file.png b/sqlcl-mcp-server-intro/images/lab-7/8-click-on-new-sql-notebook-file.png
new file mode 100644
index 00000000..ea5e82ec
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/8-click-on-new-sql-notebook-file.png differ
diff --git a/sqlcl-mcp-server-intro/images/lab-7/9-review-sqlnb-one.png b/sqlcl-mcp-server-intro/images/lab-7/9-review-sqlnb-one.png
new file mode 100644
index 00000000..874b1036
Binary files /dev/null and b/sqlcl-mcp-server-intro/images/lab-7/9-review-sqlnb-one.png differ
diff --git a/sqlcl-mcp-server-intro/workshops/tenancy/manifest.json b/sqlcl-mcp-server-intro/workshops/tenancy/manifest.json
index c4c3d6cc..4a27c2d5 100644
--- a/sqlcl-mcp-server-intro/workshops/tenancy/manifest.json
+++ b/sqlcl-mcp-server-intro/workshops/tenancy/manifest.json
@@ -1,44 +1,39 @@
{
- "workshoptitle": "The Title of the Workshop is defined in the manifest",
+ "workshoptitle": "Explore the SQLcl MCP Server",
"include": {"starter-file.sql":"../../files/starter-file.sql",
"sample.json":"../../files/sample.json",
"injected-step.md":"../../files/injected-step.md"},
"help": "livelabs-help-db_us@oracle.com",
"tutorials": [
{
- "title": "Title",
- "description": "This is the complete template for LiveLabs content developers",
+ "title": "Introduction",
+ "description": "SQLcl MCP Server introduction.",
"filename": "../../1-introduction.md"
},
{
- "title": "Title",
- "description": "Template to link to Need Help lab at the end of workshop. Change 'CHANGE-ME' in link below to need-help-livelabs.md or need-help-freetier.md",
- "filename":"../../2-environment-set-up.md",
- "type": {
- "macOS": "macOS",
- "windows" : "Windows",
- "linux" : "Lunux"
- }
+ "title": "Environment set-up",
+ "description": "Installing and configuring necessary dependencies and pre-requisites.",
+ "filename":"../../2-environment-set-up.md"
},
{
- "title": "Title",
- "description": "This is the complete template for LiveLabs content developers",
- "filename": "../../livelabs-template.md"
+ "title": "Explore SQLcl MCP server",
+ "description": "Setting up a database connection, getting to know Cline and the SQLcl MCP Server.",
+ "filename": "../../3-using-the-mcp-server.md"
},
{
- "title": " ",
- "description": "Template to link to Need Help lab at the end of workshop. Change 'CHANGE-ME' in link below to need-help-livelabs.md or need-help-freetier.md",
- "filename":"https://oracle-livelabs.github.io/common/labs/need-help/need-help-freetier.md"
+ "title": "Build database objects",
+ "description": "Using Agents and the SQLcl MCP Server to create new database objects.",
+ "filename":"../../4-build-database-objects.md"
},
{
- "title": " ",
- "description": "Template to link to Need Help lab at the end of workshop. Change 'CHANGE-ME' in link below to need-help-livelabs.md or need-help-freetier.md",
- "filename":"https://oracle-livelabs.github.io/common/labs/need-help/need-help-freetier.md"
+ "title": "Build a React app",
+ "description": "Building a starter React-based application.",
+ "filename":"../../5-build-a-react-app.md"
},
{
- "title": " ",
- "description": "This is the complete template for LiveLabs content developers",
- "filename": "../../livelabs-template.md"
+ "title": "Build an HTML dashbaord",
+ "description": "Building a starter HTML-dashboard.",
+ "filename": "../../6-build-a-html-dashboard.md"
},
{
"title": "Need Help?",