mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.0 KiB
66 lines
2.0 KiB
# frozen_string_literal: true
|
|
|
|
module Mcp
|
|
module Tools
|
|
module SearchDocuments
|
|
SCHEMA = {
|
|
name: 'search_documents',
|
|
title: 'Search Documents',
|
|
description: 'Search signed or pending documents by submitter name, email, phone, or template name',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
q: {
|
|
type: 'string',
|
|
description: 'Search by submitter name, email, phone, or template name'
|
|
},
|
|
limit: {
|
|
type: 'integer',
|
|
description: 'The number of results to return (default 10)'
|
|
}
|
|
},
|
|
required: %w[q]
|
|
},
|
|
annotations: {
|
|
readOnlyHint: true,
|
|
destructiveHint: false,
|
|
idempotentHint: true,
|
|
openWorldHint: false
|
|
}
|
|
}.freeze
|
|
|
|
module_function
|
|
|
|
def call(arguments, current_user, current_ability)
|
|
submissions = Submissions.search(current_user, Submission.accessible_by(current_ability).active,
|
|
arguments['q'], search_template: true)
|
|
|
|
limit = arguments.fetch('limit', 10).to_i
|
|
limit = 10 if limit <= 0
|
|
limit = [limit, 100].min
|
|
submissions = submissions.preload(:submitters, :template)
|
|
.order(id: :desc)
|
|
.limit(limit)
|
|
|
|
data = submissions.map do |submission|
|
|
url = Rails.application.routes.url_helpers.submission_url(
|
|
submission.id, **Docuseal.default_url_options
|
|
)
|
|
|
|
{
|
|
id: submission.id,
|
|
template_name: submission.template&.name,
|
|
status: Submissions::SerializeForApi.build_status(submission, submission.submitters),
|
|
submitters: submission.submitters.map do |s|
|
|
{ email: s.email, name: s.name, phone: s.phone, status: s.status }
|
|
end,
|
|
documents_url: url
|
|
}
|
|
end
|
|
|
|
{ content: [{ type: 'text', text: data.to_json }] }
|
|
end
|
|
end
|
|
end
|
|
end
|