[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-steipete--macos-automator-mcp":3,"tool-steipete--macos-automator-mcp":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",157379,2,"2026-04-15T23:32:42",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":78,"owner_email":79,"owner_twitter":73,"owner_website":80,"owner_url":81,"languages":82,"stars":99,"forks":100,"last_commit_at":101,"license":102,"difficulty_score":10,"env_os":103,"env_gpu":104,"env_ram":104,"env_deps":105,"category_tags":110,"github_topics":111,"view_count":32,"oss_zip_url":111,"oss_zip_packed_at":111,"status":17,"created_at":112,"updated_at":113,"faqs":114,"releases":115},7892,"steipete\u002Fmacos-automator-mcp","macos-automator-mcp","An MCP server to run AppleScript and JXA (JavaScript for Automation) to macOS.","macos-automator-mcp 是一款专为 macOS 设计的模型上下文协议（MCP）服务器，旨在让 AI 助手能够直接执行 AppleScript 和 JavaScript for Automation (JXA) 脚本。它解决了大语言模型通常只能“动口”无法“动手”的痛点，赋予 AI 实际操作系统的能力，如自动点击按钮、切换深色模式、从浏览器提取数据或控制各类应用程序。\n\n该工具内置了超过 200 种预置自动化场景，用户无需手动编写复杂代码即可调用，极大地降低了自动化门槛。其核心技术亮点在于通过标准的 MCP 接口，将本地 Mac 的系统控制权安全地开放给 AI 工作流，实现了从对话到行动的闭环。不过，出于系统安全考虑，首次使用时需在 macOS 设置中手动授予运行环境（如终端）相应的“自动化”与“辅助功能”权限。\n\nmacos-automator-mcp 特别适合希望提升工作效率的开发者、自动化测试人员以及热衷于探索 AI 代理能力的极客用户。对于普通用户而言，若希望通过自然语言指令让电脑自动完成重复性任务，它也是一个强大的桥梁工具，让 Mac 真正成为懂你意图的智能助手","macos-automator-mcp 是一款专为 macOS 设计的模型上下文协议（MCP）服务器，旨在让 AI 助手能够直接执行 AppleScript 和 JavaScript for Automation (JXA) 脚本。它解决了大语言模型通常只能“动口”无法“动手”的痛点，赋予 AI 实际操作系统的能力，如自动点击按钮、切换深色模式、从浏览器提取数据或控制各类应用程序。\n\n该工具内置了超过 200 种预置自动化场景，用户无需手动编写复杂代码即可调用，极大地降低了自动化门槛。其核心技术亮点在于通过标准的 MCP 接口，将本地 Mac 的系统控制权安全地开放给 AI 工作流，实现了从对话到行动的闭环。不过，出于系统安全考虑，首次使用时需在 macOS 设置中手动授予运行环境（如终端）相应的“自动化”与“辅助功能”权限。\n\nmacos-automator-mcp 特别适合希望提升工作效率的开发者、自动化测试人员以及热衷于探索 AI 代理能力的极客用户。对于普通用户而言，若希望通过自然语言指令让电脑自动完成重复性任务，它也是一个强大的桥梁工具，让 Mac 真正成为懂你意图的智能助手。","# macOS Automator MCP 🤖 - Your Friendly Neighborhood RoboScripter™\n\n![macOS Automator MCP Server](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteipete_macos-automator-mcp_readme_ed918c17c919.png)\n\n## 🎯 Mission Control: Teaching Robots to Click Buttons Since 2024\n\nWelcome to the automated future where your Mac finally does what you tell it to! This Model Context Protocol (MCP) server transforms your AI assistant into a silicon-based intern who actually knows AppleScript and JavaScript for Automation (JXA). \n\nNo more copy-pasting scripts like a caveman - let the robots handle the robot work! Our knowledge base contains over 200 pre-programmed automation sequences, loaded faster than you can say \"Hey Siri, why don't you work like this?\"\n\n## 🚀 Why Let Robots Run Your Mac?\n- **Remote Control Reality**: Execute AppleScript\u002FJXA scripts via MCP - it's like having a tiny robot inside your Mac!\n- **Knowledge Base of Power**: 200+ pre-built automation recipes. From \"toggle dark mode\" to \"extract all URLs from Safari\" - we've got your robot needs covered.\n- **App Whisperer**: Control any macOS application programmatically. Make Finder dance, Safari sing, and Terminal... well, terminate things.\n- **AI Workflow Integration**: Connect your Mac to the AI revolution. Your LLM can now actually DO things instead of just talking about them!\n\n## 🔧 Robot Requirements (Prerequisites)\n- **Node.js** (version >=18.0.0) - Because even robots need a runtime\n- **macOS** - Sorry Windows users, this is an Apple-only party 🍎\n- **⚠️ CRITICAL: Permission to Automate (Your Mac's Trust Issues):**\n    - The application running THIS MCP server (e.g., Terminal, your Node.js application) requires explicit user permissions on the macOS machine where the server is running.\n    - **Automation Permissions:** To control other applications (Finder, Safari, Mail, etc.).\n        - Go to: System Settings > Privacy & Security > Automation.\n        - Find the application running the server (e.g., Terminal) in the list.\n        - Ensure it has checkboxes ticked for all applications it needs to control.\n        - See example: `docs\u002Fautomation-permissions-example.png` (placeholder image).\n    - **Accessibility Permissions:** For UI scripting via \"System Events\" (e.g., simulating clicks, keystrokes).\n        - Go to: System Settings > Privacy & Security > Accessibility.\n        - Add the application running the server (e.g., Terminal) to the list and ensure its checkbox is ticked.\n    - First-time attempts to control a new application or use accessibility features may still trigger a macOS confirmation prompt, even if pre-authorized. The server itself cannot grant these permissions.\n\n## 🏃‍♂️ Quick Start: Release the Robots!\n\nThe easiest way to deploy your automation army is via `npx`. No installation needed - just pure robot magic!\n\nAdd this to your MCP client's `mcp.json` and watch the automation begin:\n\n```json\n{\n  \"mcpServers\": {\n    \"macos_automator\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@steipete\u002Fmacos-automator-mcp@latest\"\n      ]\n    }\n  }\n}\n```\n\n### 🛠️ Robot Workshop Mode (Local Development)\n\nWant to tinker with the robot's brain? Clone the repo and become a robot surgeon!\n\n1.  **Clone the repository:**\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp.git\n    cd macos-automator-mcp\n    npm install # Ensure dependencies are installed\n    ```\n\n2.  **Configure your MCP client:**\n    Update your MCP client's configuration to point to the absolute path of the `start.sh` script within your cloned repository.\n\n    Example `mcp.json` configuration snippet:\n    ```json\n    {\n      \"mcpServers\": {\n        \"macos_automator_local\": {\n          \"command\": \"\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fcloned\u002Fmacos-automator-mcp\u002Fstart.sh\",\n          \"env\": {\n            \"LOG_LEVEL\": \"DEBUG\"\n          }\n        }\n      }\n    }\n    ```\n    **Important:** Replace `\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Fcloned\u002Fmacos-automator-mcp\u002Fstart.sh` with the correct absolute path on your system.\n\n    The `start.sh` script will automatically use `tsx` to run the TypeScript source directly if a compiled version is not found, or run the compiled version from `dist\u002F` if available. It respects the `LOG_LEVEL` environment variable.\n\n    **Note for Developers:** The `start.sh` script, particularly if modified to remove any pre-existing compiled `dist\u002Fserver.js` before execution (e.g., by adding `rm -f dist\u002Fserver.js`), is designed to ensure you are always running the latest TypeScript code from the `src\u002F` directory via `tsx`. This is ideal for development to prevent issues with stale builds. For production deployment (e.g., when published to npm), a build process would typically create a definitive `dist\u002Fserver.js` which would then be the entry point for the published package.\n\n## 🤖 Robot Toolbox\n\n### 1. `execute_script` - The Script Launcher 9000\n\nYour robot's primary weapon for macOS domination. Feed it AppleScript or JXA, and watch the magic happen! \nScripts can be provided as inline content (`script_content`), an absolute file path (`script_path`), or by referencing a script from the built-in knowledge base using its unique `kb_script_id`.\n\n**Script Sources (mutually exclusive):**\n-   `script_content` (string): Raw script code.\n-   `script_path` (string): Absolute POSIX path to a script file (e.g., `.applescript`, `.scpt`, `.js`).\n-   `kb_script_id` (string): The ID of a pre-defined script from the server's knowledge base. Use the `get_scripting_tips` tool to discover available script IDs and their functionalities.\n\n**Language Specification:**\n-   `language` (enum: 'applescript' | 'javascript', optional): Specify the language.\n    -   If using `kb_script_id`, the language is inferred from the knowledge base script.\n    -   If using `script_content` or `script_path` and `language` is omitted, it defaults to 'applescript'.\n\n**Passing Inputs to Scripts:**\n-   `arguments` (array of strings, optional): \n    -   For `script_path`: Passed as standard arguments to the script's `on run argv` (AppleScript) or `run(argv)` (JXA) handler.\n    -   For `kb_script_id`: Used if the pre-defined script is designed to accept positional string arguments (e.g., replaces placeholders like `--MCP_ARG_1`, `--MCP_ARG_2`). Check the script's `argumentsPrompt` from `get_scripting_tips`.\n-   `input_data` (JSON object, optional): \n    -   Primarily for `kb_script_id` scripts designed to accept named, structured inputs.\n    -   Values from this object replace placeholders in the script (e.g., `--MCP_INPUT:yourKeyName`). See `argumentsPrompt` from `get_scripting_tips`.\n    -   Values (strings, numbers, booleans, simple arrays\u002Fobjects) are converted to their AppleScript literal equivalents.\n\n**Other Options:**\n-   `timeout_seconds` (integer, optional, default: 60): Maximum execution time.\n-   `output_format_mode` (enum, optional, default: 'auto'): Controls `osascript` output formatting flags.\n    *   `'auto'`: (Default) Uses human-readable for AppleScript (`-s h`), and direct output (no `-s` flags) for JXA.\n    *   `'human_readable'`: Forces `-s h` (human-readable output, mainly for AppleScript).\n    *   `'structured_error'`: Forces `-s s` (structured error reporting, mainly for AppleScript).\n    *   `'structured_output_and_error'`: Forces `-s ss` (structured output for main result and errors, mainly for AppleScript).\n    *   `'direct'`: No `-s` flags are used (recommended for JXA, also the behavior for JXA in `auto` mode).\n-   `include_executed_script_in_output` (boolean, optional, default: false): If true, the output will include the full script content (after any placeholder substitutions for knowledge base scripts) or the script path that was executed. This is appended as an additional text part in the output content array.\n-   `include_substitution_logs` (boolean, optional, default: false): If true, detailed logs of placeholder substitutions performed on knowledge base scripts are included in the output. This is useful for debugging how `input_data` and `arguments` are processed and inserted into the script. The logs are prepended to the script output on success or appended to the error message on failure.\n-   `report_execution_time` (boolean, optional, default: false): If `true`, an additional message with the formatted script execution time will be included in the response content array.\n\n**SECURITY WARNING & MACOS PERMISSIONS:** (Same critical warnings as before about arbitrary script execution and macOS Automation\u002FAccessibility permissions).\n\n**Examples:**\n-   (Existing examples for inline\u002Ffile path remain relevant)\n-   **Using Knowledge Base Script by ID:**\n    ```json\n    {\n      \"toolName\": \"execute_script\",\n      \"input\": {\n        \"kb_script_id\": \"safari_get_active_tab_url\",\n        \"timeout_seconds\": 10\n      }\n    }\n    ```\n-   **Using Knowledge Base Script by ID with `input_data`:**\n    ```json\n    {\n      \"toolName\": \"execute_script\",\n      \"input\": {\n        \"kb_script_id\": \"finder_create_folder_at_path\",\n        \"input_data\": {\n          \"folder_name\": \"New MCP Folder\",\n          \"parent_path\": \"~\u002FDesktop\"\n        }\n      }\n    }\n    ```\n\n**Response Format:**\n\nThe `execute_script` tool returns a response in the following format:\n\n```typescript\n{\n  content: Array\u003C{\n    type: 'text';\n    text: string;\n  }>;\n  isError?: boolean;\n}\n```\n\n- `content`: An array of text content items containing the script output\n- `isError`: (boolean, optional) Set to `true` when the script execution produced an error. This flag is set when:\n  - The script output (stdout) starts with \"Error\" (case-insensitive)\n  - This helps clients easily determine if the execution failed without parsing the output text\n\n**Example Response (Success):**\n```json\n{\n  \"content\": [{\n    \"type\": \"text\",\n    \"text\": \"Script executed successfully\"\n  }]\n}\n```\n\n**Example Response (Error):**\n```json\n{\n  \"content\": [{\n    \"type\": \"text\",\n    \"text\": \"Error: Cannot find application 'Safari'\"\n  }],\n  \"isError\": true\n}\n```\n\n### 2. `get_scripting_tips` - The Robot's Encyclopedia\n\nYour personal automation librarian! Searches through 200+ pre-built scripts faster than you can Google \"how to AppleScript\". Perfect for when your robot needs inspiration.\n\n**Arguments:**\n-   `list_categories` (boolean, optional, default: false): If true, returns only the list of available knowledge base categories and their descriptions. Overrides other parameters.\n-   `category` (string, optional): Filters tips by a specific category ID (e.g., \"finder\", \"safari\").\n-   `search_term` (string, optional): Searches for a keyword within tip titles, descriptions, script content, keywords, or IDs.\n-   `refresh_database` (boolean, optional, default: false): If true, forces a reload of the entire knowledge base from disk before processing the request. This is useful during development if you are actively modifying knowledge base files and want to ensure the latest versions are used without restarting the server.\n-   `limit` (integer, optional, default: 10): Maximum number of results to return.\n\n**Output:**\n-   Returns a Markdown formatted string containing the requested tips, including their title, description, script content, language, runnable ID (if applicable), argument prompts, and notes.\n\n**Example Usage:**\n-   List all categories:\n    `{ \"toolName\": \"get_scripting_tips\", \"input\": { \"list_categories\": true } }`\n-   Get tips for \"safari\" category:\n    `{ \"toolName\": \"get_scripting_tips\", \"input\": { \"category\": \"safari\" } }`\n-   Search for tips related to \"clipboard\":\n    `{ \"toolName\": \"get_scripting_tips\", \"input\": { \"search_term\": \"clipboard\" } }`\n\n### 3. `accessibility_query` - The UI X-Ray Vision\n\nGive your robot superhero powers to see and click ANY button in ANY app! This tool peers into the soul of macOS applications using the accessibility framework. Powered by the mystical `ax` binary, it's like having X-ray vision for user interfaces.\n\nThe `ax` binary, and therefore this tool, can accept its JSON command input in multiple ways:\n1.  **Direct JSON String Argument:** If `ax` is invoked with a single command-line argument that is not a valid file path, it will attempt to parse this argument as a complete JSON string.\n2.  **File Path Argument:** If `ax` is invoked with a single command-line argument that is a valid file path, it will read the complete JSON command from this file.\n3.  **STDIN:** If `ax` is invoked with no command-line arguments, it will read the complete JSON command (which can be multi-line) from standard input.\n\nThis tool exposes the complete macOS accessibility API capabilities, allowing detailed inspection of UI elements and their properties. It's particularly useful for automating interactions with applications that don't have robust AppleScript support or when you need to inspect the UI structure in detail.\n\n**Input Parameters:**\n\n*   `command` (enum: 'query' | 'perform', required): The operation to perform.\n    *   `query`: Retrieves information about UI elements.\n    *   `perform`: Executes an action on a UI element (like clicking a button).\n\n*   `locator` (object, required): Specifications to find the target element(s).\n    *   `app` (string, required): The application to target, specified by either bundle ID or display name (e.g., \"Safari\", \"com.apple.Safari\").\n    *   `role` (string, required): The accessibility role of the target element (e.g., \"AXButton\", \"AXStaticText\").\n    *   `match` (object, required): Key-value pairs of attributes to match. Can be empty (`{}`) if not needed.\n    *   `navigation_path_hint` (array of strings, optional): Path to navigate within the application hierarchy (e.g., `[\"window[1]\", \"toolbar[1]\"]`).\n\n*   `return_all_matches` (boolean, optional): When `true`, returns all matching elements rather than just the first match. Default is `false`.\n\n*   `attributes_to_query` (array of strings, optional): Specific attributes to query for matched elements. If not provided, common attributes will be included. Examples: `[\"AXRole\", \"AXTitle\", \"AXValue\"]`\n\n*   `required_action_name` (string, optional): Filter elements to only those supporting a specific action (e.g., \"AXPress\" for clickable elements).\n\n*   `action_to_perform` (string, optional, required when `command=\"perform\"`): The accessibility action to perform on the matched element (e.g., \"AXPress\" to click a button).\n\n*   `report_execution_time` (boolean, optional): If true, the tool will return an additional message containing the formatted script execution time. Defaults to false.\n\n*   `limit` (integer, optional): Maximum number of lines to return in the output. Defaults to 500. Output will be truncated if it exceeds this limit.\n\n*   `max_elements` (integer, optional): For `return_all_matches: true` queries, this specifies the maximum number of UI elements the `ax` binary will fully process and return attributes for. If omitted, an internal default (e.g., 200) is used. This helps manage performance when querying UIs with a very large number of matching elements (like numerous text fields on a complex web page). This is different from `limit`, which truncates the final text output based on lines.\n\n*   `debug_logging` (boolean, optional): If true, enables detailed debug logging from the underlying `ax` binary. This diagnostic information will be included in the response, which can be helpful for troubleshooting complex queries or unexpected behavior. Defaults to false.\n\n*   `output_format` (enum: 'smart' | 'verbose' | 'text_content', optional, default: 'smart'): Controls the format and verbosity of the attribute output from the `ax` binary.\n    *   `'smart'`: (Default) Optimized for readability. Omits attributes with empty or placeholder values. Returns key-value pairs.\n    *   `'verbose'`: Maximum detail. Includes all attributes, even empty\u002Fplaceholders. Key-value pairs. Best for debugging element properties.\n    *   `'text_content'`: Highly compact for text extraction. Returns only concatenated text values of common textual attributes (e.g., AXValue, AXTitle). No keys are returned. Ideal for quickly getting all text from elements; the `attributes_to_query` parameter is ignored in this mode.\n\n**Example Queries (Note: key names have changed to snake_case):**\n\n1.  **Find all text elements in the front Safari window:**\n    ```json\n    {\n      \"command\": \"query\",\n      \"return_all_matches\": true,\n      \"locator\": {\n        \"app\": \"Safari\",\n        \"role\": \"AXStaticText\",\n        \"match\": {},\n        \"navigation_path_hint\": [\"window[1]\"]\n      }\n    }\n    ```\n\n2.  **Find and click a button with a specific title:**\n    ```json\n    {\n      \"command\": \"perform\",\n      \"locator\": {\n        \"app\": \"System Settings\",\n        \"role\": \"AXButton\",\n        \"match\": {\"AXTitle\": \"General\"}\n      },\n      \"action_to_perform\": \"AXPress\"\n    }\n    ```\n\n3.  **Get detailed information about the focused UI element:**\n    ```json\n    {\n      \"command\": \"query\",\n      \"locator\": {\n        \"app\": \"Mail\",\n        \"role\": \"AXTextField\",\n        \"match\": {\"AXFocused\": \"true\"}\n      },\n      \"attributes_to_query\": [\"AXRole\", \"AXTitle\", \"AXValue\", \"AXDescription\", \"AXHelp\", \"AXPosition\", \"AXSize\"]\n    }\n    ```\n\n**Note:** Using this tool requires that the application running this server has the necessary Accessibility permissions in macOS System Settings > Privacy & Security > Accessibility.\n\n## 🎮 Robot Playground: Cool Things Your New Robot Friend Can Do\n\n-   **Application Control (Teaching Apps Who's Boss):**\n    -   Get the current URL from Safari: `{ \"input\": { \"script_content\": \"tell application \\\"Safari\\\" to get URL of front document\" } }`\n    -   Get subjects of unread emails in Mail: `{ \"input\": { \"script_content\": \"tell application \\\"Mail\\\" to get subject of messages of inbox whose read status is false\" } }`\n-   **File System Operations (Digital Housekeeping):**\n    -   List files on the Desktop: `{ \"input\": { \"script_content\": \"tell application \\\"Finder\\\" to get name of every item of desktop\" } }`\n    -   Create a new folder: `{ \"input\": { \"script_content\": \"tell application \\\"Finder\\\" to make new folder at desktop with properties {name:\\\"Robot's Secret Stash\\\"}\" } }`\n-   **System Interactions (Mac Mind Control):**\n    -   Display a system notification: `{ \"input\": { \"script_content\": \"display notification \\\"🤖 Beep boop! Task complete!\\\" with title \\\"Robot Report\\\"\" } }`\n    -   Set system volume: `{ \"input\": { \"script_content\": \"set volume output volume 50\" } }` (0-100)\n    -   Get current clipboard content: `{ \"input\": { \"script_content\": \"the clipboard\" } }`\n\n## 🔧 When Robots Rebel (Troubleshooting)\n\n-   **\"Access Denied\" Drama:** Your robot lacks permissions! Check System Settings > Privacy & Security. Give your Terminal the keys to the kingdom.\n-   **Script Syntax Sadness:** Even robots make typos. Test scripts in Script Editor first - it's like spell-check for automation.\n-   **Timeout Tantrums:** Some tasks take time. Increase `timeout_seconds` if your robot needs more than 60 seconds to complete its mission.\n-   **File Not Found Fiasco:** Robots need absolute paths, not relative ones. No shortcuts in robot land!\n-   **JXA Output Oddities:** JavaScript robots are picky. Use `output_format_mode: 'direct'` or let `'auto'` mode handle it.\n\n## 🎛️ Robot Control Panel (Configuration)\n\nFine-tune your robot's behavior with these environment variables:\n\n-   **`LOG_LEVEL`**: How chatty should your robot be?\n    -   `DEBUG`: Robot tells you EVERYTHING (TMI mode)\n    -   `INFO`: Normal robot chatter\n    -   `WARN`: Only important stuff\n    -   `ERROR`: Silent mode (robot speaks only when things explode)\n    -   Example: `LOG_LEVEL=DEBUG npx @steipete\u002Fmacos-automator-mcp@latest`\n\n-   **`KB_PARSING`**: When should the robot load its brain?\n    -   `lazy` (default): Loads knowledge on-demand (fast startup, lazy robot)\n    -   `eager`: Loads everything at startup (slower start, ready-to-go robot)\n    -   Example: `KB_PARSING=eager .\u002Fstart.sh`\n\n## 👨‍🔬 Robot Scientists Welcome!\n\nWant to upgrade your robot? Check out [DEVELOPMENT.md](DEVELOPMENT.md) for the full technical manual on teaching new tricks to your automation assistant.\n\n## 🧠 Teach Your Robot New Tricks (Local Knowledge Base)\n\nYour robot can learn custom skills! Create your own automation recipes and watch your robot evolve.\n\nBy default, the application will look for this local knowledge base at `~\u002F.macos-automator\u002Fknowledge_base`.\nYou can customize this path by setting the `LOCAL_KB_PATH` environment variable.\n\n**Example:**\n\nSuppose you have a local knowledge base at `\u002FUsers\u002Fyourname\u002Fmy-custom-kb`.\nSet the environment variable:\n`export LOCAL_KB_PATH=\u002FUsers\u002Fyourname\u002Fmy-custom-kb`\n\nOr, if you are running the validator script, you can use the `--local-kb-path` argument:\n`npm run validate:kb -- --local-kb-path \u002FUsers\u002Fyourname\u002Fmy-custom-kb`\n\n**Structure and Overrides:**\n\n*   Your local knowledge base should mirror the category structure of the main `knowledge_base` (e.g., `01_applescript_core`, `05_web_browsers\u002Fsafari`, etc.).\n*   You can add new `.md` tip files or `_shared_handlers` (e.g., `.applescript` or `.js` files).\n*   If a tip ID (either from frontmatter `id:` or generated from filename\u002Fpath) in your local knowledge base matches an ID in the embedded knowledge base, your local version will **override** the embedded one.\n*   Similarly, shared handlers with the same name and language (e.g., `my_utility.applescript`) in your local `_shared_handlers` directory will override any embedded ones with the same name and language within the same category (or globally if you place them at the root of your local KB's `_shared_handlers`).\n*   Category descriptions from `_category_info.md` in your local KB can also override those from the embedded KB for the same category.\n\nThis allows for personalization and extension of the available automation scripts and tips without modifying the core application files.\n\n## 🤝 Join the Robot Revolution!\n\nFound a bug? Got a cool automation idea? Your robot army needs YOU! Submit issues and pull requests to the [GitHub repository](https:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp).\n\n## 💪 Robot Superpowers Showcase\n\nHere's what your new silicon sidekick can do out of the box:\n\n### 🖥️ Terminal Tamer\n- **Command Line Wizardry:** Open new tabs, run commands, capture output - your robot speaks fluent bash!\n  ```\n  { \"input\": { \"kb_script_id\": \"terminal_app_run_command_new_tab\", \"input_data\": { \"command\": \"echo '🤖 Hello World!'\" } } }\n  ```\n\n### 🌐 Browser Bot\n- **Web Automation Master:** Control Chrome and Safari like a puppet master!\n  ```\n  { \"input\": { \"kb_script_id\": \"safari_get_front_tab_url\" } }\n  ```\n- **JavaScript Injection:** Make web pages dance to your robot's tune\n- **Screenshot Sniper:** Capture any webpage faster than you can say \"cheese\"\n\n### ⚙️ System Sorcerer\n- **Dark Mode Toggle:** Because robots have sensitive optical sensors\n  ```\n  { \"input\": { \"kb_script_id\": \"systemsettings_toggle_dark_mode_ui\" } }\n  ```\n- **Clipboard Commander:** Copy, paste, and manipulate like a pro\n- **Notification Ninja:** Send alerts that actually get noticed\n\n### 📁 File System Feng Shui\n- **Folder Creator 3000:** Organize your digital life with robotic precision\n  ```\n  { \"input\": { \"kb_script_id\": \"finder_create_new_folder_desktop\", \"input_data\": { \"folder_name\": \"Robot Paradise\" } } }\n  ```\n- **Text File Telepathy:** Read and write files faster than humanly possible\n\n### 📱 App Whisperer\n- **Calendar Conductor:** Schedule meetings while you sleep\n- **Email Automator:** Send emails without lifting a finger\n- **Music Maestro:** DJ your playlists programmatically\n  ```\n  { \"input\": { \"kb_script_id\": \"music_playback_controls\", \"input_data\": { \"action\": \"play\" } } }\n  ```\n\n🎯 **Pro Tip:** Use `get_scripting_tips` to discover all 200+ automation recipes!\n\n## 📜 Legal Stuff (Robot Rights)\n\nThis project is licensed under the MIT License - which means your robot is free to roam! See the [LICENSE](LICENSE) file for the fine print.\n\n---\n\n🤖 **Remember:** With great automation power comes great responsibility. Use your robot wisely!\n\n\u003Ca href=\"https:\u002F\u002Fglama.ai\u002Fmcp\u002Fservers\u002F@steipete\u002Fmacos-automator-mcp\">\n  \u003Cimg width=\"380\" height=\"200\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteipete_macos-automator-mcp_readme_1d2cbf1e8728.png\" alt=\"macOS Automator Server MCP server\" \u002F>\n\u003C\u002Fa>\n","# macOS Automator MCP 🤖 - 您贴心的机器人脚本员™\n\n![macOS Automator MCP 服务器](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteipete_macos-automator-mcp_readme_ed918c17c919.png)\n\n## 🎯 任务控制中心：自2024年起教机器人点击按钮\n\n欢迎来到自动化未来，您的 Mac 终于能按您说的去做事了！这个模型上下文协议（MCP）服务器会将您的 AI 助手变成一个懂 AppleScript 和 JavaScript for Automation (JXA) 的硅基实习生。\n\n再也不用像原始人一样复制粘贴脚本——让机器人来做机器人该做的事吧！我们的知识库包含超过 200 个预编程的自动化流程，加载速度比您喊出“嘿 Siri，你为什么不这样工作？”还要快！\n\n## 🚀 为什么让机器人来操控您的 Mac？\n- **远程控制现实**：通过 MCP 执行 AppleScript\u002FJXA 脚本——就像在您的 Mac 内部安插了一个小机器人！\n- **强大的知识库**：200 多种预制自动化方案。从“切换深色模式”到“从 Safari 中提取所有 URL”——我们能满足您对机器人的各种需求。\n- **应用调音师**：以编程方式控制任何 macOS 应用程序。让 Finder 跳舞、Safari 唱歌，而 Terminal……嗯，就负责“终结”事情吧。\n- **AI 工作流集成**：将您的 Mac 连接到 AI 革命中。您的大型语言模型现在不仅能“说”，还能真正“做”事情！\n\n## 🔧 机器人要求（先决条件）\n- **Node.js**（版本 >=18.0.0）——因为机器人也需要运行时环境\n- **macOS**——抱歉 Windows 用户，这可是苹果专属派对 🍎\n- **⚠️ 重要：自动化权限（您 Mac 的信任问题）：**\n    - 运行此 MCP 服务器的应用程序（例如终端、您的 Node.js 应用程序）需要在运行服务器的 macOS 设备上获得用户的明确授权。\n    - **自动化权限**：用于控制其他应用程序（Finder、Safari、Mail 等）。\n        - 前往：系统设置 > 隐私与安全性 > 自动化。\n        - 在列表中找到运行服务器的应用程序（例如终端）。\n        - 确保其对所有需要控制的应用程序都勾选了复选框。\n        - 参见示例：`docs\u002Fautomation-permissions-example.png`（占位图）。\n    - **辅助功能权限**：用于通过“系统事件”进行 UI 脚本编写（例如模拟点击、按键操作）。\n        - 前往：系统设置 > 隐私与安全性 > 辅助功能。\n        - 将运行服务器的应用程序（例如终端）添加到列表中，并确保其复选框被勾选。\n    - 即使已提前授权，首次尝试控制新应用程序或使用辅助功能时，仍可能会弹出 macOS 的确认提示。服务器本身无法授予这些权限。\n\n## 🏃‍♂️ 快速开始：释放机器人军团！\n\n部署您的自动化大军最简单的方式就是使用 `npx`。无需安装——纯粹的机器人魔法！\n\n将以下内容添加到您的 MCP 客户端的 `mcp.json` 文件中，即可见证自动化开始：\n\n```json\n{\n  \"mcpServers\": {\n    \"macos_automator\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@steipete\u002Fmacos-automator-mcp@latest\"\n      ]\n    }\n  }\n}\n```\n\n### 🛠️ 机器人车间模式（本地开发）\n\n想亲手改造机器人的“大脑”吗？克隆仓库，成为一名机器人外科医生吧！\n\n1. **克隆仓库：**\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp.git\n    cd macos-automator-mcp\n    npm install # 确保依赖项已安装\n    ```\n\n2. **配置您的 MCP 客户端：**\n    更新您的 MCP 客户端配置，使其指向您克隆仓库中 `start.sh` 脚本的绝对路径。\n\n    示例 `mcp.json` 配置片段：\n    ```json\n    {\n      \"mcpServers\": {\n        \"macos_automator_local\": {\n          \"command\": \"\u002F绝对路径\u002F到\u002F您的\u002F克隆\u002F仓库\u002Fmacos-automator-mcp\u002Fstart.sh\",\n          \"env\": {\n            \"LOG_LEVEL\": \"DEBUG\"\n          }\n        }\n      }\n    }\n    ```\n    **重要提示**：请将 `\u002F绝对路径\u002F到\u002F您的\u002F克隆\u002F仓库\u002Fmacos-automator-mcp\u002Fstart.sh` 替换为您系统上的正确绝对路径。\n\n    `start.sh` 脚本会自动使用 `tsx` 直接运行 TypeScript 源代码（如果未找到编译版本），或者在存在编译版本的情况下直接运行 `dist\u002F` 中的文件。它会尊重 `LOG_LEVEL` 环境变量。\n\n    **开发者注意**：特别是当 `start.sh` 脚本被修改为在执行前删除任何已存在的编译版 `dist\u002Fserver.js`（例如添加 `rm -f dist\u002Fserver.js`）时，该脚本旨在确保您始终通过 `tsx` 运行来自 `src\u002F` 目录的最新 TypeScript 代码。这对于开发来说非常理想，可以避免因旧版本构建而导致的问题。而在生产部署时（例如发布到 npm），通常会有一个构建过程生成确定性的 `dist\u002Fserver.js`，作为已发布包的入口点。\n\n## 🤖 机器人工具箱\n\n### 1. `execute_script` - 脚本启动器 9000\n\n这是你的机器人在 macOS 上实现掌控的首选利器。只需为其提供 AppleScript 或 JXA 脚本，即可见证神奇效果！脚本可以通过内联内容（`script_content`）、绝对文件路径（`script_path`）提供，也可以通过引用内置知识库中的唯一 `kb_script_id` 来调用预定义脚本。\n\n**脚本来源（互斥）：**\n-   `script_content`（字符串）：原始脚本代码。\n-   `script_path`（字符串）：指向脚本文件的绝对 POSIX 路径（例如 `.applescript`、`.scpt`、`.js`）。\n-   `kb_script_id`（字符串）：服务器知识库中预定义脚本的唯一标识符。可使用 `get_scripting_tips` 工具来发现可用的脚本 ID 及其功能。\n\n**语言规范：**\n-   `language`（枚举：'applescript' | 'javascript'，可选）：指定脚本语言。\n    -   如果使用 `kb_script_id`，语言将从知识库脚本中推断得出。\n    -   如果使用 `script_content` 或 `script_path` 且未指定 `language`，则默认为 'applescript'。\n\n**向脚本传递参数：**\n-   `arguments`（字符串数组，可选）：\n    -   对于 `script_path`：作为标准参数传递给脚本的 `on run argv`（AppleScript）或 `run(argv)`（JXA）处理程序。\n    -   对于 `kb_script_id`：如果预定义脚本设计为接受位置参数（例如替换 `--MCP_ARG_1`、`--MCP_ARG_2` 等占位符），则会使用这些参数。请参考 `get_scripting_tips` 返回的脚本 `argumentsPrompt`。\n-   `input_data`（JSON 对象，可选）：\n    -   主要用于设计为接受命名结构化输入的 `kb_script_id` 脚本。\n    -   此对象中的值会替换脚本中的占位符（例如 `--MCP_INPUT:yourKeyName`）。请参阅 `get_scripting_tips` 返回的 `argumentsPrompt`。\n    -   值（字符串、数字、布尔值、简单数组\u002F对象）会被转换为对应的 AppleScript 字面量。\n\n**其他选项：**\n-   `timeout_seconds`（整数，可选，默认：60）：最大执行时间。\n-   `output_format_mode`（枚举，可选，默认：'auto'）：控制 `osascript` 的输出格式标志。\n    *   `'auto'`：（默认）对于 AppleScript 使用人类可读格式（`-s h`），而对于 JXA 则直接输出（不使用 `-s` 标志）。\n    *   `'human_readable'`：强制使用 `-s h`（人类可读输出，主要用于 AppleScript）。\n    *   `'structured_error'`：强制使用 `-s s`（结构化错误报告，主要用于 AppleScript）。\n    *   `'structured_output_and_error'`：强制使用 `-s ss`（主结果和错误均以结构化形式输出，主要用于 AppleScript）。\n    *   `'direct'`：不使用任何 `-s` 标志（推荐用于 JXA，也是 `auto` 模式下 JXA 的行为）。\n-   `include_executed_script_in_output`（布尔值，可选，默认：false）：若为真，输出将包含完整的脚本内容（针对知识库脚本会先进行占位符替换）或被执行的脚本路径。该内容将以额外文本部分的形式追加到输出内容数组中。\n-   `include_substitution_logs`（布尔值，可选，默认：false）：若为真，输出中将包含对知识库脚本执行占位符替换的详细日志。这有助于调试 `input_data` 和 `arguments` 如何被处理并插入脚本中。成功时，日志会前置到脚本输出；失败时，则会追加到错误信息中。\n-   `report_execution_time`（布尔值，可选，默认：false）：若为真，响应内容数组中将包含一条格式化的脚本执行时间信息。\n\n**安全警告及 macOS 权限：**（与之前关于任意脚本执行以及 macOS 自动化\u002F辅助功能权限的严重警告相同）\n\n**示例：**\n-   （现有内联\u002F文件路径示例仍然适用）\n-   **使用知识库脚本 ID：**\n    ```json\n    {\n      \"toolName\": \"execute_script\",\n      \"input\": {\n        \"kb_script_id\": \"safari_get_active_tab_url\",\n        \"timeout_seconds\": 10\n      }\n    }\n    ```\n-   **使用知识库脚本 ID 并传入 `input_data`：**\n    ```json\n    {\n      \"toolName\": \"execute_script\",\n      \"input\": {\n        \"kb_script_id\": \"finder_create_folder_at_path\",\n        \"input_data\": {\n          \"folder_name\": \"New MCP Folder\",\n          \"parent_path\": \"~\u002FDesktop\"\n        }\n      }\n    }\n    ```\n\n**响应格式：**\n\n`execute_script` 工具返回如下格式的响应：\n\n```typescript\n{\n  content: Array\u003C{\n    type: 'text';\n    text: string;\n  }>;\n  isError?: boolean;\n}\n```\n\n- `content`：包含脚本输出的文本内容数组。\n- `isError`：（布尔值，可选）当脚本执行产生错误时设置为 `true`。此标志会在以下情况下被设置：\n  - 脚本输出（stdout）以“Error”开头（不区分大小写）。\n  - 这有助于客户端无需解析输出文本即可轻松判断执行是否失败。\n\n**成功响应示例：**\n```json\n{\n  \"content\": [{\n    \"type\": \"text\",\n    \"text\": \"脚本执行成功\"\n  }]\n}\n```\n\n**错误响应示例：**\n```json\n{\n  \"content\": [{\n    \"type\": \"text\",\n    \"text\": \"错误：无法找到应用程序 'Safari'\"\n  }],\n  \"isError\": true\n}\n```\n\n### 2. `get_scripting_tips` - 机器人的自动化百科全书\n\n你的私人自动化图书管理员！它能比你谷歌搜索“如何编写 AppleScript”还要快地检索出 200 多个预构建脚本。当你需要灵感时，它将是你的最佳选择。\n\n**参数：**\n-   `list_categories`（布尔值，可选，默认：false）：若为真，仅返回可用知识库分类及其描述列表。此参数会覆盖其他参数。\n-   `category`（字符串，可选）：按特定类别 ID（例如“finder”、“safari”）筛选提示。\n-   `search_term`（字符串，可选）：在提示标题、描述、脚本内容、关键词或 ID 中搜索关键字。\n-   `refresh_database`（布尔值，可选，默认：false）：若为真，将在处理请求前强制从磁盘重新加载整个知识库。这在开发过程中非常有用，如果你正在积极修改知识库文件，并希望确保使用最新版本而无需重启服务器。\n-   `limit`（整数，可选，默认：10）：返回的最大结果数量。\n\n**输出：**\n-   返回一个 Markdown 格式的字符串，包含所请求的提示，包括其标题、描述、脚本内容、语言、可运行 ID（如适用）、参数提示及备注。\n\n**使用示例：**\n-   列出所有类别：\n    `{ \"toolName\": \"get_scripting_tips\", \"input\": { \"list_categories\": true } }`\n-   获取“safari”类别下的提示：\n    `{ \"toolName\": \"get_scripting_tips\", \"input\": { \"category\": \"safari\" } }`\n-   搜索与“剪贴板”相关的提示：\n    `{ \"toolName\": \"get_scripting_tips\", \"input\": { \"search_term\": \"clipboard\" } }`\n\n### 3. `accessibility_query` - UI 的 X 光眼\n\n为你的机器人赋予超级英雄般的技能，让它能够查看并点击任何应用中的任意按钮！这款工具利用 macOS 的辅助功能框架，深入窥探 macOS 应用程序的内部结构。它由神秘的 `ax` 二进制文件驱动，就像拥有了用户界面的 X 光透视能力。\n\n`ax` 二进制文件（以及本工具）可以通过多种方式接收 JSON 命令输入：\n1.  **直接 JSON 字符串参数：** 如果 `ax` 被调用时仅提供一个命令行参数，且该参数不是有效的文件路径，则会尝试将其解析为完整的 JSON 字符串。\n2.  **文件路径参数：** 如果 `ax` 被调用时仅提供一个有效的文件路径作为命令行参数，则会从该文件中读取完整的 JSON 命令。\n3.  **标准输入：** 如果 `ax` 没有命令行参数，则会从标准输入中读取完整的 JSON 命令（可以是多行格式）。\n\n本工具暴露了完整的 macOS 辅助功能 API 功能，允许对 UI 元素及其属性进行详细检查。它特别适用于自动化那些没有强大 AppleScript 支持的应用程序交互，或者在需要详细检查 UI 结构时使用。\n\n**输入参数：**\n\n*   `command`（枚举：'query' | 'perform'，必填）：要执行的操作。\n    *   `query`：获取 UI 元素的相关信息。\n    *   `perform`：对 UI 元素执行操作（例如点击按钮）。\n\n*   `locator`（对象，必填）：用于查找目标元素的规范。\n    *   `app`（字符串，必填）：目标应用程序，可通过捆绑包 ID 或显示名称指定（例如：“Safari”、“com.apple.Safari”）。\n    *   `role`（字符串，必填）：目标元素的辅助功能角色（例如：“AXButton”、“AXStaticText”）。\n    *   `match`（对象，必填）：用于匹配的属性键值对。如果不需要，可为空（`{}`）。\n    *   `navigation_path_hint`（字符串数组，可选）：在应用程序层级结构中导航的路径（例如：`[\"window[1]\", \"toolbar[1]\"]`）。\n\n*   `return_all_matches`（布尔值，可选）：当设置为 `true` 时，返回所有匹配的元素，而不仅仅是第一个匹配项。默认为 `false`。\n\n*   `attributes_to_query`（字符串数组，可选）：要查询的匹配元素的特定属性。如果未提供，则会包含常见属性。示例：`[\"AXRole\", \"AXTitle\", \"AXValue\"]`\n\n*   `required_action_name`（字符串，可选）：筛选仅支持特定操作的元素（例如：“AXPress”表示可点击的元素）。\n\n*   `action_to_perform`（字符串，可选，当 `command=\"perform\"` 时必填）：要在匹配的元素上执行的辅助功能操作（例如：“AXPress”用于点击按钮）。\n\n*   `report_execution_time`（布尔值，可选）：如果设置为 `true`，工具将返回一条额外的消息，其中包含格式化的脚本执行时间。默认为 `false`。\n\n*   `limit`（整数，可选）：输出中最多返回的行数。默认为 500 行。如果超过此限制，输出将被截断。\n\n*   `max_elements`（整数，可选）：对于 `return_all_matches: true` 的查询，此参数指定 `ax` 二进制文件将完全处理并返回属性的最大 UI 元素数量。如果省略，则使用内部默认值（例如 200）。这有助于在查询具有大量匹配元素的 UI 时（如复杂网页上的众多文本字段）控制性能。这与 `limit` 不同，后者是基于行数对最终文本输出进行截断。\n\n*   `debug_logging`（布尔值，可选）：如果设置为 `true`，则启用底层 `ax` 二进制文件的详细调试日志记录。这些诊断信息将包含在响应中，有助于排查复杂的查询或意外行为。默认为 `false`。\n\n*   `output_format`（枚举：'smart' | 'verbose' | 'text_content'，可选，默认：'smart'）：控制 `ax` 二进制文件返回属性的格式和详细程度。\n    *   `'smart'`：（默认）优化为易读性。省略值为空或占位符的属性。返回键值对。\n    *   `'verbose'`：最大程度的细节。包括所有属性，即使是空值或占位符。以键值形式呈现。最适合调试元素属性。\n    *   `'text_content'`：高度紧凑，用于提取文本。仅返回常见文本属性（如 AXValue、AXTitle）的拼接文本值。不返回键名。非常适合快速获取元素中的所有文本；在此模式下，`attributes_to_query` 参数将被忽略。\n\n**查询示例（注意：键名已改为小写蛇形命名）：**\n\n1.  **查找当前 Safari 窗口中的所有文本元素：**\n    ```json\n    {\n      \"command\": \"query\",\n      \"return_all_matches\": true,\n      \"locator\": {\n        \"app\": \"Safari\",\n        \"role\": \"AXStaticText\",\n        \"match\": {},\n        \"navigation_path_hint\": [\"window[1]\"]\n      }\n    }\n    ```\n\n2.  **查找并点击具有特定标题的按钮：**\n    ```json\n    {\n      \"command\": \"perform\",\n      \"locator\": {\n        \"app\": \"系统设置\",\n        \"role\": \"AXButton\",\n        \"match\": {\"AXTitle\": \"通用\"}\n      },\n      \"action_to_perform\": \"AXPress\"\n    }\n    ```\n\n3.  **获取焦点 UI 元素的详细信息：**\n    ```json\n    {\n      \"command\": \"query\",\n      \"locator\": {\n        \"app\": \"邮件\",\n        \"role\": \"AXTextField\",\n        \"match\": {\"AXFocused\": \"true\"}\n      },\n      \"attributes_to_query\": [\"AXRole\", \"AXTitle\", \"AXValue\", \"AXDescription\", \"AXHelp\", \"AXPosition\", \"AXSize\"]\n    }\n    ```\n\n**注意：** 使用此工具需要确保运行本服务器的应用程序在 macOS 系统设置 > 隐私与安全性 > 辅助功能中拥有必要的辅助功能权限。\n\n## 🎮 机器人游乐场：你新朋友能做的酷事\n\n-   **应用程序控制（教会应用程序谁是老大）：**\n    -   获取 Safari 中的当前 URL：`{ \"input\": { \"script_content\": \"tell application \\\"Safari\\\" to get URL of front document\" } }`\n    -   获取 Mail 中未读邮件的主题：`{ \"input\": { \"script_content\": \"tell application \\\"Mail\\\" to get subject of messages of inbox whose read status is false\" } }`\n-   **文件系统操作（数字家务管理）：**\n    -   列出桌面上的文件：`{ \"input\": { \"script_content\": \"tell application \\\"Finder\\\" to get name of every item of desktop\" } }`\n    -   创建新文件夹：`{ \"input\": { \"script_content\": \"tell application \\\"Finder\\\" to make new folder at desktop with properties {name:\\\"Robot's Secret Stash\\\"}\" } }`\n-   **系统交互（Mac 心灵控制）：**\n    -   显示系统通知：`{ \"input\": { \"script_content\": \"display notification \\\"🤖 Beep boop! Task complete!\\\" with title \\\"Robot Report\\\"\" } }`\n    -   设置系统音量：`{ \"input\": { \"script_content\": \"set volume output volume 50\" } }`（0–100）\n    -   获取当前剪贴板内容：`{ \"input\": { \"script_content\": \"the clipboard\" } }`\n\n## 🔧 当机器人叛乱时（故障排除）\n\n-   **“访问被拒绝”闹剧：** 你的机器人缺少权限！请检查系统设置 > 隐私与安全。给你的终端授予最高权限。\n-   **脚本语法悲伤：** 即使是机器人也会打错字。先在脚本编辑器中测试脚本——这就像自动化版的拼写检查。\n-   **超时发脾气：** 有些任务需要时间。如果你的机器人完成任务需要超过60秒，请增加 `timeout_seconds` 的值。\n-   **文件未找到大乌龙：** 机器人需要绝对路径，而不是相对路径。机器人世界里没有捷径！\n-   **JXA 输出怪现象：** JavaScript 机器人很挑剔。使用 `output_format_mode: 'direct'`，或者让 `'auto'` 模式自动处理。\n\n## 🎛️ 机器人控制面板（配置）\n\n通过以下环境变量，微调你的机器人的行为：\n\n-   **`LOG_LEVEL`**：你的机器人应该有多健谈？\n    -   `DEBUG`：机器人会告诉你所有内容（信息过载模式）\n    -   `INFO`：正常交流模式\n    -   `WARN`：只报告重要信息\n    -   `ERROR`：静默模式（只有出问题时才会说话）\n    -   示例：`LOG_LEVEL=DEBUG npx @steipete\u002Fmacos-automator-mcp@latest`\n\n-   **`KB_PARSING`**：机器人何时加载知识库？\n    -   `lazy`（默认）：按需加载知识（启动快，但懒惰）\n    -   `eager`：启动时一次性加载所有内容（启动慢，但随时待命）\n    -   示例：`KB_PARSING=eager .\u002Fstart.sh`\n\n## 👨‍🔬 欢迎机器人科学家！\n\n想升级你的机器人吗？查看 [DEVELOPMENT.md](DEVELOPMENT.md)，获取完整的技术手册，教你如何为自动化助手教授新技能。\n\n## 🧠 教你的机器人新技能（本地知识库）\n\n你的机器人可以学习自定义技能！创建属于你自己的自动化配方，见证你的机器人不断进化。\n\n默认情况下，应用程序会在 `~\u002F.macos-automator\u002Fknowledge_base` 查找本地知识库。你可以通过设置 `LOCAL_KB_PATH` 环境变量来更改此路径。\n\n**示例：**\n\n假设你在 `\u002FUsers\u002Fyourname\u002Fmy-custom-kb` 有一个本地知识库。设置环境变量：\n`export LOCAL_KB_PATH=\u002FUsers\u002Fyourname\u002Fmy-custom-kb`\n\n或者，如果你正在运行验证脚本，可以使用 `--local-kb-path` 参数：\n`npm run validate:kb -- --local-kb-path \u002FUsers\u002Fyourname\u002Fmy-custom-kb`\n\n**结构与覆盖规则：**\n\n*   你的本地知识库应与主 `knowledge_base` 的分类结构保持一致（例如 `01_applescript_core`、`05_web_browsers\u002Fsafari` 等）。\n*   你可以添加新的 `.md` 技巧文件或 `_shared_handlers` 文件（如 `.applescript` 或 `.js` 文件）。\n*   如果你的本地知识库中的某个技巧 ID（无论是来自 frontmatter 的 `id:`，还是由文件名\u002F路径生成）与嵌入式知识库中的 ID 相匹配，则你的本地版本将 **覆盖** 嵌入式版本。\n*   同样地，在你的本地 `_shared_handlers` 目录中，如果存在与嵌入式知识库同名且同语言的共享处理器（例如 `my_utility.applescript`），则它将覆盖同一类别中（或全局范围内，若放置于本地 KB 的 `_shared_handlers` 根目录下）的嵌入式版本。\n*   你本地 KB 中的 `_category_info.md` 文件中的分类描述也可以覆盖嵌入式 KB 中相同分类的描述。\n\n这样可以在不修改核心应用文件的情况下，个性化和扩展可用的自动化脚本和技巧。\n\n## 🤝 加入机器人革命！\n\n发现 bug 了吗？有酷炫的自动化点子吗？你的机器人军团正等着你加入！请在 [GitHub 仓库](https:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp) 提交问题和拉取请求。\n\n## 💪 机器人超能力展示\n\n以下是你的新硅基小伙伴开箱即用的能力：\n\n### 🖥️ 终端驯兽师\n- **命令行魔法：** 打开新标签页、执行命令、捕获输出——你的机器人能流利地说“bash”！\n  ```\n  { \"input\": { \"kb_script_id\": \"terminal_app_run_command_new_tab\", \"input_data\": { \"command\": \"echo '🤖 Hello World!'\" } } }\n  ```\n\n### 🌐 浏览器小精灵\n- **网页自动化大师：** 像木偶戏大师一样操控 Chrome 和 Safari！\n  ```\n  { \"input\": { \"kb_script_id\": \"safari_get_front_tab_url\" } }\n  ```\n- **JavaScript 注入：** 让网页按照机器人的指令翩翩起舞\n- **截图狙击手：** 比你说“茄子”还快就截好图\n\n### ⚙️ 系统魔法师\n- **暗黑模式切换：** 因为机器人也有敏感的光学传感器\n  ```\n  { \"input\": { \"kb_script_id\": \"systemsettings_toggle_dark_mode_ui\" } }\n  ```\n- **剪贴板指挥官：** 复制、粘贴、操作剪贴板，像专业人士一样\n- **通知忍者：** 发送真正能引起注意的提醒\n\n### 📁 文件系统风水师\n- **文件夹创造者 3000：** 用机器人般的精准整理你的数字生活\n  ```\n  { \"input\": { \"kb_script_id\": \"finder_create_new_folder_desktop\", \"input_data\": { \"folder_name\": \"Robot Paradise\" } } }\n  ```\n- **文本文件心灵感应：** 以人类无法企及的速度读写文件\n\n### 📱 应用程序低语者\n- **日历指挥家：** 在你熟睡时安排会议\n- **邮件自动化大师：** 不用动一根手指就能发送邮件\n- **音乐大师：** 编程控制你的播放列表\n  ```\n  { \"input\": { \"kb_script_id\": \"music_playback_controls\", \"input_data\": { \"action\": \"play\" } } }\n  ```\n\n🎯 **实用小贴士：** 使用 `get_scripting_tips` 来发现全部 200 多种自动化配方！\n\n## 📜 法律声明（机器人权利）\n\n本项目采用 MIT 许可证授权——这意味着你的机器人可以自由活动！详细条款请参阅 [LICENSE](LICENSE) 文件。\n\n---\n\n🤖 **请记住：** 强大的自动化能力伴随着巨大的责任。请明智地使用你的机器人！\n\n\u003Ca href=\"https:\u002F\u002Fglama.ai\u002Fmcp\u002Fservers\u002F@steipete\u002Fmacos-automator-mcp\">\n  \u003Cimg width=\"380\" height=\"200\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteipete_macos-automator-mcp_readme_1d2cbf1e8728.png\" alt=\"macOS Automator Server MCP 服务器\" \u002F>\n\u003C\u002Fa>","# macOS Automator MCP 快速上手指南\n\nmacOS Automator MCP 是一个基于模型上下文协议（MCP）的服务器，它能让你的 AI 助手直接通过 AppleScript 或 JavaScript for Automation (JXA) 控制 macOS 系统。内置超过 200 个预置自动化脚本，涵盖文件管理、浏览器操作等场景。\n\n## 环境准备\n\n在开始之前，请确保满足以下系统和权限要求：\n\n### 1. 系统与依赖\n- **操作系统**：仅限 macOS（不支持 Windows 或 Linux）。\n- **Node.js**：版本需 >= 18.0.0。\n  ```bash\n  node -v # 检查版本\n  ```\n\n### 2. ⚠️ 关键权限配置（必须执行）\nmacOS 的安全机制要求运行此工具的终端或应用必须获得明确授权，否则无法控制其他应用。\n\n**步骤 A：授予“自动化”权限**\n1. 打开 **系统设置** > **隐私与安全性** > **自动化**。\n2. 在列表中找到运行该服务的程序（例如：**终端**、**iTerm2** 或你的 IDE）。\n3. 勾选该程序需要控制的所有应用（如 Finder, Safari, Mail 等），或直接全选。\n\n**步骤 B：授予“辅助功能”权限**\n1. 打开 **系统设置** > **隐私与安全性** > **辅助功能**。\n2. 点击\"+\"号或开关，将运行该服务的程序（例如：**终端**）添加到列表中并启用。\n\n> **注意**：首次尝试控制新应用时，macOS 可能会再次弹出确认对话框，请点击“好”允许。\n\n## 安装步骤\n\n推荐使用 `npx` 方式直接运行，无需手动克隆代码或编译，最适合快速集成。\n\n在你的 MCP 客户端配置文件（通常为 `mcp.json`）中添加以下配置：\n\n```json\n{\n  \"mcpServers\": {\n    \"macos_automator\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@steipete\u002Fmacos-automator-mcp@latest\"\n      ]\n    }\n  }\n}\n```\n\n保存配置后重启你的 MCP 客户端（如 Cursor、Windsurf 或其他支持 MCP 的编辑器），即可自动加载该服务。\n\n> **国内开发者提示**：如果 `npx` 下载缓慢，可临时设置淘宝镜像源：\n> ```bash\n> export NPM_CONFIG_REGISTRY=https:\u002F\u002Fregistry.npmmirror.com\n> ```\n> 然后在启动命令前加上该环境变量，或在 `.npmrc` 文件中永久配置。\n\n## 基本使用\n\n配置完成后，你可以在对话中直接让 AI 调用工具执行自动化任务。以下是两个最典型的使用场景：\n\n### 场景 1：调用内置脚本（推荐）\n利用内置的 200+ 知识库脚本，无需编写代码即可完成任务。例如获取当前 Safari 标签页的 URL：\n\n**用户指令示例：**\n> “帮我获取当前 Safari 浏览器活动标签页的网址。”\n\n**底层工具调用逻辑（供参考）：**\n```json\n{\n  \"toolName\": \"execute_script\",\n  \"input\": {\n    \"kb_script_id\": \"safari_get_active_tab_url\",\n    \"timeout_seconds\": 10\n  }\n}\n```\n\n### 场景 2：执行自定义 AppleScript\n如果需要执行特定逻辑，可以直接传入脚本内容。例如在桌面创建一个文件夹：\n\n**用户指令示例：**\n> “在桌面上创建一个名为 'MCP_Test' 的文件夹。”\n\n**底层工具调用逻辑（供参考）：**\n```json\n{\n  \"toolName\": \"execute_script\",\n  \"input\": {\n    \"language\": \"applescript\",\n    \"script_content\": \"tell application \\\"Finder\\\" to make new folder at desktop with name \\\"MCP_Test\\\"\"\n  }\n}\n```\n\n### 探索更多能力\n如果你不知道有哪些可用脚本，可以询问 AI：\n> “列出所有关于 Finder 操作的自动化脚本。”\n\n这将触发 `get_scripting_tips` 工具，返回相关脚本的 ID 和功能描述，方便你进一步调用。","一位 macOS 上的全栈开发者正试图让本地大模型助手自动整理每日的 Safari 浏览记录并生成日报，同时根据内容自动归档文件。\n\n### 没有 macos-automator-mcp 时\n- **只能动口不能动手**：AI 助手虽然能写出完美的 AppleScript 代码，但无法直接执行，开发者必须手动复制粘贴到脚本编辑器运行，打断心流。\n- **重复劳动繁琐**：每次需要提取当前网页标题、保存截图或移动文件时，都要重新向 AI 请求代码并手动操作，效率极低。\n- **应用控制割裂**：AI 无法感知或控制 Finder、Safari 等原生应用的状态，导致工作流在“对话”与“操作”之间强行断裂。\n- **权限配置迷茫**：手动配置 macOS 自动化和辅助功能权限时容易出错，且缺乏统一的调试反馈，排查问题耗时耗力。\n\n### 使用 macos-automator-mcp 后\n- **指令即行动**：开发者只需对 AI 说“把当前 Safari 标签页归档”，macos-automator-mcp 立即调用 JXA 脚本后台执行，无需任何人工干预。\n- **复杂流程一键通**：通过内置的 200+ 自动化模板，AI 能串联起“抓取链接 - 保存截图 - 移动文件 - 更新日志”的全套动作，实现真正的端到端自动化。\n- **深度应用集成**：macos-automator-mcp 赋予 AI 操控系统级应用的能力，使其能像真实员工一样点击按钮、模拟按键，彻底打通软件壁垒。\n- **安全可控的执行环境**：工具在配置好的权限沙箱中运行，提供清晰的调试日志，让自动化过程既强大又透明可追溯。\n\nmacos-automator-mcp 将 AI 从单纯的“聊天顾问”升级为能直接操控 macOS 系统的“超级实习生”，真正实现了自然语言到系统行动的无缝转化。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteipete_macos-automator-mcp_ed918c17.png","steipete","Peter Steinberger","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fsteipete_d1c5c0c3.jpg","Came back from retirement to mess with AI. Clawdfather @OpenClaw\r\n\r\nPreviously: Founder of @PSPDFKit.","Full-Time Open-Sourcerer","Vienna & London","peter@steipete.me","http:\u002F\u002Fsteipete.me","https:\u002F\u002Fgithub.com\u002Fsteipete",[83,87,91,95],{"name":84,"color":85,"percentage":86},"TypeScript","#3178c6",76.4,{"name":88,"color":89,"percentage":90},"JavaScript","#f1e05a",17,{"name":92,"color":93,"percentage":94},"AppleScript","#101F1F",5,{"name":96,"color":97,"percentage":98},"Shell","#89e051",1.7,758,54,"2026-04-13T18:00:30","MIT","macOS","未说明",{"notes":106,"python":104,"dependencies":107},"该工具仅支持 macOS 系统。运行前必须在系统设置中手动授予宿主应用（如终端）两项关键权限：1. '隐私与安全性' > '自动化'：允许控制 Finder、Safari 等其他应用；2. '隐私与安全性' > '辅助功能'：允许进行 UI 脚本操作（模拟点击和按键）。首次运行时可能会再次弹出确认提示。",[108,92,109],"Node.js >= 18.0.0","JavaScript for Automation (JXA)",[13,52],null,"2026-03-27T02:49:30.150509","2026-04-16T08:13:22.193016",[],[116,121,126,131],{"id":117,"version":118,"summary_zh":119,"released_at":120},280422,"v0.4.1","# v0.4.1 版本发布\n\n## 变更内容\n\n- 修复了版本报告仅在工具调用时发生的问题，避免在 MCP 初始化握手期间报告版本信息。\n- 移除了导致 MCP 客户端连接问题的服务器就绪日志消息。\n\n## 修复的问题\n\n部分 MCP 客户端（如 Cursor）无法成功连接，原因是服务器在初始化过程中输出了一条“就绪”消息，干扰了 MCP 协议的握手过程。\n\n## 完整变更日志\n\nhttps:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp\u002Fcompare\u002Fv0.4.0...v0.4.1","2025-05-19T02:55:07",{"id":122,"version":123,"summary_zh":124,"released_at":125},280423,"v0.4.0","## v0.4.0 的更新内容\n\n- 将 `execute_script` 工具中的布尔型参数 `use_script_friendly_output` 替换为功能更强大的字符串枚举型参数 `output_format_mode`\n  - 新参数：`output_format_mode`（枚举值：`'auto'`、`'human_readable'`、`'structured_error'`、`'structured_output_and_error'`、`'direct'`，默认值：`'auto'`）\n  - `'auto'` 模式会智能选择输出格式：对于 AppleScript 使用 `human_readable` 格式（即 `-s h`），而对于 JXA 则使用 `direct` 格式（不加 `-s` 标志）。\n  - `use_script_friendly_output` 参数已被移除。\n- 修复了一个 bug，该 bug 导致某些脚本的执行时间被错误地报告为“0 毫秒”。\n- 优化了执行时间报告的显示格式。\n\n**重大变更：** `use_script_friendly_output` 参数已被移除，取而代之的是 `output_format_mode`。\n\n## 安装\n\n```bash\nnpm install -g @steipete\u002Fmacos-automator-mcp@latest\n```\n\n## 完整变更日志\n\nhttps:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp\u002Fblob\u002Fmain\u002FCHANGELOG.md","2025-05-19T02:37:40",{"id":127,"version":128,"summary_zh":129,"released_at":130},280424,"v0.3.0","- 在 `execute_script` 工具的输出中加入了脚本执行时间。响应中的 `timings` 对象现在包含 `execution_time_seconds`，表示脚本实际执行的时长（单位：秒，保留两位小数）。\n- 将默认脚本执行超时时间（`timeoutSeconds`）从 30 秒增加到 60 秒。\n- 优化并缩短了 `execute_script` 工具的描述。\n- 将所有工具的输入参数命名规范由 camelCase 改为 snake_case（例如，`kbScriptId` 现在变为 `kb_script_id`）。脚本内容中的占位符键名（如 `--MCP_INPUT:keyName`）仍保持 camelCase 格式，其内部映射由服务器自动处理。","2025-05-19T00:05:36",{"id":132,"version":133,"summary_zh":134,"released_at":135},280425,"v0.2.2","## 变更\n\n- 将搜索结果限制为500行，以防止响应过大\n\n此次更新通过避免过大的响应来提高搜索功能的性能和可靠性，从而防止系统运行缓慢或不堪重负。\n\n## 变更内容\n* 功能：添加搜索结果的默认限制，以提升响应速度，由 @steipete 在 https:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp\u002Fpull\u002F5 中实现\n* 功能：将搜索输出限制为500行，由 @steipete 在 https:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp\u002Fpull\u002F6 中实现\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fsteipete\u002Fmacos-automator-mcp\u002Fcompare\u002F0.2.0...v0.2.2","2025-05-16T09:36:36"]