Skip to content

Vikaskkg/MCP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Book4Time MCP Server — Azure Function App

File structure

mcp_azure/
├── function_app.py                # Azure Function entry point + HTTP trigger
├── mcp_server.py                  # FastMCP server + product tool
├── requirements.txt               # Python dependencies
├── host.json                      # Azure Functions host config
├── local.settings.json.template   # Copy → local.settings.json for local dev
└── README.md

How it works

  1. MCP client (e.g. Claude Desktop) sends a JSON-RPC POST to your Azure Function URL.
  2. function_app.py catches the request via the mcp/{*path} HTTP trigger.
  3. The request is forwarded into FastMCP's Streamable HTTP ASGI app.
  4. FastMCP routes it to the product tool in mcp_server.py.
  5. The tool calls the Book4Time API with your credentials from App Settings.
  6. The JSON response travels back up the chain to the MCP client.

Local development

# 1. Install dependencies
pip install -r requirements.txt

# 2. Configure secrets
cp local.settings.json.template local.settings.json
# Edit local.settings.json — fill in BOOK4TIME_API_TOKEN and BOOK4TIME_ACCOUNT_TOKEN

# 3. Start the Functions runtime
func start

The MCP endpoint will be at:

http://localhost:7071/api/mcp

Deploy to Azure

# 1. Create resource group and Function App (one-time)
az group create --name rg-book4time-mcp --location uksouth

az functionapp create \
  --resource-group rg-book4time-mcp \
  --consumption-plan-location uksouth \
  --runtime python \
  --runtime-version 3.11 \
  --functions-version 4 \
  --name <YOUR_APP_NAME> \
  --storage-account <YOUR_STORAGE_ACCOUNT>

# 2. Set the API tokens as App Settings (not in code)
az functionapp config appsettings set \
  --name <YOUR_APP_NAME> \
  --resource-group rg-book4time-mcp \
  --settings \
    BOOK4TIME_API_TOKEN="your_real_api_token" \
    BOOK4TIME_ACCOUNT_TOKEN="your_real_account_token"

# 3. Deploy the code
func azure functionapp publish <YOUR_APP_NAME>

The live MCP endpoint will be:

https://<YOUR_APP_NAME>.azurewebsites.net/api/mcp

Connect from Claude Desktop

In claude_desktop_config.json:

{
  "mcpServers": {
    "book4time": {
      "url": "https://<YOUR_APP_NAME>.azurewebsites.net/api/mcp?code=<FUNCTION_KEY>"
    }
  }
}

Get your function key from the Azure Portal → Function App → App keys.

Adding more tools

Add new @mcp.tool() functions to mcp_server.py — they are automatically discovered and registered. No changes needed in function_app.py.

@mcp.tool()
async def bookings(location_id: str = "11506000") -> dict:
    """Fetch bookings from Book4Time."""
    ...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages