conductorv2

Core

Transport modes

stdio for local clients. HTTP for remote access, shared servers, and webhooks. Same tools either way.

stdio (default)

Your AI client spawns a conductor mcp start subprocess and communicates over stdin/stdout. The client owns the process lifecycle — Conductor starts when the client starts, exits when the client exits. This is the default for all desktop AI clients.

claude_desktop_config.json (or equivalent)
{
  "mcpServers": {
    "conductor": {
      "command": "npx",
      "args": ["-y", "@useconductor/conductor"]
    }
  }
}
Process modelOne process per client session. Exits with the client.
ConcurrencySingle client only. Not shareable.
AuthNone needed — process is owned by the client user.
WebhooksNot supported (no inbound HTTP port).

HTTP

Conductor binds to a TCP port and exposes MCP over HTTP + SSE. Multiple AI clients can connect simultaneously. Use this for remote servers, team deployments, CI/CD pipelines, and anywhere you need webhooks.

start commands
# Start on default port 3000
conductor mcp start --transport http

# Custom port
conductor mcp start --transport http --port 8080

# With TLS (provide cert + key)
conductor mcp start --transport http --port 443 \
  --tls-cert /etc/conductor/cert.pem \
  --tls-key  /etc/conductor/key.pem
Process modelLong-running daemon. Survives client disconnects.
ConcurrencyUnlimited concurrent clients.
AuthBearer token (set in config or CONDUCTOR_AUTH_TOKEN env var).
WebhooksSupported — incoming HTTP triggers available on /webhooks.
EventsServer-Sent Events stream at /events for real-time tool notifications.

HTTP endpoints

MethodPathDescription
GET/healthHealth check — returns status, uptime, version
GET/toolsList all registered tools with schemas
POST/tools/callCall a tool by name with arguments
GET/pluginsList loaded plugins and their status
GET/eventsSSE stream — real-time tool events
POST/webhooksIncoming webhook trigger endpoint
GET/metricsPrometheus-format metrics
GET/auditRecent audit log entries (JSON)

Calling the HTTP API

curl
# List available tools
curl http://localhost:3000/tools

# Call a tool
curl -X POST http://localhost:3000/tools/call \
  -H "Content-Type: application/json" \
  -d '{"name":"filesystem.read","arguments":{"path":"./README.md"}}'

# Health check
curl http://localhost:3000/health
TypeScript SDK
import { ConductorClient } from "@useconductor/sdk";

const client = new ConductorClient({
  transport: "http",
  url: "http://localhost:3000",
  // Optional auth token
  token: process.env.CONDUCTOR_TOKEN,
});

await client.connect();
const result = await client.callTool("filesystem.read", {
  path: "./package.json",
});

Server-Sent Events

Subscribe to the /events endpoint to receive real-time notifications for every tool call. Useful for dashboards, logging pipelines, and CI/CD systems.

SSE stream
# Subscribe to events (Server-Sent Events)
curl -N http://localhost:3000/events

# Response stream:
# data: {"type":"tool.start","data":{"tool":"shell.exec","id":"abc123"}}
# data: {"type":"tool.complete","data":{"tool":"shell.exec","id":"abc123","ms":142}}

Authentication

For HTTP transport, enable bearer token auth to restrict access. Set the token in config or the CONDUCTOR_AUTH_TOKEN env var. All requests must include Authorization: Bearer <token>.

~/.conductor/config.json
// ~/.conductor/config.json
{
  "server": {
    "transport": "http",
    "port": 3000,
    "auth": {
      "type": "bearer",
      "token": "your-secret-token-here"
    }
  }
}

Reverse proxy (nginx)

Put Conductor behind nginx for TLS termination, access control, and rate limiting. Set proxy_buffering off — SSE requires it.

nginx.conf
# /etc/nginx/sites-available/conductor
server {
  listen 443 ssl;
  server_name conductor.yourcompany.com;

  ssl_certificate     /etc/letsencrypt/live/.../fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/.../privkey.pem;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    # Required for SSE
    proxy_buffering off;
    proxy_cache off;
  }
}