Official developer SDK for building Marona-compatible apps, tool servers, skills, and workflows.
Project description
Marona SDK
Official developer SDK for building Marona-compatible apps, MCP servers, tool servers, skills, and workflows.
Use marona-sdk when you are building an app that exposes tools to Marona Hub.
Use marona when you are building an application or interface that calls a
Marona-compatible runtime.
The SDK helps your app expose 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
pip install marona-sdk
In requirements.txt:
marona-sdk
Import it as:
from marona_sdk import AgentApp, success
1. Create An App
Every app needs a unique app ID, also called a slug. Examples:
weather-mcpknowledge-mcpcompany-crm-mcp
from marona_sdk import AgentApp, success
agent_app = AgentApp(
name="Weather Tools",
slug="weather-mcp",
description="Weather lookup tools for agents and AI interfaces.",
category="Weather",
visibility="public",
)
Use visibility="public" when the app should be discoverable in Hub.
Use visibility="private" when the app is only for the owner's workspace.
2. Add A Tool
@agent_app.tool(
title="Get forecast",
description="Return the weather forecast for a city.",
input_schema={
"type": "object",
"properties": {
"city": {"type": "string"},
},
"required": ["city"],
"additionalProperties": False,
},
)
def get_forecast(city: str) -> dict:
return success(
f"The forecast for {city} is sunny.",
content=f"The forecast for {city} is sunny.",
content_type="text",
presentation_hint="display_as_provided",
context="Display the forecast directly unless the user asks for another format.",
data={"city": city, "condition": "sunny"},
)
3. Run The Server
app = agent_app.create_fastapi_app()
Run locally:
uvicorn examples.hello_server:app --host 127.0.0.1 --port 62900
Inspect:
http://127.0.0.1:62900/health
http://127.0.0.1:62900/manifest
http://127.0.0.1:62900/hub-registration
http://127.0.0.1:62900/mcp/
4. Publish To Marona Hub
DeveloperHubClient is for developer workflow commands such as create, sync,
and submit.
from marona_sdk import DeveloperHubClient
client = DeveloperHubClient(
hub_url="https://hub.marona.ai",
api_key="mrn_dev_...",
)
Apps, devices, bots, and user interfaces should use the separate marona
runtime client package.
Standard Tool Results
All Marona-compatible tools should return the SDK result shape:
status: machine-readable result statussuccess: boolean result success flagmessage: short user-facing status linecontent: primary user-facing text or contentcontent_type: provider-neutral content type, such astext,document,message,list,media, orsearch_resultspresentation_hint: provider-neutral usage hint, such asdisplay_as_providedcontext: short guidance for interpreting the result
Provider-specific data should live under generic fields:
data: one structured objectitems: a list of structured objectscount: item count whenitemsis usedartifacts: generic artifact descriptorsjob: 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 runtime injects the current conversation
files into that array automatically.
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.
Package Names
- Python developer SDK:
marona-sdk, importmarona_sdk - Dart developer SDK:
marona_sdk, importpackage:marona_sdk/marona_sdk.dart - TypeScript developer SDK:
marona-sdk, import from"marona-sdk" - Runtime client SDKs:
marona
Release
Build and verify:
rm -rf dist build marona_sdk.egg-info
python3.11 -m build
python3.11 -m twine check dist/*
Upload with the project-scoped PyPI token:
TWINE_USERNAME=__token__ TWINE_PASSWORD='MARONA_SDK_PROJECT_TOKEN' python3.11 -m twine upload dist/*
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.3.tar.gz.
File metadata
- Download URL: marona_sdk-0.1.3.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f467736329de07cf58b1cd2f05f4c6be1d3d42626b093f7cfef8b912619d0f2
|
|
| MD5 |
c39b4c620df94992a13ff237106cc884
|
|
| BLAKE2b-256 |
876e5bfd6524393f49f6c5eb7a57784253847fc6ad56da666631defc88358976
|
File details
Details for the file marona_sdk-0.1.3-py3-none-any.whl.
File metadata
- Download URL: marona_sdk-0.1.3-py3-none-any.whl
- Upload date:
- Size: 13.9 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 |
374c9bf52eb9e60a085f7ac5d9544f28cd32005ccfef843c5e40c6a0bd79ec13
|
|
| MD5 |
bff5ce54906fba6c465483b2edaa4bef
|
|
| BLAKE2b-256 |
5aac23dd9fc0c8311215d73904e559869c24629be975c915399d2fa669e457b9
|