bee-sdk
Official Python client and MCP server for Bee by HEOSSI — The Progressive Quantum-Native Intelligence Engine, a governed multimodal intelligence platform from HEOSSI.
SDK version: 0.6.4 — includes 14 governed MCP tools, MCP resources, per-call/BEE_MODEL tier selection (bee-cell … bee-swarm; access follows your key's plan), and stdio plus Streamable HTTP transports.
Includes a hosted Model Context Protocol server: pip install bee-sdk then
run bee-mcp (stdio) to expose Bee's 14 tools to Claude Desktop, Cursor, VS
Code, Zed, Windsurf, and other MCP clients:
- intelligence:
bee_chat,bee_code,bee_security,bee_research - trust and account:
bee_verify_provenance,bee_usage - knowledge:
bee_documents_search,bee_documents_add - memory:
bee_memory_search,bee_memory_add - Quantum Reasoning Lab:
bee_quantum_reasoning_run,bee_quantum_reasoning_jobs,bee_quantum_reasoning_get,bee_quantum_reasoning_remove
It also serves bee://status, bee://domains, bee://documents, and
bee://memory, plus the bee://documents/{source} resource template. Hosted
writes and quantum execution remain tenant-scoped, explicitly described, and
plan/policy gated. For a request/response remote endpoint, run
bee-mcp --http PORT (localhost by default; put public deployments behind a
trusted authenticated proxy). See
bee.heossi.com/docs/mcp.
Status: functional sync + async client (stdlib + optional
httpx). The SDK targets the Bee/chat/completionsAPI contract on production via the public gatewayhttps://api.bee.heossi.com/bee— this is the default and it is where API-key auth, plan / per-tier allowance enforcement and usage metering happen. Do not pointBEE_API_URLat the raw Modal app URL: that bypasses billing and abee_sk_key is rejected there (the backend only trusts Supabase JWTs / the staticBEE_API_KEYSenv, not customer-issued keys). OverrideBEE_API_URLonly for a self-hosted Bee Enclave or staging.
Install
Install from PyPI (canonical):
pip install bee-sdk # sync client (stdlib only — zero deps)
pip install bee-sdk[async] # async client (adds httpx)
Install + quickstart on the marketing site: bee.heossi.com/docs/sdks.
Quick start
from bee_sdk import Bee
bee = Bee() # reads BEE_API_URL + BEE_API_KEY from env
print(bee.chat("Explain Shor's algorithm at NISQ depth", domain="quantum"))
Quantum work is submitted as a durable Quantum Reasoning Lab product job. For
customer-local execution, use quantum_local_select; for direct customer-owned
provider execution, use execute_byopa_direct.
For a durable, inspectable Lab run:
job = bee.quantum_reasoning_create(
prompt="Compare two fault-tolerant designs.",
model="bee-hive",
product="simulation_cloud",
)
detail = bee.quantum_reasoning_wait(job["id"], timeout=900)
print(detail["status"], detail.get("candidates"), detail.get("inference_receipt_id"))
Pass a stable idempotency_key when your application may retry creation. Reusing
that key with different input returns 409; reusing it with the same input
returns the original job. quantum_reasoning_jobs(cursor=..., limit=..., status=..., model=...) supports cursor pagination. Automatic execution retry is
deliberately unavailable; ambiguous work must be reconciled.
quantum_reasoning_remove cancels an eligible queued job or erases the content
of a terminal job, subject to workspace role controls.
Lab jobs are tenant-scoped, encrypted at rest, and retained for 90 days. Real-QPU execution is explicitly metered and any classical fallback is returned as such.
Durable Lab jobs require an explicit product: simulation_cloud or
managed_qpu. local_simulator and byopa_direct run in the customer's own
environment and never enter Bee's hosted queue. byopa_managed remains gated
until its provider-specific managed adapter is activated.
Streaming
for chunk in bee.chat_stream("Write a Rust fibonacci function", domain="programming"):
print(chunk, end="", flush=True)
Async
import asyncio
from bee_sdk import AsyncBee
async def main():
async with AsyncBee() as client:
text = await client.chat("Audit this contract for re-entrancy", domain="blockchain")
print(text)
asyncio.run(main())
Multi-turn
from bee_sdk import Bee, ChatMessage
bee = Bee()
resp = bee.chat_messages(
[
ChatMessage(role="system", content="You are a senior security auditor."),
ChatMessage(role="user", content="Review this nginx config for hardening gaps:\n\n..."),
],
domain="cybersecurity",
max_tokens=1024,
)
print(resp.content)
print(resp.usage, resp.interaction_id)
Feedback loop
resp = bee.chat_messages([...], domain="ai")
if user_likes_answer:
bee.feedback(resp.interaction_id, rating="up")
Documents (RAG) & personal memory
Both are tenant-scoped to your API key's account. Documents need a rag-entitled plan; memory is a per-user opt-in (default-on).
# Documents — add to your knowledge base, then search it
bee.documents_add("Q3 revenue grew 14% QoQ to S$2.1M.", source="q3-report")
hits = bee.documents_search("how did revenue change in Q3?", k=3)
# Personal memory — remember a fact, recall it later
bee.memories_add("Prefers TypeScript over JavaScript.", kind="preference")
mem = bee.memories_search("language preference") # {enabled, memories: [...]}
Domains
The domain= parameter selects which LoRA adapter Bee routes through. Tier-1 domains:
| domain | what it's tuned for |
|---|---|
general |
balanced, no specialization |
programming |
code generation, refactoring, debugging |
ai |
ML/AI papers, training, evaluation |
cybersecurity |
threat modelling, audits, defensive analysis |
quantum |
NISQ-aware quantum computing, Qiskit |
fintech |
payments, risk, compliance |
blockchain |
smart contract audits, protocol design |
infrastructure |
systems, networking, devops |
research |
literature review, paper critique |
business |
strategy, GTM, ops |
Domain adapters are trained and served internally per domain; the model weights are private (the hosted gateway serves them — there is no public weight download). The domain you pass routes to the right adapter automatically.
Environment variables
| var | purpose |
|---|---|
BEE_API_URL |
Endpoint override. Defaults to the public gateway https://api.bee.heossi.com/bee (where auth + billing + metering run). Set this only for a self-hosted Bee Enclave or a staging environment — never the raw Modal app URL (that bypasses billing and rejects bee_sk_ keys). |
BEE_API_KEY |
Customer Bearer token. Create one at workspace.bee.heossi.com/account/api-keys. |
Errors
from bee_sdk import BeeAPIError, RateLimitError, BeeError
try:
bee.chat("...", domain="quantum")
except RateLimitError as e: # 429 after retries
...
except BeeAPIError as e: # other HTTP errors
print(e.status, e.body)
except BeeError: # network / timeout
...
The sync client retries 429/5xx with exponential backoff (max 4 attempts).
Versioning
bee-sdk follows the Bee API surface in bee/server.py. Breaking API changes bump the minor version pre-1.0; the SDK is currently 0.6.4 and the API is v1.
License
Apache-2.0 © 2026 HEOSSI (Pte.) Ltd.
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 bee_sdk-0.6.4.tar.gz.
File metadata
- Download URL: bee_sdk-0.6.4.tar.gz
- Upload date:
- Size: 27.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d96e2c3dd950ebf6c4a63c0a5dfbc0747a04d8a2ca1bfd174175b498e91ab17a
|
|
| MD5 |
b7c47a61dc1d733cf1926f19185e7d3f
|
|
| BLAKE2b-256 |
55d6f278ef6b3cfcb30b211794c94d02cd407fb75debefe7a9497b76bfa16e6e
|
File details
Details for the file bee_sdk-0.6.4-py3-none-any.whl.
File metadata
- Download URL: bee_sdk-0.6.4-py3-none-any.whl
- Upload date:
- Size: 27.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c38d7a0119c80d8d44ca78cff99b0235640e2d32b8c347cb2707700037236a7
|
|
| MD5 |
8be91964cbdc23bbefa6b95803e8e552
|
|
| BLAKE2b-256 |
a39e1e6d10a93854b132d04003de05bd7810b397d13f3e0191e129110d0da02c
|