Python-based MCP stdio proxy for Microsoft Dynamics 365 Business Central
Project description
Business Central MCP Proxy (Python)
⚠️ Experimental Tool - Not for Production Use
This tool is for experimentation only and is not intended for production use. It allows you to connect Cursor, VS Code, Claude Desktop, or other MCP-compatible clients to a Business Central Model Context Protocol (MCP) server.
Overview
The BC MCP Proxy acts as a bridge between MCP-compatible clients (like Cursor, VS Code, Claude Desktop) and Business Central, enabling natural language interactions with your Business Central data and operations. This Python implementation is published as bc-mcp-proxy on PyPI.
Why a Python Version?
This Python implementation was created to provide a simpler, cross-platform alternative to the .NET version. Key differences:
- Easier Installation: Install directly from PyPI with a single command (
pip install bc-mcp-proxy), no need to build or download executables - Cross-Platform: Works on Windows, macOS, and Linux without platform-specific builds
- Unified Setup: Interactive setup command (
python3 -m bc_mcp_proxy setupon macOS/Linux,python -m bc_mcp_proxy setupon Windows) handles configuration, authentication, and generates client configs automatically - Better IDE Integration: Works seamlessly with Cursor, VS Code, and other MCP clients that expect Python-based tools
- Same Functionality: Provides the same MCP proxy capabilities as the .NET version, connecting stdio-based MCP clients to Business Central's MCP HTTP endpoint
Both versions provide the same core functionality—choose the Python version if you prefer easier installation and cross-platform support, or the .NET version if you prefer a compiled executable.
Prerequisites
- Microsoft Dynamics 365 Business Central environment with MCP preview feature enabled
- Azure tenant with appropriate permissions
- Python 3.10 or later
- MCP-compatible client (Cursor, VS Code, Claude Desktop, etc.)
Setup Instructions
1. Set-up Azure AD App Registration
-
Open ms.portal.azure.com
-
Navigate to Microsoft Entra ID and create a new App Registration
-
In the Authentication section, add the desktop app Redirect URL in the format:
ms-appx-web://Microsoft.AAD.BrokerPlugin/<clientID>Also enable "Allow public client flows" under the Authentication section.
-
Add the following API permissions:
Required permissions:
- Dynamics 365 Business Central (2)
Financials.ReadWrite.All(Delegated)user_impersonation(Delegated)
- Dynamics 365 Business Central (2)
2. Install and Configure the Proxy
-
Install Python 3.10+ from python.org if not already installed.
-
Run the unified setup command in a terminal (PowerShell, Command Prompt, bash, zsh, etc.):
Windows:
python -m pip install --upgrade bc-mcp-proxy && python -m bc_mcp_proxy setup
macOS/Linux:
python3 -m pip install --upgrade bc-mcp-proxy && python3 -m bc_mcp_proxy setup
The interactive setup will:
- Prompt for your Business Central tenant ID, client ID, environment, and company
- Launch the device-code login flow (so you sign in immediately)
- Generate ready-to-click install URLs for Cursor and VS Code plus a Claude Desktop snippet
- Save everything under
~/.bc_mcp_proxy/(or%USERPROFILE%\.bc_mcp_proxy\on Windows)
-
Configure Your MCP Client
The setup command generates ready-to-use configuration files and install links:
- Cursor/VS Code: Use the clickable install link printed by setup, or copy the generated
cursor_mcp.jsonorvscode_mcp.jsonfrom~/.bc_mcp_proxy/into your MCP configuration - Claude Desktop: Copy the generated
claude_mcp.jsonsnippet into yourclaude_desktop_config.json
- Cursor/VS Code: Use the clickable install link printed by setup, or copy the generated
-
Restart Your MCP Client
After adding the configuration, restart your MCP client. You should see Business Central tools available in your client.
Usage
Once configured, you can interact with Business Central through natural language in your MCP client. The proxy will handle authentication and API calls to your Business Central environment.
Example interactions:
- "Show me the latest sales orders"
- "Create a new customer record"
- "What are the current inventory levels?"
- "List all customers"
Configuration Parameters
| Parameter | CLI Argument | Environment Variable | Description | Required |
|---|---|---|---|---|
| Tenant ID | --TenantId |
BC_TENANT_ID |
Azure tenant identifier | Yes |
| Client ID | --ClientId |
BC_CLIENT_ID |
Azure app registration client ID | Yes |
| Environment | --Environment |
BC_ENVIRONMENT |
Business Central environment name (default: Production) |
Yes |
| Company | --Company |
BC_COMPANY |
Business Central company name | Yes |
| Configuration Name | --ConfigurationName |
BC_CONFIGURATION_NAME |
Name of the Business Central configuration | No |
| Custom Auth Header | --CustomAuthHeader |
BC_CUSTOM_AUTH_HEADER |
Pre-issued bearer token (skips device flow) | No |
| Base URL | --BaseUrl |
BC_BASE_URL |
Base API URL (default: https://api.businesscentral.dynamics.com) |
No |
| Token Scope | --TokenScope |
BC_TOKEN_SCOPE |
OAuth scope (default: https://api.businesscentral.dynamics.com/.default) |
No |
| Log Level | --LogLevel |
BC_LOG_LEVEL |
Logging level (default: INFO) |
No |
| Debug | --Debug |
BC_DEBUG=1 |
Enable verbose logging | No |
When no custom bearer token is supplied, the proxy performs a device-code flow. Tokens are cached using msal-extensions under:
- Windows:
%LOCALAPPDATA%\BcMCPProxyPython\bc_mcp_proxy.bin - macOS:
~/Library/Caches/BcMCPProxyPython/bc_mcp_proxy.bin - Linux:
$XDG_CACHE_HOME/BcMCPProxyPython/bc_mcp_proxy.bin(or~/.cache/...)
Running the Proxy
After setup, you can run the proxy manually using the command printed by setup, or with:
Windows:
python -m bc_mcp_proxy --TenantId "<tenant-id>" --ClientId "<client-id>" --Environment "<environment>" --Company "<company>"
macOS/Linux:
python3 -m bc_mcp_proxy --TenantId "<tenant-id>" --ClientId "<client-id>" --Environment "<environment>" --Company "<company>"
Note: On macOS/Linux, if you see a PATH warning during installation, you can either:
- Add the script directory to your PATH (e.g.,
export PATH="$HOME/Library/Python/3.12/bin:$PATH"in~/.zshrcor~/.bashrc) - Or always use
python3 -m bc_mcp_proxyinstead of thebc-mcp-proxycommand
When the proxy logs Connecting to Business Central MCP endpoint... followed by device-code instructions, sign in (if prompted). The proxy stays running until you stop it.
Configuration files, logs, and generated MCP snippets are stored at:
- Windows:
%USERPROFILE%\.bc_mcp_proxy\ - macOS/Linux:
~/.bc_mcp_proxy/
Re-run python3 -m bc_mcp_proxy setup (macOS/Linux) or python -m bc_mcp_proxy setup (Windows) at any time to update or regenerate these files.
Troubleshooting
Common Issues
-
Authentication Failures
- Verify the redirect URL format in your Azure app registration:
ms-appx-web://Microsoft.AAD.BrokerPlugin/<clientID> - Ensure "Allow public client flows" is enabled in your Azure app registration
- Ensure all required API permissions are granted
- Check that admin consent has been provided if required
- If device flow times out, rerun setup
- Verify the redirect URL format in your Azure app registration:
-
Connection Issues
- Verify the Business Central environment name is correct
- Ensure the company name matches exactly (case-sensitive)
- Check network connectivity to Business Central
- Confirm the environment supports MCP preview feature
-
MCP Client Not Detecting Server
- Verify the Python path in your MCP configuration is correct (use
python3on macOS/Linux,pythonon Windows) - Check that the
bc-mcp-proxypackage is installed (runpython3 -m pip list | grep bc-mcp-proxyon macOS/Linux, orpython -m pip list | findstr bc-mcp-proxyon Windows) - If using a virtual environment, ensure the MCP client uses the correct Python interpreter
- Restart your MCP client after configuration changes
- Verify the Python path in your MCP configuration is correct (use
-
"No module named bc_mcp_proxy" Error
- Install the package globally:
python3 -m pip install --upgrade bc-mcp-proxy(macOS/Linux) orpython -m pip install --upgrade bc-mcp-proxy(Windows) - Or use
--userflag:python3 -m pip install --user --upgrade bc-mcp-proxy(macOS/Linux) orpython -m pip install --user --upgrade bc-mcp-proxy(Windows) - Or update your MCP config to use the full path to the Python interpreter that has the package installed
- On macOS/Linux, if you see a PATH warning, use
python3 -m bc_mcp_proxyinstead of thebc-mcp-proxycommand
- Install the package globally:
-
Repeated Sign-in Prompts
- The token cache may not be writable. Set
--DeviceCacheLocationto a directory you control - Check file permissions on the cache directory
- The token cache may not be writable. Set
-
Business Central API Errors
- Confirm the environment supports MCP and the company name is spelled exactly (case-sensitive)
- Verify your Azure app has the correct API permissions
Security Considerations
- This tool uses delegated permissions and requires user authentication
- Credentials are handled through Azure's authentication flow
- No passwords or secrets are stored in configuration files
- Tokens are cached securely using
msal-extensionswith platform-specific secure storage - Always follow your organization's security policies when setting up integrations
Support
This is an experimental tool provided as-is for development and testing purposes. For Business Central specific issues, consult the official Microsoft Dynamics 365 Business Central documentation.
License
Licensed under the MIT License (see LICENSE).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bc_mcp_proxy-0.1.3.tar.gz.
File metadata
- Download URL: bc_mcp_proxy-0.1.3.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a23b7cd095cb2f25e6a537c9f71aae53917f63c8c033967f488fb80c18efe4d0
|
|
| MD5 |
42531796029f645fc91e66a1be47a805
|
|
| BLAKE2b-256 |
2afd08f6dbf212055a0e01fa4561d4003124f34f00e22a572a5f883cebcb0f19
|
File details
Details for the file bc_mcp_proxy-0.1.3-py3-none-any.whl.
File metadata
- Download URL: bc_mcp_proxy-0.1.3-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f2cf43d30c084fc06f75923875e7222e41343a1033ef550737aca5c0326ebf7
|
|
| MD5 |
57d054dbd7a66b33135d84e384543de6
|
|
| BLAKE2b-256 |
b473e2da47e7bb7e3c4ae1cf6bf580a9f4274128f5437ff92afe3a5f91293c3f
|