.. index:: single: mcp_server_2025_06_18_spec
.. _mcp_server_2025_06_18_spec/0:

.. rst-class:: right

**object**

``mcp_server_2025_06_18_spec``
==============================

MCP 2025-06-18 protocol handler. Transport-agnostic message handling; returns abstract outcomes for stdio or Streamable HTTP transports to render. Synchronous elicitation requires ``stdio_input/1`` and ``stdio_output/1`` options.

| **Availability:** 
|    ``logtalk_load(mcp_server(loader))``

| **Author:** Paulo Moura
| **Version:** 1:0:0
| **Date:** 2026-09-02

| **Compilation flags:**
|    ``static, context_switching_calls``


| **Implements:**
|    ``public`` :ref:`mcp_server_spec_protocol <mcp_server_spec_protocol/0>`
| **Imports:**
|    ``public`` :ref:`mcp_server_application <mcp_server_application/0>`
| **Uses:**
|    :ref:`json_rpc <json_rpc/0>`
|    :ref:`list <list/0>`
|    :ref:`term_io <term_io/0>`
|    :ref:`user <user/0>`

| **Remarks:**
|    (none)

| **Inherited public predicates:**
|     :ref:`options_protocol/0::check_option/1`  :ref:`options_protocol/0::check_options/1`  :ref:`mcp_server_spec_protocol/0::cleanup/0`  :ref:`options_protocol/0::default_option/1`  :ref:`options_protocol/0::default_options/1`  :ref:`mcp_server_spec_protocol/0::handle_message/3`  :ref:`mcp_server_spec_protocol/0::notify/1`  :ref:`options_protocol/0::option/2`  :ref:`options_protocol/0::option/3`  :ref:`mcp_server_spec_protocol/0::prepare/2`  :ref:`mcp_server_spec_protocol/0::spec/1`  :ref:`mcp_server_application/0::tool_descriptors_to_json/3`  :ref:`options_protocol/0::valid_option/1`  :ref:`options_protocol/0::valid_options/1`  

.. contents::
   :local:
   :backlinks: top

Public predicates
-----------------

.. index:: supported_specs/1
.. _mcp_server_2025_06_18_spec/0::supported_specs/1:

``supported_specs/1``
^^^^^^^^^^^^^^^^^^^^^

Specs this handler can negotiate, preferred first.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``supported_specs(Versions)``
| **Mode and number of proofs:**
|    ``supported_specs(-list)`` - ``one``


------------

.. index:: current_options/1
.. _mcp_server_2025_06_18_spec/0::current_options/1:

``current_options/1``
^^^^^^^^^^^^^^^^^^^^^

Merged options established by prepare/2.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``current_options(Options)``
| **Mode and number of proofs:**
|    ``current_options(-list)`` - ``zero_or_one``


------------

.. index:: elicit_request/5
.. _mcp_server_2025_06_18_spec/0::elicit_request/5:

``elicit_request/5``
^^^^^^^^^^^^^^^^^^^^

Sends an elicitation/create request to the client and reads the response (2025-06-18 synchronous model).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``elicit_request(Input,Output,Message,RequestedSchema,Answer)``
| **Mode and number of proofs:**
|    ``elicit_request(+stream,+stream,+atom,+compound,--compound)`` - ``one``


------------

Protected predicates
--------------------

.. index:: handle_initialize/4
.. _mcp_server_2025_06_18_spec/0::handle_initialize/4:

``handle_initialize/4``
^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``initialize`` request and returns a ``reply/1`` outcome. Overridable by later 2025 family specs (e.g. 2025-11-25).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_initialize(Message,Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_initialize(+nonvar,+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_ping/2
.. _mcp_server_2025_06_18_spec/0::handle_ping/2:

``handle_ping/2``
^^^^^^^^^^^^^^^^^

Handles the ``ping`` request and returns a ``reply/1`` outcome.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_ping(Id,Outcome)``
| **Mode and number of proofs:**
|    ``handle_ping(+nonvar,-nonvar)`` - ``one``


------------

.. index:: handle_tools_list/3
.. _mcp_server_2025_06_18_spec/0::handle_tools_list/3:

``handle_tools_list/3``
^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``tools/list`` request. Overridable so later specs can enrich tool descriptors (e.g. icons).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_tools_list(Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_tools_list(+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_tools_call/4
.. _mcp_server_2025_06_18_spec/0::handle_tools_call/4:

``handle_tools_call/4``
^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``tools/call`` request and returns a ``reply/1`` outcome.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_tools_call(Message,Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_tools_call(+nonvar,+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_prompts_list/3
.. _mcp_server_2025_06_18_spec/0::handle_prompts_list/3:

``handle_prompts_list/3``
^^^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``prompts/list`` request. Overridable so later specs can enrich prompt descriptors (e.g. icons).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_prompts_list(Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_prompts_list(+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_prompts_get/4
.. _mcp_server_2025_06_18_spec/0::handle_prompts_get/4:

``handle_prompts_get/4``
^^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``prompts/get`` request and returns a ``reply/1`` outcome.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_prompts_get(Message,Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_prompts_get(+nonvar,+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_completion_complete/4
.. _mcp_server_2025_06_18_spec/0::handle_completion_complete/4:

``handle_completion_complete/4``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``completion/complete`` request and returns a ``reply/1`` outcome.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_completion_complete(Message,Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_completion_complete(+nonvar,+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_resources_list/3
.. _mcp_server_2025_06_18_spec/0::handle_resources_list/3:

``handle_resources_list/3``
^^^^^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``resources/list`` request. Overridable so later specs can enrich resource descriptors (e.g. icons).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_resources_list(Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_resources_list(+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_resources_templates_list/3
.. _mcp_server_2025_06_18_spec/0::handle_resources_templates_list/3:

``handle_resources_templates_list/3``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``resources/templates/list`` request. Overridable so later specs can enrich resource template descriptors (e.g. icons).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_resources_templates_list(Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_resources_templates_list(+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: handle_resources_read/4
.. _mcp_server_2025_06_18_spec/0::handle_resources_read/4:

``handle_resources_read/4``
^^^^^^^^^^^^^^^^^^^^^^^^^^^

Handles the ``resources/read`` request and returns a ``reply/1`` outcome.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``handle_resources_read(Message,Id,Options,Outcome)``
| **Mode and number of proofs:**
|    ``handle_resources_read(+nonvar,+nonvar,+list,-nonvar)`` - ``one``


------------

.. index:: generate_elicit_id/1
.. _mcp_server_2025_06_18_spec/0::generate_elicit_id/1:

``generate_elicit_id/1``
^^^^^^^^^^^^^^^^^^^^^^^^

Generates a new elicitation id.

| **Compilation flags:**
|    ``dynamic``

| **Template:**
|    ``generate_elicit_id(ElicitId)``
| **Mode and number of proofs:**
|    ``generate_elicit_id(-non_negative_integer)`` - ``one``


------------

.. index:: build_capabilities/2
.. _mcp_server_2025_06_18_spec/0::build_capabilities/2:

``build_capabilities/2``
^^^^^^^^^^^^^^^^^^^^^^^^

Builds the server ``capabilities`` object from application capability atoms (tools is always present; prompts, resources, completions, and the MCP Apps UI extension are optional).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``build_capabilities(ApplicationCapabilities,Capabilities)``
| **Mode and number of proofs:**
|    ``build_capabilities(+list,-compound)`` - ``one``


------------

.. index:: best_supported_spec/3
.. _mcp_server_2025_06_18_spec/0::best_supported_spec/3:

``best_supported_spec/3``
^^^^^^^^^^^^^^^^^^^^^^^^^

Selects the highest supported spec that is less than or equal to the client-requested spec. Fails when no such spec exists.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``best_supported_spec(Supported,ClientVersion,Best)``
| **Mode and number of proofs:**
|    ``best_supported_spec(+list,+atom,-atom)`` - ``zero_or_one``


------------

Private predicates
------------------

.. index:: client_capabilities_/1
.. _mcp_server_2025_06_18_spec/0::client_capabilities_/1:

``client_capabilities_/1``
^^^^^^^^^^^^^^^^^^^^^^^^^^

Client capabilities.

| **Compilation flags:**
|    ``dynamic``

| **Template:**
|    ``client_capabilities_(Capabilities)``
| **Mode and number of proofs:**
|    ``client_capabilities_(-nonvar)`` - ``one``


------------

.. index:: elicit_counter_/1
.. _mcp_server_2025_06_18_spec/0::elicit_counter_/1:

``elicit_counter_/1``
^^^^^^^^^^^^^^^^^^^^^

Elicitation current counter.

| **Compilation flags:**
|    ``dynamic``

| **Template:**
|    ``elicit_counter_(Counter)``
| **Mode and number of proofs:**
|    ``elicit_counter_(-non_negative_integer)`` - ``one``


------------

.. index:: initialized_/0
.. _mcp_server_2025_06_18_spec/0::initialized_/0:

``initialized_/0``
^^^^^^^^^^^^^^^^^^

Initialization completed flag.

| **Compilation flags:**
|    ``dynamic``

| **Mode and number of proofs:**
|    ``initialized_`` - ``zero_or_one``


------------

.. index:: server_options_/1
.. _mcp_server_2025_06_18_spec/0::server_options_/1:

``server_options_/1``
^^^^^^^^^^^^^^^^^^^^^

Server options.

| **Compilation flags:**
|    ``dynamic``

| **Template:**
|    ``server_options_(Options)``
| **Mode and number of proofs:**
|    ``server_options_(-list(compound))`` - ``one``


------------

Operators
---------

(none)

