> ## Documentation Index
> Fetch the complete documentation index at: https://rasa.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Developer Quickstart

> Fastest happy path to run Rasa, connect MCP tools, and build your first agent.

export const DeveloperLicenseForm = ({buttonLabel = "Get it here", spaced = false}) => {
  const endpoint = "https://api.hsforms.com/submissions/v3/integration/submit/6711345/23b054de-86aa-433a-801f-fcf1a13bc9e2";
  const getPageContext = () => {
    if (typeof window === "undefined") {
      return {};
    }
    return {
      pageName: document.title,
      pageUri: `${window.location.origin}${window.location.pathname}`
    };
  };
  const [email, setEmail] = useState("");
  const [consentGiven, setConsentGiven] = useState(false);
  const [status, setStatus] = useState("idle");
  const [website, setWebsite] = useState("");
  const isSubmitting = status === "submitting";
  const resetStatus = () => {
    if (status !== "idle") {
      setStatus("idle");
    }
  };
  const handleSubmit = async event => {
    event.preventDefault();
    if (website) {
      return;
    }
    const normalizedEmail = email.trim();
    if (!normalizedEmail || isSubmitting) {
      return;
    }
    setStatus("submitting");
    try {
      const response = await fetch(endpoint, {
        method: "POST",
        credentials: "omit",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify({
          fields: [{
            name: "email",
            value: normalizedEmail
          }, {
            name: "consent_to_eula_check_box",
            value: String(consentGiven)
          }],
          context: getPageContext()
        })
      });
      if (!response.ok) {
        throw new Error("HubSpot form submission failed");
      }
      setEmail("");
      setConsentGiven(false);
      setStatus("success");
    } catch {
      setStatus("error");
    }
  };
  return <form className={`not-prose rasa-license-form ${spaced ? "rasa-license-form--spaced" : ""}`} onSubmit={handleSubmit}>
      <label className="rasa-license-form__honeypot" aria-hidden="true">
        <span>Leave this field empty</span>
        <input name="website" tabIndex="-1" aria-hidden="true" autoComplete="off" value={website} onChange={event => setWebsite(event.target.value)} />
      </label>
      <input className="rasa-license-form__email" type="email" name="email" required maxLength={254} autoComplete="email" placeholder="you@company.com" aria-label="Work email" value={email} onChange={event => {
    setEmail(event.target.value);
    resetStatus();
  }} />
      <button type="submit" className="rasa-license-form__submit" disabled={isSubmitting}>
        {isSubmitting ? "Submitting…" : buttonLabel}
      </button>
      <label className="rasa-license-form__consent">
        <input type="checkbox" name="consent_to_eula_check_box" required checked={consentGiven} onChange={event => {
    setConsentGiven(event.target.checked);
    resetStatus();
  }} />
        <span>
          I agree to the{" "}
          <a href="https://rasa.com/developer-terms" target="_blank" rel="noopener noreferrer">
            Rasa Developer Edition terms
          </a>
          {"."}
        </span>
      </label>
      {status === "success" && <output className="rasa-license-form__status rasa-license-form__status--success">
          Thanks! Check your inbox for your developer license.
        </output>}
      {status === "error" && <p className="rasa-license-form__status rasa-license-form__status--error" role="alert">
          We couldn’t submit your request. Please try again.
        </p>}
    </form>;
};

Build your first Rasa agent in minutes with the shortest path.

## Get a free license

<Card title="Developer Edition" icon="key">
  Build and run agents for up to 1,000 conversations per month with the free Rasa Developer Edition.

  <DeveloperLicenseForm buttonLabel="Get your license" />
</Card>

## Create a project and install Rasa Pro

In your terminal:

```bash theme={null}
mkdir rasa-agent
cd rasa-agent
uv venv --python 3.11
source .venv/bin/activate
uv pip install rasa-pro
rasa init --template=basic
```

Need to install **uv**? [Get it here](https://docs.astral.sh/uv/getting-started/installation/).

Set your license:

```bash theme={null}
export RASA_LICENSE=YOUR_LICENSE_KEY
```

This template uses OpenAI as the default LLM provider. To use a different provider, define a [model group](/docs/reference/config/components/llm-configuration#model-groups) in `endpoints.yml` and reference it via `model_group` in `config.yml`.

Set your API key as an environment variable:

```bash theme={null}
export OPENAI_API_KEY=YOUR_API_KEY
```

## Connect Rasa MCP Tools

Rasa MCP Tools are a set of tools, skills and docs that enable you to interact with your Rasa agent using natural language. **They are included in Rasa Pro 3.16 and later.**

v3.16

Run the setup wizard from your project root:

```bash theme={null}
rasa tools init
```

The wizard creates `.rasa/tools.yaml` and downloads offline docs and skills for your project. It also generates MCP configuration for your IDE.

<Note>
  Run your IDE from your **project root** so Rasa Tools can read `.rasa/tools.yaml`.
</Note>

### Verify your setup

Open your IDE and verify that Rasa Tools appear in your MCP settings. If the wizard configured your client automatically, you should see `rasa-tools` listed and enabled. If it's not, make sure to switch it on or run it from the command line.

```bash theme={null}
rasa tools run
```

For manual configuration or more advanced setup details for specific clients (Cursor, VS Code, Claude Code, JetBrains), read more about [**Rasa MCP Tools here**](/docs/pro/installation/rasa-mcp-tools).

## Build your first agent

Open a chat with your IDE copilot and send this prompt to get started:

```text theme={null}
Use Rasa MCP tools to inspect this project and briefly summarize what it does in a few sentences. 
Then propose 3 **fun, concrete verticals**—think **book recommendation**, **flight booking**, or **concierge**—not “more of the same template.” 

For each: one-line pitch, 2 user stories, what you’d add (flows/slots/APIs/sub-agents/MCP servers), effort S/M/L.
```

Pick the vertical you like best — or suggest your own.


## Related topics

- [Get Started with Rasa](/docs/pro/installation/overview.md)
- [Rasa Tutorial](/docs/pro/tutorial.md)
- [Build an Agent with Prompts](/docs/learn/ai-assisted-development.md)
- [Rasa: Code-First AI Agent Framework](/docs/pro/intro.md)
- [Rasa MCP Tools](/docs/pro/installation/rasa-mcp-tools.md)
