2121accurate testing of the integration's behavior in real MCP Server scenarios.
2222"""
2323
24+ import asyncio
25+ import json
2426import pytest
2527from unittest import mock
2628
@@ -60,6 +62,15 @@ async def __call__(self, *args, **kwargs):
6062except ImportError :
6163 request_ctx = None
6264
65+ # Try to import MCP types for helper functions
66+ try :
67+ from mcp .types import CallToolRequest , GetPromptRequest , ReadResourceRequest
68+ except ImportError :
69+ # If mcp.types not available, tests will be skipped anyway
70+ CallToolRequest = None
71+ GetPromptRequest = None
72+ ReadResourceRequest = None
73+
6374
6475# Collect available FastMCP implementations for parametrization
6576fastmcp_implementations = []
@@ -88,10 +99,6 @@ def call_tool_through_mcp(mcp_instance, tool_name, arguments):
8899 Returns:
89100 The tool result normalized to {"result": value} format
90101 """
91- import asyncio
92- import json
93- from mcp .types import CallToolRequest
94-
95102 handler = mcp_instance ._mcp_server .request_handlers [CallToolRequest ]
96103 request = CallToolRequest (
97104 method = "tools/call" , params = {"name" : tool_name , "arguments" : arguments }
@@ -129,9 +136,6 @@ def call_tool_through_mcp(mcp_instance, tool_name, arguments):
129136
130137async def call_tool_through_mcp_async (mcp_instance , tool_name , arguments ):
131138 """Async version of call_tool_through_mcp."""
132- import json
133- from mcp .types import CallToolRequest
134-
135139 handler = mcp_instance ._mcp_server .request_handlers [CallToolRequest ]
136140 request = CallToolRequest (
137141 method = "tools/call" , params = {"name" : tool_name , "arguments" : arguments }
@@ -169,9 +173,6 @@ async def call_tool_through_mcp_async(mcp_instance, tool_name, arguments):
169173
170174def call_prompt_through_mcp (mcp_instance , prompt_name , arguments = None ):
171175 """Call a prompt through MCP Server's low-level handler."""
172- import asyncio
173- from mcp .types import GetPromptRequest
174-
175176 handler = mcp_instance ._mcp_server .request_handlers [GetPromptRequest ]
176177 request = GetPromptRequest (
177178 method = "prompts/get" , params = {"name" : prompt_name , "arguments" : arguments or {}}
@@ -185,8 +186,6 @@ def call_prompt_through_mcp(mcp_instance, prompt_name, arguments=None):
185186
186187async def call_prompt_through_mcp_async (mcp_instance , prompt_name , arguments = None ):
187188 """Async version of call_prompt_through_mcp."""
188- from mcp .types import GetPromptRequest
189-
190189 handler = mcp_instance ._mcp_server .request_handlers [GetPromptRequest ]
191190 request = GetPromptRequest (
192191 method = "prompts/get" , params = {"name" : prompt_name , "arguments" : arguments or {}}
@@ -200,9 +199,6 @@ async def call_prompt_through_mcp_async(mcp_instance, prompt_name, arguments=Non
200199
201200def call_resource_through_mcp (mcp_instance , uri ):
202201 """Call a resource through MCP Server's low-level handler."""
203- import asyncio
204- from mcp .types import ReadResourceRequest
205-
206202 handler = mcp_instance ._mcp_server .request_handlers [ReadResourceRequest ]
207203 request = ReadResourceRequest (method = "resources/read" , params = {"uri" : str (uri )})
208204
@@ -214,8 +210,6 @@ def call_resource_through_mcp(mcp_instance, uri):
214210
215211async def call_resource_through_mcp_async (mcp_instance , uri ):
216212 """Async version of call_resource_through_mcp."""
217- from mcp .types import ReadResourceRequest
218-
219213 handler = mcp_instance ._mcp_server .request_handlers [ReadResourceRequest ]
220214 request = ReadResourceRequest (method = "resources/read" , params = {"uri" : str (uri )})
221215
@@ -251,19 +245,6 @@ def reset_request_ctx():
251245 pass
252246
253247
254- # Mock classes for testing
255- class MockURI :
256- """Mock URI object for resource testing"""
257-
258- def __init__ (self , uri_string ):
259- self .scheme = uri_string .split ("://" )[0 ] if "://" in uri_string else ""
260- self .path = uri_string .split ("://" )[1 ] if "://" in uri_string else uri_string
261- self ._uri_string = uri_string
262-
263- def __str__ (self ):
264- return self ._uri_string
265-
266-
267248class MockRequestContext :
268249 """Mock MCP request context"""
269250
@@ -292,28 +273,6 @@ def __init__(self, session_id=None, transport="http"):
292273 self .headers ["mcp-session-id" ] = session_id
293274
294275
295- class MockTextContent :
296- """Mock TextContent object"""
297-
298- def __init__ (self , text ):
299- self .text = text
300-
301-
302- class MockPromptMessage :
303- """Mock PromptMessage object"""
304-
305- def __init__ (self , role , content_text ):
306- self .role = role
307- self .content = MockTextContent (content_text )
308-
309-
310- class MockGetPromptResult :
311- """Mock GetPromptResult object"""
312-
313- def __init__ (self , messages ):
314- self .messages = messages
315-
316-
317276# =============================================================================
318277# Tool Handler Tests - Verifying Sentry Integration
319278# =============================================================================
0 commit comments