Skip to main content
Glama
kathirt

Azure APIM + MCP Server Demo

by kathirt

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                  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Related MCP server: Secure Remote MCP Server

πŸ“¦ 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 catalog

    • get_product_by_id - Get product details by ID

    • search_products - Search products by query string

    • get_orders - List all orders

    • create_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

https://apimmcp-api-dev.azurewebsites.net/

Backend root

https://apimmcp-api-dev.azurewebsites.net/api/health

Health check

https://apimmcp-api-dev.azurewebsites.net/api/products

Products REST API

https://apimmcp-api-dev.azurewebsites.net/api/orders

Orders REST API

https://apimmcp-api-dev.azurewebsites.net/api/mcp

MCP endpoint (direct)

https://apimmcp-apim-dev.azure-api.net/mcp

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 eastus

2. 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 build

4. 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 zip

5. 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.ps1

Expected 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 dev

The 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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.

  • Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.

  • Discover and call 10,000+ production APIs from one MCP server. Pay-per-call billing for AI agents.

  • Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    A Model Context Protocol server that exposes over 200+ APIs from API.market as MCP resources, allowing large language models to discover and interact with various APIs through natural language commands.
    34
    83
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides standardized MCP interfaces for Azure services including Cosmos DB operations (container and item management) and AI Search operations (index management), deployed through Azure API Management gateway.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Model Context Protocol (MCP) server for Microsoft Dynamics 365 Business Central. Provides AI assistants with direct access to Business Central data through properly formatted API v2.0 calls.
    6
    30
    8
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kathirt/APIM-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server