- Merge all content from Local-Setup.md into DEMO_GUIDE.md: installation, venv activation, .env config, feature flags, Claude Desktop integration, mock drift scenarios, SOC 2 audit logging, troubleshooting, and dev workflow - Delete Local-Setup.md (now redundant) - Correct stale tool count: 48 → 50 (verified from @mcp.tool() grep) - Fix audit tool names: replaced removed audit_user_drift references with current scan_* tool names - Add working-directory callout (scripts require nexus-mcp/ as cwd) Continues doc reorganization from SESSION_SNAPSHOT_2026-04-13_2
8.6 KiB
Nexus-MCP — demo and setup guide
Sharded enterprise integration MCP server for Active Directory, Entra ID, Workday, BMC Helix, Lansweeper, Intune, FedEx, and cross-system drift auditing.
All test scripts must be run from the
nexus-mcp/directory.
Prerequisites
- Python 3.11 or newer
- Git
- PowerShell (Windows) or bash (Linux/macOS)
- Access to corporate systems (AD, Entra, Workday) — or enable mock mode (no credentials needed)
Installation
1. Navigate to the server directory
cd /path/to/mcp_servers/nexus-mcp
2. Create and activate a virtual environment
Windows (PowerShell):
python -m venv .venv
.\.venv\Scripts\Activate.ps1
Windows (bash/Git Bash):
python -m venv .venv
source .venv/Scripts/activate
Linux/macOS:
python -m venv .venv
source .venv/bin/activate
3. Install dependencies
pip install -e .
Installs nexus-mcp in editable mode with all required packages (mcp, httpx, python-dotenv, ldap3, msal, etc.).
Configuration
1. Create .env file
cp .env.example .env
2. Choose your mode
Option A: Mock mode (no credentials needed)
Good for development, testing shards, and exploring drift scenarios.
USE_MOCK=true
ENABLE_IDENTITY=true
ENABLE_WORKDAY=true
ENABLE_AUDIT=true
ENABLE_ITSM=false
ENABLE_ASSETS=false
ENABLE_LOGISTICS=false
AUDIT_LOGGING_ENABLED=true
AUDIT_LOG_FILE=./logs/nexus_audit.jsonl
AUDIT_LOG_STDERR=true
Option B: Live mode (production credentials)
Requires actual service accounts and API credentials. Enable only the shards where credentials are available.
USE_MOCK=false
ENABLE_IDENTITY=true
ENABLE_WORKDAY=false # Set true when credentials available
ENABLE_AUDIT=true
ENABLE_ITSM=false
ENABLE_ASSETS=false
ENABLE_LOGISTICS=false
# Active Directory
AD_SERVER=ldap://your-dc.company.com
AD_PORT=389
AD_BASE_DN=DC=company,DC=com
AD_USER=CN=svc_nexus,OU=Service Accounts,DC=company,DC=com
AD_PASSWORD=your_password
AD_USE_SSL=false
# Microsoft Entra ID (Azure AD)
ENTRA_TENANT_ID=your_tenant_id
ENTRA_CLIENT_ID=your_client_id
ENTRA_CLIENT_SECRET=your_client_secret
Your .env file is never committed to git.
Running the server
python src/main.py
Expected startup output (mock mode, default shards):
[nexus] ✅ identity shard loaded
[nexus] ✅ workday shard loaded
[nexus] ✅ audit shard loaded
[nexus] ⏸ itsm shard disabled (ENABLE_ITSM != true)
[nexus] ⏸ assets shard disabled (ENABLE_ASSETS != true)
[nexus] ⏸ logistics shard disabled (ENABLE_LOGISTICS != true)
[nexus] 🔒 SOC 2 audit middleware active → ./logs/nexus_audit.jsonl
The server runs on stdio transport and waits for MCP protocol messages.
Claude Desktop integration
Add this block to your Claude Desktop config.json:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"nexus": {
"command": "python",
"args": ["src/main.py"],
"cwd": "C:/Users/your-username/repos/mcp_servers/nexus-mcp",
"env": {
"USE_MOCK": "true"
}
}
}
}
Restart Claude Desktop. The Nexus tools will appear in the tool picker.
Feature flag reference
| Flag | Shard | Systems | Default |
|---|---|---|---|
ENABLE_IDENTITY |
identity.py |
Active Directory + Entra ID | true |
ENABLE_WORKDAY |
workday.py |
Workday HCM | true |
ENABLE_AUDIT |
audit.py |
Cross-system drift | true |
ENABLE_ITSM |
itsm.py |
BMC Helix | false |
ENABLE_ASSETS |
assets.py |
Lansweeper + Intune | false |
ENABLE_LOGISTICS |
logistics.py |
FedEx | false |
Set a flag to false (or omit it) to put that shard in holding pattern. The server will start successfully and skip those tools.
Quick start — demo scripts
All scripts run from the nexus-mcp/ directory against mock data.
Audit tools demonstration
python test_client.py
Shows all 4 audit scan tools executing with severity classification and mismatch summaries.
Expected: 6 total mismatches across 9 employee records.
Tool catalog browser
python list_tools.py
Shows the complete tool inventory (50 tools), organized by shard, with descriptions from docstrings.
MCP protocol simulation
python test_mcp_protocol.py
Simulates the full MCP handshake: protocol negotiation → tools/list discovery → tools/call invocation → JSON response. Useful for verifying Claude Desktop compatibility.
Test suite
Run from the nexus-mcp/ directory:
# Full suite
pytest tests/ -v
# Specific modules
pytest tests/identity_tests/ -v
pytest tests/workday_tests/ -v
# With coverage
pytest tests/ --cov=lib --cov=src --cov-report=term-missing
# Audit integration tests only
pytest tests/workday_tests/ tests/integration_test_audit_shard.py -v
Expected baseline: 10/10 passing in ~0.6s.
See nexus-mcp/TEST_VALIDATION_REPORT.md for full results and MCP protocol compliance details.
Mock data and drift scenarios
Mock data is defined in lib/mock_data.py. Pre-seeded mismatches cover all severity levels:
| Employee | Mismatch | Severity | Detected by |
|---|---|---|---|
| Terminated worker | Active in Workday as terminated, AD account still enabled | HIGH | scan_status_reconciliation |
| Bob Martinez | Title differs — AD: "Sr. Software Engineer" vs Workday: "Software Engineer" | MEDIUM | scan_job_title_drift |
| Carol Chen | Department differs — Workday: "Product Management" vs AD: "Engineering" | MEDIUM | scan_department_mismatches |
| 3 employees | AD display name doesn't align with legal/preferred name in Workday | LOW | scan_name_variance_mismatches |
Employee records: 9 (EMP001–EMP777) | Total pre-seeded mismatches: 6
Try the audit tools in Claude chat with Nexus-MCP active:
"Scan for terminated workers still active in AD"
"Run a job title drift scan"
"Show me all stale AD accounts"
"Run audit statistics"
SOC 2 audit logging
Every tool call is logged to logs/nexus_audit.jsonl (one JSON object per line, automatically redacted).
Each entry contains:
event_id— UUID v4 for correlationtimestamp— ISO 8601 UTCtool— MCP tool nameshard— identity | workday | audit | etc.action_category— READ | AUDIT | REPORTargs_summary— call arguments with passwords/tokens redactedmock_mode— true/falsestatus— success | errorlatency_ms— execution time
Query the audit log directly using the built-in tools:
"Show me the last 50 audit log entries" → nexus_audit_recent
"Give me audit statistics" → nexus_audit_stats
Troubleshooting
Server won't start
- Check Python version:
python --version(must be 3.11+) - Verify the venv is active (
(.venv)should appear in your prompt) - Verify dependencies:
pip list | grep mcp
Shard not loading
- Check the feature flag in
.env:ENABLE_IDENTITY=true - Look for error messages in the startup output
- Verify the shard file exists:
ls src/shards/identity.py
Credentials not working (live mode)
- Test AD connectivity:
python -c "import ldap3; print(ldap3.__version__)" - Verify the service account can bind to LDAP
- Check firewall rules for on-prem AD
Audit log not writing
- Check permissions on the
logs/directory - Verify
AUDIT_LOGGING_ENABLED=truein.env
Development workflow
Adding a tool to an existing shard
- Edit the shard file (e.g.
src/shards/identity.py) - Add the tool function inside
register(mcp)using the@mcp.tool()decorator - Restart the server and test in Claude Desktop
Creating a new shard
-
Copy an existing shard as a template:
cp src/shards/identity.py src/shards/my_system.py -
Implement
register(mcp)with your tools -
Add the shard to
src/main.py:if _enabled("MY_SYSTEM"): my_system.register(mcp) -
Add the flag to
.env.example:ENABLE_MY_SYSTEM=false
Switching between mock and live mode
Change USE_MOCK in .env and restart — no code changes needed:
USE_MOCK=false
python src/main.py
Next steps
- Run
python test_client.pyto verify audit tools work in mock mode - Explore the pre-seeded drift scenarios using audit tools in Claude chat
- Populate
.envwith live credentials for available systems - Enable additional shards as credentials are provisioned
- Review
nexus-mcp/README.mdfor the full tool reference and NEXUS work item tracking