diff --git a/_ml-commons-plugin/api/agentic-memory-apis/add-memory.md b/_ml-commons-plugin/api/agentic-memory-apis/add-memory.md new file mode 100644 index 00000000000..1db3aa918e1 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/add-memory.md @@ -0,0 +1,84 @@ +--- +layout: default +title: Add agentic memory +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 40 +--- + +# Add Agentic Memory API +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use this API to add an agentic memory to a [memory container]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/create-memory-container). You can create a memory in one of the following modes (controlled by the `infer` parameter): + +- Fact memory -- A processed representation of the message. The large language model (LLM) associated with the memory container extracts and stores key factual information or knowledge from the original text. + +- Raw message memory -- The unprocessed message content. + +Once an agentic memory is created, you'll provide its `memory_id` to other APIs. + +## Endpoint + +```json +POST /_plugins/_ml/memory_containers/{memory_container_id}/memories +``` + +## Request body fields + +The following table lists the available request body fields. + +Field | Data type | Required/Optional | Description +:--- | :--- | :--- | :--- +`messages` | List | Required | A list of messages. +`session_id` | String | Optional | The session ID associated with the memory. +`agent_id` | String | Optional | The agent ID associated with the memory. +`infer` | Boolean | Optional | Controls whether the LLM infers context from messages. Default is `true`. When `true`, the LLM extracts factual information from the original text and stores it as the memory. When `false`, the memory contains the unprocessed message and you must explicitly specify the `role` in each message. +`tags` | Object | Optional | Custom metadata for the agentic memory. + +## Example request + +```json +POST /_plugins/_ml/memory_containers/SdjmmpgBOh0h20Y9kWuN/memories +{ + "messages": [ + {"role": "assistant", "content": "Machine learning is a subset of artificial intelligence"} + ], + "session_id": "sess_789", + "agent_id": "agent_123", + "tags": { + "topic": "personal info" + } +} +``` +{% include copy-curl.html %} + +## Example response + +```json +{ + "results": [ + { + "id": "T9jtmpgBOh0h20Y91WtZ", + "text": "Machine learning is a subset of artificial intelligence", + "event": "ADD" + } + ], + "session_id": "sess_789" +} +``` + +## Response body fields + +The following table lists all response body fields. + +| Field | Data type | Description | +| :-------------- | :-------- | :------------------------------------------------------------------------------------------------ | +| `results` | List | A list of memory entries returned by the request. | +| `results.id` | String | The unique identifier for the memory entry. | +| `results.text` | String | If `infer` is `false`, contains the stored text from the message. If `infer` is `true`, contains the extracted fact from the message. | +| `results.event` | String | The type of event for the memory entry. For the Add Agentic Memory API, the event type is always `ADD`, indicating that the memory was added. | +| `session_id` | String | The session ID associated with the memory. | diff --git a/_ml-commons-plugin/api/agentic-memory-apis/create-memory-container.md b/_ml-commons-plugin/api/agentic-memory-apis/create-memory-container.md new file mode 100644 index 00000000000..38c7be9fa08 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/create-memory-container.md @@ -0,0 +1,184 @@ +--- +layout: default +title: Create memory container +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 10 +--- + +# Create Memory Container API +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use this API to create a memory container to hold agentic memories. The container can have two model types associated with it: + +- A text embedding model for vectorizing the message so it can be searched. Use a text embedding model for dense vector embeddings or a sparse encoding model for sparse vector formats. If no embedding model is specified, messages are stored but cannot be used for vector-based searches. +- A large language model (LLM) for reasoning over the message to produce factual or processed content. If no LLM is specified, messages are stored directly, without applying inference. + +Once a memory container is created, you'll provide its `memory_container_id` to other APIs. + +## Prerequisites + +If you want to use one of the model types to process memories, register the models in OpenSearch. + +### Embedding model + +Register either a local or externally hosted embedding model. OpenSearch supports text embedding and sparse encoding models. + +For more information about using models locally, see [Using ML models within OpenSearch]({{site.url}}{{site.baseurl}}/ml-commons-plugin/using-ml-models/). For a list of supported models, see [OpenSearch-provided pretrained models]({{site.url}}{{site.baseurl}}/ml-commons-plugin/pretrained-models/#supported-pretrained-models). + + +For more information about using externally hosted models, see [Connecting to externally hosted models]({{site.url}}{{site.baseurl}}/ml-commons-plugin/remote-models/index/). For example, to register an externally hosted Amazon Titan Embeddings model, send the following request: + +```json +POST /_plugins/_ml/models/_register +{ + "name": "Bedrock embedding model", + "function_name": "remote", + "description": "test model", + "connector": { + "name": "Amazon Bedrock Connector: embedding", + "description": "The connector to bedrock Titan embedding model", + "version": 1, + "protocol": "aws_sigv4", + "parameters": { + "region": "us-east-1", + "service_name": "bedrock", + "model": "amazon.titan-embed-text-v2:0", + "dimensions": 1024, + "normalize": true, + "embeddingTypes": [ + "float" + ] + }, + "credential": { + "access_key": "...", + "secret_key": "...", + "session_token": "..." + }, + "actions": [ + { + "action_type": "predict", + "method": "POST", + "url": "https://bedrock-runtime.${parameters.region}.amazonaws.com/model/${parameters.model}/invoke", + "headers": { + "content-type": "application/json", + "x-amz-content-sha256": "required" + }, + "request_body": """{ "inputText": "${parameters.inputText}", "dimensions": ${parameters.dimensions}, "normalize": ${parameters.normalize}, "embeddingTypes": ${parameters.embeddingTypes} }""", + "pre_process_function": "connector.pre_process.bedrock.embedding", + "post_process_function": "connector.post_process.bedrock.embedding" + } + ] + } +} +``` +{% include copy-curl.html %} + +### LLM + +OpenSearch supports the Anthropic Claude model for LLM capabilities. To register a Claude model, send the following request: + +```json +POST /_plugins/_ml/models/_register +{ + "name": "Bedrock infer model", + "function_name": "remote", + "description": "test model", + "connector": { + "name": "Amazon Bedrock Connector: embedding", + "description": "The connector to bedrock Claude 3.7 sonnet model", + "version": 1, + "protocol": "aws_sigv4", + "parameters": { + "region": "us-east-1", + "service_name": "bedrock", + "max_tokens": 8000, + "temperature": 1, + "anthropic_version": "bedrock-2023-05-31", + "model": "us.anthropic.claude-3-7-sonnet-20250219-v1:0" + }, + "credential": { + "access_key": "...", + "secret_key": "...", + "session_token": "..." + }, + "actions": [ + { + "action_type": "predict", + "method": "POST", + "headers": { + "content-type": "application/json" + }, + "url": "https://bedrock-runtime.${parameters.region}.amazonaws.com/model/${parameters.model}/invoke", + "request_body": """{ "system": "${parameters.system_prompt}", "anthropic_version": "${parameters.anthropic_version}", "max_tokens": ${parameters.max_tokens}, "temperature": ${parameters.temperature}, "messages": ${parameters.messages} }""" + } + ] + } +} +``` +{% include copy-curl.html %} + +The `system_prompt` parameter is required for Claude models. +{: .note} + +For more information about using externally hosted models, see [Connecting to externally hosted models]({{site.url}}{{site.baseurl}}/ml-commons-plugin/remote-models/index/). + +## Endpoint + +```json +POST /_plugins/_ml/memory_containers/_create +``` + +## Request body fields + +The following table lists the available request body fields. + +Field | Data type | Required/Optional | Description +:--- | :--- | :--- | :--- +`name` | String | Required | The name of the memory container. +`description` | String | Optional | The description of the memory container. +`memory_storage_config` | Object | Optional | The memory storage configuration. See [the `memory_storage_config` object](#the-memory_storage_config-object). + +### The memory_storage_config object + +The `memory_storage_config` object supports the following fields. + +Field | Data type | Required/Optional | Description +:--- | :--- | :--- | :--- +`dimension` | Integer | Optional | The dimension of the embedding model. Required if `embedding_model_type` is `TEXT_EMBEDDING`. +`embedding_model_id` | String | Optional | The embedding model ID. +`embedding_model_type` | String | Optional | The embedding model type. Supported types are `TEXT_EMBEDDING` and `SPARSE_ENCODING`. +`llm_model_id` | String | Optional | The LLM ID. +`max_infer_size` | Integer | Optional | The maximum number of messages the LLM processes for inference in a single request. Valid values are 1--9, inclusive. Default is 5. +`memory_index_name` | String | Optional | The name of the index in which to save messages, embeddings, and inferred facts. If not specified, a default index is automatically generated. + +## Example request + +```json +POST /_plugins/_ml/memory_containers/_create +{ + "name": "Sparse memory container", + "description": "Store sparse conversations with semantic search", + "memory_storage_config": { + "llm_model_id": "bbphdJgB9L0Qb_M6ipnn", + "embedding_model_type": "SPARSE_ENCODING", + "embedding_model_id": "RodoX5gBfObQ5OgTHf1X" + } +} +``` +{% include copy-curl.html %} + +## Example response + +The response contains the `memory_container_id` that you can use to retrieve or delete the container: + +```json +{ + "memory_container_id": "SdjmmpgBOh0h20Y9kWuN", + "status": "created" +} +``` \ No newline at end of file diff --git a/_ml-commons-plugin/api/agentic-memory-apis/delete-memory-container.md b/_ml-commons-plugin/api/agentic-memory-apis/delete-memory-container.md new file mode 100644 index 00000000000..f23f3249463 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/delete-memory-container.md @@ -0,0 +1,48 @@ +--- +layout: default +title: Delete memory container +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 30 +--- + +# Delete Memory Container API +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use this API to delete a memory container by its ID. + +## Endpoint + +```json +DELETE /_plugins/_ml/memory_containers/{memory_container_id} +``` + +## Example request + +```json +DELETE /_plugins/_ml/memory_containers/SdjmmpgBOh0h20Y9kWuN +``` +{% include copy-curl.html %} + +## Example response + +```json +{ + "_index": ".plugins-ml-memory-container", + "_id": "SdjmmpgBOh0h20Y9kWuN", + "_version": 3, + "result": "deleted", + "forced_refresh": true, + "_shards": { + "total": 2, + "successful": 2, + "failed": 0 + }, + "_seq_no": 6, + "_primary_term": 1 +} +``` \ No newline at end of file diff --git a/_ml-commons-plugin/api/agentic-memory-apis/delete-memory.md b/_ml-commons-plugin/api/agentic-memory-apis/delete-memory.md new file mode 100644 index 00000000000..e7263b60e44 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/delete-memory.md @@ -0,0 +1,47 @@ +--- +layout: default +title: Delete agentic memory +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 80 +--- + +# Delete Agentic Memory API +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use this API to delete an agentic memory by its ID. + +## Endpoint + +```json +DELETE /_plugins/_ml/memory_containers/{memory_container_id}/memories/{memory_id} +``` + +## Example request + +```json +DELETE /_plugins/_ml/memory_containers/SdjmmpgBOh0h20Y9kWuN/memories/T9jtmpgBOh0h20Y91WtZ +``` +{% include copy-curl.html %} + +## Example response + +```json +{ + "_index": "ml-static-memory-sdjmmpgboh0h20y9kwun-admin", + "_id": "S9jnmpgBOh0h20Y9qWu7", + "_version": 3, + "result": "deleted", + "_shards": { + "total": 2, + "successful": 2, + "failed": 0 + }, + "_seq_no": 3, + "_primary_term": 1 +} +``` \ No newline at end of file diff --git a/_ml-commons-plugin/api/agentic-memory-apis/get-memory-container.md b/_ml-commons-plugin/api/agentic-memory-apis/get-memory-container.md new file mode 100644 index 00000000000..33cad3b4f16 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/get-memory-container.md @@ -0,0 +1,61 @@ +--- +layout: default +title: Get memory container +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 20 +--- + +# Get Memory Container API +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use this API to retrieve a memory container by its ID. + +## Endpoint + +```json +GET /_plugins/_ml/memory_containers/{memory_container_id} +``` + +## Example request + +```json +GET /_plugins/_ml/memory_containers/SdjmmpgBOh0h20Y9kWuN +``` +{% include copy-curl.html %} + +## Example response + +```json +{ + "name": "Raw memory container", + "description": "Store static conversations with semantic search", + "owner": { + "name": "admin", + "backend_roles": [ + "admin" + ], + "roles": [ + "own_index", + "all_access" + ], + "custom_attribute_names": [], + "user_requested_tenant": "null", + "user_requested_tenant_access": "WRITE" + }, + "created_time": 1754943902286, + "last_updated_time": 1754943902286, + "memory_storage_config": { + "memory_index_name": "ml-static-memory-sdjmmpgboh0h20y9kwun-admin", + "semantic_storage_enabled": false + } +} +``` + +## Response body fields + +For response field descriptions, see [Create Memory Container API request fields]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/create-memory-container#request-body-fields). \ No newline at end of file diff --git a/_ml-commons-plugin/api/agentic-memory-apis/get-memory.md b/_ml-commons-plugin/api/agentic-memory-apis/get-memory.md new file mode 100644 index 00000000000..7030fc4b090 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/get-memory.md @@ -0,0 +1,57 @@ +--- +layout: default +title: Get agentic memory +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 60 +--- + +# Get Agentic Memory API +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use this API to retrieve an agentic memory by its ID. + +## Endpoint + +```json +GET /_plugins/_ml/memory_containers/{memory_container_id}/memories/{memory_id} +``` + +## Example request + +```json +GET /_plugins/_ml/memory_containers/SdjmmpgBOh0h20Y9kWuN/memories/T9jtmpgBOh0h20Y91WtZ +``` +{% include copy-curl.html %} + +## Example response + +```json +{ + "session_id": "sess_a99c5a19-cee3-44ce-b64d-6fbdc411c537", + "memory": "Machine learning is a subset of artificial intelligence", + "memory_type": "RAW_MESSAGE", + "user_id": "admin", + "role": "assistant", + "created_time": 1754945934681, + "last_updated_time": 1754945934681 +} +``` + +## Response body fields + +The following table lists all response body fields. + +| Field | Data type | Description | +| :------------------ | :-------- | :--------------------------------------------------------------------------------------- | +| `session_id` | String | The unique identifier for the session associated with this memory. | +| `memory` | String | If the memory was created with `infer: false`, contains the stored text from the message. If the memory was created with `infer: true`, contains the extracted fact from the message. | +| `memory_type` | String | The type of memory. `RAW_MESSAGE` indicates the unprocessed message text. `FACT` indicates a fact inferred by the large language model. | +| `user_id` | String | The ID of the user associated with this memory. | +| `role` | String | The role of the message author. Can be any string, such as `assistant` or `user`. | +| `created_time` | Integer | The Unix timestamp, in milliseconds, when the memory entry was created. | +| `last_updated_time` | Integer | The Unix timestamp, in milliseconds, when the memory entry was last updated. | diff --git a/_ml-commons-plugin/api/agentic-memory-apis/index.md b/_ml-commons-plugin/api/agentic-memory-apis/index.md new file mode 100644 index 00000000000..ff5a7f73a62 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/index.md @@ -0,0 +1,49 @@ +--- +layout: default +title: Agentic Memory APIs +parent: ML Commons APIs +has_children: true +has_toc: false +nav_order: 40 +redirect_from: + - /ml-commons-plugin/api/agentic-memory-apis/ +--- + +# Agentic Memory APIs +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Agentic Memory APIs provide persistent memory management for AI agents. This enables agents to learn, remember, and reason over structured information across conversations. + +## Enabling Agentic Memory APIs + +To enable Agentic Memory APIs, update the following cluster setting: + +```json +PUT /_cluster/settings +{ + "persistent": { + "plugins.ml_commons.agentic_memory_enabled": true + } +} +``` +{% include copy-curl.html %} + +For more information and other ways to enable experimental features, see [Experimental feature flags]({{site.url}}{{site.baseurl}}/install-and-configure/configuring-opensearch/experimental/). + +OpenSearch supports the following memory container APIs: + +- [Create memory container]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/create-memory-container/) +- [Get memory container]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/get-memory-container/) +- [Delete memory container]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/delete-memory-container/) + +OpenSearch supports the following memory APIs: + +- [Add memory]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/add-memory/) +- [Get memory]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/get-memory/) +- [Search memory]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/search-memory/) +- [Update memory]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/update-memory/) +- [Delete memory]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/delete-memory/) \ No newline at end of file diff --git a/_ml-commons-plugin/api/agentic-memory-apis/search-memory.md b/_ml-commons-plugin/api/agentic-memory-apis/search-memory.md new file mode 100644 index 00000000000..bee96e6f0ca --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/search-memory.md @@ -0,0 +1,58 @@ +--- +layout: default +title: Search agentic memory +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 70 +--- + +# Search Agentic Memory APIs +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use these APIs to to search for an agentic memory in a memory container. These APIs use a query to search for matching memories. + +## Endpoints + +```json +GET /_plugins/_ml/memory_containers/{memory_container_id}/memories/_search +POST /_plugins/_ml/memory_containers/{memory_container_id}/memories/_search +``` + +## Example request + +```json +POST /_plugins/_ml/memory_containers/SdjmmpgBOh0h20Y9kWuN/memories/_search +{ + "query": "machine learning concepts" +} +``` +{% include copy-curl.html %} + +## Example response + +```json +{ + "timed_out": false, + "hits": { + "total": 1, + "max_score": 0.69813377, + "hits": [ + { + "memory_id": "T9jtmpgBOh0h20Y91WtZ", + "memory": "Machine learning is a subset of artificial intelligence", + "_score": 0.69813377, + "session_id": "sess_a99c5a19-cee3-44ce-b64d-6fbdc411c537", + "user_id": "admin", + "memory_type": "RAW_MESSAGE", + "role": "assistant", + "created_time": 1754945934681, + "last_updated_time": 1754945934681 + } + ] + } +} +``` \ No newline at end of file diff --git a/_ml-commons-plugin/api/agentic-memory-apis/update-memory.md b/_ml-commons-plugin/api/agentic-memory-apis/update-memory.md new file mode 100644 index 00000000000..b6b2bc44ce2 --- /dev/null +++ b/_ml-commons-plugin/api/agentic-memory-apis/update-memory.md @@ -0,0 +1,58 @@ +--- +layout: default +title: Update agentic memory +parent: Agentic Memory APIs +grand_parent: ML Commons APIs +nav_order: 50 +--- + +# Update Agentic Memory API +**Introduced 3.2** +{: .label .label-purple } + +This is an experimental feature and is not recommended for use in a production environment. For updates on the progress of the feature or if you want to leave feedback, join the discussion on the [OpenSearch forum](https://forum.opensearch.org/). +{: .warning} + +Use this API to update an agentic memory. + +## Endpoint + +```json +PUT /_plugins/_ml/memory_containers/{memory_container_id}/memories/{memory_id} +``` + +## Request body fields + +The following table lists the available request body fields. + +Field | Data type | Required/Optional | Description +:--- | :--- | :--- | :--- +`text` | String | Required | The updated `text` content. + +## Example request + +```json +PUT /_plugins/_ml/memory_containers/SdjmmpgBOh0h20Y9kWuN/memories/T9jtmpgBOh0h20Y91WtZ +{ + "text": "Updated content with new information about machine learning" +} +``` +{% include copy-curl.html %} + +## Example response + +```json +{ + "_index": "ml-static-memory-sdjmmpgboh0h20y9kwun-admin", + "_id": "S9jnmpgBOh0h20Y9qWu7", + "_version": 2, + "result": "updated", + "_shards": { + "total": 2, + "successful": 2, + "failed": 0 + }, + "_seq_no": 2, + "_primary_term": 1 +} +``` \ No newline at end of file diff --git a/_ml-commons-plugin/api/index.md b/_ml-commons-plugin/api/index.md index 4160cae5842..ab34d954c0f 100644 --- a/_ml-commons-plugin/api/index.md +++ b/_ml-commons-plugin/api/index.md @@ -18,9 +18,10 @@ OpenSearch supports the following machine learning (ML) APIs: - [Connector APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/connector-apis/index/) - [Agent APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agent-apis/index/) - [Memory APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/memory-apis/index/) +- [Agentic Memory APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/agentic-memory-apis/) - [Controller APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/controller-apis/index/) - [Execute Algorithm API]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/execute-algorithm/) - [Tasks APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/tasks-apis/index/) - [Profile API]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/profile/) - [Stats API]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/stats/) -- [MCP Server APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/mcp-server-apis/) +- [MCP Server APIs]({{site.url}}{{site.baseurl}}/ml-commons-plugin/api/mcp-server-apis/) \ No newline at end of file