Python
FreeNot checkedMCP server deployed on Azure Functions that provides a LearnAgent tool to search and retrieve Microsoft Learn documentation.
About
MCP server deployed on Azure Functions that provides a LearnAgent tool to search and retrieve Microsoft Learn documentation.
README
MCP (Model Context Protocol) server deployed on Azure Functions that exposes a LearnAgent tool: any MCP-compatible client (Claude Code, VS Code, custom agents) can call it to search and retrieve official Microsoft Learn documentation in real time.
Built with Azure AI Foundry as the LLM backend. Two components:
agent_client.py— local agent that queries Microsoft Learn docs via MCPserver/— MCP server deployed on Azure Functions, exposes aLearnAgenttool
Consuming the deployed MCP server
Endpoint:
https://azure-function-jnb-agents.azurewebsites.net/runtime/webhooks/mcp
Transport: Streamable HTTP (MCP protocol 2025-03-26)
Auth: Azure Functions system key in header:
x-functions-key: <mcp_extension_key>
Get the key:
az functionapp keys list \
--name azure-function-jnb-agents \
--resource-group NovilloBenitoJaime \
--query systemKeys.mcp_extension -o tsv
Available tool
| Tool | Input | Description |
|---|---|---|
LearnAgent |
query (string, required) |
Searches and retrieves official Microsoft Learn documentation |
Example — Python client
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
import asyncio
KEY = "<mcp_extension_key>"
URL = "https://azure-function-jnb-agents.azurewebsites.net/runtime/webhooks/mcp"
async def main():
async with streamablehttp_client(URL, headers={"x-functions-key": KEY}) as (r, w, _):
async with ClientSession(r, w) as session:
await session.initialize()
result = await session.call_tool("LearnAgent", {"query": "How to deploy Azure Container Apps?"})
print(result.content[0].text)
asyncio.run(main())
Install: pip install mcp
Example — VS Code / Claude Code (mcp.json)
{
"mcpServers": {
"LearnAgent": {
"url": "https://azure-function-jnb-agents.azurewebsites.net/runtime/webhooks/mcp",
"headers": {
"x-functions-key": "<mcp_extension_key>"
}
}
}
}
Example — curl (raw JSON-RPC)
KEY="<mcp_extension_key>"
# Initialize
curl -X POST https://azure-function-jnb-agents.azurewebsites.net/runtime/webhooks/mcp \
-H "Content-Type: application/json" \
-H "x-functions-key: $KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
# Call tool
curl -X POST https://azure-function-jnb-agents.azurewebsites.net/runtime/webhooks/mcp \
-H "Content-Type: application/json" \
-H "x-functions-key: $KEY" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"LearnAgent","arguments":{"query":"Azure Blob Storage Python quickstart"}}}'
Local agent (agent_client.py)
Connects to https://learn.microsoft.com/api/mcp directly and uses Azure AI Foundry as LLM.
Requirements: Python 3.9+, az login
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
Create .env:
FOUNDRY_PROJECT_ENDPOINT=https://<resource>.services.ai.azure.com/api/projects/<project>
FOUNDRY_MODEL=gpt-4o-mini
python agent_client.py
Deploying the server
cd server
# Edit requirements.txt if needed
Compress-Archive -Path function_app.py,host.json,requirements.txt -DestinationPath deploy.zip -Force
az functionapp deployment source config-zip \
--name azure-function-jnb-agents \
--resource-group NovilloBenitoJaime \
--src deploy.zip --build-remote true
Required app settings on the Function App:
| Setting | Value |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
Azure AI Foundry project endpoint |
FOUNDRY_MODEL |
Model deployment name |
The Function App needs System Assigned Managed Identity with Azure AI Developer role on the Foundry resource.
Stack
| Component | Package |
|---|---|
| MCP transport | mcp>=1.9.0 |
| Agent orchestration | agent-framework>=1.8.1 |
| Azure Functions hosting | agent-framework-azurefunctions==1.0.0b260521 |
| Azure AI Foundry LLM | agent-framework-foundry |
| Azure auth | azure-identity |
Installing Python
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/ByTermi/MCP_PythonFAQ
Is Python MCP free?
Yes, Python MCP is free — one-click install via Unyly at no cost.
Does Python need an API key?
No, Python runs without API keys or environment variables.
Is Python hosted or self-hosted?
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
How do I install Python in Claude Desktop, Claude Code or Cursor?
Open Python on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Python with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
