> For the complete documentation index, see [llms.txt](https://v2.dataos.info/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://v2.dataos.info/operate/v1/dataos-operator/design-tenants/deploy-stacks.md).

# Deploy Stacks

Deploy the Vulcan, and MCP Server Stacks after [Create mandatory Secrets](/operate/v1/dataos-operator/design-tenants/create-mandatory-secrets.md). A Tenant is not deployment-ready until its required Stacks are deployed and healthy.

| Stack          | Deploys                                    |
| -------------- | ------------------------------------------ |
| **Vulcan**     | Postgres and Snowflake prerequisite Stacks |
| **MCP Server** | Data Product MCP server                    |

<details>

<summary>Prerequisites</summary>

* [Attach the Data Plane and Compute](/operate/v1/dataos-operator/design-tenants/create-tenants.md#2-attach-the-data-plane-and-compute) complete
* `vulcan-state-connection` and `vulcan-object-store-connection` applied (see [Create mandatory Secrets](/operate/v1/dataos-operator/design-tenants/create-mandatory-secrets.md))
* DataOS CLI initialized for the Tenant

Navigate to `dataos-component-install/` (or your equivalent root) before applying Stacks.

</details>

## Vulcan

Deploy the Vulcan prerequisite Stacks from the Instance platform shell artifacts.

```bash
dataos-ctl resource apply -f installs/instance-platform-shell/artifacts/vulcan-postgres-stack.yaml --disable-interpolation
dataos-ctl resource apply -f installs/instance-platform-shell/artifacts/vulcan-snowflake-stack.yaml --disable-interpolation
```

{% hint style="info" %}
Use `--disable-interpolation` so Instance-level placeholders in the artifacts are not expanded incorrectly at apply time.
{% endhint %}

## MCP Server

Deploy a **Data Product MCP server** for Data Product tooling on the Instance.

{% stepper %}
{% step %}
**Create OpenAPI Secret (mandatory name)**

Secret name: `dataproduct-mcp-secrets`. Do not rename.

<details>

<summary>Manifest: dataproduct-mcp-secrets</summary>

```yaml
name: dataproduct-mcp-secrets
version: v2alpha
type: secret
secret:
  type: key-value
  data:
    VULCAN_INSTANCE_URL: "https://${INSTANCE_FQDN}"
    LOG_LEVEL: "INFO"
    OPENAI_API_KEY: ${OPENAI_API_KEY}
    METRICS_ENABLED: "true"
    CLOUDEVENTS_ENABLED: "false"
```

</details>
{% endstep %}

{% step %}
**Apply MCP artifacts**

```bash
# Secret: substitute instance FQDN and OpenAI key
INSTANCE_FQDN=example-iks01.instance.dataos.cloud OPENAI_API_KEY=<your-key> \
  dataos-ctl resource apply -f installs/instance-platform-shell/artifacts/dataproduct-mcp-secret.yaml --disable-interpolation

# Stack
dataos-ctl resource apply -f installs/instance-platform-shell/artifacts/dataproduct-mcp-stack.yaml --disable-interpolation

# Service: set tenant and compute for your environment
TENANT_ID=qa COMPUTE_NAME=qa-compute \
  dataos-ctl resource apply -f installs/instance-platform-shell/artifacts/dataproduct-mcp-service.yaml
```

{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Do not commit `OPENAI_API_KEY` or other credentials to Git. Pass them via environment variables or your secret manager at apply time.
{% endhint %}

## Checkpoint

The Vulcan and MCP Server Stack resources apply successfully and report ready or healthy status.

<details>

<summary>Troubleshooting: Vulcan Stacks fail</summary>

* Confirm both state store secrets exist with the exact required names ([Create mandatory Secrets](/operate/v1/dataos-operator/design-tenants/create-mandatory-secrets.md)).
* Use `--disable-interpolation` on Stack apply commands where required.
* Verify the state store outputs the secrets point to.

</details>

{% hint style="success" %}
Next: [Validate Tenant readiness](/operate/v1/dataos-operator/design-tenants/create-tenants.md#readiness-checklist).
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://v2.dataos.info/operate/v1/dataos-operator/design-tenants/deploy-stacks.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
