Module: CompletionKit::McpTools::Datasets

Defined in:
app/services/completion_kit/mcp_tools/datasets.rb

Constant Summary collapse

TOOLS =
{
  "datasets_list" => {
    description: "List all datasets",
    inputSchema: {type: "object", properties: {}, required: []},
    handler: :list
  },
  "datasets_get" => {
    description: "Get a dataset by ID",
    inputSchema: {type: "object", properties: {id: {type: "integer"}}, required: ["id"]},
    handler: :get
  },
  "datasets_create" => {
    description: "Create a dataset with CSV data",
    inputSchema: {
      type: "object",
      properties: {name: {type: "string"}, csv_data: {type: "string"}},
      required: ["name", "csv_data"]
    },
    handler: :create
  },
  "datasets_update" => {
    description: "Update a dataset",
    inputSchema: {
      type: "object",
      properties: {id: {type: "integer"}, name: {type: "string"}, csv_data: {type: "string"}},
      required: ["id"]
    },
    handler: :update
  },
  "datasets_delete" => {
    description: "Delete a dataset",
    inputSchema: {type: "object", properties: {id: {type: "integer"}}, required: ["id"]},
    handler: :delete
  }
}.freeze

Class Method Summary collapse

Class Method Details

.call(name, arguments) ⇒ Object



44
45
46
47
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 44

def self.call(name, arguments)
  tool = TOOLS.fetch(name)
  send(tool[:handler], arguments)
end

.create(args) ⇒ Object



57
58
59
60
61
62
63
64
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 57

def self.create(args)
  dataset = Dataset.new(args.slice("name", "csv_data"))
  if dataset.save
    text_result(dataset.as_json)
  else
    error_result(dataset.errors.full_messages.join(", "))
  end
end

.definitionsObject



40
41
42
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 40

def self.definitions
  TOOLS.map { |name, config| {name: name, description: config[:description], inputSchema: config[:inputSchema]} }
end

.delete(args) ⇒ Object



75
76
77
78
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 75

def self.delete(args)
  Dataset.find(args["id"]).destroy!
  text_result("Dataset #{args["id"]} deleted")
end

.error_result(message) ⇒ Object



85
86
87
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 85

def self.error_result(message)
  {content: [{type: "text", text: message}], isError: true}
end

.get(args) ⇒ Object



53
54
55
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 53

def self.get(args)
  text_result(Dataset.find(args["id"]).as_json)
end

.list(_args) ⇒ Object



49
50
51
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 49

def self.list(_args)
  text_result(Dataset.order(created_at: :desc).map(&:as_json))
end

.text_result(data) ⇒ Object



80
81
82
83
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 80

def self.text_result(data)
  text = data.is_a?(String) ? data : data.to_json
  {content: [{type: "text", text: text}]}
end

.update(args) ⇒ Object



66
67
68
69
70
71
72
73
# File 'app/services/completion_kit/mcp_tools/datasets.rb', line 66

def self.update(args)
  dataset = Dataset.find(args["id"])
  if dataset.update(args.except("id").slice("name", "csv_data"))
    text_result(dataset.as_json)
  else
    error_result(dataset.errors.full_messages.join(", "))
  end
end