<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Azure on Luiz Bon</title>
    <link>https://luizbon.com/tags/azure/</link>
    <description>Recent content in Azure on Luiz Bon</description>
    <generator>Hugo -- 0.165.0</generator>
    <language>en-AU</language>
    <copyright>Luiz Bon</copyright>
    <lastBuildDate>Sun, 30 Aug 2026 18:50:15 +1000</lastBuildDate>
    <atom:link href="https://luizbon.com/tags/azure/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to Set Up an MCP Registry for GitHub Copilot</title>
      <link>https://luizbon.com/blog/how-to-set-up-an-mcp-registry-for-github-copilot/</link>
      <pubDate>Mon, 13 Oct 2025 11:15:28 +0000</pubDate>
      <guid>https://luizbon.com/blog/how-to-set-up-an-mcp-registry-for-github-copilot/</guid>
      <description>A step-by-step guide to standing up an MCP Registry with Azure API Center so GitHub Copilot can only reach approved MCP servers.</description>
      <content:encoded><![CDATA[<h2 id="introduction">Introduction</h2>
<p>As organizations adopt AI-powered development tools like GitHub Copilot, maintaining security and governance becomes increasingly critical. The Model Context Protocol (MCP) enables Copilot to connect with external tools and data sources, but without proper controls, this connectivity can pose security risks. <strong>An MCP Registry provides enterprises with centralized control over which MCP servers and APIs their developers can access</strong>, ensuring that sensitive data and systems remain protected while still leveraging AI capabilities.</p>
<p>By implementing an MCP Registry, organizations can:</p>
<ul>
<li><strong>Control access</strong>: Restrict Copilot to only approved, vetted MCP servers</li>
<li><strong>Maintain compliance</strong>: Ensure all AI-enhanced development activities align with security policies</li>
<li><strong>Monitor usage</strong>: Track which APIs and tools are being accessed through Copilot</li>
<li><strong>Protect sensitive data</strong>: Prevent accidental exposure of proprietary APIs or internal systems</li>
</ul>
<p>In this guide, we&rsquo;ll walk through setting up an MCP Registry using Azure API Center and configuring GitHub Copilot to use it, giving your organization the security controls needed for safe AI-assisted development.</p>
<h2 id="part-1-set-up-an-mcp-registry-with-azure-api-center">Part 1: Set Up an MCP Registry with Azure API Center</h2>
<p>First, we&rsquo;ll follow the steps outlined in the <a href="https://learn.microsoft.com/en-us/azure/api-center/register-discover-mcp-server">official Microsoft documentation</a> to create an MCP-compatible API registry. This involves using Azure API Center, which can serve as a fully-featured MCP server.</p>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li><strong>An Azure subscription</strong> with contributor-level access or higher. If you don&rsquo;t have one, you can <a href="https://azure.microsoft.com/free/">create a free account</a> which includes $200 in credits for 30 days.</li>
<li><strong>Permissions to create resources</strong> in your Azure subscription, specifically the ability to create Azure API Center instances in your chosen resource group.</li>
<li><strong>Basic familiarity with the Azure Portal</strong> and navigating Azure resource management interfaces.</li>
<li><strong>(Optional) Azure CLI installed</strong> for automation or scripting purposes. You can install it following the <a href="https://learn.microsoft.com/en-us/cli/azure/install-azure-cli">official guide</a>.</li>
</ul>
<p><strong>Estimated time to complete:</strong> 15-20 minutes</p>
<h3 id="steps">Steps</h3>
<ol>
<li>
<p><strong>Create an Azure API Center</strong>:</p>
<ul>
<li>Navigate to the Azure portal and search for &ldquo;API Center&rdquo;.</li>
<li>Click &ldquo;Create&rdquo; and fill in the required details for your new API Center instance.</li>
</ul>
</li>
<li>
<p><strong>Register MCP Servers</strong>:</p>
<ul>
<li>Once your API Center is deployed, you can start registering your existing MCP-compliant servers.</li>
</ul>
</li>
<li>
<p><strong>Enable API Center Portal</strong>:</p>
<ul>
<li>Under the &ldquo;API Center Portal&rdquo; &gt; &ldquo;Settings&rdquo; section, enable the portal. This will not only allow you to manage and view your registered MCP servers through a user-friendly interface, but also ensure that the MCP endpoint is properly configured and accessible.</li>
<li>In the Visibility section, check the option &ldquo;Allow &ldquo;anonymous&rdquo; access&rdquo;, otherwise GitHub Copilot won&rsquo;t be able to access the MCP registry.</li>
</ul>
</li>
<li>
<p><strong>Expose the MCP Endpoint</strong>:</p>
<ul>
<li>Azure API Center automatically provides an MCP-compatible endpoint. You can find this endpoint URL in the API Center&rsquo;s overview page in the Azure portal. It will look something like this: <code>https://&lt;your-api-center-name&gt;.data.&lt;location&gt;.azure-apicenter.ms/workspaces/default</code>.</li>
</ul>
</li>
</ol>
<p>By the end of this part, you will have a functional MCP server URL ready to be used by clients like GitHub Copilot.</p>
<h2 id="part-2-register-the-mcp-registry-in-github-copilot">Part 2: Register the MCP Registry in GitHub Copilot</h2>
<p>Now that you have your MCP server, you need to configure GitHub Copilot to use it. This is done by defining MCP Server access in your GitHub organization or enterprise settings, as detailed in the <a href="https://docs.github.com/en/copilot/how-tos/administer-copilot/configure-mcp-server-access">GitHub documentation</a>.</p>
<h3 id="prerequisites-1">Prerequisites</h3>
<p>Before configuring GitHub Copilot, verify you have:</p>
<ul>
<li><strong>Organization owner or enterprise administrator role</strong> in your GitHub organization. If you&rsquo;re unsure of your role, check your organization&rsquo;s &ldquo;People&rdquo; settings.</li>
<li><strong>GitHub Copilot Business or Enterprise subscription</strong> active for your organization. GitHub Copilot Individual subscriptions do not support MCP registry configuration.</li>
<li><strong>The MCP endpoint URL</strong> from Part 1 (format: <code>https://&lt;your-api-center-name&gt;.data.&lt;location&gt;.azure-apicenter.ms/workspaces/default</code>).</li>
<li><strong>Access to your GitHub organization settings</strong>, specifically the &ldquo;Copilot&rdquo; section under organization settings.</li>
</ul>
<p><strong>Note:</strong> Changes to MCP server policies may take up to 15 minutes to propagate to all users in your organization.</p>
<p><strong>Estimated time to complete:</strong> 5-10 minutes</p>
<h3 id="steps-1">Steps</h3>
<ol>
<li>
<p><strong>MCP servers policy</strong>:</p>
<ul>
<li>Setup MCP servers policy to <strong>Enabled</strong></li>
</ul>
</li>
<li>
<p><strong>MCP Registry URL</strong>:
The MCP Registry URL is an optional field.</p>
<ul>
<li>You can enter the MCP endpoint URL you obtained from your Azure API Center in Part 1.</li>
</ul>
</li>
<li>
<p><strong>Restrict MCP access to registry servers</strong>:</p>
<ul>
<li>Set this to <strong>Registry only</strong> to ensure that Copilot only accesses the APIs you have registered.</li>
</ul>
</li>
</ol>
<h2 id="conclusion">Conclusion</h2>
<p>You&rsquo;ve now successfully set up an MCP Registry using Azure API Center and integrated it with GitHub Copilot. Your developers can now leverage your organization&rsquo;s API definitions directly in their coding environment.</p>
<h3 id="next-steps">Next Steps</h3>
<ul>
<li>Register additional APIs in your API Center</li>
<li>Create documentation for your team on using the MCP-enhanced Copilot</li>
<li>Set up monitoring and analytics for API discovery usage</li>
<li>Explore advanced MCP features like custom tools and prompts</li>
</ul>
<h2 id="additional-resources">Additional Resources</h2>
<ul>
<li><a href="https://learn.microsoft.com/azure/api-center/">Azure API Center Documentation</a></li>
<li><a href="https://spec.modelcontextprotocol.io/">Model Context Protocol Specification</a></li>
<li><a href="https://docs.github.com/copilot">GitHub Copilot MCP Integration</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Lessons learned from a conference ChatBot</title>
      <link>https://luizbon.com/blog/lessons-learned-from-a-conference-chatbot/</link>
      <pubDate>Sat, 02 Sep 2017 19:45:24 +1000</pubDate>
      <guid>https://luizbon.com/blog/lessons-learned-from-a-conference-chatbot/</guid>
      <description>What I learned building a conference chatbot for NDC Sydney with adaptive cards, QnAMaker, and Bing search as a fallback.</description>
      <content:encoded><![CDATA[<p>This year I worked as a volunteer at <a href="https://ndcsydney.com/">NDC Sydney</a>, and since I was involved with it, I decided to write a Bot to help attendees find sessions.</p>
<p>The ChatBot started simple answering questions related to sessions and speakers. It returns an <a href="http://adaptivecards.io/">adaptive card</a> with all information about each session.</p>
<p>Having all sessions wasn&rsquo;t enough, so I added integration with <a href="https://qnamaker.ai/">QnAMaker</a>, just in case a user asks about something not related to the sessions.</p>
<p>At this point, I wasn&rsquo;t happy yet, so I went one step further and added integration with <a href="https://azure.microsoft.com/en-us/services/cognitive-services/bing-web-search-api/">Bing search</a> to make sure the user will always receive an answer.</p>
<p>So far so good, what can go wrong? I was using adaptive cards, the content looked great, all information was there, I was covering FAQs and a fallback to Bing search.</p>
<p>Before the conference starts, I asked my colleagues to test the Bot, is always good to ask someone else test your code. The testing data improved the LUIS model, and answers get better.</p>
<p>That&rsquo;s when I started to realise that I needed to improve some things. The first one was the responsiveness. Yes, a ChatBot needs to be responsive. It needs to work on desktop and mobile since I wasn&rsquo;t integrating with any app, the web interface required to be responsive.</p>
<p><em>So first tip</em>: <strong>A ChatBot will not save you from the multi resolution devices issue, it is a lot simpler to solve though.</strong></p>
<p>With the responsiveness solved, I figured out another problem. The conference agenda has changed. Yes, this is an issue, cause I decided to use a local JSON file with all the data, this means I needed to check the whole agenda and update my file, luckily it didn&rsquo;t change much, and it was easy to update.</p>
<p>At this point, I was pretty confident with the Bot, from all the feedback I received from my colleagues the major ones were easy to fix, and others were just a case to train the <a href="https://www.luis.ai/">LUIS</a> model. So I started to make improvements and have better cards which show more data from the speaker.</p>
<p>When the conference started, and I was happy with the usage, till I find the first issue. The agenda has changed again. I just figured out when an attendee came to me asking about a session supposed to be in a room but was a different one. I promptly checked with the bot and the data was matching with his printed agenda, but after checking the website, I realised it was wrong again. At this point how do I update the agenda without a laptop? No luck here, I tried to stop thinking about it and enjoyed the conference. We can&rsquo;t win all the time.</p>
<p>On the next day, I was free in the morning, so I brought my laptop and updated the agenda quickly, that&rsquo;s when I realised that having too much data from a session wasn&rsquo;t working well, sometimes the results weren&rsquo;t displaying correctly.</p>
<p><em>Here it comes the next tip</em>: <strong>When showing multiple results, make sure they all have similar content.</strong></p>
<p>This day I missed the first session working on the result cards and added another result view based on the speaker. With the new cards, the result was consistent, and the user could click on a button to show extra information.</p>
<p>Overall the experience was positive, and I&rsquo;ll do it again, with some different decisions.</p>
<p><em>And one last tip</em>: <strong>A conference agenda is always changing, so is the website does not use an API, make sure you have an easy way to update your data.</strong></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
