{"id":30869232,"url":"https://github.com/DanielAvdar/dev-kit-mcp-server","last_synced_at":"2025-09-07T22:16:36.259Z","repository":{"id":292087571,"uuid":"978674052","full_name":"DanielAvdar/dev-kit-mcp-server","owner":"DanielAvdar","description":"Agent development tool-kit","archived":false,"fork":false,"pushed_at":"2025-09-03T00:36:05.000Z","size":1242,"stargazers_count":3,"open_issues_count":7,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-03T02:19:50.214Z","etag":null,"topics":["llm-agents","mcp","mcp-server","server"],"latest_commit_sha":null,"homepage":"https://dev-kit-mcp-server.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DanielAvdar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-06T10:48:37.000Z","updated_at":"2025-09-03T00:36:07.000Z","dependencies_parsed_at":"2025-05-30T11:25:15.265Z","dependency_job_id":"817b711c-9978-44df-b94c-58f6165afebc","html_url":"https://github.com/DanielAvdar/dev-kit-mcp-server","commit_stats":null,"previous_names":["danielavdar/exp-mcp-py","danielavdar/dev-kit-mcp-server"],"tags_count":10,"template":false,"template_full_name":"DanielAvdar/python-template","purl":"pkg:github/DanielAvdar/dev-kit-mcp-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielAvdar%2Fdev-kit-mcp-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielAvdar%2Fdev-kit-mcp-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielAvdar%2Fdev-kit-mcp-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielAvdar%2Fdev-kit-mcp-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DanielAvdar","download_url":"https://codeload.github.com/DanielAvdar/dev-kit-mcp-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielAvdar%2Fdev-kit-mcp-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274102851,"owners_count":25222681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["llm-agents","mcp","mcp-server","server"],"created_at":"2025-09-07T22:04:03.617Z","updated_at":"2025-09-07T22:16:36.242Z","avatar_url":"https://github.com/DanielAvdar.png","language":"Python","funding_links":[],"categories":["🤖 AI/ML"],"sub_categories":[],"readme":"# Dev-Kit MCP Server\n\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/dev-kit-mcp-server)](https://pypi.org/project/dev-kit-mcp-server/)\n[![version](https://img.shields.io/pypi/v/dev-kit-mcp-server)](https://img.shields.io/pypi/v/dev-kit-mcp-server)\n[![License](https://img.shields.io/:license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n![OS](https://img.shields.io/badge/ubuntu-blue?logo=ubuntu)\n![OS](https://img.shields.io/badge/win-blue?logo=windows)\n![OS](https://img.shields.io/badge/mac-blue?logo=apple)\n[![Tests](https://github.com/DanielAvdar/dev-kit-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/DanielAvdar/dev-kit-mcp-server/actions/workflows/ci.yml)\n[![Code Checks](https://github.com/DanielAvdar/dev-kit-mcp-server/actions/workflows/code-checks.yml/badge.svg)](https://github.com/DanielAvdar/dev-kit-mcp-server/actions/workflows/code-checks.yml)\n[![codecov](https://codecov.io/gh/DanielAvdar/dev-kit-mcp-server/graph/badge.svg?token=N0V9KANTG2)](https://codecov.io/gh/DanielAvdar/dev-kit-mcp-server)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n![Last Commit](https://img.shields.io/github/last-commit/DanielAvdar/dev-kit-mcp-server/main)\n\nA Model Context Protocol (MCP) server targeted for agent development tools, providing scoped authorized operations in the root project directory. This package enables secure execution of operations such as running makefile commands, moving and deleting files, with future plans to include more tools for code editing. It serves as an excellent MCP server for VS-Code copilot and other AI-assisted development tools.\n\n\u003ca href=\"https://glama.ai/mcp/servers/@DanielAvdar/dev-kit-mcp-server\"\u003e\n  \u003cimg width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/@DanielAvdar/dev-kit-mcp-server/badge\" alt=\"dev-kit-mcp-server MCP server\" /\u003e\n\u003c/a\u003e\n\n## Features\n\n- 🔒 **Secure Operations**: Execute operations within a scoped, authorized root directory\n- 🛠️ **Makefile Command Execution**: Run makefile commands securely within the project\n- 📁 **File Operations**: Move, Create, Rename and Delete files within the authorized directory\n- 🔄 **Git Operations**: Perform Git operations like status, add, commit, push, pull, and checkout\n- 🔌 **MCP Integration**: Turn any codebase into an MCP-compliant system\n- 🤖 **AI-Assisted Development**: Excellent integration with VS-Code copilot and other AI tools\n- 🔄 **Extensible Framework**: Easily add new tools for code editing and other operations\n- 🚀 **Fast Performance**: Built with FastMCP for high performance\n\n## Installation\n\n```bash\npip install dev-kit-mcp-server\n```\n\n## Usage\n\n### Running the Server\n\n```bash\n# Recommended method (with root directory specified)\ndev-kit-mcp-server --root-dir=workdir\n\n# With custom TOML file for predefined commands\ndev-kit-mcp-server --root-dir=workdir --commands-toml=custom_commands.toml\n\n# Alternative methods\nuv run python -m dev_kit_mcp_server.mcp_server --root-dir=workdir\npython -m dev_kit_mcp_server.mcp_server --root-dir=workdir\n```\n\nThe `--root-dir` parameter specifies the directory where file operations will be performed. This is important for security reasons, as it restricts file operations to this directory only.\n\nThe `--commands-toml` parameter allows you to specify a custom TOML file for predefined commands instead of using the default `pyproject.toml` file. This is useful when you want to define a separate set of commands for different purposes.\n\n### Available Tools\n\nThe server provides the following tools:\n\n#### File Operations\n- **create_dir**: Create directories within the authorized root directory\n- **edit_file**: Edit files by replacing lines between specified start and end lines with new text\n- **move_dir**: Move files and directories within the authorized root directory\n- **remove_file**: Delete files within the authorized root directory\n- **rename_file**: Rename files and directories within the authorized root directory\n\n#### Git Operations\n- **git_status**: Get the status of the Git repository (changed files, untracked files, etc.)\n- **git_add**: Add files to the Git index (staging area)\n- **git_commit**: Commit changes to the Git repository\n- **git_push**: Push changes to a remote Git repository\n- **git_pull**: Pull changes from a remote Git repository\n- **git_checkout**: Checkout or create a branch in the Git repository\n- **git_diff**: Show diffs between commits, commit and working tree, etc.\n\n#### Makefile Operations\n- **exec_make_target**: Run makefile commands securely within the project\n\n#### Exploration Operations\n- **search_files**: Search for files by regex pattern in the project directory. Supports optional root directory and output length limits.\n- **search_text**: Search for lines in files matching a given pattern. Supports file filtering, context lines, and output length limits.\n- **read_lines**: Read specific lines or a range from a file. Supports line range selection and output length limits.\n\n#### Predefined Commands\n- **predefined_commands**: Execute predefined commands from a TOML file (default: pyproject.toml under [tool.dkmcp.commands] section)\n\nThe TOML file format for predefined commands is as follows:\n\n```toml\n[tool.dkmcp.commands]\ntest = \"uv run pytest\"\nlint = \"ruff check\"\ncheck = \"uvx pre-commit run --all-files\"\ndoctest = \"make doctest\"\n```\n\nEach command is defined as a key-value pair where the key is the command name and the value is the command to execute. For example, when you call the predefined command \"test\", it will execute \"uv run pytest\" in the root directory.\n\nHere's a simple example of how to define commands in a custom TOML file:\n\n```toml\n# custom_commands.toml\n[tool.dkmcp.commands]\n# Basic commands\nhello = \"echo Hello, World!\"\ndate = \"date\"\n\n# Development commands\ntest = \"pytest\"\nlint = \"ruff check .\"\nbuild = \"python setup.py build\"\n```\n\n### Example Usage with MCP Client\n\n```python\nfrom fastmcp import Client\nasync def example():\n    async with Client() as client:\n        # List available tools\n        tools = await client.list_tools()\n\n        # File Operations\n        # Create a directory\n        result = await client.call_tool(\"create_dir\", {\"path\": \"new_directory\"})\n\n        # Move a file\n        result = await client.call_tool(\"move_dir\", {\"path1\": \"source.txt\", \"path2\": \"destination.txt\"})\n\n        # Remove a file\n        result = await client.call_tool(\"remove_file\", {\"path\": \"file_to_remove.txt\"})\n\n        # Rename a file\n        result = await client.call_tool(\"rename_file\", {\"path\": \"old_name.txt\", \"new_name\": \"new_name.txt\"})\n\n        # Edit a file\n        result = await client.call_tool(\"edit_file\", {\n            \"path\": \"file_to_edit.txt\",\n            \"start_line\": 2,\n            \"end_line\": 4,\n            \"text\": \"This text will replace lines 2-4\"\n        })\n\n        # Git Operations\n        # Get repository status\n        result = await client.call_tool(\"git_status\")\n\n        # Add files to the index\n        result = await client.call_tool(\"git_add\", {\"paths\": [\"file1.txt\", \"file2.txt\"]})\n\n        # Commit changes\n        result = await client.call_tool(\"git_commit\", {\"message\": \"Add new files\"})\n\n        # Pull changes from remote\n        result = await client.call_tool(\"git_pull\", {\"remote\": \"origin\", \"branch\": \"main\"})\n\n        # Push changes to remote\n        result = await client.call_tool(\"git_push\")\n\n        # Checkout a branch\n        result = await client.call_tool(\"git_checkout\", {\"branch\": \"feature-branch\", \"create\": True})\n\n        # Makefile Operations\n        # Run a makefile command\n        result = await client.call_tool(\"exec_make_target\", {\"commands\": [\"test\"]})\n\n        # Exploration Operations\n        # Search for Python files\n        result = await client.call_tool(\"search_files\", {\"pattern\": \".*\\\\.py$\"})\n\n        # Search for files in a specific directory with output limit\n        result = await client.call_tool(\"search_files\", {\n            \"pattern\": \"test.*\",\n            \"root\": \"tests\",\n            \"max_chars\": 1000\n        })\n\n        # Search for text patterns in files\n        result = await client.call_tool(\"search_text\", {\"pattern\": \"def.*test\"})\n\n        # Search in specific files with context\n        result = await client.call_tool(\"search_text\", {\n            \"pattern\": \"import\",\n            \"files\": [\"main.py\", \"utils.py\"],\n            \"context\": 2\n        })\n\n        # Read specific lines from a file\n        result = await client.call_tool(\"read_lines\", {\"file_path\": \"README.md\", \"start\": 1, \"end\": 10})\n\n        # Read entire file with character limit\n        result = await client.call_tool(\"read_lines\", {\n            \"file_path\": \"config.json\",\n            \"max_chars\": 500\n        })\n\n        # Predefined Commands\n        # Execute a predefined command\n        result = await client.call_tool(\"predefined_commands\", {\"command\": \"test\"})\n\n        # Execute a predefined command with a parameter\n        result = await client.call_tool(\"predefined_commands\", {\"command\": \"test\", \"param\": \"specific_test\"})\n```\n\n## Development\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/DanielAvdar/dev-kit-mcp-server.git\ncd dev-kit-mcp-server\n\n# Install development dependencies\npip install -e \".[dev]\"\n\n# Run tests\npytest\n```\n\n### Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDanielAvdar%2Fdev-kit-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDanielAvdar%2Fdev-kit-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDanielAvdar%2Fdev-kit-mcp-server/lists"}