{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/mcp-servers\/mcp_docs\/domain\/dokumentation.py",
"content": "\"\"\"Domain Entities für MCP-Docs Server.\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom enum import Enum\nfrom typing import Any, Dict, Optional\n\n\nclass DocStatus(str, Enum):\n \"\"\"Dokumentations-Status-Werte.\"\"\"\n\n DRAFT = \"draft\"\n PUBLISHED = \"published\"\n ARCHIVED = \"archived\"\n\n\n@dataclass\nclass Dokumentation:\n \"\"\"Dokumentation-Entity für Datenbank.\"\"\"\n\n id: Optional[int] = None\n parent_id: Optional[int] = None\n slug: str = \"\"\n path: str = \"\"\n title: str = \"\"\n description: Optional[str] = None\n content: str = \"\"\n status: DocStatus = DocStatus.DRAFT\n sort_order: int = 0\n depth: int = 0\n created_at: datetime = field(default_factory=datetime.now)\n updated_at: datetime = field(default_factory=datetime.now)\n\n def to_dict(self) -> Dict[str, Any]:\n \"\"\"Vollständige Darstellung.\"\"\"\n return {\n \"id\": self.id,\n \"parent_id\": self.parent_id,\n \"slug\": self.slug,\n \"path\": self.path,\n \"title\": self.title,\n \"description\": self.description,\n \"content\": self.content,\n \"status\": (\n self.status.value if isinstance(self.status, DocStatus) else self.status\n ),\n \"sort_order\": self.sort_order,\n \"depth\": self.depth,\n \"created_at\": self.created_at.isoformat() if self.created_at else None,\n \"updated_at\": self.updated_at.isoformat() if self.updated_at else None,\n }\n\n def to_dict_compact(self) -> Dict[str, Any]:\n \"\"\"Kompakte Darstellung für Listen (Token-sparend, ohne content).\"\"\"\n return {\n \"id\": self.id,\n \"parent_id\": self.parent_id,\n \"path\": self.path,\n \"title\": self.title,\n \"status\": (\n self.status.value if isinstance(self.status, DocStatus) else self.status\n ),\n \"depth\": self.depth,\n }\n"
}
}
{
"tool_response": {
"type": "update",
"filePath": "\/var\/www\/mcp-servers\/mcp_docs\/domain\/dokumentation.py",
"content": "\"\"\"Domain Entities für MCP-Docs Server.\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom enum import Enum\nfrom typing import Any, Dict, Optional\n\n\nclass DocStatus(str, Enum):\n \"\"\"Dokumentations-Status-Werte.\"\"\"\n\n DRAFT = \"draft\"\n PUBLISHED = \"published\"\n ARCHIVED = \"archived\"\n\n\n@dataclass\nclass Dokumentation:\n \"\"\"Dokumentation-Entity für Datenbank.\"\"\"\n\n id: Optional[int] = None\n parent_id: Optional[int] = None\n slug: str = \"\"\n path: str = \"\"\n title: str = \"\"\n description: Optional[str] = None\n content: str = \"\"\n status: DocStatus = DocStatus.DRAFT\n sort_order: int = 0\n depth: int = 0\n created_at: datetime = field(default_factory=datetime.now)\n updated_at: datetime = field(default_factory=datetime.now)\n\n def to_dict(self) -> Dict[str, Any]:\n \"\"\"Vollständige Darstellung.\"\"\"\n return {\n \"id\": self.id,\n \"parent_id\": self.parent_id,\n \"slug\": self.slug,\n \"path\": self.path,\n \"title\": self.title,\n \"description\": self.description,\n \"content\": self.content,\n \"status\": (\n self.status.value if isinstance(self.status, DocStatus) else self.status\n ),\n \"sort_order\": self.sort_order,\n \"depth\": self.depth,\n \"created_at\": self.created_at.isoformat() if self.created_at else None,\n \"updated_at\": self.updated_at.isoformat() if self.updated_at else None,\n }\n\n def to_dict_compact(self) -> Dict[str, Any]:\n \"\"\"Kompakte Darstellung für Listen (Token-sparend, ohne content).\"\"\"\n return {\n \"id\": self.id,\n \"parent_id\": self.parent_id,\n \"path\": self.path,\n \"title\": self.title,\n \"status\": (\n self.status.value if isinstance(self.status, DocStatus) else self.status\n ),\n \"depth\": self.depth,\n }\n",
"structuredPatch": [
{
"oldStart": 1,
"oldLines": 12,
"newStart": 1,
"newLines": 14,
"lines": [
"-\"\"\"Domain Entities für MCP-Docs Server\"\"\"",
"+\"\"\"Domain Entities für MCP-Docs Server.\"\"\"",
"+",
" from dataclasses import dataclass, field",
" from datetime import datetime",
" from enum import Enum",
"-from typing import Optional, Dict, Any, List",
"+from typing import Any, Dict, Optional",
" ",
" ",
" class DocStatus(str, Enum):",
"- \"\"\"Dokumentations-Status-Werte\"\"\"",
"+ \"\"\"Dokumentations-Status-Werte.\"\"\"",
"+",
" DRAFT = \"draft\"",
" PUBLISHED = \"published\"",
" ARCHIVED = \"archived\""
]
},
{
"oldStart": 14,
"oldLines": 7,
"newStart": 16,
"newLines": 8,
"lines": [
" ",
" @dataclass",
" class Dokumentation:",
"- \"\"\"Dokumentation-Entity für Datenbank\"\"\"",
"+ \"\"\"Dokumentation-Entity für Datenbank.\"\"\"",
"+",
" id: Optional[int] = None",
" parent_id: Optional[int] = None",
" slug: str = \"\""
]
},
{
"oldStart": 29,
"oldLines": 7,
"newStart": 32,
"newLines": 7,
"lines": [
" updated_at: datetime = field(default_factory=datetime.now)",
" ",
" def to_dict(self) -> Dict[str, Any]:",
"- \"\"\"Vollständige Darstellung\"\"\"",
"+ \"\"\"Vollständige Darstellung.\"\"\"",
" return {",
" \"id\": self.id,",
" \"parent_id\": self.parent_id,"
]
},
{
"oldStart": 38,
"oldLines": 7,
"newStart": 41,
"newLines": 9,
"lines": [
" \"title\": self.title,",
" \"description\": self.description,",
" \"content\": self.content,",
"- \"status\": self.status.value if isinstance(self.status, DocStatus) else self.status,",
"+ \"status\": (",
"+ self.status.value if isinstance(self.status, DocStatus) else self.status",
"+ ),",
" \"sort_order\": self.sort_order,",
" \"depth\": self.depth,",
" \"created_at\": self.created_at.isoformat() if self.created_at else None,"
]
},
{
"oldStart": 46,
"oldLines": 24,
"newStart": 51,
"newLines": 14,
"lines": [
" }",
" ",
" def to_dict_compact(self) -> Dict[str, Any]:",
"- \"\"\"Kompakte Darstellung für Listen (Token-sparend, ohne content)\"\"\"",
"+ \"\"\"Kompakte Darstellung für Listen (Token-sparend, ohne content).\"\"\"",
" return {",
" \"id\": self.id,",
" \"parent_id\": self.parent_id,",
" \"path\": self.path,",
" \"title\": self.title,",
"- \"status\": self.status.value if isinstance(self.status, DocStatus) else self.status,",
"+ \"status\": (",
"+ self.status.value if isinstance(self.status, DocStatus) else self.status",
"+ ),",
" \"depth\": self.depth,",
" }",
"-",
"-",
"-@dataclass",
"-class LogEntry:",
"- \"\"\"Log-Eintrag für mcp_log Tabelle\"\"\"",
"- client_name: str = \"mcp-docs\"",
"- tool_name: str = \"\"",
"- request: str = \"\"",
"- status: str = \"success\" # success | denied | error",
"- duration_ms: int = 0",
"- error_message: Optional[str] = None",
"- timestamp: datetime = field(default_factory=datetime.now)"
]
}
],
"originalFile": "\"\"\"Domain Entities für MCP-Docs Server\"\"\"\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom enum import Enum\nfrom typing import Optional, Dict, Any, List\n\n\nclass DocStatus(str, Enum):\n \"\"\"Dokumentations-Status-Werte\"\"\"\n DRAFT = \"draft\"\n PUBLISHED = \"published\"\n ARCHIVED = \"archived\"\n\n\n@dataclass\nclass Dokumentation:\n \"\"\"Dokumentation-Entity für Datenbank\"\"\"\n id: Optional[int] = None\n parent_id: Optional[int] = None\n slug: str = \"\"\n path: str = \"\"\n title: str = \"\"\n description: Optional[str] = None\n content: str = \"\"\n status: DocStatus = DocStatus.DRAFT\n sort_order: int = 0\n depth: int = 0\n created_at: datetime = field(default_factory=datetime.now)\n updated_at: datetime = field(default_factory=datetime.now)\n\n def to_dict(self) -> Dict[str, Any]:\n \"\"\"Vollständige Darstellung\"\"\"\n return {\n \"id\": self.id,\n \"parent_id\": self.parent_id,\n \"slug\": self.slug,\n \"path\": self.path,\n \"title\": self.title,\n \"description\": self.description,\n \"content\": self.content,\n \"status\": self.status.value if isinstance(self.status, DocStatus) else self.status,\n \"sort_order\": self.sort_order,\n \"depth\": self.depth,\n \"created_at\": self.created_at.isoformat() if self.created_at else None,\n \"updated_at\": self.updated_at.isoformat() if self.updated_at else None,\n }\n\n def to_dict_compact(self) -> Dict[str, Any]:\n \"\"\"Kompakte Darstellung für Listen (Token-sparend, ohne content)\"\"\"\n return {\n \"id\": self.id,\n \"parent_id\": self.parent_id,\n \"path\": self.path,\n \"title\": self.title,\n \"status\": self.status.value if isinstance(self.status, DocStatus) else self.status,\n \"depth\": self.depth,\n }\n\n\n@dataclass\nclass LogEntry:\n \"\"\"Log-Eintrag für mcp_log Tabelle\"\"\"\n client_name: str = \"mcp-docs\"\n tool_name: str = \"\"\n request: str = \"\"\n status: str = \"success\" # success | denied | error\n duration_ms: int = 0\n error_message: Optional[str] = None\n timestamp: datetime = field(default_factory=datetime.now)\n"
}
}