Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Azure APIM + MCP Server Demosearch for 'smart' products and list all current orders"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Azure APIM + MCP Server Demo
This project demonstrates how to expose backend APIs through Azure API Management (APIM) as a Model Context Protocol (MCP) Server, enabling AI assistants and tools to interact with your APIs using the standardized MCP protocol.
ποΈ Architecture
ββββββββββββββββββββ βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ
β MCP Client ββββββΆβ Azure API Management ββββββΆβ Azure App Service β
β (AI Assistant) β β (Gateway) β β (Express.js API) β
ββββββββββββββββββββ βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ
β β β
β MCP Protocol β Subscription Key β REST API
β (JSON-RPC 2.0) β Rate Limiting β Products/Orders
β β Monitoring β
βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββπ¦ Components
Backend API (backend-api/)
Express.js application with TypeScript
REST API endpoints for products and orders
MCP JSON-RPC endpoint handler
5 MCP tools:
get_products- List all products in the catalogget_product_by_id- Get product details by IDsearch_products- Search products by query stringget_orders- List all orderscreate_order- Create a new order
Infrastructure (infrastructure/)
Bicep templates for Azure deployment
Azure App Service (Linux, Node.js 20 LTS, B1 Basic)
Azure API Management (Developer SKU)
Application Insights for monitoring
Log Analytics workspace
π Endpoints
Endpoint | Description |
| Backend root |
| Health check |
| Products REST API |
| Orders REST API |
| MCP endpoint (direct) |
| MCP endpoint (via APIM) β |
π‘ MCP Protocol
The server implements the Model Context Protocol (version 2024-11-05):
Initialize
{
"jsonrpc": "2.0",
"method": "initialize",
"id": 1,
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "client", "version": "1.0.0" }
}
}List Tools
{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 2
}Call Tool
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 3,
"params": {
"name": "get_products"
}
}Example: Search Products
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 4,
"params": {
"name": "search_products",
"arguments": { "query": "smart" }
}
}Example: Create Order
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 5,
"params": {
"name": "create_order",
"arguments": { "productId": "prod-001", "quantity": 2 }
}
}π Deployment
Prerequisites
Azure CLI installed and logged in
Azure subscription
Node.js 18+ installed locally
1. Create Resource Group
az group create --name apim-mcp-demo-rg --location eastus2. Deploy Infrastructure
az deployment group create `
--resource-group apim-mcp-demo-rg `
--template-file ./infrastructure/main-appservice.bicep `
--parameters location=eastus namePrefix=apimmcp environment=dev apimPublisherEmail="your-email@example.com"β οΈ Note: APIM provisioning takes 15-30 minutes on first deployment.
3. Build Backend API
cd backend-api
npm install
npm run build4. Deploy Backend API
Compress-Archive -Path "dist\*", "package.json", "web.config", "node_modules" -DestinationPath "deploy.zip" -Force
az webapp deploy --resource-group apim-mcp-demo-rg --name apimmcp-api-dev --src-path deploy.zip --type zip5. Get APIM Subscription Key
az rest --method post `
--uri "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/apim-mcp-demo-rg/providers/Microsoft.ApiManagement/service/apimmcp-apim-dev/subscriptions/mcp-subscription/listSecrets?api-version=2022-08-01" `
--query "primaryKey" -o tsvπ§ͺ Testing
Run Test Script
.\test-mcp.ps1Expected Output
========================================
MCP Server Test Suite
========================================
Endpoint: https://apimmcp-apim-dev.azure-api.net/mcp
1. Testing initialize...
Server: azure-product-catalog-server v1.0.0
Protocol: 2024-11-05
2. Testing tools/list...
Found 5 tools:
- get_products: Retrieve a list of all products in the catalog
- get_product_by_id: Get details of a specific product by its ID
...
3. Testing tools/call (get_products)...
Found 8 products:
- Widget Pro: $29.99
- Gadget Plus: $49.99
...Manual Testing
$headers = @{
"Ocp-Apim-Subscription-Key" = "YOUR_SUBSCRIPTION_KEY"
"Content-Type" = "application/json"
}
$body = '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
Invoke-RestMethod -Uri "https://apimmcp-apim-dev.azure-api.net/mcp" -Method POST -Headers $headers -Body $bodyπ οΈ Development
Local Development
cd backend-api
npm install
npm run devThe server will start on http://localhost:3000.
Project Structure
APIM-MCP/
βββ backend-api/
β βββ src/
β β βββ index.ts # Express server entry
β β βββ routes.ts # REST API routes
β β βββ mcp.ts # MCP endpoint handler
β β βββ data.ts # Mock data store
β βββ dist/ # Compiled JavaScript
β βββ package.json
β βββ tsconfig.json
β βββ web.config # IIS configuration for Azure
βββ infrastructure/
β βββ main-appservice.bicep # Azure resources
βββ test-mcp.ps1 # Test script
βββ README.mdπ§ Configuration
APIM Settings
Subscription Required: Yes
Rate Limiting: Configurable via APIM policies
Authentication: Subscription key header (
Ocp-Apim-Subscription-Key)
App Service Settings
SKU: B1 Basic (Linux)
Node Version: 20 LTS
Startup Command:
node index.js
π Monitoring
Application Insights integrated with both App Service and APIM
Access logs in Log Analytics workspace
Health endpoint available at
/api/health
π Resources
π License
MIT
This server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.