Skip to main content
Glama

AutoHotkey v2 MCP Server

A TypeScript MCP server for AutoHotkey v2 development. It provides script analysis, file operations, documentation search, and script execution tools for MCP clients such as Claude Desktop.

Architecture

AHK v2 MCP Agent Workflow

Related MCP server: Hotkeyless AHK MCP

Highlights

  • 12 core tools by default, more in opt-in toolsets (see Tools and toolsets)

  • AHK_Check: one checker that uses AutoHotkey's own /Validate when available

  • AHK_Navigate: definition, references, rename and symbols through THQBY's v2 language server

  • Six read-only uia_* tools that feed live UI Automation ground truth to the model, so it writes correct selectors instead of guessing them

  • Focused file discovery and active-file aware operations

  • Script execution with process tracking and window detection

  • Local AutoHotkey validation and diagnostics tools

  • Built-in AutoHotkey docs and prompt/context helpers

  • Stdio and Streamable HTTP transport support, with opt-in legacy SSE compatibility

UIA inspection

Writing UIA automation without inspecting the live tree means guessing selectors. These tools remove the guesswork:

uia_windows  ->  uia_tree  ->  uia_find / uia_element  ->  paste snippet  ->  uia_highlight
   which          what's         the exact control        into your .ahk      confirm it is
   window         in it          + verified selector      script              the right one

They are in the uia toolset; enable it with AHK_MCP_TOOLSETS=core,uia or AHK_Settings { "action": "enable_toolset", "toolset": "uia" }.

Every element result carries a paste-ready AHK v2 snippet that has been executed against the live tree and confirmed to resolve back to that exact element. Paths are property chains, not RuntimeIds, so they still work after the target app restarts.

All six tools are strictly read-only — they read properties and pattern availability but never invoke a control pattern, so none of them can press, toggle, select, or delete anything in the target app.

Full reference, including the selector-validation hook and Electron/WebView2 guidance: docs/UIA_INSPECTION.md.

Requirements

  • Node.js 20+

  • npm

  • AutoHotkey v2 (for AHK_Run, AHK_Eval and AHK_Check's interpreter engine)

  • Optional: THQBY's AutoHotkey v2 Language Support VS Code extension, for AHK_Navigate and AHK_Check's language-server engine. It is found automatically in the VS Code extensions folder, or set AHK_THQBY_LSP_SERVER to its server/dist/server.js

Installation

git clone https://github.com/truecrimedev/ahk-mcp.git
cd ahk-mcp
npm install
npm run build

Run

npm start

Development mode:

npm run dev

Smoke test:

npm run smoke:mcp
npm run smoke:http
npm run test:evals    # eval grader tests
npm run eval:tasks    # task evals with and without the server (see evals/README.md; costs API credits)

Claude Desktop Configuration

Add this to claude_desktop_config.json:

{
  "mcpServers": {
    "ahk": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": ["C:\\Users\\YourUsername\\path\\to\\ahk-mcp\\dist\\index.js"],
      "env": {
        "NODE_ENV": "production",
        "AHK_MCP_LOG_LEVEL": "warn",
        "AHK_MCP_TOOLSETS": "core",
        "AHK_MCP_SCRIPT_DIR": "C:\\Users\\YourUsername\\Documents\\AutoHotkey"
      }
    }
  }
}

Use absolute paths and escape backslashes in JSON. A ready-to-edit template is in .mcp.example.json.

Claude Code on Windows

From the repo root in PowerShell:

powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\setup-claude-code.ps1

It builds the server, registers it with Claude Code as ahk, and sets up permissions, MCP timeouts and an AutoHotkey /Validate hook for edited .ahk files. Add -WhatIf to preview. Options and troubleshooting: docs/CLAUDE_CODE_WINDOWS.md.

File Access

File tools only read and write inside allowed directories: the client's MCP roots, AHK_MCP_SCRIPT_DIR, the scriptDir/searchDirs set with AHK_Config, the server's working directory, and AHK_MCP_ALLOWED_DIRS. Paths are checked after resolving symlinks, and writes through a symlink are refused.

Variable

Effect

AHK_MCP_ALLOWED_DIRS

Extra allowed folders, ;-separated (Windows or POSIX paths)

AHK_MCP_UNRESTRICTED_PATHS=1

Turn off the allowlist (the symlink guard stays on)

AHK_MCP_ALLOW_REMOTE_DEBUG=1

Let AHK_Debug_Agent listen on / forward to non-loopback hosts

AHK_MCP_TRANSPORT=http

Serve Streamable HTTP instead of stdio (same as --http)

Configure AutoHotkey Path and Startup Behavior

Use AHK_Config to set the executable path and non-blocking startup behavior:

{
  "action": "set",
  "ahkPath": "C:\\Program Files\\AutoHotkey\\v2\\AutoHotkey64.exe",
  "waitForStdoutLine": true,
  "stdoutLineTimeoutMs": 300
}

This is used by AHK_Run (and AHK_Cloud_Validate path resolution).

Tools and toolsets

Every tool a server lists costs context in every session, so only the core toolset is listed by default. Pick toolsets with AHK_MCP_TOOLSETS (comma-separated, or all), or at runtime with AHK_Settings (enable_toolset, disable_toolset, reset_toolsets); the server then sends tools/list_changed. AHK_Settings is always listed.

Toolset

Tools

core (default)

AHK_Check, AHK_Navigate, AHK_File_View, AHK_File_List, AHK_File_Active, AHK_File_Edit, AHK_File_Create, AHK_Run, AHK_Doc_Search, AHK_Eval, AHK_Config, AHK_Settings

debug

AHK_Debug_DBGp, AHK_Debug_Agent, AHK_Cloud_Validate (runs the code)

library

AHK_Library_List, AHK_Library_Info, AHK_Library_Import, AHK_Library_Search

uia

uia_windows, uia_tree, uia_find, uia_element, uia_under_cursor, uia_highlight

extras

AHK_VSCode_Open, AHK_VSCode_Problems, AHK_Analytics, AHK_Tools_Search

legacy

Superseded tools kept for old prompts: AHK_Diagnostics, AHK_Analyze, AHK_LSP, AHK_Lint, AHK_THQBY_Document_Symbols, AHK_Workflow_Analyze_Fix_Run, AHK_File_Edit_Small, AHK_File_Edit_Advanced, AHK_File_Recent, AHK_File_Detect, AHK_Context_Injector, AHK_Process_Request, AHK_Smart_Orchestrator, AHK_Summary, AHK_Prompts, AHK_Repl_Reset

  • AHK_Check replaces the analysis tools. It runs up to three engines: AutoHotkey itself with /Validate (loads the script without running it: the authoritative load-time errors), THQBY's language server, and built-in static checks. Static errors become warnings when an authoritative engine ran. Results come back as text and as structuredContent.

  • AHK_Navigate does symbols, definition, references, hover, workspace_symbols and rename through one long-lived THQBY process. Without THQBY, symbols, definition and references fall back to a text search marked approximate. Rename previews by default.

  • AHK_Eval { "reset": true } replaces AHK_Repl_Reset.

Development Commands

npm run build
npm run clean
npm run lint
npm run test
npm run test:integration
npm run smoke:mcp
npm run smoke:http

Documentation

  • docs/README.md

  • docs/QUICK_START.md

  • docs/QUICKREFERENCE.md

  • docs/MCP_TRANSPORT_COMPATIBILITY.md

  • docs/ARCHITECTURE_DIAGRAMS.md

  • docs/RELEASE_NOTES.md

Contributing

See CONTRIBUTING.md and AGENTS.md.

License

MIT. See LICENSE.

Available Tools

32 tools
AHK_AnalyticsA
Read-onlyIdempotent

View tool usage analytics and performance metrics. Track success rates, execution times, common errors, and usage patterns across all MCP tools. Actions: summary (overall stats), tool_stats (specific tool), recent (recent calls), export (JSON data), clear (reset). Use to diagnose tool issues or optimize workflows.

Inputs: action, toolName, limit.

AHK_AnalyzeB
Read-onlyIdempotent

Ahk analyze Analyzes AutoHotkey v2 scripts and provides contextual information about functions, variables, classes, and other elements used in the code. Accepts direct code or a file path (falls back to active file).

Inputs: code, filePath, includeDocumentation, includeUsageExamples, +4 more.

AHK_Cloud_ValidateA
Destructive

Validate AHK v2 code with optional watch mode for auto-validation on save.

Modes:

  • validate: One-shot validation of code snippet

  • watch: Auto-validate file on every save

Examples:

  • Validate code: { "code": "MsgBox(\"Hi\")\nExitApp" }

  • Validate file: { "filePath": "C:\\Scripts\\test.ahk" }

  • Start watching: { "mode": "watch", "filePath": "C:\\Scripts\\test.ahk" }

  • Stop watching: { "mode": "watch", "enabled": false }

Error Patterns Detected:

  • Syntax errors (line number + message)

  • Runtime errors (Error, ValueError, TypeError, etc.)

  • Unset variable references

Inputs: mode, code, filePath, enabled, +2 more.

AHK_ConfigC
Read-only

Ahk config Get/Set MCP configuration for script directories, AutoHotkey executable path, and VS Code workspace.

Inputs: action, scriptDir, searchDirs, ahkPath, +1 more.

AHK_Context_InjectorC
Read-onlyIdempotent

Ahk context injector Analyzes user prompts and LLM thinking to automatically inject relevant AutoHotkey v2 documentation context.

Inputs: userPrompt (required), llmThinking, contextType, maxItems, +1 more.

AHK_Debug_AgentC
Destructive

Ahk debug agent Starts a TCP listener for AutoHotkey /Debug and optionally proxies to a real debug adapter while capturing traffic.

Inputs: mode, listenHost, listenPort, listenPorts, +6 more.

AHK_Debug_DBGpB
Destructive

AutoHotkey v2 debugger via DBGp protocol. Enables autonomous debugging: capture errors, analyze them, and auto-apply fixes.

Actions:

  • start: Start DBGp listener (waits for AHK /Debug connection)

  • stop: Stop DBGp listener

  • status: Get connection status

  • run: Continue execution

  • step_into/step_over/step_out: Step debugging

  • capture_error: Wait for next error with full context

  • analyze_error: Build analysis prompt from error

  • apply_fix: Auto-apply code fix to file

  • list_errors/clear_errors: Manage error queue

  • get_source: Get source lines around a line

  • breakpoint_set/remove/list: Manage breakpoints

  • variables_get: Get variables (context: 0=local, 1=global)

  • evaluate: Evaluate expression

  • stack_trace: Get call stack

Inputs: action (required), port, timeout, file, +9 more.

AHK_File_ActiveA
Read-only

Ahk file DETECT AND SET ACTIVE FILE FOR EDITING - Use this immediately when user mentions any .ahk file path. This enables all other editing tools to work on the specified file. Essential first step before any file modifications.

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: action, path, text.

AHK_File_CreateA
Destructive

Create a new AutoHotkey v2 script on disk with full path interception support.

• Validates .ahk extension (case-insensitive) • Automatically creates parent directories (configurable) • Prevents accidental overwrite unless explicitly allowed • Supports dry-run previews and active file management

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: filePath (required), content, overwrite, createDirectories, +2 more.

AHK_File_DetectC
Read-only

Ahk auto file Automatically detect and set active AutoHotkey file from user text

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: text (required), autoSet, scriptDir.

AHK_File_EditA
Destructive

Primary AutoHotkey file editor for direct on-disk modifications. Handles search/replace, line inserts, deletes, appends, prepends, and even new file creation. Supports regex, automatic backups, dry-run previews, and optional script execution after edits.

Common Usage

{
  "action": "replace",
  "search": "oldClassName",
  "newContent": "NewClassName",
  "filePath": "C:\\Scripts\\MyAutomation.ahk"
}

Batch Replace with Regex (Preview First)

{
  "action": "replace",
  "search": "class\\s+(\\w+)",
  "newContent": "class Refactored$1",
  "regex": true,
  "all": true,
  "dryRun": true
}

Shows a DRY RUN report instead of touching the file.

Create New Script

{
  "action": "create",
  "filePath": "C:\\AHK\\Helpers\\ClipboardTools.ahk",
  "newContent": "class ClipboardTools {\n    __New() {\n        ; init\n    }\n}"
}

What to Avoid

  • Using deprecated "content" parameter - migrate to "newContent"

  • Running batch replacements without dryRun: true first

  • Disabling backups on production files unless absolutely necessary

See also: AHK_File_Edit_Advanced, AHK_File_Edit_Small, AHK_File_View, AHK_Smart_Orchestrator

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: action, search, newContent, content, +10 more.

AHK_File_Edit_AdvancedA
Destructive

Ahk file editor PRIMARY FILE EDITING TOOL - Use this IMMEDIATELY when user mentions a .ahk file path and wants to modify it. This tool automatically detects the file, sets it active, and helps determine the best editing approach. ALWAYS use this instead of generating code blocks when a file path is provided.

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: filePath (required), changes (required), action, dryRun.

AHK_File_Edit_SmallA
Destructive

Token-efficient editor for small, targeted changes. Ideal when you need a lightweight replace or line edit without loading the full diff engine. Supports regex and literal replacements, multi-file batches, optional diff previews, and dry-run mode.

Common Replace

{
  "action": "replace_literal",
  "file": "C:\\Scripts\\MyScript.ahk",
  "find": "Sleep(500)",
  "replace": "Sleep(100)"
}

Insert Before a Line (Preview)

{
  "action": "line_insert_before",
  "file": "C:\\Scripts\\TrayMenu.ahk",
  "line": 42,
  "newContent": "    TrayTip(\"Menu refreshed\")",
  "dryRun": true
}

Multi-File Regex Replace

{
  "action": "replace_regex",
  "files": ["core.ahk", "ui.ahk"],
  "find": "SetTimer\\((\\w+), 5000\\)",
  "replace": "SetTimer($1, 10000)",
  "all": true
}

What to Avoid

  • Mixing deprecated "content" parameter with newContent - prefer newContent

  • Running multi-file edits without dryRun: true to preview

  • Forgetting backup: true when touching critical scripts

See also: AHK_File_Edit (full-featured editor), AHK_File_Edit_Diff (complex diffs), AHK_File_Edit_Advanced

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: action, file, files, find, +12 more.

AHK_File_ListA
Read-only

List AHK files with optional name search. Use nameFilter with wildcards (e.g., "Hotstring") to find specific files.

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: directory, nameFilter, recursive, includeDirectories, +8 more.

AHK_File_RecentB
Read-only

Ahk recent scripts List the most recent AutoHotkey scripts from configured directories. Supports overriding A_ScriptDir.

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: scriptDir, extraDirs, offset, limit, +1 more.

AHK_File_ViewA
Read-only

View AHK files with structure analysis. Modes: structured (default), raw, summary, outline. Supports line ranges and syntax highlighting.

šŸ“Ž Active File: Not set. Use AHK_File_Active to select a target.

Inputs: file, mode, lineStart, lineEnd, +5 more.

AHK_Library_ImportA
Read-onlyIdempotent

Generate #Include statements for importing a library. Resolves dependencies and provides correct import order. Supports different #Include formats (angle-brackets, relative, absolute).

Inputs: name (required), include_dependencies, format.

AHK_Library_InfoB
Read-onlyIdempotent

Get detailed information about a specific AutoHotkey library. Returns metadata, documentation, classes, functions, and dependencies.

Inputs: name (required), include_dependencies.

AHK_Library_ListA
Read-onlyIdempotent

List and search AutoHotkey libraries in the catalog. Search by query string or filter by category. Returns library names with descriptions.

Inputs: query, category.

AHK_LintA
Read-onlyIdempotent

Lint AHK v2 scripts. Levels: fast (syntax), standard (default, +structure), thorough (+semantics). Supports autoFix with dryRun preview.

Inputs: filePath, level, includeStructure, forceRefresh, +3 more.

AHK_LSPA
Read-onlyIdempotent

Provides LSP-like analysis and auto-fixing for AutoHotkey v2 code. Accepts direct code or a file path (falls back to active file).

Inputs: code, filePath, mode, fixLevel, +3 more.

AHK_Process_RequestC
Destructive

Ahk process request Process user requests that contain file paths and instructions for AutoHotkey scripts

Inputs: input (required), autoExecute, defaultAction.

AHK_PromptsB
Read-onlyIdempotent

AHK Prompts Returns a set of built-in AHK v2 prompt templates for code generation and learning.

Inputs: no named parameters.

AHK_SettingsD
Read-only

Ahk settings Manage tool settings and enable/disable features

Inputs: action, tool, settings.

AHK_Smart_OrchestratorB
Destructive

Orchestrates AHK file operations with smart caching. Chains detect→analyze→view/edit. Operations: view, edit, analyze.

Inputs: intent (required), filePath, targetEntity, operation, +2 more.

AHK_THQBY_Document_SymbolsA
Read-onlyIdempotent

Document symbols via THQBY AutoHotkey v2 LSP (vscode-autohotkey2-lsp). Returns classes, methods, functions, variables, hotkeys, and labels using the external LSP server. Accepts direct code or a file path (falls back to active file).

Inputs: code, filePath, timeoutMs.

AHK_VSCode_OpenA
Read-only

Open the most recently edited AutoHotkey file (or a specified file) in VS Code. Defaults to the last edited file recorded by MCP and falls back to the active file. Supports WSL environments and can target a specific workspace window.

Inputs: filePath, line, column, reuseWindow, +2 more.

AHK_VSCode_ProblemsB
Read-onlyIdempotent

Ahk vscode problems Reads a VS Code Problems list (from file or provided JSON) and summarizes AutoHotkey LSP diagnostics.

Inputs: path, content, severity, fileIncludes, +4 more.

AHK_Workflow_Analyze_Fix_RunA
Destructive

Analyze→fix→verify→run workflow in one call. Fix types: syntax, style, performance, all. Use dryRun to preview, summaryOnly for minimal tokens.

Inputs: filePath (required), autoFix, runAfterFix, fixTypes, +2 more.

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 32 tools

    Disambiguation2/5

    Multiple tools have overlapping purposes, causing significant ambiguity. For example, AHK_File_Edit, AHK_File_Edit_Advanced, AHK_File_Edit_Small, and AHK_Smart_Orchestrator all handle file editing with unclear distinctions, and AHK_Analyze, AHK_Lint, AHK_LSP, and AHK_Cloud_Validate all perform code analysis or validation. The descriptions often cross-reference each other, indicating poor separation of concerns.

    Naming Consistency5/5

    Tool names follow a highly consistent pattern throughout, using a clear 'AHK_' prefix followed by a descriptive noun or noun phrase (e.g., AHK_File_Edit, AHK_Doc_Search, AHK_Library_List). There are no deviations in style (e.g., no camelCase or mixed conventions), making the naming predictable and easy to parse.

    Tool Count2/5

    With 32 tools, the count is excessive for the domain of AutoHotkey script management, leading to bloat and redundancy. Many tools could be consolidated (e.g., multiple file editors and analyzers), and the high number increases cognitive load without clear added value, indicating poor scoping.

    Completeness4/5

    The tool set covers a broad range of operations for AutoHotkey v2 scripting, including file management, code analysis, debugging, documentation, library handling, and integration with VS Code. Minor gaps exist, such as no explicit tool for deleting files or managing script execution beyond debugging, but core workflows are well-supported.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers