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.
{
"mcpServers": {
"conductor": {
"command": "npx",
"args": ["-y", "@useconductor/conductor"]
}
}
}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 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.pemHTTP endpoints
| Method | Path | Description |
|---|---|---|
GET | /health | Health check — returns status, uptime, version |
GET | /tools | List all registered tools with schemas |
POST | /tools/call | Call a tool by name with arguments |
GET | /plugins | List loaded plugins and their status |
GET | /events | SSE stream — real-time tool events |
POST | /webhooks | Incoming webhook trigger endpoint |
GET | /metrics | Prometheus-format metrics |
GET | /audit | Recent audit log entries (JSON) |
Calling the HTTP API
# 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/healthimport { 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.
# 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
{
"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.
# /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;
}
}