zambo-ai 1.0.3__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.
zambo-ai-1.0.3/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zambo
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,91 @@
1
+ Metadata-Version: 2.1
2
+ Name: zambo-ai
3
+ Version: 1.0.3
4
+ Summary: Official Python SDK for Zambo (zambo.dev), 100+ MCP tools over plain JSON-RPC. No account, no API key. Free: 20 calls/tool/day.
5
+ Author-email: Zambo <brennanzambo@zambo.dev>
6
+ License: MIT
7
+ Project-URL: Homepage, https://zambo.dev
8
+ Project-URL: Documentation, https://zambo.dev
9
+ Project-URL: Source, https://gitlab.com/rambozambodotdev/zambo
10
+ Keywords: mcp,ai-tools,zambo,agents,crypto,seo-audit
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
16
+ Requires-Python: >=3.8
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+
20
+ # zambo-ai
21
+
22
+ Official Python SDK for [Zambo](https://zambo.dev), 100+ MCP tools for AI agents and apps over plain JSON-RPC 2.0. **No account, no API key.** Free: 20 calls/tool/day.
23
+
24
+ Every call returns a **verifiable receipt** (UUID + timestamp + SHA-256). Check any receipt at `https://zambo.dev/run/<id>`.
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ pip install zambo-ai
30
+ ```
31
+
32
+ Zero dependencies, stdlib only. Python 3.8+.
33
+
34
+ ## Quickstart
35
+
36
+ ```python
37
+ from zambo_ai import Zambo
38
+
39
+ z = Zambo()
40
+
41
+ # Live crypto price
42
+ btc = z.price("BTC")
43
+ print(btc.text)
44
+ # BTC · $75,704.00 USD ... (live value at publish time)
45
+
46
+ # Describe any job in plain language — Zambo chains the right tools
47
+ job = z.universal("audit https://example.com for AI discoverability", session="my-session-1")
48
+ print(job.text)
49
+ print("receipt:", job.receipt_id) # verify at https://zambo.dev/run/<id>
50
+
51
+ # Call any tool directly
52
+ r = z.call("live_price", {"coin": "ETH"})
53
+
54
+ # Search the 100+ tool catalog
55
+ found = z.search("generate QR code")
56
+
57
+ # List exposed tools
58
+ tools = z.list_tools()
59
+ ```
60
+
61
+ ## API
62
+
63
+ | Method | Description |
64
+ |---|---|
65
+ | `z.price(coin)` | Live crypto price (`"BTC"`, `"ETH"`, …) |
66
+ | `z.universal(goal, session=None)` | Plain-language job → Zambo routes and executes tools. Pass a stable `session` id to continue a trail across models. |
67
+ | `z.call(tool, args)` | Direct tool call, e.g. `z.call("live_price", {"coin": "ETH"})` |
68
+ | `z.search(query)` | Search the full 100+ tool catalog |
69
+ | `z.list_tools()` | List exposed tools with descriptions |
70
+
71
+ Every result: `text`, `receipt`, `receipt_id`, `audit_url`, `raw`. JSON-RPC failures raise `zambo_ai.ZamboError`.
72
+
73
+ ## Pricing
74
+
75
+ - **Free:** 20 calls/tool/day, no account
76
+ - **Day pass:** $0.99 / 24 hours (USDC on Base)
77
+ - **Monthly:** $29
78
+ - **Annual:** $290
79
+ - **$ZAMBO holder:** $19/month
80
+
81
+ (From [zambo.dev/pricing](https://zambo.dev/pricing).)
82
+
83
+ ## Links
84
+
85
+ - Zambo: https://zambo.dev
86
+ - Full tool catalog: https://zambo.dev/api/mcp?full=true
87
+ - MCP endpoint: `https://zambo.dev/api/mcp`
88
+
89
+ ## License
90
+
91
+ MIT
@@ -0,0 +1,72 @@
1
+ # zambo-ai
2
+
3
+ Official Python SDK for [Zambo](https://zambo.dev), 100+ MCP tools for AI agents and apps over plain JSON-RPC 2.0. **No account, no API key.** Free: 20 calls/tool/day.
4
+
5
+ Every call returns a **verifiable receipt** (UUID + timestamp + SHA-256). Check any receipt at `https://zambo.dev/run/<id>`.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pip install zambo-ai
11
+ ```
12
+
13
+ Zero dependencies, stdlib only. Python 3.8+.
14
+
15
+ ## Quickstart
16
+
17
+ ```python
18
+ from zambo_ai import Zambo
19
+
20
+ z = Zambo()
21
+
22
+ # Live crypto price
23
+ btc = z.price("BTC")
24
+ print(btc.text)
25
+ # BTC · $75,704.00 USD ... (live value at publish time)
26
+
27
+ # Describe any job in plain language — Zambo chains the right tools
28
+ job = z.universal("audit https://example.com for AI discoverability", session="my-session-1")
29
+ print(job.text)
30
+ print("receipt:", job.receipt_id) # verify at https://zambo.dev/run/<id>
31
+
32
+ # Call any tool directly
33
+ r = z.call("live_price", {"coin": "ETH"})
34
+
35
+ # Search the 100+ tool catalog
36
+ found = z.search("generate QR code")
37
+
38
+ # List exposed tools
39
+ tools = z.list_tools()
40
+ ```
41
+
42
+ ## API
43
+
44
+ | Method | Description |
45
+ |---|---|
46
+ | `z.price(coin)` | Live crypto price (`"BTC"`, `"ETH"`, …) |
47
+ | `z.universal(goal, session=None)` | Plain-language job → Zambo routes and executes tools. Pass a stable `session` id to continue a trail across models. |
48
+ | `z.call(tool, args)` | Direct tool call, e.g. `z.call("live_price", {"coin": "ETH"})` |
49
+ | `z.search(query)` | Search the full 100+ tool catalog |
50
+ | `z.list_tools()` | List exposed tools with descriptions |
51
+
52
+ Every result: `text`, `receipt`, `receipt_id`, `audit_url`, `raw`. JSON-RPC failures raise `zambo_ai.ZamboError`.
53
+
54
+ ## Pricing
55
+
56
+ - **Free:** 20 calls/tool/day, no account
57
+ - **Day pass:** $0.99 / 24 hours (USDC on Base)
58
+ - **Monthly:** $29
59
+ - **Annual:** $290
60
+ - **$ZAMBO holder:** $19/month
61
+
62
+ (From [zambo.dev/pricing](https://zambo.dev/pricing).)
63
+
64
+ ## Links
65
+
66
+ - Zambo: https://zambo.dev
67
+ - Full tool catalog: https://zambo.dev/api/mcp?full=true
68
+ - MCP endpoint: `https://zambo.dev/api/mcp`
69
+
70
+ ## License
71
+
72
+ MIT
@@ -0,0 +1,29 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "zambo-ai"
7
+ version = "1.0.3"
8
+ description = "Official Python SDK for Zambo (zambo.dev), 100+ MCP tools over plain JSON-RPC. No account, no API key. Free: 20 calls/tool/day."
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "Zambo", email = "brennanzambo@zambo.dev" }]
13
+ keywords = ["mcp", "ai-tools", "zambo", "agents", "crypto", "seo-audit"]
14
+ classifiers = [
15
+ "Development Status :: 5 - Production/Stable",
16
+ "Intended Audience :: Developers",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Topic :: Software Development :: Libraries :: Python Modules",
20
+ ]
21
+ dependencies = []
22
+
23
+ [project.urls]
24
+ Homepage = "https://zambo.dev"
25
+ Documentation = "https://zambo.dev"
26
+ Source = "https://gitlab.com/rambozambodotdev/zambo"
27
+
28
+ [tool.setuptools.packages.find]
29
+ include = ["zambo_ai*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,145 @@
1
+ """zambo-ai — official Python SDK for Zambo (https://zambo.dev).
2
+
3
+ 100+ MCP tools over plain JSON-RPC 2.0. No account, no API key.
4
+ Free: 20 calls/tool/day. Every call returns a verifiable receipt
5
+ (UUID + timestamp + SHA-256) you can check at https://zambo.dev/run/<id>.
6
+
7
+ Zero dependencies — stdlib only.
8
+ """
9
+
10
+ import http.client
11
+ import json
12
+ import time
13
+ import urllib.request
14
+ import urllib.error
15
+
16
+ ENDPOINT = "https://zambo.dev/api/mcp"
17
+ HEADERS = {
18
+ "Content-Type": "application/json",
19
+ "Accept": "application/json, text/event-stream",
20
+ }
21
+
22
+ # The upstream intermittently resets connections or sends headers with an
23
+ # empty body (server-side flake). Retry transient transport failures; never
24
+ # retry a received JSON-RPC error.
25
+ _TRANSIENT = (
26
+ http.client.IncompleteRead,
27
+ http.client.RemoteDisconnected,
28
+ http.client.BadStatusLine,
29
+ ConnectionResetError,
30
+ BrokenPipeError,
31
+ TimeoutError,
32
+ )
33
+
34
+
35
+ class ZamboError(Exception):
36
+ """A JSON-RPC error returned by the Zambo server."""
37
+
38
+
39
+ def _rpc_once(method, params, endpoint=ENDPOINT):
40
+ body = json.dumps({"jsonrpc": "2.0", "id": 1, "method": method, "params": params}).encode()
41
+ req = urllib.request.Request(endpoint, data=body, headers=HEADERS, method="POST")
42
+ with urllib.request.urlopen(req, timeout=60) as resp:
43
+ raw = resp.read().decode()
44
+ return raw
45
+
46
+
47
+ def _parse_payload(raw):
48
+ text = raw.strip()
49
+ if text.startswith("{"):
50
+ return json.loads(text)
51
+ # Server may answer SSE: data: {...} lines
52
+ for line in text.splitlines():
53
+ if line.startswith("data:"):
54
+ try:
55
+ return json.loads(line[5:].strip())
56
+ except json.JSONDecodeError:
57
+ continue
58
+ raise ZamboError("Unparseable response from Zambo: " + raw[:200])
59
+
60
+
61
+ def _rpc(method, params, endpoint=ENDPOINT, attempts=6):
62
+ last = None
63
+ for n in range(attempts):
64
+ try:
65
+ payload = _parse_payload(_rpc_once(method, params, endpoint))
66
+ break
67
+ except _TRANSIENT as e:
68
+ last = e
69
+ time.sleep(0.6 * (n + 1))
70
+ else:
71
+ raise ZamboError(
72
+ "Transport failed after %d attempts: %s: %s" % (attempts, type(last).__name__, last)
73
+ )
74
+ if "error" in payload:
75
+ raise ZamboError("Zambo error: " + json.dumps(payload["error"]))
76
+ return payload["result"]
77
+
78
+
79
+ class ZamboResult:
80
+ """A shaped tool result: text, receipt, receipt_id, audit_url, raw."""
81
+
82
+ def __init__(self, result):
83
+ text = ""
84
+ for block in result.get("content", []):
85
+ if block.get("type") == "text":
86
+ text += block.get("text", "") + "\n"
87
+ self.text = text.strip()
88
+ self.receipt = result.get("_receipt") or {}
89
+ self.receipt_id = self.receipt.get("id")
90
+ # Per-receipt verification URL — this exact pattern appears in the
91
+ # live tool output (zambo.dev/run/<id> on every call).
92
+ self.audit_url = (
93
+ "https://zambo.dev/run/" + self.receipt_id
94
+ if self.receipt_id
95
+ else self.receipt.get("audit")
96
+ )
97
+ self.raw = result
98
+
99
+ def __repr__(self):
100
+ return "<ZamboResult receipt_id=%r>" % (self.receipt_id,)
101
+
102
+
103
+ class Zambo:
104
+ """Client for the Zambo MCP endpoint."""
105
+
106
+ def __init__(self, endpoint=ENDPOINT):
107
+ self.endpoint = endpoint
108
+
109
+ def _call_raw(self, method, params):
110
+ return _rpc(method, params, self.endpoint)
111
+
112
+ def call(self, tool, args=None):
113
+ """Call any Zambo tool directly: z.call('live_price', {'coin': 'ETH'})"""
114
+ return ZamboResult(
115
+ self._call_raw("tools/call", {"name": tool, "arguments": args or {}})
116
+ )
117
+
118
+ def universal(self, goal, session=None):
119
+ """Describe the job in plain language — Zambo chains the right tools
120
+ automatically. Pass a stable session id to continue a trail across models."""
121
+ args = {"goal": goal}
122
+ if session:
123
+ args["_session_id"] = session
124
+ return ZamboResult(
125
+ self._call_raw("tools/call", {"name": "zambo_universal", "arguments": args})
126
+ )
127
+
128
+ def search(self, query):
129
+ """Search the 100+ tool catalog: z.search('generate QR code')"""
130
+ return ZamboResult(
131
+ self._call_raw(
132
+ "tools/call", {"name": "capability_search", "arguments": {"query": query}}
133
+ )
134
+ )
135
+
136
+ def price(self, coin):
137
+ """Live crypto price helper: z.price('ETH')"""
138
+ return self.call("live_price", {"coin": coin})
139
+
140
+ def list_tools(self):
141
+ """List the exposed tools with one-line descriptions."""
142
+ return self._call_raw("tools/list", {}).get("tools", [])
143
+
144
+
145
+ __all__ = ["Zambo", "ZamboResult", "ZamboError", "ENDPOINT"]
@@ -0,0 +1,91 @@
1
+ Metadata-Version: 2.1
2
+ Name: zambo-ai
3
+ Version: 1.0.3
4
+ Summary: Official Python SDK for Zambo (zambo.dev), 100+ MCP tools over plain JSON-RPC. No account, no API key. Free: 20 calls/tool/day.
5
+ Author-email: Zambo <brennanzambo@zambo.dev>
6
+ License: MIT
7
+ Project-URL: Homepage, https://zambo.dev
8
+ Project-URL: Documentation, https://zambo.dev
9
+ Project-URL: Source, https://gitlab.com/rambozambodotdev/zambo
10
+ Keywords: mcp,ai-tools,zambo,agents,crypto,seo-audit
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
16
+ Requires-Python: >=3.8
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+
20
+ # zambo-ai
21
+
22
+ Official Python SDK for [Zambo](https://zambo.dev), 100+ MCP tools for AI agents and apps over plain JSON-RPC 2.0. **No account, no API key.** Free: 20 calls/tool/day.
23
+
24
+ Every call returns a **verifiable receipt** (UUID + timestamp + SHA-256). Check any receipt at `https://zambo.dev/run/<id>`.
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ pip install zambo-ai
30
+ ```
31
+
32
+ Zero dependencies, stdlib only. Python 3.8+.
33
+
34
+ ## Quickstart
35
+
36
+ ```python
37
+ from zambo_ai import Zambo
38
+
39
+ z = Zambo()
40
+
41
+ # Live crypto price
42
+ btc = z.price("BTC")
43
+ print(btc.text)
44
+ # BTC · $75,704.00 USD ... (live value at publish time)
45
+
46
+ # Describe any job in plain language — Zambo chains the right tools
47
+ job = z.universal("audit https://example.com for AI discoverability", session="my-session-1")
48
+ print(job.text)
49
+ print("receipt:", job.receipt_id) # verify at https://zambo.dev/run/<id>
50
+
51
+ # Call any tool directly
52
+ r = z.call("live_price", {"coin": "ETH"})
53
+
54
+ # Search the 100+ tool catalog
55
+ found = z.search("generate QR code")
56
+
57
+ # List exposed tools
58
+ tools = z.list_tools()
59
+ ```
60
+
61
+ ## API
62
+
63
+ | Method | Description |
64
+ |---|---|
65
+ | `z.price(coin)` | Live crypto price (`"BTC"`, `"ETH"`, …) |
66
+ | `z.universal(goal, session=None)` | Plain-language job → Zambo routes and executes tools. Pass a stable `session` id to continue a trail across models. |
67
+ | `z.call(tool, args)` | Direct tool call, e.g. `z.call("live_price", {"coin": "ETH"})` |
68
+ | `z.search(query)` | Search the full 100+ tool catalog |
69
+ | `z.list_tools()` | List exposed tools with descriptions |
70
+
71
+ Every result: `text`, `receipt`, `receipt_id`, `audit_url`, `raw`. JSON-RPC failures raise `zambo_ai.ZamboError`.
72
+
73
+ ## Pricing
74
+
75
+ - **Free:** 20 calls/tool/day, no account
76
+ - **Day pass:** $0.99 / 24 hours (USDC on Base)
77
+ - **Monthly:** $29
78
+ - **Annual:** $290
79
+ - **$ZAMBO holder:** $19/month
80
+
81
+ (From [zambo.dev/pricing](https://zambo.dev/pricing).)
82
+
83
+ ## Links
84
+
85
+ - Zambo: https://zambo.dev
86
+ - Full tool catalog: https://zambo.dev/api/mcp?full=true
87
+ - MCP endpoint: `https://zambo.dev/api/mcp`
88
+
89
+ ## License
90
+
91
+ MIT
@@ -0,0 +1,8 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ zambo_ai/__init__.py
5
+ zambo_ai.egg-info/PKG-INFO
6
+ zambo_ai.egg-info/SOURCES.txt
7
+ zambo_ai.egg-info/dependency_links.txt
8
+ zambo_ai.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ zambo_ai