Skip to content

WIP: feat(mcp): advertise MCP Apps UI extension capability#6927

Draft
aharvard wants to merge 1 commit intomainfrom
feat/mcp-apps-ui-extension
Draft

WIP: feat(mcp): advertise MCP Apps UI extension capability#6927
aharvard wants to merge 1 commit intomainfrom
feat/mcp-apps-ui-extension

Conversation

@aharvard
Copy link
Collaborator

@aharvard aharvard commented Feb 3, 2026

Summary

This PR updates the MCP client to advertise support for the io.modelcontextprotocol/ui extension during capability negotiation, as required by the MCP Apps specification.

Changes

  • Import ExtensionCapabilities from rmcp::model
  • Update GooseClient::get_info() to build and advertise the UI extension capability
  • Add test to verify the capability is correctly advertised

Capability Advertised

{
  "capabilities": {
    "extensions": {
      "io.modelcontextprotocol/ui": {
        "mimeTypes": ["text/html;profile=mcp-app"]
      }
    }
  }
}

Blocked By

⚠️ This PR cannot be merged until the following dependency is released:

Once that PR is merged and a new version of rmcp is released, we'll need to:

  1. Update rmcp version in Cargo.toml
  2. Verify build passes
  3. Remove WIP status

Related

WIP: Depends on rmcp PR #643 being merged and released.

This change updates the MCP client to advertise support for the
io.modelcontextprotocol/ui extension during capability negotiation,
as required by the MCP Apps specification.

The client now advertises:
  {
    "capabilities": {
      "extensions": {
        "io.modelcontextprotocol/ui": {
          "mimeTypes": ["text/html;profile=mcp-app"]
        }
      }
    }
  }

Blocked by:
- modelcontextprotocol/rust-sdk#643

Related:
- https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx
@aharvard
Copy link
Collaborator Author

aharvard commented Feb 4, 2026

note: Depending on timing, we might be able to leverage conditional declaration based off platform detection: #6931

Jazzcort added a commit to Jazzcort/goose that referenced this pull request Feb 5, 2026
Introduces a GoosePlatform enum to distinguish between GooseCli and GooseDesktop environments.
This allows the MCP client to conditionally advertise capabilities based on the active
platform.

Changes:
  - Core: Added GoosePlatform enum to crates/goose/src/agents/agent.rs and included it in
    AgentConfig.

  - MCP Integration: Updated GooseClient to include platform info. Now, the client
    advertises its client name as "goose-desktop" while using Goose Desktop and "goose-cli"
    for Goose Cli. Leave params.capabilities.extension part for
    block#6927.

  - Plumbing: Updated ExtensionManager, McpClient, and Agent constructors across the codebase
    to propagate the platform type.

  - Defaults:
    - goose-acp and goose-cli default to GoosePlatform::GooseCli.
    - AgentManager (used by the desktop execution flow) defaults to
      GoosePlatform::GooseDesktop.

  - Testing: Updated scenario runners and integration tests to explicitly pass a platform
    variant (typically GooseCli).

Signed-off-by: Jazzcort <jason101011113@gmail.com>
Jazzcort added a commit to Jazzcort/goose that referenced this pull request Feb 5, 2026
Introduces a GoosePlatform enum to distinguish between GooseCli and GooseDesktop environments.
This allows the MCP client to conditionally advertise capabilities based on the active
platform.

Changes:
  - Core: Added GoosePlatform enum to crates/goose/src/agents/agent.rs and included it in
    AgentConfig.

  - MCP Integration: Updated GooseClient to include platform info. Now, the client
    advertises its client name as "goose-desktop" while using Goose Desktop and "goose-cli"
    for Goose Cli. Leave params.capabilities.extension part for block#6927

  - Plumbing: Updated ExtensionManager, McpClient, and Agent constructors across the codebase
    to propagate the platform type.

  - Defaults:
    - goose-acp and goose-cli default to GoosePlatform::GooseCli.
    - AgentManager (used by the desktop execution flow) defaults to
      GoosePlatform::GooseDesktop.

  - Testing: Updated scenario runners and integration tests to explicitly pass a platform
    variant (typically GooseCli).

Signed-off-by: Jazzcort <jason101011113@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant