MCP Providers

View as Markdown

MCP providers are external services that host and serve tools via the Model Context Protocol (MCP). Data Designer uses provider configurations to establish connections to these services.

Overview

An MCP provider defines how Data Designer connects to a tool server. Data Designer supports two provider types:

Provider ClassConnection MethodUse Case
MCPProviderSSE or Streamable HTTPConnect to a pre-existing MCP server
LocalStdioMCPProviderSubprocess via stdin/stdoutLaunch an MCP server as a subprocess

When you create a ToolConfig, you reference providers by name, and Data Designer uses those provider settings to communicate with the appropriate MCP servers.

MCPProvider (Remote)

Use MCPProvider to connect to a pre-existing MCP server. Both SSE (Server-Sent Events) and Streamable HTTP transports are supported:

1import data_designer.config as dd
2from data_designer.interface import DataDesigner
3
4# SSE transport (default)
5sse_provider = dd.MCPProvider(
6 name="remote-mcp",
7 endpoint="http://localhost:8080/sse",
8 api_key="MCP_API_KEY", # Environment variable name
9)
10
11# Streamable HTTP transport
12http_provider = dd.MCPProvider(
13 name="remote-tools",
14 endpoint="https://mcp.example.com/mcp",
15 api_key="MCP_API_KEY",
16 provider_type="streamable_http",
17)
18
19data_designer = DataDesigner(mcp_providers=[sse_provider, http_provider])

MCPProvider Fields

FieldTypeRequiredDescription
namestrYesUnique identifier for the provider
endpointstrYesEndpoint URL for the remote MCP server
api_keystrNoAPI key or environment variable name
provider_typestrNoTransport type: "sse" (default) or "streamable_http"

LocalStdioMCPProvider (Subprocess)

Use LocalStdioMCPProvider to launch an MCP server as a subprocess:

1import data_designer.config as dd
2from data_designer.interface import DataDesigner
3
4mcp_provider = dd.LocalStdioMCPProvider(
5 name="demo-mcp",
6 command="python",
7 args=["-m", "my_mcp_server_module"],
8 env={"MY_SERVICE_TOKEN": "..."},
9)
10
11data_designer = DataDesigner(mcp_providers=[mcp_provider])

LocalStdioMCPProvider Fields

FieldTypeRequiredDescription
namestrYesUnique identifier for the provider
commandstrYesExecutable to run (e.g., "python", "node")
argslist[str]NoCommand-line arguments
envdict[str, str]NoEnvironment variables for the subprocess
provider_typestrNoAlways "stdio" (set automatically)

API Key Configuration

The api_key field can be specified in two ways:

  1. Environment variable name (recommended): Set api_key to the name of an environment variable (e.g., "MCP_API_KEY"). Data Designer will resolve it at runtime.

  2. Plain-text value: Set api_key to the actual API key string. This is less secure and not recommended for production.

1# Method 1: Environment variable (recommended)
2provider = dd.MCPProvider(
3 name="secure-mcp",
4 endpoint="https://mcp.example.com/sse",
5 api_key="MCP_API_KEY", # Will be resolved from environment
6)
7
8# Method 2: Direct value (not recommended)
9provider = dd.MCPProvider(
10 name="secure-mcp",
11 endpoint="https://mcp.example.com/sse",
12 api_key="actual-api-key-value",
13)

YAML Configuration

Both provider types use a provider_type discriminator field in YAML configurations. When writing YAML configs manually (e.g., in ~/.data-designer/mcp_providers.yaml), include the discriminator:

1providers:
2 # Remote SSE provider
3 - name: doc-search
4 provider_type: sse
5 endpoint: http://localhost:8080/sse
6 api_key: ${MCP_API_KEY}
7
8 # Remote Streamable HTTP provider
9 - name: remote-tools
10 provider_type: streamable_http
11 endpoint: https://mcp.example.com/mcp
12 api_key: ${MCP_API_KEY}
13
14 # Local stdio provider
15 - name: local-tools
16 provider_type: stdio
17 command: python
18 args:
19 - -m
20 - my_mcp_server
21 env:
22 DEBUG: "true"

Using Multiple Providers

You can configure multiple MCP providers and use them together in a single ToolConfig:

1import data_designer.config as dd
2from data_designer.interface import DataDesigner
3
4providers = [
5 dd.MCPProvider(
6 name="doc-search-mcp",
7 endpoint="http://localhost:8080/sse",
8 ),
9 dd.LocalStdioMCPProvider(
10 name="calculator-mcp",
11 command="python",
12 args=["-m", "calculator_mcp"],
13 ),
14]
15
16data_designer = DataDesigner(mcp_providers=providers)

See Also