Coverage for src/quickmcp/types.py: 100%

49 statements  

« prev     ^ index     » next       coverage.py v7.10.4, created at 2025-08-20 20:56 +0200

1""" 

2QuickMCP Types - Type definitions for QuickMCP 

3""" 

4 

5from typing import Any, Dict, List, Optional, Union 

6from pydantic import BaseModel, Field 

7from enum import Enum 

8 

9 

10class ToolResult(BaseModel): 

11 """ 

12 Standard result format for MCP tools. 

13 """ 

14 result: Any = Field(..., description="The tool execution result") 

15 success: bool = Field(default=True, description="Whether the tool executed successfully") 

16 error: Optional[str] = Field(default=None, description="Error message if failed") 

17 metadata: Optional[Dict[str, Any]] = Field(default=None, description="Additional metadata") 

18 

19 

20class ResourceContent(BaseModel): 

21 """ 

22 Content returned by MCP resources. 

23 """ 

24 uri: str = Field(..., description="The resource URI") 

25 content: str = Field(..., description="The resource content") 

26 mime_type: str = Field(default="text/plain", description="MIME type of the content") 

27 metadata: Optional[Dict[str, Any]] = Field(default=None, description="Additional metadata") 

28 

29 

30class PromptMessage(BaseModel): 

31 """ 

32 A message in a prompt template. 

33 """ 

34 role: str = Field(..., description="Message role (user, assistant, system)") 

35 content: str = Field(..., description="Message content") 

36 

37 

38class Context(BaseModel): 

39 """ 

40 Execution context passed to tools and resources. 

41 """ 

42 request_id: Optional[str] = Field(default=None, description="Unique request ID") 

43 user: Optional[str] = Field(default=None, description="User identifier") 

44 session_id: Optional[str] = Field(default=None, description="Session identifier") 

45 metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional context") 

46 

47 

48class TransportType(str, Enum): 

49 """ 

50 Supported transport types for MCP servers. 

51 """ 

52 STDIO = "stdio" 

53 SSE = "sse" 

54 HTTP = "http" 

55 WEBSOCKET = "websocket" 

56 

57 

58class ServerConfig(BaseModel): 

59 """ 

60 Configuration for a QuickMCP server. 

61 """ 

62 name: str = Field(..., description="Server name") 

63 version: str = Field(default="1.0.0", description="Server version") 

64 description: Optional[str] = Field(default=None, description="Server description") 

65 transport: TransportType = Field(default=TransportType.STDIO, description="Transport type") 

66 host: str = Field(default="localhost", description="Host for network transports") 

67 port: int = Field(default=8000, description="Port for network transports") 

68 log_level: str = Field(default="INFO", description="Logging level") 

69 auto_reload: bool = Field(default=False, description="Auto-reload on code changes") 

70 

71 

72class ToolSchema(BaseModel): 

73 """ 

74 Schema definition for a tool. 

75 """ 

76 name: str = Field(..., description="Tool name") 

77 description: str = Field(..., description="Tool description") 

78 parameters: Dict[str, Any] = Field(..., description="JSON schema for parameters") 

79 returns: Dict[str, Any] = Field(..., description="JSON schema for return value") 

80 

81 

82class ResourceSchema(BaseModel): 

83 """ 

84 Schema definition for a resource. 

85 """ 

86 uri_template: str = Field(..., description="URI template") 

87 name: str = Field(..., description="Resource name") 

88 description: str = Field(..., description="Resource description") 

89 mime_type: str = Field(default="text/plain", description="MIME type") 

90 

91 

92class ErrorResponse(BaseModel): 

93 """ 

94 Standard error response format. 

95 """ 

96 error: str = Field(..., description="Error message") 

97 code: Optional[str] = Field(default=None, description="Error code") 

98 details: Optional[Dict[str, Any]] = Field(default=None, description="Error details")