Skip to content

Commit c8059b1

Browse files
committed
some logging update
1 parent 47d0fb1 commit c8059b1

File tree

4 files changed

+95
-5
lines changed

4 files changed

+95
-5
lines changed

docker-compose.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
services:
2+
database:
3+
image: containers.intersystems.com/intersystems/iris-community:2025.1
4+
restart: always
5+
ports:
6+
- "1972:1972"
7+
- "52773:52773"
8+
command:
9+
- -a
10+
- iris session iris -U%SYS '##class(Security.Users).UnExpireUserPasswords("*")'

example.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import sys
2+
import asyncio
3+
from typing import Optional
4+
from contextlib import AsyncExitStack
5+
6+
from mcp import ClientSession, StdioServerParameters
7+
from mcp.client.stdio import stdio_client
8+
9+
from dotenv import load_dotenv
10+
11+
load_dotenv() # load environment variables from .env
12+
13+
14+
class MCPClient:
15+
def __init__(self):
16+
# Initialize session and client objects
17+
self.session: Optional[ClientSession] = None
18+
self.exit_stack = AsyncExitStack()
19+
20+
async def connect_to_server(self):
21+
"""Connect to an MCP server"""
22+
server_params = StdioServerParameters(
23+
command=sys.executable, args=["-m", "mcp_server_iris"], env=None
24+
)
25+
# server_params = StdioServerParameters(
26+
# command="uvx", args=["mcp-server-iris"], env=None
27+
# )
28+
29+
stdio_transport = await self.exit_stack.enter_async_context(
30+
stdio_client(server_params)
31+
)
32+
self.stdio, self.write = stdio_transport
33+
self.session = await self.exit_stack.enter_async_context(
34+
ClientSession(self.stdio, self.write)
35+
)
36+
37+
await self.session.initialize()
38+
39+
# List available tools
40+
response = await self.session.list_tools()
41+
tools = response.tools
42+
print(
43+
"\nConnected to server with tools:",
44+
"\n\t".join([""] + [tool.name for tool in tools]),
45+
)
46+
47+
async def process_query(self, query: str) -> str:
48+
response = await self.session.call_tool(
49+
"execute_sql",
50+
{
51+
"query": query,
52+
"params": [],
53+
},
54+
)
55+
print("Response from execute_sql:", response.content)
56+
return
57+
58+
async def cleanup(self):
59+
"""Clean up resources"""
60+
await self.exit_stack.aclose()
61+
62+
63+
async def main():
64+
client = MCPClient()
65+
try:
66+
await client.connect_to_server()
67+
await client.session.set_logging_level("debug")
68+
await client.process_query("select $namespace, $zversion")
69+
finally:
70+
await client.cleanup()
71+
72+
73+
if __name__ == "__main__":
74+
asyncio.run(main())

src/mcp_server_iris/mcpserver.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ def __init__(
9898
)
9999

100100
self.settings = Settings(**settings)
101+
configure_logging(self.settings.log_level)
102+
logger.setLevel(self.settings.log_level.upper())
101103

102104
self._tool_manager = ToolManager(
103105
warn_on_duplicate_tools=self.settings.warn_on_duplicate_tools
@@ -110,8 +112,13 @@ def __init__(
110112
)
111113

112114
self._setup_handlers()
115+
self._mcp_server.set_logging_level()(self.set_logging_level)
113116

114-
configure_logging(self.settings.log_level)
117+
async def set_logging_level(self, level) -> None:
118+
"""Set the logging level for the server."""
119+
logger.info(f"Logging level set to {level}")
120+
logger.setLevel(level.upper())
121+
configure_logging(level=level)
115122

116123
@property
117124
def name(self) -> str:
@@ -138,7 +145,7 @@ def run(self, transport: Literal["stdio", "sse"] = "stdio") -> None:
138145
Args:
139146
transport: Transport protocol to use ("stdio" or "sse")
140147
"""
141-
148+
logger.info(f"Running server with transport: {transport}")
142149
TRANSPORTS = Literal["stdio", "sse"]
143150
if transport not in TRANSPORTS.__args__: # type: ignore
144151
raise ValueError(f"Unknown transport: {transport}")

src/mcp_server_iris/server.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import os
2-
import logging
32
from importlib.metadata import version
43
from contextlib import asynccontextmanager
54
from collections.abc import AsyncIterator
65
import mcp.types as types
76
import iris as irisnative
8-
from mcp_server_iris.mcpserver import MCPServer, Context
7+
from mcp_server_iris.mcpserver import MCPServer, Context, logger
98
from mcp_server_iris.interoperability import init as interoperability
109

11-
logger = logging.getLogger("mcp_server_iris")
1210
logger.info("Starting InterSystems IRIS MCP Server")
1311

1412

@@ -22,6 +20,7 @@ def get_db_config():
2220
"password": os.getenv("IRIS_PASSWORD", "SYS"),
2321
}
2422

23+
logger.info("Server configuration: iris://" + config["hostname"] + ":" + str(config["port"]) + "/" + config["namespace"])
2524
if not all([config["username"], config["password"], config["namespace"]]):
2625
raise ValueError("Missing required database configuration")
2726

0 commit comments

Comments
 (0)