OpenAI — rcp-sdk/adapters/openai

Build an AI agent that uses your REST API as tools via OpenAI SDK. Converts RCP tools to ChatCompletionTool[] for openai.chat.completions.create() — your agent speaks RCP, ChatGPT doesn't need to.

typescript
import { rcpToolsToOpenAiTools, loadOpenAiTools } from 'rcp-sdk/adapters/openai';

The OpenAI adapter lets you build an AI agent that uses your REST API as tools via the OpenAI SDK. It converts DiscoveredTool[] from rcp.discover() into ChatCompletionTool[] — the format openai.chat.completions.create() expects. Your agent speaks RCP; ChatGPT/Claude don't need to — they just see normal OpenAI tools.

rcpToolsToOpenAiTools(tools, options?)

Converts an array of RCP tools into OpenAI function-calling format. Pass the result directly to openai.chat.completions.create().

typescript
import { createRcpClient } from 'rcp-sdk/client';
import { rcpToolsToOpenAiTools } from 'rcp-sdk/adapters/openai';
import OpenAI from 'openai';

const rcp = createRcpClient();
const { tools } = await rcp.discover('https://example.com/rcp/manifest');
const openaiTools = rcpToolsToOpenAiTools(tools);

const openai = new OpenAI();
const completion = await openai.chat.completions.create({
  model: 'gpt-4o-mini',
  messages: [{ role: 'user', content: 'Hello' }],
  tools: openaiTools,
});

rcpToolToOpenAiTool(tool, options?)

Converts a single DiscoveredTool into OpenAI format. Useful when you want to cherry-pick tools from a discovered manifest.

typescript
import { rcpToolToOpenAiTool } from 'rcp-sdk/adapters/openai';

const weatherTool = rcpToolToOpenAiTool(tools[0], {
  serverName: 'weather',
  prefixToolNameWithServerName: true,
});

loadOpenAiTools(manifestUrl, client, options?)

One-call helper: discovers the manifest and converts all tools in a single step.

typescript
import { loadOpenAiTools } from 'rcp-sdk/adapters/openai';
import { createRcpClient } from 'rcp-sdk/client';

const rcp = createRcpClient();
const { tools, discovered } = await loadOpenAiTools(
  'https://example.com/rcp/manifest',
  rcp,
  { serverName: 'myApi' },
);

Options

OptionTypeNotes
serverNamestringPrefix for tool names: "myApi__get_weather".
prefixToolNameWithServerNamebooleanIf true and serverName is set, tool names become serverName__toolName.
additionalToolNamePrefixstringExtra prefix applied before server name.

How it works

The adapter converts exposedParams into a JSON Schema parameters object matching OpenAI's function-calling format:

RCP param typeOpenAI type
string"string"
number"number"
boolean"boolean"

Parameters with required: false are omitted from the required array. The result is a standard ChatCompletionTool that you pass directly to openai.chat.completions.create().

The returned OpenAiTool[] is directly assignable to ChatCompletionTool[] — no casting needed. The adapter's parameter types extend Record<string, unknown> to match the OpenAI SDK's index signature requirement.

Related