From 2ce3666337f1022d34a8b62dcc92f8377b63d6f1 Mon Sep 17 00:00:00 2001 From: interrobot <48625487+interrobot@users.noreply.github.com> Date: Wed, 18 Dec 2024 20:56:08 -0500 Subject: [PATCH] Update mcp_server_sqlite to use robust text encoding by default The Claude Desktop client will hang in Windows when utilizing extended/multibyte characters in sqlite as a result of decoding errors. The decoding errors are resolved by using UTF-8 encoding. Configuring Windows to use UTF-8 in place of windows-1252 makes the default server behavior consistent with macOS. os.environ PYTHONIOENCODING is checked as to not interfere with an environment override, such as: { "mcpServers": { "sqlite": { "command": "uvx", "args": [ "mcp-server-sqlite", "--db-path", "./example.db" ], "env": { "PYTHONIOENCODING": "utf-8" } } } } --- src/sqlite/src/mcp_server_sqlite/server.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/sqlite/src/mcp_server_sqlite/server.py b/src/sqlite/src/mcp_server_sqlite/server.py index 05cd117b..01452022 100644 --- a/src/sqlite/src/mcp_server_sqlite/server.py +++ b/src/sqlite/src/mcp_server_sqlite/server.py @@ -1,3 +1,5 @@ +import os +import sys import sqlite3 import logging from contextlib import closing @@ -9,6 +11,12 @@ import mcp.server.stdio from pydantic import AnyUrl from typing import Any +# reconfigure UnicodeEncodeError prone default (i.e. windows-1252) to utf-8 +if sys.platform == "win32" and os.environ.get('PYTHONIOENCODING') is None: + sys.stdin.reconfigure(encoding="utf-8") + sys.stdout.reconfigure(encoding="utf-8") + sys.stderr.reconfigure(encoding="utf-8") + logger = logging.getLogger('mcp_sqlite_server') logger.info("Starting MCP SQLite Server")