Skip to content

Commit 4709135

Browse files
authored
Merge pull request #5 from metatool-ai/hack-fix-env
Hack fix env vars using MCP's python sdk code
2 parents d7bae57 + 9a77cc3 commit 4709135

File tree

5 files changed

+58
-9
lines changed

5 files changed

+58
-9
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "mcp-server-metatool"
7-
version = "0.0.3"
7+
version = "0.0.4"
88
description = "Metatool MCP Server"
99
readme = "README.md"
1010
requires-python = ">=3.10"

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name="mcp-server-metatool",
5-
version="0.0.3",
5+
version="0.0.4",
66
author="James Zhang",
77
author_email="[email protected]",
88
description="Metatool MCP Server",

src/mcp_server_metatool/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Metatool MCP Server
33
"""
44

5-
__version__ = "0.0.2"
5+
__version__ = "0.0.4"
66

77
from .server import serve
88

src/mcp_server_metatool/server.py

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,47 @@
1111
import tempfile
1212
import subprocess
1313
import ast
14+
import sys
15+
16+
# Environment variables to inherit by default
17+
DEFAULT_INHERITED_ENV_VARS = (
18+
[
19+
"APPDATA",
20+
"HOMEDRIVE",
21+
"HOMEPATH",
22+
"LOCALAPPDATA",
23+
"PATH",
24+
"PROCESSOR_ARCHITECTURE",
25+
"SYSTEMDRIVE",
26+
"SYSTEMROOT",
27+
"TEMP",
28+
"USERNAME",
29+
"USERPROFILE",
30+
]
31+
if sys.platform == "win32"
32+
else ["HOME", "LOGNAME", "PATH", "SHELL", "TERM", "USER"]
33+
)
34+
35+
36+
def get_default_environment() -> dict[str, str]:
37+
"""
38+
Returns a default environment object including only environment variables deemed
39+
safe to inherit.
40+
"""
41+
env: dict[str, str] = {}
42+
43+
for key in DEFAULT_INHERITED_ENV_VARS:
44+
value = os.environ.get(key)
45+
if value is None:
46+
continue
47+
48+
if value.startswith("()"):
49+
# Skip functions, which are a security risk
50+
continue
51+
52+
env[key] = value
53+
54+
return env
1455

1556

1657
def sanitize_name(name: str) -> str:
@@ -42,8 +83,13 @@ async def get_mcp_servers() -> list[StdioServerParameters]:
4283
# Convert empty lists and dicts to None
4384
if "args" in params and not params["args"]:
4485
params["args"] = None
45-
if "env" in params and not params["env"]:
46-
params["env"] = None
86+
87+
# Merge environment variables
88+
params["env"] = {
89+
**get_default_environment(),
90+
**(params.get("env") or {}),
91+
}
92+
4793
server_params.append(StdioServerParameters(**params))
4894
return server_params
4995
except Exception:
@@ -118,8 +164,11 @@ async def get_custom_mcp_servers() -> list[StdioServerParameters]:
118164
params["command"] = "uv"
119165
params["args"] = ["run", script_path] + params.get("additionalArgs", [])
120166

121-
if "env" in params and not params["env"]:
122-
params["env"] = None
167+
# Merge environment variables
168+
params["env"] = {
169+
**get_default_environment(),
170+
**(params.get("env") or {}),
171+
}
123172

124173
server_params.append(StdioServerParameters(**params))
125174
return server_params
@@ -212,7 +261,7 @@ async def serve():
212261
write_stream,
213262
InitializationOptions(
214263
server_name="metatool",
215-
server_version="0.0.1",
264+
server_version="0.0.4",
216265
capabilities=server.get_capabilities(
217266
notification_options=NotificationOptions(),
218267
experimental_capabilities={},

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)