|
| 1 | +# Tools |
| 2 | + |
| 3 | +Hive agents interact with external services through **tools** — functions exposed via MCP (Model Context Protocol) servers. The main tool server lives at `tools/mcp_server.py` and registers integrations from the `aden_tools` package. |
| 4 | + |
| 5 | +## Verified vs Unverified |
| 6 | + |
| 7 | +Tools are split into two tiers: |
| 8 | + |
| 9 | +| Tier | Description | Default | |
| 10 | +|------|-------------|---------| |
| 11 | +| **Verified** | Stable integrations tested on main. Always loaded. | On | |
| 12 | +| **Unverified** | New or community integrations pending full review. | Off | |
| 13 | + |
| 14 | +Verified tools include core capabilities like web search, GitHub, email, file system operations, and security scanners. Unverified tools cover newer integrations like Jira, Notion, Salesforce, Snowflake, and others that are functional but haven't completed the full review process. |
| 15 | + |
| 16 | +## Enabling Unverified Tools |
| 17 | + |
| 18 | +Set the `INCLUDE_UNVERIFIED_TOOLS` environment variable to opt in: |
| 19 | + |
| 20 | +```bash |
| 21 | +# Shell |
| 22 | +INCLUDE_UNVERIFIED_TOOLS=true uv run python tools/mcp_server.py --stdio |
| 23 | +``` |
| 24 | + |
| 25 | +### In `mcp_servers.json` |
| 26 | + |
| 27 | +When configuring an agent's MCP server, pass the env var in the server config: |
| 28 | + |
| 29 | +```json |
| 30 | +{ |
| 31 | + "servers": [ |
| 32 | + { |
| 33 | + "name": "tools", |
| 34 | + "transport": "stdio", |
| 35 | + "command": "uv", |
| 36 | + "args": ["run", "python", "tools/mcp_server.py", "--stdio"], |
| 37 | + "env": { |
| 38 | + "INCLUDE_UNVERIFIED_TOOLS": "true" |
| 39 | + } |
| 40 | + } |
| 41 | + ] |
| 42 | +} |
| 43 | +``` |
| 44 | + |
| 45 | +### In Docker |
| 46 | + |
| 47 | +```bash |
| 48 | +docker run -e INCLUDE_UNVERIFIED_TOOLS=true ... |
| 49 | +``` |
| 50 | + |
| 51 | +### In Python |
| 52 | + |
| 53 | +If calling `register_all_tools` directly (e.g., in a custom server): |
| 54 | + |
| 55 | +```python |
| 56 | +from aden_tools.tools import register_all_tools |
| 57 | + |
| 58 | +register_all_tools(mcp, credentials=credentials, include_unverified=True) |
| 59 | +``` |
| 60 | + |
| 61 | +Accepted values: `true`, `1`, `yes` (case-insensitive). Any other value or unset means off. |
| 62 | + |
| 63 | +## Listing Available Tools |
| 64 | + |
| 65 | +The MCP server logs registered tools at startup (HTTP mode): |
| 66 | + |
| 67 | +```bash |
| 68 | +uv run python tools/mcp_server.py |
| 69 | +# [MCP] Registered 47 tools: [...] |
| 70 | +``` |
| 71 | + |
| 72 | +In STDIO mode, logs go to stderr to keep stdout clean for JSON-RPC. |
| 73 | + |
| 74 | +## Adding a New Tool |
| 75 | + |
| 76 | +New tool integrations are added to `tools/src/aden_tools/tools/` and registered in `_register_unverified()` in `tools/src/aden_tools/tools/__init__.py`. Once reviewed and stabilized, they graduate to `_register_verified()`. |
| 77 | + |
| 78 | +See the [developer guide](developer-guide.md) for the full contribution workflow. |
0 commit comments