docs: update PROGRESS.md with Phase 5 Batch 4 completion (Tasks 5.16-5.17)
This commit is contained in:
+93
@@ -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**
|
||||
|
||||
Reference in New Issue
Block a user