Skip to main content

Overview

The Tools Marketplace provides pre-built integrations that agents can use:
  • One-click install - Add to your organization
  • Server-side execution - Tools run on RunTools infrastructure
  • Secure credentials - API keys never leave our servers
  • tool_search - Agents discover tools dynamically

Browsing Tools

// List all available tools
const tools = await rt.marketplace.list();

// Filter by category
const emailTools = await rt.marketplace.list({ category: 'communication' });

// Search
const results = await rt.marketplace.search('send notification');

Tool Categories

The marketplace includes hundreds of tools across these categories:
CategoryExamples
CommunicationEmail, Slack, SMS, Discord
DeveloperGitHub, GitLab, Linear, CI/CD
DataDatabases, APIs, Search
ProductivityCalendars, Docs, Spreadsheets
PaymentsStripe, Billing, Invoicing
AI/MLEmbeddings, Vision, Speech

Browse Marketplace

Explore all available tools

Installing Tools

// Install a tool
await rt.tools.install('gmail');

// Configure with credentials
await rt.tools.configure('gmail', {
  // OAuth handled via dashboard, or:
  refreshToken: process.env.GMAIL_REFRESH_TOKEN,
});

// List installed tools
const installed = await rt.tools.list();

Using Tools in Agents

Add tools to your agent runtime:
const runtime = await rt.runtimes.create({
  slug: 'email-assistant',
  systemPrompt: 'You help manage emails...',
  tools: [
    'bash',
    'read_file',
    'gmail',    // Installed tool
    'slack',    // Installed tool
  ],
});

Direct Tool Execution

Call tools directly without an agent:
// Send an email
await rt.tools.execute('gmail', {
  action: 'send_email',
  to: '[email protected]',
  subject: 'Hello from RunTools',
  body: 'This email was sent via the Tools API!',
});

// Post to Slack
await rt.tools.execute('slack', {
  action: 'post_message',
  channel: '#general',
  text: 'Hello from RunTools!',
});

// Query database
const result = await rt.tools.execute('postgres', {
  action: 'query',
  sql: 'SELECT * FROM users LIMIT 10',
});
Let agents discover tools dynamically:
const runtime = await rt.runtimes.create({
  tools: [
    'bash',
    'read_file',
    'tool_search',  // Meta-tool for discovery
  ],
});

// Agent can now call:
// tool_search({ query: "send email" })
// → Returns: gmail, sendgrid, etc.
Control which tools are discoverable:
// Mark a tool as searchable
await rt.tools.configure('gmail', {
  searchable: true,  // Include in tool_search
});

// Or exclude sensitive tools
await rt.tools.configure('stripe', {
  searchable: false, // Hide from tool_search
});

Creating Custom Tools

Publish your own tools to the marketplace:
const tool = await rt.myTools.create({
  slug: 'my-api',
  name: 'My API Tool',
  description: 'Interact with my internal API',
  
  // JSON Schema for parameters
  parameters: {
    type: 'object',
    properties: {
      endpoint: { type: 'string' },
      method: { type: 'string', enum: ['GET', 'POST'] },
      body: { type: 'object' },
    },
    required: ['endpoint', 'method'],
  },
  
  // Tool code (runs in ephemeral sandbox)
  code: `
    export async function execute({ endpoint, method, body }) {
      const res = await fetch(\`https://my-api.com\${endpoint}\`, {
        method,
        body: body ? JSON.stringify(body) : undefined,
        headers: { 'Content-Type': 'application/json' },
      });
      return await res.json();
    }
  `,
});

// Test it
await tool.test({ endpoint: '/users', method: 'GET' });

// Publish to marketplace
await tool.publish();

Tool Execution Flow

Agent calls tool → RunTools API → Ephemeral Sandbox → Execute → Return Result

1. Agent: "Send email to [email protected]"
2. Tool call: gmail.send_email({ to: "[email protected]", ... })
3. RunTools decrypts your Gmail credentials
4. Spins up ephemeral sandbox with tool code
5. Executes tool with credentials injected
6. Returns result to agent
7. Destroys ephemeral sandbox

Pricing

TierTool Calls/MonthPrice
Free100$0
Pro10,000$29/mo
Team100,000$99/mo
EnterpriseUnlimitedCustom
Some premium tools may have additional costs. Check the tool details for pricing.

Best Practices

Each installed tool is available to all agents in your organization. Be intentional.
If you have many tools installed, use tool_search instead of listing them all. Fewer tools in context means faster responses and better agent performance.
Use test mode to verify tool configuration before using in production.
Update OAuth tokens and API keys periodically for security.