sortie-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LITELLM_KEY | No | LiteLLM API key | |
| LITELLM_URL | No | LiteLLM proxy URL (for planner) | http://localhost:4000 |
| DATABASE_URL | No | PostgreSQL connection string | postgresql://localhost/sortie |
| SORTIE_SCHEMA | No | Database schema name | sortie |
| OPENCLAW_RUNTIME_URL | No | Agent runtime API | http://localhost:3000 |
| SORTIE_PLANNER_MODEL | No | Model for the planner LLM | qwen3.5:9b |
| SORTIE_MAX_CONCURRENT | No | Max parallel running steps | 4 |
| SORTIE_ZOMBIE_TIMEOUT | No | Minutes before a stuck step is reset | 30 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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
Returns: Campaign ID, name, status, next_action_at. Next: Use |
| 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}. |
| 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. |
| 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. |
| steer_campaignB | Change campaign direction. Updates strategy for the planner. Args: id: Campaign UUID. guidance: New direction, constraints, or focus areas. Returns: Updated strategy. |
| pause_campaignA | Pause a campaign. Running steps finish but no new ones start. Args: id: Campaign UUID. |
| resume_campaignB | Resume a paused campaign. Args: id: Campaign UUID. |
| provide_inputA | Provide input to a step that is waiting for a human decision. Workers call Args: id: Campaign UUID. step_id: The step waiting for input. answer: Your decision / the information the agent asked for. Returns: Updated step status. |
| check_successA | Evaluate whether a campaign has met its typed success contract. A campaign's success contract (
How the metric is discovered. The runner / worker agents emit a note of the form:: on every benchmark run. Args: id: Campaign UUID. Returns:
A campaign without a success contract returns
Next: if |
| cancel_campaignC | Cancel a campaign. All pending steps are skipped. Args: id: Campaign UUID. |
| 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
Args:
step_id: Your step ID. Inferred from Returns: Campaign goal, your task, upstream output previews, notes. Next: Do your work, then call |
| read_step_outputA | Read a range from a step's Counterpart to the preview-plus-seek contract in 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: Returns:: |
| 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
Returns Args:
step_id: Your step ID. Inferred from Returns: |
| 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 |
| 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 |
| 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. |
| complete_stepA | Mark your step as done with a summary of what you accomplished. Args:
step_id: Your step ID. Inferred from Returns: Confirmation. If the step was already skipped (branch abort),
returns |
| fail_stepA | Report that you cannot complete your step. Args:
step_id: Your step ID. Inferred from Returns: Whether the step can be retried or has failed permanently. |
| 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 Args:
step_id: Your step ID. Inferred from Returns: Confirmation that the step is paused. |
| 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. |
| abort_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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- 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