Skip to main content

Prerequisites

Before we begin, you’ll need:

Installation

First, install the required packages:
pip install cohere klavis

Setup Environment Variables

import os

os.environ["COHERE_API_KEY"] = "YOUR_COHERE_API_KEY"  # Replace with your actual Cohere API key
os.environ["KLAVIS_API_KEY"] = "YOUR_KLAVIS_API_KEY"  # Replace with your actual Klavis API key

Step 1 - Create Strata MCP Server with Gmail and Slack

from klavis import Klavis
from klavis.types import McpServerName, ToolFormat
import webbrowser

klavis_client = Klavis(api_key=os.getenv("KLAVIS_API_KEY"))

response = klavis_client.mcp_server.create_strata_server(
    servers=[McpServerName.GMAIL, McpServerName.SLACK], 
    user_id="1234"
)

# Handle OAuth authorization for each services
if response.oauth_urls:
    for server_name, oauth_url in response.oauth_urls.items():
        webbrowser.open(oauth_url)
        print(f"Or please open this URL to complete {server_name} OAuth authorization: {oauth_url}")
OAuth Authorization Required: The code above will open browser windows for each service. Click through the OAuth flow to authorize access to your accounts.

Step 2 - Create method to use MCP Server with Cohere

This method handles multiple rounds of tool calls until a final response is ready, allowing the AI to chain tool executions for complex tasks.
import json
import cohere

def cohere_with_mcp_server(mcp_server_url: str, user_query: str):
    co = cohere.ClientV2(api_key=os.getenv("COHERE_API_KEY"))
    
    messages = [
        {"role": "system", "content": "You are a helpful assistant. Use the available tools to answer the user's query."},
        {"role": "user", "content": user_query}
    ]

    mcp_server_tools = klavis_client.mcp_server.list_tools(
        server_url=mcp_server_url,
        format=ToolFormat.OPENAI
    )

    max_iterations = 20
    iteration = 0

    while iteration < max_iterations:
        iteration += 1

        response = co.chat(
          model="command-a-03-2025",
          messages=messages,
          tools=mcp_server_tools.tools
        )

        assistant_message = response.message
        messages.append({"role": "assistant", "tool_calls": assistant_message.tool_calls, "content": assistant_message.content})

        if assistant_message.tool_calls:
            for tool_call in assistant_message.tool_calls:
                tool_name = tool_call.function.name
                tool_args = json.loads(tool_call.function.arguments)

                print(f"🔧 Calling: {tool_name}, with args: {tool_args}")

                result = klavis_client.mcp_server.call_tools(
                    server_url=mcp_server_url,
                    tool_name=tool_name,
                    tool_args=tool_args
                )

                messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call.id,
                    "content": str(result)
                })
        else:
            return assistant_message.content[0].text if assistant_message.content else "No response"

    return "Max iterations reached without final response"

Step 3 - Run!

result = cohere_with_mcp_server(
    mcp_server_url=response.strata_server_url, 
    user_query="Check my latest 3 emails and summarize them in a Slack message to #general"
)

print(f"\n🤖 Final Response: {result}")
Perfect! You’ve integrated Cohere with Klavis MCP servers.

Next Steps

Useful Resources

Happy building with Cohere and Klavis 🚀