{
  "$type": "site.standard.document",
  "content": "---\ntitle: \"Agentic Elixir superpowers: Zed + Tidewave + AshAI\"\ndescription: \"How to wire up Zed, Tidewave and AshAI as MCP servers for an agentic Elixir\n  development workflow, with a helper script to glue it all together.\"\ntags:\n  - dev\n---\n\nFor a few years now whenever I need to build any sort of networked interactive\nexperience, I reach for Elixir (with Phoenix LiveView and Ash). It's an\n_extremely_ productive combination, especially when you want to do more complex\nclient/server information flows than the standard request/response UX. I've also\n(for the last year or two) ditched Emacs for [Zed](https://zed.dev). Again, if\nyou take the time to master these tools I think they're excellent.\n\nLike every indie hacker and their wombat I'm experimenting with LLM Agents as\npart of my software development workflow. The new frontier (which I'm excited\nabout, but ask me in a few months how it's gone) is putting all of the above\ntogether. If you'd like to do that too, and want to see a real-world example of\nhow these things can be plugged into one another, here's my setup.\n\n- Zed as the text editor/MCP host\n- both [Tidewave](https://hexdocs.pm/tidewave/zed.html) and\n  [AshAI](https://hexdocs.pm/ash_ai/readme.html) as MCP servers\n\nThen, my Zed settings file has this MCP server configuration:\n\n```json\n\"context_servers\": {\n  \"ash_ai\": {\n    \"command\": {\n      \"path\": \"mcp-proxy\",\n      \"args\": [\"http://localhost:4000/ash_ai/mcp\"],\n      \"env\": {}\n    },\n    \"settings\": {}\n  },\n  \"tidewave\": {\n    \"command\": {\n      \"path\": \"mcp-proxy\",\n      \"args\": [\"http://localhost:4000/tidewave/mcp\"],\n      \"env\": {}\n    },\n    \"settings\": {}\n  }\n},\n```\n\nEven after following the instructions for those tools, you'll need a way to set\nup all the proxies and pipe everything together. I wrote\n[this script](https://github.com/benswift/.dotfiles/blob/master/bin/tidewave-proxy.sh),\nwhich you're free to use (MIT Licence) if it helps.\n\nPut it on your `~PATH` and then (in your Phoenix project root) run it like so:\n\n```\n[16:03] daysy:panic $ tidewave-proxy.sh\nšŸš€ MCP Proxy Development Environment\n====================================\nConfiguration:\n  Host: localhost\n  Port: 4000\n  Ash AI MCP: http://localhost:4000/ash_ai/mcp\n  Tidewave MCP: http://localhost:4000/tidewave/mcp\n\nšŸ”— Starting mcp-proxy instances...\nStarting mcp-proxy for ash_ai...\nāœ… mcp-proxy for ash_ai started (PID: 88815)\n   Log file: /tmp/mcp_ash_ai.log\nStarting mcp-proxy for tidewave...\nāœ… mcp-proxy for tidewave started (PID: 88816)\n   Log file: /tmp/mcp_tidewave.log\n\nšŸŽ‰ MCP Proxy environment is ready!\n=====================================\n\nAvailable MCP Servers:\n  šŸ“Š Ash AI MCP:    http://localhost:4000/ash_ai/mcp\n  🌊 Tidewave MCP:  http://localhost:4000/tidewave/mcp\n\nMCP Proxy Commands:\n  For Ash AI:    mcp-proxy http://localhost:4000/ash_ai/mcp\n  For Tidewave:  mcp-proxy http://localhost:4000/tidewave/mcp\n\nNext Steps:\n1. Configure your MCP client (Zed, Claude Desktop, etc.)\n2. Use the endpoints above with your MCP client\n3. Test with: curl -H 'Accept: application/json' <endpoint>\n\nLog Files:\n  Ash AI Proxy: /tmp/mcp_ash_ai.log\n  Tidewave Proxy: /tmp/mcp_tidewave.log\n\nPress Ctrl+C to stop all services and clean up\n\nšŸ”„ Starting Phoenix development server with REPL...\n==================================================\nErlang/OTP 27 [erts-15.2.5] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit]\n\n[info] Migrations already up\n[info] Running PanicWeb.Endpoint with Bandit 1.7.0 at 127.0.0.1:4000 (http)\n[info] Access PanicWeb.Endpoint at http://localhost:4000\nInteractive Elixir (1.18.4) - press Ctrl+C to exit (type h() ENTER for help)\n[watch] build finished, watching for changes...\n\nRebuilding...\n\nDone in 196ms.\n```\n\nThen, to test, in the Agent panel try something like:\n\n```\nUse the tidewave project eval tool to add 10+15 in Elixir.\n```\n\nIf everything's hooked up right, you'll get the answer.\n\nOne other tip: make sure you're using OTP27 rather than the (newest)\nOTP28---there's an error on one of the AshAI deps which stops it compiling on\nthe latest OTP. I suspect it'll be fixed soon, though.\n",
  "createdAt": "2026-05-13T23:14:44.599Z",
  "description": "How to wire up Zed, Tidewave and AshAI as MCP servers for an agentic Elixir development workflow, with a helper script to glue it all together.",
  "path": "/blog/2025/06/06/agentic-elixir-superpowers-zed-tidewave-ashai",
  "publishedAt": "2025-06-06T00:00:00.000Z",
  "site": "at://did:plc:tevykrhi4kibtsipzci76d76/site.standard.publication/self",
  "tags": [
    "dev"
  ],
  "textContent": "How to wire up Zed, Tidewave and AshAI as MCP servers for an agentic Elixir development workflow, with a helper script to glue it all together.",
  "title": "Agentic Elixir superpowers: Zed + Tidewave + AshAI"
}