sortie-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sortie-mcpcreate a campaign 'data-pipeline' with sequential steps: extract, transform, load"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sortie-mcp
Campaign orchestration MCP server for AI agents — dependency DAGs, parallel fan-out, failure policies, and embedded notes.
Think make for AI agent workflows, where the LLM is the planner that
generates and adapts the DAG at runtime.
Install
pip install sortie-mcpOr with uv:
uv add sortie-mcpRelated MCP server: task-orchestrator
Quick Start
1. Set up PostgreSQL
sortie-mcp requires PostgreSQL 15+ with pgvector.
export DATABASE_URL="postgresql://user:pass@localhost:5432/mydb"
export SORTIE_SCHEMA="sortie" # default2. Run the MCP server
sortie-mcp
# or: python -m sortie_mcp.serverThe server runs on stdio transport. Configure it in your MCP client:
{
"sortie": {
"command": ["sortie-mcp"],
"env": {
"DATABASE_URL": "postgresql://..."
}
}
}3. Run the campaign runner
sortie-runner
# or: python -m sortie_mcp.runnerAdd to cron for autonomous operation:
*/15 * * * * /path/to/venv/bin/sortie-runnerArchitecture
One MCP server, three perspectives:
Coordinator (e.g. a dispatcher agent): create, list, steer, pause/cancel campaigns
Worker (specialist agents): get context, add notes, complete/fail steps, spawn subtasks
Runner (cron): capacity-aware watchdog that dispatches ready steps and consults the planner LLM
Step Types
Type | Description |
| Single task executed by one agent |
| Fan-out: children run concurrently |
| Pipeline: each step depends on the previous |
| Map: apply a template to each item in a list |
Key Features
DAG splice (
spawn_and_continue): agents can split work into subtasks + continuationBranch abort (
abort_branch): scoped early return from an ancestor stepSkip cascade: transitive propagation through the dependency graph
Priority scheduling: urgent / high / normal / low / background
Advisory dedup: fingerprinting warns the planner of duplicate steps
Depth limits:
spawn_and_continuehidden from agents at max depthEmbedded notes: pgvector semantic search across campaign findings
Configuration
Env Var | Default | Description |
|
| PostgreSQL connection string |
|
| Database schema name |
|
| Max parallel running steps |
|
| Minutes before a stuck step is reset |
|
| LiteLLM proxy URL (for planner) |
| LiteLLM API key | |
|
| Model for the planner LLM |
|
| Agent runtime API |
Development
uv sync
uv run pytest
uv run ruff check .
uv run mypy src testsLicense
GPL-3.0-or-later. See LICENSE.
Available Tools
21 toolsabort_branchA
Early return from an ancestor step, skipping the rest of its branch.
Use when you discover that an entire branch of reasoning is pointless — not just your step, but the ancestor that initiated it.
The target step completes with your output (it doesn't fail). The target's parent (the requestor) sees the result and decides what to do next.
Args: target_id: The ancestor step to return from. output: The result for the target step (e.g. "Approach debunked by X"). reason: Why this branch is untenable. Saved as a campaign note. step_id: Your step ID. Inferred from session if omitted.
Returns: List of skipped step IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | Yes | ||
| output | Yes | ||
| reason | Yes | ||
| step_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. Discloses that target step doesn't fail but completes, reason saved as note, and returns list of skipped step IDs. Good transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a few sentences and an Args list. It's front-loaded with core purpose. Only minor inefficiency: the Args list could be slightly tighter, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (branch abort with ancestor) and has an output schema (return value). Description covers the return type ('List of skipped step IDs') and behavioral nuances. Sufficiently complete given the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an Args section that explains each parameter's purpose (target_id, output, reason, step_id). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it aborts an ancestor step, skipping its branch. It uses specific verb+resource ('abort branch') and distinguishes from siblings like 'fail_step' and 'complete_step' because it completes the ancestor with output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: when an entire branch of reasoning is pointless. Explains behavior (target completes with output, parent decides). Lacks explicit when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_noteA
Record a noteworthy finding during step execution.
Notes are embedded for semantic search across the campaign.
Args: campaign_id: Campaign UUID. content: What you found. Be specific. tags: Optional tags for filtering (e.g. ["finding", "citation"]).
Returns: Note ID and any similar existing notes.
Next: Continue your work. Call complete_step when done.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| content | Yes | ||
| tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the return (Note ID and similar notes) and mentions semantic search integration. However, it does not clarify if the tool is only usable during active step execution or what happens if called outside that context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a front-loaded summary, followed by parameter details, return info, and next steps. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and presence of an output schema, the description adequately covers purpose and parameters. However, it lacks explicit prerequisites (e.g., must be within a step) and does not clarify relationship to sibling tools like provide_input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides detailed parameter descriptions (e.g., 'Campaign UUID', 'What you found. Be specific.', 'Optional tags for filtering (e.g. ["finding", "citation"])'), adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Record a noteworthy finding during step execution' with a specific verb (record) and resource (note), and distinguishes from sibling tools like get_notes and search_notes by focusing on creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some workflow context (e.g., 'Next: Continue your work. Call complete_step when done.') but does not explicitly state when to use this tool over alternatives like provide_input or fail_step. No exclusions or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_campaignC
Cancel a campaign. All pending steps are skipped.
Args: id: Campaign UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that pending steps are skipped, but lacks details on reversibility, authorization needs, or side effects. With no annotations, the description should provide more behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with no redundant information. Two sentences plus a clear argument description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description omits important mutation aspects like reversibility, permission requirements, and impact on other campaigns. Siblings like pause_campaign suggest alternative behaviors, but no comparison is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds that 'id' is a Campaign UUID, which is not in the schema. However, it does not describe valid UUID format or where to obtain it. Schema coverage is 0%, so minimal compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it cancels a campaign and notes that pending steps are skipped. This verb+resource combination distinguishes it from pause_campaign or abort_branch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like pause_campaign or abort_branch. The description does not mention prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_successA
Evaluate whether a campaign has met its typed success contract.
A campaign's success contract (success_metric,
benchmark_command, scope, max_iterations) is set at
creation time by templates like autoresearch. This tool gives
the planner / coordinator a single scalar decision:
met=True— contract satisfied; coordinator should mark the campaigndone.met=False— keep iterating, or escalate if budget exhausted.iterations_used— count of DONE atomic steps on this campaign so far. Useful for comparing againstmax_iterations.metric_value— the most recently recorded metric fromcampaign_notestaggedmetric:<success_metric>(best-effort parse; see below).
How the metric is discovered. The runner / worker agents emit a note of the form::
add_note(campaign_id, f"metric={value}", tags=["metric:<name>"])on every benchmark run. check_success scans the most recent
such note, extracts the float after =, and compares it against
success_metric_threshold if set via steer_campaign(strategy=...).
In v0.3 we only surface the most-recent value — the planner
decides whether it's "good enough". A future revision may wire a
numeric threshold column.
Args: id: Campaign UUID.
Returns:
{met, metric_value, iterations_used, max_iterations, success_metric, notes_checked, reason}
``reason`` is a short string explaining the decision — useful
both for humans looking at logs and for the planner's own
chain-of-thought.A campaign without a success contract returns
{met: False, reason: "no_success_metric_configured"}.
Next: if met is True, call cancel_campaign(id) or
steer_campaign(id, "wrap up"). If False and
iterations_used >= max_iterations, escalate via the
notification channel.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the tool's behavior: it scans notes for the metric, extracts the value, compares against the threshold, and notes limitations (only most-recent value, future revisions). This exceeds typical transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections, bullet points, and clear examples. Every sentence adds value, explaining the metric discovery, return fields, and next steps. It is comprehensive without being overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter) and presence of an output schema (though not shown), the description fully covers the return values, decision logic, and context for the coordinator. It leaves no gaps for a standard use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage for the single parameter 'id'. The description adds 'Campaign UUID', which is minimally sufficient but clear. It compensates for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool evaluates whether a campaign has met its success contract, with a specific verb 'check' and resource 'success contract'. It distinguishes itself from sibling tools like get_campaign or steer_campaign by focusing on the scalar decision for the coordinator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool (to check contract satisfaction before marking done or iterating) and what to do next (call cancel_campaign or steer_campaign if met, escalate if iterations exhausted). It also explains the context for the planner.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_stepA
Mark your step as done with a summary of what you accomplished.
Args:
step_id: Your step ID. Inferred from $SORTIE_STEP_ID if unset.
summary: What you did and what you found. This becomes the step
output visible to downstream steps.
Returns: Confirmation. If the step was already skipped (branch abort),
returns {status: "skipped"} — your output is recorded for audit.
Returns {status: "stale_claim"} if a zombie-reset already
stole your claim — stop working.
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | No | ||
| summary | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It covers the main action, the effect on the step, and two important edge cases (skipped results in audit recording, stale_claim instructs to stop working). It does not mention reversibility or side effects, but the coverage is good.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence summary, followed by an Args section and a Returns section. No unnecessary words or repetition. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, parameters, and return behavior including edge cases. Given that an output schema exists, the description does not need to detail return values fully. However, it could mention typical usage sequencing relative to other step lifecycle tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must fully explain the parameters. It does so effectively: step_id is described as 'Your step ID. Inferred from $SORTIE_STEP_ID if unset.' and summary as 'What you did and what you found. This becomes the step output visible to downstream steps.' This adds essential meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb+resource statement: 'Mark your step as done with a summary of what you accomplished.' This directly communicates the tool's function and distinguishes it from siblings like fail_step or abort_branch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that step_id can be inferred from the environment variable and describes special return cases (skipped, stale_claim). However, it does not explicitly state when to use this tool versus alternatives like fail_step or abort_branch, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaignA
Create a new campaign for long-running, multi-step work.
Args:
goal: What this campaign should accomplish.
name: Short name for display. Auto-generated if omitted.
channel: Discord channel for notifications.
priority: urgent / high / normal / low / background.
max_depth: Max nesting depth for subtasks (default 4).
token_budget: Optional token limit. NULL = unlimited.
dry_run: If true, create in paused status for review.
success_metric: Short metric name emitted by the verifier /
benchmark (e.g. "accuracy_at_1k"). Paired with
benchmark_command. Leave NULL for free-form campaigns.
benchmark_command: Shell / Python invocation that produces a
JSON line with the metric value. Metadata only — the
runner does not execute it; worker steps do.
scope: Freeform identifier narrowing the benchmark
(e.g. "chapter-01", "test_subset_A").
max_iterations: Hard cap on autoresearch-style loops. NULL
means open-ended (planner decides).
Returns: Campaign ID, name, status, next_action_at.
Next: Use get_campaign(id) to check progress, or steer_campaign(id, guidance) to adjust.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| name | No | ||
| channel | No | ||
| priority | No | normal | |
| max_depth | No | ||
| token_budget | No | ||
| dry_run | No | ||
| success_metric | No | ||
| benchmark_command | No | ||
| scope | No | ||
| max_iterations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description explains key behaviors: dry_run creates in paused status, benchmark_command is metadata-only, and defaults for several parameters. It does not mention limitations like rate limits or auth needs, but covers main traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a summary line, bulleted Args with concise explanations, a Returns line, and a Next line. Every sentence adds value with zero redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, 1 required, and an output schema, the description covers all aspects: parameter defaults, behaviors, return values, and next steps. It is comprehensive for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains each of the 11 parameters, including defaults, nullability, and semantics (e.g., 'benchmark_command: Metadata only — the runner does not execute it'). This far exceeds minimal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new campaign for long-running, multi-step work,' using a specific verb and resource. It distinguishes from sibling tools like steer_campaign by noting follow-up actions, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides follow-up guidance ('Next: Use get_campaign... or steer_campaign...'), but does not explicitly state when to use this tool versus alternatives like abort_branch or spawn_and_continue. It is clear but lacks exclusionary language.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fail_stepA
Report that you cannot complete your step.
Args:
step_id: Your step ID. Inferred from $SORTIE_STEP_ID if unset.
error: What went wrong and why you can't continue.
Returns: Whether the step can be retried or has failed permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | No | ||
| error | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that step_id can be inferred from an environment variable and that the return indicates retryability or permanent failure. It does not mention side effects or destructive nature, but is adequate for a step failure report.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a front-loaded purpose, followed by a structured Args and Returns section. Every sentence is informative and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers both parameters, the return value, and environment variable inference. Given the presence of an output schema (which may detail return values), this is sufficiently complete. It could mention prerequisites or side effects, but is solid overall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It explains both parameters: step_id (your step ID, inferred from env) and error (what went wrong), and also describes the return value. This is excellent semantic addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Report that you cannot complete your step', using a specific verb and resource. It distinguishes itself from siblings like complete_step (success) and abort_branch (branch-level abort).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a step cannot be completed. While it does not explicitly list alternatives, the context of siblings and the purpose make it clear. A slight improvement would be an explicit when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaignA
Get full campaign state: goal, strategy, progress, step tree, recent notes.
Sets last_reported_at so next call only returns new activity.
Args: id: Campaign UUID.
Returns: Full campaign state with steps and recent notes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral trait: sets last_reported_at to filter future calls. No annotations exist, so description carries full burden. Lacks details on error handling or auth, but sufficient for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is short, front-loaded with purpose, then side effect, then parameter and return info. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, side effect, parameter format, and return summary. Output schema exists so return details not needed. Could mention prerequisite (campaign exists), but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter 'id' is described as 'Campaign UUID', which adds meaning beyond the raw schema (type string). With 0% schema coverage, description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get full campaign state' and lists specific fields (goal, strategy, progress, step tree, recent notes). Distinguishes from siblings like list_campaigns (summary) and get_notes (notes only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes side effect of setting last_reported_at, implying use for tracking new activity. Does not explicitly mention when not to use or compare with alternatives like get_updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_contextA
Get campaign context for the step you're executing.
Upstream outputs are returned as previews (head + tail + total
char count) so the context bundle stays small. Call
read_step_output(<id>) when you need the full body of a specific
upstream output.
Args:
step_id: Your step ID. Inferred from $SORTIE_STEP_ID if unset.
Returns: Campaign goal, your task, upstream output previews, notes.
Next: Do your work, then call complete_step(summary) or
fail_step(error).
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It discloses that upstream outputs are previews (head + tail + total char count) to keep context small, and step_id can be auto-inferred from environment variable. Behavior is fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections (description, Args, Returns, Next) and is concise without wasted words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of output schema, the description covers return components, workflow context, and next steps, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter step_id is explained beyond the schema: it can be inferred from $SORTIE_STEP_ID if unset. This adds meaning, compensating for 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets campaign context for the executing step, with a specific verb and resource. It distinguishes itself from sibling tools like read_step_output by prefacing output previews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use the tool (get context for your step), prescribes alternatives (call read_step_output for full body), and provides next steps (complete_step or fail_step).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notesB
List notes filtered by tag or step.
Args: campaign_id: Campaign UUID. tags: Filter by tags (OR match). step_id: Filter by step ID.
Returns: Matching notes.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| tags | No | ||
| step_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it lists notes, but does not disclose whether it is read-only, if there are pagination limits, ordering, or what happens when no filters match. This is insufficient for a safe and correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a single purpose statement and a structured parameter list. Every sentence adds value, and the purpose is front-loaded. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 parameters, 1 required) and the presence of an output schema, the description covers the basic behavior and parameter mapping. However, it does not clarify how filters combine (AND/OR) or mention ordering/pagination, which are important for correct usage. It is minimally complete but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It explains that 'tags' is an OR match and 'step_id' filters by step, and identifies 'campaign_id' as a UUID. This adds meaning beyond the schema titles, but does not clarify the expected format for tags (array) or that step_id is an integer. The description provides moderate added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('List notes') and resource ('notes'), and specifies that it can be filtered by 'tag or step'. This is a specific verb+resource combination that distinguishes it from similar tools like 'search_notes' and 'add_note', though it does not explicitly differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives like 'search_notes' or 'get_campaign'. It lacks explicit context about when to prefer this tool or any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_updatesA
Get delta since last report: completed steps, failures, new notes.
Args: id: Campaign UUID. Omit for updates across all active campaigns.
Returns: Recent completions, failures, and notes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It says 'Get delta since last report' and lists return types, but it does not disclose whether the tool is read-only, idempotent, or whether calling it resets the delta. The description lacks details on side effects, rate limits, or authentication needs, making it only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences for the purpose and one line each for args and returns. Every sentence adds value with no redundancy. The structure front-loads the core purpose, then provides parameter details, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single optional parameter and an output schema (true), the description adequately covers the parameter and return summary. However, it does not explain what 'since last report' means mechanistically (e.g., is it since last invocation or a separate report event?), and it lacks guidance on concurrency or error conditions. This leaves some ambiguity for a complex campaign system.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains that 'id' is a Campaign UUID and that omitting it gets updates across all active campaigns. This adds clear semantics beyond the bare schema definition, which only shows the parameter is optional. The explanation is sufficient for an LLM to use the parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 'delta since last report' including completed steps, failures, and new notes. It specifies the resource (updates) and the action (get). This distinguishes it from siblings like get_campaign (full info) and get_notes (all notes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on the 'id' parameter, saying to omit it for updates across all active campaigns. However, it does not explicitly state when to use this tool versus alternatives like get_campaign or list_campaigns, nor does it give prerequisites. This leaves the agent without clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
heartbeatA
Report that you're still alive and keep your claim + leases fresh.
Long-running agents should call this every few minutes. The runner's
reset_zombies sweep uses heartbeat_at to distinguish healthy
workers from crashed ones. If you hold resource leases (see
requires_locks on your step), the lease expires_at is bumped
by extend_leases_sec from now so the lease reaper won't steal
them out from under you.
Returns {"status": "stale_claim"} if your claim token no longer
matches — this means the zombie reset already repossessed your step.
Stop working immediately if you see that: another runner is
about to pick your step up.
Args:
step_id: Your step ID. Inferred from $SORTIE_STEP_ID if unset.
extend_leases_sec: Seconds of TTL to give every lease you hold.
Default 900 (15 min). Set to 0 for heartbeat-only.
Returns: {"status": "ok" | "stale_claim", "step_id": N}.
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | No | ||
| extend_leases_sec | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral transparency. It explains the zombie reset sweep, lease extension mechanism, return value semantics (ok vs stale_claim), and the consequence of a stale claim. This exceeds expectations for a heartbeat tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a lead sentence, followed by paragraphs on zombie reset, lease renewal, and return values. While slightly verbose, every sentence adds value. Minor trimming could improve conciseness, but current structure is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (leases, zombie reset, claim management) and that an output schema exists, the description covers all necessary aspects: calling frequency, parameter defaults, return behavior, and error handling. It is self-contained and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains step_id can be inferred from $SORTIE_STEP_ID and provides the default for extend_leases_sec (900) along with its purpose. This adds essential meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Report that you're still alive and keep your claim + leases fresh,' which is a specific verb-resource pair. It clearly defines the tool's role for long-running agents and distinguishes itself from siblings like complete_step or fail_step by focusing on liveness and lease renewal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that 'Long-running agents should call this every few minutes,' providing clear timing guidance. It also instructs to 'Stop working immediately' upon receiving a stale_claim response. While it doesn't explicitly exclude other tools, the unique purpose of heartbeat makes alternative uses obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsA
List campaigns, optionally filtered by status.
Args: status: Filter by status (active/paused/done/failed/cancelled). Omit for all.
Returns: Array of {id, name, status, priority, progress}.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It discloses the return format (Array of objects with id, name, status, priority, progress) and the optional filter. It does not mention any side effects or safety concerns, but as a read operation, this is acceptable. The behavior is clearly described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences plus a short Args/Returns explanation. It is front-loaded with the core purpose and provides necessary details without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential aspects: purpose, parameter semantics, and return format. With no output schema provided in the input, the description's explicit mention of the return fields (id, name, status, priority, progress) ensures completeness. The sibling tools provide context for when to use this vs. others.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema description coverage, the description adds significant value by listing the allowed values for 'status' (active/paused/done/failed/cancelled) and explaining that omitting returns all. This fully compensates for the lack of schema descriptions and makes the parameter's usage clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'List campaigns' with optional filtering by status. It is specific about the resource and action, but does not explicitly differentiate from sibling tools like 'get_campaign' (which likely returns a single campaign) or other campaign-related tools. The distinction is implied by the verb 'list' vs 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool lists campaigns optionally filtered by status, implying its use case. However, it does not explicitly state when not to use it or mention alternatives (e.g., 'get_campaign' for a single campaign, or other tools for mutations). Usage guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_campaignA
Pause a campaign. Running steps finish but no new ones start.
Args: id: Campaign UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that running steps finish but no new ones start. However, it omits details on resumability, permissions, or side effects. Still, the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences and an args section. No superfluous information; every word adds value. Well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 1 parameter and an output schema, the description covers the essential behavior and parameter meaning. However, it could mention resumability or link to related tools like 'resume_campaign'. Still, fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning by stating 'id: Campaign UUID', clarifying the parameter's purpose and type beyond the schema's minimal 'Id' label. This partially compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('pause'), the resource ('campaign'), and the behavioral effect ('running steps finish but no new ones start'). It effectively distinguishes the tool from siblings like 'cancel_campaign' and 'resume_campaign'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for temporarily halting a campaign while allowing current steps to complete, but does not explicitly state when to use versus alternatives like 'cancel_campaign'. No direct mention of when-not or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provide_inputA
Provide input to a step that is waiting for a human decision.
Workers call request_input when they need guidance. This tool
unblocks them by supplying the answer and returning the step to
the ready queue.
Args: id: Campaign UUID. step_id: The step waiting for input. answer: Your decision / the information the agent asked for.
Returns: Updated step status.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| step_id | Yes | ||
| answer | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description explains it unblocks steps and returns to ready queue. Lacks details on side effects, auth, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, front-loaded with purpose, then param descriptions. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, description minimally mentions return value. Covers core workflow but parameter details are somewhat thin given zero schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description adds meaning for each param (Campaign UUID, step waiting, answer). Good but could elaborate on format/constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool provides input to a step waiting for human decision. Uses specific verb and resource, and distinguishes from sibling 'request_input'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions when to use (when workers call request_input) and what it accomplishes. Does not list alternatives but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_step_outputA
Read a range from a step's output (or input) field.
Counterpart to the preview-plus-seek contract in get_my_context:
when an upstream preview is truncated, call this with the
step_id from the preview to pull the full (or a slice of) text.
Args:
step_id: The step whose output you want to read. Does not have
to be your own step — any step in the same campaign's DAG
is readable.
offset: 0-indexed character offset to start from.
limit: Max characters to return (default 8000, capped at 32000
to avoid blowing the agent's context).
field: "output" (default) or "input".
Returns::
{
"step_id": N,
"field": "output",
"content": "...",
"offset": 0,
"limit": 8000,
"total_chars": N,
"has_more": bool, # True if offset+limit < total_chars
}
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | Yes | ||
| offset | No | ||
| limit | No | ||
| field | No | output |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that any step in the campaign DAG is readable, explains the `limit` cap (32000), and describes the return format with `has_more`. However, it doesn't mention authentication or rate limits, which are implied but not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-line purpose, a usage paragraph, concise bulleted Args, and a Returns block. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no nested objects, and a provided output schema (described in text), the description covers purpose, usage, parameters, and return format. It ties into the sibling tool's contract, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description fully explains each parameter: `step_id` (any campaign step), `offset` (0-indexed), `limit` (default and cap), `field` (default 'output' or 'input'). This adds essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read a range from a step's ``output`` (or ``input``) field', specifying a verb, resource, and distinguishing from the sibling `get_my_context` by referencing the preview-seek contract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'when an upstream preview is truncated, call this with the ``step_id`` from the preview to pull the full text'. It references the sibling tool as the counterpart, but doesn't exhaustively list all when-not situations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_inputA
Pause your step and ask the coordinator for a decision.
Use when you hit a fork that requires human judgement — e.g. which approach to take, whether to proceed with a risky action, or clarification on ambiguous requirements.
Your step pauses until the coordinator calls provide_input.
When it resumes, the answer will be in your step's input field
(visible via get_my_context).
Args:
step_id: Your step ID. Inferred from $SORTIE_STEP_ID if unset.
question: What you need decided. Be specific.
partial_output: Optional summary of work done so far.
Returns: Confirmation that the step is paused.
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | No | ||
| question | No | ||
| partial_output | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly states the step pauses, resumes when provide_input is called, and the answer appears in the input field. Minor omission: does not discuss error conditions or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: purpose first, then usage guidelines, then behavioral explanation, then parameter details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and no additional complexities, the description covers the tool's behavior, parameters, and return value adequately. It also references the counterpart tool (provide_input) and explains the step's lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description thoroughly explains each parameter: step_id is inferred from environment, question should be specific, and partial_output is optional. This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool pauses the step and asks for a decision. It specifies the resource (coordinator) and action, and distinguishes from siblings by highlighting human judgment scenarios.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use (forks requiring human judgment) with examples, and implies when not to use (cases without ambiguity). It provides clear context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_campaignB
Resume a paused campaign.
Args: id: Campaign UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as idempotency, side effects, required authorization, or error conditions. Only the basic action is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one sentence and a parameter line. No redundant information is present, though it lacks depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and existence of an output schema, the description does not explain prerequisites, error states, or return behavior. It leaves the agent without important context for robust usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds 'Campaign UUID' to the parameter, providing semantic meaning beyond the schema's type string. However, schema coverage is 0%, and the description is minimal, doing little to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Resume a paused campaign' with a specific verb and resource. It distinguishes from sibling tools like pause_campaign and cancel_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., whether the campaign must be paused, or what happens if it's not). No exclusion or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesA
Semantic search across campaign notes.
Args: query: What to search for. campaign_id: Scope to a specific campaign. Omit for all. top_k: Number of results (default 5).
Returns: Ranked results with content and tags. Each entry is
annotated with "mode": "semantic" when cosine ranking was
used, or "mode": "recency" when embeddings were disabled /
unavailable and the server fell back to most-recent-first
listing.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| campaign_id | No | ||
| top_k | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses behavioral traits: fallback to recency when embeddings disabled, return format including 'mode' field. This goes beyond schema and adds significant value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficiently structured with Args and Returns sections. Every sentence provides needed information without redundancy. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects: search semantics, parameter explanations, fallback behavior, return format. Given tool complexity and no output schema shown, description is self-contained and complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description carries full burden. It explains each parameter's purpose and clarifies default behavior (e.g., omitting campaign_id searches all). Adds meaning beyond bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'semantic search across campaign notes', specifying verb and resource. Distinguishes from sibling 'get_notes' which likely retrieves notes without semantic ranking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use each parameter: query for search, campaign_id to scope or omit for all, top_k for result count. Also describes fallback behavior when embeddings unavailable, guiding on expected behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spawn_and_continueA
Split your work: spawn subtasks and a continuation that resumes after they complete.
Use when you discover you need additional work done before you can finish. The DAG rewires automatically — your downstream dependents will wait for the continuation, not your partial result.
Args: step_id: Your step ID. partial_output: What you've done so far. subtasks: List of {action, agent?} dicts for work that needs doing. continuation: Action description for the step that resumes your work after subtasks complete.
Returns: IDs of created subtasks and the continuation step.
Note: This tool is hidden at max depth — you must complete atomically.
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | Yes | ||
| partial_output | Yes | ||
| subtasks | Yes | ||
| continuation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It explains automatic DAG rewiring and that downstream dependents wait for the continuation. Also notes the tool is hidden at max depth. These are important behavioral traits beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately lengthy but well-structured with Args, Returns, and a Note. It is front-loaded with the main purpose and each sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of annotations, the description covers purpose, usage, behavior, parameters, and return values. It also mentions the hidden constraint. An output schema exists, so return explanation is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds clear meanings for each parameter: step_id, partial_output, subtasks (structuring as dicts), and continuation. This adds significant value over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Split your work: spawn subtasks and a continuation' with a specific verb and resource. It distinguishes from siblings like `complete_step` or `fail_step` by focusing on task decomposition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use when you discover you need additional work done before you can finish' which is explicit usage guidance. It does not mention when not to use or alternatives, but the context with siblings implies differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steer_campaignB
Change campaign direction. Updates strategy for the planner.
Args: id: Campaign UUID. guidance: New direction, constraints, or focus areas.
Returns: Updated strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| guidance | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description lacks detail on side effects, permissions, or data mutability. It only states it changes direction and updates strategy, which is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is short with two sentences and an Args section. It is concise and front-loaded, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two simple parameters and an output schema, the description covers the basics. However, lacks detail on behavioral context and how it interacts with sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds basic meaning to parameters (id as UUID, guidance as new direction/constraints), but nothing beyond a brief one-liner. Schema coverage is 0%, so description provides some value but is still sparse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'change' and 'updates' with the resource 'campaign direction' and 'strategy'. It distinguishes from sibling tools like create_campaign or cancel_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives like pause_campaign or resume_campaign. No mention of prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
21 tool updates
v0.2.0- First observed
abort_branch - First observed
add_note - First observed
cancel_campaign - First observed
check_success - First observed
complete_step - First observed
create_campaign - First observed
fail_step - First observed
get_campaign - First observed
get_my_context - First observed
get_notes - First observed
get_updates - First observed
heartbeat - First observed
list_campaigns - First observed
pause_campaign - First observed
provide_input - First observed
read_step_output - First observed
request_input - First observed
resume_campaign - First observed
search_notes - First observed
spawn_and_continue - First observed
steer_campaign
TDQS
Each tool targets a distinct action in the campaign lifecycle (e.g., create_campaign vs. cancel_campaign, abort_branch vs. spawn_and_continue). While some tools like get_campaign and get_updates overlap in scope, their purposes (full state vs. delta) are clearly differentiated.
All tools follow a consistent verb_noun pattern in snake_case (e.g., abort_branch, create_campaign, complete_step). The naming is predictable and makes the function of each tool immediately understandable.
21 tools is slightly high but justified for a comprehensive workflow orchestration system. Each tool serves a clear purpose in campaign management, step execution, branching, and monitoring. No obvious bloat, though a few tightly related tools (e.g., get_notes, search_notes) could potentially be merged.
The tool set covers the full lifecycle of campaigns and steps: creation, cancellation, pausing, resumption, steering, step execution with branching, input/decision handling, heartbeat monitoring, and comprehensive state retrieval. There are no obvious gaps for the intended domain of long-running multi-step work.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Work management where AI agents are first-class members: tasks, projects, memory over hosted MCP
Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for AI agents to manage ad campaigns across Google, Meta, LinkedIn, Microsoft, Reddit, TikTok, and more2127817MIT
- AlicenseNot gradedqualityAmaintenanceServer-enforced workflow discipline for AI agents. An MCP server providing persistent work items, dependency graphs, quality gates, and actor attribution. Schemas define what agents must produce — the server blocks the call if they don't. Works with any MCP-compatible client.205MIT
- AlicenseNot gradedqualityCmaintenanceA campaign and task management MCP server for AI coding assistants, enabling dependency tracking, acceptance criteria, testing strategies, and progress monitoring for projects.1MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that enables AI agents to run a deterministic orchestration loop with decomposition, subagent execution, and review feedback across multiple LLM backends.55MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/retospect/sortie-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server