traia-iatp 0.1.59__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.
Potentially problematic release.
This version of traia-iatp might be problematic. Click here for more details.
- traia_iatp-0.1.59/LICENSE +21 -0
- traia_iatp-0.1.59/MANIFEST.in +34 -0
- traia_iatp-0.1.59/PKG-INFO +320 -0
- traia_iatp-0.1.59/README.md +269 -0
- traia_iatp-0.1.59/pyproject.toml +85 -0
- traia_iatp-0.1.59/setup.cfg +4 -0
- traia_iatp-0.1.59/src/traia_iatp/README.md +368 -0
- traia_iatp-0.1.59/src/traia_iatp/__init__.py +127 -0
- traia_iatp-0.1.59/src/traia_iatp/cli/__init__.py +5 -0
- traia_iatp-0.1.59/src/traia_iatp/cli/main.py +567 -0
- traia_iatp-0.1.59/src/traia_iatp/client/__init__.py +35 -0
- traia_iatp-0.1.59/src/traia_iatp/client/a2a_client.py +274 -0
- traia_iatp-0.1.59/src/traia_iatp/client/crewai_a2a_tools.py +355 -0
- traia_iatp-0.1.59/src/traia_iatp/client/d402_a2a_client.py +348 -0
- traia_iatp-0.1.59/src/traia_iatp/client/grpc_a2a_tools.py +349 -0
- traia_iatp-0.1.59/src/traia_iatp/client/root_path_a2a_client.py +1 -0
- traia_iatp-0.1.59/src/traia_iatp/contracts/__init__.py +11 -0
- traia_iatp-0.1.59/src/traia_iatp/contracts/data/abis/contract-abis-localhost.json +4091 -0
- traia_iatp-0.1.59/src/traia_iatp/contracts/data/abis/contract-abis-sepolia.json +4481 -0
- traia_iatp-0.1.59/src/traia_iatp/contracts/data/addresses/contract-addresses.json +17 -0
- traia_iatp-0.1.59/src/traia_iatp/contracts/data/addresses/contract-proxies.json +12 -0
- traia_iatp-0.1.59/src/traia_iatp/contracts/iatp_contracts_config.py +263 -0
- traia_iatp-0.1.59/src/traia_iatp/contracts/wallet_creator.py +369 -0
- traia_iatp-0.1.59/src/traia_iatp/core/__init__.py +43 -0
- traia_iatp-0.1.59/src/traia_iatp/core/models.py +175 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/MIDDLEWARE_ARCHITECTURE.md +205 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/PRICE_BUILDER_USAGE.md +249 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/README.md +489 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/__init__.py +54 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/asgi_wrapper.py +469 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/chains.py +102 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/client.py +150 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/clients/__init__.py +7 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/clients/base.py +218 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/clients/httpx.py +266 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/common.py +114 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/encoding.py +28 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/examples/client_example.py +197 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/examples/server_example.py +171 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/facilitator.py +481 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/mcp_middleware.py +296 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/models.py +116 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/networks.py +98 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/path.py +43 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/payment_introspection.py +126 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/payment_signing.py +183 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/price_builder.py +164 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/servers/__init__.py +61 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/servers/base.py +139 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/servers/example_general_server.py +140 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/servers/fastapi.py +253 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/servers/mcp.py +304 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/servers/starlette.py +878 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/starlette_middleware.py +526 -0
- traia_iatp-0.1.59/src/traia_iatp/d402/types.py +300 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/D402_MCP_ADAPTER_FLOW.md +357 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/__init__.py +18 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/client.py +201 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/d402_mcp_tool_adapter.py +482 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/mcp_agent_template.py +487 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/Dockerfile.j2 +79 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/README.md.j2 +310 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/cursor-rules.md.j2 +520 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/deployment_params.json.j2 +20 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/docker-compose.yml.j2 +33 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/dockerignore.j2 +47 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/env.example.j2 +60 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/gitignore.j2 +77 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/mcp_health_check.py.j2 +150 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/pyproject.toml.j2 +32 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/pyrightconfig.json.j2 +22 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/run_local_docker.sh.j2 +404 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/templates/server.py.j2 +216 -0
- traia_iatp-0.1.59/src/traia_iatp/mcp/traia_mcp_adapter.py +543 -0
- traia_iatp-0.1.59/src/traia_iatp/preview_diagrams.html +181 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/__init__.py +61 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/atlas_search_indexes.json +280 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/embeddings.py +298 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/iatp_search_api.py +955 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/mongodb_registry.py +938 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/ATLAS_SEARCH_INDEXES.md +252 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/ATLAS_SEARCH_SETUP.md +134 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/AUTHENTICATION_UPDATE.md +124 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/EMBEDDINGS_SETUP.md +172 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/IATP_SEARCH_API_GUIDE.md +257 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/MONGODB_X509_AUTH.md +208 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/README.md +251 -0
- traia_iatp-0.1.59/src/traia_iatp/registry/readmes/REFACTORING_SUMMARY.md +191 -0
- traia_iatp-0.1.59/src/traia_iatp/scripts/__init__.py +2 -0
- traia_iatp-0.1.59/src/traia_iatp/scripts/create_wallet.py +244 -0
- traia_iatp-0.1.59/src/traia_iatp/server/__init__.py +15 -0
- traia_iatp-0.1.59/src/traia_iatp/server/a2a_server.py +230 -0
- traia_iatp-0.1.59/src/traia_iatp/server/example_template_usage.py +72 -0
- traia_iatp-0.1.59/src/traia_iatp/server/iatp_server_agent_generator.py +237 -0
- traia_iatp-0.1.59/src/traia_iatp/server/iatp_server_template_generator.py +258 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/.dockerignore.j2 +48 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/Dockerfile.j2 +71 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/README.md +137 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/README.md.j2 +425 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/__init__.py +1 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/__main__.py.j2 +814 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/agent.py.j2 +94 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/agent_config.json.j2 +22 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/agent_executor.py.j2 +298 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/docker-compose.yml.j2 +23 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/env.example.j2 +98 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/gitignore.j2 +85 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/grpc_server.py.j2 +218 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/pyproject.toml.j2 +78 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/run_local_docker.sh.j2 +235 -0
- traia_iatp-0.1.59/src/traia_iatp/server/templates/server.py.j2 +377 -0
- traia_iatp-0.1.59/src/traia_iatp/special_agencies/__init__.py +4 -0
- traia_iatp-0.1.59/src/traia_iatp/special_agencies/registry_search_agency.py +392 -0
- traia_iatp-0.1.59/src/traia_iatp/utils/__init__.py +10 -0
- traia_iatp-0.1.59/src/traia_iatp/utils/docker_utils.py +251 -0
- traia_iatp-0.1.59/src/traia_iatp/utils/general.py +64 -0
- traia_iatp-0.1.59/src/traia_iatp/utils/iatp_utils.py +126 -0
- traia_iatp-0.1.59/src/traia_iatp.egg-info/PKG-INFO +320 -0
- traia_iatp-0.1.59/src/traia_iatp.egg-info/SOURCES.txt +121 -0
- traia_iatp-0.1.59/src/traia_iatp.egg-info/dependency_links.txt +1 -0
- traia_iatp-0.1.59/src/traia_iatp.egg-info/entry_points.txt +2 -0
- traia_iatp-0.1.59/src/traia_iatp.egg-info/requires.txt +39 -0
- traia_iatp-0.1.59/src/traia_iatp.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Traia.io
|
|
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,34 @@
|
|
|
1
|
+
# Include package data
|
|
2
|
+
include README.md
|
|
3
|
+
include LICENSE
|
|
4
|
+
|
|
5
|
+
# Include template files
|
|
6
|
+
recursive-include src/traia_iatp/mcp/templates *.j2
|
|
7
|
+
recursive-include src/traia_iatp/server/templates *.j2 *.md *.py
|
|
8
|
+
|
|
9
|
+
# Include contract data
|
|
10
|
+
recursive-include src/traia_iatp/contracts/data *.json
|
|
11
|
+
|
|
12
|
+
# Include registry data
|
|
13
|
+
recursive-include src/traia_iatp/registry/readmes *.md
|
|
14
|
+
include src/traia_iatp/registry/*.json
|
|
15
|
+
|
|
16
|
+
# Include documentation
|
|
17
|
+
recursive-include src/traia_iatp *.md *.html
|
|
18
|
+
|
|
19
|
+
# Exclude examples (not part of the package)
|
|
20
|
+
prune examples
|
|
21
|
+
recursive-exclude examples *
|
|
22
|
+
|
|
23
|
+
# Exclude documentation (not part of the package)
|
|
24
|
+
prune docs
|
|
25
|
+
recursive-exclude docs *
|
|
26
|
+
|
|
27
|
+
# Exclude tests
|
|
28
|
+
prune tests
|
|
29
|
+
recursive-exclude tests *
|
|
30
|
+
|
|
31
|
+
# Exclude build artifacts
|
|
32
|
+
global-exclude __pycache__
|
|
33
|
+
global-exclude *.py[co]
|
|
34
|
+
global-exclude .DS_Store
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: traia-iatp
|
|
3
|
+
Version: 0.1.59
|
|
4
|
+
Summary: Inter-Agent Transfer Protocol (IATP) - Enable AI Agents to utilize other AI Agents as tools
|
|
5
|
+
Project-URL: Documentation, https://docs.d402.net
|
|
6
|
+
Project-URL: Source, https://github.com/Traia-IO/IATP
|
|
7
|
+
Keywords: crewai,iatp,agent-to-agent,a2a,mcp,web3,cryptocurrency,tools
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.12
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: a2a-sdk>=0.3.19
|
|
14
|
+
Requires-Dist: aiohttp>=3.12.13
|
|
15
|
+
Requires-Dist: anyio>=4.0.0
|
|
16
|
+
Requires-Dist: crewai>=0.203.1
|
|
17
|
+
Requires-Dist: crewai-tools[mcp]>=0.76.0
|
|
18
|
+
Requires-Dist: docker>=7.1.0
|
|
19
|
+
Requires-Dist: fastapi>=0.119.0
|
|
20
|
+
Requires-Dist: httpx[http2]>=0.28.1
|
|
21
|
+
Requires-Dist: jinja2>=3.1.6
|
|
22
|
+
Requires-Dist: mcp>=1.1.2
|
|
23
|
+
Requires-Dist: nest-asyncio>=1.6.0
|
|
24
|
+
Requires-Dist: openai>=1.109.1
|
|
25
|
+
Requires-Dist: pydantic>=2.12.2
|
|
26
|
+
Requires-Dist: pymongo[aws]>=4.13.0
|
|
27
|
+
Requires-Dist: python-dotenv>=1.1.1
|
|
28
|
+
Requires-Dist: pytz>=2025.2
|
|
29
|
+
Requires-Dist: requests>=2.32.5
|
|
30
|
+
Requires-Dist: rich>=14.2.0
|
|
31
|
+
Requires-Dist: starlette>=0.45.0
|
|
32
|
+
Requires-Dist: tomli>=2.0.0
|
|
33
|
+
Requires-Dist: typer>=0.19.2
|
|
34
|
+
Requires-Dist: uvicorn>=0.37.0
|
|
35
|
+
Requires-Dist: agentops>=0.4.21
|
|
36
|
+
Requires-Dist: dnspython==2.6.1
|
|
37
|
+
Requires-Dist: eth-account>=0.11.0
|
|
38
|
+
Requires-Dist: web3>=6.15.0
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: pytest>=8.4.2; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
42
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
43
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
44
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
45
|
+
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
46
|
+
Provides-Extra: publish
|
|
47
|
+
Requires-Dist: wheel; extra == "publish"
|
|
48
|
+
Requires-Dist: twine; extra == "publish"
|
|
49
|
+
Requires-Dist: build; extra == "publish"
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
# IATP-D402: Inter-Agent Transfer Protocol with Payment Support
|
|
53
|
+
|
|
54
|
+
[](https://badge.fury.io/py/traia-iatp)
|
|
55
|
+
[](https://www.python.org/downloads/)
|
|
56
|
+
[](https://opensource.org/licenses/MIT)
|
|
57
|
+
[](https://docs.d402.net)
|
|
58
|
+
|
|
59
|
+
**IATP-D402** enables AI agents and APIs to charge for their services using the D402 payment protocol (HTTP 402 Payment Required). Build payment-enabled:
|
|
60
|
+
- 🌐 APIs and web servers
|
|
61
|
+
- 🔧 MCP (Model Context Protocol) servers
|
|
62
|
+
- 🤖 A2A utility agents
|
|
63
|
+
- 🤝 CrewAI tools and agents
|
|
64
|
+
|
|
65
|
+
## 🚀 Quick Start
|
|
66
|
+
|
|
67
|
+
### Installation
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pip install traia-iatp
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Add D402 to Your FastAPI Server (5 lines)
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from fastapi import FastAPI
|
|
77
|
+
from traia_iatp.d402.servers.fastapi import D402FastAPIMiddleware
|
|
78
|
+
from traia_iatp.d402.price_builder import D402PriceBuilder
|
|
79
|
+
|
|
80
|
+
app = FastAPI()
|
|
81
|
+
|
|
82
|
+
# Add D402 (5 lines)
|
|
83
|
+
price_builder = D402PriceBuilder(network="sepolia")
|
|
84
|
+
d402 = D402FastAPIMiddleware(server_address="0x...", facilitator_url="https://test-facilitator.d402.net")
|
|
85
|
+
price = price_builder.create_price(0.01) # $0.01 USD
|
|
86
|
+
d402.register_endpoint("/api/analyze", price_wei=price.amount, token_address=price.asset.address, network="sepolia", description="Analysis")
|
|
87
|
+
d402.add_to_app(app)
|
|
88
|
+
|
|
89
|
+
# Your endpoint (unchanged!)
|
|
90
|
+
@app.post("/api/analyze")
|
|
91
|
+
async def analyze(request: Request):
|
|
92
|
+
return {"result": "done"}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Call D402-Protected Servers (2 lines)
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
from traia_iatp.d402.clients.httpx import d402HttpxClient
|
|
99
|
+
from eth_account import Account
|
|
100
|
+
|
|
101
|
+
async with d402HttpxClient(
|
|
102
|
+
operator_account=Account.from_key("0x..."),
|
|
103
|
+
wallet_address="0x...",
|
|
104
|
+
max_value=100000,
|
|
105
|
+
base_url="http://localhost:8000"
|
|
106
|
+
) as client:
|
|
107
|
+
# Payment automatic!
|
|
108
|
+
response = await client.post("/api/analyze", json={"text": "test"})
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## 📚 Documentation
|
|
112
|
+
|
|
113
|
+
**Full documentation**: [docs.d402.net](https://docs.d402.net)
|
|
114
|
+
|
|
115
|
+
### Quick Links
|
|
116
|
+
|
|
117
|
+
- **[Complete Examples](docs/examples/overview.md)** - Step-by-step integration examples (0-6)
|
|
118
|
+
- **[Server Integration](docs/d402-servers/overview.md)** - Add D402 to existing servers
|
|
119
|
+
- **[Client Integration](docs/d402-clients/overview.md)** - Call D402-protected APIs
|
|
120
|
+
- **[MCP Servers](docs/mcp-servers/overview.md)** - Build payment-enabled MCP servers
|
|
121
|
+
- **[Utility Agents](docs/utility-agents/overview.md)** - Build A2A utility agents
|
|
122
|
+
- **[CrewAI Integration](docs/crewai-integration/overview.md)** - Use D402 tools in CrewAI
|
|
123
|
+
|
|
124
|
+
### Complete Integration Examples
|
|
125
|
+
|
|
126
|
+
The [examples section](docs/examples/overview.md) provides complete, working code for:
|
|
127
|
+
|
|
128
|
+
0. **[Wallet Creation & Funding](docs/examples/0-wallet-creation-funding.md)** - Setup wallets, get testnet USDC
|
|
129
|
+
1. **[Existing Server → D402](docs/examples/1-server-to-d402.md)** - Add payments to your API (before/after)
|
|
130
|
+
2. **[Calling D402 Servers](docs/examples/2-calling-d402-servers.md)** - Build payment-enabled client
|
|
131
|
+
3. **[API → MCP Server](docs/examples/3-api-to-mcp-server.md)** - Convert REST to MCP tools
|
|
132
|
+
4. **[CrewAI + MCP](docs/examples/4-crewai-using-mcp.md)** - Use MCP server in crews
|
|
133
|
+
5. **[MCP → Utility Agent](docs/examples/5-mcp-to-utility-agent.md)** - Wrap MCP as A2A agent
|
|
134
|
+
6. **[CrewAI + Utility Agent](docs/examples/6-crewai-using-utility-agent.md)** - Use agents in crews
|
|
135
|
+
|
|
136
|
+
## 🌟 Key Features
|
|
137
|
+
|
|
138
|
+
### D402 Payment Protocol
|
|
139
|
+
- ✅ **HTTP 402 Payment Required** - Standard payment protocol
|
|
140
|
+
- ✅ **EIP-712 Signatures** - Secure payment authorization
|
|
141
|
+
- ✅ **On-Chain Settlement** - Smart contract-based settlements
|
|
142
|
+
- ✅ **Hosted Facilitators** - No infrastructure setup required
|
|
143
|
+
|
|
144
|
+
### Server Integration
|
|
145
|
+
- ✅ **FastAPI** - `D402FastAPIMiddleware`
|
|
146
|
+
- ✅ **Starlette** - `D402PaymentMiddleware`
|
|
147
|
+
- ✅ **Any ASGI Framework** - `D402ASGIWrapper` (Flask, Django, Quart, etc.)
|
|
148
|
+
- ✅ **5-line integration** - Minimal code changes
|
|
149
|
+
|
|
150
|
+
### Client Integration
|
|
151
|
+
- ✅ **HTTPX (Async)** - `d402HttpxClient` with automatic payment
|
|
152
|
+
- ✅ **Requests (Sync)** - Wrapper for synchronous apps
|
|
153
|
+
- ✅ **2-line integration** - Just make requests normally
|
|
154
|
+
|
|
155
|
+
### MCP & A2A
|
|
156
|
+
- ✅ **MCP Servers** - Payment-enabled tool servers
|
|
157
|
+
- ✅ **Utility Agents** - A2A protocol with D402
|
|
158
|
+
- ✅ **CrewAI Integration** - A2AToolkit for paid tools
|
|
159
|
+
- ✅ **Template Generation** - Auto-generate server code
|
|
160
|
+
|
|
161
|
+
## 🔧 What's in the Package
|
|
162
|
+
|
|
163
|
+
### Core Components (IN pip package)
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
src/traia_iatp/
|
|
167
|
+
├── d402/ # D402 payment protocol
|
|
168
|
+
│ ├── servers/ # Server middleware (FastAPI, Starlette, MCP)
|
|
169
|
+
│ ├── clients/ # Client libraries (HTTPX, base client)
|
|
170
|
+
│ ├── asgi_wrapper.py # Universal ASGI wrapper
|
|
171
|
+
│ ├── price_builder.py # USD-based pricing
|
|
172
|
+
│ └── facilitator.py # Facilitator client
|
|
173
|
+
│
|
|
174
|
+
├── mcp/ # MCP server templates & tools
|
|
175
|
+
├── server/ # Utility agent templates
|
|
176
|
+
├── client/ # A2A client & CrewAI tools
|
|
177
|
+
├── contracts/ # Smart contract integration
|
|
178
|
+
└── registry/ # Agent discovery & search
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Examples (NOT in pip package)
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
examples/ # Integration examples
|
|
185
|
+
├── servers/ # FastAPI, Starlette, ASGI examples
|
|
186
|
+
└── clients/ # HTTPX, Requests examples
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Documentation (NOT in pip package)
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
docs/ # GitBook documentation
|
|
193
|
+
├── getting-started/ # Installation, quick start
|
|
194
|
+
├── examples/ # Complete integration examples (0-6)
|
|
195
|
+
├── wallet-setup/ # Wallet creation & CLI
|
|
196
|
+
├── d402-servers/ # Server integration guides
|
|
197
|
+
├── d402-clients/ # Client integration guides
|
|
198
|
+
├── mcp-servers/ # MCP server guides
|
|
199
|
+
├── utility-agents/ # Utility agent guides
|
|
200
|
+
└── crewai-integration/ # CrewAI guides
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 🏗 Architecture
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
┌────────────────────────────────────────────────────────────┐
|
|
207
|
+
│ Your Application │
|
|
208
|
+
│ (API / MCP Server / Utility Agent / CrewAI Crew) │
|
|
209
|
+
└────────────────────────────────────────────────────────────┘
|
|
210
|
+
│
|
|
211
|
+
▼
|
|
212
|
+
┌────────────────────────────────────────────────────────────┐
|
|
213
|
+
│ IATP-D402 Framework │
|
|
214
|
+
│ • Server Middleware • Client Libraries • Templates │
|
|
215
|
+
└────────────────────────────────────────────────────────────┘
|
|
216
|
+
│
|
|
217
|
+
▼
|
|
218
|
+
┌────────────────────────────────────────────────────────────┐
|
|
219
|
+
│ D402 Payment Protocol │
|
|
220
|
+
│ • HTTP 402 • EIP-712 Signing • Facilitator Service │
|
|
221
|
+
└────────────────────────────────────────────────────────────┘
|
|
222
|
+
│
|
|
223
|
+
▼
|
|
224
|
+
┌────────────────────────────────────────────────────────────┐
|
|
225
|
+
│ Smart Contracts (On-Chain) │
|
|
226
|
+
│ • IATPWallet • Settlement • Tokens │
|
|
227
|
+
└────────────────────────────────────────────────────────────┘
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## 🌐 Facilitators (No Setup Required)
|
|
231
|
+
|
|
232
|
+
**You don't need to run your own facilitator!**
|
|
233
|
+
|
|
234
|
+
- **All Testnets**: `https://test-facilitator.d402.net` (currently: Sepolia)
|
|
235
|
+
- **All Mainnets**: `https://facilitator.d402.net` (currently: Arbitrum)
|
|
236
|
+
|
|
237
|
+
See [Facilitator URLs](docs/getting-started/facilitators.md) for details.
|
|
238
|
+
|
|
239
|
+
## 🔐 Wallet Creation
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# Create IATP wallet (owner creates their own wallet)
|
|
243
|
+
traia-iatp create-iatp-wallet \
|
|
244
|
+
--owner-key 0x... \
|
|
245
|
+
--create-operator \
|
|
246
|
+
--wallet-name "My Server" \
|
|
247
|
+
--wallet-type MCP_SERVER \
|
|
248
|
+
--network sepolia
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
See [Creating Wallets](docs/wallet-setup/creating-wallets.md) for complete guide.
|
|
252
|
+
|
|
253
|
+
## 📦 Use Cases
|
|
254
|
+
|
|
255
|
+
### 1. Monetize Your API
|
|
256
|
+
|
|
257
|
+
```python
|
|
258
|
+
# Add payment to any endpoint
|
|
259
|
+
d402.register_endpoint("/api/analyze", price_usd=0.01)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 2. Build Payment-Enabled MCP Servers
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
@mcp.tool()
|
|
266
|
+
@require_payment_for_tool(price=price_builder.create_price(0.01))
|
|
267
|
+
def analyze(text: str) -> dict:
|
|
268
|
+
return analyze_sentiment(text)
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### 3. Use Paid Tools in CrewAI
|
|
272
|
+
|
|
273
|
+
```python
|
|
274
|
+
toolkit = A2AToolkit.create_from_endpoint(
|
|
275
|
+
endpoint="http://localhost:9001",
|
|
276
|
+
payment_private_key="0x...",
|
|
277
|
+
wallet_address="0x...",
|
|
278
|
+
max_payment_usd=1.0
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
agent = Agent(role="Analyst", tools=toolkit.tools)
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## 🛠 CLI Commands
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# Create IATP wallet
|
|
288
|
+
traia-iatp create-iatp-wallet --owner-key 0x... --create-operator
|
|
289
|
+
|
|
290
|
+
# Create utility agency from MCP server
|
|
291
|
+
traia-iatp create-agency --name "My Agent" --mcp-name "Trading MCP"
|
|
292
|
+
|
|
293
|
+
# List available agencies
|
|
294
|
+
traia-iatp list-agencies
|
|
295
|
+
|
|
296
|
+
# Search for tools
|
|
297
|
+
traia-iatp find-tools --query "sentiment analysis"
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## 🔗 Links
|
|
301
|
+
|
|
302
|
+
- **Documentation**: [docs.d402.net](https://docs.d402.net)
|
|
303
|
+
- **PyPI**: [pypi.org/project/traia-iatp](https://pypi.org/project/traia-iatp)
|
|
304
|
+
- **GitHub**: [github.com/Traia-IO/IATP](https://github.com/Traia-IO/IATP)
|
|
305
|
+
- **Examples**: [docs/examples/](docs/examples/overview.md)
|
|
306
|
+
|
|
307
|
+
## 📄 License
|
|
308
|
+
|
|
309
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
310
|
+
|
|
311
|
+
## 🤝 Support
|
|
312
|
+
|
|
313
|
+
- 📖 **Documentation**: [docs.d402.net](https://docs.d402.net)
|
|
314
|
+
- 🐛 **Issues**: [GitHub Issues](https://github.com/Traia-IO/IATP/issues)
|
|
315
|
+
- 💬 **Website**: [traia.io](https://traia.io)
|
|
316
|
+
- 📧 **Email**: support@traia.io
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
**Made with ❤️ by the Traia Team**
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# IATP-D402: Inter-Agent Transfer Protocol with Payment Support
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/py/traia-iatp)
|
|
4
|
+
[](https://www.python.org/downloads/)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](https://docs.d402.net)
|
|
7
|
+
|
|
8
|
+
**IATP-D402** enables AI agents and APIs to charge for their services using the D402 payment protocol (HTTP 402 Payment Required). Build payment-enabled:
|
|
9
|
+
- 🌐 APIs and web servers
|
|
10
|
+
- 🔧 MCP (Model Context Protocol) servers
|
|
11
|
+
- 🤖 A2A utility agents
|
|
12
|
+
- 🤝 CrewAI tools and agents
|
|
13
|
+
|
|
14
|
+
## 🚀 Quick Start
|
|
15
|
+
|
|
16
|
+
### Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install traia-iatp
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Add D402 to Your FastAPI Server (5 lines)
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
from fastapi import FastAPI
|
|
26
|
+
from traia_iatp.d402.servers.fastapi import D402FastAPIMiddleware
|
|
27
|
+
from traia_iatp.d402.price_builder import D402PriceBuilder
|
|
28
|
+
|
|
29
|
+
app = FastAPI()
|
|
30
|
+
|
|
31
|
+
# Add D402 (5 lines)
|
|
32
|
+
price_builder = D402PriceBuilder(network="sepolia")
|
|
33
|
+
d402 = D402FastAPIMiddleware(server_address="0x...", facilitator_url="https://test-facilitator.d402.net")
|
|
34
|
+
price = price_builder.create_price(0.01) # $0.01 USD
|
|
35
|
+
d402.register_endpoint("/api/analyze", price_wei=price.amount, token_address=price.asset.address, network="sepolia", description="Analysis")
|
|
36
|
+
d402.add_to_app(app)
|
|
37
|
+
|
|
38
|
+
# Your endpoint (unchanged!)
|
|
39
|
+
@app.post("/api/analyze")
|
|
40
|
+
async def analyze(request: Request):
|
|
41
|
+
return {"result": "done"}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Call D402-Protected Servers (2 lines)
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from traia_iatp.d402.clients.httpx import d402HttpxClient
|
|
48
|
+
from eth_account import Account
|
|
49
|
+
|
|
50
|
+
async with d402HttpxClient(
|
|
51
|
+
operator_account=Account.from_key("0x..."),
|
|
52
|
+
wallet_address="0x...",
|
|
53
|
+
max_value=100000,
|
|
54
|
+
base_url="http://localhost:8000"
|
|
55
|
+
) as client:
|
|
56
|
+
# Payment automatic!
|
|
57
|
+
response = await client.post("/api/analyze", json={"text": "test"})
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 📚 Documentation
|
|
61
|
+
|
|
62
|
+
**Full documentation**: [docs.d402.net](https://docs.d402.net)
|
|
63
|
+
|
|
64
|
+
### Quick Links
|
|
65
|
+
|
|
66
|
+
- **[Complete Examples](docs/examples/overview.md)** - Step-by-step integration examples (0-6)
|
|
67
|
+
- **[Server Integration](docs/d402-servers/overview.md)** - Add D402 to existing servers
|
|
68
|
+
- **[Client Integration](docs/d402-clients/overview.md)** - Call D402-protected APIs
|
|
69
|
+
- **[MCP Servers](docs/mcp-servers/overview.md)** - Build payment-enabled MCP servers
|
|
70
|
+
- **[Utility Agents](docs/utility-agents/overview.md)** - Build A2A utility agents
|
|
71
|
+
- **[CrewAI Integration](docs/crewai-integration/overview.md)** - Use D402 tools in CrewAI
|
|
72
|
+
|
|
73
|
+
### Complete Integration Examples
|
|
74
|
+
|
|
75
|
+
The [examples section](docs/examples/overview.md) provides complete, working code for:
|
|
76
|
+
|
|
77
|
+
0. **[Wallet Creation & Funding](docs/examples/0-wallet-creation-funding.md)** - Setup wallets, get testnet USDC
|
|
78
|
+
1. **[Existing Server → D402](docs/examples/1-server-to-d402.md)** - Add payments to your API (before/after)
|
|
79
|
+
2. **[Calling D402 Servers](docs/examples/2-calling-d402-servers.md)** - Build payment-enabled client
|
|
80
|
+
3. **[API → MCP Server](docs/examples/3-api-to-mcp-server.md)** - Convert REST to MCP tools
|
|
81
|
+
4. **[CrewAI + MCP](docs/examples/4-crewai-using-mcp.md)** - Use MCP server in crews
|
|
82
|
+
5. **[MCP → Utility Agent](docs/examples/5-mcp-to-utility-agent.md)** - Wrap MCP as A2A agent
|
|
83
|
+
6. **[CrewAI + Utility Agent](docs/examples/6-crewai-using-utility-agent.md)** - Use agents in crews
|
|
84
|
+
|
|
85
|
+
## 🌟 Key Features
|
|
86
|
+
|
|
87
|
+
### D402 Payment Protocol
|
|
88
|
+
- ✅ **HTTP 402 Payment Required** - Standard payment protocol
|
|
89
|
+
- ✅ **EIP-712 Signatures** - Secure payment authorization
|
|
90
|
+
- ✅ **On-Chain Settlement** - Smart contract-based settlements
|
|
91
|
+
- ✅ **Hosted Facilitators** - No infrastructure setup required
|
|
92
|
+
|
|
93
|
+
### Server Integration
|
|
94
|
+
- ✅ **FastAPI** - `D402FastAPIMiddleware`
|
|
95
|
+
- ✅ **Starlette** - `D402PaymentMiddleware`
|
|
96
|
+
- ✅ **Any ASGI Framework** - `D402ASGIWrapper` (Flask, Django, Quart, etc.)
|
|
97
|
+
- ✅ **5-line integration** - Minimal code changes
|
|
98
|
+
|
|
99
|
+
### Client Integration
|
|
100
|
+
- ✅ **HTTPX (Async)** - `d402HttpxClient` with automatic payment
|
|
101
|
+
- ✅ **Requests (Sync)** - Wrapper for synchronous apps
|
|
102
|
+
- ✅ **2-line integration** - Just make requests normally
|
|
103
|
+
|
|
104
|
+
### MCP & A2A
|
|
105
|
+
- ✅ **MCP Servers** - Payment-enabled tool servers
|
|
106
|
+
- ✅ **Utility Agents** - A2A protocol with D402
|
|
107
|
+
- ✅ **CrewAI Integration** - A2AToolkit for paid tools
|
|
108
|
+
- ✅ **Template Generation** - Auto-generate server code
|
|
109
|
+
|
|
110
|
+
## 🔧 What's in the Package
|
|
111
|
+
|
|
112
|
+
### Core Components (IN pip package)
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
src/traia_iatp/
|
|
116
|
+
├── d402/ # D402 payment protocol
|
|
117
|
+
│ ├── servers/ # Server middleware (FastAPI, Starlette, MCP)
|
|
118
|
+
│ ├── clients/ # Client libraries (HTTPX, base client)
|
|
119
|
+
│ ├── asgi_wrapper.py # Universal ASGI wrapper
|
|
120
|
+
│ ├── price_builder.py # USD-based pricing
|
|
121
|
+
│ └── facilitator.py # Facilitator client
|
|
122
|
+
│
|
|
123
|
+
├── mcp/ # MCP server templates & tools
|
|
124
|
+
├── server/ # Utility agent templates
|
|
125
|
+
├── client/ # A2A client & CrewAI tools
|
|
126
|
+
├── contracts/ # Smart contract integration
|
|
127
|
+
└── registry/ # Agent discovery & search
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Examples (NOT in pip package)
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
examples/ # Integration examples
|
|
134
|
+
├── servers/ # FastAPI, Starlette, ASGI examples
|
|
135
|
+
└── clients/ # HTTPX, Requests examples
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Documentation (NOT in pip package)
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
docs/ # GitBook documentation
|
|
142
|
+
├── getting-started/ # Installation, quick start
|
|
143
|
+
├── examples/ # Complete integration examples (0-6)
|
|
144
|
+
├── wallet-setup/ # Wallet creation & CLI
|
|
145
|
+
├── d402-servers/ # Server integration guides
|
|
146
|
+
├── d402-clients/ # Client integration guides
|
|
147
|
+
├── mcp-servers/ # MCP server guides
|
|
148
|
+
├── utility-agents/ # Utility agent guides
|
|
149
|
+
└── crewai-integration/ # CrewAI guides
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## 🏗 Architecture
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
┌────────────────────────────────────────────────────────────┐
|
|
156
|
+
│ Your Application │
|
|
157
|
+
│ (API / MCP Server / Utility Agent / CrewAI Crew) │
|
|
158
|
+
└────────────────────────────────────────────────────────────┘
|
|
159
|
+
│
|
|
160
|
+
▼
|
|
161
|
+
┌────────────────────────────────────────────────────────────┐
|
|
162
|
+
│ IATP-D402 Framework │
|
|
163
|
+
│ • Server Middleware • Client Libraries • Templates │
|
|
164
|
+
└────────────────────────────────────────────────────────────┘
|
|
165
|
+
│
|
|
166
|
+
▼
|
|
167
|
+
┌────────────────────────────────────────────────────────────┐
|
|
168
|
+
│ D402 Payment Protocol │
|
|
169
|
+
│ • HTTP 402 • EIP-712 Signing • Facilitator Service │
|
|
170
|
+
└────────────────────────────────────────────────────────────┘
|
|
171
|
+
│
|
|
172
|
+
▼
|
|
173
|
+
┌────────────────────────────────────────────────────────────┐
|
|
174
|
+
│ Smart Contracts (On-Chain) │
|
|
175
|
+
│ • IATPWallet • Settlement • Tokens │
|
|
176
|
+
└────────────────────────────────────────────────────────────┘
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## 🌐 Facilitators (No Setup Required)
|
|
180
|
+
|
|
181
|
+
**You don't need to run your own facilitator!**
|
|
182
|
+
|
|
183
|
+
- **All Testnets**: `https://test-facilitator.d402.net` (currently: Sepolia)
|
|
184
|
+
- **All Mainnets**: `https://facilitator.d402.net` (currently: Arbitrum)
|
|
185
|
+
|
|
186
|
+
See [Facilitator URLs](docs/getting-started/facilitators.md) for details.
|
|
187
|
+
|
|
188
|
+
## 🔐 Wallet Creation
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# Create IATP wallet (owner creates their own wallet)
|
|
192
|
+
traia-iatp create-iatp-wallet \
|
|
193
|
+
--owner-key 0x... \
|
|
194
|
+
--create-operator \
|
|
195
|
+
--wallet-name "My Server" \
|
|
196
|
+
--wallet-type MCP_SERVER \
|
|
197
|
+
--network sepolia
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
See [Creating Wallets](docs/wallet-setup/creating-wallets.md) for complete guide.
|
|
201
|
+
|
|
202
|
+
## 📦 Use Cases
|
|
203
|
+
|
|
204
|
+
### 1. Monetize Your API
|
|
205
|
+
|
|
206
|
+
```python
|
|
207
|
+
# Add payment to any endpoint
|
|
208
|
+
d402.register_endpoint("/api/analyze", price_usd=0.01)
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 2. Build Payment-Enabled MCP Servers
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
@mcp.tool()
|
|
215
|
+
@require_payment_for_tool(price=price_builder.create_price(0.01))
|
|
216
|
+
def analyze(text: str) -> dict:
|
|
217
|
+
return analyze_sentiment(text)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 3. Use Paid Tools in CrewAI
|
|
221
|
+
|
|
222
|
+
```python
|
|
223
|
+
toolkit = A2AToolkit.create_from_endpoint(
|
|
224
|
+
endpoint="http://localhost:9001",
|
|
225
|
+
payment_private_key="0x...",
|
|
226
|
+
wallet_address="0x...",
|
|
227
|
+
max_payment_usd=1.0
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
agent = Agent(role="Analyst", tools=toolkit.tools)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## 🛠 CLI Commands
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# Create IATP wallet
|
|
237
|
+
traia-iatp create-iatp-wallet --owner-key 0x... --create-operator
|
|
238
|
+
|
|
239
|
+
# Create utility agency from MCP server
|
|
240
|
+
traia-iatp create-agency --name "My Agent" --mcp-name "Trading MCP"
|
|
241
|
+
|
|
242
|
+
# List available agencies
|
|
243
|
+
traia-iatp list-agencies
|
|
244
|
+
|
|
245
|
+
# Search for tools
|
|
246
|
+
traia-iatp find-tools --query "sentiment analysis"
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## 🔗 Links
|
|
250
|
+
|
|
251
|
+
- **Documentation**: [docs.d402.net](https://docs.d402.net)
|
|
252
|
+
- **PyPI**: [pypi.org/project/traia-iatp](https://pypi.org/project/traia-iatp)
|
|
253
|
+
- **GitHub**: [github.com/Traia-IO/IATP](https://github.com/Traia-IO/IATP)
|
|
254
|
+
- **Examples**: [docs/examples/](docs/examples/overview.md)
|
|
255
|
+
|
|
256
|
+
## 📄 License
|
|
257
|
+
|
|
258
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
259
|
+
|
|
260
|
+
## 🤝 Support
|
|
261
|
+
|
|
262
|
+
- 📖 **Documentation**: [docs.d402.net](https://docs.d402.net)
|
|
263
|
+
- 🐛 **Issues**: [GitHub Issues](https://github.com/Traia-IO/IATP/issues)
|
|
264
|
+
- 💬 **Website**: [traia.io](https://traia.io)
|
|
265
|
+
- 📧 **Email**: support@traia.io
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
**Made with ❤️ by the Traia Team**
|