@chill-sharp/ui-core 1.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/.agents/skills/chillsharp-current-user-preferences/SKILL.md +70 -0
  2. package/.agents/skills/chillsharp-ui-template/SKILL.md +18 -0
  3. package/README.md +103 -0
  4. package/chill-sharp-ui-core.d.ts.map +1 -0
  5. package/doc/AIAssistedDevelopment/README.md +185 -0
  6. package/doc/AttachmentModel/README.md +173 -0
  7. package/doc/AuthenticationModel/README.md +213 -0
  8. package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +293 -0
  9. package/doc/ChillSharpClient.md +464 -0
  10. package/doc/ClientGeneration/README.md +172 -0
  11. package/doc/ComplianceGuide/README.md +178 -0
  12. package/doc/Configuration/README.md +94 -0
  13. package/doc/CurrentUserPreferences.md +114 -0
  14. package/doc/DateTimePolicy/README.md +154 -0
  15. package/doc/DateTimeSerialization.md +423 -0
  16. package/doc/Endpoints.md +260 -0
  17. package/doc/HowTo/01-simple-blog-sqlite.md +153 -0
  18. package/doc/HowTo/02-blog-schema-labels.md +140 -0
  19. package/doc/HowTo/03-authentication.md +218 -0
  20. package/doc/HowTo/04-blog-posts-one-to-many.md +194 -0
  21. package/doc/HowTo/05-docker-env-variables.md +274 -0
  22. package/doc/HowTo/06-chunk-transactions-autocomplete.md +196 -0
  23. package/doc/Mcp/ChatGPT.md +291 -0
  24. package/doc/Mcp/README.md +799 -0
  25. package/doc/MenuGuide/README.md +49 -0
  26. package/doc/ModelPreparation.md +255 -0
  27. package/doc/PermissionModel/README.md +277 -0
  28. package/doc/README.md +228 -0
  29. package/doc/ReferenceExistence.md +130 -0
  30. package/doc/RegisterContext.md +217 -0
  31. package/doc/UiCore/CRUD.md +170 -0
  32. package/doc/UiCore/README.md +13 -0
  33. package/doc/ValidationModel/README.md +117 -0
  34. package/doc/it/AIAssistedDevelopment/README.md +185 -0
  35. package/doc/it/AttachmentModel/README.md +173 -0
  36. package/doc/it/AuthenticationModel/README.md +171 -0
  37. package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +292 -0
  38. package/doc/it/ChillSharpClient.md +464 -0
  39. package/doc/it/ClientGeneration/README.md +152 -0
  40. package/doc/it/ComplianceGuide/README.md +178 -0
  41. package/doc/it/Configuration/README.md +94 -0
  42. package/doc/it/CurrentUserPreferences.md +114 -0
  43. package/doc/it/DateTimePolicy/README.md +154 -0
  44. package/doc/it/DateTimeSerialization.md +423 -0
  45. package/doc/it/Endpoints.md +260 -0
  46. package/doc/it/HowTo/01-simple-blog-sqlite.md +152 -0
  47. package/doc/it/HowTo/02-blog-schema-labels.md +139 -0
  48. package/doc/it/HowTo/03-authentication.md +221 -0
  49. package/doc/it/HowTo/04-blog-posts-one-to-many.md +193 -0
  50. package/doc/it/HowTo/05-docker-env-variables.md +268 -0
  51. package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +196 -0
  52. package/doc/it/Mcp/ChatGPT.md +291 -0
  53. package/doc/it/Mcp/README.md +799 -0
  54. package/doc/it/MenuGuide/README.md +49 -0
  55. package/doc/it/ModelPreparation.md +254 -0
  56. package/doc/it/PermissionModel/README.md +190 -0
  57. package/doc/it/README.md +172 -0
  58. package/doc/it/ReferenceExistence.md +130 -0
  59. package/doc/it/RegisterContext.md +218 -0
  60. package/doc/it/UiCore/CRUD.md +170 -0
  61. package/doc/it/UiCore/README.md +13 -0
  62. package/doc/it/ValidationModel/README.md +117 -0
  63. package/fesm2022/chill-sharp-ui-core.mjs +16725 -0
  64. package/fesm2022/chill-sharp-ui-core.mjs.map +1 -0
  65. package/index.d.ts +6 -0
  66. package/lib/chill-sharp-ui-root.component.d.ts +6 -0
  67. package/lib/chill-sharp-ui-root.component.d.ts.map +1 -0
  68. package/lib/chill-sharp-ui.routes.d.ts +3 -0
  69. package/lib/chill-sharp-ui.routes.d.ts.map +1 -0
  70. package/lib/chill.config.d.ts +5 -0
  71. package/lib/chill.config.d.ts.map +1 -0
  72. package/lib/layouts/auth-shell.component.d.ts +8 -0
  73. package/lib/layouts/auth-shell.component.d.ts.map +1 -0
  74. package/lib/layouts/workspace-page.component.d.ts +49 -0
  75. package/lib/layouts/workspace-page.component.d.ts.map +1 -0
  76. package/lib/lib/chill-form.component.d.ts +151 -0
  77. package/lib/lib/chill-form.component.d.ts.map +1 -0
  78. package/lib/lib/chill-i18n-button-label.component.d.ts +27 -0
  79. package/lib/lib/chill-i18n-button-label.component.d.ts.map +1 -0
  80. package/lib/lib/chill-i18n-label.component.d.ts +30 -0
  81. package/lib/lib/chill-i18n-label.component.d.ts.map +1 -0
  82. package/lib/lib/chill-json-input.component.d.ts +31 -0
  83. package/lib/lib/chill-json-input.component.d.ts.map +1 -0
  84. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts +12 -0
  85. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts.map +1 -0
  86. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts +17 -0
  87. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts.map +1 -0
  88. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts +45 -0
  89. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts.map +1 -0
  90. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts +19 -0
  91. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts.map +1 -0
  92. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts +12 -0
  93. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts.map +1 -0
  94. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts +13 -0
  95. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts.map +1 -0
  96. package/lib/lib/chill-polymorphic-input.component.d.ts +452 -0
  97. package/lib/lib/chill-polymorphic-input.component.d.ts.map +1 -0
  98. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts +7 -0
  99. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts.map +1 -0
  100. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts +7 -0
  101. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts.map +1 -0
  102. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts +7 -0
  103. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts.map +1 -0
  104. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts +8 -0
  105. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts.map +1 -0
  106. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts +7 -0
  107. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts.map +1 -0
  108. package/lib/lib/chill-polymorphic-output.component.d.ts +75 -0
  109. package/lib/lib/chill-polymorphic-output.component.d.ts.map +1 -0
  110. package/lib/lib/chill-table.component.d.ts +434 -0
  111. package/lib/lib/chill-table.component.d.ts.map +1 -0
  112. package/lib/lib/chill-text-editor-dialog.component.d.ts +14 -0
  113. package/lib/lib/chill-text-editor-dialog.component.d.ts.map +1 -0
  114. package/lib/lib/crud-configuration.utils.d.ts +4 -0
  115. package/lib/lib/crud-configuration.utils.d.ts.map +1 -0
  116. package/lib/lib/culture-name-options.d.ts +3 -0
  117. package/lib/lib/culture-name-options.d.ts.map +1 -0
  118. package/lib/lib/date-format-options.d.ts +3 -0
  119. package/lib/lib/date-format-options.d.ts.map +1 -0
  120. package/lib/lib/iana-time-zone-options.d.ts +3 -0
  121. package/lib/lib/iana-time-zone-options.d.ts.map +1 -0
  122. package/lib/lib/notice-transition.directive.d.ts +17 -0
  123. package/lib/lib/notice-transition.directive.d.ts.map +1 -0
  124. package/lib/lib/schema-property-dialog.component.d.ts +74 -0
  125. package/lib/lib/schema-property-dialog.component.d.ts.map +1 -0
  126. package/lib/models/chill-auth.models.d.ts +176 -0
  127. package/lib/models/chill-auth.models.d.ts.map +1 -0
  128. package/lib/models/chill-menu.models.d.ts +12 -0
  129. package/lib/models/chill-menu.models.d.ts.map +1 -0
  130. package/lib/models/chill-schema.models.d.ts +141 -0
  131. package/lib/models/chill-schema.models.d.ts.map +1 -0
  132. package/lib/models/workspace-dialog.models.d.ts +16 -0
  133. package/lib/models/workspace-dialog.models.d.ts.map +1 -0
  134. package/lib/models/workspace-task.models.d.ts +36 -0
  135. package/lib/models/workspace-task.models.d.ts.map +1 -0
  136. package/lib/pages/confirm-reset-page.component.d.ts +21 -0
  137. package/lib/pages/confirm-reset-page.component.d.ts.map +1 -0
  138. package/lib/pages/crud/attachment-upload-dialog.component.d.ts +24 -0
  139. package/lib/pages/crud/attachment-upload-dialog.component.d.ts.map +1 -0
  140. package/lib/pages/crud/crud-page.component.d.ts +244 -0
  141. package/lib/pages/crud/crud-page.component.d.ts.map +1 -0
  142. package/lib/pages/login-page.component.d.ts +21 -0
  143. package/lib/pages/login-page.component.d.ts.map +1 -0
  144. package/lib/pages/permissions/auth-role-dialog.component.d.ts +29 -0
  145. package/lib/pages/permissions/auth-role-dialog.component.d.ts.map +1 -0
  146. package/lib/pages/permissions/auth-search-select.component.d.ts +28 -0
  147. package/lib/pages/permissions/auth-search-select.component.d.ts.map +1 -0
  148. package/lib/pages/permissions/auth-user-dialog.component.d.ts +35 -0
  149. package/lib/pages/permissions/auth-user-dialog.component.d.ts.map +1 -0
  150. package/lib/pages/permissions/permission-editor.component.d.ts +55 -0
  151. package/lib/pages/permissions/permission-editor.component.d.ts.map +1 -0
  152. package/lib/pages/permissions/permissions-page.component.d.ts +38 -0
  153. package/lib/pages/permissions/permissions-page.component.d.ts.map +1 -0
  154. package/lib/pages/permissions/role-permission.component.d.ts +43 -0
  155. package/lib/pages/permissions/role-permission.component.d.ts.map +1 -0
  156. package/lib/pages/permissions/user-permission.component.d.ts +43 -0
  157. package/lib/pages/permissions/user-permission.component.d.ts.map +1 -0
  158. package/lib/pages/register-page.component.d.ts +24 -0
  159. package/lib/pages/register-page.component.d.ts.map +1 -0
  160. package/lib/pages/reset-password-page.component.d.ts +18 -0
  161. package/lib/pages/reset-password-page.component.d.ts.map +1 -0
  162. package/lib/provide-chill-sharp-ui-core.d.ts +8 -0
  163. package/lib/provide-chill-sharp-ui-core.d.ts.map +1 -0
  164. package/lib/services/chill.service.d.ts +249 -0
  165. package/lib/services/chill.service.d.ts.map +1 -0
  166. package/lib/services/workspace-dialog.service.d.ts +22 -0
  167. package/lib/services/workspace-dialog.service.d.ts.map +1 -0
  168. package/lib/services/workspace-layout.service.d.ts +13 -0
  169. package/lib/services/workspace-layout.service.d.ts.map +1 -0
  170. package/lib/services/workspace-task-registry.service.d.ts +35 -0
  171. package/lib/services/workspace-task-registry.service.d.ts.map +1 -0
  172. package/lib/services/workspace-toolbar.service.d.ts +23 -0
  173. package/lib/services/workspace-toolbar.service.d.ts.map +1 -0
  174. package/lib/services/workspace.service.d.ts +114 -0
  175. package/lib/services/workspace.service.d.ts.map +1 -0
  176. package/lib/storage-keys.d.ts +5 -0
  177. package/lib/storage-keys.d.ts.map +1 -0
  178. package/lib/tasks/crud-task/crud-task.component.d.ts +33 -0
  179. package/lib/tasks/crud-task/crud-task.component.d.ts.map +1 -0
  180. package/lib/tasks/goto-url-task/goto-url-task.component.d.ts +31 -0
  181. package/lib/tasks/goto-url-task/goto-url-task.component.d.ts.map +1 -0
  182. package/lib/workspace/confirm-message-dialog.component.d.ts +16 -0
  183. package/lib/workspace/confirm-message-dialog.component.d.ts.map +1 -0
  184. package/lib/workspace/entity-options-dialog.component.d.ts +29 -0
  185. package/lib/workspace/entity-options-dialog.component.d.ts.map +1 -0
  186. package/lib/workspace/external-task-api.d.ts +2 -0
  187. package/lib/workspace/external-task-api.d.ts.map +1 -0
  188. package/lib/workspace/user-profile-dialog.component.d.ts +30 -0
  189. package/lib/workspace/user-profile-dialog.component.d.ts.map +1 -0
  190. package/lib/workspace/workspace-dialog-host.component.d.ts +26 -0
  191. package/lib/workspace/workspace-dialog-host.component.d.ts.map +1 -0
  192. package/lib/workspace/workspace-menu-item-dialog.component.d.ts +61 -0
  193. package/lib/workspace/workspace-menu-item-dialog.component.d.ts.map +1 -0
  194. package/lib/workspace/workspace-menu.component.d.ts +104 -0
  195. package/lib/workspace/workspace-menu.component.d.ts.map +1 -0
  196. package/lib/workspace/workspace-taskbar.component.d.ts +14 -0
  197. package/lib/workspace/workspace-taskbar.component.d.ts.map +1 -0
  198. package/package.json +54 -0
  199. package/public-api.d.ts +56 -0
  200. package/public-api.d.ts.map +1 -0
  201. package/service-worker/chill-sharp-service-worker.js +166 -0
  202. package/styles/core-theme.scss +1268 -0
  203. package/template-customization/upgrade.ps1.template +342 -0
  204. package/template-customization/upgrade.sh.template +271 -0
@@ -0,0 +1,799 @@
1
+ # Modulo MCP ChillSharp
2
+
3
+ Versione originale in inglese: [English](../../Mcp/README.md)
4
+
5
+
6
+ Questo documento descrive il modulo `ChillSharp.Mcp`, come registrarlo in un host ASP.NET Core e come preparare un `DbContext` e un modello in modo che gli agenti IA possano utilizzare lo schema esposto e la superficie delle query in modo efficiente.
7
+
8
+ `ChillSharp.Mcp` utilizza l'SDK MCP C# ufficiale ed espone un server Model Context Protocol supportato dal contesto ChillSharp.
9
+
10
+ Per una guida mirata sulla connessione di questo server MCP da ChatGPT, vedere [HOW-TO: connettere ChillSharp MCP a ChatGPT](ChatGPT.md).
11
+
12
+ ## Obiettivi
13
+
14
+ Dopo la configurazione, un client MCP può:
15
+
16
+ - scoprire gli schemi abilitati per MCP esposti dal tuo host
17
+ - ispezionare l'entità completa e gli schemi di query prima di inviare richieste
18
+ - leggere le descrizioni MCP a livello di schema e di proprietà
19
+ - esegui solo le query che esponi esplicitamente tramite `EnableMCP`
20
+ - eseguire operazioni DTO come ricerca, ricerca, creazione, aggiornamento, eliminazione, completamento automatico, convalida e blocco
21
+ - operare con autorizzazioni utente autenticate dal portatore e limitazioni della chiave API
22
+
23
+ ## Strumenti registrati
24
+
25
+ Il modulo registra questi strumenti MCP:
26
+
27
+ -
28
+ -
29
+ -
30
+ -
31
+ -
32
+ -
33
+ -
34
+ -
35
+ -
36
+ -
37
+ -
38
+ -
39
+ -
40
+
41
+ ### `ChillSharp get-schema-list`
42
+
43
+ Restituisce solo gli schemi abilitati per MCP.
44
+
45
+ Utilizzalo come punto di ingresso per il rilevamento. Indica all'IA quali entità e query devono essere utilizzate tramite MCP.
46
+
47
+ ### `ChillSharp get-schema`
48
+
49
+ Restituisce l'intero `ChillDtoSchema` per un'entità o un tipo di query abilitato per MCP.
50
+
51
+ Questo è lo strumento di introspezione più importante. Include:
52
+
53
+ - metadati dello schema
54
+ - informazioni sul tipo correlato alla query
55
+ - metadati di relazione dedotti da raccolte annotate con `ChillRelationAttribute`
56
+ - `MCPDescription` a livello di schema
57
+ - tutte le proprietà dello schema
58
+ - `MCPDescription` a livello di proprietà per ogni proprietà
59
+ - informazioni sul tipo di riferimento
60
+ - `simplePropertyType`, una stringa di tipo agent-friendly per la costruzione del carico utile
61
+
62
+ In pratica, ecco come apprende un’intelligenza artificiale:
63
+
64
+ - cosa rappresenta l'oggetto
65
+ - cosa significa ciascuna proprietà
66
+ - quale query restituisce quale tipo di entità
67
+ - quali proprietà sono riferimenti ad altri tipi di Chill
68
+ - quale forma di valore richiede ciascuna proprietà della richiesta
69
+
70
+ Gli agenti non dovrebbero inventare oggetti di richiesta. Utilizza `get-schema` come contratto, copia i nomi esatti delle proprietà dallo schema e invia valori che corrispondono a `simplePropertyType` di ciascuna proprietà.
71
+
72
+ Per gli schemi di entità, `Relations` descrive le raccolte di relazioni figlio che l'interfaccia utente può collegare automaticamente in fase di esecuzione. Ogni voce di relazione include:
73
+
74
+ - `ChillType`, il tipo di entità figlio o di relazione esposto dalla raccolta
75
+ - `ChillQuery`, il tipo di query da utilizzare per la ricerca secondaria filtrata quando è possibile risolverla
76
+ - `FixedValues`, valori predefiniti da inserire durante la creazione di un'entità figlio
77
+ - `FixedQueryValues`, filtri di query predefiniti da applicare durante la navigazione di entità correlate esistenti
78
+ - `RelationLabel`, l'etichetta GUID e i testi predefiniti derivati ​​da `ChillRelationAttribute` della raccolta
79
+
80
+ Quando una relazione può essere ricollegata al genitore corrente tramite un riferimento figlio annotato, ChillSharp emette il valore magico `@{mock}` all'interno di `FixedValues` e `FixedQueryValues`. I client dell'interfaccia utente sostituiscono quel token con l'entità principale corrente per il nome della proprietà FK/riferimento corrispondente.
81
+
82
+ I valori `simplePropertyType` comuni sono:
83
+
84
+ | tipoPropertysemplice | Valore del carico utile |
85
+ | --- | --- |
86
+ | | Stringa GUID |
87
+ | | Numero JSON senza decimali |
88
+ | | Numero JSON |
89
+ | | stringa della data |
90
+ | | stringa temporale |
91
+ | | stringa data-ora |
92
+ | | stringa di durata o valore numerico accettato dall'host |
93
+ | | JSON booleano |
94
+ | , | Stringa JSON |
95
+ | | Oggetto JSON, array o stringa JSON in base al contratto di campo |
96
+ | | Riferimento `ChillDtoEntity` con `ChillType` e `Guid` |
97
+ | | array di riferimenti `ChillDtoEntity` |
98
+ | | query DTO corrispondente allo schema di query a cui si fa riferimento |
99
+
100
+ ### `ChillSharp query`
101
+
102
+ Esegue una query ChillSharp solo quando la relativa entità restituita è abilitata per MCP.
103
+
104
+ Il flusso di lavoro consigliato è:
105
+
106
+ 1. chiamare `ChillSharp get-schema-list`
107
+ 2. chiamare `ChillSharp get-schema` sul tipo di query selezionato
108
+ 3. leggere descrizioni, proprietà e tipo restituito
109
+ 4. invia un payload `ChillDtoQuery` a `ChillSharp query`
110
+
111
+ L'oggetto `Properties` deve contenere solo nomi di proprietà di input accettati dallo schema di query. Per ogni valore, seguire `simplePropertyType`; ad esempio, inviare una stringa per `string`, un numero per `int` o `decimal` e un riferimento `ChillDtoEntity` per `chill-entity`.
112
+
113
+ Leggere `MCPDescription` di ciascuna proprietà della query per dedurre come viene eseguita la ricerca dell'input. Le descrizioni dovrebbero indicare all'agente se una proprietà si comporta come un valore esatto, contiene una ricerca di testo in stile, un limite di intervallo, un riferimento di ricerca, un selettore di stato o un'altra regola di query personalizzata. Se la descrizione manca o non specifica il comportamento di corrispondenza, presuppone che la corrispondenza esatta sia uguale.
114
+
115
+ Ogni query Chill supporta anche `Properties.FullTextSearch`. Utilizzalo per la ricerca di parole chiave generiche nell'obiettivo della query quando l'utente non richiede un filtro strutturato specifico.
116
+
117
+ `FullTextSearch` cerca l'entità `FullTextContent` generata da ChillSharp. Il testo senza virgolette senza selettori avanzati è normalizzato, suddiviso in spazi bianchi e abbinato a AND, quindi ogni token deve essere presente. Le parentesi più gli operatori `and`/`or` autonomi al di fuori delle virgolette consentono la ricerca booleana raggruppata. Cerca le parole letterali `and` o `or` racchiudendole tra virgolette corrispondenti. Il testo racchiuso tra virgolette singole o doppie corrispondenti viene cercato come una frase normalizzata con limiti di parole:
118
+
119
+ | Cerca testo | Significato |
120
+ | --- | --- |
121
+ | | Abbina i record contenenti sia `la` che `nazione` come token, in qualsiasi posizione. |
122
+ | | Abbina record contenenti sia `la` che `nazione` oppure record contenenti `roma`. |
123
+ | | Cerca la parola chiave letterale `and` anziché l'operatore booleano. |
124
+ | | Abbina la frase esatta come parole intere, ad esempio `bla bla la nazione bla bla`, ma non `bla bla della nazione bla bla`. |
125
+ | `"*la nazione"` o `"%la nazione"` | Rilassa il confine sinistro, in modo che `della nazione` possa corrispondere. |
126
+ | `"la nazione*"` o `"la nazione%"` | Rilassa il confine destro, in modo che un suffisso possa corrispondere. |
127
+ | `"la*nazione"` o `"la%nazione"` | Tratta il carattere jolly centrale come un separatore di token e applica la normale corrispondenza dei token AND. |
128
+
129
+ ### `ChillSharp lookup`
130
+
131
+ Esegue una ricerca generica di testo completo rispetto a uno schema di entità abilitato per MCP.
132
+
133
+ Utilizza un payload `ChillDtoQuery` con:
134
+
135
+ - `ChillType` impostato su un tipo di entità come `Model.Blog`
136
+ - `Properties.FullTextSearch` contenente il testo della ricerca
137
+ - `ResultProperties`, `Pagination` e `Ordering` opzionali
138
+
139
+ `Properties.FullTextSearch` utilizza la stessa frase tra virgolette e le stesse regole dei caratteri jolly descritte in `ChillSharp query`.
140
+
141
+ ### `ChillSharp find`
142
+
143
+ Trova un'entità abilitata per MCP in base a `ChillType` e `Guid`.
144
+
145
+ Utilizza un payload `ChillDtoEntity` con:
146
+
147
+ - `ChillType` impostato su un tipo di entità come `Model.Blog`
148
+ - `Guid` impostato sull'identificatore del record
149
+
150
+ Lo strumento restituisce `null` quando non esiste alcun record corrispondente.
151
+
152
+ ### `ChillSharp create`
153
+
154
+ Crea una nuova entità abilitata per MCP e restituisce il valore `ChillDtoEntity` persistente.
155
+
156
+ Utilizza prima `ChillSharp get-schema`, quindi invia un payload `ChillDtoEntity` con:
157
+
158
+ - `ChillType` impostato su un tipo di entità come `Model.Blog`
159
+ - facoltativo `Guid` quando il client sceglie l'identificatore
160
+ - `Properties` contenente valori di campo annotati
161
+
162
+ ### `ChillSharp update`
163
+
164
+ Aggiorna un'entità esistente abilitata per MCP e restituisce l'oggetto `ChillDtoEntity` aggiornato.
165
+
166
+ Utilizza un payload `ChillDtoEntity` con:
167
+
168
+ - `ChillType` impostato su un tipo di entità come `Model.Blog`
169
+ - `Guid` impostato su un record esistente
170
+ - `Properties` contenente i campi da aggiornare
171
+
172
+ ### `ChillSharp delete`
173
+
174
+ Elimina un'entità esistente abilitata per MCP identificata da `ChillType` e `Guid`.
175
+
176
+ Questa è un'operazione mutante. Un client dovrebbe normalmente chiamare prima `ChillSharp find` per confermare il record esatto prima della cancellazione.
177
+
178
+ ### `ChillSharp autocomplete-entity`
179
+
180
+ Applica la logica di completamento automatico dell'entità ChillSharp senza modifiche persistenti.
181
+
182
+ Utilizzalo prima di `create` o `update` quando il modello di entità calcola etichette, URL, riferimenti o altri valori derivati.
183
+
184
+ ### `ChillSharp autocomplete-query`
185
+
186
+ Applica la logica di completamento automatico delle query ChillSharp senza eseguire la query.
187
+
188
+ Utilizzarlo quando gli input della query hanno valori dipendenti o calcolati.
189
+
190
+ ### `ChillSharp validate-entity`
191
+
192
+ Convalida un DTO di entità abilitato per MCP e restituisce errori di convalida di ChillSharp senza modifiche persistenti.
193
+
194
+ Utilizzarlo prima di `create` o `update` quando il modello host espone regole di convalida.
195
+
196
+ ### `ChillSharp validate-query`
197
+
198
+ Convalida un DTO di query abilitato per MCP e restituisce errori di convalida di ChillSharp senza eseguire la query.
199
+
200
+ Utilizzarlo prima di `query` quando il tipo di query espone regole di convalida.
201
+
202
+ ### `ChillSharp chunk`
203
+
204
+ Esegue un elenco di elementi `ChillOperation` e restituisce l'elenco delle operazioni aggiornato.
205
+
206
+ I verbi supportati sono:
207
+
208
+ -
209
+ -
210
+ -
211
+ -
212
+ -
213
+ -
214
+ -
215
+ -
216
+ -
217
+
218
+ Ogni operazione viene controllata per la visibilità MCP prima dell'esecuzione di qualsiasi operazione. Se un'operazione prende di mira uno schema non abilitato per MCP, l'intero blocco viene rifiutato.
219
+
220
+ Per le operazioni `query`, `autocomplete` e `validate` che utilizzano un payload di query, impostare `Query`. Per le operazioni sulle entità, impostare `Entity`.
221
+
222
+ ## Configurazione di base dell'host
223
+
224
+ ```csharp
225
+ using ChillSharp.Api;
226
+ using Microsoft.EntityFrameworkCore;
227
+
228
+ var builder = WebApplication.CreateBuilder(args);
229
+
230
+ builder.Services.AddDbContext<AppDbContext>(options =>
231
+ options.UseSqlite("Data Source=app.db"));
232
+
233
+ builder.Services.AddChillApi<AppDbContext>(options =>
234
+ {
235
+ options.ProtectedApi = true;
236
+ });
237
+
238
+ var app = builder.Build();
239
+
240
+ app.UseAuthentication();
241
+ app.UseAuthorization();
242
+ app.MapChillApi();
243
+ app.Run();
244
+ ```
245
+
246
+ Quando `EnableMcpApi` rimane `true`, il modulo MCP è abilitato per impostazione predefinita come parte di `AddChillApi<TContext>()`.
247
+
248
+ ## URL di connessione dell'agente
249
+
250
+ Gli agenti e i client MCP si connettono all'endpoint di trasporto HTTP MCP, non ai normali endpoint REST di ChillSharp.
251
+
252
+ Con la configurazione predefinita, utilizzare:
253
+
254
+ ```text
255
+ {host}/api/chill-mcp
256
+ ```
257
+
258
+ Esempi locali:
259
+
260
+ ```text
261
+ http://localhost:5000/api/chill-mcp
262
+ https://localhost:5001/api/chill-mcp
263
+ ```
264
+
265
+ Non configurare gli agenti per utilizzare `/api/chill`, `/api/chill/query` o l'URL Swagger. Questi sono normali endpoint API REST. Per impostazione predefinita, l'endpoint SDK MCP è `/api/chill-mcp`.
266
+
267
+ L'URL finale si basa su due impostazioni:
268
+
269
+ - `ChillApiOptions.ApiBasePath`, predefinito `/api`
270
+ - `ChillMcpOptions.RoutePattern`, predefinito `/api/chill-mcp`
271
+
272
+ La route MCP predefinita è normalizzata al percorso base API corrente. Ciò significa:
273
+
274
+ | Percorso base API | Percorso MCP da utilizzare |
275
+ | --- | --- |
276
+ | | |
277
+ | | |
278
+ | percorso base vuoto | |
279
+
280
+ Se configuri un percorso MCP personalizzato:
281
+
282
+ ```csharp
283
+ builder.Services.AddChillMcpApi<AppDbContext>(options =>
284
+ {
285
+ options.RoutePattern = "mcp";
286
+ });
287
+ ```
288
+
289
+ quindi il percorso è relativo al percorso base dell'API ChillSharp, quindi il percorso base dell'API predefinito produce:
290
+
291
+ ```text
292
+ {host}/api/mcp
293
+ ```
294
+
295
+ Se configuri un percorso assoluto:
296
+
297
+ ```csharp
298
+ builder.Services.AddChillMcpApi<AppDbContext>(options =>
299
+ {
300
+ options.RoutePattern = "/mcp";
301
+ });
302
+ ```
303
+
304
+ quindi gli agenti dovrebbero connettersi a:
305
+
306
+ ```text
307
+ {host}/mcp
308
+ ```
309
+
310
+ Quando `ProtectedApi = true`, l'endpoint MCP richiede l'autenticazione. Configura l'agente o il client MCP per inviare:
311
+
312
+ ```http
313
+ Authorization: Bearer <access-token>
314
+ ```
315
+
316
+ ## Disabilita MCP a livello globale
317
+
318
+ ```csharp
319
+ builder.Services.AddChillApi<AppDbContext>(options =>
320
+ {
321
+ options.EnableMcpApi = false;
322
+ });
323
+ ```
324
+
325
+ ## Registra direttamente il modulo
326
+
327
+ Se hai bisogno della registrazione diretta del modulo:
328
+
329
+ ```csharp
330
+ using ChillSharp.Mcp.Api;
331
+
332
+ builder.Services.AddChillMcpApi<AppDbContext>(options =>
333
+ {
334
+ options.Enabled = true;
335
+ options.RoutePattern = "/api/chill-mcp";
336
+ });
337
+ ```
338
+
339
+ ## Requisiti del contesto
340
+
341
+ Il contesto host deve:
342
+
343
+ - eredita da `DbContext`
344
+ - implementare `IChillContext`
345
+ - implementare `IChillSchemaDbContext`
346
+ - includere il modello di schema Chill in `OnModelCreating`
347
+
348
+ Forma tipica:
349
+
350
+ ```csharp
351
+ using ChillSharp;
352
+ using ChillSharp.Schema;
353
+ using Microsoft.EntityFrameworkCore;
354
+
355
+ public class AppDbContext : DbContext, IChillContext, IChillSchemaDbContext
356
+ {
357
+ public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
358
+
359
+ public string GetChillTypePrefix()
360
+ {
361
+ return "MyCompany.MyProduct.Data";
362
+ }
363
+
364
+ public string GetPrimaryCultureName()
365
+ {
366
+ return "en-US";
367
+ }
368
+
369
+ public string GetSecondaryCultureName()
370
+ {
371
+ return "it-IT";
372
+ }
373
+
374
+ public string GetCurrentUserName()
375
+ {
376
+ return Environment.UserName;
377
+ }
378
+
379
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
380
+ {
381
+ base.OnModelCreating(modelBuilder);
382
+ modelBuilder.AddChillSchemaModel();
383
+ }
384
+ }
385
+ ```
386
+
387
+ ## Autenticazione
388
+
389
+ L'endpoint MCP è pensato per essere eseguito dietro l'autenticazione della portante.
390
+
391
+ Se l'host utilizza:
392
+
393
+ ```csharp
394
+ builder.Services.AddChillApi<AppDbContext>(options =>
395
+ {
396
+ options.ProtectedApi = true;
397
+ });
398
+ ```
399
+
400
+ quindi anche l'endpoint MCP mappato richiede l'autenticazione.
401
+
402
+ Questo è importante perché l'esposizione MCP dovrebbe in genere essere limitata a un utente o a una chiave API, non a chiamanti anonimi.
403
+
404
+ ## Connessione ChatGPT OAuth
405
+
406
+ Quando connetti ChatGPT a un server MCP remoto protetto, configura ChatGPT con l'endpoint MCP HTTPS pubblico:
407
+
408
+ ```text
409
+ https://your-domain.example/api/chill-mcp
410
+ ```
411
+
412
+ Se si usa il modulo di autenticazione ChillSharp supportato da ASP.NET Core Identity, ChillSharp espone un flusso di codice di autorizzazione OAuth incorporato con PKCE per ChatGPT e altri client MCP remoti.
413
+
414
+ Gli endpoint OAuth predefiniti sono:
415
+
416
+ | Scopo | URL |
417
+ | --- | --- |
418
+ | Metadati del server di autorizzazione OAuth | |
419
+ | Metadati delle risorse protette MCP | |
420
+ | Registrazione dinamica del cliente | |
421
+ | Autorizzazione e consenso dell'utente | |
422
+ | Scambio gettoni | |
423
+
424
+ Il flusso è:
425
+
426
+ 1. ChatGPT rileva i metadati delle risorse protette e del server di autorizzazione.
427
+ 2. ChatGPT si registra dinamicamente come client OAuth pubblico.
428
+ 3. L'utente viene reindirizzato alla pagina di autorizzazione di ChillSharp.
429
+ 4. L'utente accede con l'account identità ASP.NET Core.
430
+ 5. ChillSharp reindirizza ChatGPT con un codice di autorizzazione.
431
+ 6. ChatGPT scambia il codice e il verificatore PKCE con un token di accesso al portatore ChillSharp.
432
+ 7. ChatGPT chiama l'endpoint MCP con:
433
+
434
+ ```http
435
+ Authorization: Bearer <access-token>
436
+ ```
437
+
438
+ Pertanto OAuth viene utilizzato per il consenso dell'utente e l'acquisizione di token. Il server MCP stesso convalida comunque il token di connessione risultante tramite il normale gestore di autenticazione della connessione di ChillSharp.
439
+
440
+ Configurazione protetta tipica:
441
+
442
+ ```csharp
443
+ builder.Services.AddIdentityCore<IdentityUser>()
444
+ .AddEntityFrameworkStores<AppDbContext>()
445
+ .AddSignInManager()
446
+ .AddDefaultTokenProviders();
447
+
448
+ builder.Services.AddAuthentication(ChillAuthIdentityDefaults.AuthenticationScheme)
449
+ .AddChillAuthBearer();
450
+
451
+ builder.Services.AddAuthorization();
452
+
453
+ builder.Services.AddChillApi<AppDbContext, IdentityUser>(options =>
454
+ {
455
+ options.ProtectedApi = true;
456
+ });
457
+ ```
458
+
459
+ Gli endpoint OAuth sono abilitati per impostazione predefinita per il modulo di autenticazione supportata da identità. Puoi configurarli tramite `ChillIdentityApiOptions`:
460
+
461
+ ```csharp
462
+ builder.Services.AddChillApi<AppDbContext, IdentityUser>(options =>
463
+ {
464
+ options.ProtectedApi = true;
465
+ options.OAuthBasePath = "/api/chill-auth/oauth";
466
+ options.OAuthProtectedResourcePath = "/api/chill-mcp";
467
+ options.OAuthAuthorizationCodeLifetime = TimeSpan.FromMinutes(5);
468
+ });
469
+ ```
470
+
471
+ Se disabiliti o sostituisci gli endpoint OAuth integrati, puoi comunque utilizzare ChillSharp come server di risorse MCP purché il tuo gestore di autenticazione convalidi il token di connessione finale e ChatGPT possa completare un flusso di codice di autorizzazione OAuth altrove.
472
+
473
+ ## Come funziona `EnableMCP`
474
+
475
+ Gli strumenti MCP espongono solo schemi la cui visibilità MCP è abilitata.
476
+
477
+ Uno schema è considerato abilitato per MCP quando:
478
+
479
+ - `schema.EnableMCP` è `true`
480
+ - Le opzioni dell'entità runtime abilitano MCP per quel tipo di Chill
481
+
482
+ Per gli schemi di query, la visibilità MCP è controllata dalla relativa entità restituita. Una query che restituisce `Model.Invoice` è visibile ed eseguibile tramite MCP solo quando `Model.Invoice` è abilitato per MCP. Abilitando solo il tipo di query non viene pubblicata un'entità nascosta.
483
+
484
+ Ciò significa:
485
+
486
+ - `get-schema-list` mostra solo gli schemi abilitati
487
+ - `get-schema` restituisce solo gli schemi abilitati
488
+ - `query` esegue solo le query la cui relativa entità restituita è abilitata
489
+ - Gli strumenti di entità operano solo su schemi di entità abilitati
490
+ - `chunk` controlla ogni query o entità mirata prima di eseguire il batch
491
+
492
+ Ciò fornisce un meccanismo esplicito di pubblicazione/annullamento della pubblicazione per le funzionalità del database rivolte all'intelligenza artificiale.
493
+
494
+ ## Preparazione di un contesto Db per un consumo efficiente dell'intelligenza artificiale
495
+
496
+ Questa è la parte più importante del modulo.
497
+
498
+ Un'intelligenza artificiale non capisce il tuo modello come fa un compagno di squadra umano. Dipende fortemente dai metadati, dalla denominazione, dalle descrizioni e da una superficie di query vincolata. Un database può essere tecnicamente esposto tramite MCP ed essere comunque difficile da utilizzare bene per un'intelligenza artificiale.
499
+
500
+ Se vuoi che un'intelligenza artificiale utilizzi un host ChillSharp in modo efficiente, prepara il modello intenzionalmente.
501
+
502
+ ## 1. Utilizzare nomi chiari per i tipi di Chill
503
+
504
+ Nomi di tipo breve come `Model.Blog`, `Model.Invoice` e `Query.PostSearchQuery` sono più facili da ragionare per un'intelligenza artificiale rispetto ai nomi opachi.
505
+
506
+ Preferisco:
507
+
508
+ -
509
+ -
510
+ -
511
+ -
512
+
513
+ Evita nomi che richiedono la conoscenza del team interno per essere decodificati.
514
+
515
+ Meno efficiente:
516
+
517
+ -
518
+ -
519
+ -
520
+
521
+ ## 2. Annota intenzionalmente ogni proprietà esposta
522
+
523
+ Utilizza `[ChillProperty]` in modo coerente sulle proprietà che desideri nella superficie rivolta all'intelligenza artificiale.
524
+
525
+ Ciò influisce:
526
+
527
+ - generazione dello schema
528
+ - interrogare le aspettative di carico utile
529
+ - Mappatura DTO
530
+ - l'elenco dei campi che un'intelligenza artificiale vede quando ispeziona uno schema
531
+
532
+ Se una proprietà è importante per query, ricerche, filtri o risultati, in genere dovrebbe essere annotata esplicitamente.
533
+
534
+ ## 3. Scrivi un testo `MCPDescription` efficace sulle entità
535
+
536
+ Le descrizioni di entità e query non sono decorazioni. Sono il modo in cui un'intelligenza artificiale apprende il significato del business.
537
+
538
+ Buone descrizioni a livello di entità spiegano:
539
+
540
+ - qual è l'oggetto
541
+ - quando dovrebbe essere interrogato
542
+ - cosa rappresenta in termini aziendali
543
+ - se si tratta di un record primario, di una tabella di ricerca o di una superficie derivata/di sola query
544
+
545
+ Esempio:
546
+
547
+ ```csharp
548
+ [ChillEntity(
549
+ UniquePropertyKeyString: "4E16F6C0-6B95-4D67-98BC-9F4D0D63EAF1",
550
+ PrimaryLanguageLabel: "Invoice",
551
+ SecondaryLanguageLabel: "Fattura",
552
+ EnableMCP = true,
553
+ MCPDescription = "Customer invoice header. Use this schema to inspect invoice number, issue date, customer, total amount, and payment state.")]
554
+ public class Invoice : ChillEntity
555
+ {
556
+ }
557
+ ```
558
+
559
+ Questo è molto più utile di:
560
+
561
+ -
562
+ -
563
+
564
+ ## 4. Scrivi un testo `MCPDescription` efficace sulle proprietà
565
+
566
+ Le descrizioni delle proprietà contano ancora di più.
567
+
568
+ Quando un'IA riceve `get-schema`, ciascuna proprietà può portare il proprio `MCPDescription`. Questa è spesso la differenza tra una query corretta e una sbagliata.
569
+
570
+ Le buone descrizioni delle proprietà spiegano:
571
+
572
+ - il significato aziendale
573
+ - contenuto consentito o previsto
574
+ - unità o formato
575
+ - se il campo è una ricerca, un riferimento, uno stato, un codice o un testo libero
576
+ - se il campo viene restituito, filtrabile, calcolato o informativo
577
+ - per le proprietà della query, se la corrispondenza è esatta, contiene stile, basata su intervallo, basata su ricerca o personalizzata
578
+
579
+ Quando `MCPDescription` di una proprietà della query non spiega il comportamento di corrispondenza, gli agenti dovrebbero presupporre che la corrispondenza esatta sia uguale. Se desideri un comportamento contiene, prefisso, intervallo, fuzzy o specifico del dominio, specificalo esplicitamente nella descrizione.
580
+
581
+ Esempio:
582
+
583
+ ```csharp
584
+ [ChillProperty(
585
+ UniquePropertyKeyString: "50B1BB6C-D794-41E4-A85C-D4F9D7A6FA7E",
586
+ PrimaryLanguageLabel: "Invoice number",
587
+ SecondaryLanguageLabel: "Numero fattura",
588
+ MCPDescription = "Human-readable accounting document number shown to users and used in external communication.")]
589
+ public string InvoiceNumber { get; set; } = string.Empty;
590
+ ```
591
+
592
+ E:
593
+
594
+ ```csharp
595
+ [ChillProperty(
596
+ UniquePropertyKeyString: "A18E7754-D8F7-45FE-B8A8-EA762A4EC9E6",
597
+ PrimaryLanguageLabel: "Payment status",
598
+ SecondaryLanguageLabel: "Stato pagamento",
599
+ MCPDescription = "Current payment lifecycle status. Expected values are Draft, Issued, PartiallyPaid, Paid, and Cancelled.")]
600
+ public string PaymentStatus { get; set; } = string.Empty;
601
+ ```
602
+
603
+ Queste descrizioni vengono restituite da `ChillSharp get-schema`.
604
+
605
+ ## 5. Preferisci tipi di query appositamente creati rispetto all'esposizione di tutto
606
+
607
+ L’intelligenza artificiale funziona meglio quando ha un numero limitato di query ben descritte anziché un’enorme superficie ambigua.
608
+
609
+ Preferisci diversi tipi di query chiari come:
610
+
611
+ -
612
+ -
613
+ -
614
+
615
+ invece di forzare l'intelligenza artificiale a dedurre tutto da una query generica generica.
616
+
617
+ Ogni query dovrebbe avere:
618
+
619
+ - un nome chiaro
620
+ - uno scopo chiaro
621
+ - proprietà di input ben descritte
622
+ - un tipo di entità correlata prevedibile
623
+
624
+ ## 6. Mantieni gli input delle query limitati e significativi
625
+
626
+ Una query con venti input opzionali e significati vaghi è difficile per gli esseri umani e più difficile per l’intelligenza artificiale.
627
+
628
+ Preferisci una superficie di query in cui ogni input abbia uno scopo forte.
629
+
630
+ Bene:
631
+
632
+ -
633
+ -
634
+ -
635
+ -
636
+
637
+ Meno buono:
638
+
639
+ -
640
+ -
641
+ -
642
+ -
643
+
644
+ ## 7. Esporre intenzionalmente i riferimenti
645
+
646
+ I riferimenti sono utili perché dicono a un'intelligenza artificiale come si relazionano tabelle ed entità.
647
+
648
+ Se una proprietà fa riferimento a un altro tipo di Chill, assicurati che:
649
+
650
+ - il riferimento è rappresentato tramite metadati Chill
651
+ - il tipo di destinazione ha uno schema utile
652
+ - la descrizione dell'immobile spiega la relazione
653
+
654
+ Esempio:
655
+
656
+ -
657
+ -
658
+
659
+ Ciò aiuta un'intelligenza artificiale a navigare nel grafico del tuo database invece di trattare ogni oggetto come isolato.
660
+
661
+ ## 8. Mantieni le etichette utili
662
+
663
+ `Label`, `ShortLabel` e i nomi visualizzati dello schema aiutano un'intelligenza artificiale a scegliere l'oggetto giusto quando esistono molti tipi correlati.
664
+
665
+ Una buona etichetta è:
666
+
667
+ - stabile
668
+ - leggibile dall'uomo
669
+ - derivato dall'identità aziendale del record
670
+
671
+ Esempi:
672
+
673
+ - numero di fattura
674
+ - nome del cliente
675
+ - codice prodotto e titolo
676
+
677
+ Ciò migliora sia il comportamento dell'interfaccia utente che la comprensione dell'intelligenza artificiale.
678
+
679
+ ## 9. Separare gli oggetti solo interni dagli oggetti rivolti verso l'IA
680
+
681
+ Non tutte le entità dovrebbero essere abilitate per MCP.
682
+
683
+ Una buona regola è:
684
+
685
+ - abilitare MCP solo per oggetti comprensibili e sicuri da esporre a un flusso di lavoro AI
686
+ - mantenere disabilitate le entità infrastrutturali di basso livello, le tabelle di registro o gli elementi interni sensibili a meno che non vi sia un motivo reale per pubblicarli
687
+
688
+ Ciò riduce la confusione, lo spreco di token e l'uso improprio accidentale.
689
+
690
+ ## 10. Progetta tenendo presente i limiti dei permessi
691
+
692
+ L'utente autenticato della chiave API può essere limitato da autorizzazioni e altre limitazioni.
693
+
694
+ Ciò significa che un buon host rivolto all’intelligenza artificiale dovrebbe allinearsi:
695
+
696
+ - Schemi abilitati per MCP
697
+ - visibilità delle query
698
+ - autorizzazioni di autenticazione
699
+ - Proprietà della chiave API
700
+
701
+ Se diversi client necessitano di visibilità diversa, utilizza identità o profili di autorizzazione diversi anziché un'unica superficie MCP globale senza restrizioni.
702
+
703
+ ## 11. Pensa in "ordine di lettura dell'IA"
704
+
705
+ Un tipico flusso di lavoro dell'agente è:
706
+
707
+ 1. elencare gli schemi
708
+ 2. scegline uno per nome e descrizione
709
+ 3. ispezionare lo schema e le descrizioni delle proprietà
710
+ 4. dedurre il tipo di entità correlata
711
+ 5. creare una query
712
+ 6. leggere i risultati
713
+
714
+ Quindi il modello dovrebbe supportare quella sequenza in modo pulito.
715
+
716
+ Chiediti:
717
+
718
+ - l'agente può identificare lo schema corretto leggendo il nome e la descrizione?
719
+ - può comprendere le proprietà senza la conoscenza tribale nascosta?
720
+ - può dire quale query restituisce quale entità?
721
+ - può evitare schemi irrilevanti?
722
+
723
+ In caso contrario, arricchisci i metadati.
724
+
725
+ ## 12. Ottimizza per meno viaggi di andata e ritorno
726
+
727
+ I sistemi di intelligenza artificiale pagano un prezzo per ogni fase di scoperta.
728
+
729
+ Per mantenere efficienti i consumi:
730
+
731
+ - Fornire descrizioni dettagliate dello schema
732
+ - descrivere bene le proprietà la prima volta
733
+ - mantenere focalizzate le superfici delle query
734
+ - esporre le proprietà dei risultati comunemente necessarie
735
+ - evitare di forzare l'agente a indovinare i significati e riprovare
736
+
737
+ Metadati validi riducono l'utilizzo dei token, riducono i tentativi e producono risultati più affidabili.
738
+
739
+ ## Lista di controllo pratica per l'intelligenza artificiale
740
+
741
+ Prima di esporre un modello tramite `ChillSharp.Mcp`, verificare che:
742
+
743
+ - i nomi delle entità sono chiari
744
+ - I nomi delle query sono chiari
745
+ - tutte le proprietà rivolte all'IA sono annotate con `[ChillProperty]`
746
+ - Gli schemi abilitati per MCP hanno utili `MCPDescription`
747
+ - le proprietà importanti hanno utili `MCPDescription`
748
+ - le query sono mirate e mirate
749
+ - i riferimenti sono descritti
750
+ - Le etichette sono significative
751
+ - gli schemi sensibili o rumorosi rimangono non MCP
752
+ - I limiti di autorizzazione e autorizzazione corrispondono al caso d'uso AI previsto
753
+
754
+ ## Esempio di frammento di modello compatibile con l'intelligenza artificiale
755
+
756
+ ```csharp
757
+ using ChillSharp.Annotations;
758
+ using ChillSharp.EF;
759
+
760
+ [ChillEntity(
761
+ UniquePropertyKeyString: "4E16F6C0-6B95-4D67-98BC-9F4D0D63EAF1",
762
+ PrimaryLanguageLabel: "Invoice",
763
+ SecondaryLanguageLabel: "Fattura",
764
+ EnableMCP = true,
765
+ MCPDescription = "Customer invoice header. Use it to inspect invoice identity, customer, dates, totals, and payment state.")]
766
+ public class Invoice : ChillEntity
767
+ {
768
+ [ChillProperty(
769
+ UniquePropertyKeyString: "50B1BB6C-D794-41E4-A85C-D4F9D7A6FA7E",
770
+ PrimaryLanguageLabel: "Invoice number",
771
+ SecondaryLanguageLabel: "Numero fattura",
772
+ MCPDescription = "Human-readable invoice number used by accountants and customers.")]
773
+ public string InvoiceNumber { get; set; } = string.Empty;
774
+
775
+ [ChillProperty(
776
+ UniquePropertyKeyString: "A18E7754-D8F7-45FE-B8A8-EA762A4EC9E6",
777
+ PrimaryLanguageLabel: "Customer",
778
+ SecondaryLanguageLabel: "Cliente",
779
+ MCPDescription = "Customer that owns this invoice.",
780
+ ReferenceChillTypeQuery = "Query.CustomerQuery")]
781
+ public Customer? Customer { get; set; }
782
+
783
+ [ChillProperty(
784
+ UniquePropertyKeyString: "D6A6A0B6-3C22-4E18-B2AE-34D6EBE56EC8",
785
+ PrimaryLanguageLabel: "Payment status",
786
+ SecondaryLanguageLabel: "Stato pagamento",
787
+ MCPDescription = "Current payment lifecycle status such as Draft, Issued, Paid, or Cancelled.")]
788
+ public string PaymentStatus { get; set; } = string.Empty;
789
+ }
790
+ ```
791
+
792
+ ## Documenti correlati
793
+
794
+ - [Istruzioni per la connessione ChatGPT](ChatGPT.md)
795
+ - [../README.md](../README.md)
796
+ - [../RegisterContext.md](../RegisterContext.md)
797
+ - [../ModelPreparation.md](../ModelPreparation.md)
798
+ - [../AIAssistedDevelopment/README.md](../AIAssistedDevelopment/README.md)
799
+ - [../../ChillSharp.Mcp/README.md](../../ChillSharp.Mcp/README.md)