20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/rails_mcp/tools/find_record.rb', line 20
def self.call(model:, id:, server_context:, fields: [])
result = Database::RoleProxy.with_role do
klass = Database::ModelResolver.resolve(model)
record = klass.find_by(klass.primary_key => id)
raise Database::ModelResolver::UnknownModel, "#{model} with id=#{id} not found" unless record
allowed = allowed_columns(klass)
resolved = Array(fields).map(&:to_s)
resolved = RailsMcp.configuration.default_fields.map(&:to_s) & allowed if resolved.empty?
unknown = resolved - allowed
raise Database::QueryBuilder::Error, "Unknown field(s): #{unknown.join(", ")}" if unknown.any?
resolved
.reject { |f| RailsMcp.configuration.column_denied?(f) }
.to_h { |f| [f, record.public_send(f)] }
end
MCP::Tool::Response.new([{ type: "text", text: result.to_json }])
end
|