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
-
Navigate to Custom Tools
- Go to Dashboard → Custom Tools
- Click "Create Custom Tool"
-
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
-
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
-
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:
- Values provided at runtime (highest priority)
- Parameter overrides in custom tool
- 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
-
Create Account First
- Dashboard → Accounts → Add Account
- Select service and authenticate
- Save credentials
-
Link to Custom Tool
- When creating custom tool
- Select the credential from dropdown
- Save
-
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
- Keep it Simple: Only override what's necessary
- Document Reasons: Use descriptions to explain why
- Test Thoroughly: Verify overrides work as expected
- Review Regularly: Remove overrides that aren't used
Security Best Practices
-
Credential Hygiene:
- Use separate credentials for dev/staging/prod
- Rotate credentials every 90 days
- Revoke unused credentials immediately
-
Access Control:
- Create separate custom tools for different teams
- Use descriptive names to track usage
- Monitor which servers use which tools
-
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
Example 1: Configured Web Search
{
"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
Example 2: Notion Workspace Search
{
"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"]
}
}