Introduction
The Model Context Protocol (MCP) is an open standard that lets AI assistants like Claude connect to external tools and data sources. Instead of copy-pasting context into chat, MCP servers expose structured capabilities — querying AWS costs, browsing documentation, or posting to LinkedIn — directly from within Claude Desktop.
This guide walks through configuring six MCP servers on a Windows machine running WSL2, covering Azure, AWS (four specialized servers), and LinkedIn.
What is MCP?
MCP follows a client-server architecture. Claude Desktop acts as the client, and each MCP server provides a specific set of tools the AI can invoke during a conversation.
Each server runs inside WSL2 (Ubuntu), and Claude Desktop launches them via wsl.exe. This approach keeps all dependencies (Python venvs, Node.js, AWS CLI) inside the Linux environment while Claude Desktop runs natively on Windows.
Prerequisites
- Windows 10/11 with WSL2 enabled
- Claude Desktop installed on Windows
- Node.js 22+ installed inside WSL2 (via nvm)
- Python 3.12+ inside WSL2 (for AWS MCP servers)
- uv/uvx installed inside WSL2 (for Python package management)
- AWS CLI configured with a default profile (
aws configure) - Relevant API keys/tokens for each service
Configuration File Location
Claude Desktop reads its MCP config from:
On most Windows machines, this resolves to:
The file is a single JSON object with an mcpServers key. Each entry defines one MCP server with its launch command, arguments, and optional environment variables.
The WSL2 Bridge Pattern
Since Claude Desktop runs on Windows but our tools live in WSL2, every server uses the same launch pattern:
| |
The -l flag ensures bash loads your login profile (~/.profile, ~/.bashrc), so tools like nvm, pyenv, and uv are available on the PATH. The -c flag passes the command as a string.
Server 1: Azure MCP
The official Azure MCP server provides tools for managing Azure resources — listing subscriptions, querying resource groups, inspecting VMs, and more.
Setup
No local installation needed. It runs via npx which downloads the package on first use.
Configuration
| |
What It Provides
- List and manage Azure subscriptions
- Query resource groups, VMs, storage accounts
- Inspect Azure service configurations
Prerequisites
- Azure CLI installed and authenticated (
az login) inside WSL2
Server 2: AWS Cost Explorer MCP
This server lets Claude query your AWS billing and cost data — monthly spend, service breakdown, cost trends, and forecasts.
Setup
Create a launcher script that manages its own Python virtual environment:
| |
The script uses a hash-based dependency tracking approach: it computes a SHA-256 hash of the package identifier and compares it against a stored hash file. Dependencies are only reinstalled when the hash changes, making subsequent launches fast.
Configuration
| |
What It Provides
- Query monthly and daily AWS costs
- Break down costs by service, region, or account
- Cost forecasts and trend analysis
Server 3: AWS API MCP
The AWS API MCP server provides direct access to AWS service APIs — allowing Claude to list EC2 instances, check S3 buckets, query DynamoDB tables, and interact with most AWS services.
Setup
This server uses uvx (the uv package runner) for zero-install execution:
| |
Configuration
| |
What It Provides
- List and describe EC2 instances, S3 buckets, Lambda functions
- Query DynamoDB, RDS, CloudWatch metrics
- Interact with most AWS service APIs
Server 4: AWS Documentation MCP
This server gives Claude access to the entire AWS documentation library. When asked about AWS services, configuration options, or best practices, Claude can search and reference official docs.
Setup
| |
Configuration
| |
What It Provides
- Search AWS documentation by keyword or topic
- Retrieve service configuration guides
- Reference official AWS best practices
Server 5: AWS Pricing MCP
This server allows Claude to look up current AWS pricing for any service — EC2 instance types, S3 storage tiers, Lambda invocation costs, and more.
Setup
| |
Configuration
| |
What It Provides
- Look up EC2 instance pricing by type and region
- Compare storage costs across S3 tiers
- Query Lambda, RDS, and other service pricing
Server 6: LinkedIn MCP
This server connects Claude to your LinkedIn account for reading and creating posts, viewing profile data, and managing your professional presence.
Setup
Clone and build the LinkedIn MCP server:
| |
Create a launcher script with your OAuth credentials:
| |
Getting LinkedIn API Credentials
- Go to LinkedIn Developer Portal and create an app
- Under Auth, note the Client ID and Client Secret
- Add the OAuth 2.0 redirect URL (e.g.,
http://localhost:3000/callback) - Request the
w_member_socialandr_liteprofilescopes - Generate an access token via the OAuth flow
- Find your Person ID from your LinkedIn profile URL or API
Configuration
| |
What It Provides
- Create and publish LinkedIn posts
- Read your profile information
- View post engagement and analytics
Complete Configuration
Here is the full claude_desktop_config.json with all six servers:
| |
Verifying MCP Servers
After saving the config, restart Claude Desktop. You can verify servers are connected by:
- Opening Claude Desktop
- Clicking the MCP tools icon (hammer icon) in the chat input area
- Each connected server will list its available tools
If a server fails to start, check the Claude Desktop logs:
Or test the server manually inside WSL2:
| |
Troubleshooting
| Issue | Fix |
|---|---|
| Server not showing in Claude | Restart Claude Desktop after editing claude_desktop_config.json |
wsl.exe not found | Ensure WSL2 is installed: wsl --install |
npx not found inside WSL | Use full path: /home/user/.nvm/versions/node/v25.4.0/bin/npx |
uvx not found | Install uv: curl -LsSf https://astral.sh/uv/install.sh | sh |
| AWS auth errors | Run aws configure inside WSL2 and verify credentials |
| LinkedIn token expired | Regenerate the OAuth access token via the developer portal |
| Python venv errors | Delete the .venv-* directory and let the script recreate it |
Security Best Practices
- Never commit
claude_desktop_config.jsonto git — it may reference scripts containing secrets - Keep secrets in start scripts, not in the config — the
envblock in config is visible to Claude; useexportin shell scripts instead - Use scoped API tokens — create tokens with minimum required permissions
- Rotate tokens regularly — especially LinkedIn access tokens
- Use AWS profiles — avoid hardcoding AWS credentials; rely on
aws configureprofiles - Restrict file permissions —
chmod 700on start scripts containing secrets
Conclusion
With six MCP servers configured, Claude Desktop becomes a unified interface for cloud infrastructure (Azure + AWS), professional networking (LinkedIn), and cost analysis. The WSL2 bridge pattern keeps all dependencies cleanly inside Linux while Claude Desktop runs natively on Windows.
The key architectural decisions that make this setup work:
- WSL2 as the runtime — All tools, SDKs, and credentials live in Linux
- Launcher scripts — Each server manages its own virtual environment and dependencies
- Self-healing venvs — Python servers auto-create and update their virtual environments on first run
uvxfor zero-install servers — AWS API and Docs servers run without manual installation
For more information on MCP, visit the Model Context Protocol documentation or the Claude Desktop MCP guide.
