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.
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().
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.
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.
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
| Option | Type | Notes |
|---|---|---|
serverName | string | Prefix for tool names: "myApi__get_weather". |
prefixToolNameWithServerName | boolean | If true and serverName is set, tool names become serverName__toolName. |
additionalToolNamePrefix | string | Extra 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 type | OpenAI 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().
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.