# Using MCP Tools in Commands and Agents Complete guide to using MCP tools effectively in Claude Code plugin commands and agents. ## Overview Once an MCP server is configured, its tools become available with the prefix `mcp__plugin____`. Use these tools in commands and agents just like built-in Claude Code tools. ## Tool Naming Convention ### Format ``` mcp__plugin____ ``` ### Examples **Asana plugin with asana server:** - `mcp__plugin_asana_asana__asana_create_task` - `mcp__plugin_asana_asana__asana_search_tasks` - `mcp__plugin_asana_asana__asana_get_project` **Custom plugin with database server:** - `mcp__plugin_myplug_database__query` - `mcp__plugin_myplug_database__execute` - `mcp__plugin_myplug_database__list_tables` ### Discovering Tool Names **Use `/mcp` command:** ```bash /mcp ``` This shows: - All available MCP servers - Tools provided by each server - Tool schemas and descriptions - Full tool names for use in configuration ## Using Tools in Commands ### Pre-Allowing Tools Specify MCP tools in command frontmatter: ```markdown --- description: Create a new Asana task allowed-tools: [ "mcp__plugin_asana_asana__asana_create_task" ] --- # Create Task Command To create a task: 1. Gather task details from user 2. Use mcp__plugin_asana_asana__asana_create_task with the details 3. Confirm creation to user ``` ### Multiple Tools ```markdown --- allowed-tools: [ "mcp__plugin_asana_asana__asana_create_task", "mcp__plugin_asana_asana__asana_search_tasks", "mcp__plugin_asana_asana__asana_get_project" ] --- ``` ### Wildcard (Use Sparingly) ```markdown --- allowed-tools: ["mcp__plugin_asana_asana__*"] --- ``` **Caution:** Only use wildcards if the command truly needs access to all tools from a server. ### Tool Usage in Command Instructions **Example command:** ```markdown --- description: Search and create Asana tasks allowed-tools: [ "mcp__plugin_asana_asana__asana_search_tasks", "mcp__plugin_asana_asana__asana_create_task" ] --- # Asana Task Management ## Searching Tasks To search for tasks: 1. Use mcp__plugin_asana_asana__asana_search_tasks 2. Provide search filters (assignee, project, etc.) 3. Display results to user ## Creating Tasks To create a task: 1. Gather task details: - Title (required) - Description - Project - Assignee - Due date 2. Use mcp__plugin_asana_asana__asana_create_task 3. Show confirmation with task link ``` ## Using Tools in Agents ### Agent Configuration Agents can use MCP tools autonomously without pre-allowing them: ```markdown --- name: asana-status-updater description: This agent should be used when the user asks to "update Asana status", "generate project report", or "sync Asana tasks" model: inherit color: blue --- ## Role Autonomous agent for generating Asana project status reports. ## Process 1. **Query tasks**: Use mcp__plugin_asana_asana__asana_search_tasks to get all tasks 2. **Analyze progress**: Calculate completion rates and identify blockers 3. **Generate report**: Create formatted status update 4. **Update Asana**: Use mcp__plugin_asana_asana__asana_create_comment to post report ## Available Tools The agent has access to all Asana MCP tools without pre-approval. ``` ### Agent Tool Access Agents have broader tool access than commands: - Can use any tool Claude determines is necessary - Don't need pre-allowed lists - Should document which tools they typically use ## Tool Call Patterns ### Pattern 1: Simple Tool Call Single tool call with validation: ```markdown Steps: 1. Validate user provided required fields 2. Call mcp__plugin_api_server__create_item with validated data 3. Check for errors 4. Display confirmation ``` ### Pattern 2: Sequential Tools Chain multiple tool calls: ```markdown Steps: 1. Search for existing items: mcp__plugin_api_server__search 2. If not found, create new: mcp__plugin_api_server__create 3. Add metadata: mcp__plugin_api_server__update_metadata 4. Return final item ID ``` ### Pattern 3: Batch Operations Multiple calls with same tool: ```markdown Steps: 1. Get list of items to process 2. For each item: - Call mcp__plugin_api_server__update_item - Track success/failure 3. Report results summary ``` ### Pattern 4: Error Handling Graceful error handling: ```markdown Steps: 1. Try to call mcp__plugin_api_server__get_data 2. If error (rate limit, network, etc.): - Wait and retry (max 3 attempts) - If still failing, inform user - Suggest checking configuration 3. On success, process data ``` ## Tool Parameters ### Understanding Tool Schemas Each MCP tool has a schema defining its parameters. View with `/mcp`. **Example schema:** ```json { "name": "asana_create_task", "description": "Create a new Asana task", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Task title" }, "notes": { "type": "string", "description": "Task description" }, "workspace": { "type": "string", "description": "Workspace GID" } }, "required": ["name", "workspace"] } } ``` ### Calling Tools with Parameters Claude automatically structures tool calls based on schema: ```typescript // Claude generates this internally { toolName: "mcp__plugin_asana_asana__asana_create_task", input: { name: "Review PR #123", notes: "Code review for new feature", workspace: "12345", assignee: "67890", due_on: "2025-01-15" } } ``` ### Parameter Validation **In commands, validate before calling:** ```markdown Steps: 1. Check required parameters: - Title is not empty - Workspace ID is provided - Due date is valid format (YYYY-MM-DD) 2. If validation fails, ask user to provide missing data 3. If validation passes, call MCP tool 4. Handle tool errors gracefully ``` ## Response Handling ### Success Responses ```markdown Steps: 1. Call MCP tool 2. On success: - Extract relevant data from response - Format for user display - Provide confirmation message - Include relevant links or IDs ``` ### Error Responses ```markdown Steps: 1. Call MCP tool 2. On error: - Check error type (auth, rate limit, validation, etc.) - Provide helpful error message - Suggest remediation steps - Don't expose internal error details to user ``` ### Partial Success ```markdown Steps: 1. Batch operation with multiple MCP calls 2. Track successes and failures separately 3. Report summary: - "Successfully processed 8 of 10 items" - "Failed items: [item1, item2] due to [reason]" - Suggest retry or manual intervention ``` ## Performance Optimization ### Batching Requests **Good: Single query with filters** ```markdown Steps: 1. Call mcp__plugin_api_server__search with filters: - project_id: "123" - status: "active" - limit: 100 2. Process all results ``` **Avoid: Many individual queries** ```markdown Steps: 1. For each item ID: - Call mcp__plugin_api_server__get_item - Process item ``` ### Caching Results ```markdown Steps: 1. Call expensive MCP operation: mcp__plugin_api_server__analyze 2. Store results in variable for reuse 3. Use cached results for subsequent operations 4. Only re-fetch if data changes ``` ### Parallel Tool Calls When tools don't depend on each other, call in parallel: ```markdown Steps: 1. Make parallel calls (Claude handles this automatically): - mcp__plugin_api_server__get_project - mcp__plugin_api_server__get_users - mcp__plugin_api_server__get_tags 2. Wait for all to complete 3. Combine results ``` ## Integration Best Practices ### User Experience **Provide feedback:** ```markdown Steps: 1. Inform user: "Searching Asana tasks..." 2. Call mcp__plugin_asana_asana__asana_search_tasks 3. Show progress: "Found 15 tasks, analyzing..." 4. Present results ``` **Handle long operations:** ```markdown Steps: 1. Warn user: "This may take a minute..." 2. Break into smaller steps with updates 3. Show incremental progress 4. Final summary when complete ``` ### Error Messages **Good error messages:** ``` ❌ "Could not create task. Please check: 1. You're logged into Asana 2. You have access to workspace 'Engineering' 3. The project 'Q1 Goals' exists" ``` **Poor error messages:** ``` ❌ "Error: MCP tool returned 403" ``` ### Documentation **Document MCP tool usage in command:** ```markdown ## MCP Tools Used This command uses the following Asana MCP tools: - **asana_search_tasks**: Search for tasks matching criteria - **asana_create_task**: Create new task with details - **asana_update_task**: Update existing task properties Ensure you're authenticated to Asana before running this command. ``` ## Testing Tool Usage ### Local Testing 1. **Configure MCP server** in `.mcp.json` 2. **Install plugin locally** in `.claude-plugin/` 3. **Verify tools available** with `/mcp` 4. **Test command** that uses tools 5. **Check debug output**: `claude --debug` ### Test Scenarios **Test successful calls:** ```markdown Steps: 1. Create test data in external service 2. Run command that queries this data 3. Verify correct results returned ``` **Test error cases:** ```markdown Steps: 1. Test with missing authentication 2. Test with invalid parameters 3. Test with non-existent resources 4. Verify graceful error handling ``` **Test edge cases:** ```markdown Steps: 1. Test with empty results 2. Test with maximum results 3. Test with special characters 4. Test with concurrent access ``` ## Common Patterns ### Pattern: CRUD Operations ```markdown --- allowed-tools: [ "mcp__plugin_api_server__create_item", "mcp__plugin_api_server__read_item", "mcp__plugin_api_server__update_item", "mcp__plugin_api_server__delete_item" ] --- # Item Management ## Create Use create_item with required fields... ## Read Use read_item with item ID... ## Update Use update_item with item ID and changes... ## Delete Use delete_item with item ID (ask for confirmation first)... ``` ### Pattern: Search and Process ```markdown Steps: 1. **Search**: mcp__plugin_api_server__search with filters 2. **Filter**: Apply additional local filtering if needed 3. **Transform**: Process each result 4. **Present**: Format and display to user ``` ### Pattern: Multi-Step Workflow ```markdown Steps: 1. **Setup**: Gather all required information 2. **Validate**: Check data completeness 3. **Execute**: Chain of MCP tool calls: - Create parent resource - Create child resources - Link resources together - Add metadata 4. **Verify**: Confirm all steps succeeded 5. **Report**: Provide summary to user ``` ## Troubleshooting ### Tools Not Available **Check:** - MCP server configured correctly - Server connected (check `/mcp`) - Tool names match exactly (case-sensitive) - Restart Claude Code after config changes ### Tool Calls Failing **Check:** - Authentication is valid - Parameters match tool schema - Required parameters provided - Check `claude --debug` logs ### Performance Issues **Check:** - Batching queries instead of individual calls - Caching results when appropriate - Not making unnecessary tool calls - Parallel calls when possible ## Conclusion Effective MCP tool usage requires: 1. **Understanding tool schemas** via `/mcp` 2. **Pre-allowing tools** in commands appropriately 3. **Handling errors gracefully** 4. **Optimizing performance** with batching and caching 5. **Providing good UX** with feedback and clear errors 6. **Testing thoroughly** before deployment Follow these patterns for robust MCP tool integration in your plugin commands and agents.