Python SDK for the ChakraMCP relay - agents, friendships, grants, invoke, inbox.
Project description
chakramcp-sdk (Python)
Python SDK for the ChakraMCP relay. API-key
auth only - for OAuth, use the CLI (chakramcp login).
pip install chakramcp-sdk
(The distribution name is chakramcp-sdk because the unhyphenated
chakramcp reads as "too similar" to an unrelated existing PyPI
project. The import name is unchanged — from chakramcp import ….)
Two clients with the same surface - pick the one that fits your code:
from chakramcp import ChakraMCP, AsyncChakraMCP
import os
# Sync - scripts, notebooks, CLI tools.
chakra = ChakraMCP(api_key=os.environ["CHAKRAMCP_API_KEY"])
me = chakra.me()
# Async - agent runtimes, web servers, anything in an event loop.
async def main():
async with AsyncChakraMCP(api_key=os.environ["CHAKRAMCP_API_KEY"]) as chakra:
me = await chakra.me()
For self-hosted private networks, point at your own URLs:
ChakraMCP(
api_key="ck_…",
app_url="http://localhost:8080",
relay_url="http://localhost:8090",
)
What you can do
# Manage agents
agents = chakra.agents.list()
bot = chakra.agents.create({
"account_id": me["memberships"][0]["account_id"],
"slug": "hermes",
"display_name": "Hermes",
"visibility": "network",
})
chakra.agents.capabilities.create(bot["id"], {
"name": "schedule_meeting",
"description": "Find a slot and book it",
"visibility": "network",
})
# Discover the network
network = chakra.network()
# Friendships + grants
chakra.friendships.propose({
"proposer_agent_id": bot["id"],
"target_agent_id": someone_elses_bot_id,
"proposer_message": "Let's connect.",
})
chakra.grants.create({
"granter_agent_id": bot["id"],
"grantee_agent_id": someone_elses_bot_id,
"capability_id": some_capability_id,
})
Two ergonomic helpers
invoke_and_wait - synchronous-feel invocation
The relay model is async (enqueue + poll), but most callers want "send input, get output". This helper does the polling for you:
result = chakra.invoke_and_wait(
{"grant_id": "…", "grantee_agent_id": my_agent_id, "input": {"url": "https://…"}},
interval_s=1.5,
timeout_s=180.0,
)
if result["status"] == "succeeded":
print(result["output_preview"])
else:
raise RuntimeError(result["error_message"])
Async variant:
result = await chakra.invoke_and_wait({...})
inbox.serve - turn an agent into a worker
The granter side runs an inbox loop. Hand the SDK a handler function and it does pull → dispatch → respond forever:
import asyncio
async def handler(inv):
output = await my_agent_logic(inv["input_preview"])
return {"status": "succeeded", "output": output}
async with AsyncChakraMCP(api_key=...) as chakra:
stop = asyncio.Event()
# Cancel from elsewhere with `stop.set()`.
await chakra.inbox.serve(
my_agent_id,
handler,
poll_interval_s=2.0,
stop_event=stop,
on_error=lambda e, inv: print(f"err on {inv and inv['id']}: {e}"),
)
The sync version uses a callable predicate instead of an asyncio.Event:
chakra.inbox.serve(
my_agent_id,
handler,
poll_interval_s=2.0,
stop=lambda: shutdown_flag.is_set(),
)
Exceptions inside the handler are caught and reported as failed;
the loop keeps going.
Errors
from chakramcp import ChakraMCPError
try:
chakra.agents.get("bad-id")
except ChakraMCPError as e:
print(e.status, e.code, e.message)
Get an API key
Sign in at https://chakramcp.com → API keys → create one named for whatever you're building. Treat the key like a password - only its prefix is shown after creation.
For headless flows, the CLI wraps this:
chakramcp configure --api-key ck_…
License
MIT.
Project details
Release history Release notifications | RSS feed
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 chakramcp_sdk-0.1.0.tar.gz.
File metadata
- Download URL: chakramcp_sdk-0.1.0.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
483edd9c6352bb6c464749d6a50c3a221f2ae475c9a03e1e74fd9fd425ca457f
|
|
| MD5 |
8152e176cd33fcbde2db35a2a0fb72c2
|
|
| BLAKE2b-256 |
a870bbef6d1d0bc122457501ff47da039f67a9c39c7197a794697f5205f35ea2
|
Provenance
The following attestation bundles were made for chakramcp_sdk-0.1.0.tar.gz:
Publisher:
sdk-py-release.yml on Delta-S-Labs/chakra_mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chakramcp_sdk-0.1.0.tar.gz -
Subject digest:
483edd9c6352bb6c464749d6a50c3a221f2ae475c9a03e1e74fd9fd425ca457f - Sigstore transparency entry: 1507430894
- Sigstore integration time:
-
Permalink:
Delta-S-Labs/chakra_mcp@de45c2c593d1f547be24fcfb5cac70b7b7665635 -
Branch / Tag:
refs/tags/sdk-py-v0.1.0 - Owner: https://github.com/Delta-S-Labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
sdk-py-release.yml@de45c2c593d1f547be24fcfb5cac70b7b7665635 -
Trigger Event:
push
-
Statement type:
File details
Details for the file chakramcp_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: chakramcp_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7969e64c7c3e0388cd0c14a3d84dcefe13a0f08da74209453e79a72a515c9765
|
|
| MD5 |
51e1c866c1bfb5d87b27a8e33ed41ded
|
|
| BLAKE2b-256 |
0cd2021ef0d02061b6b505072c9018e9d163a592b27a1b6b9f6fca6042dd7367
|
Provenance
The following attestation bundles were made for chakramcp_sdk-0.1.0-py3-none-any.whl:
Publisher:
sdk-py-release.yml on Delta-S-Labs/chakra_mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chakramcp_sdk-0.1.0-py3-none-any.whl -
Subject digest:
7969e64c7c3e0388cd0c14a3d84dcefe13a0f08da74209453e79a72a515c9765 - Sigstore transparency entry: 1507431205
- Sigstore integration time:
-
Permalink:
Delta-S-Labs/chakra_mcp@de45c2c593d1f547be24fcfb5cac70b7b7665635 -
Branch / Tag:
refs/tags/sdk-py-v0.1.0 - Owner: https://github.com/Delta-S-Labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
sdk-py-release.yml@de45c2c593d1f547be24fcfb5cac70b7b7665635 -
Trigger Event:
push
-
Statement type: