DDEV MCP
Supports CakePHP project environments within DDEV, enabling DDEV management commands.
Allows running Composer commands like install and update via ddev_exec.
Enables executing Cypress tests inside DDEV containers.
Provides Drush command execution for cache clearing, configuration export, and more.
Supports Artisan commands for migrations and other Laravel tasks.
Allows direct MySQL queries and database operations within DDEV projects.
Integrates with Platform.sh for environment management, with dangerous command protection.
Enables Redis commands like cache flushing and memory inspection.
Supports Symfony console commands for cache clearing and more.
Supports TYPO3 development environments with DDEV management.
Provides WP-CLI commands for plugin management, core updates, and cache flushing.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DDEV MCPclear Drupal cache"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DDEV MCP
A production-ready Model Context Protocol (MCP) server that provides AI assistants with DDEV development environment automation. Built with TypeScript using the official MCP SDK.
** 13 Essential Tools**
Streamlined tool set optimized for AI models. Supports all DDEV project types including Drupal, WordPress, Laravel, Symfony, TYPO3, CakePHP, Magento, and many more through the powerful ddev_exec command!
Complete DDEV Development Automation
This DDEV MCP server provides comprehensive development environment automation for any web project:
Environment Management: Start, stop, restart DDEV projects
Database Operations: Import/export, snapshots, migrations
CMS-Specific Workflows: Drupal, WordPress, Laravel, etc
Related MCP server: Webasyst MCP Server
Documentation
Tools reference — What each MCP tool does, arguments, and full
ddev helpoutput. Use this to see what the AI sees and how tools map to the DDEV CLI.
Features
Environment Management
Start, stop, restart DDEV projects
Get project status and detailed information
Access container logs and SSH into services
Database Operations
Import/export databases with various formats
Support for compressed database files
Target specific databases in multi-db setups
Command Executor (exec)
Single
ddev_exectool handles all CMS/framework commandsDrupal: Execute Drush commands (
drush cr,drush cex, etc.)WordPress: WP-CLI commands (
wp plugin list,wp core update, etc.)Laravel: Artisan commands (
php artisan migrate, etc.)Symfony: Console commands (
symfony console cache:clear, etc.)Composer: Package management (
composer install,composer update, etc.)Redis, Solr, MySQL: Direct service commands
Testing: Playwright, Cypress, PHPUnit, and custom test runners
And more: Any command you can run in a DDEV container!
Production Ready
Thorough error handling and logging
Input validation and sanitization
TypeScript for type safety
Dangerous Command Protection: Built-in safety system for production-affecting commands
Installation
Prerequisites
Node.js 20+ (Node.js 22+ preferred for best performance)
DDEV installed and available in PATH
TypeScript knowledge for team contributions
Quick Setup
# Install globally
npm install -g ddev-mcp
# Or run directly with npx
npx ddev-mcp --help
# Verify installation
ddev-mcp --versionNode.js Version Requirements
Minimum: Node.js 20.0.0+
Recommended: Node.js 22.0.0+ (for best performance and latest features)
Check your version:
node --version
Development Setup
git clone git@github.com:codingsasi/ddev-mcp.git
cd ddev-mcp
npm install
npm run build
npm run devConfiguration
MCP Client Configuration
Add to your ~/.cursor/mcp.json:
{
"mcpServers": {
"ddev": {
"command": "npx",
"args": ["ddev-mcp"],
"env": {
"ALLOW_DANGEROUS_COMMANDS": "false" // true if you want ddev to run commands like `platform redeploy -emaster`
},
}
}
}No additional configuration needed! The server automatically detects your DDEV projects.
Environment Variables
# Optional: Configure logging level
export DDEV_MCP_LOG_LEVEL="DEBUG"
# Optional: Max buffer size in bytes for command output (default: 2097152 = 2 MiB).
# If a command's stdout+stderr exceeds this, Node throws ERR_CHILD_PROCESS_STDIO_MAXBUFFER.
export DDEV_MCP_MAX_BUFFER="4194304"
# Safety: Allow dangerous commands (default: false)
export ALLOW_DANGEROUS_COMMANDS="true"Dangerous Command Protection
The DDEV MCP server includes built-in protection against dangerous commands that could affect production environments:
Platform.sh commands like
environment:redeploy,environment:deleteare blocked by defaultDatabase operations that could delete data are protected
File operations that could remove important files are safeguarded
Enabling Dangerous Commands
To allow dangerous commands (use with caution):
export ALLOW_DANGEROUS_COMMANDS="true"Adding New Dangerous Commands
Contributors can easily add dangerous command patterns in src/config/dangerous-commands.ts. See DANGEROUS_COMMANDS.md for detailed instructions.
Simple Directory Handling
The DDEV MCP server operates on the current working directory principle:
Runs commands in whatever directory the MCP server is invoked from
No complex directory detection or configuration needed
User controls the context by navigating to the correct directory
CMS-Specific Development Usage (via ddev_exec)
# Drupal
"Use ddev mcp to clear Drupal cache"
"Use ddev mcp to execute drush cex to export configuration"
"Use ddev mcp to use drush uli to get a one-time login link"
# WordPress
"Use ddev mcp to install and activate the Akismet plugin with wp plugin install"
"ddev mcp: Run wp core update to update WordPress"
"ddev mcp: Run wp cache flush to clear caches"
# Composer
"Use ddev mcp to run composer install using ddev_exec"
"ddev mcp: Update packages with composer update"Other things you can do
"DDEV MCP: Start fresh development environment with latest DB"
"DDEV MCP: Enable debug mode and clear cache for debugging"
"DDEV MCP: Import test data for testing"
# Add-on specific workflows (via ddev_exec)
"DDEV MCP: Clear Redis cache with redis-cli FLUSHALL"
"DDEV MCP: Check Redis memory with redis-cli INFO memory"
"DDEV MCP: Query Solr with curl commands"
"DDEV MCP: Run MySQL queries with mysql -e"
"DDEV MCP: Execute Playwright tests"
# Directory navigation workflows
"DDEV MCP: Go to my WordPress project at ~/Projects/mysite and start it"
"DDEV MCP: Navigate to /home/user/drupal-site directory and check project status"
"DDEV MCP: Go to the correct project folder and run database import"Available Tools
Project management (start, stop, restart, describe, list, logs), database (import, export, snapshots), ddev_exec for any in-container command (Drush, WP-CLI, Composer, etc.), plus ddev_help, ddev_version, ddev_poweroff, and message_complete_notification. Full list with arguments and ddev help output: Tools reference.
Development & Testing
Build and Test
Clone the repo to
/path/to/repo/for/ddev-mcp/Run
npm run buildand add the following to mcp.json file.
{
"mcpServers": {
"ddev": {
"command": "npx",
"args": [
"/path/to/repo/for/ddev-mcp/dist/index.js"
],
"env": {
"DDEV_MCP_LOG_LEVEL": "INFO"
},
},
}
}Architecture
Project Structure
src/
├── server/ # MCP server implementation
│ ├── index.ts # Main server class
│ └── tools.ts # Tool definitions and validation
├── ddev/ # DDEV operations
│ └── operations.ts # Core DDEV command implementations
├── utils/ # Utilities
│ ├── logger.ts # Structured logging
│ └── command.ts # Safe command execution
├── types/ # TypeScript definitions
│ └── index.ts # Type definitions
└── index.ts # CLI entry pointContributing
This project is designed for team collaboration with familiar JavaScript/TypeScript patterns:
Fork and Clone: Standard GitHub workflow
Install Dependencies:
npm installBuild:
npm run buildMake Changes: Follow existing patterns
Test: Manually (Use it in your ddev project)
Submit PR: With clear description
Coding Standards
TypeScript strict mode enabled
ESLint configuration for consistency
Comprehensive error handling
Unit tests for new features
Documentation updates
🙏 Acknowledgments
Built with the official Model Context Protocol SDK
Designed for DDEV development environments
External Resources
DDEV CMS Quickstarts - Official DDEV project type documentation
DDEV Documentation - Local development environment guide
Ready to supercharge your DDEV development workflow with AI assistance for any web project! 🚀
Available Tools
14 toolsddev_describeA
Get a detailed description of a running DDEV project (name, location, URL, status, MySQL connection details, Mailpit, etc.). Aliases: describe, status, st. Usage: ddev describe [projectname] [flags] For full options: ddev help describe
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the DDEV project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It notes that the project must be 'running', which is a useful prerequisite, and lists what information is included. It does not explicitly state whether the command is read-only or what happens if the project is not running, but the 'Get a detailed description' wording implies a non-destructive inspection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, immediately stating the tool's purpose and scope. It includes aliases and a usage line without unnecessary verbosity. Every sentence provides useful information, and the pointer to 'ddev help describe' is a concise way to handle further details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description does a good job of summarizing what will be returned (name, location, URL, status, MySQL connection details, Mailpit, etc.) and notes the 'running' prerequisite. It does not describe error cases or explicitly state that it is read-only, but for a simple describe tool with one optional parameter, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single parameter with 100% coverage: 'Path to the DDEV project directory'. The description's usage line uses 'projectname' rather than 'projectPath', which could introduce slight ambiguity but does not add meaningful semantic detail beyond the schema. The baseline of 3 is appropriate for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb 'Get' and clearly identifies the resource as 'a detailed description of a running DDEV project', listing example contents like name, location, URL, status, MySQL connection details, and Mailpit. This distinguishes it from sibling tools like ddev_export_db, ddev_logs, or ddev_snapshot, which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage syntax ('Usage: ddev describe [projectname] [flags]') and points to 'ddev help describe' for full options, giving some practical guidance. However, it does not explicitly state when to use this tool over alternatives, such as ddev_list or ddev_logs, or mention conditions or exclusions. The usage context is implied rather than clearly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_execA
Execute a shell command in the container for a DDEV service. Default: web service; use service (e.g. db, redis, solr) to run in another. workdir maps to ddev --dir. Usage: ddev exec [flags] [command] [command-flags] Flags: -s/--service (default web), -d/--dir (execution directory) For full options: ddev help exec
COMMON USE CASES:
Drupal (Drush):
"drush status" - Site status
"drush cr" - Clear cache
"drush uli" - Generate login link
"drush cex" - Export config
"drush cim" - Import config
"drush pm:install module_name" - Install module
"drush updb -y" - Run database updates
WordPress (WP-CLI):
"wp cli version" - WP-CLI version
"wp plugin list" - List plugins
"wp plugin install akismet --activate" - Install & activate plugin
"wp theme list" - List themes
"wp user list" - List users
"wp core update" - Update WordPress
"wp cache flush" - Clear cache
"wp search-replace old.com new.com" - Search/replace URLs
Composer:
"composer install" - Install dependencies
"composer update" - Update packages
"composer require vendor/package" - Add package
"composer show" - List installed packages
Redis:
"redis-cli INFO" - Server info
"redis-cli PING" - Test connection
"redis-cli KEYS *" - List keys
"redis-cli FLUSHALL" - Clear all caches
Solr:
"curl http://solr:8983/solr/admin/cores?action=STATUS" - Check cores
"curl http://solr:8983/solr/corename/select?q=:" - Query Solr
MySQL/MariaDB:
"mysql -e 'SHOW DATABASES'" - List databases
"mysql -e 'SHOW TABLES' db" - List tables
"mysql -e 'SELECT VERSION()'" - Database version
Platform.sh CLI:
"platform environment:list" - List environments
"platform db:dump" - Export database
Node.js/npm:
"npm install" - Install packages
"npm run build" - Build assets
"npm run test" - Run tests
"node --version" - Node version
Testing Frameworks:
"playwright test" - Run Playwright tests
"cypress run" - Run Cypress tests
"phpunit" - Run PHP unit tests
Other:
"php -v" - PHP version
"ls -la" - List files
"cat config/sync/system.site.yml" - Read file
"env" - Show environment variables
Dangerous commands blocked unless ALLOW_DANGEROUS_COMMANDS=true.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | Command to execute. Examples: "playwright test" (run Playwright tests), "npm run test:e2e" (run E2E tests), "npm run build" (build assets), "redis-cli ping" (test Redis), "curl http://solr:8983/solr/" (test Solr). For Drush commands, use ddev_drush. For Composer commands, use ddev_composer. Dangerous commands are blocked unless ALLOW_DANGEROUS_COMMANDS=true. | |
| service | No | Service to execute in: web (default), db, redis, solr, or any other service. AUTO-ROUTING: npm/php commands → web, mysql/mariadb commands → db, redis-cli commands → redis, solr commands → solr | |
| workdir | No | Working directory for the command (e.g., "/var/www/html", "/var/www/html/drupal") | |
| projectPath | Yes | Path to the DDEV project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a key safety behavior: 'Dangerous commands blocked unless ALLOW_DANGEROUS_COMMANDS=true.' It also mentions default service and workdir mapping. However, it does not describe output format, exit code handling, or whether commands are executed via a shell, leaving notable behavioral gaps for an execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose statement, but the extensive list of common use cases across many frameworks makes it long. While well-organized with headers and bullets, it could be more concise; many examples are redundant for an AI agent that can infer typical commands.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of output schema and annotations, the description compensates with comprehensive examples, service routing details, and safety disclaimers. It covers all necessary aspects for correct invocation, but lacks information about return values, timeouts, or prerequisites (e.g., project must be running), leaving minor completeness gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, setting a baseline of 3. The description adds value beyond the schema by providing a detailed 'Common Use Cases' section with concrete command examples and by explaining that 'workdir maps to ddev --dir' and the default service, enriching parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Execute a shell command in the container for a DDEV service,' clearly stating the verb (execute), resource (shell command in DDEV container), and scope. It distinguishes itself from sibling tools like ddev_logs and ddev_export_db by emphasizing generic command execution and service selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The schema's command description explicitly says 'For Drush commands, use ddev_drush. For Composer commands, use ddev_composer,' providing clear alternatives. The service description also explains auto-routing (e.g., npm/php commands → web, mysql → db), giving concrete when-to-use guidance. The main description adds default service and workdir mapping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_export_dbA
Dump a database to a file or stdout. Compression: gzip (default), bzip2, or xz. Target DB via targetDb (default "db"). Usage: ddev export-db [project] [flags] MCP args → ddev: file → -f/--file, targetDb → -d/--database, compressionType → --gzip|--bzip2|--xz For full options and examples: ddev help export-db
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Output file path | |
| targetDb | No | Target database name | |
| projectPath | No | Path to the DDEV project directory | |
| compressionType | No | Compression type for export |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors: output to file or stdout, supported compression types, and the default target database. It also shows how MCP arguments translate to CLI flags. However, it does not mention side effects, permission needs, or error conditions, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured. It leads with the core purpose, then provides usage, flag mapping, and a pointer to full help. Every sentence is informative with minimal redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with 4 parameters and no output schema, the description covers the essential usage context: command syntax, defaults, and where to find more details. It lacks examples, but the pointer to 'ddev help export-db' mitigates this. Overall, it is sufficiently complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the mapping between MCP args and CLI flags (e.g., file → -f/--file, targetDb → -d/--database, compressionType → --gzip|--bzip2|--xz) and by stating defaults (targetDb default 'db', compression default gzip), which go beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: "Dump a database to a file or stdout." It specifies the resource (database), the action (dump/export), and output options (file or stdout), distinguishing it from sibling tools like ddev_import_db and ddev_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage guidance including the command syntax, MCP-to-CLI flag mappings, and default values (targetDb default "db", compression default gzip). It does not explicitly exclude alternatives or state when not to use, but the context is clear enough for an agent to select this tool for exporting databases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_helpA
Get help for any DDEV command. Returns the same output as "ddev help " or "ddev --help". Use when you need exact flags, examples, or usage for a ddev command. Usage: ddev help [command] | ddev --help Examples: command="import-db" → ddev help import-db; command="snapshot", subcommand="restore" → ddev snapshot restore --help. Leave command empty for general ddev help.
| Name | Required | Description | Default |
|---|---|---|---|
| command | No | DDEV command name (e.g. start, stop, import-db, export-db, logs, snapshot, exec, poweroff, version). Omit for general ddev help. | |
| subcommand | No | Optional subcommand (e.g. restore for "ddev snapshot restore --help"). Use with command. | |
| projectPath | No | Optional project path (cwd for running ddev). Not required for help. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining behavior. It discloses that the tool returns the same output as shell help commands and clarifies the format for different argument combinations. It also states that projectPath is not required for help, which is useful behavioral context. It does not explicitly mention side effects, but for a help tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into a clear introduction, usage syntax, and examples. While longer than two sentences, every part contributes useful information: the purpose, when to use, exact syntax, and examples. It is front-loaded with the core purpose and then provides supporting details without excessive verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the absence of an output schema, the description provides sufficient context: what it does, how to use it, and what output to expect (same as shell help). It covers all parameter combinations and examples. It does not over-explain return values, which is appropriate since the output is standard help text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters with 100% coverage. The description adds value by providing concrete examples (e.g., command="import-db" → ddev help import-db; command="snapshot", subcommand="restore" → ddev snapshot restore --help) and clarifying that projectPath is optional and not needed for help. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: "Get help for any DDEV command." It uses a specific verb (get help) and resource (DDEV command), and distinguishes it from sibling tools that perform actual DDEV operations like start, stop, or snapshot. The inclusion of shell-equivalent examples reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says "Use when you need exact flags, examples, or usage for a ddev command," providing clear context for when to invoke this tool. It also gives usage patterns and examples for combining command and subcommand. However, it does not explicitly mention when not to use it, though no alternative help tool exists among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_import_dbA
Import a SQL dump file into the project. Supports .sql, .sql.gz, .sql.bz2, .sql.xz, .mysql, .zip, .tgz, .tar.gz. For archives, use extractPath for path inside archive. Target DB via targetDb (default "db"). Usage: ddev import-db [project] [flags] MCP args → ddev: src → --file, targetDb → --database, extractPath → --extract-path For full options and examples: ddev help import-db
| Name | Required | Description | Default |
|---|---|---|---|
| src | No | Path to SQL dump file (ddev --file). Relative to project or absolute. | |
| targetDb | No | Target database name (ddev --database, default "db") | |
| extractPath | No | Path to extract within archive (ddev --extract-path) | |
| projectPath | No | Path to the DDEV project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It reveals supported formats, archive extraction behavior, and the default targetDb. However, it omits critical behavioral aspects such as whether an existing database is overwritten, permissions needed, or what the command outputs on success/failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the main action is stated first, followed by a concise list of supported formats and usage details. Every sentence contributes useful information, though the usage line is a bit terse and tucks projectPath away.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does not explain the return value or success/failure behavior, which is a gap for an import operation. It also does not describe the projectPath parameter in the text, though it appears in the schema. The tool is relatively simple, but lacks coverage of side effects and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enriches this by mapping each MCP arg to the corresponding ddev flag (src → --file, targetDb → --database, extractPath → --extract-path), and clarifies the default for targetDb ('default "db"') and the purpose of extractPath. This adds practical value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Import a SQL dump file into the project.' It clearly distinguishes from sibling ddev_export_db by the action (import vs export) and lists supported file formats, leaving no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage syntax ('Usage: ddev import-db [project] [flags]') and an MCP arg-to-flag mapping. Gives conditional guidance for archives ('For archives, use extractPath'). Does not explicitly state when not to use this tool versus alternatives, but the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_listA
List DDEV projects and their status. Shows all by default; use activeOnly for running only. Usage: ddev list [flags] Flags: -A/--active-only, -t/--type For full options: ddev help list
| Name | Required | Description | Default |
|---|---|---|---|
| activeOnly | No | Show only running projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses default behavior (shows all) and the effect of activeOnly, but does not explicitly mention side effects, permissions, or return format. As a listing tool, it is likely read-only, but this is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with a clear purpose statement. It includes usage and flag information in a compact format. Every line serves a purpose, though the flag line introduces a schema mismatch, but that is a content issue, not a conciseness issue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema and no annotations, the description is fairly complete. It explains default behavior, the parameter's effect, and usage. It lacks explicit guidance on when to use alternatives and does not describe output structure, but these are minor for such a straightforward tool. The unsupported flag mention is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents activeOnly with 'Show only running projects' (100% coverage). The description adds default behavior but also mentions flags '-t/--type' which are not present in the input schema. This is misleading and could lead the agent to attempt passing a 'type' parameter that the tool definition does not accept.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List DDEV projects and their status.' The verb 'list' and resource 'DDEV projects' are specific, and the mention of showing all by default or active only distinguishes it from sibling tools like ddev_start, ddev_stop, and ddev_describe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context for the activeOnly parameter ('use activeOnly for running only') but does not explicitly state when to choose this tool over alternatives like ddev_describe or ddev_logs. There are no exclusions or alternative recommendations, so usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_logsA
Display stdout logs from DDEV services (docker logs). Default: web service; use service for e.g. db. Usage: ddev logs [projectname] [flags] Flags: -s/--service (web|db), -f/--follow, --tail N For full options: ddev help logs
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Number of lines to tail | |
| follow | No | Follow log output | |
| service | No | Specific service to get logs from | |
| projectPath | No | Path to the DDEV project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool displays stdout logs via docker logs and implies streaming behavior through the --follow flag. However, it doesn't mention potential long-running behavior with -f or any prerequisites like a running project, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear purpose first, followed by usage and flags, all in three short sentences. Every line adds value, and the pointer to 'ddev help logs' avoids unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple logs tool with all optional parameters and no output schema, the description covers the essential behavior, defaults, and flags. It doesn't describe return values, but that's expected for logs. The only minor omission is explicit explanation of the projectPath parameter, though it's implied in the usage line.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context by explaining the default service and giving a concrete example for the service parameter, plus mapping CLI flags to parameters. It also hints at projectPath through the '[projectname]' positional argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Display stdout logs from DDEV services (docker logs).' It uses a specific verb and resource, and the focus on logs distinguishes it from sibling commands like ddev_export_db or ddev_exec.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage context, including the default service ('Default: web service') and an example for selecting a different service ('use service for e.g. db'). It also lists common flags, making it easy to understand when to use this tool, though it doesn't explicitly exclude alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_poweroffA
Stop all DDEV projects and containers (equivalent to ddev stop -a --stop-ssh-agent). Stops Mutagen daemon if running. Usage: ddev poweroff [flags] For full options: ddev help poweroff
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that all projects and containers are stopped, the Mutagen daemon is stopped if running, and it is equivalent to a command that also stops the SSH agent. This is thorough for a simple stop/poweroff operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: three sentences that front-load the core function, then add the Mutagen daemon behavior and usage/help pointers. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description fully addresses what it does, the affected scope, and the extra daemon behavior. It is complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description mentions flags generically but does not add any parameter-specific meaning, and the schema already covers everything (empty properties). This is acceptable for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Stop all DDEV projects and containers' with a specific verb and scope. This differentiates it from sibling ddev_stop, which likely targets individual projects, and also mentions the Mutagen daemon side effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that this is for stopping all projects rather than a single one, and cites the equivalent ddev command. However, it does not explicitly name alternatives like ddev_stop or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_restartB
Restart a DDEV project: stops then starts named project(s). Usage: ddev restart [projectname ...] [flags] Flags: -a/--all, -y/--skip-confirmation For full options: ddev help restart
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | Path to the DDEV project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose all behavioral traits. It does state 'stops then starts', but it introduces conflicting invocation details: the schema expects a single 'projectPath', while the description mentions multiple 'projectname' arguments and CLI flags not present in the schema. It also fails to mention confirmation behavior, side effects on running processes, or error handling, leaving significant ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively short, with a clear first sentence followed by usage and flags. It earns its place by giving actionable CLI context, though the 'Usage' line is somewhat redundant with the first sentence and the schema. Overall, it is concise and well-structured, but not maximally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description lacks essential context: no return value description, no mention of what happens if the project is not running, and no clarification on how the schema's projectPath relates to the projectname syntax. The parameter mismatch severely undermines the completeness for an agent trying to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes projectPath clearly, so the baseline is 3. However, the description adds 'projectname ...' and flags like -a/--all and -y/--skip-confirmation, which are not reflected in the schema. This creates confusion rather than enriching the meaning of the actual parameter, potentially misleading an agent about what input is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Restart a DDEV project: stops then starts named project(s)', which uses a specific verb and resource. It also distinguishes itself from sibling tools like ddev_start and ddev_stop by explicitly defining the restart operation as the combination of stop and start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage syntax and flags, implying when to use it (for restarting projects), but it does not explicitly compare to alternatives like ddev_start, ddev_stop, or ddev_poweroff. There is no 'use this instead of X when...' guidance, so the usage context is only partially clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_snapshotA
Create, list, restore, or cleanup database snapshots (stored in .ddev/db_snapshots). Restore with action=restore and snapshotName; use ddev snapshot restore --latest for latest. Usage: ddev snapshot [projectname...] [flags] | ddev snapshot restore [name] [flags] Actions: create (optional name), list, restore (snapshotName or --latest), cleanup. Flags: -n/--name, -l/--list, -C/--cleanup, -y/--yes, -a/--all For full options: ddev help snapshot; ddev snapshot restore --help
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Apply to all projects | |
| yes | No | Skip confirmation prompts | |
| name | No | Name for the snapshot (for create action) | |
| action | No | Action to perform: create, list, restore, cleanup | create |
| projectPath | No | Path to the DDEV project directory | |
| snapshotName | No | Name of snapshot to restore (for restore action) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It mentions the storage location (.ddev/db_snapshots) and the -y flag to skip confirmation, which provides some safety context. However, it does not disclose that 'cleanup' is destructive (deleting snapshots) or that 'restore' overwrites the current database, which are significant behavioral traits for an agent to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is densely packed but well-organized, front-loading the core purpose and then listing actions and flags. It includes a usage line and pointers to help commands, with no redundant or filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (six parameters, four actions, no output schema), the description covers all actions and key flags, and references 'ddev help snapshot' for full options. It does not describe output format or fully clarify projectPath usage, but it is otherwise adequate for an agent to execute the main workflows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics by clarifying that 'name' is for create, 'snapshotName' is for restore, and that '--latest' can substitute for a snapshot name. This goes beyond the schema's generic descriptions and guides correct parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create, list, restore, or cleanup database snapshots', clearly specifying the verb and resource. It further distinguishes the tool by noting snapshots are stored in .ddev/db_snapshots, which separates it from sibling database tools like import/export.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides action-specific instructions, e.g., 'Restore with action=restore and snapshotName; use ddev snapshot restore --latest for latest.' It also lists all actions and flags, giving clear context for each. It does not explicitly exclude any sibling tools, but the multi-action scope makes internal guidance sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_startA
Start a DDEV project environment. Initializes and configures the web server and database containers. Run from project directory or pass project name(s). Usage: ddev start [projectname ...] [flags] Flags: -a/--all, -y/--skip-confirmation, --skip-hooks For full options: ddev help start
| Name | Required | Description | Default |
|---|---|---|---|
| skipHooks | No | Skip running start hooks | |
| projectPath | Yes | Path to the DDEV project directory | |
| skipConfirmation | No | Skip confirmation prompts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It discloses that the tool initializes and configures containers, and mentions flags like --skip-confirmation and --skip-hooks, but does not state potential side effects, prerequisites (e.g., Docker running), or what happens if the project is already started.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with a clear purpose statement, usage line, and relevant flags. It includes a helpful pointer to 'ddev help start' for full options, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple start command with three parameters and no output schema, the description covers purpose, usage, and key flags. It could mention prerequisites or idempotency, but overall it is sufficiently complete for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does list the flags and mentions projectPath implicitly through 'pass project name(s)', but it largely mirrors the schema without adding new semantic details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a DDEV project environment and initializes/configures web server and database containers. This distinguishes it from siblings like ddev_stop and ddev_restart by explicitly describing the start action and its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use it ('Start a DDEV project environment') and how to invoke it ('Run from project directory or pass project name(s)'). It lists relevant flags but does not explicitly mention alternatives or when not to use, such as preferring ddev_restart for already-running projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_stopA
Stop and remove the containers of a DDEV project. Non-destructive: leaves database and code intact. Run from project dir or pass project name(s). Usage: ddev stop [projectname ...] [flags] For full options (e.g. --remove-data, --snapshot): ddev help stop
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | Path to the DDEV project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description competently discloses key behaviors: 'Non-destructive: leaves database and code intact' and 'Stop and remove the containers.' It also notes the need to run from a project directory or provide a project name, which is a practical behavioral requirement. The existence of destructive flags is hinted by referencing help output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured: one sentence for the core action and safety, one for usage, and one pointing to help for advanced options. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple stop command with one parameter and no annotations, the description covers all essential aspects: what it does, safety implications, how to invoke it, and where to find more options. It does not describe return values, but that is not expected for this type of command and no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a clear description for the single parameter projectPath. The description adds contextual usage ('Run from project dir or pass project name(s)') and shows the CLI equivalent, but it may create slight ambiguity by implying project names are acceptable while the schema only mentions a path. Since schema coverage is 100%, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Stop and remove the containers of a DDEV project.' This gives a specific verb and resource, and it differentiates from sibling tools like ddev_start and ddev_restart. The clarification that it is 'Non-destructive' further defines its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Run from project dir or pass project name(s).' It also directs users to 'ddev help stop' for additional flags like --remove-data and --snapshot. However, it does not explicitly mention when to use this tool over alternatives like ddev_poweroff or how it differs from them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddev_versionA
Display the version of the DDEV binary and its components. Usage: ddev version [flags] For full options: ddev help version
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It clearly states the command 'Display the version' and shows that flags are supported, indicating a read-only informational operation. It does not discuss output details or potential error states, but for a simple version command this level of clarity is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is minimal and front-loaded with the main purpose, followed by two short, useful usage lines: 'Usage: ddev version [flags]' and 'For full options: ddev help version.' Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only version command, the description provides the core purpose and usage. It does not describe the exact output format, but the absence of an output schema and the tool's simplicity make this acceptable. Contextual completeness is strong given sibling tools exist for more complex operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter semantics to clarify. The description adds no unnecessary parameter-related content, and the zero-parameter baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Display' and clearly identifies the resource: 'the version of the DDEV binary and its components.' This unambiguously distinguishes it from sibling tools like ddev_start or ddev_exec, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a direct usage line ('Usage: ddev version [flags]') and points to 'ddev help version' for full options, providing basic invocation guidance. However, it does not explicitly state when to prefer this tool over alternatives or mention context/exclusion conditions, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
message_complete_notificationA
Send a simple OS notification to the user
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Notification title | |
| message | Yes | Notification message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the action (sending a notification) and implies a non-destructive, simple operation, but does not disclose details like blocking behavior, permissions, or response output. This is acceptable for a simple tool but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that accurately summarizes the tool without unnecessary detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two well-documented parameters and no output schema, the description is mostly complete. However, it misses the contextual cue from the name ('complete_notification') that this is intended for notifying completion of tasks, which would help an agent know when to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (title, message) are self-explanatory. The description adds no additional meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('send') and resource ('OS notification'), clearly distinguishing it from the sibling ddev commands. It is unambiguous and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool or how it relates to alternatives. The name implies it is for completion notifications, but the description does not state this context or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
14 tool updates
v1.0.3- First observed
ddev_describe - First observed
ddev_exec - First observed
ddev_export_db - First observed
ddev_help - First observed
ddev_import_db - First observed
ddev_list - First observed
ddev_logs - First observed
ddev_poweroff - First observed
ddev_restart - First observed
ddev_snapshot - First observed
ddev_start - First observed
ddev_stop - First observed
ddev_version - First observed
message_complete_notification
TDQS
Most tools target distinct operations (start, stop, restart, snapshot, exec, import/export). The only mild overlap is ddev_describe and ddev_list, both showing project status, but descriptions clarify that describe gives detailed info for a single project while list enumerates projects.
All tools use lowercase snake_case with a ddev_ prefix, but the second part is inconsistent: some are verb_noun (export_db, import_db), some are bare verbs (start, stop, exec), some are nouns (logs, snapshot, version, help). message_complete_notification breaks the ddev_ pattern entirely, making the naming convention mixed.
14 tools is well within the ideal range for a local development environment orchestrator. Each tool covers a distinct DDEV command or workflow, and none feel redundant or excessive for the scope.
The set covers core DDEV lifecycle (start, stop, restart, poweroff, list, describe), database operations (export/import/snapshot), logs, exec, version, and help. Minor gaps exist (e.g., no direct project deletion or config command), but ddev_exec with shell access can compensate for many missing operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Deploy and manage your apps, databases, storage, and scheduled jobs from your AI agent
Develop, manage, and debug Railway projects, services, and deployments from within agents.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables AI agents to interact with Magento 2 development environments through comprehensive tools for module management, database operations, cache control, configuration management, and system diagnostics. Supports complete development workflows from module creation to deployment and troubleshooting.285740MIT
- AlicenseCqualityFmaintenanceEnables AI-assisted development for Webasyst framework projects, including creating and managing apps, plugins, themes, and configurations through natural language commands.38197MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with DDEV local development environments by querying databases, managing project states, and executing container commands. It provides comprehensive control over local services with a security-first approach using whitelisted operations.5393GPL 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage Odoo development environments by providing tools for server control, module management, database operations, and project navigation.242MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/codingsasi/ddev-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server