Generic API tool for calling any REST API via OpenAPI specs - search, explore, and dynamically use ANY API
Project description
hanzo-tools-api
Generic API tool for calling any REST API via OpenAPI specs.
Features
- Credential Management: Securely store and manage API keys with env var fallback
- OpenAPI Support: Parse OpenAPI 3.x specs to discover and call operations
- Auto-Detection: Automatically detects credentials from environment variables
- Multi-Provider: Built-in support for 30+ cloud providers
- Raw Requests: Make raw HTTP requests when you need more control
Installation
pip install hanzo-tools-api
Quick Start
Using Environment Variables (Recommended)
Set your API keys as environment variables:
export CLOUDFLARE_API_TOKEN=your-token
export GITHUB_TOKEN=ghp_xxx
export STRIPE_API_KEY=sk_xxx
The tool automatically detects these when you make calls.
Using the Tool
from hanzo_tools.api import APITool
tool = APITool()
# List available providers and their status
await tool.call(ctx, action="list")
# Configure a provider manually
await tool.call(ctx,
action="config",
provider="cloudflare",
api_key="your-key"
)
# Load OpenAPI spec for a provider
await tool.call(ctx, action="spec", provider="cloudflare")
# List available operations
await tool.call(ctx, action="ops", provider="cloudflare", search="zones")
# Call an operation
await tool.call(ctx,
action="call",
provider="cloudflare",
operation="listZones"
)
# Make a raw request
await tool.call(ctx,
action="raw",
provider="github",
method="GET",
path="/user/repos"
)
MCP Tool Usage
When registered with hanzo-mcp, use like:
api # List all providers
api --action config --provider github --api_key ghp_xxx
api --action ops --provider cloudflare --search zones
api --action call --provider cloudflare --operation listZones
api --action raw --provider github --method GET --path /user/repos
Supported Providers
Built-in configurations for:
| Provider | Env Variables |
|---|---|
| Cloudflare | CLOUDFLARE_API_TOKEN, CF_API_TOKEN |
| GitHub | GITHUB_TOKEN, GH_TOKEN |
| Stripe | STRIPE_API_KEY |
| OpenAI | OPENAI_API_KEY |
| Anthropic | ANTHROPIC_API_KEY |
| Vercel | VERCEL_TOKEN |
| DigitalOcean | DIGITALOCEAN_TOKEN, DO_TOKEN |
| Fly.io | FLY_API_TOKEN |
| Supabase | SUPABASE_API_KEY |
| AWS | AWS_ACCESS_KEY_ID |
| GCP | GOOGLE_API_KEY |
| Azure | AZURE_API_KEY |
| Slack | SLACK_TOKEN |
| Discord | DISCORD_TOKEN |
| ... and more |
API Reference
Actions
- list: Show all providers and their configuration status
- config: Set credentials for a provider
- delete: Remove credentials for a provider
- spec: Load/refresh OpenAPI spec for a provider
- ops: List available operations for a provider
- call: Call an API operation by operation ID
- raw: Make a raw HTTP request to any endpoint
Parameters
| Parameter | Type | Description |
|---|---|---|
action |
str | Action to perform (default: "list") |
provider |
str | Provider name (e.g., "cloudflare") |
api_key |
str | API key for config action |
api_secret |
str | API secret (if needed) |
account_id |
str | Account/org ID |
base_url |
str | Override base URL |
spec_url |
str | URL to OpenAPI spec |
operation |
str | Operation ID for call action |
params |
str | JSON parameters |
body |
str | JSON request body |
method |
str | HTTP method for raw action |
path |
str | URL path for raw action |
search |
str | Search filter for ops action |
tag |
str | Tag filter for ops action |
Credential Storage
Credentials are stored in ~/.hanzo/api/credentials.json with basic obfuscation.
For production use, consider using system keyring or a secrets manager.
OpenAPI specs are cached in ~/.hanzo/api/specs/.
Adding Custom Providers
You can add any provider by providing a base URL and API key:
from hanzo_tools.api import get_credential_manager
cred_manager = get_credential_manager()
cred_manager.set_credential(
provider="custom-api",
api_key="your-key",
base_url="https://api.custom.com/v1"
)
Then load a spec:
from hanzo_tools.api import get_client
client = await get_client(
"custom-api",
spec_url="https://api.custom.com/openapi.json"
)
Security Notes
- API keys are stored with basic base64 obfuscation (not encryption)
- Credentials file has restrictive permissions (0600)
- Environment variables are preferred for sensitive credentials
- Never commit credentials to version control
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hanzo_tools_api-0.2.0.tar.gz.
File metadata
- Download URL: hanzo_tools_api-0.2.0.tar.gz
- Upload date:
- Size: 102.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12f77dfe662cbd5e2e7c6c6d9ff52f00ac8c1428895aa0a9e6e2aeaec4bd9de8
|
|
| MD5 |
c1e17e587649185cd9ccd6b3adb81027
|
|
| BLAKE2b-256 |
b9785b929e7108eda67f2378d7fc2c0723b37429bd61ca1936fdc290eaf673b9
|
File details
Details for the file hanzo_tools_api-0.2.0-py3-none-any.whl.
File metadata
- Download URL: hanzo_tools_api-0.2.0-py3-none-any.whl
- Upload date:
- Size: 38.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
650a9dc96235d920d5f4b3fc7b48934b5c602fa3bf7c0e7e4e3463d69aaeb92e
|
|
| MD5 |
47c6a030b7537e238bb9221937b400d1
|
|
| BLAKE2b-256 |
d8fab2973e5181f28d8af9caaf3aa77f4cb0c000d8f8f6b61519e251da79b428
|