229 lines
8.3 KiB
Markdown
229 lines
8.3 KiB
Markdown
# Aden Tools
|
|
|
|
Tool library for the Aden agent framework. Provides a collection of tools that AI agents can use to interact with external systems, process data, and perform actions via the Model Context Protocol (MCP).
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
uv pip install -e tools
|
|
```
|
|
|
|
For development:
|
|
|
|
```bash
|
|
uv pip install -e "tools[dev]"
|
|
```
|
|
|
|
## Environment Setup
|
|
|
|
Some tools require API keys to function. Credentials are managed through the encrypted credential store at `~/.hive/credentials`, which is configured automatically during initial setup:
|
|
|
|
```bash
|
|
./quickstart.sh
|
|
```
|
|
|
|
| Variable | Required For | Get Key |
|
|
| ---------------------- | ----------------------------- | ------------------------------------------------------- |
|
|
| `ANTHROPIC_API_KEY` | MCP server startup, LLM nodes | [console.anthropic.com](https://console.anthropic.com/) |
|
|
| `BRAVE_SEARCH_API_KEY` | `web_search` tool (Brave) | [brave.com/search/api](https://brave.com/search/api/) |
|
|
| `GOOGLE_API_KEY` | `web_search` tool (Google) | [console.cloud.google.com](https://console.cloud.google.com/) |
|
|
| `GOOGLE_CSE_ID` | `web_search` tool (Google) | [programmablesearchengine.google.com](https://programmablesearchengine.google.com/) |
|
|
|
|
> **Note:** `web_search` supports multiple providers. Set either Brave OR Google credentials. Brave is preferred for backward compatibility.
|
|
|
|
Alternatively, export credentials as environment variables:
|
|
|
|
```bash
|
|
export ANTHROPIC_API_KEY=your-key-here
|
|
export BRAVE_SEARCH_API_KEY=your-key-here
|
|
```
|
|
|
|
See the [credentials module](src/aden_tools/credentials/) for details on how credentials are resolved.
|
|
|
|
## Quick Start
|
|
|
|
### As an MCP Server
|
|
|
|
```python
|
|
from fastmcp import FastMCP
|
|
from aden_tools.tools import register_all_tools
|
|
|
|
mcp = FastMCP("tools")
|
|
register_all_tools(mcp)
|
|
mcp.run()
|
|
```
|
|
|
|
Or run directly:
|
|
|
|
```bash
|
|
python mcp_server.py
|
|
```
|
|
|
|
## Available Tools
|
|
|
|
### File System
|
|
|
|
All file tools live in `aden_tools.file_ops` and share one path policy
|
|
(relative paths anchor to a registered `home`; absolute paths are honored
|
|
verbatim; system + credential paths are on a deny list).
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `read_file` | Read file contents (with optional hashline anchors) |
|
|
| `write_file` | Create or overwrite a file |
|
|
| `edit_file` | Find/replace with fuzzy fallback |
|
|
| `search_files` | Grep file contents (`target='content'`) or list/find files (`target='files'`) — replaces grep, find, and ls |
|
|
| `save_data` / `load_data` | Persist and retrieve structured data across steps |
|
|
| `serve_file_to_user` | Serve a file for the user to download |
|
|
| `list_data_files` | List persisted data files in the session |
|
|
| `append_data` / `edit_data` | Append or edit persisted data files |
|
|
|
|
### Data Files
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `csv_read` | Read rows from a CSV file |
|
|
| `csv_write` | Write a new CSV file |
|
|
| `csv_append` | Append rows to a CSV file |
|
|
| `csv_info` | Get CSV file metadata |
|
|
| `csv_sql` | Query a CSV file with SQL (DuckDB) |
|
|
| `excel_read` | Read rows from an Excel sheet |
|
|
| `excel_write` | Write a new Excel file |
|
|
| `excel_append` | Append rows to an Excel file |
|
|
| `excel_info` | Get Excel file metadata |
|
|
| `excel_sheet_list` | List sheets in an Excel workbook |
|
|
| `excel_sql` | Query Excel sheets with SQL (DuckDB) |
|
|
| `excel_search` | Search for values across Excel sheets |
|
|
| `pdf_read` | Read and extract text from PDF files |
|
|
|
|
### Web & Search
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `web_search` | Search the web (Google or Brave, auto-detected) |
|
|
| `web_scrape` | Scrape and extract content from webpages |
|
|
| `search_wikipedia` | Search Wikipedia for pages and summaries |
|
|
| `scholar_search`, `scholar_get_citations`, `scholar_get_author` | Search academic papers, get citations and author profiles via SerpAPI |
|
|
| `patents_search`, `patents_get_details` | Search patents and retrieve patent details via SerpAPI |
|
|
| `exa_search`, `exa_answer`, `exa_find_similar`, `exa_get_contents` | Semantic search and content retrieval via Exa AI |
|
|
| `news_search`, `news_headlines`, `news_by_company`, `news_sentiment` | Search news articles and analyse sentiment |
|
|
| `search_papers`, `download_paper` | Search arXiv for scientific papers and download PDFs |
|
|
|
|
### Communication
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `gmail_*` | Read, reply, draft, and manage Gmail messages |
|
|
| `send_email` | Send email via SMTP |
|
|
| `slack_*` | Send messages, manage channels, users, and files in Slack |
|
|
| `discord_send_message`, `discord_get_messages`, `discord_list_channels`, `discord_list_guilds` | Send and read Discord messages |
|
|
| `telegram_send_message`, `telegram_send_document` | Send messages and documents via Telegram Bot API |
|
|
|
|
### Productivity & CRM
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `calendar_list_calendars` | List all accessible calendars |
|
|
| `calendar_list_events` | List events from a calendar |
|
|
| `calendar_get_event` | Get details of a specific event |
|
|
| `calendar_create_event` | Create a new calendar event |
|
|
| `calendar_update_event` | Update an existing calendar event |
|
|
| `calendar_delete_event` | Delete a calendar event |
|
|
| `calendar_get_calendar` | Get calendar metadata |
|
|
| `calendar_check_availability` | Check free/busy status for attendees |
|
|
| `hubspot_*` | HubSpot CRM: contacts, companies, deals, notes |
|
|
| `apollo_*` | Apollo.io: prospect search and enrichment |
|
|
| `calcom_*` | Cal.com: scheduling and bookings |
|
|
|
|
### Cloud & APIs
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `vision_*` | Analyze images with Google Cloud Vision (labels, OCR, faces, objects, etc.) |
|
|
| `google_docs_*` | Read and write Google Docs |
|
|
| `maps_*` | Places search, geocoding, directions (Google Maps) |
|
|
| `run_bigquery_query`, `describe_dataset` | Run queries against Google BigQuery |
|
|
| `razorpay_*` | Razorpay payments and orders |
|
|
| `github_*` | GitHub repos, issues, and pull requests |
|
|
|
|
### Security
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `port_scan` | TCP port scan with service banner grabbing |
|
|
| `dns_security_scan` | Check SPF, DMARC, DKIM, DNSSEC, zone transfer |
|
|
| `ssl_tls_scan` | Analyze SSL/TLS configuration and certificate |
|
|
| `http_headers_scan` | Check security-related HTTP response headers |
|
|
| `subdomain_enumerate` | Enumerate subdomains via DNS |
|
|
| `tech_stack_detect` | Detect technologies used by a website |
|
|
| `risk_score` | Compute an overall security risk grade |
|
|
|
|
### Utilities
|
|
|
|
| Tool | Description |
|
|
| ---- | ----------- |
|
|
| `get_current_time` | Get current date/time with timezone support |
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
tools/
|
|
├── src/aden_tools/
|
|
│ ├── __init__.py # Main exports
|
|
│ ├── file_ops.py # ALL file tools (read, write, edit, hashline_edit, search_files, apply_patch)
|
|
│ ├── credentials/ # Credential management
|
|
│ └── tools/ # Tool implementations
|
|
│ ├── file_system_toolkits/ # Sandbox path helpers (security.py)
|
|
│ │ └── security.py
|
|
│ ├── web_search_tool/
|
|
│ ├── web_scrape_tool/
|
|
│ ├── pdf_read_tool/
|
|
│ ├── wikipedia_tool/
|
|
│ ├── time_tool/
|
|
│ └── calendar_tool/
|
|
├── tests/ # Test suite
|
|
├── mcp_server.py # MCP server entry point
|
|
├── README.md
|
|
├── BUILDING_TOOLS.md # Tool development guide
|
|
└── pyproject.toml
|
|
```
|
|
|
|
## Creating Custom Tools
|
|
|
|
Tools use FastMCP's native decorator pattern:
|
|
|
|
```python
|
|
from fastmcp import FastMCP
|
|
|
|
|
|
def register_tools(mcp: FastMCP) -> None:
|
|
@mcp.tool()
|
|
def my_tool(query: str, limit: int = 10) -> dict:
|
|
"""
|
|
Search for items matching the query.
|
|
|
|
Args:
|
|
query: The search query
|
|
limit: Max results to return
|
|
|
|
Returns:
|
|
Dict with results or error
|
|
"""
|
|
try:
|
|
results = do_search(query, limit)
|
|
return {"results": results, "total": len(results)}
|
|
except Exception as e:
|
|
return {"error": str(e)}
|
|
```
|
|
|
|
See [BUILDING_TOOLS.md](BUILDING_TOOLS.md) for the full guide.
|
|
|
|
## Documentation
|
|
|
|
- [Building Tools Guide](BUILDING_TOOLS.md) - How to create new tools
|
|
- Individual tool READMEs in `src/aden_tools/tools/*/README.md`
|
|
|
|
## License
|
|
|
|
This project is licensed under the Apache License 2.0 - see the [LICENSE](../LICENSE) file for details.
|