biz-mcp
Deploys the MCP server as an AWS Lambda function behind a Lambda Function URL, using the streamable HTTP transport.
Click on "Deploy 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., "@biz-mcpwhat's the current USD to EUR exchange rate?"
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.
biz-mcp
A custom MCP (Model Context Protocol) server with 7 tools that connect to an LLM/MCP client. It combines:
2 external API wrappers - live FX rates (ECB/Frankfurter) and crypto prices (CoinGecko), both free and key-less.
2 database operations - a key-value store backed by DynamoDB on AWS (falls back to a local JSON file for development).
3 business-logic tools - invoice calculation, shipping estimation, and inventory-status assessment.
It runs on AWS Lambda behind a Lambda Function URL using the modern streamable HTTP MCP transport. The same code runs locally over stdio (for Claude Desktop) or streamable HTTP.
Tools
Name | Category | Description |
| External API | ECB reference-rate FX conversion (frankfurter.app, no key) |
| External API | Current crypto price (CoinGecko public API, no key) |
| Database | Put an arbitrary JSON object under |
| Database | Read a JSON object under |
| Business logic | Subtotal / discount / tax / total from line items |
| Business logic | Shipping cost from weight, distance and zone |
| Business logic | Reads a record and classifies stock as in_stock / low_stock / out_of_stock |
Related MCP server: Atlas MCP Server
Architecture
MCP client (Claude Desktop, Cursor, mcp inspector)
│ streamable HTTP (POST JSON-RPC / SSE)
▼
Lambda Function URL ──► lambda_function.py (protocol adapter)
│
▼
mcp_server.py (FastMCP, 7 tools)
├── apis.py → frankfurter.app, CoinGecko
├── db.py → DynamoDB (or local JSON)
└── business.py → invoice, shipping, inventoryProject layout
apis.py External API wrappers
business.py Pure business logic
db.py Key-value store (DynamoDB or local JSON)
mcp_server.py FastMCP server defining the 7 tools
lambda_function.py Streamable-HTTP JSON-RPC adapter for Lambda
template.yaml SAM template (Lambda + Function URL + DynamoDB)
deploy.ps1 One-command deployment for Windows
tests/ pytest suite (unit + lambda handler + stdio E2E)Local setup
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements-dev.txtCheck the tests
pytestRun locally
stdio (default, for Claude Desktop and the inspector):
python mcp_server.pystreamable HTTP (for browsers / HTTP clients):
python mcp_server.py --transport http
# serves at http://127.0.0.1:8000/mcpTry it with the MCP Inspector
npx @modelcontextprotocol/inspector python mcp_server.pyDeploy to AWS Lambda
Prerequisites: AWS CLI (aws configure) and SAM CLI.
.\deploy.ps1The script builds dependencies (build_deps.ps1), packages the template, and creates/updates the stack. sam deploy/sam package creates:
a Lambda function (
biz-mcp) with the Python 3.12 runtime,a Lambda Function URL (public, HTTPS,
AuthType: NONE) with permissive CORS,a DynamoDB table (
biz-mcp-store,pk/skcomposite key, on-demand capacity) plus the IAM policy so the Lambda can access it,Lambda
url:InvokeandFunction:Invokepermissions (both are required since Oct 2025 for Function URLs withAuthType: NONE).
Notes on the deploy path:
FunctionUrl.Cors.AllowMethodsdoes not acceptOPTIONS(supported enum:GET | PUT | HEAD | POST | PATCH | DELETE | *). Omit it; Lambda handles preflight automatically.Deployment uses
sam package+aws cloudformation create-stack/update-stackdirectly rather than a changeset, because the CloudFormationAWS::EarlyValidation::PropertyValidationhook (Nov 2025) can spuriously fail changeset creation.sam buildis not run on Windows; dependencies are built intobuild/mcp.zipbybuild_deps.ps1viauv.
Manual equivalents:
.\build_deps.ps1 # build build/mcp.zip
sam package --template-file template.yaml --resolve-s3 --output-template-file packaged.yaml
aws cloudformation create-stack --stack-name biz-mcp --template-body file://packaged.yaml `
--capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPANDPoint an MCP client at it
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"biz-mcp": {
"type": "http",
"url": "https://YOUR_ENDPOINT/"
}
}
}The MCP Inspector also accepts an HTTP server URL directly.
Run the bundled agent (free Groq brain)
agent/agent.py is a ready-made agent that connects to the MCP endpoint and uses a
free-tier Groq model to drive the 7 tools with native function calling.
# use the project venv so openai/mcp deps don't clash with other Python installs
& "C:\Users\lenovo\AppData\Local\Programs\Python\Python312\python.exe" -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r agent/requirements.txt
# get a free key once at https://console.groq.com/keys
setx GROQ_API_KEY "gsk_..."
python agent/agent.py --url https://YOUR_ENDPOINT/
# or a one-shot question:
python agent/agent.py --url https://YOUR_ENDPOINT/ `
--question "Convert 250 USD to EUR, then save it as pk=1201 sk=usd-eur"The agent lists the MCP tools, then chains tool calls until it can answer (it can
save/read records in DynamoDB, check inventory, price orders and shipping, and pull
live FX/crypto rates). Check the current free model id with GET /openai/v1/models
and pass it via --model if the default is unavailable.
Smoke test without a client
curl -s -X POST https://YOUR_ENDPOINT/ `
-H "Content-Type: application/json" `
-H "Accept: application/json, text/event-stream" `
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}'tools/list will return the 7 tools:
curl -s -X POST https://YOUR_ENDPOINT/ `
-H "Content-Type: application/json" `
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'How the transport works
lambda_function.py implements the MCP streamable HTTP protocol directly on Lambda:
POSTwith a JSON-RPC body; notifications return202, requests return200.If the client sends
Accept: application/jsonit receives a single JSON-RPC response.If the client sends
Accept: text/event-streamit receives the same response wrapped in one SSEmessageevent, so streaming-capable clients work without requiring API Gateway's response-streaming features.OPTIONSpreflight plus plain API-Gateway v1/v2 proxy and Lambda-Function-URL events are handled by the same normalizer.
No long-lived connections are needed, which is exactly what makes this Lambda-friendly.
Security notes (read before going public)
The Function URL is
AuthType: NONE, meaning anyone with the URL can invoke the Lambda.Each public call invokes billing and lets anyone read/write the DynamoDB table.
For production: set
AuthType: AWS_IAMand use a SigV4-signed MCP client, add request throttling, or front the URL with WAF. The tools also accept arbitrarypk/sk, so add an authorization layer (e.g. per-tenant key prefix) if the data is sensitive.CoinGecko and Frankfurter free tiers have rate limits; failures surface as tool errors.
Customization
Add tools: define a function in
mcp_server.pywith the@mcp.tool()decorator and a docstring; the JSON schema is generated automatically. Rebuild/sam deployto publish.Note:
mcpis pinned to>=1.30,<2because mcp 2.x hard-depends onpywin32on Windows, which breakssam buildon Windows hosts. The API used here is identical in v2 (just importMCPServerinstead ofFastMCP).Swap the store: keep
db.py's interface (save_item,get_item,list_items) and implement a new backend (e.g. RDS, S3).Switch transport: the built-in
mcp.run(transport="streamable-http")path runs the same tools as a plain web server if you ever move to EC2 instead.
This server cannot be deployed
Maintenance
Related MCP Connectors
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA production-grade MCP server and CLI tool that enables AI agents to manage Shopify stores through 49 built-in tools across products, orders, inventory, and analytics. It supports natural language workflows for tasks like inventory tracking, customer support, and sales reporting.93 npm18MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents and users to manage workspace files, monitor system metrics, take persistent notes, and retrieve weather data via MCP tools and resources.-
- AlicenseNot gradedqualityBmaintenanceExposes 20 deterministic tools for finance, data, content, and lifestyle tasks via MCP, A2A, and REST interfaces, enabling automation and multi-agent workflows.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to discover and create agents, durably submit messages with verifiable replies, and search source-linked local memory. Exposes eight authenticated tools with owner-approved OAuth, transcript-backed verification, and explicit control over history import and embedding.MIT