Skip to content

feat: add multi-host support for connecting to multiple SQL Servers - #35

Open
Abdulmajeed-Alrajhi wants to merge 2 commits into
RichardHan:mainfrom
Abdulmajeed-Alrajhi:feature/multi-host-support
Open

feat: add multi-host support for connecting to multiple SQL Servers#35
Abdulmajeed-Alrajhi wants to merge 2 commits into
RichardHan:mainfrom
Abdulmajeed-Alrajhi:feature/multi-host-support

Conversation

@Abdulmajeed-Alrajhi

Copy link
Copy Markdown

Allow a single MCP server instance to connect to multiple SQL Server hosts. Connections are configured via indexed env vars (MSSQL_HOST__*) or a JSON config file (MSSQL_CONNECTIONS_FILE).

In multi-host mode, execute_sql gains a required 'connection' parameter and a new list_connections tool is exposed. Fully backward compatible - existing single-host setups (MSSQL_SERVER/USER/etc.) continue to work unchanged.

aaalrajhi added 2 commits March 26, 2026 15:29
Allow a single MCP server instance to connect to multiple SQL Server
hosts. Connections are configured via indexed env vars (MSSQL_HOST_<N>_*)
or a JSON config file (MSSQL_CONNECTIONS_FILE).

In multi-host mode, execute_sql gains a required 'connection' parameter
and a new list_connections tool is exposed. Fully backward compatible -
existing single-host setups (MSSQL_SERVER/USER/etc.) continue to work
unchanged.
Resource URIs built in multi-host list_resources() embedded the raw
connection name as the URI authority (host) and the raw table name as
the first path segment, e.g. `mssql://payment gateway - QA/Hash/data`.
Pydantic's AnyUrl validator (used by mcp.types.Resource.uri) rejects
spaces and other characters that are illegal in the URI authority,
causing every resource for spaced connection names to fail validation
with `invalid domain character` and surface as `Failed to list
resources: 1 validation error for Resource`. As a result, all tables
on those connections silently disappeared from the resource list.

Percent-encode connection and table names with urllib.parse.quote when
building the URI, and decode them with unquote in read_resource so
routing still resolves to the original names. Single-host mode also
encodes the table name for consistency.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant