Repository: elastic/kibana
Pull request #220431: [WorkChat] Remove extra Index Source Description field
Author: login: meghanmurphy1
Labels: name: release_note:skip
description: Skip the PR/issue when compiling release notes
name: backport:skip
description: This PR does not require backporting
name: v9.1.0
Created: 2025-05-07T19:55:24Z | Merged: 2025-05-09T18:21:08Z

## Summary

This PR updates the Description field spefically used for LLM context to say 'Tool Description' to minimize confusion. 

<img width="1483" alt="Screenshot 2025-05-09 at 10 41 49 AM" src="https://github.com/user-attachments/assets/bbf646c0-e3d8-4a89-b3f8-250c785a43b3" />


### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)
- [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials
- [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios
- [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed
- [ ] The PR  description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...






Diff:
diff --git a/x-pack/solutions/chat/plugins/wci-index-source/public/integration/configuration.tsx b/x-pack/solutions/chat/plugins/wci-index-source/public/integration/configuration.tsx
index c3f89e81bb7bd..9ffce7aead99a 100644
--- a/x-pack/solutions/chat/plugins/wci-index-source/public/integration/configuration.tsx
+++ b/x-pack/solutions/chat/plugins/wci-index-source/public/integration/configuration.tsx
@@ -28,6 +28,7 @@ import { IntegrationConfigurationFormProps } from '@kbn/wci-browser';
 import type { WCIIndexSourceFilterField, WCIIndexSourceContextField } from '../../common/types';
 import { useGenerateSchema } from '../hooks/use_generate_schema';
 import { useIndexNameAutocomplete } from '../hooks/use_index_name_autocomplete';
+import { translations } from './i18n';
 
 export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationFormProps> = ({
   form,
@@ -116,17 +117,17 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
     <>
       <EuiDescribedFormGroup
         ratio="third"
-        title={<h3>Index Source Configuration</h3>}
-        description="Configure the index source details"
+        title={<h3>{translations.indexSourceConfiguration.title}</h3>}
+        description={translations.indexSourceConfiguration.description}
       >
-        <EuiFormRow label="Index">
+        <EuiFormRow label={translations.indexSourceConfiguration.index.label}>
           <Controller
             name="configuration.index"
             control={control}
             render={({ field }) => (
               <EuiComboBox
                 data-test-subj="workchatAppIntegrationEditViewIndex"
-                placeholder={'Select an index'}
+                placeholder={translations.indexSourceConfiguration.index.placeholder}
                 {...field}
                 isLoading={isLoading}
                 selectedOptions={
@@ -150,7 +151,7 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
                       generateSchema({ indexName: field.value }, { onSuccess: onSchemaGenerated });
                     }}
                   >
-                    Generate configuration
+                    {translations.indexSourceConfiguration.index.generateConfig}
                   </EuiButtonEmpty>
                 }
               />
@@ -158,14 +159,14 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
           />
         </EuiFormRow>
 
-        <EuiFormRow label="Description">
+        <EuiFormRow label={translations.indexSourceConfiguration.toolDescription.label}>
           <Controller
             name="configuration.description"
             control={control}
             render={({ field }) => (
               <EuiTextArea
                 data-test-subj="workchatAppIntegrationEditViewDescription"
-                placeholder="Enter description"
+                placeholder={translations.indexSourceConfiguration.toolDescription.placeholder}
                 rows={3}
                 {...field}
               />
@@ -173,14 +174,14 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
           />
         </EuiFormRow>
 
-        <EuiFormRow label="Query Template">
+        <EuiFormRow label={translations.indexSourceConfiguration.queryTemplate.label}>
           <Controller
             name="configuration.queryTemplate"
             control={control}
             render={({ field }) => (
               <EuiTextArea
                 data-test-subj="workchatAppIntegrationEditViewQueryTemplate"
-                placeholder="Enter Elasticsearch query template"
+                placeholder={translations.indexSourceConfiguration.queryTemplate.placeholder}
                 rows={6}
                 {...field}
               />
@@ -191,13 +192,16 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
 
       <EuiDescribedFormGroup
         ratio="third"
-        title={<h3>Filter Fields</h3>}
-        description="Fields that can be used for filtering documents"
+        title={<h3>{translations.indexSourceConfiguration.filterFields.title}</h3>}
+        description={translations.indexSourceConfiguration.filterFields.description}
       >
         {filterFieldsArray.fields.length === 0 ? (
           <EuiFormRow>
-            <EuiCallOut title="No filter fields defined" color="primary">
-              <p>Add filter fields to allow filtering on specific document fields</p>
+            <EuiCallOut
+              title={translations.indexSourceConfiguration.filterFields.noFields.title}
+              color="primary"
+            >
+              <p>{translations.indexSourceConfiguration.filterFields.noFields.description}</p>
             </EuiCallOut>
           </EuiFormRow>
         ) : (
@@ -205,17 +209,24 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
             <EuiPanel paddingSize="s" key={filterField.id} css={{ marginBottom: '8px' }}>
               <EuiFlexGroup alignItems="center">
                 <EuiFlexItem>
-                  <EuiFormRow label="Field name">
+                  <EuiFormRow label={translations.indexSourceConfiguration.filterFields.fieldName}>
                     <Controller
                       name={`configuration.fields.filterFields.${index}.field`}
                       control={control}
-                      render={({ field }) => <EuiFieldText placeholder="Field name" {...field} />}
+                      render={({ field }) => (
+                        <EuiFieldText
+                          placeholder={translations.indexSourceConfiguration.filterFields.fieldName}
+                          {...field}
+                        />
+                      )}
                     />
                   </EuiFormRow>
                 </EuiFlexItem>
 
                 <EuiFlexItem>
-                  <EuiFormRow label="Field type">
+                  <EuiFormRow
+                    label={translations.indexSourceConfiguration.filterFields.fieldType.label}
+                  >
                     <Controller
                       name={`configuration.fields.filterFields.${index}.type`}
                       control={control}
@@ -225,7 +236,9 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
                 </EuiFlexItem>
 
                 <EuiFlexItem grow={false}>
-                  <EuiFormRow label="Get values">
+                  <EuiFormRow
+                    label={translations.indexSourceConfiguration.filterFields.getValues.label}
+                  >
                     <Controller
                       name={`configuration.fields.filterFields.${index}.getValues`}
                       control={control}
@@ -253,12 +266,20 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
                 </EuiFlexItem>
               </EuiFlexGroup>
 
-              <EuiFormRow label="Description">
+              <EuiFormRow
+                label={translations.indexSourceConfiguration.filterFields.fieldDescription.label}
+              >
                 <Controller
                   name={`configuration.fields.filterFields.${index}.description`}
                   control={control}
                   render={({ field }) => (
-                    <EuiFieldText placeholder="Field description" {...field} />
+                    <EuiFieldText
+                      placeholder={
+                        translations.indexSourceConfiguration.filterFields.fieldDescription
+                          .placeholder
+                      }
+                      {...field}
+                    />
                   )}
                 />
               </EuiFormRow>
@@ -279,20 +300,23 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
               })
             }
           >
-            Add filter field
+            {translations.indexSourceConfiguration.filterFields.addField}
           </EuiButton>
         </EuiFormRow>
       </EuiDescribedFormGroup>
 
       <EuiDescribedFormGroup
         ratio="third"
-        title={<h3>Context Fields</h3>}
-        description="Fields that provide additional context for the AI"
+        title={<h3>{translations.indexSourceConfiguration.contextFields.title}</h3>}
+        description={translations.indexSourceConfiguration.contextFields.description}
       >
         {contextFieldsArray.fields.length === 0 ? (
           <EuiFormRow>
-            <EuiCallOut title="No context fields defined" color="primary">
-              <p>Add context fields to provide additional information for the AI</p>
+            <EuiCallOut
+              title={translations.indexSourceConfiguration.contextFields.noFields.title}
+              color="primary"
+            >
+              <p>{translations.indexSourceConfiguration.contextFields.noFields.description}</p>
             </EuiCallOut>
           </EuiFormRow>
         ) : (
@@ -300,17 +324,26 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
             <EuiPanel paddingSize="s" key={contextField.id} css={{ marginBottom: '8px' }}>
               <EuiFlexGroup alignItems="center">
                 <EuiFlexItem>
-                  <EuiFormRow label="Field name">
+                  <EuiFormRow label={translations.indexSourceConfiguration.contextFields.fieldName}>
                     <Controller
                       name={`configuration.fields.contextFields.${index}.field`}
                       control={control}
-                      render={({ field }) => <EuiFieldText placeholder="Field name" {...field} />}
+                      render={({ field }) => (
+                        <EuiFieldText
+                          placeholder={
+                            translations.indexSourceConfiguration.contextFields.fieldName
+                          }
+                          {...field}
+                        />
+                      )}
                     />
                   </EuiFormRow>
                 </EuiFlexItem>
 
                 <EuiFlexItem grow={false}>
-                  <EuiFormRow label="Semantic">
+                  <EuiFormRow
+                    label={translations.indexSourceConfiguration.contextFields.semantic.label}
+                  >
                     <Controller
                       name={`configuration.fields.contextFields.${index}.type`}
                       control={control}
@@ -347,7 +380,7 @@ export const IndexSourceConfigurationForm: React.FC<IntegrationConfigurationForm
             iconType="plusInCircle"
             onClick={() => contextFieldsArray.append({ field: '', description: '' })}
           >
-            Add context field
+            {translations.indexSourceConfiguration.contextFields.addField}
           </EuiButton>
         </EuiFormRow>
       </EuiDescribedFormGroup>
diff --git a/x-pack/solutions/chat/plugins/wci-index-source/public/integration/i18n.ts b/x-pack/solutions/chat/plugins/wci-index-source/public/integration/i18n.ts
new file mode 100644
index 0000000000000..b062adaa050fa
--- /dev/null
+++ b/x-pack/solutions/chat/plugins/wci-index-source/public/integration/i18n.ts
@@ -0,0 +1,122 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { i18n } from '@kbn/i18n';
+
+export const translations = {
+  indexSourceConfiguration: {
+    title: i18n.translate('wciIndexSource.configuration.title', {
+      defaultMessage: 'Index Source Configuration',
+    }),
+    description: i18n.translate('wciIndexSource.configuration.description', {
+      defaultMessage: 'Configure the index source details',
+    }),
+    index: {
+      label: i18n.translate('wciIndexSource.configuration.index.label', {
+        defaultMessage: 'Index',
+      }),
+      placeholder: i18n.translate('wciIndexSource.configuration.index.placeholder', {
+        defaultMessage: 'Select an index',
+      }),
+      generateConfig: i18n.translate('wciIndexSource.configuration.index.generateConfig', {
+        defaultMessage: 'Generate configuration',
+      }),
+    },
+    toolDescription: {
+      label: i18n.translate('wciIndexSource.configuration.toolDescription.label', {
+        defaultMessage: 'Tool Description',
+      }),
+      placeholder: i18n.translate('wciIndexSource.configuration.toolDescription.placeholder', {
+        defaultMessage: 'Enter description',
+      }),
+    },
+    queryTemplate: {
+      label: i18n.translate('wciIndexSource.configuration.queryTemplate.label', {
+        defaultMessage: 'Query Template',
+      }),
+      placeholder: i18n.translate('wciIndexSource.configuration.queryTemplate.placeholder', {
+        defaultMessage: 'Enter Elasticsearch query template',
+      }),
+    },
+    filterFields: {
+      title: i18n.translate('wciIndexSource.configuration.filterFields.title', {
+        defaultMessage: 'Filter Fields',
+      }),
+      description: i18n.translate('wciIndexSource.configuration.filterFields.description', {
+        defaultMessage: 'Fields that can be used for filtering documents',
+      }),
+      noFields: {
+        title: i18n.translate('wciIndexSource.configuration.filterFields.noFields.title', {
+          defaultMessage: 'No filter fields defined',
+        }),
+        description: i18n.translate(
+          'wciIndexSource.configuration.filterFields.noFields.description',
+          {
+            defaultMessage: 'No filter fields have been defined for this index source',
+          }
+        ),
+      },
+      fieldName: i18n.translate('wciIndexSource.configuration.filterFields.fieldName.label', {
+        defaultMessage: 'Field name',
+      }),
+      fieldType: {
+        label: i18n.translate('wciIndexSource.configuration.filterFields.fieldType.label', {
+          defaultMessage: 'Field type',
+        }),
+      },
+      getValues: {
+        label: i18n.translate('wciIndexSource.configuration.filterFields.getValues.label', {
+          defaultMessage: 'Get values',
+        }),
+      },
+      fieldDescription: {
+        label: i18n.translate('wciIndexSource.configuration.filterFields.description.label', {
+          defaultMessage: 'Description',
+        }),
+        placeholder: i18n.translate(
+          'wciIndexSource.configuration.filterFields.description.placeholder',
+          {
+            defaultMessage: 'Field description',
+          }
+        ),
+      },
+      addField: i18n.translate('wciIndexSource.configuration.filterFields.addField', {
+        defaultMessage: 'Add filter field',
+      }),
+    },
+    contextFields: {
+      title: i18n.translate('wciIndexSource.configuration.contextFields.title', {
+        defaultMessage: 'Context Fields',
+      }),
+      description: i18n.translate('wciIndexSource.configuration.contextFields.description', {
+        defaultMessage: 'Fields that will be included in the context of the search results',
+      }),
+      noFields: {
+        title: i18n.translate('wciIndexSource.configuration.contextFields.noFields.title', {
+          defaultMessage: 'No context fields defined',
+        }),
+        description: i18n.translate(
+          'wciIndexSource.configuration.contextFields.noFields.description',
+          {
+            defaultMessage: 'No context fields have been defined for this index source',
+          }
+        ),
+      },
+      fieldName: i18n.translate('wciIndexSource.configuration.contextFields.fieldName.label', {
+        defaultMessage: 'Field name',
+      }),
+      semantic: {
+        label: i18n.translate('wciIndexSource.configuration.contextFields.semantic.label', {
+          defaultMessage: 'Semantic',
+        }),
+      },
+      addField: i18n.translate('wciIndexSource.configuration.contextFields.addField', {
+        defaultMessage: 'Add context field',
+      }),
+    },
+  },
+};
diff --git a/x-pack/solutions/chat/plugins/wci-index-source/tsconfig.json b/x-pack/solutions/chat/plugins/wci-index-source/tsconfig.json
index 4cb78c021bc49..22cd89d06d718 100644
--- a/x-pack/solutions/chat/plugins/wci-index-source/tsconfig.json
+++ b/x-pack/solutions/chat/plugins/wci-index-source/tsconfig.json
@@ -24,7 +24,8 @@
     "@kbn/wc-index-schema-builder",
     "@kbn/wc-genai-utils",
     "@kbn/inference-plugin",
-    "@kbn/actions-plugin"
+    "@kbn/actions-plugin",
+    "@kbn/i18n"
   ],
   "exclude": [
     "target/**/*"
diff --git a/x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx b/x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
index fbce10162f627..f395306418632 100644
--- a/x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
+++ b/x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
@@ -19,6 +19,7 @@ import {
   EuiSelect,
   EuiConfirmModal,
   EuiButtonEmpty,
+  EuiTextArea,
 } from '@elastic/eui';
 import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template';
 import { IntegrationType } from '@kbn/wci-common';
@@ -196,8 +197,9 @@ export const IntegrationEditView: React.FC<IntegrationEditViewProps> = ({ integr
                     name="description"
                     control={control}
                     render={({ field }) => (
-                      <EuiFieldText
+                      <EuiTextArea
                         data-test-subj="workchatAppIntegrationEditViewFieldText"
+                        rows={3}
                         isInvalid={!!formMethods.formState.errors.description}
                         {...field}
                       />


Reviews:
user: login: jedrazb
body: One question: which configuration field should we keep?
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-08T09:37:27Z
user: login: meghanmurphy1
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-08T12:19:55Z
user: login: pgayvallet
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-09T06:50:22Z
user: login: meghanmurphy1
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-09T12:24:07Z
user: login: danajuratoni
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-09T13:57:36Z
user: login: meghanmurphy1
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-09T14:46:48Z
user: login: pgayvallet
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-09T14:53:41Z

Review comments:
diff_hunk: @@ -177,11 +178,12 @@ export const IntegrationEditView: React.FC<IntegrationEditViewProps> = ({ integr
                 <EuiFormRow label="Description">
                   <Controller
                     rules={{ required: true }}
-                    name="description"
+                    name="configuration.description"
path: x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
user: login: jedrazb
body: Are you confident that we want to be using `configuration.description` instead of `description`? One of those options is needed and afaik the `description` sounds like a integration standard field: https://github.com/elastic/kibana/blob/main/x-pack/solutions/chat/packages/wci-common/src/integrations.ts#L21
created_at: 2025-05-08T09:37:06Z
author_association: CONTRIBUTOR
diff_hunk: @@ -177,11 +178,12 @@ export const IntegrationEditView: React.FC<IntegrationEditViewProps> = ({ integr
                 <EuiFormRow label="Description">
                   <Controller
                     rules={{ required: true }}
-                    name="description"
+                    name="configuration.description"
path: x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
user: login: meghanmurphy1
body: I thought to keep the description field that as part of the base config for other tools and remove the index source specific field. I was unsure what exactly using 'description' over 'configuration.description' would change other than populating the field during generate configuration, but I had made a Salesforce tool and the description was being sent as part of the configuration to the MCP server.

`[2025-05-08T08:32:06.648-04:00][INFO ][plugins.wciSalesforce] Salesforce Integration Configuration {"description":"tool for salesforce cases","index":"salesforce-example-data"}`

I may be missing something else but I felt as long as the description is being populated as part of the configuration being sent to MCP server then it was doing its job?
created_at: 2025-05-08T12:19:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -177,11 +178,12 @@ export const IntegrationEditView: React.FC<IntegrationEditViewProps> = ({ integr
                 <EuiFormRow label="Description">
                   <Controller
                     rules={{ required: true }}
-                    name="description"
+                    name="configuration.description"
path: x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
user: login: pgayvallet
body: So the idea was to have all common fields, which are shared between all integration types, be top level fields, meaning defined in https://github.com/elastic/kibana/blob/c05dda37e292d845ddeb334746b5364fe989d27a/x-pack/solutions/chat/packages/wci-common/src/integrations.ts#L10-L19

`description` is supposed to be part of it, because all integrations can have a description. It was  supposed to represent a human-readable description that we could display in the UI for tabular displays of integrations for example (and it was the case in the first listing views I created, not sure if its still the case with the UI rewrite).

However, for some integration types, we also have some config-level `description` field:

https://github.com/elastic/kibana/blob/c05dda37e292d845ddeb334746b5364fe989d27a/x-pack/solutions/chat/plugins/wci-external-server/common/types.ts#L10-L13

https://github.com/elastic/kibana/blob/c05dda37e292d845ddeb334746b5364fe989d27a/x-pack/solutions/chat/plugins/wci-index-source/common/types.ts#L10-L18

For index-source in particular, `configuration.description` serves a slightly different purpose than `description`: it was supposed to be the LLM-world description that we use when we generate the corresponding tool definition in the MCP server. So LLM-facing vs user-facing basically.

However, looking at the index integration code, it looks like we're using the top level `description` instead of `configuration.description` 🙈 (which is probably my doing):

https://github.com/elastic/kibana/blob/3c2c59baaca40955b3879be82ce4f45c4f3ec94c/x-pack/solutions/chat/plugins/wci-index-source/server/integration/mcp_server.ts#L80-L82

So the way I see it, we have two options:

1. We still think it makes sense to dissociate the user-facing description from the LLM-facing description. In which case we adapt the index-source MCP server to use `configuration.description` instead of `description` when building its search tool (potentially the salesforce integ too, didn't check the code), and we keep the two fields in the UI, with the config gen script generating `configuration.description`. FWIW, that's the least amount of changes I believe, not that it should necessarily matter in decision making.

2. We think it doesn't make sense to have that LLM vs human descriptions separated. In that case, we remove the `configuration.description` field (but then we do it fully, by removing it from the TS types and check all usages), and then we have the config gen script generating the top level `description` field.

Not sure if all of this is clear, don't hesitate to tell me if you want me to elaborate more 🙂 

created_at: 2025-05-09T06:50:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -177,11 +178,12 @@ export const IntegrationEditView: React.FC<IntegrationEditViewProps> = ({ integr
                 <EuiFormRow label="Description">
                   <Controller
                     rules={{ required: true }}
-                    name="description"
+                    name="configuration.description"
path: x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
user: login: meghanmurphy1
body: I think it would make sense to disassociate human-reable form LLM since there doesn't need to be that much detail if we were planning on displaying in the UI? Maybe that's a design question for down the line. 

In that case, we would only need LLM readable which IIUC would need be a part of `configuration.description` to be used by MCP server? 
https://github.com/elastic/kibana/blob/3c2c59baaca40955b3879be82ce4f45c4f3ec94c/x-pack/solutions/chat/plugins/wci-index-source/server/integration/mcp_server.ts#L53-L57

created_at: 2025-05-09T12:24:06Z
author_association: CONTRIBUTOR
diff_hunk: @@ -177,11 +178,12 @@ export const IntegrationEditView: React.FC<IntegrationEditViewProps> = ({ integr
                 <EuiFormRow label="Description">
                   <Controller
                     rules={{ required: true }}
-                    name="description"
+                    name="configuration.description"
path: x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
user: login: danajuratoni
body: Having a human readable integration description makes sense, regardless of current UI designs. 
Renaming one of the `description` fields (possibly the LLM one would be most appropriate) with a descriptive name would minimize confusion and give us the option to expose an integration description/one-liner in UI in the future.
created_at: 2025-05-09T13:57:36Z
author_association: NONE
diff_hunk: @@ -177,11 +178,12 @@ export const IntegrationEditView: React.FC<IntegrationEditViewProps> = ({ integr
                 <EuiFormRow label="Description">
                   <Controller
                     rules={{ required: true }}
-                    name="description"
+                    name="configuration.description"
path: x-pack/solutions/chat/plugins/workchat-app/public/application/components/integrations/edit/integration_edit_view.tsx
user: login: meghanmurphy1
body: Ok! that makes sense- updated the Index Source config description to say "Tool Description"

<img width="1483" alt="Screenshot 2025-05-09 at 10 41 49 AM" src="https://github.com/user-attachments/assets/b073bba4-3844-401d-91a7-758b13f76dba" />

created_at: 2025-05-09T14:46:48Z
author_association: CONTRIBUTOR

PR comments:
user: login: elasticmachine
created_at: 2025-05-09T17:35:19Z
body: ## :yellow_heart: Build succeeded, but was flaky
* [Buildkite Build](https://buildkite.com/elastic/kibana-pull-request/builds/300158)
* Commit: 24dbfb6df2dbe75b3edbab404b84c679ccc7254c

### Failed CI Steps
* [FTR Configs #81](https://buildkite.com/elastic/kibana-pull-request/builds/300158#0196b5c4-6b3b-463b-9402-4903a41d6a04)

### Test Failures
* [[job]](https://buildkite.com/elastic/kibana-pull-request/builds/300158#0196b5c4-6b3b-463b-9402-4903a41d6a04) [[logs]](https://buildkite.com/organizations/elastic/pipelines/kibana-pull-request/builds/300158/jobs/0196b5c4-6b3b-463b-9402-4903a41d6a04/artifacts/0196b5d8-24d2-43c7-ae5f-a0d9b64563e2) FTR Configs #<span></span>81 / Cloud Security Posture Findings Page - Grouping "after all" hook in "Findings Page - Grouping"

### Metrics [[docs](https://www.elastic.co/guide/en/kibana/master/ci-metrics.html)]
#### Module Count
> Fewer modules leads to a faster build time


| id | [before](https://github.com/elastic/kibana/commit/9a2dc53b82c58032c3d3e56e1ffc11e755caea01) | [after](https://github.com/elastic/kibana/commit/24dbfb6df2dbe75b3edbab404b84c679ccc7254c) | diff |
| --- | --- | --- | --- |
| `wciIndexSource` | 14 | 15 | +1 |

#### Async chunks
> Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app


| id | [before](https://github.com/elastic/kibana/commit/9a2dc53b82c58032c3d3e56e1ffc11e755caea01) | [after](https://github.com/elastic/kibana/commit/24dbfb6df2dbe75b3edbab404b84c679ccc7254c) | diff |
| --- | --- | --- | --- |
| `workchatApp` | 120.0KB | 120.0KB | +6.0B |

#### Page load bundle
> Size of the bundles that are downloaded on every page load. Target size is below 100kb


| id | [before](https://github.com/elastic/kibana/commit/9a2dc53b82c58032c3d3e56e1ffc11e755caea01) | [after](https://github.com/elastic/kibana/commit/24dbfb6df2dbe75b3edbab404b84c679ccc7254c) | diff |
| --- | --- | --- | --- |
| `wciIndexSource` | 21.3KB | 25.5KB | +4.2KB |



### History
* :yellow_heart: [Build #299539](https://buildkite.com/elastic/kibana-pull-request/builds/299539) was flaky 2faa0a39c941f596390a696daf0a95a03cd73559

cc @meghanmurphy1

<!--buildkite-pr-comment-kibana-pull-request
{"builds":[{"buildStatus":{"state":"passed","success":true,"hasRetries":true,"hasNonPreemptionRetries":true},"url":"https://buildkite.com/elastic/kibana-pull-request/builds/300158","number":300158,"commit":"24dbfb6df2dbe75b3edbab404b84c679ccc7254c"},{"buildStatus":{"state":"passed","success":true,"hasRetries":true,"hasNonPreemptionRetries":true},"url":"https://buildkite.com/elastic/kibana-pull-request/builds/299539","number":299539,"commit":"2faa0a39c941f596390a696daf0a95a03cd73559"}],"number":300158}
buildkite-pr-comment-->
author_association: CONTRIBUTOR