Official developer SDK for building Marona-compatible apps, tool servers, skills, and workflows.
Project description
Marona SDK
Marona SDK is the official developer SDK for building Marona-compatible apps, MCP servers, skills, tool servers, and workflows.
It is not the runtime client SDK. Use marona when you want an application to
call a Marona-compatible runtime. Use marona-sdk when you are building
developer-side integrations that need the Marona tool contract.
The SDK helps projects produce the Marona standard automatically:
GET /healthGET /manifestGET /hub-registrationPOST /mcp/using the official MCP Python SDKFastMCP- Tool outputs with
status,success,message,content,content_type,presentation_hint, andcontext
Install For Local Development
python3.11 -m venv .venv
.venv/bin/pip install -e ".[dev]"
Install In A Developer Integration Repo
Developer integration repos can depend on this SDK like any other pip package:
pip install marona-sdk
In requirements.txt:
marona-sdk
It installs from the package index and imports as marona_sdk.
Minimal Server
from marona_sdk import AgentApp, success
agent_app = AgentApp(
name="Hello Tool Server",
server_name="hello-tools",
slug="hello",
description="Example Marona-compatible tool server.",
category="Tools",
visibility="public",
pricing_model="free",
)
@agent_app.tool(description="Say hello to a user.")
def say_hello(name: str) -> dict:
return success(f"Hello {name}.", greeting=f"Hello {name}.")
app = agent_app.create_fastapi_app()
Marketplace Metadata
Every Hub listing separates visibility from pricing:
agent_app = AgentApp(
name="Company Billing",
slug="company-billing",
description="Look up invoices, balances, and account status.",
category="Business",
visibility="private",
pricing_model="paid",
monthly_price_cents=2000,
currency="USD",
)
visibility="public"means the app is searchable and discoverable.visibility="private"means only the owner's workspace can connect.pricing_model="free"means no marketplace subscription is required.pricing_model="paid"requiresmonthly_price_centsand is enforced by Marona Hub.
Hub integration is separate from Marona Runtime. Apps that connect through the Hub SDK do not consume Marona Credits.
Standard Tool Results
All Marona-compatible tools should return the SDK result shape. The required fields are:
status: machine-readable result status.success: boolean result success flag.message: short user-facing status line.content: primary user-facing text/content for the agent to use.content_type: provider-neutral semantic type, for exampletext,document,message,list,media, orsearch_results.presentation_hint: provider-neutral usage hint, for exampledisplay_as_provided.context: short provider-neutral guidance for interpreting the result.
Provider-specific payloads must live under generic standard fields:
data: one structured provider-specific object.items: a list of structured provider-specific objects.count: item count whenitemsis used.artifacts: generic artifact descriptors.job: generic async job metadata.
If a tool declares its own output_schema, the SDK merges these standard fields
into that schema before exposing /manifest and /hub-registration.
Standard Tool Inputs For User Files
Tools that consume uploaded files should declare the SDK-standard
attachments input property. The Edge runtime injects the current conversation
files into that array automatically, so the tool does not need custom runtime
logic or a provider-specific input name.
from marona_sdk import standard_attachments_property
input_schema = {
"type": "object",
"properties": {
"question": {"type": "string"},
"attachments": standard_attachments_property(),
},
"required": [],
"additionalProperties": False,
}
Each attachment can include artifact_id, filename, mime_type, kind,
url, file_url, content_base64, content, and metadata.
Example:
return success(
"Loaded email.",
content=email_text,
content_type="email_message",
presentation_hint="display_as_provided",
context="Return content as provided unless the user asks for a summary.",
)
Run it:
uvicorn examples.hello_server:app --host 127.0.0.1 --port 62900
Then inspect:
http://127.0.0.1:62900/health
http://127.0.0.1:62900/hub-registration
http://127.0.0.1:62900/mcp/
Developer Hub Helper
DeveloperHubClient is only for developer workflow commands such as create,
sync, and submit. Apps, devices, bots, and user interfaces should use the
separate marona runtime client package.
Release
Build and verify the package before uploading:
rm -rf dist build marona_sdk.egg-info
python3.11 -m build
python3.11 -m twine check dist/*
For normal marona-sdk releases, upload with the project-scoped PyPI token:
TWINE_USERNAME=__token__ TWINE_PASSWORD='MARONA_SDK_PROJECT_TOKEN' python3.11 -m twine upload dist/*
For the first upload of a new package, PyPI requires an account-scoped upload token. After the project exists, use a project-scoped token for normal releases.
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 marona_sdk-0.1.2.tar.gz.
File metadata
- Download URL: marona_sdk-0.1.2.tar.gz
- Upload date:
- Size: 17.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83df3d151119d6fada587678aea57c7573b79a9f22655e44ae53ed2455b37603
|
|
| MD5 |
dfb4327f2715d7dd66a80a12905208e4
|
|
| BLAKE2b-256 |
ef3c35fa20564f1a2dc6e5003a3aa72e1e82e1130e20f9ae46f8ba6afb0a6a4f
|
File details
Details for the file marona_sdk-0.1.2-py3-none-any.whl.
File metadata
- Download URL: marona_sdk-0.1.2-py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca5121968d705e10f52f1b84bd03e1305c891c2007cd8d7f82e9752d815d9a64
|
|
| MD5 |
300419dfb9488b3c8c61fa893cccee57
|
|
| BLAKE2b-256 |
2b291b2ecffe2575139a9f61274c77a7d330725d9821a4c29ef05eb71336a175
|