MS Learn MCP in Copilot Studio – Citations displayed as raw JSON instead of clickable links

Sonalika 0 Reputation points
2026-08-14T11:05:00.9766667+00:00

Hi Microsoft Team,

I’m currently testing the Microsoft Learn MCP Server in Microsoft Copilot Studio. The agent is successfully retrieving accurate information from Microsoft Learn, so the MCP tool itself appears to be working correctly.

However, I’m facing an issue with how the citations/sources are displayed.

Instead of showing a clean, clickable Microsoft Learn source link, the citation is rendered as truncated raw JSON, for example:

{"results":[{"title":"Quickstart: Create an Azure Vir... 

The issue occurs in both:

  • The agent chat response/citation area
  • The Sources side panel

Because the source is displayed as raw JSON, users cannot click the citation and navigate to the actual Microsoft Learn documentation.

Expected behavior

The source should ideally be displayed as a readable citation, such as:

Quickstart: Create an Azure resource [Microsoft Learn documentation – clickable link]

Actual behavior

The citation appears as truncated JSON containing the MCP response structure instead of a formatted source/link.

I’m using the Microsoft Learn Docs MCP Server connected to Copilot Studio through the MCP connector.

Could someone please confirm:

  1. Is this a known issue/bug with the Microsoft Learn MCP connector or Copilot Studio citation rendering?
  2. Is there any configuration or connector setting required to make the returned source URLs render as clickable citations?
  3. Is this related to how the MCP server returns the results object, or is the issue specifically with Copilot Studio’s citation/source rendering?
  4. Is there a recommended workaround while this issue is being addressed?

I have attached screenshots showing the behavior in both the chat response and the Sources panel.

Thanks in advance for any guidance.Hi Microsoft Team,

I’m currently testing the Microsoft Learn MCP Server in Microsoft Copilot Studio. The agent is successfully retrieving accurate information from Microsoft Learn, so the MCP tool itself appears to be working correctly.

However, I’m facing an issue with how the citations/sources are displayed.

Instead of showing a clean, clickable Microsoft Learn source link, the citation is rendered as truncated raw JSON, for example:

{"results":[{"title":"Quickstart: Create an Azure Vir... 

The issue occurs in both:

  • The agent chat response/citation area
  • The Sources side panel

Because the source is displayed as raw JSON, users cannot click the citation and navigate to the actual Microsoft Learn documentation.

Expected behavior

The source should ideally be displayed as a readable citation, such as:

Quickstart: Create an Azure resource
[Microsoft Learn documentation – clickable link]

Actual behavior

The citation appears as truncated JSON containing the MCP response structure instead of a formatted source/link.

I’m using the Microsoft Learn Docs MCP Server connected to Copilot Studio through the MCP connector.

Could someone please confirm:

  1. Is this a known issue/bug with the Microsoft Learn MCP connector or Copilot Studio citation rendering?
  2. Is there any configuration or connector setting required to make the returned source URLs render as clickable citations?
  3. Is there a recommended workaround while this issue is being addressed?

User's image

I have attached screenshots showing the behavior in both the chat response and the Sources panel.

Thanks in advance for any guidance.

Microsoft Copilot | Microsoft 365 Copilot | Development
0 comments No comments

1 answer

Sort by: Most helpful
  1. AI answer

    2026-08-14T11:05:31.73+00:00

    This behavior matches a citation-mapping problem, not the expected clickable citation experience.

    For MCP or API-based content, clickable citations require the tool response to expose an end-user-openable URL and for Copilot to know where that URL is in the response. This is done through response_semantics, specifically:

    1. data_path must point to the correct array or object.
    2. properties must map the citation fields such as title, subtitle, and url.

    If this is skipped or misconfigured, Copilot can still show a citation, but it may only appear as a representative pill/icon instead of a clickable source. Missing or non-empty url values are a common reason citations are not clickable.

    Because the displayed source is truncated raw JSON like {"results":[{"title":..., the most likely issue is that Copilot is receiving the MCP payload as text instead of resolving the citable items correctly. The first checks are:

    1. Verify data_path points to the actual results node.
      • If the response shape is { "results": [ ... ] }, use $.results.
      • If the response is MCP-style nested like { "content": [ { "results": [ ... ] } ] }, use $.content[0].results.
      • If the MCP text field contains stringified JSON, confirm the parser is unwrapping it as expected.
    2. Verify each result item has a non-empty URL field.
      • If url is missing, the citation is not clickable.
      • Copilot can infer common aliases such as webUrl, href, or link when explicit mappings are absent.
    3. If explicit response_semantics is used, verify it is declared per function inside that function’s capabilities, not at the plugin root.
    4. Flatten the response if it contains deeply nested arrays.
      • The documented guidance is that multi-level nested arrays are more likely to fail silently.
    5. If the tool surface is dynamic, rely on the zero-config fallback only when the response uses recognized aliases such as:
      • results array: results, items, data
      • URL: url, webUrl, href, link
      • title: title, name
      • subtitle: subtitle, description, summary

    On the specific questions:

    1. It is not the documented expected behavior for a correctly mapped MCP citation. The documented behavior is clickable citations when an openable URL is returned and mapped correctly.
    2. Yes. The required configuration is response_semantics with the correct data_path and properties, unless the response shape is compatible with dynamic response semantics inference.
    3. It is most consistent with how the MCP response is being returned or mapped for citation extraction, especially if the results object is being surfaced as raw text instead of parsed citation items.
    4. Recommended workaround:
      • Return a flat results array.
      • Ensure each item includes a canonical source URL.
      • Add explicit response_semantics rather than relying on inference.
      • Avoid using an Adaptive Card unless a custom citation layout or extra actions are required; response semantics alone is sufficient for clickable citations.

    A practical validation path is:

    1. Capture the raw MCP JSON response.
    2. Confirm whether the citable items are in results or inside content[0].text as stringified JSON.
    3. Set data_path to the exact node containing the citation items.
    4. Map title and url explicitly.
    5. Retest and confirm the Sources panel shows the document title instead of the raw JSON blob.

    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.