|
1 | 1 | #!/usr/bin/env python3
|
2 | 2 | import sys, importlib
|
| 3 | +import os |
3 | 4 | from pathlib import Path
|
4 | 5 | from typing import Dict, Any
|
5 | 6 | from fastmcp import FastMCP
|
6 | 7 |
|
7 | 8 | mcp = FastMCP("roslyn-analyzers-dev")
|
8 | 9 | BASE_DIR = Path(__file__).resolve().parents[2]
|
9 | 10 |
|
10 |
| -MODULE_NAME = "tools.mcp.ra_tools" |
| 11 | +# Add the MCP directory to path for direct imports |
| 12 | +MCP_DIR = Path(__file__).parent |
| 13 | +if str(MCP_DIR) not in sys.path: |
| 14 | + sys.path.insert(0, str(MCP_DIR)) |
| 15 | + |
| 16 | +# Import ra_tools directly |
| 17 | +import ra_tools |
11 | 18 |
|
12 | 19 | def _mod():
|
13 |
| - # Always resolve the current module object |
14 |
| - mod = sys.modules.get(MODULE_NAME) |
15 |
| - if mod is None: |
16 |
| - mod = importlib.import_module(MODULE_NAME) |
17 |
| - mod.set_base_dir(str(BASE_DIR)) |
18 |
| - return mod |
| 20 | + # Set the base directory and return the ra_tools module |
| 21 | + ra_tools.set_base_dir(str(BASE_DIR)) |
| 22 | + return ra_tools |
19 | 23 |
|
20 | 24 | @mcp.tool
|
21 | 25 | def hot_reload() -> Dict[str, Any]:
|
22 | 26 | """Reload tool implementations from disk without restarting the MCP server."""
|
23 | 27 | importlib.invalidate_caches()
|
24 |
| - mod = sys.modules.get(MODULE_NAME) |
25 |
| - if mod is None: |
26 |
| - mod = importlib.import_module(MODULE_NAME) |
27 |
| - else: |
28 |
| - mod = importlib.reload(mod) |
29 |
| - mod.set_base_dir(str(BASE_DIR)) |
30 |
| - return {"status": "ok", "reloaded": MODULE_NAME, "base_dir": str(BASE_DIR)} |
| 28 | + global ra_tools |
| 29 | + ra_tools = importlib.reload(ra_tools) |
| 30 | + ra_tools.set_base_dir(str(BASE_DIR)) |
| 31 | + return {"status": "ok", "reloaded": "ra_tools", "base_dir": str(BASE_DIR)} |
31 | 32 |
|
32 | 33 | # Thin wrappers: delegate to the current module
|
33 | 34 | @mcp.tool
|
|
0 commit comments