Skip to main content

Discovery Tools

UbiMCP exposes a small fixed set of tools to the LLM. The LLM uses these to find the right underlying capability on demand, rather than seeing every enabled database tool up front. This page documents the six core tools.

If you are an end user, you generally do not need to read this; the LLM calls these tools automatically. The reference is here for developers building agents directly against UbiMCP.

search_tools

Semantic search across every tool in every enabled server.

search_tools(query: str, limit: int = 10, server: str | None = None)

Returns ranked matches with the server name, tool name, description, and a relevance score. Use this when you know what capability you want but not which server provides it.

Example:

search_tools("FDA adverse event reports for trastuzumab deruxtecan")

discover_servers

List the servers currently loaded by the composition server. Use scope="ubi-bio" for the enabled biomedical data sources.

discover_servers(scope: str | None = None, category: str | None = None)

Common calls:

discover_servers(scope="ubi-bio")
discover_servers(category="chemical")

Categories in the enabled public set include knowledge, clinical, expression, genomic, chemical, disease, protein, and molecular.

discover_tools

List the tools belonging to one server, with one-line descriptions.

discover_tools(server: str, category: str | None = None)

get_tool_schema

Return the JSON schema for one tool's parameters. Use this before calling execute_tool if you need to verify required fields and types.

get_tool_schema(tool_name: str)

execute_tool

The single call that runs anything. The first argument is the server, the second the tool name, and the third the parameter dictionary.

execute_tool(server: str, tool_name: str, params: dict)

Example:

execute_tool(
server="opentargets",
tool_name="search",
params={"query": "BRCA1", "entity_types": ["target"]}
)

health_check

Returns server status and the list of currently enabled sub-servers. Useful as a connectivity probe.

health_check()

A well-prompted agent typically follows this pattern:

  1. Call search_tools with a natural-language description of what is needed.
  2. If unsure, call get_tool_schema on the top hit.
  3. Call execute_tool with the chosen server, tool, and parameters.
  4. If results are empty or wrong, return to step 1 with a refined query.

This is the same pattern recommended for large MCP servers in the official Anthropic guidance and works well across Claude, GPT, and open models.