# SkillSpector MCP Server Transport Options: stdio vs HTTP Configuration

> Explore SkillSpector MCP server transport options: stdio for local communication and http for remote access. Understand configuration for NVIDIA SkillSpector.

- Repository: [NVIDIA Corporation/SkillSpector](https://github.com/NVIDIA/SkillSpector)
- Tags: how-to-guide
- Published: 2026-07-11

---

**The NVIDIA SkillSpector MCP server supports two transport modes—`stdio` for local agent communication and `http` for remote network access—controlled by the `transport` parameter in the `skillspector.mcp_server.run()` function.**

The NVIDIA/SkillSpector repository provides a Model Context Protocol (MCP) server for scanning and analyzing AI skills. When deploying this server in production or development environments, selecting the correct transport mechanism determines how MCP-compatible agents communicate with the underlying `scan_skill` tool functionality.

## Available Transport Modes

The transport layer is configured via the `transport` argument passed to the entry point function in [`src/skillspector/mcp_server.py`](https://github.com/NVIDIA/SkillSpector/blob/main/src/skillspector/mcp_server.py).

### stdio (Standard Input/Output)

**`stdio`** is the default transport mode and uses standard input/output streams to communicate with locally-run MCP-compatible agents such as Claude Code or Codex CLI. When activated, the server invokes `FastMCP.run(transport="stdio")` internally, establishing a persistent connection over stdin/stdout pipes. This mode is ideal for local development scenarios where the agent and server run on the same machine without network overhead.

### http (Streamable HTTP)

**`http`** exposes the MCP server as a network-accessible endpoint using FastMCP’s streamable HTTP transport. While callers specify `transport="http"`, the implementation internally sets `transport="streamable-http"` to enable HTTP streaming capabilities. This mode supports remote agent-to-agent (A2A) scenarios and distributed runtime environments. The `host` and `port` parameters customize the binding address, defaulting to `0.0.0.0:9000` if unspecified.

## Transport Selection Logic

The transport routing occurs in [`src/skillspector/mcp_server.py`](https://github.com/NVIDIA/SkillSpector/blob/main/src/skillspector/mcp_server.py) within the `run()` function. The code explicitly branches based on the `transport` string value:

- Lines 71-73 handle the `stdio` case by calling `server.run(transport="stdio")`
- Lines 74-77 configure the HTTP mode by setting `server.settings.host` and `server.settings.port` before executing with the internal streamable HTTP transport
- Lines 77-79 implement validation logic that raises a `ValueError` if any transport value other than `"stdio"` or `"http"` is provided

## Starting the Server with stdio Transport

Use the default stdio transport when integrating with local CLI agents:

```python
from skillspector.mcp_server import run

# Starts the MCP server in stdio mode (default)

run()

```

## Configuring HTTP Transport for Remote Access

Specify the transport, host, and port parameters to expose the server over the network:

```python
from skillspector.mcp_server import run

# Starts the MCP server listening on 0.0.0.0:9000

run(transport="http", host="0.0.0.0", port=9000)

```

## Building Servers Programmatically

For advanced use cases requiring pre-configuration before transport initialization, use the `build_server()` factory function:

```python
from skillspector.mcp_server import build_server

# Build the FastMCP server (no transport started yet)

server = build_server(name="my_skillspector")

# Register the server with a custom transport

server.run(transport="stdio")

```

This approach instantiates the `FastMCP` instance defined in [`src/skillspector/mcp_server.py`](https://github.com/NVIDIA/SkillSpector/blob/main/src/skillspector/mcp_server.py) without immediately binding to a transport, allowing middleware registration or custom logging configuration via [`src/skillspector/logging_config.py`](https://github.com/NVIDIA/SkillSpector/blob/main/src/skillspector/logging_config.py) before the server starts accepting connections.

## Summary

- **Two transport modes**: `stdio` for local process communication and `http` for networked remote access
- **Default behavior**: The server runs in `stdio` mode when `run()` is called without arguments
- **HTTP implementation**: Internally maps to FastMCP’s `streamable-http` transport with configurable `host` and `port` parameters
- **Validation**: Invalid transport strings trigger a `ValueError` in the transport selection logic at lines 77-79 of [`src/skillspector/mcp_server.py`](https://github.com/NVIDIA/SkillSpector/blob/main/src/skillspector/mcp_server.py)
- **Programmatic access**: The `build_server()` function creates server instances without starting the transport layer

## Frequently Asked Questions

### What is the default transport mode for the SkillSpector MCP server?

The default transport mode is **`stdio`**. When you call `run()` without specifying the `transport` parameter, the server automatically configures itself for standard input/output communication suitable for local CLI agents.

### How do I expose the SkillSpector server to remote agents over the network?

Pass `transport="http"` to the `run()` function along with optional `host` and `port` parameters. The server will bind to the specified address and use FastMCP’s internal streamable HTTP transport to handle remote MCP protocol requests.

### What happens if I specify an invalid transport value?

The `run()` function validates the transport parameter and raises a **`ValueError`** if any value other than `"stdio"` or `"http"` is provided. This validation occurs in [`src/skillspector/mcp_server.py`](https://github.com/NVIDIA/SkillSpector/blob/main/src/skillspector/mcp_server.py) before any server initialization begins.

### Can I customize the server before starting the transport?

Yes. Use the **`build_server()`** function to instantiate the FastMCP server object without starting the transport. This allows you to modify server settings, register additional tools, or configure logging from [`src/skillspector/logging_config.py`](https://github.com/NVIDIA/SkillSpector/blob/main/src/skillspector/logging_config.py) before manually calling `server.run()` with your desired transport.