# How to integrate Zoho bigin MCP with OpenAI Agents SDK

```json
{
  "title": "How to integrate Zoho bigin MCP with OpenAI Agents SDK",
  "toolkit": "Zoho bigin",
  "toolkit_slug": "zoho_bigin",
  "framework": "OpenAI Agents SDK",
  "framework_slug": "open-ai-agents-sdk",
  "url": "https://composio.dev/toolkits/zoho_bigin/framework/open-ai-agents-sdk",
  "markdown_url": "https://composio.dev/toolkits/zoho_bigin/framework/open-ai-agents-sdk.md",
  "updated_at": "2026-05-12T10:31:19.579Z"
}
```

## Introduction

This guide walks you through connecting Zoho bigin to the OpenAI Agents SDK using the Composio tool router. By the end, you'll have a working Zoho bigin agent that can add new contact to sales pipeline, list all open deals this week, tag recent leads as 'hot prospects' through natural language commands.
This guide will help you understand how to give your OpenAI Agents SDK agent real control over a Zoho bigin account through Composio's Zoho bigin MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Zoho bigin with

- [ChatGPT](https://composio.dev/toolkits/zoho_bigin/framework/chatgpt)
- [Claude Agent SDK](https://composio.dev/toolkits/zoho_bigin/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/zoho_bigin/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/zoho_bigin/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/zoho_bigin/framework/codex)
- [OpenClaw](https://composio.dev/toolkits/zoho_bigin/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/zoho_bigin/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/zoho_bigin/framework/cli)
- [Google ADK](https://composio.dev/toolkits/zoho_bigin/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/zoho_bigin/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/zoho_bigin/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/zoho_bigin/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/zoho_bigin/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/zoho_bigin/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 Zoho bigin
- Configure an AI agent that can use Zoho bigin as a tool
- Run a live chat session where you can ask the agent to perform Zoho bigin 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 Zoho bigin MCP server, and what's possible with it?

The Zoho bigin MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Zoho bigin account. It provides structured and secure access to your CRM pipeline data, so your agent can manage contacts, track deals, organize records, handle attachments, and streamline your small business workflows—all on your behalf.
- Automated record management: Add, update, or delete records in any Zoho bigin module to keep your CRM data accurate and up to date.
- Tagging and categorization: Create new tags or apply them to records, making it easy to segment contacts, deals, or companies for better organization.
- Attachment handling: Retrieve, download, or delete attachments associated with your records, letting your agent manage files and documents with ease.
- Module and data discovery: List available modules and fetch records with sorting, filtering, and pagination—perfect for quickly surfacing the data you need.
- Deleted records auditing: Access and review recently deleted records for auditing or restoration, helping you maintain data integrity and recover lost information.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `ZOHO_BIGIN_ADD_RECORDS` | Add Records | Tool to add new records to a module. Use when you need to programmatically insert one or more records into Bigin after confirming module name and field API names. Module-specific mandatory fields: - Tasks: Subject (required) - Events: Event_Title, Start_DateTime, End_DateTime (all required) - Calls: Subject, Call_Type (Outbound/Inbound/Missed), Call_Start_Time, Call_Duration (all required) - Contacts: Last_Name (required) - Other modules: Use Get Fields action to discover mandatory fields |
| `ZOHO_BIGIN_ADD_TAGS_TO_RECORDS` | Add Tags to Records | Tool to add tags to a specific record in a module. Use when you need to categorize or label a record after creation or update. |
| `ZOHO_BIGIN_CREATE_BULK_READ_JOB` | Create Bulk Read Job | Tool to create a bulk read job for exporting large amounts of data asynchronously. Use when you need to export records from a module that may exceed standard API limits. Returns a job ID that can be used to track progress and download results once complete. |
| `ZOHO_BIGIN_CREATE_NOTES` | Create Notes | Tool to create notes and associate them with records in Zoho Bigin. Use when you need to add notes to contacts, accounts, pipelines, or other module records. Each note requires content, parent record ID, and the module name. |
| `ZOHO_BIGIN_CREATE_RECORD_NOTES` | Create Record Notes | Tool to create new notes for a specific record. Use when you need to add notes to a Bigin record after confirming the module name and record ID. |
| `ZOHO_BIGIN_CREATE_TAGS` | Create Tags | Tool to create tags for a module. Use when you need to add new tags to a specific module in Zoho Bigin. |
| `ZOHO_BIGIN_DELETE_ATTACHMENT` | Delete Attachment | Tool to delete an attachment from a record. Use when you need to remove a file after confirming its record_id and attachment_id. |
| `ZOHO_BIGIN_DELETE_NOTE` | Delete Note | Tool to delete a note from a specific record. Use when you need to remove a note after confirming its record_id and note_id. |
| `ZOHO_BIGIN_DELETE_NOTES` | Delete Notes | Tool to delete multiple notes from Zoho Bigin. Use when removing notes after confirming their IDs. |
| `ZOHO_BIGIN_DELETE_RECORD` | Delete Record | Tool to delete a specific record from a module. Use when removing a single record after confirming its ID. Can also be used to delink related records. |
| `ZOHO_BIGIN_DELETE_RECORD_PHOTO` | Delete Record Photo | Tool to delete a profile photo from a record. Use when you need to remove the photo associated with a specific record. |
| `ZOHO_BIGIN_DELETE_RECORDS` | Delete Records | Tool to delete records from a module. Use when removing one or multiple records after confirming their IDs. |
| `ZOHO_BIGIN_DELINK_RELATED_RECORDS` | Delink Related Records | Tool to delete the association between a module record and related list records. Use when you need to remove relationships between records without deleting the records themselves. |
| `ZOHO_BIGIN_DISABLE_NOTIFICATIONS` | Disable Notifications | Tool to disable instant notifications for one or more channels. Use when you need to stop receiving notifications for specific channels that were previously enabled. |
| `ZOHO_BIGIN_DOWNLOAD_ATTACHMENT` | Download Attachment | Tool to download an attachment from a record. Use when you need the binary content of a specific attachment after confirming the record and attachment IDs. |
| `ZOHO_BIGIN_DOWNLOAD_BULK_READ_RESULT` | Download Bulk Read Result | Tool to download the bulk read job result in ZIP format (containing CSV or ICS export). Use when you need to retrieve completed bulk read job data after obtaining the job_id from the bulk read job creation or status check. |
| `ZOHO_BIGIN_DOWNLOAD_RECORD_PHOTO` | Download Record Photo | Tool to download the profile photo associated with a specific record. Use when you need the binary content of a record's photo after confirming the record ID. Returns HTTP 204 if the record exists but has no photo. |
| `ZOHO_BIGIN_ENABLE_NOTIFICATIONS` | Enable Notifications | Tool to enable instant webhook notifications for module events in Bigin. Use when you need to receive real-time alerts for record create, edit, or delete operations in specific modules (Contacts, Pipelines, etc.). |
| `ZOHO_BIGIN_GET_ALL_NOTES` | Get All Notes | Tool to retrieve the list of notes associated with records. Use when you need to fetch notes with pagination support. Maximum 200 records per call. |
| `ZOHO_BIGIN_GET_ATTACHMENTS` | Get Attachments | Tool to retrieve attachments for a record. Use when you need a paginated list of attachments for a given module record. |
| `ZOHO_BIGIN_GET_BULK_READ_JOB_STATUS` | Get Bulk Read Job Status | Tool to retrieve the details of a bulk read job performed earlier. Use when you need to check the status of a bulk export operation or download the results after job completion. |
| `ZOHO_BIGIN_GET_CUSTOM_VIEW` | Get Custom View | Tool to get the metadata of a specific custom view configured in a module. Use when you need to retrieve configuration details, criteria, or field lists for a particular custom view. |
| `ZOHO_BIGIN_GET_CUSTOM_VIEWS` | Get Custom Views | Tool to retrieve the list of custom views available for a module. Use when you need to discover which custom views exist for a specific Bigin module. |
| `ZOHO_BIGIN_GET_DELETED_RECORDS` | Get Deleted Records | Tool to get a list of deleted records in a module. Use when auditing or restoring recently deleted data (recycle within 60 days, permanent within 120 days). |
| `ZOHO_BIGIN_GET_FIELDS` | Get Fields | Tool to retrieve field metadata for a Bigin module. Use when you need to discover available fields, their types, validation rules, and picklist values for a module. |
| `ZOHO_BIGIN_GET_LAYOUT` | Get Layout | Tool to retrieve details of a specific layout by layout ID. Use when you need to get detailed configuration, sections, fields, and permissions for a particular layout. |
| `ZOHO_BIGIN_GET_LAYOUTS` | Get Layouts | Tool to retrieve the list of layouts available for a module. Use when you need to discover layout metadata, sections, fields, and configuration for a specific module. |
| `ZOHO_BIGIN_GET_MODULE_METADATA` | Get Module Metadata | Tool to retrieve metadata of a specific module by its API name. Use when you need detailed information about a module's configuration, permissions, and features. |
| `ZOHO_BIGIN_GET_MODULES` | Get Modules | Tool to retrieve a list of all modules. Use when you need to discover which modules are available in Bigin. |
| `ZOHO_BIGIN_GET_NOTIFICATION_DETAILS` | Get Notification Details | Tool to retrieve information about enabled notifications. Use when you need to list notification channels, check their configuration, or verify which modules have active notifications. |
| `ZOHO_BIGIN_GET_ORGANIZATION` | Get Organization | Tool to retrieve organization details including name, ID, currency, time zone, and other settings. Use when you need to fetch organization-level configuration and metadata. |
| `ZOHO_BIGIN_GET_PROFILES` | Get Profiles | Tool to retrieve the list of available profiles and their properties in an organization. Use when you need to discover which profiles exist in Bigin. |
| `ZOHO_BIGIN_GET_RECORD` | Get Record | Tool to retrieve details of a specific record in a module using the record ID. Use when you need to fetch complete information about a single record by its ID. |
| `ZOHO_BIGIN_GET_RECORD_NOTES` | Get Record Notes | Tool to retrieve the list of notes associated with a specific record. Use when you need to fetch notes for a given module record with optional field filtering and pagination. |
| `ZOHO_BIGIN_GET_RECORDS` | Get Records | Tool to retrieve records from a Bigin module. Use when listing or paginating module data with specific fields, sorting, filtering. No free-text search supported; use cvid for saved view filtering. Records are nested under result['data']['data']; check result['data']['info']['more_records'] to detect additional pages. |
| `ZOHO_BIGIN_GET_RECORDS_COUNT` | Get Records Count | Tool to get the count of records in a Bigin module. Use when you need to know how many records exist in a module, optionally filtered by a custom view. |
| `ZOHO_BIGIN_GET_RELATED_LISTS_METADATA` | Get Related Lists Metadata | Tool to retrieve the list of related lists metadata for a module. Use when you need to discover which related lists are available for a specific module. |
| `ZOHO_BIGIN_GET_RELATED_RECORDS` | Get Related Records | Tool to retrieve related records associated with a specific record in a module. Use when fetching related data like Notes, Attachments, Products, or Activities linked to a parent record. |
| `ZOHO_BIGIN_GET_ROLES` | Get Roles | Tool to retrieve the list of available roles and their properties in an organization. Use when you need to discover role hierarchy and permissions. |
| `ZOHO_BIGIN_GET_TEAM_PIPELINE_RECORDS` | Get Team Pipeline Records | Tool to retrieve pipeline records from Team Pipelines in Zoho Bigin. Use when you need to fetch deals or records from a specific team pipeline with filtering, sorting, and pagination. |
| `ZOHO_BIGIN_GET_USER` | Get User | Tool to retrieve details of a specific user using the user identification. Use when you need to get complete information about a single user by their ID. |
| `ZOHO_BIGIN_GET_USERS` | Get Users | Tool to retrieve the list of users in the organization. Use when you need to get user information with filtering by type (ActiveUsers, DeactiveUsers, AdminUsers, etc.). |
| `ZOHO_BIGIN_SEARCH_RECORDS` | Search Records | Tool to search for records in a Bigin module using various criteria. Use when you need to find records by keyword, email, phone, or custom criteria with specific field comparators. |
| `ZOHO_BIGIN_UPDATE_NOTE` | Update Note | Tool to update an existing note for a specific record in a module. Use when you need to modify the title or content of a note after confirming the module name, record ID, and note ID. |
| `ZOHO_BIGIN_UPDATE_NOTIFICATION_DETAILS` | Update Notification Details | Tool to update notification channel details in Zoho Bigin. Use when you need to modify notification URLs, events, tokens, or expiry times for existing channels. Supports up to 100 channels per call. |
| `ZOHO_BIGIN_UPDATE_NOTIFICATION_INFO` | Update Notification Info | Tool to update specific notification information without losing existing data. Use when you need to modify notification channel settings such as events, expiry, token, or webhook URL. |
| `ZOHO_BIGIN_UPDATE_RECORDS` | Update Records | Tool to update existing records in a module. Use when you need to modify one or multiple records after confirming their IDs and field API names. Supports up to 100 records per call; specify an optional trigger to control workflow execution. |
| `ZOHO_BIGIN_UPDATE_RELATED_RECORDS` | Update Related Records | Tool to update related records associated with a specific record in a module. Use when you need to modify existing relationships such as updating notes, products, or activities linked to a contact or account. Max 100 records per call. |
| `ZOHO_BIGIN_UPDATE_USER` | Update User | Tool to update details of an existing user by user ID. Use when you need to modify user information such as phone, date of birth, time format, role, or status. Cannot update deactivated users. |
| `ZOHO_BIGIN_UPDATE_USERS` | Update Users | Tool to update details of multiple users in an organization. Use when you need to modify user information such as phone, date of birth, time format, role, or status. Cannot update deactivated users. Maximum 100 users per request. |
| `ZOHO_BIGIN_UPLOAD_ATTACHMENT` | Upload Attachment | Tool to upload an attachment to a record. Use when you need to attach a file or specify a public URL for upload to a Bigin record. Ensure module_api_name and record_id are correct before calling. |
| `ZOHO_BIGIN_UPLOAD_ORGANIZATION_PHOTO` | Upload Organization Photo | Tool to upload or update the brand logo or image for the current organization. Use when you need to set or change the organization's photo/logo in Zoho Bigin. |
| `ZOHO_BIGIN_UPLOAD_RECORD_PHOTO` | Upload Record Photo | Tool to upload a photo/image to a specific record (e.g., contact photo). Use when you need to attach a profile picture or image to a Bigin record. |
| `ZOHO_BIGIN_UPSERT_RECORDS` | Upsert Records | Tool to insert or update records in a module based on unique field values. Use when you need to sync data without checking if records exist first. Updates existing records if duplicates are found, otherwise inserts new records. |

## Supported Triggers

None listed.

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

The Zoho bigin MCP server is an implementation of the Model Context Protocol that connects your AI agent to Zoho bigin. It provides structured and secure access so your agent can perform Zoho bigin 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 Zoho bigin 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 Zoho bigin.
```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 zoho_bigin.
- The router checks the user's Zoho bigin connection and prepares the MCP endpoint.
- The returned session.mcp.url is the MCP URL that your agent will use to access Zoho bigin.
- This approach keeps things lightweight and lets the agent request Zoho bigin tools only when needed during the conversation.
```python
# Create a Zoho bigin Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["zoho_bigin"]
)

mcp_url = session.mcp.url
```

```typescript
// Create Tool Router session for Zoho bigin
const session = await composio.create(userId as string, {
  toolkits: ['zoho_bigin'],
});
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 Zoho bigin. "
        "Help users perform Zoho bigin 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 Zoho bigin. Help users perform Zoho bigin 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=["zoho_bigin"]
)
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 Zoho bigin. "
        "Help users perform Zoho bigin 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: ['zoho_bigin'],
  });
  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 Zoho bigin. Help users perform Zoho bigin 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 Zoho bigin MCP with OpenAI Agents SDK to build a functional AI agent that can interact with Zoho bigin.
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 Zoho bigin MCP Agent with another framework

- [ChatGPT](https://composio.dev/toolkits/zoho_bigin/framework/chatgpt)
- [Claude Agent SDK](https://composio.dev/toolkits/zoho_bigin/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/zoho_bigin/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/zoho_bigin/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/zoho_bigin/framework/codex)
- [OpenClaw](https://composio.dev/toolkits/zoho_bigin/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/zoho_bigin/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/zoho_bigin/framework/cli)
- [Google ADK](https://composio.dev/toolkits/zoho_bigin/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/zoho_bigin/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/zoho_bigin/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/zoho_bigin/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/zoho_bigin/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/zoho_bigin/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.
- [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.
- [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.
- [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.
- [Firmao](https://composio.dev/toolkits/firmao) - Firmao is a business information platform offering company, industry, and market data. Use it to quickly research firms and gain competitive market insights.
- [Folk](https://composio.dev/toolkits/folk) - Folk is a next-generation CRM that helps teams manage and nurture their relationships efficiently. It streamlines contact management, making team collaboration and outreach simple and organized.
- [Follow Up Boss](https://composio.dev/toolkits/follow_up_boss) - Follow Up Boss is a CRM designed for high-growth real estate teams. Centralize leads and follow-ups to drive smarter sales.
- [Forcemanager](https://composio.dev/toolkits/forcemanager) - Forcemanager is a mobile-first CRM built for sales teams, enabling real-time insights and customer management on the go. Boost team productivity and close more deals with smarter workflows and actionable data.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Zoho bigin MCP?

With a standalone Zoho bigin MCP server, the agents and LLMs can only access a fixed set of Zoho bigin tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Zoho bigin 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 Zoho bigin tools.

### Can I manage the permissions and scopes for Zoho bigin while using Tool Router?

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

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