mcp server aidd

Local 2025-08-31 23:20:34 0

AiDD MCP Server provides a secure interface for AI agents to perform file system operations and code analysis, enhancing AI-assisted development workflows across multiple programming languages.


smithery badge

An MCP server that provides a comprehensive set of tools for AI-driven development workflows. Features include file system operations, code analysis using tree-sitter for multiple programming languages, Git operations, code execution, and system information retrieval. Designed to enhance AI's capability to assist in software development tasks.

AiDD Server MCP server

Installation

Installing via Smithery

To install AiDD for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install mcp-server-aidd --client claude

Manual Installation

# Using mcp-get
npx @michaellatman/mcp-get@latest install mcp-server-aidd

# Using pip
pip install mcp-server-aidd

# Using uv
uvx mcp-server-aidd

Claude Desktop Setup

Add to your claude_desktop_config.json:

{
    "mcpServers": {
        "aidd-ai-software-development-utilities": {
            "command": "uvx",
            "args": ["mcp-server-aidd"]
        }
    }
}

SkyDeck AI Helper App

If you're using SkyDeck AI Helper app, you can search for "AiDD" and install the mcp-server-aidd.

SkyDeck AI Helper App

Key Features

  • File system operations (read, write, edit, move, delete)
  • Directory management and traversal
  • Multi-language code analysis using tree-sitter
  • Multi-language code execution with safety measures
  • Git operations (status, diff, commit, branch management)
  • Security controls with configurable workspace boundaries
  • Screenshot and screen context tools
  • Image handling tools

Available Tools

Basic File Operations

Tool Parameters Returns
read_file path: string File content
read_multiple_files paths: string[] Multiple file contents with headers
write_file path: string, content: string Success confirmation
move_file source: string, destination: string Success confirmation
delete_file path: string Success confirmation
get_file_info path: string File metadata (size, timestamps, permissions)

Common usage:

# Read file
aidd-cli --tool read_file --args '{"path": "src/main.py"}'

# Write file
aidd-cli --tool write_file --args '{"path": "output.txt", "content": "Hello World"}'

# Get file info
aidd-cli --tool get_file_info --args '{"path": "src/main.py"}'

Complex File Operations

edit_file

Pattern-based file editing with preview support:

{
    "path": "src/main.py",
    "edits": [
        {
            "oldText": "def old_function():",
            "newText": "def new_function():"
        }
    ],
    "dryRun": false,
    "options": {
        "preserveIndentation": true,
        "normalizeWhitespace": true,
        "partialMatch": true
    }
}

Returns: Diff of changes or preview in dry run mode.

Directory Operations

Tool Parameters Returns
get_allowed_directory none Current allowed directory path
update_allowed_directory directory: string (absolute path) Success confirmation
list_directory path: string Directory contents list
create_directory path: string Success confirmation
search_files pattern: string, path?: string, include_hidden?: boolean Matching files list

directory_tree

Generates complete directory structure:

{
    "path": "src",
    "include_hidden": false
}

Returns: JSON tree structure of directory contents.

Common usage:

# List directory
aidd-cli --tool list_directory --args '{"path": "."}'

# Search for Python files
aidd-cli --tool search_files --args '{"pattern": ".py", "path": "src"}'

Git Operations

Tool Parameters Returns
git_init path: string, initial_branch?: string Repository initialization status
git_status repo_path: string Working directory status
git_add repo_path: string, files: string[] Staging confirmation
git_reset repo_path: string Unstaging confirmation
git_checkout repo_path: string, branch_name: string Branch switch confirmation

Complex Git Operations

git_commit
{
    "repo_path": ".",
    "message": "feat: add new feature"
}

Returns: Commit hash and confirmation.

git_diff
{
    "repo_path": ".",
    "target": "main"
}

Returns: Detailed diff output.

git_log
{
    "repo_path": ".",
    "max_count": 10
}

Returns: Array of commit entries with hash, author, date, and message.

Common usage:

# Check status
aidd-cli --tool git_status --args '{"repo_path": "."}'

# Create and switch to new branch
aidd-cli --tool git_create_branch --args '{"repo_path": ".", "branch_name": "feature/new-branch"}'

Code Analysis

tree_sitter_map

Analyzes source code structure:

{
    "path": "src"
}

Returns:

  • Classes and their methods
  • Functions and parameters
  • Module structure
  • Code organization statistics
  • Inheritance relationships

Supported Languages:

  • Python (.py)
  • JavaScript (.js, .jsx, .mjs, .cjs)
  • TypeScript (.ts, .tsx)
  • Java (.java)
  • C++ (.cpp, .hpp, .cc)
  • Ruby (.rb, .rake)
  • Go (.go)
  • Rust (.rs)
  • PHP (.php)
  • C# (.cs)
  • Kotlin (.kt, .kts)

System Information

Tool Parameters Returns
get_system_info none Comprehensive system details

Returns:

{
  "working_directory": "/path/to/project",
  "system": {
    "os", "os_version", "architecture", "python_version"
  },
  "wifi_network": "MyWiFi",
  "cpu": {
    "physical_cores", "logical_cores", "total_cpu_usage"
  },
  "memory": { "total", "available", "used_percentage" },
  "disk": { "total", "free", "used_percentage" },
  "mac_details": {  // Only present on macOS
    "model": "Mac mini",
    "chip": "Apple M2",
    "serial_number": "XXX"
  }
}

Provides essential system information in a clean, readable format.

# Get system information
aidd-cli --tool get_system_info

Screen Context and Image Tools

get_active_apps

Returns a list of currently active applications on the user's system.

{
    "with_details": true
}

Parameters: | Parameter | Type | Required | Description | |-----------|---------|----------|---------------------------------------| | with_details | boolean | No | Whether to include additional details about each application (default: false) |

Returns:

{
    "success": true,
    "platform": "macos",
    "app_count": 12,
    "apps": [
        {
            "name": "Firefox",
            "has_windows": true,
            "window_count": 3,
            "visible_windows": [
                { "name": "GitHub - Mozilla Firefox", "width": 1200, "height": 800 }
            ]
        },
        {
            "name": "VSCode",
            "has_windows": true
        }
    ]
}

This tool provides valuable context about applications currently running on the user's system, which can help with providing more relevant assistance.

get_available_windows

Returns detailed information about all available windows currently displayed on the user's screen.

{}

Returns:

{
    "success": true,
    "platform": "macos",
    "count": 8,
    "windows": [
        {
            "id": 42,
            "title": "Document.txt - Notepad",
            "app": "Notepad",
            "visible": true
        },
        {
            "title": "Terminal",
            "app": "Terminal",
            "visible": true,
            "active": true
        }
    ]
}

This tool helps understand what's visible on the user's screen and can be used for context-aware assistance.

capture_screenshot

Captures a screenshot of the user's screen or a specific window.

{
    "output_path": "screenshots/capture.png",
    "capture_mode": {
        "type": "named_window",
        "window_name": "Visual Studio Code"
    }
}

Parameters: | Parameter | Type | Required | Description | |-----------|---------|----------|---------------------------------------| | output_path | string | No | Path where the screenshot should be saved (default: generated path) | | capture_mode | object | No | Specifies what to capture | | capture_mode.type | string | No | Type of screenshot: 'full', 'active_window', or 'named_window' (default: 'full') | | capture_mode.window_name | string | No | Name of window to capture (required when type is 'named_window') |

Returns:

{
    "success": true,
    "path": "/path/to/screenshots/capture.png"
}

This tool captures screenshots for visualization, debugging, or context-aware assistance.

read_image_file

Reads an image file from the file system and returns its contents as a base64-encoded string.

{
    "path": "images/logo.png"
}

Parameters: | Parameter | Type | Required | Description | |-----------|---------|----------|---------------------------------------| | path | string | Yes | Path to the image file to read | | max_size | integer | No | Maximum file size in bytes (default: 100MB) |

Returns: Base64-encoded image data that can be displayed or processed.

This tool supports common image formats like PNG, JPEG, GIF, and WebP, and automatically resizes images for optimal viewing.

Code Execution

execute_code

Executes code in various programming languages with safety measures and restrictions.

{
    "language": "python",
    "code": "print('Hello, World!')",
    "timeout": 5
}

Supported Languages:

  • Python (python3)
  • JavaScript (Node.js)
  • Ruby
  • PHP
  • Go
  • Rust

Parameters: | Parameter | Type | Required | Description | |-----------|---------|----------|---------------------------------------| | language | string | Yes | Programming language to use | | code | string | Yes | Code to execute | | timeout | integer | No | Maximum execution time (default: 5s) |

Example Usage:

# Python example
aidd-cli --tool execute_code --args '{
    "language": "python",
    "code": "print(sum(range(10)))"
}'

# JavaScript example
aidd-cli --tool execute_code --args '{
    "language": "javascript",
    "code": "console.log(Array.from({length: 5}, (_, i) => i*2))"
}'

# Ruby example
aidd-cli --tool execute_code --args '{
    "language": "ruby",
    "code": "puts (1..5).reduce(:+)"
}'

# Go example
aidd-cli --tool execute_code --args '{
    "language": "go",
    "code": "fmt.Println("Hello, Go!")"
}'

Requirements:

  • Respective language runtimes must be installed
  • Commands must be available in system PATH
  • Proper permissions for temporary file creation

⚠️ Security Warning: This tool executes arbitrary code on your system. Always:

  1. Review code thoroughly before execution
  2. Understand the code's purpose and expected outcome
  3. Never execute untrusted code
  4. Be aware of potential system impacts
  5. Monitor execution output

execute_shell_script

Executes shell scripts (bash/sh) with safety measures and restrictions.

{
    "script": "echo "Current directory:" && pwd",
    "timeout": 300
}

Parameters: | Parameter | Type | Required | Description | |-----------|---------|----------|---------------------------------------| | script | string | Yes | Shell script to execute | | timeout | integer | No | Maximum execution time (default: 300s, max: 600s) |

Example Usage:

# List directory contents with details
aidd-cli --tool execute_shell_script --args '{
    "script": "ls -la"
}'

# Find all Python files recursively
aidd-cli --tool execute_shell_script --args '{
    "script": "find . -name "*.py" -type f"
}'

# Complex script with multiple commands
aidd-cli --tool execute_shell_script --args '{
    "script": "echo "System Info:" && uname -a && echo "
Disk Usage:" && df -h"
}'

Features:

  • Uses /bin/sh for maximum compatibility across systems
  • Executes within the allowed directory
  • Separate stdout and stderr output
  • Proper error handling and timeout controls

⚠️ Security Warning: This tool executes arbitrary shell commands on your system. Always:

  1. Review the script thoroughly before execution
  2. Understand the script's purpose and expected outcome
  3. Never execute untrusted scripts
  4. Be aware of potential system impacts
  5. Monitor execution output

Configuration

Configuration file: ~/.aidd/config.json

{
    "allowed_directory": "/path/to/workspace"
}

CLI Usage

Basic command structure:

aidd-cli --tool <tool_name> --args '<json_arguments>'

# List available tools
aidd-cli --list-tools

# Enable debug output
aidd-cli --debug --tool <tool_name> --args '<json_arguments>'

Debugging

Use MCP Inspector for debugging:

npx @modelcontextprotocol/inspector run

Security

  • Operations restricted to configured allowed directory
  • Path traversal prevention
  • File permission preservation
  • Safe operation handling

Upcoming Features

  • GitHub tools:
    • PR Description Generator
    • Code Review
    • Actions Manager
  • Pivotal Tracker tools:
    • Story Generator
    • Story Manager

Development Status

Currently in active development. Features and API may change.

License

Apache License 2.0 - see LICENSE

[
  {
    "description": "Get the current working directory that this server is allowed to access.",
    "inputSchema": {
      "properties": {},
      "required": [],
      "type": "object"
    },
    "name": "get_allowed_directory"
  },
  {
    "description": "Create a new file or overwrite an existing file with new content. Use this to save changes, create new files, or update existing ones. Use with caution as it will overwrite existing files without warning. Path must be relative to the allowed directory. Creates parent directories if needed. Example: Path='notes.txt', Content='Meeting notes for project X'",
    "inputSchema": {
      "properties": {
        "content": {
          "description": "Content to write to the file",
          "type": "string"
        },
        "path": {
          "description": "Path where to write the file",
          "type": "string"
        }
      },
      "required": [
        "path",
        "content"
      ],
      "type": "object"
    },
    "name": "write_file"
  },
  {
    "description": "Change the working directory that this server is allowed to access. Use this to switch between different projects.",
    "inputSchema": {
      "properties": {
        "directory": {
          "description": "Directory to allow access to. Must be an absolute path. Use ~ to refer to the user's home directory.",
          "type": "string"
        }
      },
      "required": [
        "directory"
      ],
      "type": "object"
    },
    "name": "update_allowed_directory"
  },
  {
    "description": "Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Useful for setting up project structure or organizing files. Only works within the allowed directory. Example: Enter 'src/components' to create nested directories.",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Path of the directory to create",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "create_directory"
  },
  {
    "description": "Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within the allowed directory. Always use dryRun first to preview changes before applying them.",
    "inputSchema": {
      "properties": {
        "dryRun": {
          "default": false,
          "description": "Preview changes without applying",
          "type": "boolean"
        },
        "edits": {
          "description": "List of edit operations",
          "items": {
            "properties": {
              "newText": {
                "description": "Text to replace with",
                "type": "string"
              },
              "oldText": {
                "description": "Text to search for (can be substring)",
                "type": "string"
              }
            },
            "required": [
              "oldText",
              "newText"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "options": {
          "properties": {
            "normalizeWhitespace": {
              "default": true,
              "description": "Normalize spaces while preserving structure",
              "type": "boolean"
            },
            "partialMatch": {
              "default": true,
              "description": "Enable fuzzy matching",
              "type": "boolean"
            },
            "preserveIndentation": {
              "default": true,
              "description": "Keep existing indentation",
              "type": "boolean"
            }
          },
          "type": "object"
        },
        "path": {
          "description": "File to edit",
          "type": "string"
        }
      },
      "required": [
        "path",
        "edits"
      ],
      "type": "object"
    },
    "name": "edit_file"
  },
  {
    "description": "Get a detailed listing of files and directories in the specified path. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within the allowed directory. Example: Enter 'src' to list contents of the src directory, or '.' for current directory.",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Path of the directory to list",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "list_directory"
  },
  {
    "description": "Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within the allowed directory.Example: Enter 'src/main.py' to read a Python file.",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Path to the file to read",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "read_file"
  },
  {
    "description": "Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within the allowed directory.Example: Enter ['src/main.py', 'README.md'] to read both files.",
    "inputSchema": {
      "properties": {
        "paths": {
          "description": "List of file paths to read",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "paths"
      ],
      "type": "object"
    },
    "name": "read_multiple_files"
  },
  {
    "description": "Move or rename a file or directory to a new location. This tool can be used to reorganize files and directories. Both source and destination must be within the allowed directory. If the destination already exists, the operation will fail. Parent directories of the destination will be created if they don't exist. Example: source='old.txt', destination='new/path/new.txt'",
    "inputSchema": {
      "properties": {
        "destination": {
          "description": "Destination path where to move the file or directory",
          "type": "string"
        },
        "source": {
          "description": "Source path of the file or directory to move",
          "type": "string"
        }
      },
      "required": [
        "source",
        "destination"
      ],
      "type": "object"
    },
    "name": "move_file"
  },
  {
    "description": "Search for files and directories matching a pattern. The search is recursive and case-insensitive. Only searches within the allowed directory. Returns paths relative to the allowed directory. Searches in file and directory names, not content. For searching within file contents, use the tree_sitter_map tool which can locate specific code elements like functions and classes. Example: pattern='.py' finds all Python files, pattern='test' finds all items with 'test' in the name.",
    "inputSchema": {
      "properties": {
        "include_hidden": {
          "description": "Whether to include hidden files and directories (defaults to false)",
          "type": "boolean"
        },
        "path": {
          "description": "Starting directory for the search (defaults to allowed directory)",
          "type": "string"
        },
        "pattern": {
          "description": "Pattern to search for in file and directory names",
          "type": "string"
        }
      },
      "required": [
        "pattern"
      ],
      "type": "object"
    },
    "name": "search_files"
  },
  {
    "description": "Delete a file or empty directory from the file system. Use with caution as this operation cannot be undone. For safety, this tool will not delete non-empty directories. Only works within the allowed directory. Example: path='old_file.txt' removes the specified file.",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Path to the file or empty directory to delete",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "delete_file"
  },
  {
    "description": "Get detailed information about a file or directory. Returns size, creation time, modification time, access time, type (file/directory), and permissions. All times are in ISO 8601 format. This tool is perfect for understanding file characteristics without reading the actual content. Only works within the allowed directory. Example: path='src/main.py' returns details about main.py",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Path to the file or directory",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "get_file_info"
  },
  {
    "description": "Get a recursive tree view of files and directories in the specified path as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within the allowed directory. Useful for understanding project structure. Example: Enter '.' for current directory, or 'src' for a specific directory.",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Root directory to analyze",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "directory_tree"
  },
  {
    "description": "Execute arbitrary code in various programming languages on the user's local machine within the current working directory. Supported languages: python, javascript, ruby, php, go, rust. Always review the code carefully before execution to prevent unintended consequences. You MUST explicitly show the user the code that will be executed and get his confirmation before using this tool. Examples: - Python: code='print(sum(range(10)))'. - JavaScript: code='console.log(Array.from({length: 5}, (_, i) => i*2))'. - Ruby: code='puts (1..5).reduce(:+)'. ",
    "inputSchema": {
      "properties": {
        "code": {
          "description": "Code to execute on the user's local machine in the current working directory",
          "type": "string"
        },
        "language": {
          "description": "Programming language to use",
          "enum": [
            "python",
            "javascript",
            "ruby",
            "php",
            "go",
            "rust"
          ],
          "type": "string"
        },
        "timeout": {
          "default": 5,
          "description": "Maximum execution time in seconds",
          "maximum": 30,
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "language",
        "code"
      ],
      "type": "object"
    },
    "name": "execute_code"
  },
  {
    "description": "Execute a shell script (bash/sh) on the user's local machine within the current working directory. This tool can execute shell commands and scripts for system automation and management tasks. It is designed to perform tasks on the user's local environment, such as opening applications, installing packages and more. Always review the script carefully before execution to prevent unintended consequences. You MUST explicitly show the user the script that will be executed and get his confirmation before using this tool. Examples: - script='echo "Current directory:" && pwd'. - script='for i in {1..5}; do echo $i; done'. ",
    "inputSchema": {
      "properties": {
        "script": {
          "description": "Shell script to execute on the user's local machine",
          "type": "string"
        },
        "timeout": {
          "default": 300,
          "description": "Maximum execution time in seconds (default: 300, max: 600)",
          "type": "integer"
        }
      },
      "required": [
        "script"
      ],
      "type": "object"
    },
    "name": "execute_shell_script"
  },
  {
    "description": "Build a tree-sitter based structural map of source code files. This tool analyzes code structure to identify classes, functions, and methods. Only analyzes files within the allowed directory. Useful for code analysis and understanding project structure. Example: Enter '.' to analyze all source files in current directory, or 'src' to analyze all files in the src directory.",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Root directory to analyze",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "tree_sitter_map"
  },
  {
    "description": "Initialize a new Git repository. Creates a new Git repository in the specified directory. If the directory doesn't exist, it will be created. Directory must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "initial_branch": {
          "default": "main",
          "description": "Name of the initial branch (defaults to 'main')",
          "type": "string"
        },
        "path": {
          "description": "Path where to initialize the repository",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "git_init"
  },
  {
    "description": "Shows the working tree status of a git repository. Returns information about staged, unstaged, and untracked files. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path"
      ],
      "type": "object"
    },
    "name": "git_status"
  },
  {
    "description": "Shows changes in working directory not yet staged for commit. Returns a unified diff format of all unstaged changes. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path"
      ],
      "type": "object"
    },
    "name": "git_diff_unstaged"
  },
  {
    "description": "Shows changes staged for commit. Returns a unified diff format of all staged changes. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path"
      ],
      "type": "object"
    },
    "name": "git_diff_staged"
  },
  {
    "description": "Shows differences between branches or commits. Returns a unified diff format comparing current state with target. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        },
        "target": {
          "description": "Target branch or commit to compare with",
          "type": "string"
        }
      },
      "required": [
        "repo_path",
        "target"
      ],
      "type": "object"
    },
    "name": "git_diff"
  },
  {
    "description": "Records changes to the repository. Commits all staged changes with the provided message. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "message": {
          "description": "Commit message",
          "type": "string"
        },
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path",
        "message"
      ],
      "type": "object"
    },
    "name": "git_commit"
  },
  {
    "description": "Adds file contents to the staging area. Stages specified files for the next commit. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "files": {
          "description": "List of file paths to stage",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path",
        "files"
      ],
      "type": "object"
    },
    "name": "git_add"
  },
  {
    "description": "Unstages all staged changes. Removes all files from the staging area. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path"
      ],
      "type": "object"
    },
    "name": "git_reset"
  },
  {
    "description": "Shows the commit logs. Returns information about recent commits including hash, author, date, and message. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "max_count": {
          "default": 10,
          "description": "Maximum number of commits to show",
          "type": "integer"
        },
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path"
      ],
      "type": "object"
    },
    "name": "git_log"
  },
  {
    "description": "Creates a new branch. Creates a new branch from the specified base branch or current HEAD. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "base_branch": {
          "default": {
            "path": "uv.lock",
            "type": "blob"
          },
          "description": "Starting point for the new branch (optional)",
          "type": "string"
        },
        "branch_name": {
          "description": "Name of the new branch",
          "type": "string"
        },
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path",
        "branch_name"
      ],
      "type": "object"
    },
    "name": "git_create_branch"
  },
  {
    "description": "Switches branches. Checks out the specified branch. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "branch_name": {
          "description": "Name of branch to checkout",
          "type": "string"
        },
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        }
      },
      "required": [
        "repo_path",
        "branch_name"
      ],
      "type": "object"
    },
    "name": "git_checkout"
  },
  {
    "description": "Shows the contents of a commit. Returns detailed information about a specific commit including the changes it introduced. Repository must be within the allowed directory.",
    "inputSchema": {
      "properties": {
        "repo_path": {
          "description": "Path to git repository",
          "type": "string"
        },
        "revision": {
          "description": "The revision (commit hash, branch name, tag) to show",
          "type": "string"
        }
      },
      "required": [
        "repo_path",
        "revision"
      ],
      "type": "object"
    },
    "name": "git_show"
  },
  {
    "description": "Get detailed system information including OS, CPU, memory, disk, and network details (such as WiFi network name). This tool provides comprehensive information about the system environment. Also returns the current working directory (allowed directory) of the AiDD MCP server. Useful for system analysis, debugging, environment verification, and workspace management.",
    "inputSchema": {
      "properties": {},
      "required": [],
      "type": "object"
    },
    "name": "get_system_info"
  }
]