project_evalLABSCO SUMMARY
Runtime truth instead of a guess about the runtime.
An agent that can evaluate code against live state, query the dev database and read the log after a request stops speculating about what the app does — it checks, and the next step is grounded in what came back.
What it is
A plug you add to a Phoenix endpoint in development. It turns the running application into an MCP server, so the agent asks the process that is actually serving requests rather than reasoning from the source tree.
What you get
project_eval— evaluate Elixir inside the running application, with access to your runtime, dependencies and in-memory data. It is an IEx session for the agent, so it can run code rather than assume what a function returnsexecute_sql_query— run SQL against your development database, which is how the agent verifies the result of something it just didget_logs— read what the server wrote, including the request log and backtrace after something misbehavedget_docs— documentation for a module or function, consulted at the exact versions locked in yourmix.lockrather than whatever the model remembersget_source_location— the file and line where a module or function is defined, across your app and its hex dependencies
Requirements
Add {:tidewave, "~> 0.6", only: :dev} to mix.exs and plug Tidewave to your endpoint above the code-reloading block, guarded by Mix.env() == :dev; mix igniter.install tidewave does it for you. Then register an HTTP (streamable) MCP server in your editor pointing at /tidewave/mcp on your app's port, for example http://localhost:4000/tidewave/mcp. Requests are accepted from localhost only unless :allow_remote_access is set, and :allowed_origins guards against cross-origin and DNS rebinding. It works best with Phoenix LiveView v1.1 or later with debug_heex_annotations and debug_attributes enabled — defaults for Phoenix v1.8+ apps. In umbrella projects, apply the steps in the application that defines the endpoint.
Setup effort
One command — mix igniter.install tidewave
USE CASES
Finding out what a function actually returns
The agent runs it in the live app rather than inferring it from the definition, which is the difference between a correct next step and a plausible one.
Reproducing a failing path against real data
Evaluate the code path with the application's in-memory state and dependencies loaded, then read the log for what happened.
Confirming a change landed in the database
Run the SQL yourself instead of trusting that the write went through.
Getting the API right for the version you have
Documentation is read at the versions pinned in your lockfile, so the agent does not offer a function from a release you are not on.
Jumping to where something is defined
File and line for a module or function, including definitions inside a hex dependency, rather than grepping for it.
5 tools
Listed in project docs. Your client may show a different list.
execute_sql_queryget_docsget_logsget_source_locationBEFORE YOU INSTALL
What to know first
Tools you get
5 tools named in the project's documentation.
INSTALLATION
Connect your client
Server setup
Add the tidewave package to mix.exs deps: {:tidewave, "~> 0.6", only: :dev}
In lib/my_app_web/endpoint.ex, right above the if code_reloading? do block, add: if Mix.env() == :dev do / plug Tidewave / end
(Alternative to the two steps above) mix archive.install hex igniter_new, then mix igniter.install tidewave
Add the Tidewave MCP server to your editor / MCP client configuration as type "http" (streamable) pointing at http://localhost:4000/tidewave/mcp