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-mcp
Or with uv:
uv add sortie-mcp
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" # default
2. Run the MCP server
sortie-mcp
# or: python -m sortie_mcp.server
The 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.runner
Add to cron for autonomous operation:
*/15 * * * * /path/to/venv/bin/sortie-runner
Architecture
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 |
|---|---|
atomic |
Single task executed by one agent |
parallel_group |
Fan-out: children run concurrently |
sequence |
Pipeline: each step depends on the previous |
for_each |
Map: apply a template to each item in a list |
Key Features
- DAG splice (
spawn_and_continue): agents can split work into subtasks + continuation - Branch abort (
abort_branch): scoped early return from an ancestor step - Skip 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 depth - Embedded notes: pgvector semantic search across campaign findings
Configuration
| Env Var | Default | Description |
|---|---|---|
DATABASE_URL |
postgresql://localhost/sortie |
PostgreSQL connection string |
SORTIE_SCHEMA |
sortie |
Database schema name |
SORTIE_MAX_CONCURRENT |
4 |
Max parallel running steps |
SORTIE_ZOMBIE_TIMEOUT |
30 |
Minutes before a stuck step is reset |
LITELLM_URL |
http://localhost:4000 |
LiteLLM proxy URL (for planner) |
LITELLM_KEY |
LiteLLM API key | |
SORTIE_PLANNER_MODEL |
qwen3.5:9b |
Model for the planner LLM |
OPENCLAW_RUNTIME_URL |
http://localhost:3000 |
Agent runtime API |
Development
uv sync
uv run pytest
uv run ruff check .
uv run mypy src tests
License
GPL-3.0-or-later. See LICENSE.
Metadata
Release files for sortie-mcp 0.1.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| sortie_mcp-0.1.13.tar.gz | 33.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sortie_mcp-0.1.13-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.3 kB
Release files / sortie_mcp-0.1.13.tar.gz
| Download URL | sortie_mcp-0.1.13.tar.gz |
|---|---|
| Size | 33.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
060fb80dca7e5fbdd343c462023dd69844cf186508acf8f14da1ed674b9722de
|
|
BLAKE2b-256 checksum How to use checksums |
1b3f0802efb97ee695ae81412868af7984e8c4fd9817b39d87f2444393e1e8bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency logRelease files / sortie_mcp-0.1.13-py3-none-any.whl
| Download URL | sortie_mcp-0.1.13-py3-none-any.whl |
|---|---|
| Size | 24.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6cea1b1be676b2e1b82529e01d52ab529e338d7758b7e5639c20113cd60398d2
|
|
BLAKE2b-256 checksum How to use checksums |
85df35466e8f5614006869b83e1499fe25bd1379d974a0296bc1b600b76568b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency logSecurity for sortie-mcp 0.1.13
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for sortie_mcp-0.1.13.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.