How to integrate Doppler MCP with CrewAI

Connect CrewAI to Doppler MCP. Get secrets for staging environment in doppler, add a new secret to marketing project, and more using natural language, with authentication handled for you.

Doppler logoDoppler
Api Key

Doppler is a secrets management platform for organizing and syncing environment variables. It lets teams securely centralize, share, and update secrets across infrastructure.

62 Tools

Introduction

This guide walks you through connecting Doppler to CrewAI using the Composio tool router. By the end, you'll have a working Doppler agent that can get secrets for staging environment in doppler, add a new secret to marketing project, list all projects and their environments through natural language commands.

This guide will help you understand how to give your CrewAI agent real control over a Doppler account through Composio's Doppler MCP server.

Before we dive in, let's take a quick look at the key ideas and tools involved.

Also integrate Doppler with

TL;DR

Here's what you'll learn:
  • Get a Composio API key and configure your Doppler connection
  • Set up CrewAI with an MCP enabled agent
  • Create a Tool Router session or standalone MCP server for Doppler
  • Build a conversational loop where your agent can execute Doppler operations

What is CrewAI?

CrewAI is a powerful framework for building multi-agent AI systems. It provides primitives for defining agents with specific roles, creating tasks, and orchestrating workflows through crews.

Key features include:

  • Agent Roles: Define specialized agents with specific goals and backstories
  • Task Management: Create tasks with clear descriptions and expected outputs
  • Crew Orchestration: Combine agents and tasks into collaborative workflows
  • MCP Integration: Connect to external tools through Model Context Protocol

What is the Doppler MCP server, and what's possible with it?

The Doppler MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Doppler account. It provides structured and secure access to your projects, environments, configs, secrets, service tokens, users, and webhooks, so your agent can inspect projects, review configurations, retrieve and update secrets, create service tokens, and audit workspace resources on your behalf.

  • Project and environment discovery: Have your agent list Doppler projects, inspect project details, and review the environments available within each project.
  • Configuration review: Let the agent list configurations for a project and retrieve a specific config when you need to check how an environment is organized.
  • Secret retrieval and updates: Direct your agent to list secret names, retrieve a specific secret, download configured secrets, or update secrets within a chosen config.
  • Service token management: Instruct your agent to create a service token for a config or list its existing service tokens for review.
  • Workspace and webhook auditing: Have your agent identify the authenticated user, list workplace users, and review webhooks configured for a project.

What is the Composio tool router, and how does it fit here?

What is Composio SDK?

Composio's Composio SDK helps agents find the right tools for a task at runtime. You can plug in multiple toolkits (like Gmail, HubSpot, and GitHub), and the agent will identify the relevant app and action to complete multi-step workflows. This can reduce token usage and improve the reliability of tool calls. Read more here: Getting started with Composio SDK

The tool router generates a secure MCP URL that your agents can access to perform actions.

How the Composio SDK works

The Composio SDK follows a three-phase workflow:

  1. Discovery: Searches for tools matching your task and returns relevant toolkits with their details.
  2. Authentication: Checks for active connections. If missing, creates an auth config and returns a connection URL via Auth Link.
  3. Execution: Executes the action using the authenticated connection.

Step-by-step Guide

Step by step08 STEPS
1

Prerequisites

Before starting, make sure you have:
  • Python 3.9 or higher
  • A Composio account and API key
  • A Doppler connection authorized in Composio
  • An OpenAI API key for the CrewAI LLM
  • Basic familiarity with Python
2

Getting API Keys for OpenAI and Composio

OpenAI API Key
  • Go to the OpenAI dashboard and create an API key. You'll need credits to use the models, or you can connect to another model provider.
  • Keep the API key safe.
Composio API Key
  • Log in to the Composio dashboard.
  • Navigate to your API settings and generate a new API key.
  • Store this key securely as you'll need it for authentication.
3

Install dependencies

bash
pip install composio crewai crewai-tools[mcp] python-dotenv
What's happening:
  • composio connects your agent to Doppler via MCP
  • crewai provides Agent, Task, Crew, and LLM primitives
  • crewai-tools[mcp] includes MCP helpers
  • python-dotenv loads environment variables from .env
4

Set up environment variables

bash
COMPOSIO_API_KEY=your_composio_api_key_here
USER_ID=your_user_id_here
OPENAI_API_KEY=your_openai_api_key_here

Create a .env file in your project root.

What's happening:

  • COMPOSIO_API_KEY authenticates with Composio
  • USER_ID scopes the session to your account
  • OPENAI_API_KEY lets CrewAI use your chosen OpenAI model
5

Import dependencies

python
import os
from composio import Composio
from crewai import Agent, Task, Crew
from crewai_tools import MCPServerAdapter
import dotenv

dotenv.load_dotenv()

COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
COMPOSIO_USER_ID = os.getenv("COMPOSIO_USER_ID")

if not COMPOSIO_API_KEY:
    raise ValueError("COMPOSIO_API_KEY is not set")
if not COMPOSIO_USER_ID:
    raise ValueError("COMPOSIO_USER_ID is not set")
What's happening:
  • CrewAI classes define agents and tasks, and run the workflow
  • MCPServerHTTP connects the agent to an MCP endpoint
  • Composio will give you a short lived Doppler MCP URL
6

Create a Composio Tool Router session for Doppler

python
composio_client = Composio(api_key=COMPOSIO_API_KEY)
session = composio_client.create(user_id=COMPOSIO_USER_ID, toolkits=["doppler"])

url = session.mcp.url
What's happening:
  • You create a Doppler only session through Composio
  • Composio returns an MCP HTTP URL that exposes Doppler tools
7

Initialize the MCP Server

python
server_params = {
    "url": url,
    "transport": "streamable-http",
    "headers": {"x-api-key": COMPOSIO_API_KEY},
}

with MCPServerAdapter(server_params) as tools:
    agent = Agent(
        role="Search Assistant",
        goal="Help users search the internet effectively",
        backstory="You are a helpful assistant with access to search tools.",
        tools=tools,
        verbose=False,
        max_iter=10,
    )
What's Happening:
  • Server Configuration: The code sets up connection parameters including the MCP server URL, streamable HTTP transport, and Composio API key authentication.
  • MCP Adapter Bridge: MCPServerAdapter acts as a context manager that converts Composio MCP tools into a CrewAI-compatible format.
  • Agent Setup: Creates a CrewAI Agent with a defined role (Search Assistant), goal (help with internet searches), and access to the MCP tools.
  • Configuration Options: The agent includes settings like verbose=False for clean output and max_iter=10 to prevent infinite loops.
  • Dynamic Tool Usage: Once created, the agent automatically accesses all Composio Search tools and decides when to use them based on user queries.
8

Create a CLI Chatloop and define the Crew

python
print("Chat started! Type 'exit' or 'quit' to end.\n")

conversation_context = ""

while True:
    user_input = input("You: ").strip()

    if user_input.lower() in ["exit", "quit", "bye"]:
        print("\nGoodbye!")
        break

    if not user_input:
        continue

    conversation_context += f"\nUser: {user_input}\n"
    print("\nAgent is thinking...\n")

    task = Task(
        description=(
            f"Conversation history:\n{conversation_context}\n\n"
            f"Current request: {user_input}"
        ),
        expected_output="A helpful response addressing the user's request",
        agent=agent,
    )

    crew = Crew(agents=[agent], tasks=[task], verbose=False)
    result = crew.kickoff()
    response = str(result)

    conversation_context += f"Agent: {response}\n"
    print(f"Agent: {response}\n")
What's Happening:
  • Interactive CLI Setup: The code creates an infinite loop that continuously prompts for user input and maintains the entire conversation history in a string variable.
  • Input Validation: Empty inputs are ignored to prevent processing blank messages and keep the conversation clean.
  • Context Building: Each user message is appended to the conversation context, which preserves the full dialogue history for better agent responses.
  • Dynamic Task Creation: For every user input, a new Task is created that includes both the full conversation history and the current request as context.
  • Crew Execution: A Crew is instantiated with the agent and task, then kicked off to process the request and generate a response.
  • Response Management: The agent's response is converted to a string, added to the conversation context, and displayed to the user, maintaining conversational continuity.

Complete Code

Here's the complete code to get you started with Doppler and CrewAI:

python
from crewai import Agent, Task, Crew, LLM
from crewai_tools import MCPServerAdapter
from composio import Composio
from dotenv import load_dotenv
import os

load_dotenv()

GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
COMPOSIO_USER_ID = os.getenv("COMPOSIO_USER_ID")

if not GOOGLE_API_KEY:
    raise ValueError("GOOGLE_API_KEY is not set in the environment.")
if not COMPOSIO_API_KEY:
    raise ValueError("COMPOSIO_API_KEY is not set in the environment.")
if not COMPOSIO_USER_ID:
    raise ValueError("COMPOSIO_USER_ID is not set in the environment.")

# Initialize Composio and create a session
composio = Composio(api_key=COMPOSIO_API_KEY)
session = composio.create(
    user_id=COMPOSIO_USER_ID,
    toolkits=["doppler"],
)
url = session.mcp.url

# Configure LLM
llm = LLM(
    model="gpt-5",
    api_key=os.getenv("OPENAI_API_KEY"),
)

server_params = {
    "url": url,
    "transport": "streamable-http",
    "headers": {"x-api-key": COMPOSIO_API_KEY},
}

with MCPServerAdapter(server_params) as tools:
    agent = Agent(
        role="Search Assistant",
        goal="Help users with internet searches",
        backstory="You are an expert assistant with access to Composio Search tools.",
        tools=tools,
        llm=llm,
        verbose=False,
        max_iter=10,
    )

    print("Chat started! Type 'exit' or 'quit' to end.\n")

    conversation_context = ""

    while True:
        user_input = input("You: ").strip()

        if user_input.lower() in ["exit", "quit", "bye"]:
            print("\nGoodbye!")
            break

        if not user_input:
            continue

        conversation_context += f"\nUser: {user_input}\n"
        print("\nAgent is thinking...\n")

        task = Task(
            description=(
                f"Conversation history:\n{conversation_context}\n\n"
                f"Current request: {user_input}"
            ),
            expected_output="A helpful response addressing the user's request",
            agent=agent,
        )

        crew = Crew(agents=[agent], tasks=[task], verbose=False)
        result = crew.kickoff()
        response = str(result)

        conversation_context += f"Agent: {response}\n"
        print(f"Agent: {response}\n")

Conclusion

You now have a CrewAI agent connected to Doppler through Composio's Tool Router. The agent can perform Doppler operations through natural language commands.

Next steps:

  • Add role-specific instructions to customize agent behavior
  • Plug in more toolkits for multi-app workflows
  • Chain tasks for complex multi-step operations
TOOLS

Supported Tools

Every Doppler action and event your agent gets out of the box.

List Activity Logs

List workplace activity logs with pagination support.

Get Activity Log

Retrieve detailed information about a specific activity log entry.

Add Webhook

Tool to create a new webhook for a Doppler project.

Get Authenticated User Info

Tool to retrieve information about the authenticated user or token.

Get Config Log

Tool to retrieve a specific config log from Doppler.

List Config Logs

Tool to retrieve configuration change logs for a specific config in a project.

Rollback Config Log

Tool to rollback a config to a selected log version.

Clone Config

Tool to clone a branch config including all its secrets.

Create Config

Tool to create a branch config.

Delete Config

Tool to delete a config permanently.

Get Config

Tool to retrieve a specific Doppler config by project and config name.

List Doppler Configs

Tool to list configurations from a Doppler project.

Lock Config

Lock a Doppler config to prevent it from being renamed or deleted.

Unlock Config

Tool to unlock a config.

Update Config

Rename an existing Doppler config within a project.

Create Encrypted Share Link

Create a Doppler Share link for an end-to-end encrypted secret.

Create Plain Text Share Link

Tool to generate a Doppler Share link by sending a plain text secret.

Create Service Token

Tool to create a new service token for a Doppler config.

Delete Service Token

Tool to delete an existing service token from a Doppler config.

Delete Webhook

Tool to delete an existing webhook.

Disable Webhook

Tool to disable an existing Doppler webhook.

Revoke Dynamic Secret Lease

Revoke a dynamic secret lease immediately before its TTL expires.

Enable Webhook

Tool to enable a previously disabled webhook.

Create Environment

Create a new environment in a Doppler project.

Delete Environment

Tool to delete an environment.

Get Environment

Retrieves detailed metadata for a specific Doppler environment within a project.

List Environments

Tool to list all environments in a Doppler project.

Rename Environment

Rename an environment's display name within a Doppler project.

Get Webhook

Tool to retrieve an existing webhook by its slug.

Get Workplace User

Tool to retrieve a specific workplace user by their workplace_user id.

Remove Group Member

Remove a member from a Doppler group.

List Integrations

Tool to retrieve all existing integrations in Doppler.

List Invites

Tool to list open workplace invites.

List Change Requests

List existing change requests in the Doppler workplace.

List Project Members

Tool to list all members of a Doppler project including users, groups, service accounts, and invites.

List Service Tokens

Tool to list all service tokens for a specific Doppler config.

List Workplace Users

Tool to list all users in the Doppler workplace.

List Webhooks

Tool to list all webhooks configured for a Doppler project.

Remove Project Member

Tool to remove a member from a project.

Get Project Member

Retrieve a specific project member's details including their role and environment access permissions.

List Project Permissions

List all available project-level permissions in Doppler.

Get Project Role

Retrieve detailed information about a specific project role in Doppler, including its permissions, display name, identifier, creation timestamp, and whether it's a custom or built-in role.

List Project Roles

Tool to list all available project roles in Doppler.

Create Project

Tool to create a project.

Delete Project

Tool to delete a project permanently.

Get Project Details

Tool to retrieve details of a specific Doppler project by its identifier.

List Doppler Projects

Tool to list all Doppler projects in your workspace.

Delete Secret

Tool to delete a secret from a Doppler config.

Download Secrets

Tool to download secrets from a Doppler config in various formats.

Get Secret

Tool to retrieve a specific secret from a Doppler project config.

List Doppler Secrets

Tool to list all secrets for a specific Doppler config within a project.

List Secret Names

Tool to retrieve the list of secret names from a specific Doppler config.

Update Doppler Secrets

Tool to update secrets in a Doppler config.

Update Secret Note

Tool to update a note for a secret in Doppler.

Update Project

Tool to update an existing Doppler project's name or description.

Update Secret Note

DEPRECATED: Use DopplerSecretsUpdateNote instead.

Update Webhook

Tool to update an existing webhook configuration in Doppler.

Update Workplace Settings

Tool to update workplace settings in Doppler.

Get Workplace Information

Tool to retrieve workplace information from Doppler.

Get Workplace Role

Tool to retrieve workplace role information from Doppler.

List Workplace Roles

Tool to list all workplace roles in your Doppler workspace.

List Workplace Permissions

Retrieves all available workplace permissions in Doppler.

FAQ

Frequently asked questions

With a standalone Doppler MCP server, the agents and LLMs can only access a fixed set of Doppler tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Doppler and many other apps based on the task at hand, all through a single MCP endpoint.

Yes, you can. CrewAI fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Doppler tools.

Yes, absolutely. You can configure which Doppler scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Doppler data and credentials are handled as safely as possible.

Start with Doppler.It takes 30 seconds.

Managed auth, hosted MCP servers, and every Doppler tool your agent needs.Free to start.

Start building