McpToolFactory

interface McpToolFactory

Factory for creating Tools and UnfoldingTools backed by MCP in a consistent way, across MCP providers.

Provides methods to:

Example usage:

val factory: McpToolFactory = SpringAiMcpToolFactory(mcpSyncClients)

// Single tool by name (returns null if not found)
val searchTool = factory.toolByName("brave_search")

// Single tool by name (throws if not found)
val requiredTool = factory.requiredToolByName("brave_search")

// UnfoldingTool with exact tool name whitelist
val githubTool = factory.unfoldingByName(
name = "github_operations",
description = "GitHub operations. Invoke to access GitHub tools.",
toolNames = setOf("create_issue", "list_issues", "get_pull_request")
)

// UnfoldingTool with regex pattern matching
val dbTool = factory.unfoldingMatching(
name = "database_operations",
description = "Database operations. Invoke to access database tools.",
patterns = listOf("^db_".toRegex(), "query.*".toRegex())
)

// UnfoldingTool with custom filter predicate
val webTool = factory.unfolding(
name = "web_operations",
description = "Web operations. Invoke to access web tools.",
filter = { it.toolDefinition.name().startsWith("web_") }
)

See com.embabel.agent.spi.support.springai.SpringAiMcpToolFactory for a Spring-based implementation that creates tools from MCP clients.

Inheritors

Functions

Link copied to clipboard
open fun matryoshka(name: String, description: String, filter: (<Error class: unknown class>) -> Boolean): UnfoldingTool
open fun matryoshka(name: String, description: String, filter: (<Error class: unknown class>) -> Boolean, removeOnInvoke: Boolean): UnfoldingTool
Link copied to clipboard
open fun matryoshkaByName(name: String, description: String, toolNames: Set<String>): UnfoldingTool
open fun matryoshkaByName(name: String, description: String, toolNames: Set<String>, removeOnInvoke: Boolean): UnfoldingTool
Link copied to clipboard
open fun matryoshkaMatching(name: String, description: String, patterns: List<<Error class: unknown class>>): UnfoldingTool
open fun matryoshkaMatching(name: String, description: String, patterns: List<<Error class: unknown class>>, removeOnInvoke: Boolean): UnfoldingTool
Link copied to clipboard
open fun requiredToolByName(toolName: String): Tool

Get a single MCP tool by exact name, throwing if not found.

Link copied to clipboard
abstract fun toolByName(toolName: String): Tool?

Get a single MCP tool by exact name.

Link copied to clipboard
open fun unfolding(name: String, description: String, filter: (<Error class: unknown class>) -> Boolean): UnfoldingTool

Create an UnfoldingTool from MCP clients with a filter predicate, with removeOnInvoke=true.

abstract fun unfolding(name: String, description: String, filter: (<Error class: unknown class>) -> Boolean, removeOnInvoke: Boolean): UnfoldingTool

Create an UnfoldingTool from MCP clients with a filter predicate.

Link copied to clipboard
open fun unfoldingByName(name: String, description: String, toolNames: Set<String>): UnfoldingTool

Create an UnfoldingTool from MCP clients with an exact tool name whitelist, with removeOnInvoke=true.

open fun unfoldingByName(name: String, description: String, toolNames: Set<String>, removeOnInvoke: Boolean): UnfoldingTool

Create an UnfoldingTool from MCP clients with an exact tool name whitelist.

Link copied to clipboard
open fun unfoldingMatching(name: String, description: String, patterns: List<<Error class: unknown class>>): UnfoldingTool

Create an UnfoldingTool from MCP clients filtering by tool name regex patterns, with removeOnInvoke=true.

open fun unfoldingMatching(name: String, description: String, patterns: List<<Error class: unknown class>>, removeOnInvoke: Boolean): UnfoldingTool

Create an UnfoldingTool from MCP clients filtering by tool name regex patterns.