docs: update PROGRESS.md with Phase 5 Batch 4 completion (Tasks 5.16-5.17)

This commit is contained in:
Agent Zero
2026-07-23 23:02:33 +02:00
parent 317d5c81f8
commit 3c8e41b3f8
+93
View File
@@ -295,3 +295,96 @@ Siehe `MASTER-PLAN.md` für alle Tasks.
- `app/plugins/builtins/system_notif/plugin.py` — backup.completed/failed events + handler methods
**Phase 5 Batch 3 Gesamt: ✅ Complete**
---
## Phase 5 Batch 4: MCP Server & Client Integration (Tasks 5.16-5.17) ✅
### Task 5.16: MCP-Server Integration (10h) ✅
LeoCRM als MCP-Server: Externe Tools (Claude Desktop, andere KI-Clients) können auf LeoCRM-Daten zugreifen.
**Neues Plugin `app/plugins/builtins/mcp_server/`:**
- `plugin.py` — PluginManifest (name='mcp_server', dependencies=['permissions'], permissions=['mcp:read','mcp:write'])
- `routes.py` — 3 Endpoints:
- `GET /api/v1/mcp/tools` — Listet alle 9 MCP-Tools mit Schema
- `POST /api/v1/mcp/tools/{tool_name}/execute` — Führt MCP-Tool aus (mit RBAC)
- `GET /api/v1/mcp/config` — MCP-Server-Konfiguration für externe Clients
- `tool_definitions.py` — 9 MCP-Tool-Definitionen:
- `search_contacts` — Kontakte durchsuchen (query, limit)
- `get_contact` — Kontakt Details abrufen (contact_id)
- `create_contact` — Neuen Kontakt erstellen (name, email, phone, type)
- `list_calendar_entries` — Kalendereinträge auflisten (date_from, date_to)
- `create_calendar_entry` — Termin erstellen (title, start, end)
- `list_emails` — E-Mails auflisten (folder, limit)
- `send_email` — E-Mail senden (to, subject, body)
- `list_files` — DMS-Dateien auflisten (folder_id)
- `upload_file` — Datei hochladen (filename, content_base64)
- `schemas.py` — Pydantic schemas (McpToolDefinition, McpToolExecuteRequest/Response, McpServerConfig)
- `migrations/0001_initial.sql` — Stateless plugin (no tables needed)
- Auth: Session-based auth + RBAC permission check per tool
**Frontend:**
- `frontend/src/api/mcp.ts` — API client with React Query hooks (useMcpTools, useMcpConfig, useExecuteMcpTool)
- `frontend/src/pages/SettingsMcp.tsx` — MCP Settings page with tool listing, execution UI, and server config
- `frontend/src/routes/index.tsx` — Added /settings/mcp route
- `frontend/src/pages/Settings.tsx` — Added MCP nav item
- i18n: de.json + en.json updated with mcp.server.* and mcp.client.* keys
**Tests:** `tests/test_mcp_server.py` — 7 tests (all passing)
- AC1: List MCP tools (9 tools)
- AC2: Get MCP config
- AC3: Execute search_contacts
- AC4: Non-existent tool returns 404
- AC5: Tool definitions schema validation
- AC6: Unauthorized access rejected
- AC7: Execute create_contact
### Task 5.17: MCP-Client Integration (6h) ✅
LeoCRM-Agenten können externe MCP-Server nutzen (Web-Search, Code-Execution, externe Datenquellen).
**Neues Plugin `app/plugins/builtins/mcp_client/`:**
- `plugin.py` — PluginManifest (name='mcp_client', dependencies=['permissions'], permissions=['mcp-client:read','mcp-client:write','mcp-client:admin'])
- `models.py` — McpServerConfig Model (name, url, api_token, enabled, tenant_id) mit TenantMixin
- `routes.py` — CRUD + tool execution:
- `GET /api/v1/mcp-client/servers` — List server configs
- `POST /api/v1/mcp-client/servers` — Create server config
- `PATCH /api/v1/mcp-client/servers/{id}` — Update server config
- `DELETE /api/v1/mcp-client/servers/{id}` — Delete server config
- `GET /servers/{id}/tools` — List tools from external server
- `POST /servers/{id}/execute` — Execute tool on external server
- `schemas.py` — Pydantic schemas (McpServerConfigCreate/Update/Response, McpServerToolsResponse, McpServerExecuteRequest/Response)
- `client.py` — Async MCP client using httpx (list_tools, execute_tool, health_check)
- `tool_registry_integration.py` — Integriert externe MCP-Tools in ai_assistant tool_registry
- `sync_external_tools()` — Fetches tools from all enabled servers and registers them
- `unregister_all_external_tools()` — Cleanup
- Tool naming: `mcp__{server}__{tool}`
- `migrations/0001_initial.sql` — mcp_server_configs table
**Frontend:**
- `frontend/src/api/mcpClient.ts` — API client with React Query hooks (useMcpServers, useCreateMcpServer, useUpdateMcpServer, useDeleteMcpServer, useMcpServerTools)
- MCP Client settings UI in SettingsMcp.tsx (server CRUD, tool viewing)
- i18n entries for mcp.client.*
**Tests:** `tests/test_mcp_client.py` — 8 tests (all passing)
- AC1: List servers (empty)
- AC2: Create server config
- AC3: Update server config
- AC4: Delete server config
- AC5: List servers after creating
- AC6: Unauthorized access rejected
- AC7: Execute on non-existent server returns 404
- AC8: Tool registry integration verification
### Verifikation
- Alle 15 Tests passing (7 + 8)
- TSC: 0 neue Errors (nur pre-existing Dms.tsx errors)
- 2 Commits mit klaren Messages
- TenantMixin für McpServerConfig verwendet
- RBAC (require_permission) auf allen API-Routes
- i18n (de.json, en.json) aktualisiert
- Keine .env committet
- Bestehende Patterns verwendet (apiClient, React Query hooks, PluginManifest)
**Phase 5 Batch 4 Gesamt: ✅ Complete**