MS Learn MCP in Copilot Studio - citations show as raw JSON, not clickable

Rajesh Alda 125 Reputation points
2026-07-21T06:01:27.55+00:00

Testing the Microsoft Learn MCP connector in Copilot Studio. The agent responses are accurate, but citations/sources are broken — instead of a clean clickable link, they render as truncated raw JSON like:

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

This happens in the chat bubbles and in the Sources side panel too (screenshots attached). No way to click through to the actual doc.

Anyone else seeing this? Is it a known bug with how the MCP server returns citation data, or a Copilot Studio rendering issue?
Screenshot 2026-07-15 113052

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

1 answer

Sort by: Oldest
  1. AI answer

    2026-07-21T06:01:59.0733333+00:00

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

    For MCP or API-based content, clickable citations require:

    1. The tool response to include an end-user-openable URL.
    2. response_semantics in the plugin definition to tell Copilot where the citable items are in the JSON (data_path).
    3. Property mappings for each item, especially title and url.

    If that mapping is missing or incorrect, Copilot can still show a citation, but only as a representative pill or icon instead of a clickable source. A missing url also makes the citation non-clickable.

    The raw JSON showing up in the citation area strongly suggests Copilot is not resolving the returned payload into citation fields correctly. The most likely checks are:

    1. Verify response_semantics is declared on the specific function inside that function’s capabilities, not at the plugin root.
    2. Verify data_path matches the actual MCP JSON shape.
      • If the response is { "results": [ ... ] }, use $.results.
      • If the MCP response is raw stringified JSON inside content[0].text, parse that shape and use the correct root or inner array path.
    3. Verify each result item has a non-empty url field that points to a canonical, user-openable Microsoft Learn page.
    4. If the response is deeply nested, flatten it to a single results: [...] array where possible.
    5. For MCP tools, confirm the text field inside TextContentBlock is valid JSON.

    A minimal expected pattern is:

    • tool returns JSON with items containing title and url
    • response_semantics.properties maps those fields
    • data_path selects the result items

    If the Learn MCP connector is returning stringified JSON like {"results":[...]} and Copilot Studio is rendering that literal payload as the citation label, that indicates the citation contract is not being interpreted correctly for that function.

    To troubleshoot in Copilot Studio:

    1. Enable developer mode with -developer on.
    2. Run the prompt again.
    3. Inspect the debug information card and confirm the MCP tool is invoked.
    4. Compare the raw tool payload with the configured data_path and property mappings.

    Based on the documented behavior, this is not the intended citation UX. The supported behavior is clickable citations when the MCP response includes openable URLs and the function-level response_semantics is configured correctly.


    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.