Skip to main content
Glama
Windows Developer MCP Server

Windows Developer MCP Server

Windows Developer MCP Server

Glama Indexed CI Pipeline License: MIT Python 3.12+ FastMCP v2.0+ Ruff Basedpyright

Windows Developer MCP gives AI assistants (Claude Desktop, LM Studio, Cursor, etc.) safe, native developer superpowers on Windows β€” including terminal execution, Git/GitHub integration, Docker management, filesystem operations, and AI project diagnostics.


⚑ 1-Minute Quick Start

Step 1: Install uv

If you don't have uv installed, open PowerShell and run:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Step 2: Configure Your AI Client

πŸ€– Claude Desktop Setup

Edit %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "windows-developer-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\path\\to\\windows-developer-mcp",
        "run",
        "windows-developer-mcp"
      ],
      "env": {
        "MCP_SERVER__PROFILE": "developer",
        "MCP_WORKSPACE__PATH": "C:\\path\\to\\your\\project"
      }
    }
  }
}

πŸ’» LM Studio / Local LLM Setup

Edit your LM Studio MCP server configuration:

{
  "mcpServers": {
    "windows-developer-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\path\\to\\windows-developer-mcp",
        "run",
        "windows-developer-mcp"
      ],
      "env": {
        "MCP_SERVER__PROFILE": "minimal",
        "MCP_WORKSPACE__PATH": "C:\\path\\to\\your\\project"
      }
    }
  }
}

Related MCP server: allcanuse-mcp

πŸ”₯ Key Features

  • πŸ›‘οΈ Workspace-Confined & Sandboxed: All commands are executed securely with strict path normalization, denylists, and audit logging.

  • ⚑ Dual-Profile Engine:

    • minimal: Optimized for Local LLMs (7B/8B) in LM Studio (<1.2K token context footprint).

    • developer: Ideal for Claude Desktop / GPT-4o (~3.8K token footprint).

    • full: Complete exposure for 70B+ LLMs & Glama Indexing.

  • 🧰 40+ Developer Tools across 12 Modules: Terminal, Git, GitHub, Docker, Filesystem, Python, Node, SQLite, Windows, Network, Browser, and AI Project Analysis.


🧰 Available Tool Modules

Module

Core Tools Exposed

Description

Terminal

terminal_run, terminal_get_session

Safe PowerShell & CMD subprocess execution.

Filesystem

filesystem_read, filesystem_write, filesystem_list

Workspace-restricted file & directory operations.

Git

git_status, git_log, git_diff, git_commit, git_push

Git branch, commit, diff, and remote management.

GitHub

github_auth_status, github_repo_info, github_list_issues, github_list_prs

GitHub API for repos, PRs, issues, and releases.

Docker

docker_list_containers, docker_logs, docker_run, docker_build

Container, image, and Compose orchestration.

Python

python_run, python_check_package, python_install_package

Virtual environment management & execution.

Node.js

node_run, npm_run, npm_install

Node.js script execution & npm package management.

SQLite

sqlite_query, sqlite_schema, sqlite_list_tables, sqlite_execute

Database queries & schema inspection.

Windows

windows_system_info, windows_list_processes, windows_get_env

System metrics, process list, and environment vars.

Network

network_ping, network_dns_lookup, network_port_scan

Network diagnostics & connectivity checks.

Project (AI)

project_analyze, project_security_scan, project_generate_readme

Tech stack detection, security audit, & code gen.

Browser

browser_open_url, browser_fetch_page, browser_extract_text

Web page fetching & clean text extraction.


🧠 AI-Native Project Analysis Tools

ProjectProvider provides intelligent tools designed specifically for codebase comprehension:

  • πŸ” project_analyze: Auto-detects frameworks, tech stacks, and entry points.

  • πŸ›‘οΈ project_security_scan: Static audit for hardcoded API keys, tokens, and credentials.

  • 🌳 project_summarize: Hierarchical directory tree generator.

  • πŸ“¦ project_dependencies: Cross-language dependency analysis.

  • πŸ“ project_generate_readme: Drafts a complete README.md based on codebase analysis.

  • πŸ§ͺ project_generate_tests: Generates pytest unit test skeletons for source files.


πŸ›‘οΈ Safety & Security Features

  1. Workspace Boundary Sandbox: Operations are strictly restricted to the specified workspace path (MCP_WORKSPACE__PATH).

  2. Command Denylist: Blocks dangerous operations (format, shutdown, del /f /s /q, etc.).

  3. Audit Logging: All executed actions are recorded in logs/audit.log.


πŸ“š Documentation Suite


πŸ“„ License

Distributed under the MIT License. See LICENSE for details.

Available Tools

112 tools
activate_venvA

Register a virtual environment as active in the current session.

This does not "activate" the venv in a shell sense (which is a shell-level operation). Instead, it records the venv path in the session so that subsequent python_* and pip_* tool calls use the venv's interpreter and pip automatically.

Inputs: path. Returns: object

analyze_projectA

Detect project type, framework, and key configuration files.

Identifies Python, Node.js, .NET, Rust, Go, Java, Docker, and other project types automatically by checking for characteristic files.

Inputs: path. Returns: object

append_fileA
    Append content to an existing file (or create it if it does not exist).

    Args:
        path:     Path to the file.
        content:  Content to append.
        encoding: File encoding. Default: "utf-8".

    Returns:
        A dict with keys: status, data (path, total_size_bytes).

    Examples:
        append_file("log.txt", "New entry

") append_file("output.csv", "row1,row2 ")

Inputs: path (required), content (required), encoding. Returns: object

check_packageA

Check whether a package is installed and return its version.

Inputs: package (required). Returns: object

check_urlA

Send an HTTP HEAD request to verify URL accessibility and inspect response headers.

Inputs: url (required). Returns: object

clear_session_historyA

Clear the session command history.

This does not affect the working directory, environment variables, or any other session state. Only the command history is cleared.

Returns: A dict with keys: status, data (confirmation message).

Examples: clear_session_history()

Inputs: no named parameters. Returns: object

copy_fileB

Copy a file to a new location within the workspace.

Inputs: dst (required), src (required), confirm. Returns: object

count_lines_of_codeA

Count lines of code across the codebase.

Counts total lines, code lines (non-blank, non-comment), blank lines, and comment lines per file extension.

Inputs: path, extensions, exclude_dirs. Returns: object

cpu_infoA

Return CPU usage statistics and core information.

Returns: A dict with keys: status, data (cores, usage%, frequency).

Examples: cpu_info()

Inputs: no named parameters. Returns: object

create_directoryA

Create a directory and all necessary parent directories.

Inputs: path (required). Returns: object

create_venvA

Create a new Python virtual environment.

Inputs: path. Returns: object

deactivate_venvA

Deactivate the current session's virtual environment.

After this call, python_* and pip_* tools will use the system Python interpreter.

Returns: A dict with keys: status, data (confirmation).

Examples: deactivate_venv()

Inputs: no named parameters. Returns: object

delete_fileA

Permanently delete a file from the workspace.

This operation is irreversible. Requires explicit confirmation when security.require_confirmation is enabled (default: True).

Inputs: path (required), confirm. Returns: object

disk_infoA

Return disk partition information and usage for each drive.

Returns: A dict with keys: status, data (list of partition details).

Examples: disk_info()

Inputs: no named parameters. Returns: object

dns_lookupB

Perform a DNS lookup for the given hostname.

Inputs: hostname (required). Returns: object

docker_buildB

Build a Docker image from a Dockerfile.

Inputs: tag, confirm, context, dockerfile. Returns: object

docker_compose_downB

Stop and remove Docker Compose services.

Inputs: file, confirm, volumes. Returns: object

docker_compose_logsB

Return logs from Docker Compose services.

Inputs: file, tail, service. Returns: object

docker_compose_upB

Start Docker Compose services.

Inputs: file, detach, confirm, services. Returns: object

docker_execA

Execute a command inside a running container.

Inputs: command (required), container (required). Returns: object

docker_infoA

Return Docker system-wide information.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: docker_info()

Inputs: no named parameters. Returns: object

docker_list_containersB

List Docker containers.

Inputs: all_containers. Returns: object

docker_list_imagesC

List Docker images.

Inputs: all_images. Returns: object

docker_logsC

Return logs from a container.

Inputs: container (required), tail, follow. Returns: object

docker_pullB

Pull a Docker image from a registry.

Inputs: image (required), confirm. Returns: object

docker_remove_containerB

Remove a Docker container.

Inputs: container (required), force, confirm. Returns: object

docker_runC

Run a Docker container.

Inputs: image (required), env, name, ports, +4 more. Returns: object

docker_stopB

Stop a running container.

Inputs: container (required). Returns: object

docker_versionA

Return the installed Docker version.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: docker_version()

Inputs: no named parameters. Returns: object

extract_textA

Fetch a web page and extract human-readable body text.

Strips script, style, and HTML markup tags to produce clean text.

Inputs: url (required), max_chars. Returns: object

fetch_pageC

Fetch static web page content over HTTP/HTTPS.

Inputs: url (required), timeout. Returns: object

file_existsB

Check whether a path exists within the workspace.

Inputs: path (required). Returns: object

file_infoA

Return metadata for a file or directory.

Includes size, creation time, modification time, file type, and whether the path is readable/writable.

Inputs: path (required). Returns: object

find_todosB

Search for TODO/FIXME/HACK and similar tags in source files.

Inputs: path, tags, extensions, max_results. Returns: object

get_environment_variableA

Return the value of an environment variable.

Checks session-scoped overrides first, then falls back to the inherited process environment.

Inputs: name (required). Returns: object

get_ip_infoA

Return local network adapter information and IP addresses.

Includes all IPv4 and IPv6 addresses for each active adapter.

Returns: A dict with keys: status, data (hostname, adapters list).

Examples: get_ip_info()

Inputs: no named parameters. Returns: object

get_open_portsA

List locally open (listening) TCP and UDP ports.

Inputs: include_remote. Returns: object

get_processB

Return detailed information about a specific process.

Inputs: pid (required). Returns: object

get_session_historyA

Return recent command history for the current session.

History entries include the command, tool name, exit code, timestamp, and duration. History is capped at 500 entries.

Inputs: limit. Returns: object

get_session_infoA

Return a snapshot of the current session state.

Includes the working directory, last exit code, active virtual environment, active Git repository, active project, and session start time.

Returns: A dict with keys: status, data (session snapshot).

Examples: get_session_info()

Inputs: no named parameters. Returns: object

get_working_directoryA

Return the current session working directory.

The working directory persists across all tool calls within the same server session. It defaults to the user's home directory on startup.

Returns: A dict with keys: status, data (containing cwd, exists, is_dir).

Examples: get_working_directory()

Inputs: no named parameters. Returns: object

git_addA

Stage files for commit.

Inputs: files. Returns: object

git_blameB

Show line-by-line authorship information for a file.

Inputs: file_path (required), line_range. Returns: object

git_branchA

List local (or all) branches and indicate the current branch.

Inputs: all_branches. Returns: object

git_checkoutA

Switch to a branch, or restore a file to its last committed state.

Inputs: branch_or_file (required). Returns: object

git_cloneA

Clone a remote repository into a local directory.

The destination must be within the workspace boundary.

Inputs: url (required), destination. Returns: object

git_commitA

Create a commit with the staged changes.

Requires explicit confirmation when security.require_confirmation is enabled in config (default: True).

Inputs: message (required), confirm, all_changes. Returns: object

git_create_branchA

Create a new branch and switch to it.

Inputs: name (required), from_branch. Returns: object

git_diffA

Show changes between commits, working tree, or index.

Inputs: staged, file_path, stat_only. Returns: object

github_auth_statusA

Check GitHub authentication status and token validity.

Returns whether a token is configured and (if so) the authenticated user's login name.

Returns: A dict with keys: status, data (authenticated, token_present, user).

Examples: github_auth_status()

Inputs: no named parameters. Returns: object

github_create_issueA

Create a new GitHub issue.

Requires a GITHUB_TOKEN with issue write permissions and explicit confirmation when required by config.

Inputs: repo (required), owner (required), title (required), body, +2 more. Returns: object

github_get_issueA

Get a specific GitHub issue by number.

Inputs: repo (required), owner (required), number (required). Returns: object

github_get_prA

Get a specific pull request by number.

Inputs: repo (required), owner (required), number (required). Returns: object

github_list_issuesB

List issues for a GitHub repository.

Inputs: repo (required), owner (required), label, limit, +1 more. Returns: object

github_list_prsB

List pull requests for a repository.

Inputs: repo (required), owner (required), limit, state. Returns: object

github_list_releasesB

List releases for a repository.

Inputs: repo (required), owner (required), limit. Returns: object

github_rate_limitA

Check the current GitHub API rate limit status.

Returns: A dict with keys: status, data (core, search, and graphql limits).

Examples: github_rate_limit()

Inputs: no named parameters. Returns: object

github_repo_infoA

Return metadata for a GitHub repository.

Inputs: repo (required), owner (required). Returns: object

github_search_reposB

Search GitHub repositories.

Inputs: query (required), sort, limit, order. Returns: object

git_initB

Initialise a new Git repository.

The target path must be within the workspace boundary.

Inputs: path. Returns: object

git_logC

Return recent commit history.

Inputs: limit, since, author, oneline. Returns: object

git_pullB

Pull changes from a remote repository.

Inputs: branch, remote. Returns: object

git_pushA

Push commits to a remote repository.

Requires explicit confirmation when security.require_confirmation is enabled in config (default: True).

Inputs: force, branch, remote, confirm. Returns: object

git_remote_infoA

Show configured remote repositories and their URLs.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: git_remote_info()

Inputs: no named parameters. Returns: object

git_stashB

Stash or restore uncommitted changes.

Inputs: action, message. Returns: object

git_statusA

Return the current Git working tree status.

Shows the state of the index and working directory β€” which files are staged, unstaged, or untracked.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: git_status()

Inputs: no named parameters. Returns: object

git_tagsA

List all tags in the repository.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: git_tags()

Inputs: no named parameters. Returns: object

http_getA

Perform an HTTP GET request and return the response.

Useful for testing APIs and web endpoints. Response body is truncated at 10,000 characters.

Inputs: url (required), headers, timeout. Returns: object

install_packageA

Install a Python package with pip.

Requires explicit confirmation when security.require_confirmation is enabled in config.

Inputs: package (required), confirm, upgrade, version. Returns: object

list_directoryB

List the contents of a directory.

Inputs: path, show_hidden. Returns: object

list_environment_variablesB

List all environment variables visible to the MCP server process.

Returns both process-level and session-scoped overrides. Session overrides are marked with source: "session" in the output.

Inputs: filter_prefix. Returns: object

list_packagesA

List all installed Python packages.

Inputs: format. Returns: object

list_processesA

List running processes with resource usage.

Inputs: limit, sort_by, filter_name. Returns: object

list_servicesA

List Windows services with their status.

Inputs: filter_name, status_filter. Returns: object

memory_infoA

Return RAM and virtual memory statistics.

Returns: A dict with keys: status, data (total, available, used, percent for RAM and swap).

Examples: memory_info()

Inputs: no named parameters. Returns: object

move_fileB

Move or rename a file within the workspace.

Inputs: dst (required), src (required), confirm. Returns: object

node_run_scriptC

Execute a JavaScript file with Node.js.

Inputs: path (required), args, timeout. Returns: object

node_versionA

Return the installed Node.js version.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: node_version()

Inputs: no named parameters. Returns: object

npm_infoA

Fetch information about an npm package from the registry.

Inputs: package (required). Returns: object

npm_installC

Install npm packages.

Inputs: confirm, packages, save_dev. Returns: object

npm_listB

List installed npm packages.

Inputs: depth, global_packages. Returns: object

npm_runA

Run an npm script defined in package.json.

Inputs: script (required), args. Returns: object

npm_versionA

Return the installed npm version.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: npm_version()

Inputs: no named parameters. Returns: object

npx_runB

Execute a command with npx.

Inputs: command (required), args, timeout. Returns: object

open_urlB

Open a URL in the default system web browser.

Inputs: url (required). Returns: object

pingB

Ping a host and return round-trip statistics.

Inputs: host (required), count. Returns: object

pip_freezeA

Output installed packages in requirements.txt format.

Useful for generating a requirements.txt file or auditing the exact package versions in the current environment.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: pip_freeze()

Inputs: no named parameters. Returns: object

pip_versionA

Return the current pip version.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: pip_version()

Inputs: no named parameters. Returns: object

project_summaryA

Return a comprehensive project overview combining multiple analyses.

Combines project type detection, LOC counting, and TODO/FIXME listing into a single structured report.

Inputs: path. Returns: object

python_infoA

Return comprehensive Python environment information.

Includes version, executable path, platform, prefix, and active virtual environment (if any).

Returns: A dict with keys: status, data (detailed env info).

Examples: python_info()

Inputs: no named parameters. Returns: object

python_versionA

Return the current Python interpreter version.

Returns: A dict with keys: status, exit_code, stdout, stderr, output, duration_ms.

Examples: python_version()

Inputs: no named parameters. Returns: object

read_fileB

Read and return the contents of a text file.

Inputs: path (required), encoding, max_bytes. Returns: object

read_package_jsonA

Parse and summarise a package.json file.

Returns project name, version, description, scripts, dependencies, and devDependencies.

Inputs: path. Returns: object

read_pyproject_tomlA

Parse and summarise a pyproject.toml file.

Returns project name, version, description, dependencies, and tool configurations.

Inputs: path. Returns: object

run_cmdA

Execute a CMD command and return the output.

Useful for legacy batch operations, tools that behave differently under CMD, or when PowerShell is unavailable.

Inputs: command (required), timeout. Returns: object

run_powershellA

Execute a PowerShell command and return the output.

The command passes through the full security validation pipeline before execution. Dangerous commands (format, shutdown, etc.) are blocked automatically.

Inputs: command (required), timeout. Returns: object

run_python_scriptA

Execute a Python script file.

The script must be within the workspace boundary. Uses the active virtual environment's Python if one is registered in the session.

Inputs: path (required), args, timeout. Returns: object

run_scriptA

Execute a PowerShell (.ps1) or batch (.bat/.cmd) script file.

Resolves the script path relative to the current working directory. The script must exist within the configured workspace boundary.

Inputs: path (required), args, timeout. Returns: object

search_filesB

Search for files matching a glob pattern.

Inputs: path, pattern, recursive, max_results. Returns: object

set_working_directoryA

Change the current session working directory.

The new directory must exist and must be within the configured workspace boundary. Relative paths are resolved against the current working directory.

Inputs: path (required). Returns: object

sqlite_databasesA

Search for SQLite database files within the workspace.

Inputs: search_path. Returns: object

sqlite_executeA

Execute any SQL statement against a SQLite database.

Write operations (INSERT, UPDATE, DELETE, CREATE, DROP, etc.) require explicit confirmation.

Inputs: sql (required), database (required), params, confirm. Returns: object

sqlite_list_tablesA

List all tables in a SQLite database file.

Inputs: database (required). Returns: object

sqlite_queryA

Execute a read-only SELECT query against a SQLite database.

Only SELECT statements are allowed. Use sqlite_execute for writes.

Inputs: sql (required), database (required), params, max_rows. Returns: object

sqlite_schemaA

Return the CREATE statement(s) for tables in a database.

Inputs: database (required), table. Returns: object

sqlite_table_infoB

Return column definitions for a specific table.

Inputs: table (required), database (required). Returns: object

system_infoA

Return comprehensive system information.

Includes OS version, hostname, uptime, Python version, architecture, and processor brand.

Returns: A dict with keys: status, data (detailed system snapshot).

Examples: system_info()

Inputs: no named parameters. Returns: object

tracerouteB

Trace the network route to a host.

Inputs: host (required), max_hops. Returns: object

treeA

Return a directory tree view up to a specified depth.

Inputs: path, max_depth, show_hidden. Returns: object

uninstall_packageA

Uninstall a Python package with pip.

Requires explicit confirmation (passes --yes to pip to avoid interactive prompt).

Inputs: package (required), confirm. Returns: object

windows_versionA

Return detailed Windows version information.

Returns: A dict with keys: status, data (version, build, edition strings).

Examples: windows_version()

Inputs: no named parameters. Returns: object

write_fileA
    Create or overwrite a file with the given content.

    Creates parent directories automatically. Overwrites existing files
    without warning β€” use file_exists() first if unsure.

    Requires explicit confirmation when ``security.require_confirmation``
    is enabled in config.

    Args:
        path:     Path to write (absolute or relative to cwd).
        content:  The text content to write.
        encoding: File encoding. Default: "utf-8".
        confirm:  Set to True to confirm when required by config.

    Returns:
        A dict with keys: status, data (path, size_bytes, lines).

    Examples:
        write_file("notes.txt", "Hello, World!")
        write_file("src/config.py", "DEBUG = True

", confirm=True)

Inputs: path (required), content (required), confirm, encoding. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 112 tools

    Disambiguation3/5

    Most tools are separated by clear domain prefixes such as docker_, git_, github_, sqlite_, and npm_, which helps differentiate them. However, several tools overlap in purpose: fetch_page/extract_text/http_get/check_url all deal with web content, run_powershell and run_script both execute PowerShell scripts, and tree/list_directory/search_files share file-discovery territory.

    Naming Consistency4/5

    The dominant pattern is snake_case verb_noun or domain_verb_noun naming, e.g. delete_file, git_commit, docker_stop, and npm_install. Minor deviations like tree, ping, traceroute, and github_auth_status break the pattern slightly, but overall the naming is predictable and not chaotic.

    Tool Count1/5

    112 tools is an extreme count for a single MCP server, spanning file operations, shell execution, Docker, system information, Python, Node.js, Git, GitHub, networking, SQLite, and project analysis. This broad sprawl imposes a heavy selection burden on agents and goes far beyond a well-scoped tool set.

    Completeness3/5

    The server covers a wide range of developer workflows, but individual clusters have notable gaps: GitHub only lists/gets issues and PRs without create/merge/update operations, Docker lacks image removal and container start, and environment variables can be read but not set. These holes force agents to fall back to generic shell commands or external workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A production-ready MCP server that provides AI assistants with comprehensive GitHub developer tooling including PR analysis, code review, changelog generation, dependency auditing, commit summarization, and refactoring suggestions.
      7 npm
      ISC
    • A
      license
      Not graded
      quality
      D
      maintenance
      A MCP server for Windows/Linux that provides 90+ tools enabling AI assistants to systematically manage local systems, including system probing, command execution, file editing, network diagnostics, and more.
      13
      MIT