# How to integrate Dropbox sign MCP with Mastra AI

```json
{
  "title": "How to integrate Dropbox sign MCP with Mastra AI",
  "toolkit": "Dropbox sign",
  "toolkit_slug": "dropbox_sign",
  "framework": "Mastra AI",
  "framework_slug": "mastra-ai",
  "url": "https://composio.dev/toolkits/dropbox_sign/framework/mastra-ai",
  "markdown_url": "https://composio.dev/toolkits/dropbox_sign/framework/mastra-ai.md",
  "updated_at": "2026-05-12T10:09:55.194Z"
}
```

## Introduction

This guide walks you through connecting Dropbox sign to Mastra AI using the Composio tool router. By the end, you'll have a working Dropbox sign agent that can send nda for signature to new hire, get status of recent signature requests, download signed contract from last week through natural language commands.
This guide will help you understand how to give your Mastra AI agent real control over a Dropbox sign account through Composio's Dropbox sign MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Dropbox sign with

- [ChatGPT](https://composio.dev/toolkits/dropbox_sign/framework/chatgpt)
- [OpenAI Agents SDK](https://composio.dev/toolkits/dropbox_sign/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/dropbox_sign/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/dropbox_sign/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/dropbox_sign/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/dropbox_sign/framework/codex)
- [Cursor](https://composio.dev/toolkits/dropbox_sign/framework/cursor)
- [VS Code](https://composio.dev/toolkits/dropbox_sign/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/dropbox_sign/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/dropbox_sign/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/dropbox_sign/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/dropbox_sign/framework/cli)
- [Google ADK](https://composio.dev/toolkits/dropbox_sign/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/dropbox_sign/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/dropbox_sign/framework/ai-sdk)
- [LlamaIndex](https://composio.dev/toolkits/dropbox_sign/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/dropbox_sign/framework/crew-ai)

## TL;DR

Here's what you'll learn:
- Set up your environment so Mastra, OpenAI, and Composio work together
- Create a Tool Router session in Composio that exposes Dropbox sign tools
- Connect Mastra's MCP client to the Composio generated MCP URL
- Fetch Dropbox sign tool definitions and attach them as a toolset
- Build a Mastra agent that can reason, call tools, and return structured results
- Run an interactive CLI where you can chat with your Dropbox sign agent

## What is Mastra AI?

Mastra AI is a TypeScript framework for building AI agents with tool support. It provides a clean API for creating agents that can use external services through MCP.
Key features include:
- MCP Client: Built-in support for Model Context Protocol servers
- Toolsets: Organize tools into logical groups
- Step Callbacks: Monitor and debug agent execution
- OpenAI Integration: Works with OpenAI models via @ai-sdk/openai

## What is the Dropbox sign MCP server, and what's possible with it?

The Dropbox sign MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Dropbox Sign account. It provides structured and secure access to your e-signature workflows, so your agent can prepare signature requests, manage documents, track signing progress, and automate agreement workflows on your behalf.
- Automated signature requests: Have your agent create, send, and manage legally binding signature requests to one or multiple recipients, streamlining document approval processes.
- Template-based document preparation: Let your agent generate documents from templates, pre-fill fields, and quickly send out repeat agreements without manual editing.
- Status tracking and reminders: Ask your agent to monitor the progress of signature requests, check who has signed, and send automated reminders to outstanding signers as needed.
- Secure document storage and retrieval: Effortlessly fetch completed, pending, or archived documents, download signed agreements, and keep your workflow organized and compliant.
- Audit trails and activity logs: Access detailed audit trails and event histories for every document, so you can maintain compliance and always know who did what, and when.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `DROPBOX_SIGN_ADD_USER_TO_TEAM` | Invite User to Team | Tool to invite a user to your Team. Use when you need to add a member by email or account ID. |
| `DROPBOX_SIGN_ADD_USER_TO_TEMPLATE` | Add User to Template | Tool to grant a specified account access to a template. Use when you need to share a template with another user after confirming template and account identifiers. |
| `DROPBOX_SIGN_BULK_CREATE_EMBEDDED_SIG_REQ_WITH_TEMPLATE` | Bulk create embedded signature request with template | Tool to create a BulkSendJob for embedded templated signature requests. Use when you need to send up to 250 embedded signature requests at once via one or more templates for iFrame signing. |
| `DROPBOX_SIGN_BULK_SEND_WITH_TEMPLATE` | Bulk send with template | Tool to create a BulkSendJob for templated signature requests. Use when you need to send up to 250 signature requests at once via one or more templates. |
| `DROPBOX_SIGN_CANCEL_SIGNATURE_REQUEST` | Cancel Signature Request | Cancels an incomplete signature request. Use when you need to cancel a pending signature request that has not been completed. The operation is asynchronous and not reversible - once canceled, the signature request cannot be restored. |
| `DROPBOX_SIGN_CREATE_ACCOUNT` | Create Dropbox Sign Account | Tool to create a new Dropbox Sign account associated with a specified email address. Use when you need to programmatically register new users in the Dropbox Sign platform. |
| `DROPBOX_SIGN_CREATE_API_APP` | Create API App | Tool to create a new Dropbox Sign API App. Use when you need to register a new application for API integration. The app will have a client_id for authentication and can be configured with OAuth, callbacks, and white labeling. |
| `DROPBOX_SIGN_CREATE_EMBEDDED_SIGNATURE_REQUEST` | Create Embedded Signature Request | Tool to create an embedded signature request for signing in an iFrame. Use when you need to initiate a signature request that will be signed within your application rather than via email links. |
| `DROPBOX_SIGN_CREATE_EMBEDDED_SIGNATURE_REQUEST_WITH_TEMPLATE` | Create Embedded Signature Request With Template | Tool to create an embedded signature request based on a template. Use when you need to initiate a new signature request for embedded signing using pre-defined templates. Returns signature request details including signing URLs for embedded iFrame integration. |
| `DROPBOX_SIGN_CREATE_EMBEDDED_TEMPLATE_DRAFT` | Create Embedded Template Draft | Tool to create an embedded template draft. Use when initiating an embedded template workflow where users can edit the template in an iframe before finalizing it. |
| `DROPBOX_SIGN_CREATE_EMBEDDED_UNCLAIMED_DRAFT_WITH_TEMPLATE` | Create Embedded Unclaimed Draft with Template | Tool to create an embedded unclaimed draft using saved templates. Use when you need to create a draft that can be claimed and embedded in an iFrame for signature collection. |
| `DROPBOX_SIGN_CREATE_REPORT` | Create Report | Request creation of CSV report(s) for a specified date range. Reports are generated asynchronously and delivered via email. Available report types: user_activity (account activity), document_status (signature request status), sms_activity (SMS delivery info). You can request up to 2 report types per call. Date range can be up to 12 months, with start_date no more than 10 years in the past. Note: This feature may require a paid plan. |
| `DROPBOX_SIGN_CREATE_TEMPLATE` | Create Template | Tool to create a reusable template for document signing workflows. Use when you need to establish a template with pre-defined form fields, signer roles, and documents. |
| `DROPBOX_SIGN_CREATE_UNCLAIMED_DRAFT` | Create Unclaimed Draft | Tool to create an unclaimed draft that can be claimed via a unique URL. Use when you need to prepare a signature request or document send that will be finalized later by someone else through the claim URL. |
| `DROPBOX_SIGN_DELETE_API_APP` | Delete API App | Tool to delete an API App from your Dropbox Sign account by its client_id. Use when you need to remove an API App that is no longer needed. The API App must be owned by the requesting user. |
| `DROPBOX_SIGN_DELETE_FAX` | Delete Fax | Tool to delete a fax from the system by its fax_id. Use when you need to remove a fax from Dropbox Sign. Returns success if the fax is deleted or doesn't exist. |
| `DROPBOX_SIGN_DELETE_TEMPLATE` | Delete Template | Permanently deletes a template from your Dropbox Sign account by its template_id. Once deleted, the template cannot be recovered. Use this when you need to remove outdated or unused templates. Returns success if template is deleted or doesn't exist. |
| `DROPBOX_SIGN_DOWNLOAD_SIGNATURE_REQUEST_FILES` | Download Signature Request Files | Download files for a signature request as PDF (merged) or ZIP (individual documents). Returns immediately if files are ready, or indicates if files are still being prepared (409 status). |
| `DROPBOX_SIGN_EDIT_AND_RESEND_EMBEDDED_SIGNATURE_REQUEST` | Edit and Resend Embedded Signature Request | Tool to edit and resend an embedded signature request. Use when you need to modify and restart the embedded signing flow for an existing request. |
| `DROPBOX_SIGN_EDIT_AND_RESEND_SIGNATURE_REQUEST` | Edit and Resend Signature Request | Edits and resends an existing non-templated signature request with updated documents, signers, or settings. Use this tool when you need to modify an already-created signature request and resend it to signers. Note: This will reset signatures - anyone who already signed will need to sign again. Important: Edit and resend operations deduct from your signature request quota. Required: You must provide either 'files' or 'file_urls' (not both) and either 'signers' or 'grouped_signers' (not both). |
| `DROPBOX_SIGN_EDIT_AND_RESEND_UNCLAIMED_DRAFT` | Edit and Resend Unclaimed Draft | Tool to edit and resend a previously created unclaimed draft. Use when you have an existing signature_request_id and want to modify the draft before reissuing. |
| `DROPBOX_SIGN_EDIT_RESEND_EMBEDDED_SIGNATURE_REQUEST_TEMPLATE` | Edit and Resend Embedded Signature Request With Template | Tool to edit and resend an embedded signature request using templates. Use when you need to update request details or recipients and resend within an embedded signing flow. |
| `DROPBOX_SIGN_GET_ACCOUNT` | Get Dropbox Sign Account | Retrieves detailed information about a Dropbox Sign account including quotas, payment status, and settings. Use this tool to: - Check account quota limits (API requests, documents, templates remaining) - Verify account payment status (paid vs free tier) - Get account settings (SMS delivery, authentication options) - Retrieve account identifiers and contact information Requires either account_id (40-character identifier) or email_address, but not both. |
| `DROPBOX_SIGN_GET_API_APP` | Get API App | Tool to retrieve information about an API App by its client ID. Use when you need to fetch API App configuration, OAuth settings, white labeling options, or owner details. |
| `DROPBOX_SIGN_GET_BULK_SEND_JOB` | Get Bulk Send Job | Tool to retrieve the status of a bulk send job. Use when you need up-to-date job progress and request details. |
| `DROPBOX_SIGN_GET_CURRENT_TEAM` | Get Current Team Membership | Tool to get the current team membership status and details. Use when you need to check if the authenticated user is part of a team and retrieve team information. Returns is_on_team False if user is not part of any team (no retries needed for this case). |
| `DROPBOX_SIGN_GET_EMBEDDED_SIGN_URL` | Get Embedded Sign URL | Retrieves an embedded signing URL for a specific signer's signature. Use this after creating an embedded signature request to get a temporary URL that can be embedded in an iFrame for the signer to complete signing. The URL expires after 60 minutes or upon first access, but you can generate a new URL anytime using the same signature_id. Note: Requires the signature_id (per signer), not the signature_request_id. |
| `DROPBOX_SIGN_GET_EMBEDDED_TEMPLATE_EDIT_URL` | Get Embedded Template Edit URL | Tool to generate an edit URL for embedded template editing. Use after selecting or uploading a template to allow users to modify it in an iframe. |
| `DROPBOX_SIGN_GET_FAX_LINE_AREA_CODES` | Get Available Fax Line Area Codes | Tool to retrieve available fax line area codes for a given country, state/province, and city. Use when you need to determine which area codes are available for purchasing or provisioning a fax line in a specific location. |
| `DROPBOX_SIGN_GET_SIGNATURE_REQUEST` | Get Signature Request | Retrieves the current status and complete details of a signature request by ID. Use this action to: - Check if signers have viewed, signed, or declined the request - Get signer information and signature timestamps - Access form field responses and custom field values - Retrieve URLs for document downloads and management - Monitor signature request progress and completion status Returns detailed information including signer names, emails, signing status, custom fields, response data, attachments, and signing options. Handles errors gracefully with structured error responses for invalid or non-existent signature request IDs. |
| `DROPBOX_SIGN_GET_SIGNATURE_REQUEST_FILES_AS_DATA_URI` | Get Signature Request Files as Data URI | Tool to download signature request files as a base64-encoded data URI. Use when you need the document content as a data URI string for embedding or transmission. Returns immediately if files are ready (status 200), or indicates if files are still being prepared (status 409). |
| `DROPBOX_SIGN_GET_SIGNATURE_REQUEST_FILES_AS_FILE_URL` | Get Signature Request Files as File URL | Retrieves a copy of the current documents and returns a JSON object with a URL to the file (PDFs only). Use this action when you need a temporary download link for signature request documents instead of downloading the files directly. The returned URL will expire after a certain time period indicated by the expires_at field. |
| `DROPBOX_SIGN_GET_TEAM_INFO` | Get Team Info | Retrieves information about a Dropbox Sign team, including team name, member count, and sub-team count. Use when you need to get team details. If team_id is provided, retrieves info for that specific team; otherwise retrieves info for the authenticated user's team. |
| `DROPBOX_SIGN_GET_TEMPLATE` | Get Template | Tool to return the specified template. Use when you need to fetch full template details by ID. |
| `DROPBOX_SIGN_GET_TEMPLATE_FILES` | Download Template Files | Tool to download documents associated with a template. Use after confirming the template is created; returns a PDF or ZIP archive of the documents. |
| `DROPBOX_SIGN_GET_TEMPLATE_FILES_AS_DATA_URI` | Get Template Files as Data URI | Tool to retrieve template documents as base64-encoded data URI. Use when you need template files in data URI format instead of downloading binary files. |
| `DROPBOX_SIGN_GET_TEMPLATE_FILES_AS_FILE_URL` | Get Template Files as File URL | Tool to retrieve a copy of template documents and return a JSON object with a URL to the file (PDFs only). Use this action when you need a temporary download link for template documents instead of downloading the files directly. |
| `DROPBOX_SIGN_LIST_API_APPS` | List API Apps | Tool to list API Apps. Use when you need to retrieve a paginated list of API Apps accessible to your account. |
| `DROPBOX_SIGN_LIST_BULK_SEND_JOBS` | List Bulk Send Jobs | Tool to list bulk send jobs. Use when you need to retrieve all bulk send job summaries the authenticated user can access. Supports pagination via page and page_size. |
| `DROPBOX_SIGN_LIST_FAXES` | List Faxes | Tool to list faxes and their properties. Use when you need to retrieve paginated faxes with information about transmissions and status. |
| `DROPBOX_SIGN_LIST_FAX_LINES` | List Fax Lines | Tool to list fax lines and their properties. Use when you need to retrieve available fax lines for an account, optionally paging or including team lines. |
| `DROPBOX_SIGN_LIST_SIGNATURE_REQUESTS` | List Signature Requests | Tool to list signature requests. Use when you need to retrieve paginated signature requests with optional filters. |
| `DROPBOX_SIGN_LIST_SUB_TEAMS` | List Sub-Teams | Lists all sub-teams belonging to a parent team with pagination support. Returns team identifiers and names for each sub-team. Use this to discover the organizational structure of teams within Dropbox Sign. Requires a valid team_id from the parent team. Returns empty list if the team has no sub-teams or if team features are not available for the account. |
| `DROPBOX_SIGN_LIST_TEAM_MEMBERS` | List Team Members | Lists all members and their roles for a specific team. Returns a paginated list of team members with their account IDs, email addresses, and roles. Requires team_id which can be obtained from LIST_TEAMS or GET_TEAM_INFO actions. Supports pagination for teams with many members. |
| `DROPBOX_SIGN_LIST_TEAMS` | List All Teams | Lists all Dropbox Sign teams accessible to the authenticated user, including the current team and its sub-teams. Returns team IDs and names which can be used with other team-related actions. Returns an empty list if the account doesn't have team features enabled. |
| `DROPBOX_SIGN_LIST_TEMPLATES` | List Templates | Tool to list templates. Use when you need to retrieve a paginated list of templates accessible to your account. |
| `DROPBOX_SIGN_O_AUTH_AUTHORIZE` | Generate OAuth Authorization URL | Tool to generate an OAuth authorization URL. Use before directing the user to grant access. |
| `DROPBOX_SIGN_RELEASE_SIGNATURE_REQUEST_HOLD` | Release Signature Request Hold | Release a held signature request to send it to signers. Use this when a signature request was created from an unclaimed draft with hold_request=true and has been claimed but not yet sent. After releasing, the request will be sent to all designated signers. |
| `DROPBOX_SIGN_REMOVE_USER_FROM_TEMPLATE` | Remove User from Template | Tool to remove an account's access to a template. Use when you need to revoke a user's permission on a template after confirming template ID and target account. |
| `DROPBOX_SIGN_SEND_SIGNATURE_REQUEST` | Send Signature Request | Tool to create and send a new signature request with documents. Use when you need to send documents for electronic signature. The action sends emails to all specified signers with links to view and sign the documents. Supports multiple signers, CC recipients, custom fields, form fields, and various signing options. Documents can be uploaded directly or provided via publicly accessible URLs. |
| `DROPBOX_SIGN_SEND_SIGNATURE_REQUEST_REMINDER` | Send Request Reminder | Sends an email reminder to a signer about a pending signature request. Use this when a signer needs a reminder to complete their signature. Important constraints: - Cannot send a reminder within 1 hour of the last reminder (automatic or manual) - Cannot be used with embedded signature requests - The signature request must exist and not be completed - The email address must match a signer on the request |
| `DROPBOX_SIGN_UPDATE_ACCOUNT` | Update Dropbox Sign Account | Tool to update Dropbox Sign account properties and settings. Use when you need to modify callback URLs or locale settings for an account. |
| `DROPBOX_SIGN_UPDATE_API_APP` | Update API App | Tool to update an existing API App in Dropbox Sign. Use when you need to modify API App settings such as name, callback URL, domains, OAuth configuration, branding options, or custom logo. |
| `DROPBOX_SIGN_UPDATE_SIGNATURE_REQUEST` | Update Signature Request | Updates the email address and/or name for a specific signer on a signature request. Use this when you need to correct or update signer contact information before they complete signing. Important: This endpoint only works for signature requests created with explicit form_fields_per_document (no appended signature page). At least one of email_address or name must be provided. |
| `DROPBOX_SIGN_UPDATE_TEMPLATE_FILES` | Update Template Files | Tool to update files for an existing template. Overlays new files with the overlay of an existing template. Use when you need to replace the documents in a template while keeping the field configuration. The update is processed asynchronously; completion is communicated via callback events (template_created or template_error). |
| `DROPBOX_SIGN_VERIFY_ACCOUNT` | Verify Dropbox Sign Account | Tool to verify whether a Dropbox Sign account exists for the given email. Use when you need to check account existence before sending signature requests. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

The Dropbox sign MCP server is an implementation of the Model Context Protocol that connects your AI agent to Dropbox sign. It provides structured and secure access so your agent can perform Dropbox sign operations on your behalf through a secure, permission-based interface.
With Composio's managed implementation, you don't have to create your own developer app. For production, if you're building an end product, we recommend using your own credentials. The managed server helps you prototype fast and go from 0-1 faster.

## Step-by-step Guide

### 1. Prerequisites

Before starting, make sure you have:
- Node.js 18 or higher
- A Composio account with an active API key
- An OpenAI API key
- Basic familiarity with TypeScript

### 1. Getting API Keys for OpenAI and Composio

OpenAI API Key
- Go to the [OpenAI dashboard](https://platform.openai.com/settings/organization/api-keys) and create an API key.
- You need credits or a connected billing setup to use the models.
- Store the key somewhere safe.
Composio API Key
- Log in to the [Composio dashboard](https://dashboard.composio.dev?utm_source=toolkits&utm_medium=framework_docs).
- Go to Settings and copy your API key.
- This key lets your Mastra agent talk to Composio and reach Dropbox sign through MCP.

### 2. Install dependencies

Install the required packages.
What's happening:
- @composio/core is the Composio SDK for creating MCP sessions
- @mastra/core provides the Agent class
- @mastra/mcp is Mastra's MCP client
- @ai-sdk/openai is the model wrapper for OpenAI
- dotenv loads environment variables from .env
```bash
npm install @composio/core @mastra/core @mastra/mcp @ai-sdk/openai dotenv
```

### 3. Set up environment variables

Create a .env file in your project root.
What's happening:
- COMPOSIO_API_KEY authenticates your requests to Composio
- COMPOSIO_USER_ID tells Composio which user this session belongs to
- OPENAI_API_KEY lets the Mastra agent call OpenAI models
```bash
COMPOSIO_API_KEY=your_composio_api_key_here
COMPOSIO_USER_ID=your_user_id_here
OPENAI_API_KEY=your_openai_api_key_here
```

### 4. Import libraries and validate environment

What's happening:
- dotenv/config auto loads your .env so process.env.* is available
- openai gives you a Mastra compatible model wrapper
- Agent is the Mastra agent that will call tools and produce answers
- MCPClient connects Mastra to your Composio MCP server
- Composio is used to create a Tool Router session
```typescript
import "dotenv/config";
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
import { MCPClient } from "@mastra/mcp";
import { Composio } from "@composio/core";
import * as readline from "readline";

import type { AiMessageType } from "@mastra/core/agent";

const openaiAPIKey = process.env.OPENAI_API_KEY;
const composioAPIKey = process.env.COMPOSIO_API_KEY;
const composioUserID = process.env.COMPOSIO_USER_ID;

if (!openaiAPIKey) throw new Error("OPENAI_API_KEY is not set");
if (!composioAPIKey) throw new Error("COMPOSIO_API_KEY is not set");
if (!composioUserID) throw new Error("COMPOSIO_USER_ID is not set");

const composio = new Composio({
  apiKey: composioAPIKey as string,
});
```

### 5. Create a Tool Router session for Dropbox sign

What's happening:
- create spins up a short-lived MCP HTTP endpoint for this user
- The toolkits array contains "dropbox_sign" for Dropbox sign access
- session.mcp.url is the MCP URL that Mastra's MCPClient will connect to
```typescript
async function main() {
  const session = await composio.create(
    composioUserID as string,
    {
      toolkits: ["dropbox_sign"],
    },
  );

  const composioMCPUrl = session.mcp.url;
  console.log("Dropbox sign MCP URL:", composioMCPUrl);
```

### 6. Configure Mastra MCP client and fetch tools

What's happening:
- MCPClient takes an id for this client and a list of MCP servers
- The headers property includes the x-api-key for authentication
- getTools fetches the tool definitions exposed by the Dropbox sign toolkit
```typescript
const mcpClient = new MCPClient({
    id: composioUserID as string,
    servers: {
      nasdaq: {
        url: new URL(composioMCPUrl),
        requestInit: {
          headers: session.mcp.headers,
        },
      },
    },
    timeout: 30_000,
  });

console.log("Fetching MCP tools from Composio...");
const composioTools = await mcpClient.getTools();
console.log("Number of tools:", Object.keys(composioTools).length);
```

### 7. Create the Mastra agent

What's happening:
- Agent is the core Mastra agent
- name is just an identifier for logging and debugging
- instructions guide the agent to use tools instead of only answering in natural language
- model uses openai("gpt-5") to configure the underlying LLM
```typescript
const agent = new Agent({
    name: "dropbox_sign-mastra-agent",
    instructions: "You are an AI agent with Dropbox sign tools via Composio.",
    model: "openai/gpt-5",
  });
```

### 8. Set up interactive chat interface

What's happening:
- messages keeps the full conversation history in Mastra's expected format
- agent.generate runs the agent with conversation history and Dropbox sign toolsets
- maxSteps limits how many tool calls the agent can take in a single run
- onStepFinish is a hook that prints intermediate steps for debugging
```typescript
let messages: AiMessageType[] = [];

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

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: "> ",
});

rl.prompt();

rl.on("line", async (userInput: string) => {
  const trimmedInput = userInput.trim();

  if (["exit", "quit", "bye"].includes(trimmedInput.toLowerCase())) {
    console.log("\nGoodbye!");
    rl.close();
    process.exit(0);
  }

  if (!trimmedInput) {
    rl.prompt();
    return;
  }

  messages.push({
    id: crypto.randomUUID(),
    role: "user",
    content: trimmedInput,
  });

  console.log("\nAgent is thinking...\n");

  try {
    const response = await agent.generate(messages, {
      toolsets: {
        dropbox_sign: composioTools,
      },
      maxSteps: 8,
    });

    const { text } = response;

    if (text && text.trim().length > 0) {
      console.log(`Agent: ${text}\n`);
        messages.push({
          id: crypto.randomUUID(),
          role: "assistant",
          content: text,
        });
      }
    } catch (error) {
      console.error("\nError:", error);
    }

    rl.prompt();
  });

  rl.on("close", async () => {
    console.log("\nSession ended.");
    await mcpClient.disconnect();
    process.exit(0);
  });
}

main().catch((err) => {
  console.error("Fatal error:", err);
  process.exit(1);
});
```

## Complete Code

```typescript
import "dotenv/config";
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
import { MCPClient } from "@mastra/mcp";
import { Composio } from "@composio/core";
import * as readline from "readline";

import type { AiMessageType } from "@mastra/core/agent";

const openaiAPIKey = process.env.OPENAI_API_KEY;
const composioAPIKey = process.env.COMPOSIO_API_KEY;
const composioUserID = process.env.COMPOSIO_USER_ID;

if (!openaiAPIKey) throw new Error("OPENAI_API_KEY is not set");
if (!composioAPIKey) throw new Error("COMPOSIO_API_KEY is not set");
if (!composioUserID) throw new Error("COMPOSIO_USER_ID is not set");

const composio = new Composio({ apiKey: composioAPIKey as string });

async function main() {
  const session = await composio.create(composioUserID as string, {
    toolkits: ["dropbox_sign"],
  });

  const composioMCPUrl = session.mcp.url;

  const mcpClient = new MCPClient({
    id: composioUserID as string,
    servers: {
      dropbox_sign: {
        url: new URL(composioMCPUrl),
        requestInit: {
          headers: session.mcp.headers,
        },
      },
    },
    timeout: 30_000,
  });

  const composioTools = await mcpClient.getTools();

  const agent = new Agent({
    name: "dropbox_sign-mastra-agent",
    instructions: "You are an AI agent with Dropbox sign tools via Composio.",
    model: "openai/gpt-5",
  });

  let messages: AiMessageType[] = [];

  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: "> ",
  });

  rl.prompt();

  rl.on("line", async (input: string) => {
    const trimmed = input.trim();
    if (["exit", "quit"].includes(trimmed.toLowerCase())) {
      rl.close();
      return;
    }

    messages.push({ id: crypto.randomUUID(), role: "user", content: trimmed });

    const { text } = await agent.generate(messages, {
      toolsets: { dropbox_sign: composioTools },
      maxSteps: 8,
    });

    if (text) {
      console.log(`Agent: ${text}\n`);
      messages.push({ id: crypto.randomUUID(), role: "assistant", content: text });
    }

    rl.prompt();
  });

  rl.on("close", async () => {
    await mcpClient.disconnect();
    process.exit(0);
  });
}

main();
```

## Conclusion

You've built a Mastra AI agent that can interact with Dropbox sign through Composio's Tool Router.
You can extend this further by:
- Adding other toolkits like Gmail, Slack, or GitHub
- Building a web-based chat interface around this agent
- Using multiple MCP endpoints to enable cross-app workflows

## How to build Dropbox sign MCP Agent with another framework

- [ChatGPT](https://composio.dev/toolkits/dropbox_sign/framework/chatgpt)
- [OpenAI Agents SDK](https://composio.dev/toolkits/dropbox_sign/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/dropbox_sign/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/dropbox_sign/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/dropbox_sign/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/dropbox_sign/framework/codex)
- [Cursor](https://composio.dev/toolkits/dropbox_sign/framework/cursor)
- [VS Code](https://composio.dev/toolkits/dropbox_sign/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/dropbox_sign/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/dropbox_sign/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/dropbox_sign/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/dropbox_sign/framework/cli)
- [Google ADK](https://composio.dev/toolkits/dropbox_sign/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/dropbox_sign/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/dropbox_sign/framework/ai-sdk)
- [LlamaIndex](https://composio.dev/toolkits/dropbox_sign/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/dropbox_sign/framework/crew-ai)

## Related Toolkits

- [Google Drive](https://composio.dev/toolkits/googledrive) - Google Drive is a cloud storage platform for uploading, sharing, and collaborating on files. It's perfect for keeping your documents accessible and organized across devices.
- [Google Docs](https://composio.dev/toolkits/googledocs) - Google Docs is a cloud-based word processor that enables document creation and real-time collaboration. Its seamless sharing and version history make team editing and content management a breeze.
- [Google Super](https://composio.dev/toolkits/googlesuper) - Google Super is an all-in-one suite combining Gmail, Drive, Calendar, Sheets, Analytics, and more. It gives you a unified platform to manage your digital life, boosting productivity and organization.
- [Affinda](https://composio.dev/toolkits/affinda) - Affinda is an AI-powered document processing platform that automates data extraction from resumes, invoices, and more. It streamlines document-heavy workflows by turning files into structured, actionable data.
- [Agility cms](https://composio.dev/toolkits/agility_cms) - Agility CMS is a headless content management system for building and managing digital experiences across platforms. It lets teams update content quickly and deliver omnichannel experiences with ease.
- [Algodocs](https://composio.dev/toolkits/algodocs) - Algodocs is an AI-powered platform that automates data extraction from business documents. It delivers fast, secure, and accurate processing without templates or manual training.
- [Api2pdf](https://composio.dev/toolkits/api2pdf) - Api2Pdf is a REST API for generating PDFs from HTML, URLs, and documents using powerful engines like wkhtmltopdf and Headless Chrome. It streamlines document conversion and automation for developers and businesses.
- [Aryn](https://composio.dev/toolkits/aryn) - Aryn is an AI-powered platform for parsing, extracting, and analyzing data from unstructured documents. Use it to automate document processing and unlock actionable insights from your files.
- [Boldsign](https://composio.dev/toolkits/boldsign) - Boldsign is a digital eSignature platform for sending, signing, and tracking documents online. Organizations use it to automate agreements and manage legally binding workflows efficiently.
- [Boloforms](https://composio.dev/toolkits/boloforms) - BoloForms is an eSignature platform built for small businesses, offering unlimited signatures, templates, and forms. It simplifies digital document signing and team collaboration at a predictable, fixed price.
- [Box](https://composio.dev/toolkits/box) - Box is a cloud content management and file sharing platform for businesses. It helps teams securely store, organize, and collaborate on files from anywhere.
- [Carbone](https://composio.dev/toolkits/carbone) - Carbone is a blazing-fast report generator that turns JSON data into PDFs, Word docs, spreadsheets, and more using flexible templates. It lets you automate document creation at scale with minimal code.
- [Castingwords](https://composio.dev/toolkits/castingwords) - CastingWords is a transcription service specializing in human-powered, accurate transcripts via a simple API. Get seamless audio-to-text conversion for interviews, meetings, podcasts, and more.
- [Cloudconvert](https://composio.dev/toolkits/cloudconvert) - CloudConvert is a powerful file conversion service supporting over 200 file formats. It streamlines converting, compressing, and managing documents, media, and more, all in one place.
- [Cloudlayer](https://composio.dev/toolkits/cloudlayer) - Cloudlayer is a document and asset generation service for creating PDFs and images via API or SDKs. It lets you automate high-quality doc creation, saving dev time and reducing manual work.
- [Cloudpress](https://composio.dev/toolkits/cloudpress) - Cloudpress is a content export tool for Google Docs and Notion. It automates publishing to your favorite Content Management Systems.
- [Contentful graphql](https://composio.dev/toolkits/contentful_graphql) - Contentful graphql is a content delivery API that lets you access Contentful data using GraphQL queries. It gives you efficient, flexible ways to fetch and manage structured content for any digital project.
- [Conversion tools](https://composio.dev/toolkits/conversion_tools) - Conversion Tools is an online service for converting documents between formats such as PDF, Word, Excel, XML, and CSV. It lets you automate complex document workflows with just a few clicks.
- [Convertapi](https://composio.dev/toolkits/convertapi) - ConvertAPI is a robust file conversion service for documents, images, and spreadsheets. It streamlines programmatic format changes and lets developers automate complex workflows with a single API.
- [Craftmypdf](https://composio.dev/toolkits/craftmypdf) - CraftMyPDF is a web-based service for designing and generating PDFs with templates and live data. It streamlines document creation by automating personalized PDFs at scale.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Dropbox sign MCP?

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

### Can I use Tool Router MCP with Mastra AI?

Yes, you can. Mastra AI 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 Dropbox sign tools.

### Can I manage the permissions and scopes for Dropbox sign while using Tool Router?

Yes, absolutely. You can configure which Dropbox sign 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.

### How safe is my data with Composio Tool Router?

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 Dropbox sign data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
