diff --git a/servers/discord-agent/readme.md b/servers/discord-agent/readme.md new file mode 100644 index 000000000..ab7a69240 --- /dev/null +++ b/servers/discord-agent/readme.md @@ -0,0 +1,150 @@ +# Discord Agent MCP Server + +Comprehensive Discord automation and management through the Model Context Protocol. This server provides 46+ tools for AI assistants to interact with Discord servers, including messaging, channel management, roles, moderation, and more. + +## Features + +- **10 Messaging Tools**: Send, edit, delete messages, add reactions, manage pins +- **10 Channel Tools**: Create, modify, delete channels (text, voice, forum, stage) +- **3 Thread Tools**: Create, find, and archive forum threads +- **6 Server Management Tools**: Server info, webhooks, invites, audit logs +- **3 Member Tools**: Member info, list members, set nicknames +- **6 Role Tools**: Assign, create, modify, delete roles +- **5 Moderation Tools**: Kick, ban, timeout members +- **Resources**: Guild listings and information +- **Prompts**: Interactive moderation and announcement assistants + +## Prerequisites + +Before using this server, you need: + +1. **Discord Bot Token** + - Create a bot at [Discord Developer Portal](https://discord.com/developers/applications) + - Enable these Privileged Gateway Intents: + - Server Members Intent ✅ + - Message Content Intent ✅ + - Invite the bot to your server with appropriate permissions + +2. **Required Configuration** + - `DISCORD_TOKEN`: Your Discord bot token (required, secret) + +3. **Optional Configuration** + - `TRANSPORT_MODE`: `http` or `stdio` (default: `http`) + - `HTTP_PORT`: Port for HTTP mode (default: `3000`) + - `LOG_LEVEL`: Logging level (default: `info`) + - `LOG_FORMAT`: `json` or `pretty` (default: `json`) + +## Quick Start + +### 1. Create Discord Bot + +1. Go to [Discord Developer Portal](https://discord.com/developers/applications) +2. Create a new application and add a bot +3. Copy the bot token +4. Enable "Server Members Intent" and "Message Content Intent" +5. Generate invite URL with bot permissions: + - Manage Channels, Manage Roles, Manage Messages + - Send Messages, Read Message History + - Manage Threads, Moderate Members + +### 2. Configure the Server + +When prompted for configuration: +- **DISCORD_TOKEN**: Paste your bot token +- Leave other settings as default or customize as needed + +### 3. Use with AI Assistant + +Once running, the server exposes 46+ tools that AI assistants can use: + +**Example Interactions:** +- "Send a welcome message to the #general channel" +- "List all channels in the server" +- "Create a new forum channel called 'Q&A'" +- "Give the @member role to user123" +- "Show me the last 10 messages in #announcements" + +## Available Tools + +### Messaging +- `send_message` - Send text messages +- `send_rich_message` - Send formatted embeds +- `send_message_with_file` - Send with attachments +- `read_messages` - Get message history +- `edit_message`, `delete_message`, `bulk_delete_messages` +- `add_reaction`, `pin_message`, `unpin_message` + +### Channel Management +- `list_channels`, `get_channel_details` +- `create_text_channel`, `create_voice_channel`, `create_forum_channel` +- `create_category`, `create_stage_channel` +- `modify_channel`, `delete_channel`, `set_channel_permissions` + +### Threads +- `find_threads` - Search forum threads +- `create_thread` - Create new threads +- `archive_thread` - Archive threads + +### Server +- `get_server_info` - Server details +- `modify_server` - Update server settings +- `get_audit_logs` - View audit logs +- `list_webhooks`, `create_webhook` +- `get_invites`, `create_invite` + +### Members +- `get_member_info` - Member details +- `list_members` - List all members +- `set_nickname` - Change nicknames + +### Roles +- `assign_role`, `remove_role` +- `create_role`, `delete_role`, `modify_role` +- `list_roles`, `get_role_info` + +### Moderation +- `kick_member` - Remove member (can rejoin) +- `ban_member`, `unban_member` - Ban management +- `timeout_member`, `remove_timeout` - Temporary mutes +- `get_bans` - List banned users + +## Use Cases + +- **Community Management**: Automate welcome messages, role assignments, channel creation +- **Moderation**: AI-assisted moderation with timeout, kick, and ban capabilities +- **Content Distribution**: Post announcements, updates, and embeds across channels +- **Server Organization**: Create and manage channels, categories, and forum threads +- **Member Support**: Answer questions, provide information, manage roles +- **Event Management**: Create stage channels, manage voice channels, send invites + +## Security Notes + +- **Bot Token Security**: Your Discord token is stored securely as a secret +- **Permissions**: Bot can only perform actions it has permissions for +- **Rate Limits**: Respects Discord's rate limits automatically +- **Audit Trail**: All actions are logged in Discord's audit log + +## Architecture + +Built with: +- **TypeScript** - Type-safe implementation +- **Discord.js v14** - Official Discord API library +- **MCP Protocol** - Standard AI assistant integration +- **Docker** - Containerized deployment +- **Structured Logging** - JSON-formatted logs for monitoring + +## Support & Documentation + +- **Full Documentation**: [GitHub README](https://github.com/aj-geddes/discord-agent-mcp#readme) +- **Source Code**: [GitHub Repository](https://github.com/aj-geddes/discord-agent-mcp) +- **Issues**: [GitHub Issues](https://github.com/aj-geddes/discord-agent-mcp/issues) +- **Discord.js Docs**: [Discord.js Guide](https://discordjs.guide/) +- **MCP Protocol**: [Model Context Protocol](https://modelcontextprotocol.io/) + +## License + +MIT License - See [LICENSE](https://github.com/aj-geddes/discord-agent-mcp/blob/main/LICENSE) + +--- + +**Note**: This is a third-party MCP server and is not officially affiliated with Discord, Inc. diff --git a/servers/discord-agent/server.yaml b/servers/discord-agent/server.yaml new file mode 100644 index 000000000..3a23c0c62 --- /dev/null +++ b/servers/discord-agent/server.yaml @@ -0,0 +1,41 @@ +name: discord-agent +type: local +meta: + category: communication + tags: + - discord + - chat + - automation + - community-management + - bot +about: + title: Discord + description: Production-ready MCP server for AI-assisted Discord management and automation. Provides 46+ tools for comprehensive Discord API integration including messaging, channels, threads, roles, members, and moderation. + icon: https://www.google.com/s2/favicons?domain=discord.com&sz=64 + documentation_url: https://github.com/aj-geddes/discord-agent-mcp#readme + source_url: https://github.com/aj-geddes/discord-agent-mcp +build: + dockerfile: Dockerfile + context: . +config: + environment: + - name: DISCORD_TOKEN + description: Your Discord bot token from Discord Developer Portal + required: true + secret: true + - name: TRANSPORT_MODE + description: Transport mode (http or stdio) + required: false + default: http + - name: HTTP_PORT + description: HTTP server port + required: false + default: "3000" + - name: LOG_LEVEL + description: Logging level (debug, info, warn, error) + required: false + default: info + - name: LOG_FORMAT + description: Log format (json or pretty) + required: false + default: json diff --git a/servers/discord-agent/tools.json b/servers/discord-agent/tools.json new file mode 100644 index 000000000..c5608fb69 --- /dev/null +++ b/servers/discord-agent/tools.json @@ -0,0 +1,186 @@ +[ + { + "name": "send_message", + "description": "Send a message to a Discord channel" + }, + { + "name": "send_rich_message", + "description": "Send a richly formatted message with embeds, images, and advanced formatting" + }, + { + "name": "send_message_with_file", + "description": "Send a message with file attachment to a Discord channel" + }, + { + "name": "read_messages", + "description": "Retrieve recent message history from a channel" + }, + { + "name": "edit_message", + "description": "Edit an existing message sent by the bot" + }, + { + "name": "delete_message", + "description": "Delete a specific message from a channel" + }, + { + "name": "bulk_delete_messages", + "description": "Delete multiple messages at once (max 100, must be <14 days old)" + }, + { + "name": "add_reaction", + "description": "Add an emoji reaction to a message" + }, + { + "name": "pin_message", + "description": "Pin a message to the channel" + }, + { + "name": "unpin_message", + "description": "Unpin a message from the channel" + }, + { + "name": "list_channels", + "description": "Get all channels in the server organized by type" + }, + { + "name": "get_channel_details", + "description": "Get detailed information about a channel including type, permissions, and capabilities" + }, + { + "name": "create_text_channel", + "description": "Create a new text channel in a Discord server" + }, + { + "name": "create_voice_channel", + "description": "Create a new voice channel in the server" + }, + { + "name": "create_category", + "description": "Create a new category to organize channels" + }, + { + "name": "create_forum_channel", + "description": "Create a new forum channel for threaded discussions" + }, + { + "name": "create_stage_channel", + "description": "Create a stage voice channel for presentations and events" + }, + { + "name": "modify_channel", + "description": "Update channel name, topic, slowmode, or other settings" + }, + { + "name": "delete_channel", + "description": "Permanently delete a Discord channel" + }, + { + "name": "set_channel_permissions", + "description": "Override permissions for a role or member on a specific channel" + }, + { + "name": "find_threads", + "description": "Search for threads in a forum channel by name or list all threads" + }, + { + "name": "create_thread", + "description": "Create a new thread in a channel or from a message" + }, + { + "name": "archive_thread", + "description": "Archive (lock) a thread" + }, + { + "name": "get_server_info", + "description": "Retrieve detailed information about a Discord server" + }, + { + "name": "modify_server", + "description": "Update server name, description, or other settings" + }, + { + "name": "get_audit_logs", + "description": "Retrieve recent audit log entries for the server" + }, + { + "name": "list_webhooks", + "description": "Get all webhooks in the server or a specific channel" + }, + { + "name": "create_webhook", + "description": "Create a new webhook for a channel" + }, + { + "name": "get_invites", + "description": "List all active invite links for the server" + }, + { + "name": "create_invite", + "description": "Create a new invite link for a channel" + }, + { + "name": "get_member_info", + "description": "Get detailed information about a server member" + }, + { + "name": "list_members", + "description": "List all members in the server with optional filters" + }, + { + "name": "set_nickname", + "description": "Change a member's server nickname" + }, + { + "name": "assign_role", + "description": "Add a role to a server member" + }, + { + "name": "remove_role", + "description": "Remove a role from a server member" + }, + { + "name": "create_role", + "description": "Create a new role in the server with specified permissions" + }, + { + "name": "delete_role", + "description": "Delete a role from the server" + }, + { + "name": "modify_role", + "description": "Update a role's name, color, permissions, or other settings" + }, + { + "name": "list_roles", + "description": "Get all roles in the server with their permissions" + }, + { + "name": "get_role_info", + "description": "Get detailed information about a specific role" + }, + { + "name": "kick_member", + "description": "Remove a member from the server (they can rejoin)" + }, + { + "name": "ban_member", + "description": "Ban a member from the server (prevents rejoining)" + }, + { + "name": "unban_member", + "description": "Remove a ban, allowing the user to rejoin" + }, + { + "name": "timeout_member", + "description": "Temporarily mute a member (prevents sending messages, reactions, joining voice)" + }, + { + "name": "remove_timeout", + "description": "Remove timeout from a member, restoring their permissions" + }, + { + "name": "get_bans", + "description": "List all banned users in the server" + } +] diff --git a/servers/fastfs-mcp/readme.md b/servers/fastfs-mcp/readme.md new file mode 100644 index 000000000..0f40e6dac --- /dev/null +++ b/servers/fastfs-mcp/readme.md @@ -0,0 +1,297 @@ +# FastFS MCP + +High-performance filesystem and Git operations for AI-assisted development workflows. + +## Overview + +FastFS-MCP is a comprehensive MCP server providing 69 tools for filesystem operations, Git repository management, and code navigation. Built with performance in mind, it enables AI assistants like Claude to seamlessly interact with local filesystems and Git repositories through Docker. + +**Key capabilities:** +- **60+ filesystem tools**: Complete UNIX-style file operations (ls, find, grep, sed, awk, tar, etc.) +- **30+ Git tools**: Full Git workflow support plus advanced repository analysis +- **GitHub authentication**: Secure access via Personal Access Tokens or GitHub Apps +- **High performance**: Optimized for speed with tools like ripgrep and efficient file handling +- **Docker-native**: Runs in isolated container with /mnt/workspace mount point + +Perfect for AI-assisted coding, repository analysis, project exploration, and automated file management tasks. + +## Tools + +### Filesystem Operations (40+ tools) + +#### Basic File Operations +- **`fastfs_ls`**: List files and directories at a path +- **`fastfs_pwd`**: Print current working directory +- **`fastfs_cd`**: Change current directory +- **`fastfs_read`**: Read file contents (UTF-8 text files) +- **`fastfs_write`**: Write/overwrite file contents (creates parent dirs) +- **`fastfs_grep`**: Search file with pattern and line numbers +- **`fastfs_cat`**: Concatenate and display multiple files +- **`fastfs_head`**: Show first N lines of file (default 10) +- **`fastfs_tail`**: Show last N lines of file (default 10) + +#### File Management +- **`fastfs_cp`**: Copy files or directories (recursive support) +- **`fastfs_mv`**: Move or rename files/directories +- **`fastfs_rm`**: Remove files or directories (recursive, force options) +- **`fastfs_mkdir`**: Create directories (with parent support) +- **`fastfs_touch`**: Create empty file or update timestamp +- **`fastfs_chmod`**: Change permissions (octal or symbolic modes) +- **`fastfs_chown`**: Change file owner and group + +#### File Discovery & Analysis +- **`fastfs_find`**: Find files by glob pattern, type, max depth +- **`fastfs_tree`**: Display directory tree with depth limit +- **`fastfs_stat`**: Show detailed file metadata +- **`fastfs_which`**: Locate executables in PATH +- **`fastfs_du`**: Show disk usage of directory +- **`fastfs_df`**: Show disk space and usage +- **`fastfs_readlink`**: Resolve symbolic link target +- **`fastfs_realpath`**: Get absolute resolved path + +#### Text Processing +- **`fastfs_sed`**: Stream editor for text transformation +- **`fastfs_gawk`**: AWK text processing and filtering +- **`fastfs_cut`**: Extract columns by delimiter +- **`fastfs_sort`**: Sort lines (alphabetic, numeric, reverse) +- **`fastfs_uniq`**: Filter/report repeated lines +- **`fastfs_wc`**: Count lines, words, bytes +- **`fastfs_nl`**: Number lines in file +- **`fastfs_split`**: Split file into smaller parts + +#### Archive & Compression +- **`fastfs_tar`**: Create/extract/list tar archives (gzip, bzip2, xz) +- **`fastfs_gzip`**: Compress/decompress with gzip +- **`fastfs_zip`**: Create/extract zip archives + +### Git Operations (29 tools) + +#### Basic Git Workflow +- **`fastfs_clone`**: Clone repository (GitHub auth support) +- **`fastfs_init`**: Initialize new repository +- **`fastfs_add`**: Stage files for commit +- **`fastfs_commit`**: Commit staged changes +- **`fastfs_status`**: Show working tree status +- **`fastfs_push`**: Push to remote +- **`fastfs_pull`**: Pull from remote +- **`fastfs_fetch`**: Download refs and objects + +#### Branching & Merging +- **`fastfs_branch`**: List/create/delete branches +- **`fastfs_checkout`**: Switch branches or restore files +- **`fastfs_merge`**: Merge branch into current +- **`fastfs_rebase`**: Reapply commits on new base + +#### History & Inspection +- **`fastfs_log`**: Show commit history +- **`fastfs_show`**: Show commit details +- **`fastfs_diff`**: Show changes between versions +- **`fastfs_blame`**: Show line-by-line authorship +- **`fastfs_git_grep`**: Search tracked files efficiently + +#### Repository Management +- **`fastfs_remote`**: Manage remote repositories +- **`fastfs_tag`**: Create/list/delete tags +- **`fastfs_config`**: Get/set Git configuration +- **`fastfs_stash`**: Temporarily save uncommitted changes +- **`fastfs_reset`**: Reset HEAD to state (DESTRUCTIVE) +- **`fastfs_clean`**: Remove untracked files (DESTRUCTIVE) + +#### Advanced Analysis Tools +- **`fastfs_context`**: Get comprehensive repo status in one call (GO-TO tool) + - Current branch, repo root, clean status + - HEAD commit, remotes, recent commits + - Branches and tags lists +- **`fastfs_repo_info`**: Detailed repository statistics + - Commit count, contributors, file count, size + - Per-author commit counts +- **`fastfs_validate`**: Check repository health + - Identifies common issues and warnings +- **`fastfs_summarize_log`**: Analyze commit history + - Author statistics, date distribution + - Per-commit change metrics +- **`fastfs_suggest_commit`**: Auto-generate commit messages + - Analyzes staged changes + - Suggests conventional commit format +- **`fastfs_audit_history`**: Security audit of history + - Finds large files, potential secrets + - Identifies merge conflicts, binary files + +#### Utility Tools +- **`fastfs_rev_parse`**: Parse Git revisions +- **`fastfs_ls_files`**: List files in index/working tree +- **`fastfs_describe`**: Human-readable object names +- **`fastfs_git_show_head`**: Show current HEAD details +- **`fastfs_version`**: Get Git version + +## Configuration + +### Environment Variables + +| Variable | Required | Default | Description | +|----------|----------|---------|-------------| +| `GITHUB_PERSONAL_ACCESS_TOKEN` | No | None | GitHub PAT for private repo access | +| `GITHUB_APP_ID` | No | None | GitHub App ID for GitHub App auth | +| `GITHUB_APP_INSTALLATION_ID` | No | None | GitHub App installation ID | + +### Secrets + +| Secret | Required | Description | +|--------|----------|-------------| +| `GITHUB_PERSONAL_ACCESS_TOKEN` | No | GitHub Personal Access Token for authenticating with private repositories | +| `GITHUB_APP_PRIVATE_KEY` | No | GitHub App private key (PEM format) for GitHub App authentication | + +### Volumes + +| Volume | Path | Description | +|--------|------|-------------| +| `workspace` | `/mnt/workspace` | Local filesystem mount point for all file operations | + +## Usage Examples + +### Basic File Operations + +``` +# List current directory +fastfs_ls(path=".") + +# Read a file +fastfs_read(path="README.md") + +# Search for pattern +fastfs_grep(pattern="TODO", path="src/main.py") + +# Find Python files +fastfs_find(pattern="*.py", file_type="f") +``` + +### Git Workflow + +``` +# Get full repository context (START HERE) +fastfs_context() + +# Check status before changes +fastfs_status() + +# Stage and commit +fastfs_add(paths=".") +fastfs_suggest_commit() # Get AI-suggested commit message +fastfs_commit(message="feat: add new feature") + +# Push changes +fastfs_push() +``` + +### Repository Analysis + +``` +# Get repository statistics +fastfs_repo_info() + +# Audit for security issues +fastfs_audit_history() + +# Analyze recent commits +fastfs_summarize_log(count=20) + +# Check repository health +fastfs_validate() +``` + +### Project Exploration + +``` +# Visualize structure +fastfs_tree(path=".", depth=3) + +# Find all config files +fastfs_find(pattern="*.{json,yaml,yml}") + +# Search codebase +fastfs_git_grep(pattern="function.*export") + +# Check file details +fastfs_stat(path="package.json") +``` + +### Working with Archives + +``` +# Create tar.gz archive +fastfs_tar(operation="create", archive_file="backup.tar.gz", files=["src/", "docs/"]) + +# Extract zip archive +fastfs_zip(operation="extract", archive_file="download.zip") + +# Compress file +fastfs_gzip(path="large-file.log") +``` + +## Authentication + +FastFS-MCP supports two GitHub authentication methods: + +### Personal Access Token (Recommended for individuals) + +Set the `GITHUB_PERSONAL_ACCESS_TOKEN` environment variable: + +```bash +docker run -i --rm \ + -v /path/to/workspace:/mnt/workspace:rw \ + -e GITHUB_PERSONAL_ACCESS_TOKEN=ghp_your_token \ + mcp/fastfs-mcp +``` + +### GitHub App (Recommended for organizations) + +Provides fine-grained permissions and better security: + +```bash +docker run -i --rm \ + -v /path/to/workspace:/mnt/workspace:rw \ + -e GITHUB_APP_ID=123456 \ + -e GITHUB_APP_PRIVATE_KEY="$(cat key.pem)" \ + -e GITHUB_APP_INSTALLATION_ID=789012 \ + mcp/fastfs-mcp +``` + +Or use a file-based private key: + +```bash +docker run -i --rm \ + -v /path/to/workspace:/mnt/workspace:rw \ + -e GITHUB_APP_ID=123456 \ + -e GITHUB_APP_PRIVATE_KEY_PATH=/mnt/workspace/key.pem \ + -e GITHUB_APP_INSTALLATION_ID=789012 \ + mcp/fastfs-mcp +``` + +## Best Practices + +1. **Start with context**: Use `fastfs_context()` to understand repository state before making changes +2. **Check before commit**: Always run `fastfs_status()` before `fastfs_add()` and `fastfs_commit()` +3. **Preview destructive operations**: Use `fastfs_clean(options="-n")` to preview before `fastfs_clean(options="-f")` +4. **Use tree for navigation**: `fastfs_tree()` provides better overview than multiple `fastfs_ls()` calls +5. **Leverage analysis tools**: Use `fastfs_suggest_commit()`, `fastfs_validate()`, and `fastfs_audit_history()` for insights + +## Performance Notes + +- Uses ripgrep for fast file searching +- Optimized for large repositories with efficient Git operations +- Tree operations limited by depth to prevent excessive output +- All operations run in isolated Docker container + +## Security Considerations + +- Only mount directories you need to expose +- Use GitHub App authentication over PAT for better security +- Store private keys with proper file permissions (chmod 600) +- Regularly review executed commands in logs +- Be cautious with destructive operations (rm, reset --hard, clean -f) + +## Links + +- [Source Repository](https://github.com/aj-geddes/fastfs-mcp) +- [Issue Tracker](https://github.com/aj-geddes/fastfs-mcp/issues) +- [Docker Hub](https://hub.docker.com/r/mcp/fastfs-mcp) diff --git a/servers/fastfs-mcp/server.yaml b/servers/fastfs-mcp/server.yaml new file mode 100644 index 000000000..551b21e36 --- /dev/null +++ b/servers/fastfs-mcp/server.yaml @@ -0,0 +1,49 @@ +name: fastfs-mcp +image: mcp/fastfs-mcp +type: server + +meta: + category: developer-tools + tags: + - filesystem + - git + - developer-tools + - file-operations + - code-search + - version-control + - file-management + +about: + title: FastFS MCP + description: | + High-performance filesystem and Git operations MCP server with 69 comprehensive tools. + Provides lightning-fast file operations, complete Git integration, and repository analysis. + Perfect for AI-assisted development workflows, code navigation, and project management. + icon: https://avatars.githubusercontent.com/u/28900900 + +source: + project: https://github.com/aj-geddes/fastfs-mcp + +volumes: + - name: workspace + path: /mnt/workspace + description: Local filesystem workspace for file operations + +env: + - name: GITHUB_PERSONAL_ACCESS_TOKEN + description: GitHub Personal Access Token for private repository access + required: false + - name: GITHUB_APP_ID + description: GitHub App ID for GitHub App authentication + required: false + - name: GITHUB_APP_INSTALLATION_ID + description: GitHub App installation ID + required: false + +secrets: + - name: GITHUB_PERSONAL_ACCESS_TOKEN + description: GitHub PAT for authenticating with private repositories + required: false + - name: GITHUB_APP_PRIVATE_KEY + description: GitHub App private key (PEM format) for GitHub App authentication + required: false diff --git a/servers/fastfs-mcp/tools.json b/servers/fastfs-mcp/tools.json new file mode 100644 index 000000000..c8e31a910 --- /dev/null +++ b/servers/fastfs-mcp/tools.json @@ -0,0 +1,1292 @@ +[ + { + "name": "fastfs_ls", + "description": "List files and directories at a given path. Use when you need to see what files exist in a directory, explore project structure, or verify file presence before operations. Returns list of filenames (not full paths).", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to directory (default: current directory)", + "default": "." + } + } + } + }, + { + "name": "fastfs_pwd", + "description": "Print the current working directory. Returns absolute path string. Default is /mnt/workspace.", + "inputSchema": { + "type": "object", + "properties": {} + } + }, + { + "name": "fastfs_cd", + "description": "Change the current working directory. Use when you need to switch context to work within a specific project or subdirectory. Changes persist across tool calls.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to change to" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_read", + "description": "Read the contents of a file. Returns full file contents as UTF-8 string. For large files (>1MB), consider head() or tail() first.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file to read" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_write", + "description": "Write contents to a file. WARNING: Overwrites existing files without confirmation. Creates parent directories automatically.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file to write" + }, + "content": { + "type": "string", + "description": "Content to write to file", + "default": "" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_grep", + "description": "Search for a pattern in a file using grep with line numbers. Returns matching lines with line numbers (format: linenum:content).", + "inputSchema": { + "type": "object", + "properties": { + "pattern": { + "type": "string", + "description": "Pattern to search for (supports regex)" + }, + "path": { + "type": "string", + "description": "Path to file to search" + } + }, + "required": ["pattern", "path"] + } + }, + { + "name": "fastfs_which", + "description": "Locate a command in the system path.", + "inputSchema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "Command to locate" + } + }, + "required": ["command"] + } + }, + { + "name": "fastfs_sed", + "description": "Use sed to transform file content using stream editing.", + "inputSchema": { + "type": "object", + "properties": { + "script": { + "type": "string", + "description": "Sed script to execute" + }, + "path": { + "type": "string", + "description": "Path to file" + } + }, + "required": ["script", "path"] + } + }, + { + "name": "fastfs_gawk", + "description": "Use gawk to process file content using AWK scripting.", + "inputSchema": { + "type": "object", + "properties": { + "script": { + "type": "string", + "description": "AWK script to execute" + }, + "path": { + "type": "string", + "description": "Path to file" + } + }, + "required": ["script", "path"] + } + }, + { + "name": "fastfs_stat", + "description": "Display file status and metadata including size, permissions, timestamps.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file or directory" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_tree", + "description": "Display directory tree structure with visual hierarchy. Returns ASCII tree visualization showing directories and files.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to directory", + "default": "." + }, + "depth": { + "type": "integer", + "description": "Maximum depth to display", + "default": 3 + } + } + } + }, + { + "name": "fastfs_find", + "description": "Find files by name pattern recursively. Returns list of matching file paths relative to search path.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Starting path for search", + "default": "." + }, + "pattern": { + "type": "string", + "description": "Glob pattern like *.py, test_*, *.{js,ts}", + "default": "*" + }, + "file_type": { + "type": "string", + "description": "Filter by type: f (file), d (directory), l (symlink)" + }, + "max_depth": { + "type": "integer", + "description": "Limit search depth (None = unlimited)" + } + } + } + }, + { + "name": "fastfs_cp", + "description": "Copy files or directories. WARNING: Will overwrite destination if it exists.", + "inputSchema": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Source path" + }, + "destination": { + "type": "string", + "description": "Destination path" + }, + "recursive": { + "type": "boolean", + "description": "Copy directories recursively", + "default": false + } + }, + "required": ["source", "destination"] + } + }, + { + "name": "fastfs_mv", + "description": "Move or rename files or directories. DESTRUCTIVE: Original file/directory will no longer exist at source path.", + "inputSchema": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Source path" + }, + "destination": { + "type": "string", + "description": "Destination path" + } + }, + "required": ["source", "destination"] + } + }, + { + "name": "fastfs_rm", + "description": "Remove files or directories. DANGEROUS: Deletion is permanent, cannot be undone.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to remove" + }, + "recursive": { + "type": "boolean", + "description": "Remove directories recursively", + "default": false + }, + "force": { + "type": "boolean", + "description": "Suppress errors if path doesn't exist", + "default": false + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_touch", + "description": "Create a new empty file or update its timestamp.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_mkdir", + "description": "Create a new directory.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to directory to create" + }, + "parents": { + "type": "boolean", + "description": "Create parent directories as needed", + "default": false + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_du", + "description": "Show disk usage of a directory.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to directory", + "default": "." + }, + "human_readable": { + "type": "boolean", + "description": "Show sizes in human-readable format (KB, MB, GB)", + "default": true + }, + "max_depth": { + "type": "integer", + "description": "Maximum depth to display", + "default": 1 + } + } + } + }, + { + "name": "fastfs_df", + "description": "Show disk space and usage.", + "inputSchema": { + "type": "object", + "properties": { + "human_readable": { + "type": "boolean", + "description": "Show sizes in human-readable format", + "default": true + } + } + } + }, + { + "name": "fastfs_chmod", + "description": "Change file mode (permissions). Supports both octal (755) and symbolic (u+x) modes.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file or directory" + }, + "mode": { + "type": "string", + "description": "Permission mode (octal like 755 or symbolic like u+x)" + } + }, + "required": ["path", "mode"] + } + }, + { + "name": "fastfs_chown", + "description": "Change file owner and group.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file or directory" + }, + "owner": { + "type": "string", + "description": "Owner name" + }, + "group": { + "type": "string", + "description": "Group name (optional)" + } + }, + "required": ["path", "owner"] + } + }, + { + "name": "fastfs_cat", + "description": "Concatenate and display file contents. Can display multiple files.", + "inputSchema": { + "type": "object", + "properties": { + "paths": { + "type": "array", + "description": "List of file paths to concatenate", + "items": { + "type": "string" + } + } + }, + "required": ["paths"] + } + }, + { + "name": "fastfs_head", + "description": "Display the first part of files.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "lines": { + "type": "integer", + "description": "Number of lines to show", + "default": 10 + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_tail", + "description": "Display the last part of files.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "lines": { + "type": "integer", + "description": "Number of lines to show", + "default": 10 + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_readlink", + "description": "Print the resolved path of a symbolic link.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to symbolic link" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_realpath", + "description": "Print the resolved absolute path.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to resolve" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_cut", + "description": "Select specific columns from each line using a delimiter.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "delimiter": { + "type": "string", + "description": "Field delimiter", + "default": "\t" + }, + "fields": { + "type": "string", + "description": "Field specification (e.g., 1, 1-3, 1,3)", + "default": "1" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_sort", + "description": "Sort lines of text files.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "reverse": { + "type": "boolean", + "description": "Sort in reverse order", + "default": false + }, + "numeric": { + "type": "boolean", + "description": "Sort numerically", + "default": false + }, + "field": { + "type": "integer", + "description": "Sort by specific field number" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_uniq", + "description": "Report or filter out repeated lines in a file.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "count": { + "type": "boolean", + "description": "Prefix lines with occurrence count", + "default": false + }, + "repeated": { + "type": "boolean", + "description": "Only show repeated lines", + "default": false + }, + "ignore_case": { + "type": "boolean", + "description": "Ignore case when comparing", + "default": false + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_wc", + "description": "Print line, word, and byte counts for a file.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "lines": { + "type": "boolean", + "description": "Count lines", + "default": true + }, + "words": { + "type": "boolean", + "description": "Count words", + "default": true + }, + "bytes": { + "type": "boolean", + "description": "Count bytes", + "default": true + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_nl", + "description": "Number lines in a file.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "number_empty": { + "type": "boolean", + "description": "Number empty lines", + "default": true + }, + "number_format": { + "type": "string", + "description": "Number format string", + "default": "%6d " + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_split", + "description": "Split a file into smaller parts.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file to split" + }, + "prefix": { + "type": "string", + "description": "Prefix for output files", + "default": "x" + }, + "lines": { + "type": "integer", + "description": "Lines per output file", + "default": 1000 + }, + "bytes_size": { + "type": "string", + "description": "Bytes per output file (e.g., 10M, 100K)" + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_tar", + "description": "Create, extract, or list tar archives. Supports gzip, bzip2, and xz compression.", + "inputSchema": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "description": "Operation: create, extract, or list", + "enum": ["create", "extract", "list"] + }, + "archive_file": { + "type": "string", + "description": "Archive file path" + }, + "files": { + "type": "array", + "description": "Files to include (for create operation)", + "items": { + "type": "string" + } + }, + "options": { + "type": "string", + "description": "Additional tar options", + "default": "" + } + }, + "required": ["operation", "archive_file"] + } + }, + { + "name": "fastfs_gzip", + "description": "Compress or decompress files using gzip.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to file" + }, + "decompress": { + "type": "boolean", + "description": "Decompress instead of compress", + "default": false + }, + "keep": { + "type": "boolean", + "description": "Keep original file", + "default": false + } + }, + "required": ["path"] + } + }, + { + "name": "fastfs_zip", + "description": "Create or extract zip archives.", + "inputSchema": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "description": "Operation: create or extract", + "enum": ["create", "extract"] + }, + "archive_file": { + "type": "string", + "description": "Archive file path" + }, + "files": { + "type": "array", + "description": "Files to include (for create operation)", + "items": { + "type": "string" + } + }, + "options": { + "type": "string", + "description": "Additional zip/unzip options", + "default": "" + } + }, + "required": ["operation", "archive_file"] + } + }, + { + "name": "fastfs_clone", + "description": "Clone a Git repository to local filesystem. Supports GitHub authentication via PAT or GitHub App.", + "inputSchema": { + "type": "object", + "properties": { + "repo_url": { + "type": "string", + "description": "Git repository URL to clone" + }, + "target_dir": { + "type": "string", + "description": "Target directory (optional)" + }, + "options": { + "type": "string", + "description": "Additional git clone options", + "default": "" + } + }, + "required": ["repo_url"] + } + }, + { + "name": "fastfs_init", + "description": "Initialize a new Git repository.", + "inputSchema": { + "type": "object", + "properties": { + "directory": { + "type": "string", + "description": "Directory to initialize", + "default": "." + } + } + } + }, + { + "name": "fastfs_add", + "description": "Add file(s) to the Git staging area for next commit.", + "inputSchema": { + "type": "object", + "properties": { + "paths": { + "description": "File path(s) to add (string or array of strings)", + "oneOf": [ + {"type": "string"}, + {"type": "array", "items": {"type": "string"}} + ] + }, + "options": { + "type": "string", + "description": "Additional git add options", + "default": "" + } + }, + "required": ["paths"] + } + }, + { + "name": "fastfs_commit", + "description": "Commit staged changes to the Git repository. Creates a permanent record in git history.", + "inputSchema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Commit message" + }, + "options": { + "type": "string", + "description": "Additional git commit options", + "default": "" + } + }, + "required": ["message"] + } + }, + { + "name": "fastfs_status", + "description": "Show the working tree status - staged, unstaged, and untracked files. Run this BEFORE add() and commit().", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Additional git status options (e.g., --short)", + "default": "" + } + } + } + }, + { + "name": "fastfs_push", + "description": "Push commits to a remote repository. DESTRUCTIVE: Publishes commits to remote. Requires authentication for private repos.", + "inputSchema": { + "type": "object", + "properties": { + "remote": { + "type": "string", + "description": "Remote name", + "default": "origin" + }, + "branch": { + "type": "string", + "description": "Branch name", + "default": "" + }, + "options": { + "type": "string", + "description": "Additional git push options", + "default": "" + } + } + } + }, + { + "name": "fastfs_pull", + "description": "Pull changes from a remote repository and merge into current branch.", + "inputSchema": { + "type": "object", + "properties": { + "remote": { + "type": "string", + "description": "Remote name", + "default": "origin" + }, + "branch": { + "type": "string", + "description": "Branch name", + "default": "" + }, + "options": { + "type": "string", + "description": "Additional git pull options", + "default": "" + } + } + } + }, + { + "name": "fastfs_log", + "description": "Show commit history log with hashes, authors, dates, and messages.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Git log options (e.g., --oneline -n 20, --author=name)", + "default": "--oneline -n 10" + } + } + } + }, + { + "name": "fastfs_checkout", + "description": "Switch branches or restore working tree files. CAUTION: May lose uncommitted changes.", + "inputSchema": { + "type": "object", + "properties": { + "revision": { + "type": "string", + "description": "Branch name, commit hash, or file path" + }, + "options": { + "type": "string", + "description": "Additional git checkout options (e.g., -b for new branch)", + "default": "" + } + }, + "required": ["revision"] + } + }, + { + "name": "fastfs_branch", + "description": "List, create, or delete branches. Returns branch list (current marked with *).", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Git branch options (e.g., -d to delete)", + "default": "" + }, + "branch_name": { + "type": "string", + "description": "Branch name for create/delete operations" + } + } + } + }, + { + "name": "fastfs_merge", + "description": "Merge another branch into the current branch. CAUTION: May cause merge conflicts.", + "inputSchema": { + "type": "object", + "properties": { + "branch": { + "type": "string", + "description": "Branch to merge" + }, + "options": { + "type": "string", + "description": "Additional git merge options", + "default": "" + } + }, + "required": ["branch"] + } + }, + { + "name": "fastfs_show", + "description": "Show detailed information about a Git object (commit, tag, etc.). Returns full commit information including message and changes.", + "inputSchema": { + "type": "object", + "properties": { + "object": { + "type": "string", + "description": "Git object (commit hash, tag, HEAD, etc.)", + "default": "HEAD" + }, + "options": { + "type": "string", + "description": "Additional git show options", + "default": "" + } + } + } + }, + { + "name": "fastfs_diff", + "description": "Show changes between commits, staging area, and working tree. Returns unified diff showing additions (+) and deletions (-).", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Git diff options (e.g., --staged, HEAD~1)", + "default": "" + }, + "path": { + "type": "string", + "description": "Specific file path to diff" + } + } + } + }, + { + "name": "fastfs_remote", + "description": "Manage remote repositories (show, add, remove, rename).", + "inputSchema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "Remote command (show, add, remove, rename)", + "default": "show" + }, + "name": { + "type": "string", + "description": "Remote name" + }, + "options": { + "type": "string", + "description": "Additional options", + "default": "" + } + } + } + }, + { + "name": "fastfs_rev_parse", + "description": "Pick out and massage parameters for low-level Git commands.", + "inputSchema": { + "type": "object", + "properties": { + "rev": { + "type": "string", + "description": "Revision to parse" + }, + "options": { + "type": "string", + "description": "Git rev-parse options", + "default": "" + } + }, + "required": ["rev"] + } + }, + { + "name": "fastfs_ls_files", + "description": "Show information about files in the index and the working tree.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Git ls-files options", + "default": "" + } + } + } + }, + { + "name": "fastfs_describe", + "description": "Give an object a human-readable name based on available ref.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Git describe options", + "default": "--tags" + } + } + } + }, + { + "name": "fastfs_rebase", + "description": "Reapply commits on top of another base tip.", + "inputSchema": { + "type": "object", + "properties": { + "branch": { + "type": "string", + "description": "Branch to rebase onto" + }, + "options": { + "type": "string", + "description": "Git rebase options", + "default": "" + } + }, + "required": ["branch"] + } + }, + { + "name": "fastfs_stash", + "description": "Stash changes in a dirty working directory temporarily. Commands: push (save), pop (restore and remove), apply (restore and keep), list (show stashes).", + "inputSchema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "Stash command (push, pop, apply, list)", + "default": "push" + }, + "options": { + "type": "string", + "description": "Additional stash options", + "default": "" + } + } + } + }, + { + "name": "fastfs_reset", + "description": "Reset current HEAD to a specified state. DANGEROUS: Can lose uncommitted work. Use --hard with extreme caution.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Reset options (--soft, --hard, HEAD~1, etc.)", + "default": "" + }, + "paths": { + "description": "Specific paths to reset", + "oneOf": [ + {"type": "string"}, + {"type": "array", "items": {"type": "string"}} + ] + } + } + } + }, + { + "name": "fastfs_clean", + "description": "Remove untracked files from the working tree. DANGEROUS: Deleted files cannot be recovered. ALWAYS run with -n first to preview.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Clean options: -n (dry run), -f (force delete), -fd (delete files and directories)", + "default": "-n" + } + } + } + }, + { + "name": "fastfs_tag", + "description": "Create, list, delete or verify a tag object.", + "inputSchema": { + "type": "object", + "properties": { + "tag_name": { + "type": "string", + "description": "Tag name (omit to list all tags)" + }, + "options": { + "type": "string", + "description": "Git tag options (e.g., -a for annotated, -d to delete)", + "default": "" + } + } + } + }, + { + "name": "fastfs_config", + "description": "Get or set repository or global Git configuration options.", + "inputSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Configuration name (e.g., user.name)" + }, + "value": { + "type": "string", + "description": "Configuration value to set" + }, + "options": { + "type": "string", + "description": "Git config options (e.g., --global)", + "default": "" + } + } + } + }, + { + "name": "fastfs_fetch", + "description": "Download objects and refs from another repository.", + "inputSchema": { + "type": "object", + "properties": { + "remote": { + "type": "string", + "description": "Remote name", + "default": "origin" + }, + "options": { + "type": "string", + "description": "Git fetch options", + "default": "" + } + } + } + }, + { + "name": "fastfs_blame", + "description": "Show what revision and author last modified each line of a file.", + "inputSchema": { + "type": "object", + "properties": { + "file_path": { + "type": "string", + "description": "Path to file" + }, + "options": { + "type": "string", + "description": "Git blame options", + "default": "" + } + }, + "required": ["file_path"] + } + }, + { + "name": "fastfs_git_grep", + "description": "Print lines matching a pattern in tracked files. More efficient than fastfs_grep for git repositories.", + "inputSchema": { + "type": "object", + "properties": { + "pattern": { + "type": "string", + "description": "Pattern to search for" + }, + "options": { + "type": "string", + "description": "Git grep options", + "default": "" + } + }, + "required": ["pattern"] + } + }, + { + "name": "fastfs_context", + "description": "Get comprehensive context about the current Git repository in a single call. Returns current branch, repo root, clean status, HEAD commit, remotes, recent commits, branches, and tags. This is your GO-TO tool for understanding repository state.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Context options", + "default": "--all" + } + } + } + }, + { + "name": "fastfs_git_show_head", + "description": "Show the current HEAD commit information in detail. Returns full commit details including message, author, date, and diff.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Git show options", + "default": "" + } + } + } + }, + { + "name": "fastfs_version", + "description": "Get the Git version installed in the container.", + "inputSchema": { + "type": "object", + "properties": {} + } + }, + { + "name": "fastfs_validate", + "description": "Validate the Git repository for common issues and potential problems. Returns validation results with issues, warnings, and info.", + "inputSchema": { + "type": "object", + "properties": {} + } + }, + { + "name": "fastfs_repo_info", + "description": "Get comprehensive statistics and information about the Git repository including commit count, contributors, file count, size, and more.", + "inputSchema": { + "type": "object", + "properties": {} + } + }, + { + "name": "fastfs_summarize_log", + "description": "Summarize the git log with statistics per author, date distribution, and change metrics. Returns commits list and aggregated stats.", + "inputSchema": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "description": "Number of commits to analyze", + "default": 10 + }, + "options": { + "type": "string", + "description": "Additional git log options", + "default": "" + } + } + } + }, + { + "name": "fastfs_suggest_commit", + "description": "Analyze staged changes and suggest a conventional commit message. Returns changes summary, suggested message, type (feat/fix/docs/etc), and scope.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Additional options", + "default": "" + } + } + } + }, + { + "name": "fastfs_audit_history", + "description": "Audit repository history for security issues and problematic patterns. Checks for large files, secrets, merge conflict markers, binary files, and short commit messages.", + "inputSchema": { + "type": "object", + "properties": { + "options": { + "type": "string", + "description": "Audit options", + "default": "" + } + } + } + } +]