The Model Context Protocol (MCP) is an open specification that lets large-language-model (LLM) clients discover and call tools (functions) that run on your computer. Conductor publishes an open-source MCP server that exposes every Conductor API endpoint as an MCP tool. This means you can ask an AI assistant such as Claude Desktop, Cursor, or OpenAI Agents to read or write QuickBooks Desktop data on your behalf. For example:
  • “How many invoices did we issue last week?”
  • “Create a new customer called ACME Inc. with address 123 Main St”

Getting started

Run the server locally with npx:
export CONDUCTOR_SECRET_KEY="sk_conductor_..."
npx -y conductor-node-mcp@latest
Then pick your client below to connect. The assistant will automatically chain the MCP tools (list_api_endpointsget_api_endpoint_schemainvoke_api_endpoint) to fulfil your requests.

Which client should I use?

  • Cursor – best for developers working inside a repo/IDE with inline tool usage and project/global config files.
  • Claude Desktop – great general‑purpose client on macOS/Windows; easy JSON config and strong tool orchestration.
  • Claude (web) – use when you want quick remote access via a URL without local config files.
  • ChatGPT (Connectors) – available in certain plans; currently expects search/fetch tools and may need a wrapper for full compatibility.

Client setup

Cursor

Cursor supports MCP via project and global config files and works with stdio or remote HTTP/SSE transports. Config files
  • Project: .cursor/mcp.json
  • Global: ~/.cursor/mcp.json
Local (stdio) example
.cursor/mcp.json
{
  "mcpServers": {
    "conductor_node_api": {
      "command": "npx",
      "args": [
        "-y",
        "conductor-node-mcp",
        "--client=cursor",
        "--tools=dynamic"
      ],
      "env": { "CONDUCTOR_SECRET_KEY": "sk_conductor_..." }
    }
  }
}
Remote (HTTP) example
~/.cursor/mcp.json
{
  "mcpServers": {
    "conductor_node_api": {
      "url": "http://localhost:3000"
    }
  }
}
Then launch the server with npx -y conductor-node-mcp --transport=http --port=3000. If your Cursor build supports auth headers in mcp.json, pass an Authorization bearer token or use the alternative header x-conductor-secret-key. Otherwise, prefer stdio or a trusted local network. See: Cursor Docs: Model Context Protocol.

Claude Desktop

Local (stdio) configuration
claude_desktop_config.json
{
  "mcpServers": {
    "conductor_node_api": {
      "command": "npx",
      "args": [
        "-y",
        "conductor-node-mcp",
        "--client=claude",
        "--tools=dynamic"
      ],
      "env": { "CONDUCTOR_SECRET_KEY": "sk_conductor_..." }
    }
  }
}
Config file locations
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\\Claude\\claude_desktop_config.json
Tip: Open it from Claude Desktop → Settings → Developer → Edit Config.

Claude (web)

Claude on the web supports connecting to remote MCP servers. Run Conductor in Remote mode (HTTP) and add it from Claude’s integrations/settings UI, then approve tool calls as needed. See: MCP Clients – modelcontextprotocol.io

ChatGPT (Connectors)

ChatGPT supports “Custom Connectors (MCP)” in Settings → Connectors. See: OpenAI Help: Connectors in ChatGPT Compatibility note
  • ChatGPT may show the error “This MCP server doesn’t implement our specification” if required tools are missing. As of September 2025, Connectors expect servers to implement tools named search and fetch. Our Conductor MCP server exposes explicit tools per endpoint or dynamic tools such as list_api_endpoints/invoke_api_endpoint, so it won’t directly satisfy that requirement without a thin wrapper server that provides search/fetch and delegates to Conductor. See the troubleshooting section in the help article for details.

Advanced options

Remote mode (HTTP)

Run the MCP server as a remote server using Streamable HTTP transport:
npx -y conductor-node-mcp --transport=http --port=3000
  • Auth via header Authorization: Bearer <token> or x-conductor-secret-key: <token>.
  • You can also use --socket to bind to a Unix socket.
Example MCP client configuration using a URL:
{
  "mcpServers": {
    "conductor_node_api": {
      "url": "http://localhost:3000",
      "headers": { "Authorization": "Bearer <auth value>" }
    }
  }
}
You can pass the same filtering and client options as URL query parameters, for example:
  • http://localhost:3000?resource=cards&resource=accounts&no_tool=create_cards
  • http://localhost:3000?client=cursor&capability=tool-name-length%3D40

Choosing the tool style

You have two options when starting the server:
  1. Explicit tools – one MCP tool per Conductor endpoint. Useful when you know exactly which operations you need and want the most accurate parameter suggestions.
  2. Dynamic tools (--tools=dynamic) – three generic tools that let the LLM search, inspect, and invoke any endpoint on demand. Helpful when you want the entire API surface in a compact form.
You can combine both approaches or filter the explicit tools for large APIs:
  • --tool=<name> – include a specific tool by name
  • --resource=<pattern> – include all tools under a resource (supports wildcards, e.g. qbd.invoices*)
  • --operation=read|write – include just read or write operations
  • --tag=<tag> – include tools by tag
  • Exclusions available via --no-tool, --no-resource, etc.
  • Use --list to preview which tools will be exposed
To browse the evolving endpoint list, see the “Available Tools” section in the MCP server README.

Capabilities & clients

Different LLM clients have different schema limitations. Pass --client=<type> so the MCP server tailors its output accordingly. Supported values: openai-agents, claude, claude-code, cursor. Fine-tune capabilities with --capability flags (comma-separated or repeated):
  • top-level-unions – enable top-level unions in tool schemas
  • valid-json – allow JSON string parsing for arguments
  • refs – enable $ref pointers in schemas
  • unions – enable anyOf union types
  • formats – enable format validations like date-time
  • tool-name-length=N – set maximum tool name length
Examples:
--client=cursor --capability=tool-name-length=40
--capability=top-level-unions --capability=tool-name-length=40
--capability=top-level-unions,tool-name-length=40