{"version":3,"term":{"cols":80,"rows":24},"timestamp":1782327817,"command":"/usr/bin/python3 /tmp/ectomancer_demo/record_demo.py","env":{"SHELL":"/bin/zsh"}}
[0.044, "o", "\r\n============================================================\r\n  ECTOMANCER MCP DEMO\r\n============================================================\r\n\r\n  Auto-generated MCP tools from Ecto schemas\r\n"]
[0.505, "o", "\r\n  Step 1: The MCP Module (3 schemas, zero boilerplate)\r\n  --------------------------------------------------\r\n"]
[0.001, "o", "  defmodule EctomancerDemo.MCP do\r\n    use Ectomancer,\r\n      name: \"ectomancer-demo\",\r\n      version: \"1.0.0\"\r\n  \r\n    expose EctomancerDemo.User,\r\n      actions: [:list, :get, :create, :update, :destroy]\r\n  \r\n    expose EctomancerDemo.Post,\r\n      actions: [:list, :get, :create, :update, :destroy]\r\n  \r\n"]
[0.000, "o", "    expose EctomancerDemo.Comment,\r\n      actions: [:list, :get, :create, :update, :destroy]\r\n  end\r\n\r\n"]
[1.005, "o", "\r\n  Step 2: Initialize MCP Session\r\n  --------------------------------------------------\r\n  Connecting to server...\r\n"]
[0.036, "o", "  Connected to ectomancer-demo v1.0.0\r\n  Sending initialized notification...\r\n"]
[0.025, "o", "  Session ready!\r\n\r\n"]
[0.503, "o", "\r\n  Step 3: Discover Tools (tools/list)\r\n  --------------------------------------------------\r\n"]
[0.036, "o", "  15 tools auto-generated from 3 schemas:\r\n\r\n    * create_comment  --  Create a new comment\r\n    * create_post  --  Create a new post\r\n    * create_user  --  Create a new user\r\n    * destroy_comment  --  Delete a comment\r\n    * destroy_post  --  Delete a post\r\n    * destroy_user  --  Delete a user\r\n    * get_comment  --  Get a comment by ID\r\n    * get_post  --  Get a post by ID\r\n    * get_user  --  Get a user by ID\r\n    * list_comments  --  List all comments\r\n    * list_posts  --  List all posts\r\n    * list_users  --  List all users\r\n    * update_comment  --  Update an existing comment\r\n    * update_post  --  Update an existing post\r\n    * update_user  --  Update an existing user\r\n"]
[0.000, "o", "\r\n"]
[0.505, "o", "\r\n  Step 4: List Users\r\n  --------------------------------------------------\r\n"]
[0.038, "o", "  [%EctomancerDemo.User{__meta__: #Ecto.Schema.Metadata<:loaded, \"users\">, id: 1, name: \"Alice\", email: \"alice@example.com\", posts: #Ecto.Association.NotLoaded<association :posts is not loaded>, comments: #Ecto.Association.NotLoaded<association :comments is not loaded>, inserted_at: ~N[2026-06-24 19:03:25], updated_at: ~N[2026-06-24 19:03:25]}, %EctomancerDemo.User{__meta__: #Ecto.Schema.Metadata<:loaded, \"users\">, id: 2, name: \"Bob\", email: \"bob@example.com\", posts: #Ecto.Association.NotLoaded<as\r\n\r\n"]
[0.505, "o", "\r\n  Step 5: Create a New User\r\n  --------------------------------------------------\r\n"]
[0.037, "o", "  %EctomancerDemo.User{__meta__: #Ecto.Schema.Metadata<:loaded, \"users\">, id: 4, name: \"Diana\", email: \"diana@example.com\", posts: #Ecto.Association.NotLoaded<association :posts is not loaded>, comments: #Ecto.Association.NotLoaded<association :comments is not loaded>, inserted_at: ~N[2026-06-24 19:03:40], updated_at: ~N[2026-06-24 19:03:40]}\r\n\r\n"]
[0.503, "o", "\r\n  Step 6: Get User by ID\r\n  --------------------------------------------------\r\n"]
[0.033, "o", "  %EctomancerDemo.User{__meta__: #Ecto.Schema.Metadata<:loaded, \"users\">, id: 1, name: \"Alice\", email: \"alice@example.com\", posts: #Ecto.Association.NotLoaded<association :posts is not loaded>, comments: #Ecto.Association.NotLoaded<association :comments is not loaded>, inserted_at: ~N[2026-06-24 19:03:25], updated_at: ~N[2026-06-24 19:03:25]}\r\n\r\n"]
[0.500, "o", "\r\n  Step 7: List Posts with Filter (title_contains)\r\n  --------------------------------------------------\r\n"]
[0.029, "o", "  [%EctomancerDemo.Post{__meta__: #Ecto.Schema.Metadata<:loaded, \"posts\">, id: 1, title: \"Getting Started with MCP\", body: \"Model Context Protocol lets AI agents interact with your data...\", user_id: 1, user: #Ecto.Association.NotLoaded<association :user is not loaded>, comments: #Ecto.Association.NotLoaded<association :comments is not loaded>, inserted_at: ~N[2026-06-24 19:03:25], updated_at: ~N[2026-06-24 19:03:25]}]\r\n\r\n"]
[0.505, "o", "\r\n  Step 8: Update a User\r\n  --------------------------------------------------\r\n"]
[0.029, "o", "  %EctomancerDemo.User{__meta__: #Ecto.Schema.Metadata<:loaded, \"users\">, id: 4, name: \"Diana Prince\", email: \"diana@example.com\", posts: #Ecto.Association.NotLoaded<association :posts is not loaded>, comments: #Ecto.Association.NotLoaded<association :comments is not loaded>, inserted_at: ~N[2026-06-24 19:03:40], updated_at: ~N[2026-06-24 19:03:41]}\r\n\r\n"]
[0.505, "o", "\r\n  Step 9: List Comments\r\n  --------------------------------------------------\r\n"]
[0.030, "o", "  [%EctomancerDemo.Comment{__meta__: #Ecto.Schema.Metadata<:loaded, \"comments\">, id: 1, content: \"Great post!\", user_id: 2, user: #Ecto.Association.NotLoaded<association :user is not loaded>, post_id: 1, post: #Ecto.Association.NotLoaded<association :post is not loaded>, inserted_at: ~N[2026-06-24 19:03:25], updated_at: ~N[2026-06-24 19:03:25]}, %EctomancerDemo.Comment{__meta__: #Ecto.Schema.Metadata<:loaded, \"comments\">, id: 2, content: \"Thanks for sharing\", user_id: 3, user: #Ecto.Association.No\r\n\r\n"]
[0.503, "o", "\r\n============================================================\r\n  DEMO COMPLETE\r\n============================================================\r\n\r\n  * 3 Ecto schemas -> 15 MCP tools (zero boilerplate)\r\n  * Full CRUD: list, get, create, update, destroy\r\n  * Advanced filtering with LIKE operators\r\n  * API at http://localhost:4000/mcp\r\n\r\n"]
[0.005, "x", "0"]
