Skip to content

OLS-2568: Mcp app endpoints#2748

Draft
onmete wants to merge 5 commits intoopenshift:mainfrom
onmete:mcp-app-endpoints
Draft

OLS-2568: Mcp app endpoints#2748
onmete wants to merge 5 commits intoopenshift:mainfrom
onmete:mcp-app-endpoints

Conversation

@onmete
Copy link
Contributor

@onmete onmete commented Feb 12, 2026

Description

  • Add POST /v1/mcp-apps/resources to fetch ui:// resources (HTML/JS/CSS) from MCP servers
  • Add POST /v1/mcp-apps/tools/call to call MCP tools directly and return content + structuredContent
  • Add Pydantic request/response models: MCPAppResourceRequest, MCPAppResourceResponse, MCPAppToolCallRequest, MCPAppToolCallResponse

Dependencies

Depends on #2747

Type of change

  • Refactor
  • New feature
  • Bug fix
  • CVE fix
  • Optimization
  • Documentation Update
  • Configuration Update
  • Bump-up dependent library
  • Bump-up library or tool used for development (does not change the final image)
  • CI configuration change
  • Konflux configuration change

Related Tickets & Documents

  • Related Issue #
  • Closes #

Checklist before requesting a review

  • I have performed a self-review of my code.
  • PR has passed all pre-merge test jobs.
  • If it is a core feature, I have added thorough tests.

Testing

  • Please provide detailed steps to perform tests related to this code change.
  • How were the fix/results from this change verified? Please provide relevant screenshots or results.

onmete and others added 5 commits February 12, 2026 10:56
Call the tool coroutine directly instead of ainvoke() to preserve
the (content, artifact) tuple that langchain-mcp-adapters returns.
Extract structured_content from the artifact dict and propagate it
through execute_tool_call (now a 4-tuple) and _execute_single_tool_call
via ToolMessage additional_kwargs.

Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce ols.src.mcp.tool_registry that discovers and caches UI
metadata (_meta.ui.resourceUri, _meta.ui.visibility) from configured
MCP servers. The registry maps tool names to ToolUIMetadata and
resource URIs to config server names, enabling:

- is_model_visible(): filter app-only tools from LLM binding
- get_tool_ui_metadata(): look up UI resource URIs for tool results
- get_config_name_for_resource_uri(): route ui:// URIs to servers

Co-authored-by: Cursor <cursoragent@cursor.com>
Add a FastAPI lifespan handler that calls discover_tool_ui_metadata()
during application startup. This populates the tool registry with UI
metadata from all configured MCP servers so that tool results can be
routed to interactive UIs later.

Co-authored-by: Cursor <cursoragent@cursor.com>
Use is_model_visible() to exclude app-only tools (visibility: ["app"])
from LLM tool binding. For tools with a UI resource, send a short
placeholder message to the LLM instead of the full tool output to
conserve tokens -- the console renders the full data via the
interactive UI.

Also forward structured_content from tool artifacts in streamed
tool_result chunks, handle missing 'properties' key in tool schemas
safely, and include tool_name + server_name in result metadata.

Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce two new endpoints under /v1/mcp-apps that enable the console
to render interactive UIs from MCP servers:

- POST /v1/mcp-apps/resources: fetch ui:// resources (HTML/JS/CSS)
  from MCP servers using the tool registry to resolve URIs to servers
- POST /v1/mcp-apps/tools/call: call MCP tools directly and return
  content + structuredContent for the interactive UI

Add corresponding Pydantic request/response models and register the
new router.

Depends-On: mcp-app-tool-registry
Co-authored-by: Cursor <cursoragent@cursor.com>
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Feb 12, 2026
@openshift-ci-robot
Copy link

openshift-ci-robot commented Feb 12, 2026

@onmete: This pull request references OLS-2568 which is a valid jira issue.

Details

In response to this:

Description

  • Add POST /v1/mcp-apps/resources to fetch ui:// resources (HTML/JS/CSS) from MCP servers
  • Add POST /v1/mcp-apps/tools/call to call MCP tools directly and return content + structuredContent
  • Add Pydantic request/response models: MCPAppResourceRequest, MCPAppResourceResponse, MCPAppToolCallRequest, MCPAppToolCallResponse

Dependencies

Depends on #2747

Type of change

  • Refactor
  • New feature
  • Bug fix
  • CVE fix
  • Optimization
  • Documentation Update
  • Configuration Update
  • Bump-up dependent library
  • Bump-up library or tool used for development (does not change the final image)
  • CI configuration change
  • Konflux configuration change

Related Tickets & Documents

  • Related Issue #
  • Closes #

Checklist before requesting a review

  • I have performed a self-review of my code.
  • PR has passed all pre-merge test jobs.
  • If it is a core feature, I have added thorough tests.

Testing

  • Please provide detailed steps to perform tests related to this code change.
  • How were the fix/results from this change verified? Please provide relevant screenshots or results.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@onmete onmete marked this pull request as draft February 12, 2026 10:02
@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 12, 2026
@openshift-ci openshift-ci bot requested review from blublinsky and bparees February 12, 2026 10:02
@openshift-ci
Copy link

openshift-ci bot commented Feb 12, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign joshuawilson for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci
Copy link

openshift-ci bot commented Feb 12, 2026

@onmete: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/verify 2bf3bc7 link true /test verify

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants