Skip to main content

Creating Custom Tools

Learn how to create, configure, and manage custom tools in Reeva.

What Are Custom Tools?

Custom Tools are your personalized configurations of Reeva's base tools. They allow you to:

  • Set default parameters - Pre-fill common values to simplify usage
  • Link credentials - Connect your service accounts once and reuse
  • Name descriptively - Use meaningful names that describe their purpose
  • Reuse across servers - Create once, use in multiple servers
  • Maintain consistency - Ensure the same configuration across projects

Base Tools vs Custom Tools

Base Tools are the 70+ integrations built and maintained by Reeva:

  • Generic, unconfigured
  • Available to all users
  • Cannot be modified
  • Examples: google_search, firecrawl_scrape, notion_create_page

Custom Tools are your instances of base tools:

  • Personalized configuration
  • Owned by your account
  • Can be edited or deleted
  • Examples: "My Blog Scraper", "Company Notion Search", "Dev Jira Tickets"

Example

Base Tool: firecrawl_scrape

{
"name": "firecrawl_scrape",
"parameters": {
"url": "required",
"formats": "optional",
"onlyMainContent": "optional"
}
}

Custom Tool: "Blog Content Scraper"

{
"name": "Blog Content Scraper",
"base_tool": "firecrawl_scrape",
"param_overrides": {
"formats": ["markdown"],
"onlyMainContent": true
},
"credential_id": "my_firecrawl_account"
}

Now when AI uses "Blog Content Scraper", it only needs to provide the url - the other parameters are pre-configured.

Creating Custom Tools

Via Dashboard

  1. Navigate to Custom Tools

    • Go to Dashboard → Custom Tools
    • Click "Create Custom Tool"
  2. Select Base Tool

    • Browse by category or search by name
    • Click on the base tool you want to configure
    • Review the tool's description and parameters
  3. Configure Your Tool

    • Name: Give it a descriptive name (e.g., "My Company Jira")
    • Description: Optional notes about its purpose
    • Parameter Overrides: Set default values for any parameters
    • Credentials: Link your account if required
  4. Save and Test

    • Click "Create"
    • Test in the Chat Playground before deploying

Via API

curl -X POST https://api.joinreeva.com/api/custom-tools \
-H "Content-Type: application/json" \
-d '{
"name": "My Web Search",
"description": "Configured for 10 results",
"base_tool_id": "tool_google_search",
"param_overrides": {
"num_results": 10
}
}'

Parameter Overrides

Parameter overrides allow you to set default values for tool parameters. When the tool is called, these defaults are used unless explicitly overridden.

How Overrides Work

Priority Order:

  1. Values provided at runtime (highest priority)
  2. Parameter overrides in custom tool
  3. Base tool defaults (lowest priority)

Example: Web Search Configuration

Base Tool Parameters:

{
"query": "required",
"num_results": "optional, default: 10",
"safe_search": "optional, default: moderate"
}

Custom Tool Overrides:

{
"param_overrides": {
"num_results": 20,
"safe_search": "strict"
}
}

Runtime Call:

{
"query": "MCP protocol"
}

Actual Execution:

{
"query": "MCP protocol",
"num_results": 20,
"safe_search": "strict"
}

When to Use Overrides

Good Use Cases:

  • Setting consistent output formats (formats: ["markdown"])
  • Defining result limits (num_results: 5)
  • Configuring behavior (onlyMainContent: true)
  • Setting default models (model: "sonar-pro")

Avoid:

  • Overriding values that should vary per call (like search queries)
  • Setting very restrictive constraints
  • Duplicating required parameters

Credential Linking

Many tools require authentication to external services. You link credentials when creating custom tools.

Services Requiring Credentials

  • Firecrawl: API key
  • Notion: OAuth connection
  • Jira: API token + domain
  • Perplexity: API key
  • N8N: API key + instance URL
  • Supabase: API key + project URL
  • Mem0: API key

Linking Process

  1. Create Account First

    • Dashboard → AccountsAdd Account
    • Select service and authenticate
    • Save credentials
  2. Link to Custom Tool

    • When creating custom tool
    • Select the credential from dropdown
    • Save
  3. Automatic Injection

    • When the tool executes, credentials are automatically injected
    • You never expose credentials in tool calls
    • Credentials can be rotated without updating custom tools

Example: Notion Custom Tool

{
"name": "My Company Notion",
"base_tool_id": "notion_search_pages",
"credential_id": "account_abc123",
"param_overrides": {
"page_size": 10
}
}

When this tool runs:

  • Your Notion OAuth token is automatically injected
  • AI can search Notion without knowing your credentials
  • You can update the OAuth token without changing the custom tool

Managing Custom Tools

Listing Your Tools

Via Dashboard:

  • Navigate to Custom Tools
  • Filter by category, base tool, or search by name
  • See which servers use each tool

Via API:

curl -X GET https://api.joinreeva.com/api/custom-tools

Updating Tools

You can update:

  • Name and description
  • Parameter overrides
  • Linked credentials
  • Active/inactive status

Via Dashboard:

  • Click on custom tool → Edit → Make changes → Save

Via API:

curl -X PUT https://api.joinreeva.com/api/custom-tools/{custom_tool_id} \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Name",
"param_overrides": {
"num_results": 15
}
}'

Deleting Tools

Warning: Deleting a custom tool removes it from all servers using it.

Via Dashboard:

  • Click on custom tool → Delete → Confirm

Via API:

curl -X DELETE https://api.joinreeva.com/api/custom-tools/{custom_tool_id}

Using Custom Tools in Servers

Once created, custom tools can be added to any of your servers.

Adding to Server

During Server Creation:

curl -X POST https://api.joinreeva.com/api/servers \
-H "Content-Type: application/json" \
-d '{
"name": "My Research Server",
"selected_custom_tools": [
"custom_tool_1",
"custom_tool_2",
"custom_tool_3"
]
}'

Updating Existing Server:

curl -X PUT https://api.joinreeva.com/api/servers/{server_id} \
-H "Content-Type: application/json" \
-d '{
"selected_custom_tools": [
"custom_tool_1",
"custom_tool_2",
"custom_tool_3",
"custom_tool_4"
]
}'

Reusing Tools

Custom tools can be used in multiple servers:

Custom Tool: "My Firecrawl Scraper"
├── Server 1: "Research Server"
├── Server 2: "Content Aggregator"
└── Server 3: "Documentation Builder"

Benefits:

  • Consistent configuration across projects
  • Update once, applies everywhere
  • Easier to manage credentials

Best Practices

Naming Conventions

Good Names:

  • "Company Jira - Production"
  • "Blog Content Scraper"
  • "Research Perplexity"
  • "Dev Notion Workspace"

Poor Names:

  • "Tool 1"
  • "test"
  • "firecrawl"
  • "my_tool"

Tips:

  • Include the service name
  • Describe the purpose or scope
  • Differentiate between environments (dev/prod)
  • Use clear, descriptive language

Organization Strategies

By Project:

- "ProjectX Jira"
- "ProjectX Notion"
- "ProjectX Web Search"

By Purpose:

- "Quick Web Search" (5 results)
- "Deep Web Search" (20 results)
- "News Search" (Google News)

By Environment:

- "Production Supabase"
- "Staging Supabase"
- "Dev Supabase"

Parameter Override Guidelines

  1. Keep it Simple: Only override what's necessary
  2. Document Reasons: Use descriptions to explain why
  3. Test Thoroughly: Verify overrides work as expected
  4. Review Regularly: Remove overrides that aren't used

Security Best Practices

  1. Credential Hygiene:

    • Use separate credentials for dev/staging/prod
    • Rotate credentials every 90 days
    • Revoke unused credentials immediately
  2. Access Control:

    • Create separate custom tools for different teams
    • Use descriptive names to track usage
    • Monitor which servers use which tools
  3. Audit Trail:

    • Check usage logs regularly
    • Review credit consumption by tool
    • Investigate unexpected usage patterns

Common Patterns

Research Workflow

Custom Tool: "Fast Web Search"
├── Base: google_search
├── Overrides: {num_results: 5}
└── No credentials needed

Custom Tool: "Deep Content Scraper"
├── Base: firecrawl_scrape
├── Overrides: {formats: ["markdown"], onlyMainContent: true}
└── Credential: My Firecrawl API Key

Custom Tool: "AI Research Assistant"
├── Base: Perplexity_Ask
├── Overrides: {model: "sonar-pro", temperature: 0.2}
└── Credential: My Perplexity API Key

Productivity Automation

Custom Tool: "Company Notion"
├── Base: notion_search_pages
├── Overrides: {page_size: 20}
└── Credential: Notion OAuth

Custom Tool: "Dev Team Jira"
├── Base: jira_search_issues
├── Overrides: {project: "DEV", max_results: 50}
└── Credential: Jira API Token

Custom Tool: "Team Gmail"
├── Base: gmail_search
├── Overrides: {max_results: 10}
└── Credential: Gmail OAuth

Data Pipeline

Custom Tool: "Raw Web Scraper"
├── Base: scrape_webpage
├── No overrides
└── No credentials

Custom Tool: "Clean Text Processor"
├── Base: text processing tools
├── Various text operations
└── No credentials

Custom Tool: "Data Warehouse"
├── Base: supabase_create_records
├── Overrides: {table: "scraped_content"}
└── Credential: Supabase API Key

Troubleshooting

Tool Not Appearing in Server

Check:

  • Tool is active (not deactivated)
  • Tool was added to server's selected_custom_tools
  • Server configuration was saved
  • Cache was refreshed (wait 30 seconds)

Credential Errors

"Invalid credentials" error:

  • Verify credential is linked to custom tool
  • Check credential is still active
  • Re-authenticate if using OAuth
  • Test credential in Accounts section

Override Not Working

Parameters still using defaults:

  • Check override syntax in custom tool
  • Verify parameter name matches base tool schema
  • Ensure override is saved
  • Test in playground to isolate issue

Permission Denied

"Access denied" error:

  • Verify you own the custom tool
  • Check credential has necessary permissions
  • Confirm service account has access to resource

Examples

{
"name": "Quick News Search",
"description": "Fast news search with 5 results",
"base_tool_id": "google_news_search",
"param_overrides": {
"num_results": 5,
"time_range": "24h"
}
}

Usage in AI:

AI: "Search for latest AI developments"
→ Uses "Quick News Search" with query="latest AI developments"
→ Automatically applies num_results=5 and time_range=24h
{
"name": "Engineering Docs Search",
"description": "Search engineering documentation in Notion",
"base_tool_id": "notion_search_pages",
"credential_id": "notion_oauth_123",
"param_overrides": {
"filter": {
"property": "Database",
"database": "engineering_docs"
},
"page_size": 10
}
}

Example 3: Firecrawl Content Extractor

{
"name": "Markdown Blog Scraper",
"description": "Extract blog posts as clean markdown",
"base_tool_id": "firecrawl_scrape",
"credential_id": "firecrawl_api_456",
"param_overrides": {
"formats": ["markdown"],
"onlyMainContent": true,
"excludeTags": ["nav", "footer", "aside"]
}
}

Next Steps