> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/datadesigner/llms.txt.
> For full documentation content, see https://docs.nvidia.com/nemo/datadesigner/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/datadesigner/_mcp/server.

# data\_designer.engine.mcp.registry

## Module Contents

### Classes

| Name                                                                    | Description                                       |
| ----------------------------------------------------------------------- | ------------------------------------------------- |
| [`MCPToolDefinition`](#data_designerenginemcpregistrymcptooldefinition) | Definition of an MCP tool with its schema.        |
| [`MCPToolResult`](#data_designerenginemcpregistrymcptoolresult)         | Result from executing an MCP tool call.           |
| [`MCPRegistry`](#data_designerenginemcpregistrymcpregistry)             | Registry for MCP tool configurations and facades. |

### Data

[`logger`](#data_designerenginemcpregistrylogger)

### API

```python
logger = getLogger(...)
```

```python
class data_designer.engine.mcp.registry.MCPToolDefinition
```

Definition of an MCP tool with its schema.

```python
name: str
```

```python
description: str | None
```

```python
input_schema: dict[str, typing.Any] | None
```

```python
to_openai_tool_schema() -> dict[str, typing.Any]
```

Convert this tool definition to OpenAI function calling format.

**Returns:**

`dict[str, typing.Any]`

A dictionary in OpenAI's tool schema format with 'type' set to
'function' and nested 'function' containing name, description,
and parameters.

```python
class data_designer.engine.mcp.registry.MCPToolResult
```

Result from executing an MCP tool call.

```python
content: str
```

```python
is_error: bool = False
```

```python
class data_designer.engine.mcp.registry.MCPRegistry(
    *,
    secret_resolver: data_designer.engine.secret_resolver.SecretResolver,
    mcp_provider_registry: data_designer.engine.model_provider.MCPProviderRegistry,
    mcp_facade_factory: collections.abc.Callable[[data_designer.config.mcp.ToolConfig, data_designer.engine.secret_resolver.SecretResolver, data_designer.engine.model_provider.MCPProviderRegistry], data_designer.engine.mcp.facade.MCPFacade],
    tool_configs: list[data_designer.config.mcp.ToolConfig] | None = None
)
```

Registry for MCP tool configurations and facades.

MCPRegistry manages ToolConfig instances by tool\_alias and lazily creates
MCPFacade instances when requested. This is a config-only registry - all
actual MCP operations are delegated to the MCPFacade and io module.

This mirrors the ModelRegistry pattern for consistency across the codebase.

**Initialization:**

Initialize the MCPRegistry.

**Parameters:**

Resolver for secrets referenced in provider configs.

Registry of MCP provider configurations.

Factory for creating MCPFacade instances.

Optional list of tool configurations to register.

```python
tool_configs: dict[str, data_designer.config.mcp.ToolConfig]
```

Get all registered tool configurations.

```python
facades: dict[str, data_designer.engine.mcp.facade.MCPFacade]
```

Get all instantiated facades.

```python
mcp_provider_registry: data_designer.engine.model_provider.MCPProviderRegistry
```

Get the MCP provider registry.

```python
register_tool_configs(tool_configs: list[data_designer.config.mcp.ToolConfig]) -> None
```

Register tool configurations at runtime.

**Parameters:**

List of tool configurations to register. If a configuration
with the same alias already exists, it will be overwritten.

```python
get_mcp(
    *,
    tool_alias: str
) -> data_designer.engine.mcp.facade.MCPFacade
```

Get or lazily create an MCPFacade for the given tool alias.

**Parameters:**

The alias of the tool configuration.

**Returns:**

`data_designer.engine.mcp.facade.MCPFacade`

An MCPFacade configured for the specified tool alias.

**Raises:**

If no tool config with the given alias is found.

```python
get_tool_config(
    *,
    tool_alias: str
) -> data_designer.config.mcp.ToolConfig
```

Get a tool configuration by alias.

**Parameters:**

The alias of the tool configuration.

**Returns:**

`data_designer.config.mcp.ToolConfig`

The tool configuration.

**Raises:**

If no tool config with the given alias is found.

```python
_set_tool_configs(tool_configs: list[data_designer.config.mcp.ToolConfig] | None) -> None
```

Set tool configurations from a list.

```python
_create_facade(tool_config: data_designer.config.mcp.ToolConfig) -> data_designer.engine.mcp.facade.MCPFacade
```

Create an MCPFacade for a tool configuration.

```python
_validate_tool_config_providers(tool_config: data_designer.config.mcp.ToolConfig) -> None
```

```python
_validate_tool_alias(tool_alias: str) -> None
```

```python
run_health_check(tool_aliases: list[str]) -> None
```

```python
validate_no_duplicate_tool_names() -> None
```

Validate that no ToolConfig has duplicate tool names across its providers.

This method eagerly fetches tool schemas for all registered ToolConfigs,
which triggers duplicate tool name detection. This catches cases where
multiple providers in the same ToolConfig expose a tool with the same name.

**Raises:**

If any ToolConfig has duplicate tool names across providers.