Skip to content

Support OSC 8 terminal hyperlinks in MCP progress notification messages #1837

@m-nash

Description

@m-nash

Summary

MCP servers can send progress notifications (
otifications/progress) with a message field that gets displayed in the Copilot CLI status line. It would be great if the CLI could pass through OSC 8 terminal hyperlinks embedded in these messages, so MCP servers can include clickable links (e.g., to a PR URL).

Current Behavior

The CLI strips or does not render ANSI/OSC escape sequences in the message field of notifications/progress. The text content displays correctly, but any embedded OSC 8 hyperlink sequences are lost.

Desired Behavior

When rendering MCP progress messages in the status line or timeline, detect whether the hosting terminal supports OSC 8 hyperlinks and pass them through if supported. For unknown or unsupported terminals, strip the escape sequences cleanly so only the plain display text remains (no garbled output).

Terminal detection could use environment variables:

  • WT_SESSION — Windows Terminal
  • TERM_PROGRAM=iTerm.app — iTerm2
  • TERM_PROGRAM=WezTerm — WezTerm
  • TERM_PROGRAM=vscode — VS Code integrated terminal
  • KITTY_WINDOW_ID — Kitty

Use Case

Our MCP server (pr-copilot) monitors PRs during long-running polling operations. We send periodic heartbeat progress notifications like:

🕐 7:15:30 PM · Background Monitoring PR #56791 · CI: 43✅ · Will prompt when your attention is needed

Being able to make PR #56791 a clickable link to the GitHub PR would improve the user experience significantly.

Context

  • Copilot CLI v0.0.389 added "Display progress messages from MCP tools in timeline" — this feature works great
  • We send notifications/progress with a self-generated progressToken since the CLI doesn't send one in tool call _meta
  • The progress messages display correctly in the status line, but without hyperlink support

🤖 m-nash-copilot

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:mcpMCP server configuration, discovery, connectivity, OAuth, policy, and registry

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions