Mac Shell MCP Server
Mac Shell MCP 服务器
一个 MCP(模型上下文协议)服务器,用于使用 ZSH shell 执行 macOS 终端命令。该服务器通过内置的白名单和审批机制,提供了一种安全执行 shell 命令的方法。
特征
通过 MCP 执行 macOS 终端命令
具有安全级别的命令白名单:
安全:无需批准即可执行的命令
需要批准:执行前需要明确批准的命令
禁止:明确阻止的命令
预先配置白名单,包含常用安全命令
潜在危险命令的审批工作流程
全面的命令管理工具
Related MCP server: Terminal MCP Server
安装
# Clone the repository
git clone https://github.com/cfdude/mac-shell-mcp.git
cd mac-shell-mcp
# Install dependencies
npm install
# Build the project
npm run build用法
启动服务器
npm start或者直接:
node build/index.js在 Roo Code 和 Claude Desktop 中配置
Roo Code 和 Claude Desktop 的 MCP 服务器配置格式类似。以下是设置 Mac Shell MCP 服务器的方法:
使用本地安装
Roo 代码配置
将以下内容添加到您的 Roo Code MCP 设置配置文件(位于~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json ):
"mac-shell": {
"command": "node",
"args": [
"/path/to/mac-shell-mcp/build/index.js"
],
"alwaysAllow": [],
"disabled": false
}Claude桌面配置
将以下内容添加到您的 Claude Desktop 配置文件(位于~/Library/Application Support/Claude/claude_desktop_config.json ):
"mac-shell": {
"command": "node",
"args": [
"/path/to/mac-shell-mcp/build/index.js"
],
"alwaysAllow": false,
"disabled": false
}将/path/to/mac-shell-mcp替换为您克隆存储库的实际路径。
使用 NPX(推荐)
为了更方便的设置,不需要保持终端窗口打开,您可以将包发布到 npm 并与 npx 一起使用:
发布到 npm
使用您的详细信息更新 package.json
发布到 npm:
npm publish
Roo 代码配置
"mac-shell": {
"command": "npx",
"args": [
"-y",
"mac-shell-mcp"
],
"alwaysAllow": [],
"disabled": false
}Claude桌面配置
"mac-shell": {
"command": "npx",
"args": [
"-y",
"mac-shell-mcp"
],
"alwaysAllow": false,
"disabled": false
}这种方法允许 MCP 客户端自动启动 MCP 服务器,而无需单独的终端窗口或手动干预。
笔记:
对于 Roo 代码:出于安全考虑,建议将
alwaysAllow设置为空数组[],因为它会在执行任何命令之前提示您批准。如果您想允许特定命令而不提示,可以将这些命令的名称添加到数组中,例如:"alwaysAllow": ["execute_command", "get_whitelist"]。对于 Claude Desktop:出于安全考虑,建议
alwaysAllow设置为falseDesktop 使用布尔值而不是数组,其中false表示所有命令都需要批准,true表示所有命令均允许,无需提示。重要提示:
alwaysAllow参数由 MCP 客户端(Roo Code 或 Claude Desktop)处理,而非由 Mac Shell MCP 服务器本身处理。服务器无论使用哪种格式都能正常工作,因为客户端会在向服务器发送请求之前处理审批流程。
可用工具
该服务器公开以下 MCP 工具:
execute_command
在 macOS 上执行 shell 命令。
{
"command": "ls",
"args": ["-la"]
}get_whitelist
获取白名单命令列表。
{}add_to_whitelist
将命令添加到白名单。
{
"command": "python3",
"securityLevel": "safe",
"description": "Run Python 3 scripts"
}update_security_level
更新白名单命令的安全级别。
{
"command": "python3",
"securityLevel": "requires_approval"
}remove_from_whitelist
从白名单中删除命令。
{
"command": "python3"
}get_pending_commands
获取待批准的命令列表。
{}approve_command
批准待处理的命令。
{
"commandId": "command-uuid-here"
}deny_command
拒绝待处理的命令。
{
"commandId": "command-uuid-here",
"reason": "This command is potentially dangerous"
}默认白名单命令
安全命令(无需批准)
ls列出目录内容pwd打印工作目录echo将文本打印到标准输出cat连接并打印文件grep在文件中搜索模式find在目录层次结构中查找文件cd更改目录head输出文件的第一部分tail输出文件的最后部分wc打印换行符、字数和字节数
需要批准的命令
mv移动(重命名)文件cp复制文件和目录mkdir创建目录touch更改文件时间戳或创建空文件chmod更改文件模式位chown更改文件所有者和组
禁止的命令
rm删除文件或目录sudo以另一个用户身份执行命令
安全注意事项
所有命令均以运行 MCP 服务器的用户权限执行
需要批准的命令将被保留在队列中,直到明确批准
禁止的命令永远不会执行
服务器使用 Node.js 的
execFile而不是exec来防止 shell 注入指定时,根据允许的模式验证参数
扩展白名单
您可以使用add_to_whitelist工具扩展白名单。例如:
{
"command": "npm",
"securityLevel": "requires_approval",
"description": "Node.js package manager"
}用作 npm 包
要将 Mac Shell MCP 服务器与npx一起使用,类似于 Brave Search 等其他 MCP 服务器,您可以将其发布到 npm 或直接从 GitHub 使用它。
使用 npx 配置
将以下内容添加到您的 MCP 设置配置中:
罗奥代码
"mac-shell": {
"command": "npx",
"args": [
"-y",
"github:cfdude/mac-shell-mcp"
],
"alwaysAllow": [],
"disabled": false
}克劳德桌面
"mac-shell": {
"command": "npx",
"args": [
"-y",
"github:cfdude/mac-shell-mcp"
],
"alwaysAllow": false,
"disabled": false
}这将自动下载并运行服务器,而无需手动克隆和构建过程。
发布到 npm
如果你想将自己的版本发布到 npm:
使用您的详细信息更新 package.json
在 package.json 中添加“bin”字段:
"bin": { "mac-shell-mcp": "./build/index.js" }发布到 npm:
npm publish
然后您可以在 MCP 配置中使用它:
罗奥代码
"mac-shell": {
"command": "npx",
"args": [
"-y",
"mac-shell-mcp"
],
"alwaysAllow": [],
"disabled": false
}克劳德桌面
"mac-shell": {
"command": "npx",
"args": [
"-y",
"mac-shell-mcp"
],
"alwaysAllow": false,
"disabled": false
}执照
此 MCP 服务器采用 MIT 许可证。这意味着您可以自由使用、修改和分发该软件,但须遵守 MIT 许可证的条款和条件。更多详情,请参阅项目仓库中的 LICENSE 文件。
Available Tools
8 toolsadd_to_whitelistC
Add a command to the whitelist
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to whitelist | |
| securityLevel | Yes | Security level for the command | |
| description | No | Description of the command |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Add') but doesn't explain what happens upon invocation—e.g., whether it's a mutation, requires permissions, has side effects like notifications, or returns confirmation. This leaves significant gaps for a tool that modifies a security list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of modifying a security whitelist, no annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like mutation effects, error conditions, or return values, which are crucial for safe tool invocation in this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (command, securityLevel, description) with details like enum values for securityLevel. The description adds no additional meaning beyond the schema, resulting in the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and resource ('command to the whitelist'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'update_security_level' or 'remove_from_whitelist', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like 'update_security_level' or 'approve_command'. The description lacks context about prerequisites, such as whether the command must be pending or already exist, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_commandC
Approve a pending command
| Name | Required | Description | Default |
|---|---|---|---|
| commandId | Yes | ID of the command to approve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Approve' implies a mutation that changes state, but the description doesn't clarify what happens after approval (e.g., does it trigger execution, log the action, or require additional steps?), potential side effects, permission requirements, or error conditions. This leaves significant gaps for a tool that likely involves security-sensitive operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no wasted words. It front-loads the core action and resource efficiently, making it easy to parse and understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, and the tool's likely role in a security/command workflow (inferred from sibling tools), the description is insufficient. It doesn't explain the outcome of approval, how it interacts with other tools (e.g., 'execute_command'), or any system constraints, leaving the agent with incomplete context for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'commandId' clearly documented in the schema. The description adds no additional parameter semantics beyond implying that 'commandId' refers to a pending command, which is already inferred from the tool's purpose. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('approve') and the target resource ('a pending command'), which is specific and unambiguous. However, it doesn't differentiate this tool from its sibling 'deny_command' beyond the opposite action, nor does it explain what 'approve' entails in this context versus simply executing or modifying the command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'deny_command' or 'execute_command'. It doesn't specify prerequisites (e.g., that the command must be in a pending state) or contextual cues for selection, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deny_commandC
Deny a pending command
| Name | Required | Description | Default |
|---|---|---|---|
| commandId | Yes | ID of the command to deny | |
| reason | No | Reason for denial |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('deny') but doesn't explain what 'deny' entails—whether it's reversible, if it requires specific permissions, what the outcome is, or if there are side effects. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and target, making it easy to parse quickly. Every word earns its place by conveying essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain the tool's behavior, outcomes, or error conditions. The agent lacks context on what 'deny' means operationally, making it difficult to use correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear documentation for both parameters ('commandId' and 'reason'). The description doesn't add any meaning beyond what the schema provides, such as format examples or constraints. Since schema coverage is high, the baseline score of 3 is appropriate, as the schema handles parameter semantics adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('deny') and the target ('a pending command'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'approve_command' or explain what 'deny' means in this context beyond the basic action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'approve_command' or 'execute_command'. It doesn't mention prerequisites (e.g., needing a pending command ID) or context about what happens after denial. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_commandC
Execute a shell command on macOS
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to execute | |
| args | No | Command arguments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe critical behavioral aspects: whether execution is immediate or requires approval, what permissions are needed, whether commands run with elevated privileges, what happens on failure, or what output format to expect. For a potentially dangerous shell execution tool, this is inadequate transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core functionality without unnecessary words. It's appropriately sized for a tool with two parameters and gets straight to the point. Every word earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of shell command execution (potentially destructive, security-sensitive) and the absence of both annotations and output schema, the description is insufficiently complete. It doesn't address safety considerations, error handling, output format, or how this interacts with the security-focused sibling tools. For a tool that could modify system state, more contextual information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters ('command' and 'args') clearly documented in the schema. The description doesn't add any parameter-specific information beyond what the schema already provides. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even without additional param details in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute') and target ('a shell command on macOS'), making the purpose immediately understandable. It distinguishes from siblings by focusing on command execution rather than security management or querying. However, it doesn't specify whether this executes immediately or requires approval, which could be more precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like 'approve_command' or 'deny_command'. The description doesn't mention prerequisites, security implications, or whether this bypasses approval workflows. With siblings focused on security controls, this omission leaves significant ambiguity about appropriate usage contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pending_commandsB
Get the list of commands pending approval
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a read operation ('Get'), implying it's non-destructive, but doesn't cover other aspects like permissions needed, rate limits, response format, or whether it returns all pending commands or a filtered subset. The description is minimal and lacks behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's front-loaded with the core purpose and efficiently communicates the tool's function without unnecessary elaboration, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no output schema, and a simple input schema with no parameters, the description is minimal. While it states the purpose, it lacks context about what 'pending approval' means, how commands are structured, or what the return value looks like. For a tool in a security/command approval context, more completeness would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline score of 4 is given since the schema fully covers the absence of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('list of commands pending approval'), making the purpose immediately understandable. It doesn't explicitly distinguish from sibling tools like 'approve_command' or 'deny_command', but the verb 'Get' implies a read operation rather than an action on the commands themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_whitelist' or 'execute_command'. It doesn't mention prerequisites, context for pending commands, or any exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_whitelistB
Get the list of whitelisted commands
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get the list' which implies a read-only operation, but doesn't specify whether this requires authentication, returns paginated results, includes metadata, or has rate limits. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's front-loaded with the core purpose ('Get the list of whitelisted commands') and doesn't include unnecessary elaboration. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description is minimally adequate but lacks context about the return format (e.g., structure of the whitelist, data types) and behavioral traits. It meets the basic requirement for a simple read operation but doesn't provide enough information for confident use without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the absence of inputs. The description doesn't need to add parameter details, and it appropriately doesn't mention any. Baseline 4 is correct for zero-parameter tools where the schema already covers everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('list of whitelisted commands'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'get_pending_commands' or 'add_to_whitelist', but the verb+resource combination is specific enough to infer basic distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, timing, or contrast with sibling tools like 'get_pending_commands' (which might retrieve unapproved commands) or 'add_to_whitelist' (which modifies the list). Usage is implied by the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_whitelistC
Remove a command from the whitelist
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to remove from whitelist |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool performs a removal action, implying mutation, but doesn't describe permissions needed, whether the change is reversible, error conditions, or what happens if the command isn't in the whitelist. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core function without any wasted words. It's appropriately sized for a simple tool with one parameter and gets straight to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after removal (e.g., confirmation message, error responses), doesn't mention security implications, and provides no context about the whitelist system it operates within.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single 'command' parameter adequately. The description doesn't add any additional meaning about parameter format, constraints, or examples beyond what the schema provides, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('remove') and target resource ('a command from the whitelist'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'deny_command' or 'update_security_level' which might have overlapping security functions, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'deny_command' or 'update_security_level'. The description only states what it does, not when it's appropriate or what prerequisites might exist (e.g., whether the command must already be whitelisted).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_security_levelC
Update the security level of a whitelisted command
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to update | |
| securityLevel | Yes | New security level for the command |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Update' implies a mutation, it doesn't specify required permissions, whether changes are reversible, error conditions (e.g., if command isn't whitelisted), or side effects. This leaves significant gaps for a security-related mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with zero wasted words. It front-loads the core action and target efficiently, making it easy to parse while conveying essential purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It lacks critical context: what 'security level' means operationally, how changes affect command execution, error handling, or response format. Given the security-sensitive nature and sibling tools, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional parameter context beyond implying 'command' refers to a whitelisted one. This meets the baseline for high schema coverage but doesn't enhance understanding of parameter usage or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the target ('security level of a whitelisted command'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from siblings like 'add_to_whitelist' or 'remove_from_whitelist', which also modify command permissions but in different ways.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the command must already be whitelisted), contrast with 'approve_command'/'deny_command' for pending requests, or explain when changing security levels is appropriate versus adding/removing from the whitelist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
- First observed
add_to_whitelist - First observed
approve_command - First observed
deny_command - First observed
execute_command - First observed
get_pending_commands - First observed
get_whitelist - First observed
remove_from_whitelist - First observed
update_security_level
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose with no ambiguity. The tools cover separate aspects of command management: whitelist operations (add/remove/get), approval workflow (approve/deny/get_pending), execution (execute_command), and security configuration (update_security_level). There is no overlap in functionality.
All tools follow a consistent verb_noun pattern with snake_case throughout. The naming is predictable and readable, using clear action verbs like 'add_to', 'remove_from', 'get', 'execute', 'approve', 'deny', and 'update' paired with appropriate nouns.
With 8 tools, this server is well-scoped for its macOS shell security management purpose. Each tool earns its place by covering essential operations for command whitelisting, approval workflows, execution, and security configuration without being excessive or insufficient.
The tool set provides complete coverage for the macOS shell security domain. It includes full CRUD operations for the whitelist (add, remove, get), comprehensive approval workflow management (approve, deny, get_pending), command execution, and security level updates, leaving no obvious gaps for agents to work with.
Maintenance
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
- ArcjetOAuthcom.arcjet
An MCP server for Arcjet - the runtime security platform that ships with your AI code.
Related MCP Servers
- AlicenseBqualityFmaintenanceA Model Context Protocol server that provides secure command-line access to Windows systems, allowing MCP clients like Claude Desktop to safely execute commands in PowerShell, CMD, and Git Bash shells with configurable security controls.9750 npm269MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that allows AI assistants like Claude to execute terminal commands on the user's computer and return the output, functioning like a terminal through AI.89-
- AlicenseAqualityFmaintenanceAn MCP server that enables secure execution of shell commands across Windows, macOS, and Linux with built-in whitelisting and approval mechanisms for enhanced security.973 npm21MIT
- AlicenseNot gradedqualityDmaintenanceAn enhanced MCP server that grants AI assistants the ability to execute terminal commands on a user's system with improved security controls, designed for use in controlled environments.2MIT