feat(mcp) : outils MCP Directory (prestataires, contacts, adresses, rapports) #24

Merged
matthieu merged 3 commits from feat/mcp-directory-prestataire-contact-address-report into develop 2026-06-24 19:12:07 +00:00
Owner

Résumé

Ajoute 20 nouveaux outils MCP dans le module Directory pour permettre à Claude (ou tout client MCP) de remplir un dossier client / prospect / prestataire complet — onglets Information / Contact / Adresse / Rapport — sans passer par l'UI.

Périmètre

CRUD complet (5 outils chacune) sur 4 entités :

Entité Outils MCP ajoutés
Prestataire create-prestataire, update-prestataire, get-prestataire, list-prestataires, delete-prestataire
Contact create-contact, update-contact, get-contact, list-contacts, delete-contact
Address create-address, update-address, get-address, list-addresses, delete-address
CommercialReport create-commercial-report, update-commercial-report, get-commercial-report, list-commercial-reports, delete-commercial-report

En plus :

  • get-client, get-prospect, get-prestataire renvoient désormais un payload enrichi avec les contacts / adresses / rapports liés (un seul appel pour reconstruire l'onglet entier).

Règles métier

  • Pour Contact / Address / CommercialReport : rattachement à exactement un parent parmi clientId, prospectId, prestataireId (validation côté tool).
  • CommercialReport : type validé (note / call / meeting / email), occurredAt parsé en DateTimeImmutable (défaut = aujourd'hui), auteur rempli automatiquement par le listener CommercialReportAuthorListener existant.
  • Address : country validé en ISO 3166 alpha-2 (défaut FR).
  • Sécurité : ROLE_ADMIN aligné sur les outils MCP Directory existants (create-client, create-prospect, etc.). Pas de migration vers les permissions RBAC fines (directory.*) pour rester cohérent — à faire dans un second temps pour TOUS les outils Directory si besoin.

Plumbing

  • Interfaces de repository Contact / Address / CommercialReport : ajout de findBy() (l'implémentation Doctrine l'a déjà via ServiceEntityRepository).
  • config/services.yaml : bindings interface → implémentation Doctrine ajoutés pour Prestataire / Contact / Address / CommercialReport (alignés sur le pattern Client/Prospect).
  • App\Shared\Infrastructure\Mcp\Serializer étendu avec prestataire / contact / address / commercialReport / reportDocument.

Test plan

  • php -l sur tous les nouveaux fichiers
  • make test (PHPUnit) : 179 tests OK
  • PHP CS Fixer (lancé via le pre-commit hook)
  • Container Symfony : les 22 outils Directory MCP sont enregistrés (debug:container)
  • Test end-to-end via le transport MCP HTTP : 86 outils MCP exposés au total (66 avant + 20 ajoutés). Création d'un prestataire + contact + adresse + rapport puis get-prestataire renvoyant le dossier complet

À faire après merge

  • Bump version (config/version.yaml + tag v0.4.x) selon la convention projet.
  • Mettre à jour le instructions du serveur MCP (config/packages/mcp.yaml) pour mentionner les nouvelles entités Directory si pertinent.

🤖 Generated with Claude Code

## Résumé Ajoute **20 nouveaux outils MCP** dans le module `Directory` pour permettre à Claude (ou tout client MCP) de remplir un dossier **client / prospect / prestataire** complet — onglets **Information / Contact / Adresse / Rapport** — sans passer par l'UI. ## Périmètre CRUD complet (5 outils chacune) sur 4 entités : | Entité | Outils MCP ajoutés | |---|---| | **Prestataire** | `create-prestataire`, `update-prestataire`, `get-prestataire`, `list-prestataires`, `delete-prestataire` | | **Contact** | `create-contact`, `update-contact`, `get-contact`, `list-contacts`, `delete-contact` | | **Address** | `create-address`, `update-address`, `get-address`, `list-addresses`, `delete-address` | | **CommercialReport** | `create-commercial-report`, `update-commercial-report`, `get-commercial-report`, `list-commercial-reports`, `delete-commercial-report` | En plus : - `get-client`, `get-prospect`, `get-prestataire` renvoient désormais **un payload enrichi** avec les contacts / adresses / rapports liés (un seul appel pour reconstruire l'onglet entier). ## Règles métier - Pour `Contact / Address / CommercialReport` : **rattachement à exactement un parent** parmi `clientId`, `prospectId`, `prestataireId` (validation côté tool). - `CommercialReport` : type validé (`note` / `call` / `meeting` / `email`), `occurredAt` parsé en `DateTimeImmutable` (défaut = aujourd'hui), auteur rempli automatiquement par le listener `CommercialReportAuthorListener` existant. - `Address` : `country` validé en ISO 3166 alpha-2 (défaut `FR`). - Sécurité : `ROLE_ADMIN` aligné sur les outils MCP Directory existants (`create-client`, `create-prospect`, etc.). Pas de migration vers les permissions RBAC fines (`directory.*`) pour rester cohérent — à faire dans un second temps pour TOUS les outils Directory si besoin. ## Plumbing - Interfaces de repository `Contact / Address / CommercialReport` : ajout de `findBy()` (l'implémentation Doctrine l'a déjà via `ServiceEntityRepository`). - `config/services.yaml` : bindings interface → implémentation Doctrine ajoutés pour `Prestataire / Contact / Address / CommercialReport` (alignés sur le pattern Client/Prospect). - `App\Shared\Infrastructure\Mcp\Serializer` étendu avec `prestataire / contact / address / commercialReport / reportDocument`. ## Test plan - [x] `php -l` sur tous les nouveaux fichiers ✅ - [x] `make test` (PHPUnit) : 179 tests OK ✅ - [x] PHP CS Fixer ✅ (lancé via le pre-commit hook) - [x] Container Symfony : les 22 outils Directory MCP sont enregistrés (`debug:container`) ✅ - [x] **Test end-to-end via le transport MCP HTTP** : 86 outils MCP exposés au total (66 avant + 20 ajoutés). Création d'un prestataire + contact + adresse + rapport puis `get-prestataire` renvoyant le dossier complet ✅ ## À faire après merge - [ ] Bump version (`config/version.yaml` + tag `v0.4.x`) selon la convention projet. - [ ] Mettre à jour le `instructions` du serveur MCP (`config/packages/mcp.yaml`) pour mentionner les nouvelles entités Directory si pertinent. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
matthieu added 1 commit 2026-06-24 18:37:38 +00:00
feat(mcp) : outils MCP Directory pour prestataires, contacts, adresses et rapports
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 41s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 59s
99626b89da
Ajoute 20 nouveaux outils MCP pour permettre à Claude (ou tout client MCP) de
remplir un dossier client / prospect / prestataire complet — onglets
Information, Contact, Adresse et Rapport — sans passer par l'UI.

Entités couvertes (CRUD complet, 5 outils chacune) :
- Prestataire : create / update / get / list / delete
- Contact : create / update / get / list / delete
- Address : create / update / get / list / delete
- CommercialReport : create / update / get / list / delete

Détails :
- Contact / Address / CommercialReport doivent être rattachés à exactement
  un parent parmi clientId, prospectId, prestataireId (validation côté tool).
- get-client, get-prospect et get-prestataire renvoient désormais un payload
  enrichi avec la liste de leurs contacts, adresses et rapports liés : un
  seul appel pour reconstruire l'onglet entier.
- Pour CommercialReport, le type (note / call / meeting / email) et la date
  occurredAt sont validés ; l'auteur est rempli automatiquement par le
  listener existant.
- Sécurité : ROLE_ADMIN aligné sur les autres outils MCP de Directory (pas
  de migration vers les permissions RBAC fines pour rester cohérent).

Plumbing :
- Repositories Contact / Address / CommercialReport : ajout de findBy() sur
  les interfaces (l'implémentation Doctrine l'a déjà via ServiceEntityRepository).
- Bindings interface -> implémentation Doctrine ajoutés dans services.yaml
  pour Prestataire / Contact / Address / CommercialReport.
- Sérialiseur partagé étendu : prestataire / contact / address /
  commercialReport / reportDocument.

Vérification : 86 outils MCP exposés au total (66 avant + 20 ajoutés), test
end-to-end via le transport HTTP (create-prestataire + create-contact +
create-address + create-commercial-report + get-prestataire renvoyant le
dossier complet). Suite PHPUnit verte.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
matthieu added 1 commit 2026-06-24 18:53:36 +00:00
chore(directory) : ferme contrats Repository (findBy) + bindings DI MCP Directory
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 1m15s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m34s
ad029f5c7d
Plumbing complementaire des outils MCP ajoutes en 99626b8 :
- declare findBy() sur Address/Contact/CommercialReport RepositoryInterface
  (Prestataire l'avait deja) pour exposer la methode au contrat DDD
- bindings explicites des 4 repos dans services.yaml (cohrence avec
  Client/Prospect, meme si Symfony auto-alias l'interface vers l'unique
  implementation)
matthieu added 1 commit 2026-06-24 19:08:29 +00:00
test(directory) : tests fonctionnels MCP pour Prestataire/Contact/Address/CommercialReport
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 40s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m20s
aad949c10c
Couvre les 20 nouveaux outils MCP Directory (5 par entite : create/get/list/
update/delete) avec un focus sur les guards et invariants :
- exactly-one-parent (Contact/Address/CommercialReport)
- ROLE_ADMIN
- ISO 3166 alpha-2 + normalisation uppercase (Address)
- enum ReportType + defaults note/today + parsing date (CommercialReport)
- author auto-rempli par CommercialReportAuthorListener (token storage)
- collections vides dans get-prestataire enrichi
- ordre DESC sur occurredAt pour list-commercial-reports
- delete renvoie null apres em.clear()

38 tests / 105 assertions. Suite complete passe a 217/217.
matthieu merged commit 41a98f93ee into develop 2026-06-24 19:12:07 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/Lesstime#24