sqlserver-mcp-tools 0.1.3__tar.gz → 0.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/PKG-INFO +1 -1
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/pyproject.toml +1 -1
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/mcp_sqlserver/http_server.py +36 -1
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/sqlserver_mcp_tools.egg-info/PKG-INFO +1 -1
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/LICENSE +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/README.md +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/setup.cfg +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/mcp_sqlserver/__init__.py +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/mcp_sqlserver/connection.py +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/mcp_sqlserver/server.py +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/mcp_sqlserver/tools.py +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/sqlserver_mcp_tools.egg-info/SOURCES.txt +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/sqlserver_mcp_tools.egg-info/dependency_links.txt +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/sqlserver_mcp_tools.egg-info/entry_points.txt +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/sqlserver_mcp_tools.egg-info/requires.txt +0 -0
- {sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/sqlserver_mcp_tools.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sqlserver-mcp-tools"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.4"
|
|
8
8
|
description = "Servidor MCP (Model Context Protocol) para SQL Server com controle de permissões e modo somente-leitura"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -35,15 +35,50 @@ class _StreamableHTTPASGIApp:
|
|
|
35
35
|
await self.session_manager.handle_request(scope, receive, send)
|
|
36
36
|
|
|
37
37
|
|
|
38
|
+
class _HealthCheckMiddleware:
|
|
39
|
+
"""Responde 200 OK a um GET simples no /mcp (sem Accept text/event-stream).
|
|
40
|
+
|
|
41
|
+
Clientes como o Claude Desktop validam a URL com um GET simples (como um
|
|
42
|
+
navegador). O transport Streamable HTTP rejeita esse GET com 406, fazendo o
|
|
43
|
+
cliente concluir que "nenhum servidor respondeu". Este middleware intercepta
|
|
44
|
+
esses GETs e devolve um health check JSON, deixando passar apenas GETs que
|
|
45
|
+
de fato querem abrir um stream SSE (Accept: text/event-stream).
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(self, app):
|
|
49
|
+
self.app = app
|
|
50
|
+
|
|
51
|
+
async def __call__(self, scope, receive, send):
|
|
52
|
+
if (
|
|
53
|
+
scope["type"] == "http"
|
|
54
|
+
and scope["method"] == "GET"
|
|
55
|
+
and scope["path"] == "/mcp"
|
|
56
|
+
):
|
|
57
|
+
headers = {k.decode().lower(): v.decode() for k, v in scope["headers"]}
|
|
58
|
+
accept = headers.get("accept", "")
|
|
59
|
+
if "text/event-stream" not in accept:
|
|
60
|
+
body = b'{"status":"ok"}'
|
|
61
|
+
await send({
|
|
62
|
+
"type": "http.response.start",
|
|
63
|
+
"status": 200,
|
|
64
|
+
"headers": [[b"content-type", b"application/json"]],
|
|
65
|
+
})
|
|
66
|
+
await send({"type": "http.response.body", "body": body})
|
|
67
|
+
return
|
|
68
|
+
await self.app(scope, receive, send)
|
|
69
|
+
|
|
70
|
+
|
|
38
71
|
def criar_app():
|
|
39
72
|
"""Monta a aplicacao Starlette com o transporte Streamable HTTP em /mcp."""
|
|
40
73
|
from starlette.applications import Starlette
|
|
74
|
+
from starlette.middleware import Middleware
|
|
41
75
|
from starlette.routing import Route
|
|
42
76
|
|
|
43
|
-
session_manager = StreamableHTTPSessionManager(app=servidor)
|
|
77
|
+
session_manager = StreamableHTTPSessionManager(app=servidor, json_response=True)
|
|
44
78
|
|
|
45
79
|
return Starlette(
|
|
46
80
|
routes=[Route("/mcp", endpoint=_StreamableHTTPASGIApp(session_manager))],
|
|
81
|
+
middleware=[Middleware(_HealthCheckMiddleware)],
|
|
47
82
|
lifespan=lambda app: session_manager.run(),
|
|
48
83
|
)
|
|
49
84
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlserver_mcp_tools-0.1.3 → sqlserver_mcp_tools-0.1.4}/src/sqlserver_mcp_tools.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|