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()
Recommended LLM workflow
A well-prompted agent typically follows this pattern:
- Call
search_toolswith a natural-language description of what is needed. - If unsure, call
get_tool_schemaon the top hit. - Call
execute_toolwith the chosen server, tool, and parameters. - 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.