mcp server aidd
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.
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.
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.
To install AiDD for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install mcp-server-aidd --client claude
# 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
Add to your claude_desktop_config.json
:
{
"mcpServers": {
"aidd-ai-software-development-utilities": {
"command": "uvx",
"args": ["mcp-server-aidd"]
}
}
}
If you're using SkyDeck AI Helper app, you can search for "AiDD" and install the mcp-server-aidd.
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"}'
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.
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 |
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"}'
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 |
{
"repo_path": ".",
"message": "feat: add new feature"
}
Returns: Commit hash and confirmation.
{
"repo_path": ".",
"target": "main"
}
Returns: Detailed diff output.
{
"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"}'
Analyzes source code structure:
{
"path": "src"
}
Returns:
Supported Languages:
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
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.
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.
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.
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.
Executes code in various programming languages with safety measures and restrictions.
{
"language": "python",
"code": "print('Hello, World!')",
"timeout": 5
}
Supported Languages:
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:
⚠️ Security Warning: This tool executes arbitrary code on your system. Always:
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:
⚠️ Security Warning: This tool executes arbitrary shell commands on your system. Always:
Configuration file: ~/.aidd/config.json
{
"allowed_directory": "/path/to/workspace"
}
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>'
Use MCP Inspector for debugging:
npx @modelcontextprotocol/inspector run
Currently in active development. Features and API may change.
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"
}
]