# How to integrate Follow Up Boss MCP with OpenAI Agents SDK

```json
{
  "title": "How to integrate Follow Up Boss MCP with OpenAI Agents SDK",
  "toolkit": "Follow Up Boss",
  "toolkit_slug": "follow_up_boss",
  "framework": "OpenAI Agents SDK",
  "framework_slug": "open-ai-agents-sdk",
  "url": "https://composio.dev/toolkits/follow_up_boss/framework/open-ai-agents-sdk",
  "markdown_url": "https://composio.dev/toolkits/follow_up_boss/framework/open-ai-agents-sdk.md",
  "updated_at": "2026-03-29T06:34:18.356Z"
}
```

## Introduction

This guide walks you through connecting Follow Up Boss to the OpenAI Agents SDK using the Composio tool router. By the end, you'll have a working Follow Up Boss agent that can list all leads added this week, update contact info for lead john doe, create a new deal for jane smith through natural language commands.
This guide will help you understand how to give your OpenAI Agents SDK agent real control over a Follow Up Boss account through Composio's Follow Up Boss MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Follow Up Boss with

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

## TL;DR

Here's what you'll learn:
- Get and set up your OpenAI and Composio API keys
- Install the necessary dependencies
- Initialize Composio and create a Tool Router session for Follow Up Boss
- Configure an AI agent that can use Follow Up Boss as a tool
- Run a live chat session where you can ask the agent to perform Follow Up Boss operations

## What is OpenAI Agents SDK?

The OpenAI Agents SDK is a lightweight framework for building AI agents that can use tools and maintain conversation state. It provides a simple interface for creating agents with hosted MCP tool support.
Key features include:
- Hosted MCP Tools: Connect to external services through hosted MCP endpoints
- SQLite Sessions: Persist conversation history across interactions
- Simple API: Clean interface with Agent, Runner, and tool configuration
- Streaming Support: Real-time response streaming for interactive applications

## What is the Follow Up Boss MCP server, and what's possible with it?

The Follow Up Boss MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Follow Up Boss account. It provides structured and secure access so your agent can perform Follow Up Boss operations on your behalf.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `FOLLOW_UP_BOSS_CREATE_ACTION_PLANS_PEOPLE` | Apply Action Plan to Person | Tool to apply an Action Plan to a person in Follow Up Boss. Use when you need to assign or apply a specific action plan workflow to a contact. |
| `FOLLOW_UP_BOSS_CREATE_APPOINTMENT` | Create Appointment | Tool to create a new appointment in Follow Up Boss. Use when you need to schedule meetings, property showings, or events. Requires title, start time, and end time. Optionally send invitation emails to invitees. |
| `FOLLOW_UP_BOSS_CREATE_APPOINTMENT_OUTCOME` | Create appointment outcome | Tool to create an appointment outcome in Follow Up Boss. Use when you need to add a new outcome type for appointment tracking. |
| `FOLLOW_UP_BOSS_CREATE_APPOINTMENT_TYPES` | Create Appointment Type | Tool to create a new appointment type in Follow Up Boss. Use when you need to define a new category for appointments that can be scheduled in the system. |
| `FOLLOW_UP_BOSS_CREATE_CALL` | Create Call | Tool to add a call record to Follow Up Boss. Use when you need to log a phone call interaction with a person. |
| `FOLLOW_UP_BOSS_CREATE_CUSTOM_FIELD` | Create Custom Field | Tool to create a custom field in Follow Up Boss. Use when you need to add a new custom data field to person records, such as tracking anniversaries, customer types, or any other custom information. |
| `FOLLOW_UP_BOSS_CREATE_DEAL_CUSTOM_FIELD` | Create Deal Custom Field | Tool to create a custom field for deals in Follow Up Boss. Use when you need to add custom metadata fields to track deal-specific information like stages, priorities, or custom dates. |
| `FOLLOW_UP_BOSS_CREATE_DEAL` | Create Deal | Tool to create a new deal in Follow Up Boss. Use when you need to add a deal to track sales opportunities in your pipeline. Requires deal name and stage ID. |
| `FOLLOW_UP_BOSS_CREATE_EMAIL_MARKETING_CAMPAIGN` | Create Email Marketing Campaign | Tool to create an email marketing campaign in Follow Up Boss. Use when you need to create a new email campaign with HTML content. |
| `FOLLOW_UP_BOSS_CREATE_EMAIL_MARKETING_EVENTS` | Create Email Marketing Events | Tool to notify Follow Up Boss about marketing emails sent, opens, clicks, bounces, unsubscribes and spam reports. Use when you need to track email marketing events. |
| `FOLLOW_UP_BOSS_CREATE_EVENTS` | Create Events | Tool to send in a lead or an event related to a lead in Follow Up Boss. Use when you need to track lead activities, inquiries, property views, or any other event type supported by the system. |
| `FOLLOW_UP_BOSS_CREATE_GROUP` | Create Group | Tool to create a new Follow Up Boss group with specified members and distribution settings. Use when you need to organize team members into groups for lead distribution. |
| `FOLLOW_UP_BOSS_CREATE_PIPELINE` | Create Pipeline | Tool to create a new pipeline in Follow Up Boss. Use when you need to set up a new pipeline for tracking deals with customizable stages. Only the owner has access to create and modify pipelines. |
| `FOLLOW_UP_BOSS_CREATE_PONDS` | Create Ponds | Tool to create a new pond in Follow Up Boss. Use when you need to organize leads into a specific group with a lead agent and member users. |
| `FOLLOW_UP_BOSS_CREATE_REACTIONS` | Create Reactions | Tool to add a reaction (emoji) to a Note, Call, or ThreadedReply. Use when you need to add an emoji reaction to existing content. |
| `FOLLOW_UP_BOSS_CREATE_STAGE` | Create Stage | Tool to create a new stage in Follow Up Boss. Use when you need to add a new pipeline stage for organizing contacts. |
| `FOLLOW_UP_BOSS_CREATE_TEAM` | Create Team | Tool to create a new team in Follow Up Boss. Use when you need to organize users into teams with optional team leaders. |
| `FOLLOW_UP_BOSS_CREATE_EMAIL_TEMPLATE` | Create email template | Tool to create a new email template in Follow Up Boss. Use when you need to create a reusable email template with a name, subject, and HTML body. |
| `FOLLOW_UP_BOSS_CREATE_TEXT_MESSAGE_TEMPLATE` | Create Text Message Template | Tool to create a text message template in Follow Up Boss. Use when you need to create a reusable SMS template that can include dynamic variables like contact names and greetings. |
| `FOLLOW_UP_BOSS_DELETE_APPOINTMENT` | Delete Appointment | Tool to delete an appointment by ID. Use when you need to remove an existing appointment from Follow Up Boss. |
| `FOLLOW_UP_BOSS_DELETE_APPOINTMENT_OUTCOME` | Delete Appointment Outcome | Tool to delete an appointment outcome by ID. Use when you need to remove an appointment outcome and reassign existing appointments to a different outcome. |
| `FOLLOW_UP_BOSS_DELETE_APPOINTMENT_TYPE` | Delete Appointment Type | Tool to delete an appointment type by its ID. Use when you need to remove an appointment type and reassign existing appointments to another type. |
| `FOLLOW_UP_BOSS_DELETE_CUSTOM_FIELD` | Delete Custom Field | Tool to delete a custom field by its ID. Use when you need to remove a custom field from Follow Up Boss. Restricted to account owners only. |
| `FOLLOW_UP_BOSS_DELETE_DEAL` | Delete Deal | Tool to delete a deal by its ID. Use when you need to permanently remove a deal from Follow Up Boss. |
| `FOLLOW_UP_BOSS_DELETE_DEAL_CUSTOM_FIELD` | Delete Deal Custom Field | Tool to delete a deal custom field by ID. Use when you need to permanently remove a custom field configuration from deals. Only the account owner can delete deal custom fields. |
| `FOLLOW_UP_BOSS_DELETE_GROUP` | Delete Group | Tool to delete a group by its ID. Use when you need to permanently remove a group from Follow Up Boss. |
| `FOLLOW_UP_BOSS_DELETE_PEOPLE_RELATIONSHIP` | Delete People Relationship | Tool to delete a people relationship by ID in Follow Up Boss. Use when you need to remove a relationship between contacts. |
| `FOLLOW_UP_BOSS_DELETE_PIPELINE` | Delete Pipeline | Tool to delete a pipeline by its ID from Follow Up Boss. Use when you need to permanently remove a pipeline from the system. The deletion is irreversible and will remove the pipeline and all associated data. |
| `FOLLOW_UP_BOSS_DELETE_POND` | Delete Pond | Tool to delete a pond by its ID. Use when removing a pond and reassigning its contacts to another agent. |
| `FOLLOW_UP_BOSS_DELETE_STAGE` | Delete Stage | Tool to delete a Follow Up Boss stage by ID. Use when you need to remove a stage and reassign action plans to another stage. |
| `FOLLOW_UP_BOSS_DELETE_TEAM` | Delete Team | Tool to delete a team by its ID. Use when you need to remove a team from Follow Up Boss. Optionally merge team members to another team before deletion. |
| `FOLLOW_UP_BOSS_DELETE_TEXT_MESSAGE_TEMPLATE` | Delete text message template | Tool to delete a text message template by ID. Use when you need to remove a text message template. Note: If the template is in use by an Action Plan, you will get a 403 Forbidden response. Use GET /textMessageTemplates/:id to check which Action Plans are using it before deletion. |
| `FOLLOW_UP_BOSS_GET_APPOINTMENT` | Get Appointment | Tool to retrieve an appointment by its ID. Use when you need to fetch details of a specific appointment. |
| `FOLLOW_UP_BOSS_GET_APPOINTMENT_OUTCOME` | Get Appointment Outcome | Tool to retrieve an appointment outcome by ID. Use when you need to fetch details about a specific appointment outcome from Follow Up Boss. |
| `FOLLOW_UP_BOSS_GET_APPOINTMENT_TYPE` | Get Appointment Type | Tool to retrieve an appointment type by ID. Use when you need to fetch details about a specific appointment type from Follow Up Boss. |
| `FOLLOW_UP_BOSS_GET_CALL` | Get Call | Tool to retrieve a call by its ID from Follow Up Boss. Use when you need to fetch details about a specific call record. |
| `FOLLOW_UP_BOSS_GET_DEAL` | Get Deal | Tool to retrieve a deal by its ID from Follow Up Boss. Use when you need to fetch details about a specific deal. |
| `FOLLOW_UP_BOSS_GET_DEAL_CUSTOM_FIELD` | Get Deal Custom Field | Tool to retrieve a deal custom field by its ID from Follow Up Boss. Use when you need to fetch details about a specific deal custom field configuration. |
| `FOLLOW_UP_BOSS_GET_EVENT` | Get Event | Tool to retrieve a single event by its ID from Follow Up Boss. Use when you need to fetch details about a specific event record. |
| `FOLLOW_UP_BOSS_GET_GROUP` | Get Group | Tool to retrieve a group by its ID from Follow Up Boss. Use when you need to fetch details about a specific group. |
| `FOLLOW_UP_BOSS_GET_IDENTITY` | Get Identity | Tool to retrieve identity and authentication information from Follow Up Boss. Use when you need to verify the authenticated user's account and user details. |
| `FOLLOW_UP_BOSS_GET_ME` | Get Me | Tool to retrieve information about the currently authenticated user. Use when you need to fetch details about the authenticated user's account, settings, or permissions. |
| `FOLLOW_UP_BOSS_GET_PEOPLE_RELATIONSHIP` | Get People Relationship | Tool to retrieve a people relationship by its ID from Follow Up Boss. Use when you need to fetch details about a specific relationship between contacts. |
| `FOLLOW_UP_BOSS_GET_PIPELINE` | Get Pipeline | Tool to retrieve a pipeline by its ID from Follow Up Boss. Use when you need to fetch details about a specific pipeline. |
| `FOLLOW_UP_BOSS_GET_PONDS` | Get Ponds | Tool to retrieve a pond by its ID from Follow Up Boss. Use when you need to fetch details about a specific pond group. |
| `FOLLOW_UP_BOSS_GET_SMART_LIST` | Get Smart List | Tool to retrieve a Smart List by its ID from Follow Up Boss. Use when you need to fetch details about a specific Smart List. |
| `FOLLOW_UP_BOSS_GET_STAGE` | Get Stage | Tool to retrieve a stage by its ID from Follow Up Boss. Use when you need to fetch details about a specific stage. |
| `FOLLOW_UP_BOSS_GET_TEAM` | Get Team | Tool to retrieve a team by its ID from Follow Up Boss. Use when you need to fetch details about a specific team. |
| `FOLLOW_UP_BOSS_GET_TEMPLATE` | Get Template | Tool to retrieve an email template by its ID from Follow Up Boss. Use when you need to fetch details about a specific template, optionally with merge fields populated for a person. |
| `FOLLOW_UP_BOSS_GET_TEXT_MESSAGE` | Get Text Message | Tool to retrieve a text message by its ID from Follow Up Boss. Use when you need to fetch details about a specific text message record. |
| `FOLLOW_UP_BOSS_GET_TEXT_MESSAGE_TEMPLATE` | Get Text Message Template | Tool to retrieve a text message template by its ID from Follow Up Boss. Use when you need to fetch details about a specific text message template, including its content, usage statistics, and associated action plans. |
| `FOLLOW_UP_BOSS_GET_USER` | Get User | Tool to retrieve a user by its ID from Follow Up Boss. Use when you need to fetch details about a specific user. |
| `FOLLOW_UP_BOSS_LIST_ACTION_PLANS` | List Action Plans | Tool to get a list of Action Plans from Follow Up Boss. Use when you need to retrieve available action plans with optional filtering by status, names, or IDs, and support for pagination and sorting. |
| `FOLLOW_UP_BOSS_LIST_ACTION_PLANS_PEOPLE` | List Action Plans People | Tool to list Action Plans applied to a particular person or list people on a particular Action Plan. Use when you need to retrieve action plan assignments, optionally filtered by person or action plan. |
| `FOLLOW_UP_BOSS_LIST_APPOINTMENT_OUTCOMES` | List Appointment Outcomes | Tool to list all appointment outcomes from Follow Up Boss. Use when you need to retrieve a list of appointment outcomes with optional sorting and pagination. |
| `FOLLOW_UP_BOSS_LIST_APPOINTMENTS` | List Appointments | Tool to search for appointments in Follow Up Boss. Use when you need to retrieve a list of appointments, optionally filtered by person, user, or date range. Supports pagination for large result sets. |
| `FOLLOW_UP_BOSS_LIST_APPOINTMENT_TYPES` | List Appointment Types | Tool to list all appointment types from Follow Up Boss. Use when you need to retrieve a list of available appointment types with optional sorting and pagination. |
| `FOLLOW_UP_BOSS_LIST_CALLS` | List Calls | Tool to search for calls in Follow Up Boss. Use when you need to retrieve a list of calls with optional filtering by person ID or phone numbers. |
| `FOLLOW_UP_BOSS_LIST_CUSTOM_FIELDS` | List Custom Fields | Tool to list all custom fields in Follow Up Boss. Use when you need to retrieve custom field definitions, optionally filtered by label or sorted by specific fields. |
| `FOLLOW_UP_BOSS_LIST_DEAL_CUSTOM_FIELDS` | List Deal Custom Fields | Tool to list all deal custom fields in Follow Up Boss. Use when you need to retrieve deal custom field definitions, optionally filtered by label or sorted by specific fields. |
| `FOLLOW_UP_BOSS_LIST_DEALS` | List Deals | Tool to search for and list deals from Follow Up Boss. Use when you need to retrieve multiple deals with optional filters by pipeline, user, person, or status. |
| `FOLLOW_UP_BOSS_LIST_EMAIL_MARKETING_CAMPAIGNS` | List Email Marketing Campaigns | Tool to list email marketing campaigns from Follow Up Boss. Use when you need to retrieve all campaigns or filter by origin/originId. |
| `FOLLOW_UP_BOSS_LIST_EMAIL_MARKETING_EVENTS` | List Email Marketing Events | Tool to retrieve email marketing events from Follow Up Boss. Use when you need to fetch information about marketing emails sent, opens, clicks, bounces, unsubscribes, and spam reports. Supports filtering by event type, person, and time range with pagination. |
| `FOLLOW_UP_BOSS_LIST_EVENTS` | List Events | Tool to search for and list events from Follow Up Boss. Use when you need to retrieve events with optional filtering by person, event type, property association, or property address, with pagination support. |
| `FOLLOW_UP_BOSS_LIST_GROUPS` | List Groups | Tool to list all groups from Follow Up Boss. Use when you need to retrieve a list of groups, optionally filtered by type (Agent/Lender) or sorted by id/name. |
| `FOLLOW_UP_BOSS_LIST_GROUPS_ROUND_ROBIN` | List Groups Round Robin | Tool to list groups with round-robin data from Follow Up Boss. Use when you need to retrieve groups configured for round-robin distribution. |
| `FOLLOW_UP_BOSS_LIST_INBOX_APPS` | List Inbox Apps | Tool to list all inbox app installations from Follow Up Boss. Use when you need to retrieve a list of installed inbox apps with optional pagination. |
| `FOLLOW_UP_BOSS_LIST_PEOPLE_RELATIONSHIPS` | List People Relationships | Tool to list all people relationships from Follow Up Boss. Use when you need to retrieve relationships between contacts with optional filtering by person ID, name, or first/last name, and sorting capabilities. |
| `FOLLOW_UP_BOSS_LIST_PIPELINES` | List Pipelines | Tool to search for pipelines in Follow Up Boss. Use when you need to retrieve a list of pipelines, optionally filtering by exact name match. |
| `FOLLOW_UP_BOSS_LIST_PONDS` | List Ponds | Tool to list all ponds from Follow Up Boss. Use when you need to retrieve a list of pond groups with pagination support. |
| `FOLLOW_UP_BOSS_LIST_SMART_LISTS` | List Smart Lists | Tool to list Smart Lists from Follow Up Boss. Use when you need to retrieve a list of Smart Lists with support for pagination and filtering by FUB version. |
| `FOLLOW_UP_BOSS_LIST_STAGES` | List Stages | Tool to retrieve a list of stages from Follow Up Boss. Use when you need to fetch all stages with optional pagination and sorting. |
| `FOLLOW_UP_BOSS_LIST_TEAM_INBOXES` | List Team Inboxes | Tool to list all shared team inboxes from Follow Up Boss. Use when you need to retrieve available team inboxes with their names, IDs, and users who have access. |
| `FOLLOW_UP_BOSS_LIST_TEAMS` | List Teams | Tool to get a list of teams from Follow Up Boss. Use when you need to retrieve all teams with pagination support. Note: Not all plans have access to the teams feature. If you do not have access, this endpoint will return a 200 OK response with an empty teams list. |
| `FOLLOW_UP_BOSS_LIST_TEMPLATES` | List Templates | Tool to list all email templates from Follow Up Boss. Use when you need to retrieve multiple email templates with pagination support. |
| `FOLLOW_UP_BOSS_LIST_TEXT_MESSAGES` | List Text Messages | Tool to list text messages for a person or phone number from Follow Up Boss. Use when you need to retrieve text messages with filtering options. Note: At least one filter parameter must be provided when calling this action. |
| `FOLLOW_UP_BOSS_LIST_TEXT_MESSAGE_TEMPLATES` | List Text Message Templates | Tool to list all text message templates from Follow Up Boss. Use when you need to retrieve multiple text message templates with pagination support. |
| `FOLLOW_UP_BOSS_LIST_TIMEFRAMES` | List Timeframes | Tool to get a list of timeframes from Follow Up Boss. Use when you need to retrieve available timeframes. |
| `FOLLOW_UP_BOSS_LIST_USERS` | List Users | Tool to search for and list users from Follow Up Boss. Use when you need to retrieve multiple users with optional filters by role, name, email, or other criteria. |
| `FOLLOW_UP_BOSS_LIST_WEBHOOKS` | List Webhooks | Tool to retrieve a list of webhooks from Follow Up Boss. Use when you need to view registered webhooks with optional filtering by event type or status. |
| `FOLLOW_UP_BOSS_MERGE_TEMPLATE` | Merge Template | Tool to merge an email template with person data using Follow Up Boss API. Use when you need to generate personalized email content by replacing merge fields like %contact_name% with actual person data. |
| `FOLLOW_UP_BOSS_MERGE_TEXT_MESSAGE_TEMPLATE` | Merge Text Message Template | Tool to merge a text message template with person data. Use when you need to generate personalized text messages by merging a template with contact information. The template supports merge fields like %contact_name% and %contact_rels_first_name% which are replaced with actual recipient data. |
| `FOLLOW_UP_BOSS_UPDATE_ACTION_PLAN_PEOPLE_STATUS` | Update Action Plan People Status | Tool to update the status of an Action Plan to Person relationship in Follow Up Boss. Use when you need to pause or resume an action plan applied to a contact. |
| `FOLLOW_UP_BOSS_UPDATE_APPOINTMENT` | Update Appointment | Tool to update an existing appointment in Follow Up Boss. Use when you need to modify appointment details like title, time, location, or invitees. Requires appointment ID, title, start time, and end time. Optionally send invitation emails to invitees. |
| `FOLLOW_UP_BOSS_UPDATE_APPOINTMENT_OUTCOME` | Update appointment outcome | Tool to update an existing appointment outcome in Follow Up Boss. Use when you need to modify the name or sort order of an appointment outcome. |
| `FOLLOW_UP_BOSS_UPDATE_APPOINTMENT_TYPE` | Update Appointment Type | Tool to update an existing appointment type in Follow Up Boss. Use when you need to modify the name or sort order of an appointment type. |
| `FOLLOW_UP_BOSS_UPDATE_CALL` | Update Call | Tool to update an existing call record in Follow Up Boss. Use when you need to modify call details such as notes, duration, outcome, or other call attributes. Only calls created by the account/system making the API request can be updated. |
| `FOLLOW_UP_BOSS_UPDATE_CUSTOM_FIELDS` | Update Custom Fields | Tool to update an existing custom field in Follow Up Boss by its ID. Use when you need to modify the label, choices, ordering, or display settings of a custom field. |
| `FOLLOW_UP_BOSS_UPDATE_DEAL_CUSTOM_FIELDS` | Update Deal Custom Fields | Tool to update an existing deal custom field in Follow Up Boss. Use when you need to modify custom field properties like label, type, display settings, or dropdown choices. |
| `FOLLOW_UP_BOSS_UPDATE_DEAL` | Update Deal | Tool to update an existing deal in Follow Up Boss. Use when you need to modify deal details such as name, price, description, stage, or associated people and users. |
| `FOLLOW_UP_BOSS_UPDATE_EMAIL_MARKETING_CAMPAIGN` | Update Email Marketing Campaign | Tool to update an existing email marketing campaign in Follow Up Boss. Use when you need to modify campaign name, subject line, or HTML body content. |
| `FOLLOW_UP_BOSS_UPDATE_GROUP` | Update Group | Tool to update an existing Follow Up Boss group with modified members and distribution settings. Use when you need to change group configuration or membership. |
| `FOLLOW_UP_BOSS_UPDATE_PEOPLE_RELATIONSHIPS` | Update People Relationships | Tool to update details of a specific people relationship in Follow Up Boss. Use when you need to modify relationship information such as name, type, contact details (emails, phones), or addresses. |
| `FOLLOW_UP_BOSS_UPDATE_PIPELINE` | Update Pipeline | Tool to update an existing pipeline in Follow Up Boss. Use when you need to modify pipeline properties such as name, description, order, or stages. Only the owner has access to create and modify pipelines. |
| `FOLLOW_UP_BOSS_UPDATE_PONDS` | Update Ponds | Tool to update an existing pond in Follow Up Boss. Use when you need to change the name, lead agent, or member list of a pond. |
| `FOLLOW_UP_BOSS_UPDATE_STAGE` | Update Stage | Tool to update an existing stage in Follow Up Boss. Use when you need to modify stage properties like name or sort order. |
| `FOLLOW_UP_BOSS_UPDATE_TEAM` | Update Team | Tool to update an existing team in Follow Up Boss. Use when you need to modify team name, leaders, or members. |
| `FOLLOW_UP_BOSS_UPDATE_EMAIL_TEMPLATE` | Update email template | Tool to update an existing email template in Follow Up Boss. Use when you need to modify the name, subject, or body of an existing template. |
| `FOLLOW_UP_BOSS_UPDATE_TEXT_MESSAGE_TEMPLATE` | Update Text Message Template | Tool to update an existing text message template in Follow Up Boss. Use when you need to modify the name, message content, or sharing settings of an existing SMS template. |

## Supported Triggers

None listed.

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

The Follow Up Boss MCP server is an implementation of the Model Context Protocol that connects your AI agent to Follow Up Boss. It provides structured and secure access so your agent can perform Follow Up Boss 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:
- Composio API Key and OpenAI API Key
- Primary know-how of OpenAI Agents SDK
- A live Follow Up Boss project
- Some knowledge of Python or 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'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](https://dashboard.composio.dev?utm_source=toolkits&utm_medium=framework_docs).
- Go to Settings and copy your API key.

### 2. Install dependencies

Install the Composio SDK and the OpenAI Agents SDK.
```python
pip install composio_openai_agents openai-agents python-dotenv
```

```typescript
npm install @composio/openai-agents @openai/agents dotenv
```

### 3. Set up environment variables

Create a .env file and add your OpenAI and Composio API keys.
```bash
OPENAI_API_KEY=sk-...your-api-key
COMPOSIO_API_KEY=your-api-key
USER_ID=composio_user@gmail.com
```

### 4. Import dependencies

What's happening:
- You're importing all necessary libraries.
- The Composio and OpenAIAgentsProvider classes are imported to connect your OpenAI agent to Composio tools like Follow Up Boss.
```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';
```

### 5. Set up the Composio instance

No description provided.
```python
load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())
```

```typescript
dotenv.config();

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});
```

### 6. Create a Tool Router session

What is happening:
- You give the Tool Router the user id and the toolkits you want available. Here, it is only follow_up_boss.
- The router checks the user's Follow Up Boss connection and prepares the MCP endpoint.
- The returned session.mcp.url is the MCP URL that your agent will use to access Follow Up Boss.
- This approach keeps things lightweight and lets the agent request Follow Up Boss tools only when needed during the conversation.
```python
# Create a Follow Up Boss Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["follow_up_boss"]
)

mcp_url = session.mcp.url
```

```typescript
// Create Tool Router session for Follow Up Boss
const session = await composio.create(userId as string, {
  toolkits: ['follow_up_boss'],
});
const mcpUrl = session.mcp.url;
```

### 7. Configure the agent

No description provided.
```python
# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Follow Up Boss. "
        "Help users perform Follow Up Boss operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)
```

```typescript
// Configure agent with MCP tool
const agent = new Agent({
  name: 'Assistant',
  model: 'gpt-5',
  instructions:
    'You are a helpful assistant that can access Follow Up Boss. Help users perform Follow Up Boss operations through natural language.',
  tools: [
    hostedMcpTool({
      serverLabel: 'tool_router',
      serverUrl: mcpUrl,
      headers: { 'x-api-key': composioApiKey },
      requireApproval: 'never',
    }),
  ],
});
```

### 8. Start chat loop and handle conversation

No description provided.
```python
print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
// Keep conversation state across turns
const conversationSession = new OpenAIConversationsSession();

// Simple CLI
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: 'You: ',
});

console.log('\nComposio Tool Router session created.');
console.log('\nChat started. Type your requests below.');
console.log("Commands: 'exit', 'quit', or 'q' to end\n");

try {
  const first = await run(agent, 'What can you help me with?', { session: conversationSession });
  console.log(`Assistant: ${first.finalOutput}\n`);
} catch (e) {
  console.error('Error:', e instanceof Error ? e.message : e, '\n');
}

rl.prompt();

rl.on('line', async (userInput) => {
  const text = userInput.trim();

  if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
    console.log('Goodbye!');
    rl.close();
    process.exit(0);
  }

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

  try {
    const result = await run(agent, text, { session: conversationSession });
    console.log(`\nAssistant: ${result.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();
});

rl.on('close', () => {
  console.log('\n👋 Session ended.');
  process.exit(0);
});
```

## Complete Code

```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession

load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())

# Create Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["follow_up_boss"]
)
mcp_url = session.mcp.url

# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Follow Up Boss. "
        "Help users perform Follow Up Boss operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)

print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});

async function main() {
  // Create Tool Router session
  const session = await composio.create(userId as string, {
    toolkits: ['follow_up_boss'],
  });
  const mcpUrl = session.mcp.url;

  // Configure agent with MCP tool
  const agent = new Agent({
    name: 'Assistant',
    model: 'gpt-5',
    instructions:
      'You are a helpful assistant that can access Follow Up Boss. Help users perform Follow Up Boss operations through natural language.',
    tools: [
      hostedMcpTool({
        serverLabel: 'tool_router',
        serverUrl: mcpUrl,
        headers: { 'x-api-key': composioApiKey },
        requireApproval: 'never',
      }),
    ],
  });

  // Keep conversation state across turns
  const conversationSession = new OpenAIConversationsSession();

  // Simple CLI
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: 'You: ',
  });

  console.log('\nComposio Tool Router session created.');
  console.log('\nChat started. Type your requests below.');
  console.log("Commands: 'exit', 'quit', or 'q' to end\n");

  try {
    const first = await run(agent, 'What can you help me with?', { session: conversationSession });
    console.log(`Assistant: ${first.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();

  rl.on('line', async (userInput) => {
    const text = userInput.trim();

    if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
      console.log('Goodbye!');
      rl.close();
      process.exit(0);
    }

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

    try {
      const result = await run(agent, text, { session: conversationSession });
      console.log(`\nAssistant: ${result.finalOutput}\n`);
    } catch (e) {
      console.error('Error:', e instanceof Error ? e.message : e, '\n');
    }

    rl.prompt();
  });

  rl.on('close', () => {
    console.log('\nSession ended.');
    process.exit(0);
  });
}

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

## Conclusion

This was a starter code for integrating Follow Up Boss MCP with OpenAI Agents SDK to build a functional AI agent that can interact with Follow Up Boss.
Key features:
- Hosted MCP tool integration through Composio's Tool Router
- SQLite session persistence for conversation history
- Simple async chat loop for interactive testing
You can extend this by adding more toolkits, implementing custom business logic, or building a web interface around the agent.

## How to build Follow Up Boss MCP Agent with another framework

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

## Related Toolkits

- [Hubspot](https://composio.dev/toolkits/hubspot) - HubSpot is an all-in-one marketing, sales, and customer service platform. It lets teams nurture leads, automate outreach, and track every customer interaction in one place.
- [Pipedrive](https://composio.dev/toolkits/pipedrive) - Pipedrive is a sales management platform offering pipeline visualization, lead tracking, and workflow automation. It helps sales teams keep deals moving forward efficiently and never miss a follow-up.
- [Salesforce](https://composio.dev/toolkits/salesforce) - Salesforce is a leading CRM platform that helps businesses manage sales, service, and marketing. It centralizes customer data, enabling teams to drive growth and build strong relationships.
- [Apollo](https://composio.dev/toolkits/apollo) - Apollo is a CRM and lead generation platform that helps businesses discover contacts and manage sales pipelines. Use it to streamline customer outreach and track your deals from one place.
- [Attio](https://composio.dev/toolkits/attio) - Attio is a customizable CRM and workspace for managing your team's relationships and workflows. It helps teams organize contacts, automate tasks, and collaborate more efficiently.
- [Acculynx](https://composio.dev/toolkits/acculynx) - AccuLynx is a cloud-based roofing business management software for contractors. It streamlines project tracking, lead management, and document sharing.
- [Addressfinder](https://composio.dev/toolkits/addressfinder) - Addressfinder is a data quality platform for verifying addresses, emails, and phone numbers. It helps you ensure accurate customer and contact data every time.
- [Affinity](https://composio.dev/toolkits/affinity) - Affinity is a relationship intelligence CRM that helps private capital investors find, manage, and close more deals. It streamlines deal flow and surfaces key connections to help you win opportunities.
- [Agencyzoom](https://composio.dev/toolkits/agencyzoom) - AgencyZoom is a sales and performance platform built for P&C insurance agencies. It helps agents boost sales, retain clients, and analyze producer results in one place.
- [Bettercontact](https://composio.dev/toolkits/bettercontact) - Bettercontact is a smart contact enrichment tool for finding emails and phone numbers. It helps boost lead generation with automated, waterfall search across multiple sources.
- [Blackbaud](https://composio.dev/toolkits/blackbaud) - Blackbaud provides cloud-based software for nonprofits, schools, and healthcare institutions. It streamlines fundraising, donor management, and mission-driven operations.
- [Brilliant directories](https://composio.dev/toolkits/brilliant_directories) - Brilliant Directories is an all-in-one platform for building and managing online membership communities and business directories. It streamlines listings, member management, and engagement tools into a single, easy interface.
- [Capsule crm](https://composio.dev/toolkits/capsule_crm) - Capsule CRM is a user-friendly CRM platform for managing contacts and sales pipelines. It helps businesses organize relationships and streamline their sales process efficiently.
- [Centralstationcrm](https://composio.dev/toolkits/centralstationcrm) - CentralStationCRM is an easy-to-use CRM software focused on collaboration and long-term customer relationships. It helps teams manage contacts, deals, and communications all in one place.
- [Clientary](https://composio.dev/toolkits/clientary) - Clientary is a platform for managing clients, invoices, projects, proposals, and more. It streamlines client work and saves you serious admin time.
- [Close](https://composio.dev/toolkits/close) - Close is a CRM platform built for sales teams, combining calling, email automation, and predictive dialers. It streamlines sales workflows and boosts productivity with all-in-one communication tools.
- [Dropcontact](https://composio.dev/toolkits/dropcontact) - Dropcontact is a B2B email finder and data enrichment service for professionals. It delivers verified email addresses and enriches contact info with up-to-date data.
- [Dynamics365](https://composio.dev/toolkits/dynamics365) - Dynamics 365 is Microsoft's platform combining CRM, ERP, and productivity apps. It streamlines sales, marketing, service, and operations in one place.
- [Espocrm](https://composio.dev/toolkits/espocrm) - EspoCRM is an open-source web application for managing customer relationships. It helps businesses organize contacts, track leads, and streamline their sales process.
- [Fireberry](https://composio.dev/toolkits/fireberry) - Fireberry is a CRM platform that streamlines customer and sales management. It helps businesses organize contacts, automate sales, and integrate with other business tools.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Follow Up Boss MCP?

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

### Can I use Tool Router MCP with OpenAI Agents SDK?

Yes, you can. OpenAI Agents SDK 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 Follow Up Boss tools.

### Can I manage the permissions and scopes for Follow Up Boss while using Tool Router?

Yes, absolutely. You can configure which Follow Up Boss 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 Follow Up Boss data and credentials are handled as safely as possible.

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