GustavoZiaugra
Ectomancer - Auto-generate MCP tools from Ecto schemas
Ectomancer automatically exposes Phoenix/Ecto applications as MCP (Model Context Protocol) servers, making them conversationally operable by AI assistants like Claude with minimal configuration.
Key Features
Zero-Config Tool Generation
The expose macro automatically generates MCP tools from your Ecto schemas:
defmodule MyApp.MCP do
use Ectomancer, name: "myapp-mcp"
# Generates: list_users, get_user, create_user, update_user, destroy_user
expose MyApp.Accounts.User
# Filter sensitive fields
expose MyApp.Blog.Post,
only: [:title, :body],
except: [:internal_notes]
end
Authorization System
Production-ready access control with three strategies:
Inline functions for simple checks:
tool :admin_stats do
authorize fn actor, _ -> actor.role == :admin end
end
Policy modules for complex logic:
defmodule MyApp.Policy do
def authorize(actor, action) do
case action do
:list -> :ok
:create when actor.role == :admin -> :ok
_ -> {:error, "Unauthorized"}
end
end
end
tool :user_action do
authorize with: MyApp.Policy
end
Cascade authorization at multiple levels:
expose User,
actions: [:list, :get, :create],
authorize: [
list: :none, # public
get: fn actor, _ -> actor != nil end, # authenticated
create: with: AdminPolicy # policy module
]
Additional Features
• Binary ID/UUID support - Automatic string-to-UUID casting
• Field filtering - :only and :except options
• Namespace support - Prevent tool naming collisions
• Custom tools - Define tools with params for complex operations
• Automatic actor threading - Current user passed to every tool call
Installation
def deps do
[
{:ectomancer, "~> 0.1.0-rc.2"}
]
end
Usage
Add to your router:
scope "/mcp" do
pipe_through :api
forward "/", Ectomancer.Plug, server: MyApp.MCP
end
Current Status
Version 0.1.0-rc.2 is feature-complete with:
• Full CRUD operations (list, get, create, update, destroy)
• Complete authorization system
• Binary ID/UUID support
Questions:
• How are you integrating LLMs with your Phoenix apps?
• What patterns do you use for exposing Ecto schemas to external consumers?
Love to hear more from you guys on this!
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex









