Tools extend assistant capabilities by allowing them to perform actions, access external data, and integrate with third-party services. Freddy supports three types of tools: System Tools, MCP Tools, and Streamline Automations.
Native capabilities provided by Freddy:
- File Search: Semantic search across uploaded files
- Web Search: Real-time internet search
- Code Interpreter: Execute Python code safely
Custom integrations via Model Context Protocol:
- Custom MCPs: User-configured MCP servers
- Personal Connectors: OAuth-based third-party integrations (Google Drive, Notion, etc.)
- Streamline Automations: Workflow automation tools
Automations created in the Streamline platform that expose MCP interfaces.
Tools are configured in the assistant_tool_configurations table:
{
"system_tools": {
"file_search": {
"enabled": true,
"max_results": 10,
"min_relevance_score": 0.7
},
"web_search": {
"enabled": true,
"safe_mode": true,
"max_results": 5
},
"code_interpreter": {
"enabled": false
}
},
"mcp_tools": [
"mcp_abc123", // Custom MCP server
"mcp_def456", // Google Drive connector
"mcp_ghi789" // GitHub integration
],
"streamline_tools": [
"sauto_xyz789" // Streamline automation
]
}Enable semantic search across files attached to the assistant.
Configuration:
{
"file_search": {
"enabled": true,
"max_results": 10,
"min_relevance_score": 0.7,
"search_mode": "hybrid" // "semantic", "keyword", "hybrid"
}
}Use Case:
User: "What does our refund policy say about damaged items?"
Assistant: [Searches attached policy documents]
"According to section 3.2 of the refund policy..."Requirements:
- Vector store attached to assistant
- Files uploaded and indexed
Real-time internet search for current information.
Configuration:
{
"web_search": {
"enabled": true,
"safe_mode": true,
"max_results": 5,
"allowed_domains": ["example.com", "docs.example.com"]
}
}Use Case:
User: "What's the current price of Bitcoin?"
Assistant: [Searches web]
"As of today, Bitcoin is trading at $43,250..."Safety:
- Safe mode filters inappropriate content
- Domain restrictions for enterprise use
- Rate limiting to prevent abuse
Execute Python code in a sandboxed environment.
Configuration:
{
"code_interpreter": {
"enabled": true,
"timeout_seconds": 30,
"max_memory_mb": 512,
"allowed_packages": ["pandas", "numpy", "matplotlib"]
}
}Use Case:
User: "Analyze this CSV and create a chart"
Assistant: [Executes Python code]
"I've analyzed the data. Here's a summary:
- Total rows: 1,234
- Average value: 45.67
[Chart attached]"Security:
- Sandboxed execution environment
- Resource limits (CPU, memory, time)
- No network access from code
- File system isolation
User-configured MCP servers for custom integrations.
Setup:
# 1. Create MCP configuration
curl https://api.aitronos.com/v1/mcp-configurations \
-H "X-API-Key: $FREDDY_API_KEY" \
-d '{
"name": "My Custom Tool",
"type": "custom",
"server_url": "https://my-mcp-server.com",
"transport_type": "sse",
"auth_type": "bearer_token",
"credentials": {
"token": "my-secret-token"
}
}'
# 2. Assign to assistant
curl https://api.aitronos.com/v1/assistants/{assistant_id}/tools \
-H "X-API-Key: $FREDDY_API_KEY" \
-d '{
"mcp_tools": ["mcp_abc123"]
}'Configuration:
{
"id": "mcp_abc123",
"name": "Database Query Tool",
"type": "custom",
"server_url": "https://db-mcp.example.com",
"transport_type": "sse",
"auth_type": "bearer_token",
"tool_configuration": {
"enabled": true,
"allowed_tools": ["query", "schema"] // Restrict specific tools
}
}OAuth-based integrations with third-party services.
Supported Connectors:
- Google Drive
- Notion
- GitHub
- Slack
- More coming soon...
Setup Flow:
# 1. Initiate OAuth flow
curl https://api.aitronos.com/v1/personal-connectors/google-drive/authorize \
-H "X-API-Key: $FREDDY_API_KEY"
# Response includes authorization URL
{
"authorization_url": "https://accounts.google.com/o/oauth2/v2/auth?..."
}
# 2. User authorizes (redirects back with code)
# 3. Complete OAuth flow
curl https://api.aitronos.com/v1/personal-connectors/google-drive/callback \
-H "X-API-Key: $FREDDY_API_KEY" \
-d '{
"code": "authorization_code_from_google"
}'
# 4. Assign to assistant
curl https://api.aitronos.com/v1/assistants/{assistant_id}/tools \
-H "X-API-Key: $FREDDY_API_KEY" \
-d '{
"mcp_tools": ["mcp_google_drive_123"]
}'Use Case:
User: "Summarize the latest document in my Google Drive"
Assistant: [Accesses Google Drive via OAuth]
"I found 'Q4 Report.docx' updated 2 hours ago.
Here's a summary: ..."Workflow automations that expose MCP interfaces.
Setup:
# Streamline automations are registered automatically
# when created in the Streamline platform
# Assign to assistant
curl https://api.aitronos.com/v1/assistants/{assistant_id}/tools \
-H "X-API-Key: $FREDDY_API_KEY" \
-d '{
"streamline_tools": ["sauto_xyz789"]
}'Use Case:
User: "Create a new customer record for John Doe"
Assistant: [Triggers Streamline automation]
"I've created a customer record with ID #12345
and sent a welcome email."User: "Search our knowledge base for pricing info"Assistant determines: Need to use file_search tool{
"tool": "file_search",
"parameters": {
"query": "pricing information",
"max_results": 5
}
}System executes file_search:
- Searches vector store
- Returns relevant documentsAssistant: "Based on our pricing documentation:
- Standard plan: $49/month
- Professional plan: $99/month
- Enterprise: Custom pricing"Available to all users in the organization:
{
"mcp_configuration_id": "mcp_abc123",
"organization_id": "org_xyz789",
"user_id": null, // null = org-wide
"is_active": true
}Available only to specific users:
{
"mcp_configuration_id": "mcp_def456",
"organization_id": "org_xyz789",
"user_id": "usr_abc123", // Specific user
"is_active": true
}When a user uses an assistant:
Active Tools = Assistant Tools + User Personal ToolsExample:
Assistant has:
- file_search (system)
- company_database (org MCP)
User has:
- google_drive (personal connector)
- notion (personal connector)
User sees all 4 tools when using this assistantGET /v1/assistants/{assistant_id}/toolsResponse:
{
"system_tools": {
"file_search": {"enabled": true},
"web_search": {"enabled": false},
"code_interpreter": {"enabled": false}
},
"mcp_tools": [
{
"id": "mcp_abc123",
"name": "Database Tool",
"type": "custom",
"is_active": true
}
],
"streamline_tools": [
{
"id": "sauto_xyz789",
"name": "Customer Onboarding",
"is_active": true
}
]
}PATCH /v1/assistants/{assistant_id}/toolsRequest:
{
"system_tools": {
"file_search": {
"enabled": true,
"max_results": 15
},
"web_search": {
"enabled": true
}
},
"mcp_tools": ["mcp_abc123", "mcp_def456"],
"streamline_tools": ["sauto_xyz789"]
}POST /v1/assistants/{assistant_id}/tools/mcpRequest:
{
"mcp_configuration_id": "mcp_new123"
}DELETE /v1/assistants/{assistant_id}/tools/mcp/{mcp_id}- Enable only needed tools to reduce complexity
- Test tools individually before combining
- Set appropriate timeouts for long-running operations
- Use tool restrictions to limit scope
- Monitor tool usage for performance and costs
- Don't enable all tools by default
- Don't expose sensitive tools to public assistants
- Don't skip error handling in tool configurations
- Don't ignore rate limits on external APIs
- Don't forget to refresh OAuth tokens for personal connectors
Problem: Tool doesn't appear in assistant responses
Solutions:
- Check tool is enabled in configuration
- Verify MCP configuration is active
- Check user has access to personal connector
- Ensure OAuth token is valid
Problem: Tool executes but returns errors
Solutions:
- Check tool configuration parameters
- Verify API credentials are valid
- Check rate limits on external services
- Review tool logs for specific errors
Problem: Tools take too long to respond
Solutions:
- Reduce
max_resultsfor search tools - Add timeout limits
- Cache frequently accessed data
- Use async tool execution