Gemini — rcp-sdk/adapters/gemini

Convert RCP-discovered tools into Google GenAI (Gemini) function-calling format. Supports both Gemini Interactions API and classic generateContent — expose REST API to Gemini 2.5.

typescript
import { rcpToolsToGeminiInteractionsTools, loadGeminiTools } from 'rcp-sdk/adapters/gemini';

The Gemini adapter converts DiscoveredTool[] from rcp.discover() into Gemini function-calling format. Supports two APIs: the Interactions API (simpler) and classic generateContent (wrapped).

Interactions API

The simpler format — flat tool entries passed to ai.interactions.create().

typescript
import { createRcpClient } from 'rcp-sdk/client';
import { rcpToolsToGeminiInteractionsTools } from 'rcp-sdk/adapters/gemini';
import { GoogleGenAI } from '@google/genai';

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

const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const interaction = await ai.interactions.create({
  model: 'models/gemini-2.5-flash',
  input: prompt,
  tools: geminiTools,
});

Classic generateContent

The wrapped format — functionDeclarations inside a tools array entry.

typescript
import { rcpToolsToGeminiClassicTools } from 'rcp-sdk/adapters/gemini';

const classicTools = rcpToolsToGeminiClassicTools(tools);

const response = await ai.models.generateContent({
  model: 'gemini-2.5-flash',
  contents: prompt,
  config: { tools: classicTools },
});

loadGeminiTools(manifestUrl, client, options?)

One-call helper: discovers the manifest and returns both formats.

typescript
import { loadGeminiTools } from 'rcp-sdk/adapters/gemini';

const { interactionsTools, classicTools, discovered } = await loadGeminiTools(
  '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.
The Interactions API uses a flat { type: 'function', name, ... } format. The classic API wraps declarations in { functionDeclarations: [...] }. Both produce valid Gemini tool schemas.

Related