Spaces:
Sleeping
Sleeping
Fix env loading in all MCP servers
Browse filesAll 6 MCP servers had a bug where they would `break` after loading
the first .env file found (~/.env). This caused project-specific
API keys in Researcher-Agent/.env to never be loaded.
Fix: Load ALL .env files with override=True, so project-specific
keys properly override base config. Order: ~/.env (base) ->
project root (overrides) -> server dir (highest priority).
Affected servers:
- fundamentals-basket
- valuation-basket
- volatility-basket
- macro-basket
- news-basket
- sentiment-basket
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
mcp-servers/fundamentals-basket/server.py
CHANGED
|
@@ -21,18 +21,16 @@ from datetime import datetime
|
|
| 21 |
from pathlib import Path
|
| 22 |
from typing import Optional
|
| 23 |
|
| 24 |
-
# Load environment variables
|
| 25 |
from dotenv import load_dotenv
|
| 26 |
-
|
| 27 |
env_paths = [
|
| 28 |
-
Path.home() / ".env",
|
| 29 |
-
Path(__file__).parent / ".env",
|
| 30 |
-
Path(__file__).parent
|
| 31 |
]
|
| 32 |
for env_path in env_paths:
|
| 33 |
if env_path.exists():
|
| 34 |
-
load_dotenv(env_path)
|
| 35 |
-
break
|
| 36 |
|
| 37 |
# MCP SDK
|
| 38 |
from mcp.server import Server
|
|
|
|
| 21 |
from pathlib import Path
|
| 22 |
from typing import Optional
|
| 23 |
|
| 24 |
+
# Load environment variables (later files override earlier ones)
|
| 25 |
from dotenv import load_dotenv
|
|
|
|
| 26 |
env_paths = [
|
| 27 |
+
Path.home() / ".env", # Home directory (base)
|
| 28 |
+
Path(__file__).parent.parent.parent / ".env", # Project root (overrides)
|
| 29 |
+
Path(__file__).parent / ".env", # MCP server directory (highest priority)
|
| 30 |
]
|
| 31 |
for env_path in env_paths:
|
| 32 |
if env_path.exists():
|
| 33 |
+
load_dotenv(env_path, override=True)
|
|
|
|
| 34 |
|
| 35 |
# MCP SDK
|
| 36 |
from mcp.server import Server
|
mcp-servers/macro-basket/server.py
CHANGED
|
@@ -20,17 +20,16 @@ from datetime import datetime
|
|
| 20 |
from pathlib import Path
|
| 21 |
from typing import Optional
|
| 22 |
|
| 23 |
-
# Load environment variables
|
| 24 |
from dotenv import load_dotenv
|
| 25 |
env_paths = [
|
| 26 |
-
Path.home() / ".env",
|
| 27 |
-
Path(__file__).parent / ".env",
|
| 28 |
-
Path(__file__).parent
|
| 29 |
]
|
| 30 |
for env_path in env_paths:
|
| 31 |
if env_path.exists():
|
| 32 |
-
load_dotenv(env_path)
|
| 33 |
-
break
|
| 34 |
|
| 35 |
# MCP SDK
|
| 36 |
from mcp.server import Server
|
|
|
|
| 20 |
from pathlib import Path
|
| 21 |
from typing import Optional
|
| 22 |
|
| 23 |
+
# Load environment variables (later files override earlier ones)
|
| 24 |
from dotenv import load_dotenv
|
| 25 |
env_paths = [
|
| 26 |
+
Path.home() / ".env", # Home directory (base)
|
| 27 |
+
Path(__file__).parent.parent.parent / ".env", # Project root (overrides)
|
| 28 |
+
Path(__file__).parent / ".env", # MCP server directory (highest priority)
|
| 29 |
]
|
| 30 |
for env_path in env_paths:
|
| 31 |
if env_path.exists():
|
| 32 |
+
load_dotenv(env_path, override=True)
|
|
|
|
| 33 |
|
| 34 |
# MCP SDK
|
| 35 |
from mcp.server import Server
|
mcp-servers/news-basket/server.py
CHANGED
|
@@ -39,17 +39,16 @@ from typing import Optional
|
|
| 39 |
from config.company_name_filters import clean_company_name
|
| 40 |
from config.domain_filters import NEWS_DOMAINS, NYT_NEWS_DESKS, NEWSAPI_DOMAINS
|
| 41 |
|
| 42 |
-
# Load environment variables
|
| 43 |
from dotenv import load_dotenv
|
| 44 |
env_paths = [
|
| 45 |
-
Path.home() / ".env",
|
| 46 |
-
Path(__file__).parent / ".env",
|
| 47 |
-
Path(__file__).parent
|
| 48 |
]
|
| 49 |
for env_path in env_paths:
|
| 50 |
if env_path.exists():
|
| 51 |
-
load_dotenv(env_path)
|
| 52 |
-
break
|
| 53 |
|
| 54 |
# MCP SDK
|
| 55 |
from mcp.server import Server
|
|
|
|
| 39 |
from config.company_name_filters import clean_company_name
|
| 40 |
from config.domain_filters import NEWS_DOMAINS, NYT_NEWS_DESKS, NEWSAPI_DOMAINS
|
| 41 |
|
| 42 |
+
# Load environment variables (later files override earlier ones)
|
| 43 |
from dotenv import load_dotenv
|
| 44 |
env_paths = [
|
| 45 |
+
Path.home() / ".env", # Home directory (base)
|
| 46 |
+
Path(__file__).parent.parent.parent / ".env", # Project root (overrides)
|
| 47 |
+
Path(__file__).parent / ".env", # MCP server directory (highest priority)
|
| 48 |
]
|
| 49 |
for env_path in env_paths:
|
| 50 |
if env_path.exists():
|
| 51 |
+
load_dotenv(env_path, override=True)
|
|
|
|
| 52 |
|
| 53 |
# MCP SDK
|
| 54 |
from mcp.server import Server
|
mcp-servers/sentiment-basket/server.py
CHANGED
|
@@ -24,16 +24,15 @@ from pathlib import Path
|
|
| 24 |
# Load environment variables from .env
|
| 25 |
from dotenv import load_dotenv
|
| 26 |
|
| 27 |
-
#
|
| 28 |
env_paths = [
|
| 29 |
-
Path.home() / ".env", # Home directory
|
| 30 |
-
Path(__file__).parent / ".env", #
|
| 31 |
-
Path(__file__).parent
|
| 32 |
]
|
| 33 |
for env_path in env_paths:
|
| 34 |
if env_path.exists():
|
| 35 |
-
load_dotenv(env_path)
|
| 36 |
-
break
|
| 37 |
|
| 38 |
# MCP SDK
|
| 39 |
from mcp.server import Server
|
|
|
|
| 24 |
# Load environment variables from .env
|
| 25 |
from dotenv import load_dotenv
|
| 26 |
|
| 27 |
+
# Load from multiple locations (later files override earlier ones)
|
| 28 |
env_paths = [
|
| 29 |
+
Path.home() / ".env", # Home directory (base)
|
| 30 |
+
Path(__file__).parent.parent.parent / ".env", # Project root (overrides)
|
| 31 |
+
Path(__file__).parent / ".env", # MCP server directory (highest priority)
|
| 32 |
]
|
| 33 |
for env_path in env_paths:
|
| 34 |
if env_path.exists():
|
| 35 |
+
load_dotenv(env_path, override=True)
|
|
|
|
| 36 |
|
| 37 |
# MCP SDK
|
| 38 |
from mcp.server import Server
|
mcp-servers/valuation-basket/server.py
CHANGED
|
@@ -25,17 +25,16 @@ from pathlib import Path
|
|
| 25 |
from typing import Optional
|
| 26 |
from concurrent.futures import ThreadPoolExecutor
|
| 27 |
|
| 28 |
-
# Load environment variables
|
| 29 |
from dotenv import load_dotenv
|
| 30 |
env_paths = [
|
| 31 |
-
Path.home() / ".env",
|
| 32 |
-
Path(__file__).parent / ".env",
|
| 33 |
-
Path(__file__).parent
|
| 34 |
]
|
| 35 |
for env_path in env_paths:
|
| 36 |
if env_path.exists():
|
| 37 |
-
load_dotenv(env_path)
|
| 38 |
-
break
|
| 39 |
|
| 40 |
# MCP SDK
|
| 41 |
from mcp.server import Server
|
|
|
|
| 25 |
from typing import Optional
|
| 26 |
from concurrent.futures import ThreadPoolExecutor
|
| 27 |
|
| 28 |
+
# Load environment variables (later files override earlier ones)
|
| 29 |
from dotenv import load_dotenv
|
| 30 |
env_paths = [
|
| 31 |
+
Path.home() / ".env", # Home directory (base)
|
| 32 |
+
Path(__file__).parent.parent.parent / ".env", # Project root (overrides)
|
| 33 |
+
Path(__file__).parent / ".env", # MCP server directory (highest priority)
|
| 34 |
]
|
| 35 |
for env_path in env_paths:
|
| 36 |
if env_path.exists():
|
| 37 |
+
load_dotenv(env_path, override=True)
|
|
|
|
| 38 |
|
| 39 |
# MCP SDK
|
| 40 |
from mcp.server import Server
|
mcp-servers/volatility-basket/server.py
CHANGED
|
@@ -24,19 +24,16 @@ from pathlib import Path
|
|
| 24 |
from typing import Optional
|
| 25 |
import statistics
|
| 26 |
|
| 27 |
-
# Load environment variables
|
| 28 |
from dotenv import load_dotenv
|
| 29 |
-
|
| 30 |
-
# Try loading from multiple locations
|
| 31 |
env_paths = [
|
| 32 |
-
Path.home() / ".env", # Home directory
|
| 33 |
-
Path(__file__).parent / ".env", #
|
| 34 |
-
Path(__file__).parent
|
| 35 |
]
|
| 36 |
for env_path in env_paths:
|
| 37 |
if env_path.exists():
|
| 38 |
-
load_dotenv(env_path)
|
| 39 |
-
break
|
| 40 |
|
| 41 |
# MCP SDK
|
| 42 |
from mcp.server import Server
|
|
|
|
| 24 |
from typing import Optional
|
| 25 |
import statistics
|
| 26 |
|
| 27 |
+
# Load environment variables (later files override earlier ones)
|
| 28 |
from dotenv import load_dotenv
|
|
|
|
|
|
|
| 29 |
env_paths = [
|
| 30 |
+
Path.home() / ".env", # Home directory (base)
|
| 31 |
+
Path(__file__).parent.parent.parent / ".env", # Project root (overrides)
|
| 32 |
+
Path(__file__).parent / ".env", # MCP server directory (highest priority)
|
| 33 |
]
|
| 34 |
for env_path in env_paths:
|
| 35 |
if env_path.exists():
|
| 36 |
+
load_dotenv(env_path, override=True)
|
|
|
|
| 37 |
|
| 38 |
# MCP SDK
|
| 39 |
from mcp.server import Server
|