How to integrate Short io MCP with OpenAI Agents SDK

This guide walks you through connecting Short io to the OpenAI Agents SDK using the Composio tool router. By the end, you'll have a working Short io agent that can show click stats for your latest short links, list most popular short urls this month, get opengraph settings for a specific link through natural language commands. This guide will help you understand how to give your OpenAI Agents SDK agent real control over a Short io account through Composio's Short io MCP server. Before we dive in, let's take a quick look at the key ideas and tools involved.

Short io logoShort io
Api Key

Short.io is a URL shortening service that lets you create and manage branded short links. Easily track link performance and analytics for every campaign.

41 Tools

Introduction

This guide walks you through connecting Short io to the OpenAI Agents SDK using the Composio tool router. By the end, you'll have a working Short io agent that can show click stats for your latest short links, list most popular short urls this month, get opengraph settings for a specific link through natural language commands.

This guide will help you understand how to give your OpenAI Agents SDK agent real control over a Short io account through Composio's Short io MCP server.

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

Also integrate Short io with

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 Short io
  • Configure an AI agent that can use Short io as a tool
  • Run a live chat session where you can ask the agent to perform Short io 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 Short io MCP server, and what's possible with it?

The Short io MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Short io account. It provides structured and secure access to your branded short links, so your agent can create and manage links, retrieve analytics, organize domains, and optimize your link campaigns automatically.

  • Automated branded link creation and management: Instantly generate new short links, fetch details, update metadata, and organize your links by domain—all on demand.
  • Comprehensive click analytics and statistics: Retrieve detailed click metrics for individual links or aggregated data by domain to track performance and measure engagement.
  • Popular path and traffic insights: Analyze the most visited short link paths in your domains over time to understand which content resonates with your audience.
  • Granular permissions and access control: Check and manage user permissions on links within your domains, ensuring secure collaboration and streamlined workflows.
  • Open Graph and targeting customization: Review and adjust Open Graph properties for better link previews and set up advanced targeting rules by region or country to maximize reach.

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

What is Composio SDK?

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

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

How the Composio SDK works

The Composio SDK follows a three-phase workflow:

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

Step-by-step Guide

Step by step09 STEPS
1

Prerequisites

Before starting, make sure you have:
  • Composio API Key and OpenAI API Key
  • Primary know-how of OpenAI Agents SDK
  • A live Short io project
  • Some knowledge of Python or Typescript
2

Getting API Keys for OpenAI and Composio

OpenAI API Key
  • Go to the OpenAI dashboard and create an API key. You'll need credits to use the models, or you can connect to another model provider.
  • Keep the API key safe.
Composio API Key
3

Install dependencies

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

Install the Composio SDK and the OpenAI Agents SDK.

4

Set up environment variables

bash
OPENAI_API_KEY=sk-...your-api-key
COMPOSIO_API_KEY=your-api-key
USER_ID=composio_user@gmail.com

Create a .env file and add your OpenAI and Composio API keys.

5

Import dependencies

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';
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 Short io.
6

Set up the Composio instance

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(),
});
What's happening:
  • dotenv.config() loads your .env file so COMPOSIO_API_KEY and USER_ID are available as environment variables.
  • Creating a Composio instance using the API Key and OpenAIAgentsProvider class.
7

Create a Tool Router session

// Create Tool Router session for Short io
const session = await composio.create(userId as string, {
  toolkits: ['short_io'],
});
const mcpUrl = session.mcp.url;

What is happening:

  • You give the Tool Router the user id and the toolkits you want available. Here, it is only short_io.
  • The router checks the user's Short io connection and prepares the MCP endpoint.
  • The returned session.mcp.url is the MCP URL that your agent will use to access Short io.
  • This approach keeps things lightweight and lets the agent request Short io tools only when needed during the conversation.
8

Configure the agent

// Configure agent with MCP tool
const agent = new Agent({
  name: 'Assistant',
  model: 'gpt-5',
  instructions:
    'You are a helpful assistant that can access Short io. Help users perform Short io operations through natural language.',
  tools: [
    hostedMcpTool({
      serverLabel: 'tool_router',
      serverUrl: mcpUrl,
      headers: { 'x-api-key': composioApiKey },
      requireApproval: 'never',
    }),
  ],
});
What's happening:
  • We're creating an Agent instance with a name, model (gpt-5), and clear instructions about its purpose.
  • The agent's instructions tell it that it can access Short io and help with queries, inserts, updates, authentication, and fetching database information.
  • The tools array includes a hostedMcpTool that connects to the MCP server URL we created earlier.
  • The headers object includes the Composio API key for secure authentication with the MCP server.
  • requireApproval: 'never' means the agent can execute Short io operations without asking for permission each time, making interactions smoother.
9

Start chat loop and handle conversation

// 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);
});
What's happening:
  • The program prints a session URL that you visit to authorize Short io.
  • After authorization, the chat begins.
  • Each message you type is processed by the agent using run().
  • The responses are printed to the console.
  • Typing exit, quit, or q cleanly ends the chat.

Complete Code

Here's the complete code to get you started with Short io and OpenAI Agents SDK:

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: ['short_io'],
  });
  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 Short io. Help users perform Short io 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 Short io MCP with OpenAI Agents SDK to build a functional AI agent that can interact with Short io.

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.
TOOLS

Supported Tools

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

Add Tag to Links in Bulk

Tool to append a single tag to multiple short links in one call.

Archive Link

Archive a short link, hiding it from the dashboard while keeping it accessible.

Create Folder

Tool to create a new folder for organizing links within a domain.

Create Short Link

Tool to create a new short link from a long URL on your branded domain.

Delete Link

Tool to permanently delete a short link by its unique ID.

Delete Link Permission

Revokes a specific user's access permission for a short link.

Delete Links in Bulk

Delete multiple short links in a single API call (up to 150 links).

Duplicate Link

Tool to duplicate an existing short link by its ID.

Generate QR Code for Link

Tool to generate a QR code for a short link.

Get Bundle Templates

Tool to retrieve all available bundle templates.

Get Domain Details by ID

Tool to retrieve detailed information for a specific domain by its ID.

Get Domain Link Clicks

Tool to get click statistics for specific links in a domain.

Get Domain Paths

Tool to list the most popular paths in a domain over time.

Get Domain Statistics

Tool to get comprehensive statistics for a domain over a specified period.

Get Folder

Tool to retrieve folder details by ID.

Get Link by Original URL

Tool to get link info by original URL.

Get Link Countries

Tool to get country targeting rules for a short link.

Get Link Info by Link ID

Retrieves comprehensive metadata for a short link using its unique ID.

Get Link Info by Path

Tool to get link info by its path and domain.

Get Link OpenGraph Properties

Tool to retrieve OpenGraph settings for a link.

Get Link Permissions

Retrieves all user access permissions for a specific short link within a domain.

Get Link Regions by Country

Tool to list all regions available for a country.

Get Link Regions

Retrieves all region-based targeting rules configured for a specific short link.

Get Links by Original URL

Tool to get multiple links info by original URL.

Get Links List

Tool to list short links on a domain with optional filters.

Get Link Statistics

Tool to get click statistics for a specific link.

Get Link (Tweetbot)

Create a short link using the simplified Tweetbot GET endpoint.

List Domains

Tool to retrieve all domains associated with the Short.

List Folders

Tool to list all folders for a specific domain.

Post Domain Link Clicks

Tool to get click statistics for specific links in a domain using POST method.

Get Domain Statistics by Interval

Tool to retrieve domain statistics over a custom interval.

Post Domains Last Clicks

Tool to retrieve the latest raw click events for a domain.

Get Domain Statistics

Tool to get detailed statistics for a domain over a specified period.

Get Domain Top Values

Retrieves top values for a specified analytics column ranked by click count for a domain.

Archive Links in Bulk

Archive multiple short links in a single API call (up to 150 links).

Create Links in Bulk

Tool to create up to 1000 short links in one call.

Generate QR Codes in Bulk

Tool to generate QR codes for multiple links in bulk.

Unarchive Links in Bulk

Unarchive multiple short links in bulk (up to 150 links per request).

Unarchive Link

Unarchive a previously archived short link to restore it to active status.

Update Domain Settings

Tool to update domain settings for a Short.

Update Link

Tool to update an existing short link by its ID.

FAQ

Frequently asked questions

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

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 Short io tools.

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

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

Start with Short io.It takes 30 seconds.

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

Start building