A tool is a named operation the agent can invoke. The model sees a description and an input schema; the Engine routes the call to the right implementation. This page is the reference for adding a custom tool, plus the design rules that keep tools usable.Documentation Index
Fetch the complete documentation index at: https://septemberai.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
The tool definition
A tool definition has three required fields and one optional one:| Field | Required | Purpose |
|---|---|---|
name | yes | Unique identifier. Lowercase, snake_case or dotted. |
description | yes | What the tool does and when to use it. The model uses this to decide. |
input_schema | yes | JSON schema for the input. Validated before execution. |
implementation | yes | How the Engine should run the call. |
Implementation kinds
Platform
The tool is implemented insrc/utility_directory/:
ref is the Python function name registered in platform_registry.py.
Adding a new platform tool means writing the function, registering it,
and exposing it in the catalog.
Skill
The tool is implemented as a skill — a prompt template plus optional helper scripts:MCP
The tool is exposed by a connected MCP server:Where tools live
Platform tools and skills are loaded from the catalog directory (CATALOG_DIR). Layout:
POST /admin/reload-catalog — no Engine restart needed.
MCP tools are populated dynamically; they aren’t in the catalog.
Description rules
The description is the single most important field. The model uses it to decide when to call your tool.Be specific
Name inputs and outputs
Hint when to use
Hint when not to use
Schema rules
Type every field
{"type": "string"} is the floor. Add format, pattern, minLength,
maxLength, enum where they apply.
Use enums for closed sets
Mark required fields
required to express
your contract.
Add description to every property
The description is documentation the model reads at call time:Output
There’s nooutput_schema. Tools return a string (or a JSON-serializable
object that the Engine stringifies). The schema for output is whatever
your description says it is.
Keep output small
Tools that return huge blobs hurt:- They eat context, which costs money and slows the model down.
- They survive compaction less gracefully.
- They overwhelm the model’s attention.
Structured output beats prose
Errors
When the tool fails, return a structured error:tool_result.error field. The model can
react — retry, switch tools, ask the user.
Versioning
Tools are part of the agent’s contract. Changing a tool’s name or schema is a breaking change. Patterns:- Adding a field. Backwards-compatible if it has a default.
- Removing a field. Breaking. Add a new tool with the new schema; deprecate the old.
- Renaming. Breaking. Treat as remove + add.
- Changing semantics. Always breaking, even if the schema looks the same.
Testing tools
Test tools against the agent, not just in isolation:See also
- Tool use — the conceptual view.
- Skills endpoints — managing skills via API.
- Asset Directory endpoints — MCP connector lifecycle.

