4 tools novas (admin scope, read-only) usadas pelo profile Hermes "construtor" durante criacao guiada de novos agentes: - list_assistants: lista todos os assistants da conta com badge engine (Captain interno vs Hermes), counts de scenarios/FAQs, marca/unidade - get_assistant_pricing: retorna tabela de preços parsed (Captain::Mcp:: PricingTables se Hermes, scenario fallback se Captain interno) - get_assistant_faqs: retorna FAQs aprovados em markdown (até 50) - save_agent_spec: salva JSON da especificacao em /tmp/agent-specs/<slug>.json (NÃO cria filesystem do profile nem registros DB — só persiste spec pra revisao/provisionamento separado depois) Construtor coleta perguntas socraticas, oferece "copiar de existente" pra acelerar quando marca for igual (Prime VL/AL/ADE preços iguais), e ao final salva spec.json pra admin revisar antes de provisionar. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46 lines
1.6 KiB
Ruby
46 lines
1.6 KiB
Ruby
# Registry centralizado das tools MCP do Captain.
|
|
#
|
|
# Adicionar uma tool nova = incluir a classe em TOOLS abaixo. Cada tool
|
|
# herda de Captain::Mcp::Tools::BaseTool e responde a .to_mcp_descriptor
|
|
# (pra `tools/list`) e #call(args, context:) (pra `tools/call`).
|
|
#
|
|
# Hermes consulta tools/list pra saber o que pode chamar e tools/call pra
|
|
# executar. Toda tool aqui está disponível pra qualquer profile do Hermes
|
|
# que se conecte ao MCP server do Captain via `hermes mcp add`.
|
|
class Captain::Mcp::ToolRegistry
|
|
TOOLS = [
|
|
Captain::Mcp::Tools::AddLabelTool,
|
|
Captain::Mcp::Tools::FaqLookupTool,
|
|
Captain::Mcp::Tools::GeneratePixTool,
|
|
Captain::Mcp::Tools::UpdateContactTool,
|
|
Captain::Mcp::Tools::GetContactHistoryTool,
|
|
Captain::Mcp::Tools::CheckPixPaymentTool,
|
|
Captain::Mcp::Tools::SendSuiteImagesTool,
|
|
Captain::Mcp::Tools::RescheduleReservationTool,
|
|
Captain::Mcp::Tools::ReactToMessageTool,
|
|
# Construtor (admin scope) — usadas pelo profile Hermes "construtor" pra criar novos agentes
|
|
Captain::Mcp::Tools::ListAssistantsTool,
|
|
Captain::Mcp::Tools::GetAssistantPricingTool,
|
|
Captain::Mcp::Tools::GetAssistantFaqsTool,
|
|
Captain::Mcp::Tools::SaveAgentSpecTool
|
|
# Captain::Mcp::Tools::HandoffTool — fluxo via automation hoje, MCP futuro
|
|
].freeze
|
|
|
|
class << self
|
|
def descriptors
|
|
TOOLS.map(&:to_mcp_descriptor)
|
|
end
|
|
|
|
def find(name)
|
|
TOOLS.find { |klass| klass.name == name.to_s }
|
|
end
|
|
|
|
def call(name, args, context:)
|
|
klass = find(name)
|
|
raise ArgumentError, "Tool não registrada: #{name}" if klass.nil?
|
|
|
|
klass.new.call(args || {}, context: context || {})
|
|
end
|
|
end
|
|
end
|