Skip to main content

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 /health
  • GET /manifest
  • GET /hub-registration
  • POST /mcp/ using the official MCP Python SDK FastMCP
  • Tool outputs with status, success, message, content, content_type, presentation_hint, and context

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" requires monthly_price_cents and 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 example text, document, message, list, media, or search_results.
  • presentation_hint: provider-neutral usage hint, for example display_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 when items is 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

marona_sdk-0.1.2.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

marona_sdk-0.1.2-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

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

Hashes for marona_sdk-0.1.2.tar.gz
Algorithm Hash digest
SHA256 83df3d151119d6fada587678aea57c7573b79a9f22655e44ae53ed2455b37603
MD5 dfb4327f2715d7dd66a80a12905208e4
BLAKE2b-256 ef3c35fa20564f1a2dc6e5003a3aa72e1e82e1130e20f9ae46f8ba6afb0a6a4f

See more details on using hashes here.

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

Hashes for marona_sdk-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ca5121968d705e10f52f1b84bd03e1305c891c2007cd8d7f82e9752d815d9a64
MD5 300419dfb9488b3c8c61fa893cccee57
BLAKE2b-256 2b291b2ecffe2575139a9f61274c77a7d330725d9821a4c29ef05eb71336a175

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page