Current section

Files

Jump to
ectomancer priv demo.cast
Raw

priv/demo.cast

{"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"]