magic-campus-sdk
Python SDK and CLI for MagicCampus platform integrations. IM remains a supported domain, and this repository keeps the bundled OpenIM transport inside magiccampus_sdk.
This project removes direct user-facing dependency on OpenIM token and endpoint configuration. You only configure:
apiurlapikeyplatform
At runtime, IM-backed flows call:
GET /api/v1/accounts/imToken?platform=<PLATFORM>
and uses the response fields:
userIdimTokenwsApihttpApi
Install locally
uv sync
This repository vendors only the OpenIM transport pieces that magiccampus_sdk actually uses, and layers platform-facing SDK / CLI commands on top.
IM-specific low-level internals, models, and protobufs now live under magiccampus_sdk.im.
CLI quick start
magic-campus --help
magic-campus config init --apiurl https://api-test.pearlapi.com --apikey "$MAGICCAMPUS_APIKEY" --platform IOS --default true
magic-campus auth status --format pretty
magic-campus im notify send --to user:10134002 --text "hello"
magic-campus im notify send --to user:10134002 --markdown "# title\n\nbody"
magic-campus im notify send --to user:10134002 --custom '{"data":"{\"customType\":1}","extension":"example","description":"example custom message"}'
magic-campus space get --group group_123 --format pretty
magic-campus space list-notice --space space_123 --format table
magic-campus space list-notice --group group_123 --format table
magic-campus space create-notice --space space_123 --title "Maintenance" --text "Starts at 22:00" --expiretime 1785510000000
magic-campus space create-notice --group group_123 --title "Maintenance" --text "Starts at 22:00" --expiretime 1785510000000
magic-campus space group update-name --group group_123 --name "New group name"
magic-campus user get --id 10134002 --format pretty
magic-campus user list --all --academy-code Nature --fields userId,nickname,email --format table
magic-campus user list --random --fields userId,nickname --format table
magic-campus user update-profile --id 10134002 --nickname "New Name" --avatar-url "https://cdn.example.com/avatar.png"
magic-campus user update-profile --id 10134002 --avatar-url "" # restore the default avatar
magic-campus user get-growth-profile --id 10134002 --format pretty
magic-campus user init-growth-profile --id 10134002 --reset false
magic-campus user set-academy --id 10134002 --academy-code Nature
magic-campus user adjust-elements --id 10134002 --metal-delta 5 --water-delta -2
magic-campus config init also supports an interactive TTY flow when you omit auth flags.
im notify send sends over MagicCampus HTTP POST /agent/v1/im/sendMessage. im notify history still relies on the websocket transport and local sync database.
Legacy compatibility commands remain available:
magic-campus notify +send --to user:10134002 --text "hello"
magic-campus notify +history --to user:10134002
CLI config is stored at:
~/.magic-campus/auth/magiccampus-im-sdk.json
Supported commands:
config init|list|use|removeauth statusim notify sendim notify historyspace getspace list-notice (--space <spaceId> | --group <groupId>)space create-notice (--space <spaceId> | --group <groupId>)space group update-nameuser getuser list (--all | --random) [--fields <field1,field2>] [--academy-code <code>]user update-profile --id <userId> [--nickname <name>] [--avatar-url <url>]user get-growth-profile --id <userId>user init-growth-profile --id <userId> [--reset <true|false>]user set-academy --id <userId> --academy-code <Material|Digital|Sound|Movement|Nature|Healing>user adjust-elements --id <userId> [--metal-delta <int>] [--wood-delta <int>] [--water-delta <int>] [--fire-delta <int>] [--earth-delta <int>]feed listnotify +send(compat)notify +history(compat)
Python SDK quick start
from magiccampus_sdk import MagicCampusConfig, MagicCampusSDK
sdk = MagicCampusSDK(
MagicCampusConfig(
apiurl="https://api-test.pearlapi.com",
apikey="YOUR_API_KEY",
platform="IOS",
)
)
space = sdk.get_space_by_group_id("GROUP_ID")
print(space.id)
print(space.name)
print(space.introduction)
Python websocket quick start
from magiccampus_sdk import MagicCampusWSSDK, MagicCampusWSConfig
sdk = MagicCampusWSSDK(
MagicCampusWSConfig(
apiurl="https://api-test.pearlapi.com",
apikey="YOUR_API_KEY",
platform="IOS",
data_dir="./magiccampus_data",
)
)
space = sdk.get_space_by_group_id("GROUP_ID")
print(space.name)
sdk.login()
sdk.start()
sdk.send_text("hello", recv_id="10134002")
sdk.send_markdown("# title\n\nbody", recv_id="10134002")
group = sdk.get_group_info("GROUP_ID")
print(group["groupName"])
groups = sdk.get_groups_info(["GROUP_ID_1", "GROUP_ID_2"])
Runnable examples live in magiccampus_sdk/example.py and magiccampus_sdk/example_ws.py.
CLI smoke script
An executable smoke helper lives at scripts/smoke_cli.py.
Offline-safe mode only exercises config persistence and notify dry-run:
uv run python scripts/smoke_cli.py
This mode does not require a real API key. It uses a placeholder key by default and avoids any live auth call.
Real network mode
To run the live auth probe, provide a real API key and enable --live:
export MAGICCAMPUS_APIURL=https://api-test.pearlapi.com
export MAGICCAMPUS_APIKEY='your real api key'
export MAGICCAMPUS_PLATFORM=IOS
uv run python scripts/smoke_cli.py --live
Optional variables:
MAGICCAMPUS_SMOKE_TARGET: target used by dry-run and optional live send, defaultuser:smoke-targetMAGICCAMPUS_PLATFORM: defaults toIOS
If you also want to send a real text message, set a real target and pass --live-send:
export MAGICCAMPUS_SMOKE_TARGET='user:10134002'
uv run python scripts/smoke_cli.py --live --live-send --text 'hello from smoke script'
--live-send performs a real outbound send, so use it only with a valid target and credentials.
Notes
apiurlcan point to any MagicCampus API base URL; IM-backed flows append/api/v1/accounts/imTokenclient.user.get(...)callsGET /api/v1/accounts/getUserInfowithapiurlandapikeydirectlyplatformdefaults toIOS- low-level IM send / receive behavior comes from the bundled transport modules inside
magiccampus_sdk - the wrapper does not persist raw OpenIM credentials in CLI config
Metadata
Release files for magic-campus-sdk 0.2.15
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| magic_campus_sdk-0.2.15.tar.gz | 103.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| magic_campus_sdk-0.2.15-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 202.1 kB
Release files / magic_campus_sdk-0.2.15.tar.gz
| Download URL | magic_campus_sdk-0.2.15.tar.gz |
|---|---|
| Size | 103.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
715f6738c3922ab694206478d094a2e0606f88c71e398241b4a566cb8de4f59f
|
|
BLAKE2b-256 checksum How to use checksums |
09fab13484fd64f673073ef93371bbab3f255962263ca723a911dbb5e27ea1f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Release files / magic_campus_sdk-0.2.15-py3-none-any.whl
| Download URL | magic_campus_sdk-0.2.15-py3-none-any.whl |
|---|---|
| Size | 98.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f2a633c035115b351a289d1f86c92a93d87e81ff12ce78aa6ba46e7c959a089a
|
|
BLAKE2b-256 checksum How to use checksums |
b1f64c739d12624a1a2bde4d2bd0151ecc2f78aa9afaea4aecb89a7b13532dfc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|