dominusnode-ironclaw 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dominusnode_ironclaw-1.0.0/LICENSE +21 -0
- dominusnode_ironclaw-1.0.0/PKG-INFO +134 -0
- dominusnode_ironclaw-1.0.0/README.md +122 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw/__init__.py +21 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw/mcp_config.py +78 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw/tools.py +1802 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw.egg-info/PKG-INFO +134 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw.egg-info/SOURCES.txt +12 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw.egg-info/dependency_links.txt +1 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw.egg-info/requires.txt +4 -0
- dominusnode_ironclaw-1.0.0/dominusnode_ironclaw.egg-info/top_level.txt +1 -0
- dominusnode_ironclaw-1.0.0/pyproject.toml +18 -0
- dominusnode_ironclaw-1.0.0/setup.cfg +4 -0
- dominusnode_ironclaw-1.0.0/tests/test_tools.py +1275 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dominus Node
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: dominusnode-ironclaw
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: DomiNode toolkit for IronClaw AI agent runtime -- 23 proxy, wallet, team, and payment management tools
|
|
5
|
+
License: MIT
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: httpx>=0.25.0
|
|
10
|
+
Provides-Extra: dev
|
|
11
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
12
|
+
|
|
13
|
+
# dominusnode-ironclaw
|
|
14
|
+
|
|
15
|
+
DomiNode toolkit for [IronClaw](https://github.com/nicekate/IronClaw), NEAR AI's open-source Rust-based AI agent runtime. Provides 23 tools for interacting with the DomiNode rotating proxy-as-a-service platform, plus MCP server configuration for IronClaw's native MCP bridge.
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install dominusnode-ironclaw
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or from source:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cd integrations/ironclaw
|
|
27
|
+
pip install -e ".[dev]"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
### Python Bridge Usage
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from dominusnode_ironclaw import DominusNodeToolkit
|
|
36
|
+
|
|
37
|
+
toolkit = DominusNodeToolkit(api_key="dn_live_your_key_here")
|
|
38
|
+
|
|
39
|
+
# Check wallet balance
|
|
40
|
+
balance = toolkit.check_balance()
|
|
41
|
+
print(balance) # JSON string
|
|
42
|
+
|
|
43
|
+
# Fetch a URL through the proxy network
|
|
44
|
+
result = toolkit.proxied_fetch(url="https://httpbin.org/ip", country="US")
|
|
45
|
+
print(result)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### IronClaw MCP Bridge
|
|
49
|
+
|
|
50
|
+
IronClaw supports MCP Protocol natively. Configure it to connect to the DomiNode MCP server:
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from dominusnode_ironclaw import DominusNodeToolkit
|
|
54
|
+
|
|
55
|
+
toolkit = DominusNodeToolkit(api_key="dn_live_your_key_here")
|
|
56
|
+
mcp_config = toolkit.get_mcp_config()
|
|
57
|
+
# Pass mcp_config to IronClaw's MCP bridge configuration
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Or generate MCP config directly:
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
from dominusnode_ironclaw.mcp_config import generate_mcp_config
|
|
64
|
+
|
|
65
|
+
config = generate_mcp_config(
|
|
66
|
+
base_url="https://api.dominusnode.com",
|
|
67
|
+
api_key="dn_live_your_key_here",
|
|
68
|
+
)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Tool Definitions
|
|
72
|
+
|
|
73
|
+
Get IronClaw-compatible tool definitions for registration:
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
toolkit = DominusNodeToolkit(api_key="dn_live_your_key_here")
|
|
77
|
+
tools = toolkit.get_tool_definitions()
|
|
78
|
+
|
|
79
|
+
for tool in tools:
|
|
80
|
+
print(f"{tool['name']}: {tool['description']}")
|
|
81
|
+
# Each tool has: name, description, parameters (JSON Schema), handler
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Configuration
|
|
85
|
+
|
|
86
|
+
| Parameter | Environment Variable | Default |
|
|
87
|
+
|-----------|---------------------|---------|
|
|
88
|
+
| `api_key` | `DOMINUSNODE_API_KEY` | (required) |
|
|
89
|
+
| `base_url` | `DOMINUSNODE_BASE_URL` | `https://api.dominusnode.com` |
|
|
90
|
+
| `proxy_host` | `DOMINUSNODE_PROXY_HOST` | `proxy.dominusnode.com` |
|
|
91
|
+
| `proxy_port` | `DOMINUSNODE_PROXY_PORT` | `8080` |
|
|
92
|
+
| `timeout` | - | `30.0` seconds |
|
|
93
|
+
|
|
94
|
+
## Tools (23)
|
|
95
|
+
|
|
96
|
+
| # | Tool | Description |
|
|
97
|
+
|---|------|-------------|
|
|
98
|
+
| 1 | `proxied_fetch` | Fetch a URL through DomiNode's rotating proxy network |
|
|
99
|
+
| 2 | `check_balance` | Check wallet balance |
|
|
100
|
+
| 3 | `check_usage` | Check proxy usage statistics |
|
|
101
|
+
| 4 | `get_proxy_config` | Get proxy configuration and geo-targeting options |
|
|
102
|
+
| 5 | `list_sessions` | List active proxy sessions |
|
|
103
|
+
| 6 | `create_agentic_wallet` | Create an agentic sub-wallet with a spending limit |
|
|
104
|
+
| 7 | `fund_agentic_wallet` | Fund an agentic wallet from the main wallet |
|
|
105
|
+
| 8 | `agentic_wallet_balance` | Check agentic wallet balance |
|
|
106
|
+
| 9 | `list_agentic_wallets` | List all agentic wallets |
|
|
107
|
+
| 10 | `agentic_transactions` | Get agentic wallet transaction history |
|
|
108
|
+
| 11 | `freeze_agentic_wallet` | Freeze an agentic wallet |
|
|
109
|
+
| 12 | `unfreeze_agentic_wallet` | Unfreeze an agentic wallet |
|
|
110
|
+
| 13 | `delete_agentic_wallet` | Delete an agentic wallet |
|
|
111
|
+
| 14 | `create_team` | Create a new team with a shared wallet |
|
|
112
|
+
| 15 | `list_teams` | List all teams the user belongs to |
|
|
113
|
+
| 16 | `team_details` | Get details for a specific team |
|
|
114
|
+
| 17 | `team_fund` | Fund a team's shared wallet |
|
|
115
|
+
| 18 | `team_create_key` | Create an API key for a team |
|
|
116
|
+
| 19 | `team_usage` | Get team usage/transaction history |
|
|
117
|
+
| 20 | `update_team` | Update team name and/or max_members |
|
|
118
|
+
| 21 | `update_team_member_role` | Update a team member's role |
|
|
119
|
+
| 22 | `x402_info` | Get x402 micropayment protocol information |
|
|
120
|
+
| 23 | `topup_paypal` | Create a PayPal wallet top-up order |
|
|
121
|
+
|
|
122
|
+
## Security
|
|
123
|
+
|
|
124
|
+
- **SSRF Prevention**: Private IP blocking, DNS rebinding protection, Teredo/6to4 IPv6 tunnel detection, hex/octal/decimal normalization, zone ID stripping, `.localhost`/`.local`/`.internal`/`.arpa` TLD blocking, embedded credential blocking
|
|
125
|
+
- **OFAC Compliance**: Blocks proxied requests to sanctioned countries (CU, IR, KP, RU, SY)
|
|
126
|
+
- **Credential Scrubbing**: All `dn_live_*`/`dn_test_*` patterns removed from error outputs
|
|
127
|
+
- **Prototype Pollution**: Recursive stripping of `__proto__`, `constructor`, `prototype` keys
|
|
128
|
+
- **HTTP Method Restriction**: Only GET/HEAD/OPTIONS allowed for proxied fetch
|
|
129
|
+
- **Response Caps**: 10 MB response limit, 4000 character body truncation
|
|
130
|
+
- **Redirect Disabled**: `follow_redirects=False` prevents open redirect abuse
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
MIT
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# dominusnode-ironclaw
|
|
2
|
+
|
|
3
|
+
DomiNode toolkit for [IronClaw](https://github.com/nicekate/IronClaw), NEAR AI's open-source Rust-based AI agent runtime. Provides 23 tools for interacting with the DomiNode rotating proxy-as-a-service platform, plus MCP server configuration for IronClaw's native MCP bridge.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install dominusnode-ironclaw
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or from source:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
cd integrations/ironclaw
|
|
15
|
+
pip install -e ".[dev]"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Quick Start
|
|
19
|
+
|
|
20
|
+
### Python Bridge Usage
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
from dominusnode_ironclaw import DominusNodeToolkit
|
|
24
|
+
|
|
25
|
+
toolkit = DominusNodeToolkit(api_key="dn_live_your_key_here")
|
|
26
|
+
|
|
27
|
+
# Check wallet balance
|
|
28
|
+
balance = toolkit.check_balance()
|
|
29
|
+
print(balance) # JSON string
|
|
30
|
+
|
|
31
|
+
# Fetch a URL through the proxy network
|
|
32
|
+
result = toolkit.proxied_fetch(url="https://httpbin.org/ip", country="US")
|
|
33
|
+
print(result)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### IronClaw MCP Bridge
|
|
37
|
+
|
|
38
|
+
IronClaw supports MCP Protocol natively. Configure it to connect to the DomiNode MCP server:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from dominusnode_ironclaw import DominusNodeToolkit
|
|
42
|
+
|
|
43
|
+
toolkit = DominusNodeToolkit(api_key="dn_live_your_key_here")
|
|
44
|
+
mcp_config = toolkit.get_mcp_config()
|
|
45
|
+
# Pass mcp_config to IronClaw's MCP bridge configuration
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Or generate MCP config directly:
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from dominusnode_ironclaw.mcp_config import generate_mcp_config
|
|
52
|
+
|
|
53
|
+
config = generate_mcp_config(
|
|
54
|
+
base_url="https://api.dominusnode.com",
|
|
55
|
+
api_key="dn_live_your_key_here",
|
|
56
|
+
)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Tool Definitions
|
|
60
|
+
|
|
61
|
+
Get IronClaw-compatible tool definitions for registration:
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
toolkit = DominusNodeToolkit(api_key="dn_live_your_key_here")
|
|
65
|
+
tools = toolkit.get_tool_definitions()
|
|
66
|
+
|
|
67
|
+
for tool in tools:
|
|
68
|
+
print(f"{tool['name']}: {tool['description']}")
|
|
69
|
+
# Each tool has: name, description, parameters (JSON Schema), handler
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Configuration
|
|
73
|
+
|
|
74
|
+
| Parameter | Environment Variable | Default |
|
|
75
|
+
|-----------|---------------------|---------|
|
|
76
|
+
| `api_key` | `DOMINUSNODE_API_KEY` | (required) |
|
|
77
|
+
| `base_url` | `DOMINUSNODE_BASE_URL` | `https://api.dominusnode.com` |
|
|
78
|
+
| `proxy_host` | `DOMINUSNODE_PROXY_HOST` | `proxy.dominusnode.com` |
|
|
79
|
+
| `proxy_port` | `DOMINUSNODE_PROXY_PORT` | `8080` |
|
|
80
|
+
| `timeout` | - | `30.0` seconds |
|
|
81
|
+
|
|
82
|
+
## Tools (23)
|
|
83
|
+
|
|
84
|
+
| # | Tool | Description |
|
|
85
|
+
|---|------|-------------|
|
|
86
|
+
| 1 | `proxied_fetch` | Fetch a URL through DomiNode's rotating proxy network |
|
|
87
|
+
| 2 | `check_balance` | Check wallet balance |
|
|
88
|
+
| 3 | `check_usage` | Check proxy usage statistics |
|
|
89
|
+
| 4 | `get_proxy_config` | Get proxy configuration and geo-targeting options |
|
|
90
|
+
| 5 | `list_sessions` | List active proxy sessions |
|
|
91
|
+
| 6 | `create_agentic_wallet` | Create an agentic sub-wallet with a spending limit |
|
|
92
|
+
| 7 | `fund_agentic_wallet` | Fund an agentic wallet from the main wallet |
|
|
93
|
+
| 8 | `agentic_wallet_balance` | Check agentic wallet balance |
|
|
94
|
+
| 9 | `list_agentic_wallets` | List all agentic wallets |
|
|
95
|
+
| 10 | `agentic_transactions` | Get agentic wallet transaction history |
|
|
96
|
+
| 11 | `freeze_agentic_wallet` | Freeze an agentic wallet |
|
|
97
|
+
| 12 | `unfreeze_agentic_wallet` | Unfreeze an agentic wallet |
|
|
98
|
+
| 13 | `delete_agentic_wallet` | Delete an agentic wallet |
|
|
99
|
+
| 14 | `create_team` | Create a new team with a shared wallet |
|
|
100
|
+
| 15 | `list_teams` | List all teams the user belongs to |
|
|
101
|
+
| 16 | `team_details` | Get details for a specific team |
|
|
102
|
+
| 17 | `team_fund` | Fund a team's shared wallet |
|
|
103
|
+
| 18 | `team_create_key` | Create an API key for a team |
|
|
104
|
+
| 19 | `team_usage` | Get team usage/transaction history |
|
|
105
|
+
| 20 | `update_team` | Update team name and/or max_members |
|
|
106
|
+
| 21 | `update_team_member_role` | Update a team member's role |
|
|
107
|
+
| 22 | `x402_info` | Get x402 micropayment protocol information |
|
|
108
|
+
| 23 | `topup_paypal` | Create a PayPal wallet top-up order |
|
|
109
|
+
|
|
110
|
+
## Security
|
|
111
|
+
|
|
112
|
+
- **SSRF Prevention**: Private IP blocking, DNS rebinding protection, Teredo/6to4 IPv6 tunnel detection, hex/octal/decimal normalization, zone ID stripping, `.localhost`/`.local`/`.internal`/`.arpa` TLD blocking, embedded credential blocking
|
|
113
|
+
- **OFAC Compliance**: Blocks proxied requests to sanctioned countries (CU, IR, KP, RU, SY)
|
|
114
|
+
- **Credential Scrubbing**: All `dn_live_*`/`dn_test_*` patterns removed from error outputs
|
|
115
|
+
- **Prototype Pollution**: Recursive stripping of `__proto__`, `constructor`, `prototype` keys
|
|
116
|
+
- **HTTP Method Restriction**: Only GET/HEAD/OPTIONS allowed for proxied fetch
|
|
117
|
+
- **Response Caps**: 10 MB response limit, 4000 character body truncation
|
|
118
|
+
- **Redirect Disabled**: `follow_redirects=False` prevents open redirect abuse
|
|
119
|
+
|
|
120
|
+
## License
|
|
121
|
+
|
|
122
|
+
MIT
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""DomiNode IronClaw AI agent integration.
|
|
2
|
+
|
|
3
|
+
Provides a Python toolkit for NEAR AI's IronClaw agent runtime, exposing
|
|
4
|
+
23 tools for interacting with the DomiNode rotating proxy-as-a-service
|
|
5
|
+
platform. Supports both direct Python bridge usage and MCP Protocol
|
|
6
|
+
configuration for IronClaw's native MCP bridge.
|
|
7
|
+
|
|
8
|
+
Example::
|
|
9
|
+
|
|
10
|
+
from dominusnode_ironclaw import DominusNodeToolkit
|
|
11
|
+
|
|
12
|
+
toolkit = DominusNodeToolkit(api_key="dn_live_...")
|
|
13
|
+
result = toolkit.check_balance() # JSON string
|
|
14
|
+
tools = toolkit.get_tool_definitions() # IronClaw-compatible dicts
|
|
15
|
+
mcp = toolkit.get_mcp_config() # MCP server connection config
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from dominusnode_ironclaw.tools import DominusNodeToolkit
|
|
19
|
+
|
|
20
|
+
__version__ = "1.0.0"
|
|
21
|
+
__all__ = ["DominusNodeToolkit", "__version__"]
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""MCP configuration helper for IronClaw's native MCP bridge.
|
|
2
|
+
|
|
3
|
+
Generates connection configuration that IronClaw agents can use to connect
|
|
4
|
+
to the DomiNode MCP server, which exposes 57 authenticated tools for proxy,
|
|
5
|
+
wallet, team, and payment management.
|
|
6
|
+
|
|
7
|
+
Example::
|
|
8
|
+
|
|
9
|
+
from dominusnode_ironclaw.mcp_config import generate_mcp_config
|
|
10
|
+
|
|
11
|
+
config = generate_mcp_config(
|
|
12
|
+
base_url="https://api.dominusnode.com",
|
|
13
|
+
api_key="dn_live_abc123",
|
|
14
|
+
)
|
|
15
|
+
# Pass config to IronClaw's MCP bridge
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from typing import Any, Dict
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def generate_mcp_config(
|
|
24
|
+
base_url: str = "https://api.dominusnode.com",
|
|
25
|
+
api_key: str = "",
|
|
26
|
+
) -> Dict[str, Any]:
|
|
27
|
+
"""Generate an IronClaw-compatible MCP server connection configuration.
|
|
28
|
+
|
|
29
|
+
This configuration tells IronClaw how to connect to the DomiNode MCP
|
|
30
|
+
server, which provides 57 authenticated tools for proxy, wallet, team,
|
|
31
|
+
and payment management.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
base_url: Base URL of the DomiNode API (default: production).
|
|
35
|
+
api_key: DomiNode API key (``dn_live_...`` or ``dn_test_...``).
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
A dictionary suitable for IronClaw's MCP bridge configuration.
|
|
39
|
+
"""
|
|
40
|
+
base = base_url.rstrip("/")
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
"server": {
|
|
44
|
+
"name": "dominusnode",
|
|
45
|
+
"description": "DomiNode rotating proxy-as-a-service MCP server",
|
|
46
|
+
"transport": {
|
|
47
|
+
"type": "streamable-http",
|
|
48
|
+
"url": f"{base}/mcp",
|
|
49
|
+
},
|
|
50
|
+
"auth": {
|
|
51
|
+
"type": "custom",
|
|
52
|
+
"headers": {
|
|
53
|
+
"X-API-Key": api_key,
|
|
54
|
+
"X-DominusNode-Agent": "mcp",
|
|
55
|
+
"User-Agent": "dominusnode-ironclaw/1.0.0",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
"capabilities": {
|
|
60
|
+
"tools": True,
|
|
61
|
+
"resources": False,
|
|
62
|
+
"prompts": False,
|
|
63
|
+
},
|
|
64
|
+
"metadata": {
|
|
65
|
+
"version": "1.0.0",
|
|
66
|
+
"tool_count": 57,
|
|
67
|
+
"categories": [
|
|
68
|
+
"proxy",
|
|
69
|
+
"wallet",
|
|
70
|
+
"agentic-wallet",
|
|
71
|
+
"team",
|
|
72
|
+
"payment",
|
|
73
|
+
"usage",
|
|
74
|
+
"session",
|
|
75
|
+
"x402",
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
}
|