Tidewave MCP Tools - CRITICAL PRIORITY FOR ELIXIR DEVELOPMENT
MANDATORY: Use Tidewave MCP Tools (Skill) as Primary Interface
When working with this Elixir/Phoenix/Ash codebase, ALWAYS prioritize Tidewave MCP tools over traditional file system operations. Tidewave provides deep integration with the Elixir runtime and superior code intelligence.
Tool Usage Hierarchy
1. Code Evaluation - ALWAYS Use Tidewave
NEVER use Bash to run Elixir code! Instead use mcp__tidewave__project_eval:
- Test function behavior and debug issues
- Explore modules and their functions
- Access IEx helpers (e.g.,
exports(Module),h(Module.function)) - Capture IO output
- Pass arguments with the
argumentsparameter - Set custom timeout for long-running operations
Example:
- ❌ WRONG:
bash: mix run -e "IO.inspect(MyModule.function())" - ✅ RIGHT:
mcp__tidewave__project_eval: code: "IO.inspect(MyModule.function())"
2. Source Code Navigation - Tidewave First
Before using Grep, Glob, or Read for Elixir code:
mcp__tidewave__get_source_location - Find exact file locations instantly
- Works with:
Module,Module.function,Module.function/arity - Find dependencies:
"dep:package_name" - FASTER than grep/glob for known modules
mcp__tidewave__get_docs - Get documentation without reading files
- Module docs:
"MyModule" - Function docs:
"MyModule.function/2" - Callback docs:
"c:GenServer.init/1"
Example:
- ❌ WRONG:
grep: pattern: "defmodule Worker" - ✅ RIGHT:
mcp__tidewave__get_source_location: reference: "MyApp.Worker"
3. Database Operations - Direct SQL Execution
mcp__tidewave__execute_sql_query - Run SQL directly against Ecto repos
- Inspect database schema
- Query data (limited to 50 rows, use LIMIT/OFFSET for more)
- Supports parameterized queries
- Auto-detects available repositories
- Returns native Elixir data structures
mcp__tidewave__get_ecto_schemas - List all schemas and their locations
- ALWAYS use this before searching for schema files
- Returns module names with file paths
Example:
- ❌ WRONG:
bash: psql -c "SELECT * FROM users" - ✅ RIGHT:
mcp__tidewave__execute_sql_query: query: "SELECT * FROM users LIMIT 10"
4. Dependency Documentation
mcp__tidewave__search_package_docs - Search Hex documentation
- Searches project dependencies by default
- Can target specific packages
- Use BEFORE trying to read dependency source code
5. Error Diagnosis
mcp__tidewave__get_logs - Get application logs
- Filter with regex patterns
- Tail recent entries
- Essential for debugging runtime issues
Workflow Patterns
Understanding a Module
- FIRST:
mcp__tidewave__get_docs- Get documentation - THEN:
mcp__tidewave__get_source_location- Find the file - THEN:
mcp__tidewave__project_evalwithexports(Module)- List functions - FINALLY: Read the file if needed for implementation details
Testing Code Changes
- ALWAYS: Test with
mcp__tidewave__project_evalbefore writing - Example:
code: "MyModule.new_function(:test_input) |> IO.inspect()" - Verify behavior matches expectations
- Only then modify the actual file
Database Work
- START:
mcp__tidewave__get_ecto_schemas- Understand data models - EXPLORE:
mcp__tidewave__execute_sql_query- Inspect actual data - TEST:
mcp__tidewave__project_eval- Test Ecto queries - IMPLEMENT: Make schema/migration changes
Debugging Issues
- CHECK:
mcp__tidewave__get_logs- Recent errors - LOCATE:
mcp__tidewave__get_source_location- Find problem code - TEST:
mcp__tidewave__project_eval- Reproduce issue - FIX: Edit the file with the solution
IEx Helpers Available in project_eval
h(Module)- Get help for a moduleexports(Module)- List all exported functionsi(value)- Inspect data structure infot(Module)- Show types defined in moduleb(Module)- Show behaviours module implementsarguments- Access passed arguments array
Database Query Gotchas
When using execute_sql_query:
- UUIDs return as 16-byte binaries - cast with
::text(PostgreSQL) - Results limited to 50 rows - use LIMIT/OFFSET for pagination
- Use parameterized queries:
query: "SELECT * FROM users WHERE id = $1", arguments: [123]
Common Mistakes to Avoid
❌ DON'T:
- Use
bashto runmixcommands for code evaluation - Use
grepto find module definitions when you know the module name - Read entire files to find function documentation
- Run
iexin bash instead of usingproject_eval - Search file system for Ecto schemas before using
get_ecto_schemas
✅ DO:
- Use
project_evalfor ALL Elixir code execution - Use
get_source_locationfor known modules - Use
get_docsfor documentation - Use
get_ecto_schemasfirst for schema discovery - Use Tidewave MCP tools as your primary interface
Remember: Tidewave Is Your Superpower
The Tidewave MCP server gives you:
- Direct access to the running Elixir application
- Instant code evaluation with full project context
- Database introspection without external tools
- Documentation at your fingertips
- Source navigation faster than file search
Every time you reach for Bash, Grep, or Read for Elixir code, ask yourself: "Can Tidewave MCP do this better?" The answer is almost always YES.