conductorv2

Resources

Guides

Step-by-step tutorials for common Conductor use cases.

Beginner

Setting up your first MCP client

Connect any MCP-compatible AI client to Conductor in minutes.

1. Claude Code (CLI)

The fastest way — one command registers Conductor as an MCP server:

claude mcp add conductor -- npx -y @useconductor/conductor

2. Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "conductor": {
      "command": "npx",
      "args": ["-y", "@useconductor/conductor"]
    }
  }
}

3. Cursor

Open Cursor → Settings → Features → MCP Servers and paste:

{
  "conductor": {
    "command": "npx",
    "args": ["-y", "@useconductor/conductor"]
  }
}

Verify it's working

Ask your AI: “List the files in my current directory using Conductor.” If it uses the filesystem.list tool and returns a result, you're connected.

Advanced

Writing a custom plugin

Build a Jira integration as an example of the full plugin API.

External plugins live in ~/.conductor/plugins/. Each file exports a default class implementing the Plugin interface. Below is a full Jira plugin example:

~/.conductor/plugins/jira.js
// ~/.conductor/plugins/jira.js
export default class JiraPlugin {
  name = "jira";
  description = "Jira issue management";
  version = "1.0.0";

  configSchema = {
    fields: [
      { key: "baseUrl", label: "Jira base URL", type: "string", required: true },
      { key: "email", label: "Email", type: "string", required: true },
      { key: "apiToken", label: "API Token", type: "string", secret: true, required: true },
    ],
  };

  async initialize(conductor) {
    const config = await conductor.config.get("jira");
    this.client = new JiraClient(config);
  }

  isConfigured() {
    return !!this.client;
  }

  getTools() {
    return [
      {
        name: "jira.create_issue",
        description: "Create a new Jira issue",
        inputSchema: {
          type: "object",
          properties: {
            summary: { type: "string", description: "Issue title" },
            description: { type: "string", description: "Issue body" },
            project: { type: "string", description: "Project key (e.g. ENG)" },
            type: { type: "string", enum: ["Bug", "Story", "Task"], default: "Task" },
          },
          required: ["summary", "project"],
        },
        handler: async ({ summary, description, project, type }) => {
          const issue = await this.client.createIssue({ summary, description, project, type });
          return {
            content: [{ type: "text", text: `Created: ${issue.key} — ${issue.url}` }],
          };
        },
      },
    ];
  }
}

Enable and configure the plugin:

conductor plugins enable jira

Enable the plugin

conductor config setup jira

Configure credentials (stored in keychain)

conductor plugins status jira

Verify it's active

Intermediate

Deploying on a server

Run Conductor as a shared MCP server accessible over the network.

Start Conductor with HTTP transport. AI clients connect via Server-Sent Events (SSE) instead of stdio.

terminal / conductor.service
# Start with HTTP transport
conductor mcp start --transport http --port 3000

# Or as a systemd service
# /etc/systemd/system/conductor.service
[Unit]
Description=Conductor MCP Server
After=network.target

[Service]
ExecStart=/usr/local/bin/conductor mcp start --transport http --port 3000
Restart=always
User=conductor
Environment=CONDUCTOR_LOG_LEVEL=info

[Install]
WantedBy=multi-user.target

Configure your AI client to connect remotely:

claude_desktop_config.json
{
  "mcpServers": {
    "conductor": {
      "url": "http://your-server:3000/sse",
      "transport": "sse"
    }
  }
}

Security note

When running over HTTP, use a reverse proxy (nginx, Caddy) with TLS and add authentication. Conductor's HTTP endpoints are not authenticated by default.