Core Concepts
Tools
A tool is a piece of code you deploy to the platform and execute via an API call. Each tool has:
- A unique name scoped to your organization (
org-slug/tool-name) - A type:
function,mcp, orstorm - One or more versions
- Optional pricing (free or paid per execution)
Tool types
Function
The standard type. You write a handler in Python, JavaScript, or Lua. The handler receives an event object (your input) and a context object (execution metadata) and returns a result.
MCP (Model Context Protocol)
An MCP tool exposes functions as tools for AI agents. It follows the Model Context Protocol specification. You write the server logic in Python, JavaScript, or Lua. See the MCP guide for details.
Storm
A specialized type for batch data processing. Storm tools work on digital assets (files stored in the platform) rather than inline code. The runtime is automatically set to storm. See the Storm guide for details.
Runtimes
| Runtime | Display name | Available for |
|---|---|---|
python:3.13 | Python 3.13 | Function, MCP |
javascript | JavaScript V8 | Function, MCP |
lua | Lua | Function, MCP |
storm | Storm | Storm only (set automatically) |
Python 3.13 is the default runtime when you create a new tool.
Versions
Every time you publish your code, a new version is created. Versions are immutable — once published, the code for that version cannot change. You can create new versions on top of existing ones.
Each version has:
- A semantic version number (e.g.
1.0.0,1.0.1) - A runtime
- One or more code files
- Environment variable configuration
- Memory and timeout limits
- An optional price per execution
A version can be in one of these states:
- Draft — only visible to you and your organization
- Private — published but visible to your organization only
- Public — published to the marketplace and discoverable by everyone
Organizations
Your tools are owned by an organization (your account or a team). Each organization has a unique slug that appears in all your tool URLs: marketplace.rival.io/org-slug/tool-name.
Billing and balance
Every execution has two cost components:
| Cost component | What it covers | Charged to |
|---|---|---|
| Compute cost | Infrastructure: memory × runtime × rate (CPU) or runtime × rate (GPU) | Always charged, regardless of who runs the tool |
| Function cost (BasePrice) | Fee set by the tool creator (price_per_api_request) | Charged only when executing a tool outside your own organization |
Own organization — You pay compute cost only. The function fee (BasePrice) is waived because you are the owner.
Outside your organization — You pay compute cost + function cost. The tool creator earns the function fee.
Digital assets
Digital assets are files stored in the platform’s cloud storage. You can upload and manage them from the Digital Assets section in the UI.
Each digital asset has:
- A unique ID (UUID) used to reference it in API calls
- A file reference path — copy it by clicking the Copy Ref button on the asset
Digital assets are used as input/output with Storm tools. The file reference (copied via Copy Ref) maps to the asset.file property and is used as the topic_file field in a Storm execution event. The asset ID is used for source_asset_id and target_asset_id fields. See the Storm guide for details.